From c84cf647bef80dd1f3766890d4215e85725ae85a Mon Sep 17 00:00:00 2001 From: Sri ram Date: Thu, 19 Nov 2020 17:01:07 +0530 Subject: [PATCH] Adding Bouncer xapp and E2 Simulator code for RIC-Benchmarking Issue-ID: RIC-150 & RIC-633 Signed-off-by: Sri ram Signed-off-by: Himesh Shukla Change-Id: I36cf6469fc70828e18a739567a0b55965a012f38 --- ric_benchmarking/Bouncer/Dockerfile | 159 + ric_benchmarking/Bouncer/README | 43 + ric_benchmarking/Bouncer/asn1c_defs/ANY.c | 450 + ric_benchmarking/Bouncer/asn1c_defs/ANY.h | 65 + .../Bouncer/asn1c_defs/B-ControlCommand.c | 55 + .../Bouncer/asn1c_defs/B-ControlCommand.h | 52 + ric_benchmarking/Bouncer/asn1c_defs/B-Header.c | 31 + ric_benchmarking/Bouncer/asn1c_defs/B-Header.h | 43 + ric_benchmarking/Bouncer/asn1c_defs/B-Message.c | 31 + ric_benchmarking/Bouncer/asn1c_defs/B-Message.h | 43 + .../Bouncer/asn1c_defs/B-TriggerNature.c | 55 + .../Bouncer/asn1c_defs/B-TriggerNature.h | 54 + ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.c | 656 + ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.h | 48 + ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.c | 492 + ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.h | 45 + ric_benchmarking/Bouncer/asn1c_defs/Cause.c | 92 + ric_benchmarking/Bouncer/asn1c_defs/Cause.h | 68 + ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.c | 59 + ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.h | 56 + .../Bouncer/asn1c_defs/CauseProtocol.c | 65 + .../Bouncer/asn1c_defs/CauseProtocol.h | 59 + ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.c | 73 + ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.h | 63 + .../Bouncer/asn1c_defs/CauseRICservice.c | 57 + .../Bouncer/asn1c_defs/CauseRICservice.h | 55 + .../Bouncer/asn1c_defs/CauseTransport.c | 55 + .../Bouncer/asn1c_defs/CauseTransport.h | 54 + ric_benchmarking/Bouncer/asn1c_defs/Criticality.c | 55 + ric_benchmarking/Bouncer/asn1c_defs/Criticality.h | 52 + .../asn1c_defs/CriticalityDiagnostics-IE-Item.c | 70 + .../asn1c_defs/CriticalityDiagnostics-IE-Item.h | 48 + .../asn1c_defs/CriticalityDiagnostics-IE-List.c | 50 + .../asn1c_defs/CriticalityDiagnostics-IE-List.h | 44 + .../Bouncer/asn1c_defs/CriticalityDiagnostics.c | 94 + .../Bouncer/asn1c_defs/CriticalityDiagnostics.h | 52 + ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.c | 75 + ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.h | 61 + .../E2SM-Bouncer-ActionDefinition-Format1.c | 126 + .../E2SM-Bouncer-ActionDefinition-Format1.h | 53 + .../asn1c_defs/E2SM-Bouncer-ActionDefinition.c | 53 + .../asn1c_defs/E2SM-Bouncer-ActionDefinition.h | 55 + .../E2SM-Bouncer-ControlHeader-Format1.c | 50 + .../E2SM-Bouncer-ControlHeader-Format1.h | 44 + .../asn1c_defs/E2SM-Bouncer-ControlHeader.c | 53 + .../asn1c_defs/E2SM-Bouncer-ControlHeader.h | 55 + .../E2SM-Bouncer-ControlMessage-Format1.c | 50 + .../E2SM-Bouncer-ControlMessage-Format1.h | 44 + .../asn1c_defs/E2SM-Bouncer-ControlMessage.c | 53 + .../asn1c_defs/E2SM-Bouncer-ControlMessage.h | 55 + .../E2SM-Bouncer-EventTriggerDefinition-Format1.c | 50 + .../E2SM-Bouncer-EventTriggerDefinition-Format1.h | 44 + .../E2SM-Bouncer-EventTriggerDefinition.c | 53 + .../E2SM-Bouncer-EventTriggerDefinition.h | 55 + .../E2SM-Bouncer-IndicationHeader-Format1.c | 50 + .../E2SM-Bouncer-IndicationHeader-Format1.h | 44 + .../asn1c_defs/E2SM-Bouncer-IndicationHeader.c | 53 + .../asn1c_defs/E2SM-Bouncer-IndicationHeader.h | 55 + .../E2SM-Bouncer-IndicationMessage-Format1.c | 50 + .../E2SM-Bouncer-IndicationMessage-Format1.h | 44 + .../asn1c_defs/E2SM-Bouncer-IndicationMessage.c | 53 + .../asn1c_defs/E2SM-Bouncer-IndicationMessage.h | 55 + .../Bouncer/asn1c_defs/E2setupFailure.c | 50 + .../Bouncer/asn1c_defs/E2setupFailure.h | 44 + .../Bouncer/asn1c_defs/E2setupRequest.c | 50 + .../Bouncer/asn1c_defs/E2setupRequest.h | 44 + .../Bouncer/asn1c_defs/E2setupResponse.c | 50 + .../Bouncer/asn1c_defs/E2setupResponse.h | 44 + .../Bouncer/asn1c_defs/ENB-ID-Choice.c | 180 + .../Bouncer/asn1c_defs/ENB-ID-Choice.h | 60 + ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.c | 226 + ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.h | 61 + ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.c | 88 + ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.h | 56 + .../Bouncer/asn1c_defs/ErrorIndication.c | 50 + .../Bouncer/asn1c_defs/ErrorIndication.h | 44 + ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.c | 67 + ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.h | 44 + ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.c | 67 + ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.h | 44 + .../Bouncer/asn1c_defs/GNB-ID-Choice.c | 88 + .../Bouncer/asn1c_defs/GNB-ID-Choice.h | 56 + .../Bouncer/asn1c_defs/GlobalE2node-ID.c | 86 + .../Bouncer/asn1c_defs/GlobalE2node-ID.h | 64 + .../Bouncer/asn1c_defs/GlobalE2node-eNB-ID.c | 50 + .../Bouncer/asn1c_defs/GlobalE2node-eNB-ID.h | 44 + .../Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.c | 50 + .../Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.h | 44 + .../Bouncer/asn1c_defs/GlobalE2node-gNB-ID.c | 72 + .../Bouncer/asn1c_defs/GlobalE2node-gNB-ID.h | 48 + .../Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.c | 50 + .../Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.h | 44 + ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.c | 60 + ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.h | 46 + ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.c | 96 + ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.h | 44 + .../Bouncer/asn1c_defs/GlobalenGNB-ID.c | 60 + .../Bouncer/asn1c_defs/GlobalenGNB-ID.h | 46 + ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.c | 60 + ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.h | 46 + .../Bouncer/asn1c_defs/GlobalngeNB-ID.c | 60 + .../Bouncer/asn1c_defs/GlobalngeNB-ID.h | 46 + ric_benchmarking/Bouncer/asn1c_defs/INTEGER.c | 1735 + ric_benchmarking/Bouncer/asn1c_defs/INTEGER.h | 108 + .../Bouncer/asn1c_defs/InitiatingMessage.c | 389 + .../Bouncer/asn1c_defs/InitiatingMessage.h | 97 + ric_benchmarking/Bouncer/asn1c_defs/NULL.c | 299 + ric_benchmarking/Bouncer/asn1c_defs/NULL.h | 45 + .../Bouncer/asn1c_defs/NativeEnumerated.c | 367 + .../Bouncer/asn1c_defs/NativeEnumerated.h | 45 + .../Bouncer/asn1c_defs/NativeInteger.c | 550 + .../Bouncer/asn1c_defs/NativeInteger.h | 46 + .../Bouncer/asn1c_defs/OBJECT_IDENTIFIER.c | 656 + .../Bouncer/asn1c_defs/OBJECT_IDENTIFIER.h | 156 + ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.c | 2409 + ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.h | 102 + ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.c | 509 + ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.h | 77 + .../Bouncer/asn1c_defs/PLMN-Identity.c | 62 + .../Bouncer/asn1c_defs/PLMN-Identity.h | 44 + ric_benchmarking/Bouncer/asn1c_defs/Presence.c | 55 + ric_benchmarking/Bouncer/asn1c_defs/Presence.h | 52 + .../Bouncer/asn1c_defs/PrintableString.c | 130 + .../Bouncer/asn1c_defs/PrintableString.h | 37 + .../Bouncer/asn1c_defs/ProcedureCode.c | 61 + .../Bouncer/asn1c_defs/ProcedureCode.h | 53 + .../Bouncer/asn1c_defs/ProtocolIE-Container.c | 810 + .../Bouncer/asn1c_defs/ProtocolIE-Container.h | 253 + .../Bouncer/asn1c_defs/ProtocolIE-ContainerList.c | 9 + .../Bouncer/asn1c_defs/ProtocolIE-ContainerList.h | 23 + .../Bouncer/asn1c_defs/ProtocolIE-ContainerPair.c | 9 + .../Bouncer/asn1c_defs/ProtocolIE-ContainerPair.h | 23 + .../asn1c_defs/ProtocolIE-ContainerPairList.c | 9 + .../asn1c_defs/ProtocolIE-ContainerPairList.h | 23 + .../Bouncer/asn1c_defs/ProtocolIE-Field.c | 7190 ++ .../Bouncer/asn1c_defs/ProtocolIE-Field.h | 757 + .../Bouncer/asn1c_defs/ProtocolIE-FieldPair.c | 9 + .../Bouncer/asn1c_defs/ProtocolIE-FieldPair.h | 23 + .../Bouncer/asn1c_defs/ProtocolIE-ID.c | 61 + .../Bouncer/asn1c_defs/ProtocolIE-ID.h | 76 + .../asn1c_defs/ProtocolIE-SingleContainer.c | 147 + .../asn1c_defs/ProtocolIE-SingleContainer.h | 108 + .../Bouncer/asn1c_defs/RANfunction-Item.c | 70 + .../Bouncer/asn1c_defs/RANfunction-Item.h | 46 + .../Bouncer/asn1c_defs/RANfunctionDefinition.c | 31 + .../Bouncer/asn1c_defs/RANfunctionDefinition.h | 43 + .../Bouncer/asn1c_defs/RANfunctionID-Item.c | 60 + .../Bouncer/asn1c_defs/RANfunctionID-Item.h | 44 + .../Bouncer/asn1c_defs/RANfunctionID.c | 61 + .../Bouncer/asn1c_defs/RANfunctionID.h | 44 + .../Bouncer/asn1c_defs/RANfunctionIDcause-Item.c | 60 + .../Bouncer/asn1c_defs/RANfunctionIDcause-Item.h | 44 + .../Bouncer/asn1c_defs/RANfunctionRevision.c | 61 + .../Bouncer/asn1c_defs/RANfunctionRevision.h | 44 + .../Bouncer/asn1c_defs/RANfunctions-List.c | 50 + .../Bouncer/asn1c_defs/RANfunctions-List.h | 41 + .../Bouncer/asn1c_defs/RANfunctionsID-List.c | 50 + .../Bouncer/asn1c_defs/RANfunctionsID-List.h | 41 + .../Bouncer/asn1c_defs/RANfunctionsIDcause-List.c | 50 + .../Bouncer/asn1c_defs/RANfunctionsIDcause-List.h | 41 + .../Bouncer/asn1c_defs/RANparameter-ID.c | 61 + .../Bouncer/asn1c_defs/RANparameter-ID.h | 44 + .../Bouncer/asn1c_defs/RANparameter-Item.c | 80 + .../Bouncer/asn1c_defs/RANparameter-Item.h | 50 + .../Bouncer/asn1c_defs/RANparameter-Name.c | 31 + .../Bouncer/asn1c_defs/RANparameter-Name.h | 43 + .../Bouncer/asn1c_defs/RANparameter-Test.c | 61 + .../Bouncer/asn1c_defs/RANparameter-Test.h | 57 + .../Bouncer/asn1c_defs/RANparameter-Value.c | 31 + .../Bouncer/asn1c_defs/RANparameter-Value.h | 43 + .../Bouncer/asn1c_defs/RICaction-Admitted-Item.c | 50 + .../Bouncer/asn1c_defs/RICaction-Admitted-Item.h | 42 + .../Bouncer/asn1c_defs/RICaction-Admitted-List.c | 50 + .../Bouncer/asn1c_defs/RICaction-Admitted-List.h | 41 + .../asn1c_defs/RICaction-NotAdmitted-Item.c | 60 + .../asn1c_defs/RICaction-NotAdmitted-Item.h | 44 + .../asn1c_defs/RICaction-NotAdmitted-List.c | 50 + .../asn1c_defs/RICaction-NotAdmitted-List.h | 41 + .../Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.c | 83 + .../Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.h | 50 + .../Bouncer/asn1c_defs/RICactionDefinition.c | 31 + .../Bouncer/asn1c_defs/RICactionDefinition.h | 43 + ric_benchmarking/Bouncer/asn1c_defs/RICactionID.c | 61 + ric_benchmarking/Bouncer/asn1c_defs/RICactionID.h | 44 + .../Bouncer/asn1c_defs/RICactionType.c | 57 + .../Bouncer/asn1c_defs/RICactionType.h | 55 + .../Bouncer/asn1c_defs/RICactions-ToBeSetup-List.c | 50 + .../Bouncer/asn1c_defs/RICactions-ToBeSetup-List.h | 44 + .../Bouncer/asn1c_defs/RICcallProcessID.c | 31 + .../Bouncer/asn1c_defs/RICcallProcessID.h | 43 + .../Bouncer/asn1c_defs/RICcontrolAckRequest.c | 57 + .../Bouncer/asn1c_defs/RICcontrolAckRequest.h | 53 + .../Bouncer/asn1c_defs/RICcontrolAcknowledge.c | 50 + .../Bouncer/asn1c_defs/RICcontrolAcknowledge.h | 44 + .../Bouncer/asn1c_defs/RICcontrolFailure.c | 50 + .../Bouncer/asn1c_defs/RICcontrolFailure.h | 44 + .../Bouncer/asn1c_defs/RICcontrolHeader.c | 31 + .../Bouncer/asn1c_defs/RICcontrolHeader.h | 43 + .../Bouncer/asn1c_defs/RICcontrolMessage.c | 31 + .../Bouncer/asn1c_defs/RICcontrolMessage.h | 43 + .../Bouncer/asn1c_defs/RICcontrolOutcome.c | 31 + .../Bouncer/asn1c_defs/RICcontrolOutcome.h | 43 + .../Bouncer/asn1c_defs/RICcontrolRequest.c | 50 + .../Bouncer/asn1c_defs/RICcontrolRequest.h | 44 + .../Bouncer/asn1c_defs/RICcontrolStatus.c | 57 + .../Bouncer/asn1c_defs/RICcontrolStatus.h | 53 + .../Bouncer/asn1c_defs/RICeventTriggerDefinition.c | 31 + .../Bouncer/asn1c_defs/RICeventTriggerDefinition.h | 43 + .../Bouncer/asn1c_defs/RICindication.c | 50 + .../Bouncer/asn1c_defs/RICindication.h | 44 + .../Bouncer/asn1c_defs/RICindicationHeader.c | 31 + .../Bouncer/asn1c_defs/RICindicationHeader.h | 43 + .../Bouncer/asn1c_defs/RICindicationMessage.c | 31 + .../Bouncer/asn1c_defs/RICindicationMessage.h | 43 + .../Bouncer/asn1c_defs/RICindicationSN.c | 61 + .../Bouncer/asn1c_defs/RICindicationSN.h | 43 + .../Bouncer/asn1c_defs/RICindicationType.c | 55 + .../Bouncer/asn1c_defs/RICindicationType.h | 52 + ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.c | 120 + ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.h | 45 + .../Bouncer/asn1c_defs/RICserviceQuery.c | 50 + .../Bouncer/asn1c_defs/RICserviceQuery.h | 44 + .../Bouncer/asn1c_defs/RICserviceUpdate.c | 50 + .../Bouncer/asn1c_defs/RICserviceUpdate.h | 44 + .../asn1c_defs/RICserviceUpdateAcknowledge.c | 50 + .../asn1c_defs/RICserviceUpdateAcknowledge.h | 44 + .../Bouncer/asn1c_defs/RICserviceUpdateFailure.c | 50 + .../Bouncer/asn1c_defs/RICserviceUpdateFailure.h | 44 + .../asn1c_defs/RICsubscriptionDeleteFailure.c | 50 + .../asn1c_defs/RICsubscriptionDeleteFailure.h | 44 + .../asn1c_defs/RICsubscriptionDeleteRequest.c | 50 + .../asn1c_defs/RICsubscriptionDeleteRequest.h | 44 + .../asn1c_defs/RICsubscriptionDeleteResponse.c | 50 + .../asn1c_defs/RICsubscriptionDeleteResponse.h | 44 + .../Bouncer/asn1c_defs/RICsubscriptionDetails.c | 60 + .../Bouncer/asn1c_defs/RICsubscriptionDetails.h | 44 + .../Bouncer/asn1c_defs/RICsubscriptionFailure.c | 50 + .../Bouncer/asn1c_defs/RICsubscriptionFailure.h | 44 + .../Bouncer/asn1c_defs/RICsubscriptionRequest.c | 50 + .../Bouncer/asn1c_defs/RICsubscriptionRequest.h | 44 + .../Bouncer/asn1c_defs/RICsubscriptionResponse.c | 50 + .../Bouncer/asn1c_defs/RICsubscriptionResponse.h | 44 + .../Bouncer/asn1c_defs/RICsubsequentAction.c | 60 + .../Bouncer/asn1c_defs/RICsubsequentAction.h | 46 + .../Bouncer/asn1c_defs/RICsubsequentActionType.c | 55 + .../Bouncer/asn1c_defs/RICsubsequentActionType.h | 54 + .../Bouncer/asn1c_defs/RICtimeToWait.c | 87 + .../Bouncer/asn1c_defs/RICtimeToWait.h | 70 + ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.c | 50 + ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.h | 44 + .../Bouncer/asn1c_defs/ResetResponse.c | 50 + .../Bouncer/asn1c_defs/ResetResponse.h | 44 + .../Bouncer/asn1c_defs/SuccessfulOutcome.c | 359 + .../Bouncer/asn1c_defs/SuccessfulOutcome.h | 91 + ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.c | 63 + ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.h | 56 + .../Bouncer/asn1c_defs/TriggeringMessage.c | 55 + .../Bouncer/asn1c_defs/TriggeringMessage.h | 52 + ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.c | 55 + ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.h | 54 + .../Bouncer/asn1c_defs/UnsuccessfulOutcome.c | 349 + .../Bouncer/asn1c_defs/UnsuccessfulOutcome.h | 89 + .../Bouncer/asn1c_defs/asn_SEQUENCE_OF.c | 41 + .../Bouncer/asn1c_defs/asn_SEQUENCE_OF.h | 52 + ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.c | 88 + ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.h | 72 + .../Bouncer/asn1c_defs/asn_application.c | 481 + .../Bouncer/asn1c_defs/asn_application.h | 171 + ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.c | 333 + ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.h | 83 + ric_benchmarking/Bouncer/asn1c_defs/asn_codecs.h | 108 + .../Bouncer/asn1c_defs/asn_codecs_prim.c | 317 + .../Bouncer/asn1c_defs/asn_codecs_prim.h | 51 + ric_benchmarking/Bouncer/asn1c_defs/asn_constant.h | 23 + ric_benchmarking/Bouncer/asn1c_defs/asn_internal.c | 48 + ric_benchmarking/Bouncer/asn1c_defs/asn_internal.h | 159 + ric_benchmarking/Bouncer/asn1c_defs/asn_ioc.h | 51 + .../Bouncer/asn1c_defs/asn_random_fill.c | 56 + .../Bouncer/asn1c_defs/asn_random_fill.h | 51 + ric_benchmarking/Bouncer/asn1c_defs/asn_system.h | 150 + ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.c | 283 + ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.h | 66 + .../Bouncer/asn1c_defs/ber_tlv_length.c | 168 + .../Bouncer/asn1c_defs/ber_tlv_length.h | 50 + ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.c | 144 + ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.h | 60 + .../Bouncer/asn1c_defs/constr_CHOICE.c | 1511 + .../Bouncer/asn1c_defs/constr_CHOICE.h | 80 + .../Bouncer/asn1c_defs/constr_SEQUENCE.c | 2059 + .../Bouncer/asn1c_defs/constr_SEQUENCE.h | 68 + .../Bouncer/asn1c_defs/constr_SEQUENCE_OF.c | 358 + .../Bouncer/asn1c_defs/constr_SEQUENCE_OF.h | 41 + .../Bouncer/asn1c_defs/constr_SET_OF.c | 1441 + .../Bouncer/asn1c_defs/constr_SET_OF.h | 49 + ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.c | 80 + ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.h | 262 + ric_benchmarking/Bouncer/asn1c_defs/constraints.c | 93 + ric_benchmarking/Bouncer/asn1c_defs/constraints.h | 62 + ric_benchmarking/Bouncer/asn1c_defs/der_encoder.c | 194 + ric_benchmarking/Bouncer/asn1c_defs/der_encoder.h | 68 + .../Bouncer/asn1c_defs/pdu_collection.c | 30 + ric_benchmarking/Bouncer/asn1c_defs/per_decoder.c | 185 + ric_benchmarking/Bouncer/asn1c_defs/per_decoder.h | 82 + ric_benchmarking/Bouncer/asn1c_defs/per_encoder.c | 265 + ric_benchmarking/Bouncer/asn1c_defs/per_encoder.h | 93 + ric_benchmarking/Bouncer/asn1c_defs/per_opentype.c | 533 + ric_benchmarking/Bouncer/asn1c_defs/per_opentype.h | 44 + ric_benchmarking/Bouncer/asn1c_defs/per_support.c | 489 + ric_benchmarking/Bouncer/asn1c_defs/per_support.h | 127 + ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.c | 369 + ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.h | 106 + ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.c | 237 + ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.h | 83 + ric_benchmarking/Bouncer/asn1c_defs/xer_support.c | 227 + ric_benchmarking/Bouncer/asn1c_defs/xer_support.h | 55 + ric_benchmarking/Bouncer/container-tag.yaml | 4 + ric_benchmarking/Bouncer/docs/_static/logo.png | Bin 0 -> 43935 bytes ric_benchmarking/Bouncer/docs/conf.py | 9 + ric_benchmarking/Bouncer/docs/conf.yaml | 3 + .../Bouncer/docs/e2sm-Bouncer-v001.asn | 215 + ric_benchmarking/Bouncer/docs/favicon.ico | Bin 0 -> 15086 bytes ric_benchmarking/Bouncer/docs/index.rst | 32 + .../Bouncer/docs/installation-guide.rst | 77 + ric_benchmarking/Bouncer/docs/overview.rst | 38 + ric_benchmarking/Bouncer/docs/release-notes.rst | 88 + .../Bouncer/docs/requirements-docs.txt | 5 + ric_benchmarking/Bouncer/docs/user-guide.rst | 202 + ric_benchmarking/Bouncer/init/config-file.json | 42 + ric_benchmarking/Bouncer/init/init_script.py | 132 + ric_benchmarking/Bouncer/init/routes.txt | 5 + ric_benchmarking/Bouncer/init/schema.json | 218 + .../Bouncer/releases/container-release-app_hw.yaml | 11 + ric_benchmarking/Bouncer/rmr-version.yaml | 3 + .../Bouncer/schemas/b_xapp-policy.json | 22 + ric_benchmarking/Bouncer/schemas/b_xapp-ves.json | 30 + ric_benchmarking/Bouncer/src/Makefile | 79 + ric_benchmarking/Bouncer/src/README | 36 + ric_benchmarking/Bouncer/src/b_xapp_main.cc | 93 + ric_benchmarking/Bouncer/src/routes.txt | 15 + ric_benchmarking/Bouncer/src/run_xapp.sh | 20 + .../Bouncer/src/xapp-asn/e2ap/e2ap_control.cc | 266 + .../Bouncer/src/xapp-asn/e2ap/e2ap_control.hpp | 66 + .../src/xapp-asn/e2ap/e2ap_control_helper.hpp | 50 + .../src/xapp-asn/e2ap/e2ap_control_response.cc | 415 + .../src/xapp-asn/e2ap/e2ap_control_response.hpp | 79 + .../Bouncer/src/xapp-asn/e2ap/e2ap_indication.cc | 283 + .../Bouncer/src/xapp-asn/e2ap/e2ap_indication.hpp | 67 + .../src/xapp-asn/e2ap/e2ap_indication_helper.hpp | 47 + .../Bouncer/src/xapp-asn/e2ap/generic_helpers.hpp | 49 + .../Bouncer/src/xapp-asn/e2ap/response_helper.hpp | 181 + .../xapp-asn/e2ap/subscription_delete_request.cc | 180 + .../xapp-asn/e2ap/subscription_delete_request.hpp | 67 + .../xapp-asn/e2ap/subscription_delete_response.cc | 292 + .../xapp-asn/e2ap/subscription_delete_response.hpp | 79 + .../src/xapp-asn/e2ap/subscription_helper.hpp | 181 + .../src/xapp-asn/e2ap/subscription_request.cc | 306 + .../src/xapp-asn/e2ap/subscription_request.hpp | 73 + .../src/xapp-asn/e2ap/subscription_response.cc | 583 + .../src/xapp-asn/e2ap/subscription_response.hpp | 81 + .../Bouncer/src/xapp-asn/e2sm/e2sm_control.cc | 190 + .../Bouncer/src/xapp-asn/e2sm/e2sm_control.hpp | 68 + .../Bouncer/src/xapp-asn/e2sm/e2sm_helpers.hpp | 104 + .../Bouncer/src/xapp-asn/e2sm/e2sm_indication.cc | 187 + .../Bouncer/src/xapp-asn/e2sm/e2sm_indication.hpp | 69 + .../Bouncer/src/xapp-asn/e2sm/e2sm_subscription.cc | 179 + .../src/xapp-asn/e2sm/e2sm_subscription.hpp | 69 + .../Bouncer/src/xapp-formats/e2ap/e2ap_control.cc | 266 + .../Bouncer/src/xapp-formats/e2ap/e2ap_control.hpp | 66 + .../src/xapp-formats/e2ap/e2ap_control_helper.hpp | 50 + .../src/xapp-formats/e2ap/e2ap_control_response.cc | 415 + .../xapp-formats/e2ap/e2ap_control_response.hpp | 79 + .../src/xapp-formats/e2ap/e2ap_indication.cc | 283 + .../src/xapp-formats/e2ap/e2ap_indication.hpp | 67 + .../xapp-formats/e2ap/e2ap_indication_helper.hpp | 47 + .../src/xapp-formats/e2ap/generic_helpers.hpp | 49 + .../src/xapp-formats/e2ap/response_helper.hpp | 181 + .../e2ap/subscription_delete_request.cc | 180 + .../e2ap/subscription_delete_request.hpp | 67 + .../e2ap/subscription_delete_response.cc | 292 + .../e2ap/subscription_delete_response.hpp | 79 + .../src/xapp-formats/e2ap/subscription_helper.hpp | 196 + .../src/xapp-formats/e2ap/subscription_request.cc | 308 + .../src/xapp-formats/e2ap/subscription_request.hpp | 73 + .../src/xapp-formats/e2ap/subscription_response.cc | 583 + .../xapp-formats/e2ap/subscription_response.hpp | 81 + .../Bouncer/src/xapp-formats/e2sm/e2sm.cc | 660 + .../Bouncer/src/xapp-formats/e2sm/e2sm.hpp | 145 + .../Bouncer/src/xapp-formats/e2sm/e2sm_helpers.hpp | 115 + .../Bouncer/src/xapp-mgmt/a1_helper.hpp | 49 + .../Bouncer/src/xapp-mgmt/format_helper.hpp | 48 + .../Bouncer/src/xapp-mgmt/msgs_proc.cc | 213 + .../Bouncer/src/xapp-mgmt/msgs_proc.hpp | 68 + .../Bouncer/src/xapp-mgmt/subs_mgmt.cc | 140 + .../Bouncer/src/xapp-mgmt/subs_mgmt.hpp | 204 + .../Bouncer/src/xapp-mgmt/xapp_handler.hpp | 21 + .../Bouncer/src/xapp-utils/xapp_config.cc | 138 + .../Bouncer/src/xapp-utils/xapp_config.hpp | 67 + .../Bouncer/src/xapp-utils/xapp_rmr.cc | 174 + .../Bouncer/src/xapp-utils/xapp_rmr.hpp | 195 + .../Bouncer/src/xapp-utils/xapp_sdl.cc | 71 + .../Bouncer/src/xapp-utils/xapp_sdl.hpp | 57 + ric_benchmarking/Bouncer/src/xapp.cc | 254 + ric_benchmarking/Bouncer/src/xapp.hpp | 94 + ric_benchmarking/Bouncer/src/xapp_env.sh | 14 + ric_benchmarking/Bouncer/tox.ini | 34 + ric_benchmarking/README | 45 + ric_benchmarking/e2-interface/e2sim/.gitignore | 12 + ric_benchmarking/e2-interface/e2sim/CMakeLists.txt | 173 + ric_benchmarking/e2-interface/e2sim/README.md | 98 + .../e2-interface/e2sim/docker/Dockerfile | 28 + .../e2-interface/e2sim/docker/container-tag.yaml | 2 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c | 450 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h | 65 + .../e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c | 656 + .../e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h | 48 + .../e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c | 174 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c | 65 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h | 46 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-CP-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h | 56 + .../CU-CP-Usage-Report-UeResourceReportItem.c | 72 + .../CU-CP-Usage-Report-UeResourceReportItem.h | 47 + .../CU-UP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-UP-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h | 56 + .../CU-UP-Usage-Report-UeResourceReportItem.c | 150 + .../CU-UP-Usage-Report-UeResourceReportItem.h | 47 + .../kpm_e2sm/ASN1c/CUUPMeasurement-Container.c | 129 + .../kpm_e2sm/ASN1c/CUUPMeasurement-Container.h | 56 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c | 92 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h | 68 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c | 59 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h | 56 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c | 65 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h | 59 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c | 73 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h | 63 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c | 57 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h | 55 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c | 55 + .../e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h | 54 + .../kpm_e2sm/ASN1c/CellResourceReportListItem.c | 227 + .../kpm_e2sm/ASN1c/CellResourceReportListItem.h | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/Criticality.c | 55 + .../e2sm_examples/kpm_e2sm/ASN1c/Criticality.h | 52 + .../ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../ASN1c/CriticalityDiagnostics-IE-List.c | 50 + .../ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../kpm_e2sm/ASN1c/CriticalityDiagnostics.c | 94 + .../kpm_e2sm/ASN1c/CriticalityDiagnostics.h | 52 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 139 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h | 56 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 138 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 47 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c | 75 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h | 61 + .../kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c | 50 + .../kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h | 42 + .../E2SM-KPM-EventTriggerDefinition-Format1.c | 131 + .../E2SM-KPM-EventTriggerDefinition-Format1.h | 56 + .../ASN1c/E2SM-KPM-EventTriggerDefinition.c | 55 + .../ASN1c/E2SM-KPM-EventTriggerDefinition.h | 53 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 208 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 70 + .../kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c | 55 + .../kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h | 53 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 129 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 56 + .../kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c | 107 + .../kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h | 65 + .../ASN1c/E2SM-KPM-RANfunction-Description.c | 273 + .../ASN1c/E2SM-KPM-RANfunction-Description.h | 73 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c | 192 + .../e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h | 60 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c | 241 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h | 61 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c | 94 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h | 56 + .../kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c | 129 + .../kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h | 56 + .../kpm_e2sm/ASN1c/EPC-DU-PM-Container.c | 129 + .../kpm_e2sm/ASN1c/EPC-DU-PM-Container.h | 56 + .../e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h | 44 + .../kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c | 129 + .../kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h | 56 + .../kpm_e2sm/ASN1c/FGC-DU-PM-Container.c | 129 + .../kpm_e2sm/ASN1c/FGC-DU-PM-Container.h | 56 + .../kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c | 183 + .../kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h | 47 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 171 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c | 109 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c | 70 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c | 109 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h | 46 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c | 70 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c | 109 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c | 94 + .../e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h | 56 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c | 75 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h | 62 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c | 86 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h | 64 + .../kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h | 46 + .../kpm_e2sm/ASN1c/GlobalKPMnode-ID.c | 85 + .../kpm_e2sm/ASN1c/GlobalKPMnode-ID.h | 65 + .../kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h | 44 + .../kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h | 44 + .../kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c | 72 + .../kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h | 48 + .../kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 50 + .../kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c | 96 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h | 46 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c | 1735 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h | 108 + .../e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c | 179 + .../kpm_e2sm/ASN1c/InitiatingMessage.c | 389 + .../kpm_e2sm/ASN1c/InitiatingMessage.h | 97 + .../kpm_e2sm/ASN1c/Makefile.am.asn1convert | 14 + .../kpm_e2sm/ASN1c/Makefile.am.libasncodec | 240 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c | 60 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h | 57 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c | 60 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h | 42 + .../e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c | 70 + .../e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h | 46 + .../kpm_e2sm/ASN1c/NativeEnumerated.c | 367 + .../kpm_e2sm/ASN1c/NativeEnumerated.h | 45 + .../kpm_e2sm/ASN1c/NativeEnumerated_oer.c | 149 + .../e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c | 550 + .../e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h | 46 + .../kpm_e2sm/ASN1c/NativeInteger_oer.c | 99 + .../e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c | 2411 + .../e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h | 102 + .../kpm_e2sm/ASN1c/OCTET_STRING_oer.c | 171 + .../kpm_e2sm/ASN1c/OCUCP-PF-Container.c | 140 + .../kpm_e2sm/ASN1c/OCUCP-PF-Container.h | 47 + .../kpm_e2sm/ASN1c/OCUUP-PF-Container.c | 141 + .../kpm_e2sm/ASN1c/OCUUP-PF-Container.h | 58 + .../kpm_e2sm/ASN1c/ODU-PF-Container.c | 129 + .../kpm_e2sm/ASN1c/ODU-PF-Container.h | 56 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c | 509 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h | 77 + .../e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c | 92 + .../e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c | 75 + .../e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h | 62 + .../kpm_e2sm/ASN1c/PF-ContainerListItem.c | 60 + .../kpm_e2sm/ASN1c/PF-ContainerListItem.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c | 65 + .../e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h | 46 + .../kpm_e2sm/ASN1c/PM-Containers-List.c | 62 + .../kpm_e2sm/ASN1c/PM-Containers-List.h | 52 + .../kpm_e2sm/ASN1c/PerQCIReportListItem.c | 171 + .../kpm_e2sm/ASN1c/PerQCIReportListItem.h | 46 + .../kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c | 183 + .../kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h | 47 + .../e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c | 72 + .../e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h | 54 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c | 55 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h | 52 + .../e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c | 130 + .../e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h | 37 + .../e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h | 53 + .../kpm_e2sm/ASN1c/ProtocolIE-Container.c | 810 + .../kpm_e2sm/ASN1c/ProtocolIE-Container.h | 253 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c | 9 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h | 23 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../kpm_e2sm/ASN1c/ProtocolIE-Field.c | 7190 ++ .../kpm_e2sm/ASN1c/ProtocolIE-Field.h | 757 + .../kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c | 9 + .../kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h | 23 + .../e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h | 76 + .../kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h | 108 + .../e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c | 127 + .../e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h | 73 + .../kpm_e2sm/ASN1c/RANcallProcess-ID-string.c | 109 + .../kpm_e2sm/ASN1c/RANcallProcess-ID-string.h | 45 + .../kpm_e2sm/ASN1c/RANfunction-Item.c | 70 + .../kpm_e2sm/ASN1c/RANfunction-Item.h | 46 + .../kpm_e2sm/ASN1c/RANfunction-Name.c | 316 + .../kpm_e2sm/ASN1c/RANfunction-Name.h | 48 + .../kpm_e2sm/ASN1c/RANfunctionDefinition.c | 31 + .../kpm_e2sm/ASN1c/RANfunctionDefinition.h | 43 + .../kpm_e2sm/ASN1c/RANfunctionID-Item.c | 60 + .../kpm_e2sm/ASN1c/RANfunctionID-Item.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h | 44 + .../kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c | 60 + .../kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h | 44 + .../kpm_e2sm/ASN1c/RANfunctionRevision.c | 61 + .../kpm_e2sm/ASN1c/RANfunctionRevision.h | 44 + .../kpm_e2sm/ASN1c/RANfunctions-List.c | 50 + .../kpm_e2sm/ASN1c/RANfunctions-List.h | 41 + .../kpm_e2sm/ASN1c/RANfunctionsID-List.c | 50 + .../kpm_e2sm/ASN1c/RANfunctionsID-List.h | 41 + .../kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c | 50 + .../kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h | 41 + .../kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c | 70 + .../kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h | 48 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c | 31 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h | 45 + .../kpm_e2sm/ASN1c/RIC-ReportStyle-List.c | 80 + .../kpm_e2sm/ASN1c/RIC-ReportStyle-List.h | 49 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c | 109 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h | 46 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c | 31 + .../e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h | 45 + .../kpm_e2sm/ASN1c/RICaction-Admitted-Item.c | 50 + .../kpm_e2sm/ASN1c/RICaction-Admitted-Item.h | 42 + .../kpm_e2sm/ASN1c/RICaction-Admitted-List.c | 50 + .../kpm_e2sm/ASN1c/RICaction-Admitted-List.h | 41 + .../kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c | 50 + .../kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../kpm_e2sm/ASN1c/RICactionDefinition.c | 31 + .../kpm_e2sm/ASN1c/RICactionDefinition.h | 43 + .../e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c | 57 + .../e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h | 55 + .../kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c | 50 + .../kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../kpm_e2sm/ASN1c/RICcallProcessID.c | 31 + .../kpm_e2sm/ASN1c/RICcallProcessID.h | 43 + .../kpm_e2sm/ASN1c/RICcontrolAckRequest.c | 57 + .../kpm_e2sm/ASN1c/RICcontrolAckRequest.h | 53 + .../kpm_e2sm/ASN1c/RICcontrolAcknowledge.c | 50 + .../kpm_e2sm/ASN1c/RICcontrolAcknowledge.h | 44 + .../kpm_e2sm/ASN1c/RICcontrolFailure.c | 50 + .../kpm_e2sm/ASN1c/RICcontrolFailure.h | 44 + .../kpm_e2sm/ASN1c/RICcontrolHeader.c | 31 + .../kpm_e2sm/ASN1c/RICcontrolHeader.h | 43 + .../kpm_e2sm/ASN1c/RICcontrolMessage.c | 31 + .../kpm_e2sm/ASN1c/RICcontrolMessage.h | 43 + .../kpm_e2sm/ASN1c/RICcontrolOutcome.c | 31 + .../kpm_e2sm/ASN1c/RICcontrolOutcome.h | 43 + .../kpm_e2sm/ASN1c/RICcontrolRequest.c | 50 + .../kpm_e2sm/ASN1c/RICcontrolRequest.h | 44 + .../kpm_e2sm/ASN1c/RICcontrolStatus.c | 57 + .../kpm_e2sm/ASN1c/RICcontrolStatus.h | 53 + .../kpm_e2sm/ASN1c/RICeventTriggerDefinition.c | 31 + .../kpm_e2sm/ASN1c/RICeventTriggerDefinition.h | 43 + .../e2sm_examples/kpm_e2sm/ASN1c/RICindication.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/RICindication.h | 44 + .../kpm_e2sm/ASN1c/RICindicationHeader.c | 31 + .../kpm_e2sm/ASN1c/RICindicationHeader.h | 43 + .../kpm_e2sm/ASN1c/RICindicationMessage.c | 31 + .../kpm_e2sm/ASN1c/RICindicationMessage.h | 43 + .../e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c | 61 + .../e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h | 43 + .../kpm_e2sm/ASN1c/RICindicationType.c | 55 + .../kpm_e2sm/ASN1c/RICindicationType.h | 52 + .../e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c | 120 + .../e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h | 45 + .../e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h | 44 + .../kpm_e2sm/ASN1c/RICserviceUpdate.c | 50 + .../kpm_e2sm/ASN1c/RICserviceUpdate.h | 44 + .../kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../kpm_e2sm/ASN1c/RICserviceUpdateFailure.c | 50 + .../kpm_e2sm/ASN1c/RICserviceUpdateFailure.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionDetails.c | 60 + .../kpm_e2sm/ASN1c/RICsubscriptionDetails.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionFailure.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionFailure.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionRequest.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionRequest.h | 44 + .../kpm_e2sm/ASN1c/RICsubscriptionResponse.c | 50 + .../kpm_e2sm/ASN1c/RICsubscriptionResponse.h | 44 + .../kpm_e2sm/ASN1c/RICsubsequentAction.c | 60 + .../kpm_e2sm/ASN1c/RICsubsequentAction.h | 46 + .../kpm_e2sm/ASN1c/RICsubsequentActionType.c | 55 + .../kpm_e2sm/ASN1c/RICsubsequentActionType.h | 54 + .../e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c | 87 + .../e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h | 70 + .../e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c | 94 + .../e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h | 74 + .../e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h | 44 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c | 130 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h | 41 + .../kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c | 72 + .../kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h | 54 + .../kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c | 139 + .../kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h | 58 + .../kpm_e2sm/ASN1c/SliceToReportListItem.c | 139 + .../kpm_e2sm/ASN1c/SliceToReportListItem.h | 58 + .../kpm_e2sm/ASN1c/SuccessfulOutcome.c | 359 + .../kpm_e2sm/ASN1c/SuccessfulOutcome.h | 91 + .../e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c | 63 + .../e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h | 56 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c | 31 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h | 45 + .../kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c | 50 + .../kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h | 44 + .../kpm_e2sm/ASN1c/TriggeringMessage.c | 55 + .../kpm_e2sm/ASN1c/TriggeringMessage.h | 52 + .../e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c | 55 + .../e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h | 54 + .../e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h | 57 + .../kpm_e2sm/ASN1c/UnsuccessfulOutcome.c | 349 + .../kpm_e2sm/ASN1c/UnsuccessfulOutcome.h | 89 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c | 41 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h | 52 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c | 88 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h | 72 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_application.c | 481 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_application.h | 171 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c | 333 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h | 83 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h | 108 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c | 317 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h | 51 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h | 30 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c | 48 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h | 159 + .../e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h | 51 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c | 56 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h | 51 + .../e2sm_examples/kpm_e2sm/ASN1c/asn_system.h | 150 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c | 283 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h | 66 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c | 168 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h | 50 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c | 144 + .../e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h | 60 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c | 1533 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h | 80 + .../kpm_e2sm/ASN1c/constr_CHOICE_oer.c | 380 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c | 2059 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h | 68 + .../kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c | 358 + .../kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h | 41 + .../kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c | 561 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c | 1441 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h | 49 + .../kpm_e2sm/ASN1c/constr_SET_OF_oer.c | 285 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c | 80 + .../e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h | 262 + .../e2sm_examples/kpm_e2sm/ASN1c/constraints.c | 93 + .../e2sm_examples/kpm_e2sm/ASN1c/constraints.h | 62 + .../kpm_e2sm/ASN1c/converter-example.mk | 33 + .../e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c | 194 + .../e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h | 68 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c | 152 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h | 72 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c | 141 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h | 70 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_support.c | 122 + .../e2sm_examples/kpm_e2sm/ASN1c/oer_support.h | 47 + .../e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c | 25 + .../e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c | 185 + .../e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h | 82 + .../e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c | 265 + .../e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h | 93 + .../e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c | 533 + .../e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h | 44 + .../e2sm_examples/kpm_e2sm/ASN1c/per_support.c | 489 + .../e2sm_examples/kpm_e2sm/ASN1c/per_support.h | 127 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c | 369 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h | 106 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c | 237 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h | 83 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_support.c | 227 + .../e2sm_examples/kpm_e2sm/ASN1c/xer_support.h | 55 + .../e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt | 87 + .../e2sim/e2sm_examples/kpm_e2sm/Dockerfile | 104 + .../e2sm_examples/kpm_e2sm/cellMeasReport.txt | 40 + .../kpm_e2sm/e2sim-dev_1.0.0_amd64.deb | Bin 0 -> 386448 bytes .../e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb | Bin 0 -> 221032 bytes .../e2sim/e2sm_examples/kpm_e2sm/helm/Chart.yaml | 22 + .../kpm_e2sm/helm/templates/deployment.yaml | 40 + .../e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml | 62 + .../e2sim/e2sm_examples/kpm_e2sm/simulation.txt | 3 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c | 450 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h | 65 + .../e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c | 656 + .../e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h | 48 + .../kpm_e2sm/src/ASN1c/BIT_STRING_oer.c | 174 + .../e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c | 65 + .../e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h | 46 + .../kpm_e2sm/src/ASN1c/CMakeLists.txt | 32 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-CP-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h | 56 + .../CU-CP-Usage-Report-UeResourceReportItem.c | 72 + .../CU-CP-Usage-Report-UeResourceReportItem.h | 47 + .../CU-UP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-UP-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h | 56 + .../CU-UP-Usage-Report-UeResourceReportItem.c | 150 + .../CU-UP-Usage-Report-UeResourceReportItem.h | 47 + .../kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c | 129 + .../kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h | 56 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c | 95 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h | 68 + .../e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c | 62 + .../e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h | 58 + .../kpm_e2sm/src/ASN1c/CauseProtocol.c | 68 + .../kpm_e2sm/src/ASN1c/CauseProtocol.h | 61 + .../e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c | 76 + .../e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h | 65 + .../kpm_e2sm/src/ASN1c/CauseRICservice.c | 60 + .../kpm_e2sm/src/ASN1c/CauseRICservice.h | 57 + .../kpm_e2sm/src/ASN1c/CauseTransport.c | 58 + .../kpm_e2sm/src/ASN1c/CauseTransport.h | 56 + .../src/ASN1c/CellResourceReportListItem.c | 227 + .../src/ASN1c/CellResourceReportListItem.h | 61 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c | 58 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h | 54 + .../src/ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../src/ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../src/ASN1c/CriticalityDiagnostics-IE-List.c | 53 + .../src/ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c | 94 + .../kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h | 52 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 139 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 58 + .../kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c | 129 + .../kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h | 56 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 138 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 47 + .../e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c | 78 + .../e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h | 61 + .../kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c | 50 + .../kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h | 42 + .../E2SM-KPM-EventTriggerDefinition-Format1.c | 131 + .../E2SM-KPM-EventTriggerDefinition-Format1.h | 56 + .../src/ASN1c/E2SM-KPM-EventTriggerDefinition.c | 55 + .../src/ASN1c/E2SM-KPM-EventTriggerDefinition.h | 53 + .../src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 208 + .../src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 70 + .../kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c | 55 + .../kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h | 53 + .../src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 129 + .../src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 56 + .../src/ASN1c/E2SM-KPM-IndicationMessage.c | 107 + .../src/ASN1c/E2SM-KPM-IndicationMessage.h | 65 + .../src/ASN1c/E2SM-KPM-RANfunction-Description.c | 273 + .../src/ASN1c/E2SM-KPM-RANfunction-Description.h | 73 + .../kpm_e2sm/src/ASN1c/E2setupFailure.c | 50 + .../kpm_e2sm/src/ASN1c/E2setupFailure.h | 44 + .../kpm_e2sm/src/ASN1c/E2setupRequest.c | 50 + .../kpm_e2sm/src/ASN1c/E2setupRequest.h | 44 + .../kpm_e2sm/src/ASN1c/E2setupResponse.c | 50 + .../kpm_e2sm/src/ASN1c/E2setupResponse.h | 44 + .../kpm_e2sm/src/ASN1c/ENB-ID-Choice.c | 192 + .../kpm_e2sm/src/ASN1c/ENB-ID-Choice.h | 60 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c | 241 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h | 61 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c | 94 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h | 56 + .../kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c | 129 + .../kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h | 56 + .../kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c | 129 + .../kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h | 56 + .../kpm_e2sm/src/ASN1c/ErrorIndication.c | 50 + .../kpm_e2sm/src/ASN1c/ErrorIndication.h | 44 + .../kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c | 129 + .../kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h | 56 + .../kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c | 129 + .../kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h | 56 + .../src/ASN1c/FQIPERSlicesPerPlmnListItem.c | 183 + .../src/ASN1c/FQIPERSlicesPerPlmnListItem.h | 47 + .../src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 171 + .../src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 46 + .../kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c | 109 + .../kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h | 46 + .../kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c | 70 + .../kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h | 46 + .../kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c | 109 + .../kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h | 46 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c | 70 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h | 46 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c | 109 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h | 46 + .../kpm_e2sm/src/ASN1c/GNB-ID-Choice.c | 94 + .../kpm_e2sm/src/ASN1c/GNB-ID-Choice.h | 56 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c | 75 + .../e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h | 62 + .../kpm_e2sm/src/ASN1c/GlobalE2node-ID.c | 89 + .../kpm_e2sm/src/ASN1c/GlobalE2node-ID.h | 64 + .../kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalENB-ID.c | 60 + .../kpm_e2sm/src/ASN1c/GlobalENB-ID.h | 46 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c | 85 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h | 65 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c | 72 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h | 48 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 50 + .../kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalRIC-ID.c | 99 + .../kpm_e2sm/src/ASN1c/GlobalRIC-ID.h | 44 + .../kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c | 60 + .../kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h | 46 + .../kpm_e2sm/src/ASN1c/GlobalgNB-ID.c | 60 + .../kpm_e2sm/src/ASN1c/GlobalgNB-ID.h | 46 + .../kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c | 60 + .../kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h | 46 + .../e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c | 1735 + .../e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h | 108 + .../e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c | 179 + .../kpm_e2sm/src/ASN1c/InitiatingMessage.c | 398 + .../kpm_e2sm/src/ASN1c/InitiatingMessage.h | 97 + .../kpm_e2sm/src/ASN1c/Makefile.am.asn1convert | 14 + .../kpm_e2sm/src/ASN1c/Makefile.am.libasncodec | 288 + .../e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c | 60 + .../e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h | 57 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c | 60 + .../e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h | 42 + .../kpm_e2sm/src/ASN1c/NRCellIdentity.c | 70 + .../kpm_e2sm/src/ASN1c/NRCellIdentity.h | 46 + .../kpm_e2sm/src/ASN1c/NativeEnumerated.c | 367 + .../kpm_e2sm/src/ASN1c/NativeEnumerated.h | 45 + .../kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c | 149 + .../kpm_e2sm/src/ASN1c/NativeInteger.c | 550 + .../kpm_e2sm/src/ASN1c/NativeInteger.h | 46 + .../kpm_e2sm/src/ASN1c/NativeInteger_oer.c | 99 + .../kpm_e2sm/src/ASN1c/OCTET_STRING.c | 2411 + .../kpm_e2sm/src/ASN1c/OCTET_STRING.h | 102 + .../kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c | 171 + .../kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c | 140 + .../kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h | 47 + .../kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c | 141 + .../kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h | 58 + .../kpm_e2sm/src/ASN1c/ODU-PF-Container.c | 129 + .../kpm_e2sm/src/ASN1c/ODU-PF-Container.h | 56 + .../e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c | 509 + .../e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h | 77 + .../kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c | 92 + .../kpm_e2sm/src/ASN1c/PF-Container.c | 75 + .../kpm_e2sm/src/ASN1c/PF-Container.h | 62 + .../kpm_e2sm/src/ASN1c/PF-ContainerListItem.c | 60 + .../kpm_e2sm/src/ASN1c/PF-ContainerListItem.h | 46 + .../kpm_e2sm/src/ASN1c/PLMN-Identity.c | 65 + .../kpm_e2sm/src/ASN1c/PLMN-Identity.h | 46 + .../kpm_e2sm/src/ASN1c/PM-Containers-List.c | 62 + .../kpm_e2sm/src/ASN1c/PM-Containers-List.h | 52 + .../kpm_e2sm/src/ASN1c/PerQCIReportListItem.c | 171 + .../kpm_e2sm/src/ASN1c/PerQCIReportListItem.h | 46 + .../src/ASN1c/PerQCIReportListItemFormat.c | 183 + .../src/ASN1c/PerQCIReportListItemFormat.h | 47 + .../e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c | 72 + .../e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h | 54 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c | 58 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h | 54 + .../kpm_e2sm/src/ASN1c/PrintableString.c | 130 + .../kpm_e2sm/src/ASN1c/PrintableString.h | 37 + .../kpm_e2sm/src/ASN1c/ProcedureCode.c | 64 + .../kpm_e2sm/src/ASN1c/ProcedureCode.h | 55 + .../kpm_e2sm/src/ASN1c/ProtocolIE-Container.c | 870 + .../kpm_e2sm/src/ASN1c/ProtocolIE-Container.h | 253 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c | 9 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h | 23 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../src/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../src/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../kpm_e2sm/src/ASN1c/ProtocolIE-Field.c | 7424 ++ .../kpm_e2sm/src/ASN1c/ProtocolIE-Field.h | 757 + .../kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c | 9 + .../kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h | 23 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ID.c | 64 + .../kpm_e2sm/src/ASN1c/ProtocolIE-ID.h | 78 + .../src/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../src/ASN1c/ProtocolIE-SingleContainer.h | 120 + .../kpm_e2sm/src/ASN1c/RAN-Container.c | 127 + .../kpm_e2sm/src/ASN1c/RAN-Container.h | 73 + .../kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c | 109 + .../kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h | 45 + .../kpm_e2sm/src/ASN1c/RANfunction-Item.c | 70 + .../kpm_e2sm/src/ASN1c/RANfunction-Item.h | 46 + .../kpm_e2sm/src/ASN1c/RANfunction-Name.c | 316 + .../kpm_e2sm/src/ASN1c/RANfunction-Name.h | 48 + .../kpm_e2sm/src/ASN1c/RANfunctionDefinition.c | 31 + .../kpm_e2sm/src/ASN1c/RANfunctionDefinition.h | 45 + .../kpm_e2sm/src/ASN1c/RANfunctionID-Item.c | 60 + .../kpm_e2sm/src/ASN1c/RANfunctionID-Item.h | 44 + .../kpm_e2sm/src/ASN1c/RANfunctionID.c | 64 + .../kpm_e2sm/src/ASN1c/RANfunctionID.h | 46 + .../kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c | 60 + .../kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h | 44 + .../kpm_e2sm/src/ASN1c/RANfunctionRevision.c | 64 + .../kpm_e2sm/src/ASN1c/RANfunctionRevision.h | 46 + .../kpm_e2sm/src/ASN1c/RANfunctions-List.c | 53 + .../kpm_e2sm/src/ASN1c/RANfunctions-List.h | 41 + .../kpm_e2sm/src/ASN1c/RANfunctionsID-List.c | 53 + .../kpm_e2sm/src/ASN1c/RANfunctionsID-List.h | 41 + .../kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c | 53 + .../kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h | 41 + .../src/ASN1c/RIC-EventTriggerStyle-List.c | 70 + .../src/ASN1c/RIC-EventTriggerStyle-List.h | 48 + .../kpm_e2sm/src/ASN1c/RIC-Format-Type.c | 31 + .../kpm_e2sm/src/ASN1c/RIC-Format-Type.h | 45 + .../kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c | 80 + .../kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h | 49 + .../kpm_e2sm/src/ASN1c/RIC-Style-Name.c | 109 + .../kpm_e2sm/src/ASN1c/RIC-Style-Name.h | 46 + .../kpm_e2sm/src/ASN1c/RIC-Style-Type.c | 31 + .../kpm_e2sm/src/ASN1c/RIC-Style-Type.h | 45 + .../kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c | 50 + .../kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h | 42 + .../kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c | 53 + .../kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h | 41 + .../src/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../src/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../src/ASN1c/RICaction-NotAdmitted-List.c | 53 + .../src/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../kpm_e2sm/src/ASN1c/RICactionDefinition.c | 31 + .../kpm_e2sm/src/ASN1c/RICactionDefinition.h | 45 + .../e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c | 64 + .../e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h | 46 + .../kpm_e2sm/src/ASN1c/RICactionType.c | 60 + .../kpm_e2sm/src/ASN1c/RICactionType.h | 57 + .../kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c | 53 + .../kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../kpm_e2sm/src/ASN1c/RICcallProcessID.c | 31 + .../kpm_e2sm/src/ASN1c/RICcallProcessID.h | 45 + .../kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c | 60 + .../kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h | 55 + .../kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c | 50 + .../kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h | 44 + .../kpm_e2sm/src/ASN1c/RICcontrolFailure.c | 50 + .../kpm_e2sm/src/ASN1c/RICcontrolFailure.h | 44 + .../kpm_e2sm/src/ASN1c/RICcontrolHeader.c | 31 + .../kpm_e2sm/src/ASN1c/RICcontrolHeader.h | 45 + .../kpm_e2sm/src/ASN1c/RICcontrolMessage.c | 31 + .../kpm_e2sm/src/ASN1c/RICcontrolMessage.h | 45 + .../kpm_e2sm/src/ASN1c/RICcontrolOutcome.c | 31 + .../kpm_e2sm/src/ASN1c/RICcontrolOutcome.h | 45 + .../kpm_e2sm/src/ASN1c/RICcontrolRequest.c | 50 + .../kpm_e2sm/src/ASN1c/RICcontrolRequest.h | 44 + .../kpm_e2sm/src/ASN1c/RICcontrolStatus.c | 60 + .../kpm_e2sm/src/ASN1c/RICcontrolStatus.h | 55 + .../kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c | 31 + .../kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h | 45 + .../kpm_e2sm/src/ASN1c/RICindication.c | 50 + .../kpm_e2sm/src/ASN1c/RICindication.h | 44 + .../kpm_e2sm/src/ASN1c/RICindicationHeader.c | 31 + .../kpm_e2sm/src/ASN1c/RICindicationHeader.h | 45 + .../kpm_e2sm/src/ASN1c/RICindicationMessage.c | 31 + .../kpm_e2sm/src/ASN1c/RICindicationMessage.h | 45 + .../kpm_e2sm/src/ASN1c/RICindicationSN.c | 64 + .../kpm_e2sm/src/ASN1c/RICindicationSN.h | 45 + .../kpm_e2sm/src/ASN1c/RICindicationType.c | 58 + .../kpm_e2sm/src/ASN1c/RICindicationType.h | 54 + .../kpm_e2sm/src/ASN1c/RICrequestID.c | 126 + .../kpm_e2sm/src/ASN1c/RICrequestID.h | 45 + .../kpm_e2sm/src/ASN1c/RICserviceQuery.c | 50 + .../kpm_e2sm/src/ASN1c/RICserviceQuery.h | 44 + .../kpm_e2sm/src/ASN1c/RICserviceUpdate.c | 50 + .../kpm_e2sm/src/ASN1c/RICserviceUpdate.h | 44 + .../src/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../src/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c | 50 + .../kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h | 44 + .../src/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../src/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../src/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../src/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../src/ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../src/ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c | 60 + .../kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h | 44 + .../kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c | 50 + .../kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h | 44 + .../kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c | 50 + .../kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h | 44 + .../kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c | 50 + .../kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h | 44 + .../kpm_e2sm/src/ASN1c/RICsubsequentAction.c | 60 + .../kpm_e2sm/src/ASN1c/RICsubsequentAction.h | 46 + .../kpm_e2sm/src/ASN1c/RICsubsequentActionType.c | 58 + .../kpm_e2sm/src/ASN1c/RICsubsequentActionType.h | 56 + .../kpm_e2sm/src/ASN1c/RICtimeToWait.c | 90 + .../kpm_e2sm/src/ASN1c/RICtimeToWait.h | 72 + .../kpm_e2sm/src/ASN1c/RT-Period-IE.c | 94 + .../kpm_e2sm/src/ASN1c/RT-Period-IE.h | 74 + .../kpm_e2sm/src/ASN1c/ResetRequest.c | 50 + .../kpm_e2sm/src/ASN1c/ResetRequest.h | 44 + .../kpm_e2sm/src/ASN1c/ResetResponse.c | 50 + .../kpm_e2sm/src/ASN1c/ResetResponse.h | 44 + .../e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c | 130 + .../e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h | 41 + .../kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c | 72 + .../kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h | 54 + .../src/ASN1c/SlicePerPlmnPerCellListItem.c | 139 + .../src/ASN1c/SlicePerPlmnPerCellListItem.h | 58 + .../kpm_e2sm/src/ASN1c/SliceToReportListItem.c | 139 + .../kpm_e2sm/src/ASN1c/SliceToReportListItem.h | 58 + .../kpm_e2sm/src/ASN1c/SuccessfulOutcome.c | 368 + .../kpm_e2sm/src/ASN1c/SuccessfulOutcome.h | 91 + .../e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c | 66 + .../e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h | 58 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c | 31 + .../e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h | 45 + .../kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c | 50 + .../kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h | 44 + .../kpm_e2sm/src/ASN1c/TriggeringMessage.c | 58 + .../kpm_e2sm/src/ASN1c/TriggeringMessage.h | 54 + .../e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c | 58 + .../e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h | 56 + .../kpm_e2sm/src/ASN1c/UE-Report-Type.c | 60 + .../kpm_e2sm/src/ASN1c/UE-Report-Type.h | 57 + .../kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c | 358 + .../kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h | 89 + .../kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c | 41 + .../kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h | 52 + .../e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c | 88 + .../e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h | 72 + .../kpm_e2sm/src/ASN1c/asn_application.c | 481 + .../kpm_e2sm/src/ASN1c/asn_application.h | 171 + .../kpm_e2sm/src/ASN1c/asn_bit_data.c | 333 + .../kpm_e2sm/src/ASN1c/asn_bit_data.h | 83 + .../e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h | 108 + .../kpm_e2sm/src/ASN1c/asn_codecs_prim.c | 317 + .../kpm_e2sm/src/ASN1c/asn_codecs_prim.h | 51 + .../kpm_e2sm/src/ASN1c/asn_constant.h | 22 + .../kpm_e2sm/src/ASN1c/asn_internal.c | 48 + .../kpm_e2sm/src/ASN1c/asn_internal.h | 159 + .../e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h | 51 + .../kpm_e2sm/src/ASN1c/asn_random_fill.c | 56 + .../kpm_e2sm/src/ASN1c/asn_random_fill.h | 51 + .../e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h | 150 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c | 283 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h | 66 + .../kpm_e2sm/src/ASN1c/ber_tlv_length.c | 168 + .../kpm_e2sm/src/ASN1c/ber_tlv_length.h | 50 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c | 144 + .../e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h | 60 + .../kpm_e2sm/src/ASN1c/constr_CHOICE.c | 1533 + .../kpm_e2sm/src/ASN1c/constr_CHOICE.h | 80 + .../kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c | 380 + .../kpm_e2sm/src/ASN1c/constr_SEQUENCE.c | 2059 + .../kpm_e2sm/src/ASN1c/constr_SEQUENCE.h | 68 + .../kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c | 358 + .../kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h | 41 + .../kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c | 561 + .../kpm_e2sm/src/ASN1c/constr_SET_OF.c | 1441 + .../kpm_e2sm/src/ASN1c/constr_SET_OF.h | 49 + .../kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c | 285 + .../e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c | 80 + .../e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h | 262 + .../e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c | 93 + .../e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h | 62 + .../kpm_e2sm/src/ASN1c/converter-example.mk | 33 + .../e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c | 194 + .../e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h | 68 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c | 152 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h | 72 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c | 141 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h | 70 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c | 122 + .../e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h | 47 + .../kpm_e2sm/src/ASN1c/pdu_collection.c | 15 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c | 185 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h | 82 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c | 265 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h | 93 + .../kpm_e2sm/src/ASN1c/per_opentype.c | 533 + .../kpm_e2sm/src/ASN1c/per_opentype.h | 44 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c | 489 + .../e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h | 127 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c | 369 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h | 106 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c | 237 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h | 83 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c | 227 + .../e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h | 55 + .../e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt | 35 + .../e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp | 1871 + .../e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp | 63 + .../kpm_e2sm/src/kpm/kpm_callbacks.cpp | 828 + .../kpm_e2sm/src/kpm/kpm_callbacks.hpp | 24 + .../e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt | 65 + .../e2-interface/e2sim/previous/ASN1c/ABS-Status.c | 91 + .../e2-interface/e2sim/previous/ASN1c/ABS-Status.h | 68 + .../e2sim/previous/ASN1c/ABSInformation.c | 92 + .../e2sim/previous/ASN1c/ABSInformation.h | 82 + .../e2sim/previous/ASN1c/ABSInformationFDD.c | 223 + .../e2sim/previous/ASN1c/ABSInformationFDD.h | 80 + .../e2sim/previous/ASN1c/ABSInformationTDD.c | 223 + .../e2sim/previous/ASN1c/ABSInformationTDD.h | 80 + .../e2-interface/e2sim/previous/ASN1c/ANY.c | 468 + .../e2-interface/e2sim/previous/ASN1c/ANY.h | 83 + .../e2sim/previous/ASN1c/AS-SecurityInformation.c | 91 + .../e2sim/previous/ASN1c/AS-SecurityInformation.h | 68 + .../e2sim/previous/ASN1c/ActionParameter-ID.c | 79 + .../e2sim/previous/ASN1c/ActionParameter-ID.h | 62 + .../e2sim/previous/ASN1c/ActionParameter-Item.c | 78 + .../e2sim/previous/ASN1c/ActionParameter-Item.h | 64 + .../e2sim/previous/ASN1c/ActionParameter-Value.c | 120 + .../e2sim/previous/ASN1c/ActionParameter-Value.h | 88 + .../e2sim/previous/ASN1c/ActivatedCellList-Item.c | 81 + .../e2sim/previous/ASN1c/ActivatedCellList-Item.h | 66 + .../e2sim/previous/ASN1c/ActivatedCellList.c | 68 + .../e2sim/previous/ASN1c/ActivatedCellList.h | 59 + .../previous/ASN1c/ActivatedNRCellList-Item.c | 81 + .../previous/ASN1c/ActivatedNRCellList-Item.h | 66 + .../e2sim/previous/ASN1c/ActivatedNRCellList.c | 68 + .../e2sim/previous/ASN1c/ActivatedNRCellList.h | 59 + .../e2sim/previous/ASN1c/ActivationID.c | 79 + .../e2sim/previous/ASN1c/ActivationID.h | 62 + .../ASN1c/AdditionalSpecialSubframe-Info.c | 101 + .../ASN1c/AdditionalSpecialSubframe-Info.h | 70 + .../AdditionalSpecialSubframeExtension-Info.c | 101 + .../AdditionalSpecialSubframeExtension-Info.h | 70 + .../ASN1c/AdditionalSpecialSubframePatterns.c | 89 + .../ASN1c/AdditionalSpecialSubframePatterns.h | 80 + .../AdditionalSpecialSubframePatternsExtension.c | 71 + .../AdditionalSpecialSubframePatternsExtension.h | 71 + .../ASN1c/AerialUEsubscriptionInformation.c | 73 + .../ASN1c/AerialUEsubscriptionInformation.h | 72 + .../ASN1c/AllocationAndRetentionPriority.c | 101 + .../ASN1c/AllocationAndRetentionPriority.h | 70 + .../e2sim/previous/ASN1c/AreaScopeOfMDT.c | 103 + .../e2sim/previous/ASN1c/AreaScopeOfMDT.h | 84 + .../e2sim/previous/ASN1c/AreaScopeOfQMC.c | 104 + .../e2sim/previous/ASN1c/AreaScopeOfQMC.h | 85 + .../e2-interface/e2sim/previous/ASN1c/BIT_STRING.c | 674 + .../e2-interface/e2sim/previous/ASN1c/BIT_STRING.h | 66 + .../e2-interface/e2sim/previous/ASN1c/BOOLEAN.c | 510 + .../e2-interface/e2sim/previous/ASN1c/BOOLEAN.h | 63 + .../e2-interface/e2sim/previous/ASN1c/BandInfo.c | 81 + .../e2-interface/e2sim/previous/ASN1c/BandInfo.h | 66 + .../e2sim/previous/ASN1c/BandwidthReducedSI.c | 71 + .../e2sim/previous/ASN1c/BandwidthReducedSI.h | 71 + .../e2-interface/e2sim/previous/ASN1c/BearerType.c | 71 + .../e2-interface/e2sim/previous/ASN1c/BearerType.h | 71 + .../e2sim/previous/ASN1c/BenefitMetric.c | 79 + .../e2sim/previous/ASN1c/BenefitMetric.h | 62 + .../e2-interface/e2sim/previous/ASN1c/BitRate.c | 85 + .../e2-interface/e2sim/previous/ASN1c/BitRate.h | 62 + .../e2sim/previous/ASN1c/BluetoothMeasConfig.c | 71 + .../e2sim/previous/ASN1c/BluetoothMeasConfig.h | 71 + .../previous/ASN1c/BluetoothMeasConfigNameList.c | 67 + .../previous/ASN1c/BluetoothMeasConfigNameList.h | 60 + .../ASN1c/BluetoothMeasurementConfiguration.c | 148 + .../ASN1c/BluetoothMeasurementConfiguration.h | 79 + .../e2sim/previous/ASN1c/BluetoothName.c | 80 + .../e2sim/previous/ASN1c/BluetoothName.h | 62 + .../e2sim/previous/ASN1c/BroadcastPLMNs-Item.c | 67 + .../e2sim/previous/ASN1c/BroadcastPLMNs-Item.h | 60 + .../e2sim/previous/ASN1c/CNTypeRestrictions.c | 68 + .../e2sim/previous/ASN1c/CNTypeRestrictions.h | 62 + .../e2sim/previous/ASN1c/CNTypeRestrictionsItem.c | 137 + .../e2sim/previous/ASN1c/CNTypeRestrictionsItem.h | 77 + .../e2sim/previous/ASN1c/COUNTValueExtended.c | 91 + .../e2sim/previous/ASN1c/COUNTValueExtended.h | 68 + .../e2-interface/e2sim/previous/ASN1c/COUNTvalue.c | 91 + .../e2-interface/e2sim/previous/ASN1c/COUNTvalue.h | 68 + .../previous/ASN1c/COUNTvaluePDCP-SNlength18.c | 91 + .../previous/ASN1c/COUNTvaluePDCP-SNlength18.h | 68 + .../e2-interface/e2sim/previous/ASN1c/CRNTI.c | 85 + .../e2-interface/e2sim/previous/ASN1c/CRNTI.h | 62 + .../e2-interface/e2sim/previous/ASN1c/CSG-Id.c | 85 + .../e2-interface/e2sim/previous/ASN1c/CSG-Id.h | 62 + .../e2sim/previous/ASN1c/CSGMembershipStatus.c | 71 + .../e2sim/previous/ASN1c/CSGMembershipStatus.h | 69 + .../e2sim/previous/ASN1c/CSIReportList.c | 132 + .../e2sim/previous/ASN1c/CSIReportList.h | 79 + .../e2sim/previous/ASN1c/CSIReportPerCSIProcess.c | 162 + .../e2sim/previous/ASN1c/CSIReportPerCSIProcess.h | 79 + .../previous/ASN1c/CSIReportPerCSIProcessItem.c | 183 + .../previous/ASN1c/CSIReportPerCSIProcessItem.h | 83 + .../e2sim/previous/ASN1c/CallProcess-ID.c | 49 + .../e2sim/previous/ASN1c/CallProcess-ID.h | 61 + .../e2sim/previous/ASN1c/CapacityValue.c | 79 + .../e2sim/previous/ASN1c/CapacityValue.h | 62 + .../e2-interface/e2sim/previous/ASN1c/Cause.c | 100 + .../e2-interface/e2sim/previous/ASN1c/Cause.h | 83 + .../e2-interface/e2sim/previous/ASN1c/CauseMisc.c | 79 + .../e2-interface/e2sim/previous/ASN1c/CauseMisc.h | 75 + .../e2sim/previous/ASN1c/CauseProtocol.c | 83 + .../e2sim/previous/ASN1c/CauseProtocol.h | 77 + .../e2-interface/e2sim/previous/ASN1c/CauseRIC.c | 95 + .../e2-interface/e2sim/previous/ASN1c/CauseRIC.h | 83 + .../e2sim/previous/ASN1c/CauseRadioNetwork.c | 171 + .../e2sim/previous/ASN1c/CauseRadioNetwork.h | 121 + .../e2sim/previous/ASN1c/CauseTransport.c | 73 + .../e2sim/previous/ASN1c/CauseTransport.h | 72 + .../e2-interface/e2sim/previous/ASN1c/Cell-Size.c | 77 + .../e2-interface/e2sim/previous/ASN1c/Cell-Size.h | 74 + .../e2sim/previous/ASN1c/CellActivationFailure.c | 68 + .../e2sim/previous/ASN1c/CellActivationFailure.h | 60 + .../e2sim/previous/ASN1c/CellActivationRequest.c | 68 + .../e2sim/previous/ASN1c/CellActivationRequest.h | 60 + .../e2sim/previous/ASN1c/CellActivationResponse.c | 68 + .../e2sim/previous/ASN1c/CellActivationResponse.h | 60 + .../previous/ASN1c/CellAssistanceInformation.c | 127 + .../previous/ASN1c/CellAssistanceInformation.h | 83 + .../e2sim/previous/ASN1c/CellBasedMDT.c | 81 + .../e2sim/previous/ASN1c/CellBasedMDT.h | 66 + .../e2sim/previous/ASN1c/CellBasedQMC.c | 81 + .../e2sim/previous/ASN1c/CellBasedQMC.h | 66 + .../e2sim/previous/ASN1c/CellCapacityClassValue.c | 79 + .../e2sim/previous/ASN1c/CellCapacityClassValue.h | 62 + .../previous/ASN1c/CellDeploymentStatusIndicator.c | 71 + .../previous/ASN1c/CellDeploymentStatusIndicator.h | 71 + .../e2sim/previous/ASN1c/CellIdListforMDT.c | 68 + .../e2sim/previous/ASN1c/CellIdListforMDT.h | 62 + .../e2sim/previous/ASN1c/CellIdListforQMC.c | 68 + .../e2sim/previous/ASN1c/CellIdListforQMC.h | 62 + .../e2sim/previous/ASN1c/CellInformation-Item.c | 114 + .../e2sim/previous/ASN1c/CellInformation-Item.h | 70 + .../e2sim/previous/ASN1c/CellInformation-List.c | 68 + .../e2sim/previous/ASN1c/CellInformation-List.h | 59 + .../previous/ASN1c/CellMeasurementResult-Item.c | 114 + .../previous/ASN1c/CellMeasurementResult-Item.h | 70 + .../previous/ASN1c/CellMeasurementResult-List.c | 68 + .../previous/ASN1c/CellMeasurementResult-List.h | 59 + .../e2sim/previous/ASN1c/CellReplacingInfo.c | 81 + .../e2sim/previous/ASN1c/CellReplacingInfo.h | 66 + .../e2sim/previous/ASN1c/CellReportingIndicator.c | 71 + .../e2sim/previous/ASN1c/CellReportingIndicator.h | 71 + .../e2sim/previous/ASN1c/CellToReport-Item.c | 81 + .../e2sim/previous/ASN1c/CellToReport-Item.h | 64 + .../e2sim/previous/ASN1c/CellToReport-List.c | 68 + .../e2sim/previous/ASN1c/CellToReport-List.h | 59 + .../e2-interface/e2sim/previous/ASN1c/CellType.c | 81 + .../e2-interface/e2sim/previous/ASN1c/CellType.h | 66 + .../e2sim/previous/ASN1c/CoMPHypothesisSet.c | 68 + .../e2sim/previous/ASN1c/CoMPHypothesisSet.h | 62 + .../e2sim/previous/ASN1c/CoMPHypothesisSetItem.c | 127 + .../e2sim/previous/ASN1c/CoMPHypothesisSetItem.h | 68 + .../e2sim/previous/ASN1c/CoMPInformation.c | 91 + .../e2sim/previous/ASN1c/CoMPInformation.h | 68 + .../e2sim/previous/ASN1c/CoMPInformationItem.c | 132 + .../e2sim/previous/ASN1c/CoMPInformationItem.h | 79 + .../previous/ASN1c/CoMPInformationStartTime.c | 192 + .../previous/ASN1c/CoMPInformationStartTime.h | 78 + .../ASN1c/CompleteFailureCauseInformation-Item.c | 91 + .../ASN1c/CompleteFailureCauseInformation-Item.h | 66 + .../ASN1c/CompleteFailureCauseInformation-List.c | 68 + .../ASN1c/CompleteFailureCauseInformation-List.h | 59 + .../previous/ASN1c/CompositeAvailableCapacity.c | 91 + .../previous/ASN1c/CompositeAvailableCapacity.h | 68 + .../ASN1c/CompositeAvailableCapacityGroup.c | 91 + .../ASN1c/CompositeAvailableCapacityGroup.h | 67 + .../e2sim/previous/ASN1c/Correlation-ID.c | 80 + .../e2sim/previous/ASN1c/Correlation-ID.h | 62 + .../previous/ASN1c/CoverageModification-Item.c | 131 + .../previous/ASN1c/CoverageModification-Item.h | 70 + .../previous/ASN1c/CoverageModificationList.c | 68 + .../previous/ASN1c/CoverageModificationList.h | 62 + .../e2sim/previous/ASN1c/Criticality.c | 73 + .../e2sim/previous/ASN1c/Criticality.h | 70 + .../ASN1c/CriticalityDiagnostics-IE-List.c | 142 + .../ASN1c/CriticalityDiagnostics-IE-List.h | 81 + .../e2sim/previous/ASN1c/CriticalityDiagnostics.c | 112 + .../e2sim/previous/ASN1c/CriticalityDiagnostics.h | 72 + .../e2sim/previous/ASN1c/CyclicPrefixDL.c | 73 + .../e2sim/previous/ASN1c/CyclicPrefixDL.h | 72 + .../e2sim/previous/ASN1c/CyclicPrefixUL.c | 73 + .../e2sim/previous/ASN1c/CyclicPrefixUL.h | 72 + .../e2sim/previous/ASN1c/DL-ABS-status.c | 79 + .../e2sim/previous/ASN1c/DL-ABS-status.h | 62 + .../e2sim/previous/ASN1c/DL-Forwarding.c | 71 + .../e2sim/previous/ASN1c/DL-Forwarding.h | 71 + .../e2sim/previous/ASN1c/DL-GBR-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/DL-GBR-PRB-usage.h | 62 + .../e2sim/previous/ASN1c/DL-Total-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/DL-Total-PRB-usage.h | 62 + .../e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h | 62 + .../previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c | 79 + .../previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h | 62 + .../ASN1c/DLResourceBitmapULandDLSharing.c | 85 + .../ASN1c/DLResourceBitmapULandDLSharing.h | 62 + .../previous/ASN1c/DLResourcesULandDLSharing.c | 80 + .../previous/ASN1c/DLResourcesULandDLSharing.h | 77 + .../e2-interface/e2sim/previous/ASN1c/DRB-ID.c | 79 + .../e2-interface/e2sim/previous/ASN1c/DRB-ID.h | 62 + .../ASN1c/DataForwardingAddressIndication.c | 68 + .../ASN1c/DataForwardingAddressIndication.h | 60 + .../previous/ASN1c/DataTrafficResourceIndication.c | 132 + .../previous/ASN1c/DataTrafficResourceIndication.h | 70 + .../e2sim/previous/ASN1c/DataTrafficResources.c | 85 + .../e2sim/previous/ASN1c/DataTrafficResources.h | 62 + .../e2sim/previous/ASN1c/DeactivationIndication.c | 71 + .../e2sim/previous/ASN1c/DeactivationIndication.h | 71 + .../e2sim/previous/ASN1c/DeliveryStatus.c | 111 + .../e2sim/previous/ASN1c/DeliveryStatus.h | 66 + .../e2sim/previous/ASN1c/DuplicationActivation.c | 73 + .../e2sim/previous/ASN1c/DuplicationActivation.h | 72 + .../ASN1c/DynamicDLTransmissionInformation.c | 81 + .../ASN1c/DynamicDLTransmissionInformation.h | 79 + .../e2sim/previous/ASN1c/DynamicNAICSInformation.c | 240 + .../e2sim/previous/ASN1c/DynamicNAICSInformation.h | 77 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-ID.c | 79 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-ID.h | 62 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-Item.c | 91 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-Item.h | 68 + .../previous/ASN1c/E-RAB-Level-QoS-Parameters.c | 102 + .../previous/ASN1c/E-RAB-Level-QoS-Parameters.h | 70 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-List.c | 68 + .../e2-interface/e2sim/previous/ASN1c/E-RAB-List.h | 62 + .../e2sim/previous/ASN1c/E-RABUsageReport-Item.c | 315 + .../e2sim/previous/ASN1c/E-RABUsageReport-Item.h | 72 + .../e2sim/previous/ASN1c/E-RABUsageReportList.c | 68 + .../e2sim/previous/ASN1c/E-RABUsageReportList.h | 62 + .../e2sim/previous/ASN1c/E-RABs-Admitted-Item.c | 102 + .../e2sim/previous/ASN1c/E-RABs-Admitted-Item.h | 67 + .../e2sim/previous/ASN1c/E-RABs-Admitted-List.c | 68 + .../e2sim/previous/ASN1c/E-RABs-Admitted-List.h | 59 + .../E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c | 112 + .../E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h | 71 + .../E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c | 91 + .../E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h | 68 + .../ASN1c/E-RABs-Admitted-ToBeAdded-Item.c | 82 + .../ASN1c/E-RABs-Admitted-ToBeAdded-Item.h | 76 + .../ASN1c/E-RABs-Admitted-ToBeAdded-List.c | 68 + .../ASN1c/E-RABs-Admitted-ToBeAdded-List.h | 59 + ...RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c | 112 + ...RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h | 71 + ...Bs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c | 91 + ...Bs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h | 68 + .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c | 82 + .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h | 76 + .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c | 68 + .../ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h | 59 + ...BeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c | 92 + ...BeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h | 68 + ...-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c | 144 + ...-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h | 76 + .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c | 157 + .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h | 92 + .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c | 68 + .../E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h | 59 + ...-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c | 92 + ...-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h | 68 + ...ted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c | 144 + ...ted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h | 76 + .../E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c | 157 + .../E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h | 92 + .../E-RABs-Admitted-ToBeAdded-SgNBModAckList.c | 68 + .../E-RABs-Admitted-ToBeAdded-SgNBModAckList.h | 59 + ...s-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c | 92 + ...s-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h | 68 + ...Admitted-ToBeModified-ModAckItem-Split-Bearer.c | 92 + ...Admitted-ToBeModified-ModAckItem-Split-Bearer.h | 68 + .../E-RABs-Admitted-ToBeModified-ModAckItem.c | 82 + .../E-RABs-Admitted-ToBeModified-ModAckItem.h | 76 + .../E-RABs-Admitted-ToBeModified-ModAckList.c | 68 + .../E-RABs-Admitted-ToBeModified-ModAckList.h | 59 + ...BeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c | 82 + ...BeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h | 66 + ...-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c | 114 + ...-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h | 71 + .../E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c | 157 + .../E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h | 92 + .../E-RABs-Admitted-ToBeModified-SgNBModAckList.c | 68 + .../E-RABs-Admitted-ToBeModified-SgNBModAckList.h | 59 + ...s-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c | 81 + ...s-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h | 66 + ...Admitted-ToBeReleased-ModAckItem-Split-Bearer.c | 81 + ...Admitted-ToBeReleased-ModAckItem-Split-Bearer.h | 66 + .../E-RABs-Admitted-ToBeReleased-ModAckList.c | 68 + .../E-RABs-Admitted-ToBeReleased-ModAckList.h | 59 + ...BeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c | 71 + ...BeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h | 64 + ...-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c | 71 + ...-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h | 64 + .../E-RABs-Admitted-ToBeReleased-SgNBModAckList.c | 68 + .../E-RABs-Admitted-ToBeReleased-SgNBModAckList.h | 59 + ...RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c | 91 + ...RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h | 66 + ...-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c | 68 + ...-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h | 59 + .../ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c | 82 + .../ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h | 76 + .../E-RABs-Admitted-ToReleased-SgNBModAck-Item.c | 157 + .../E-RABs-Admitted-ToReleased-SgNBModAck-Item.h | 92 + ...eModified-SgNBModConf-Item-SgNBPDCPnotpresent.c | 82 + ...eModified-SgNBModConf-Item-SgNBPDCPnotpresent.h | 66 + ...ToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c | 71 + ...ToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h | 64 + .../E-RABs-AdmittedToBeModified-SgNBModConf-Item.c | 157 + .../E-RABs-AdmittedToBeModified-SgNBModConf-Item.h | 92 + .../E-RABs-AdmittedToBeModified-SgNBModConfList.c | 68 + .../E-RABs-AdmittedToBeModified-SgNBModConfList.h | 59 + .../ASN1c/E-RABs-DataForwardingAddress-Item.c | 91 + .../ASN1c/E-RABs-DataForwardingAddress-Item.h | 66 + .../ASN1c/E-RABs-DataForwardingAddress-List.c | 68 + .../ASN1c/E-RABs-DataForwardingAddress-List.h | 59 + .../ASN1c/E-RABs-SubjectToCounterCheck-List.c | 68 + .../ASN1c/E-RABs-SubjectToCounterCheck-List.h | 59 + .../ASN1c/E-RABs-SubjectToCounterCheckItem.c | 243 + .../ASN1c/E-RABs-SubjectToCounterCheckItem.h | 69 + .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c | 243 + .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h | 69 + .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c | 68 + .../ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h | 59 + .../ASN1c/E-RABs-SubjectToStatusTransfer-Item.c | 111 + .../ASN1c/E-RABs-SubjectToStatusTransfer-Item.h | 69 + .../ASN1c/E-RABs-SubjectToStatusTransfer-List.c | 68 + .../ASN1c/E-RABs-SubjectToStatusTransfer-List.h | 59 + .../ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c | 111 + .../ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h | 72 + .../ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c | 101 + .../ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h | 70 + .../e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c | 82 + .../e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h | 76 + .../previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c | 68 + .../previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h | 62 + .../e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c | 68 + .../e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h | 59 + .../ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c | 111 + .../ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h | 72 + .../E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c | 101 + .../E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h | 70 + .../previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c | 82 + .../previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h | 76 + ...-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c | 123 + ...-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h | 74 + ...ABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c | 123 + ...ABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h | 74 + .../ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c | 167 + .../ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h | 94 + .../ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c | 68 + .../ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h | 59 + ...-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c | 123 + ...-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h | 74 + ...ABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c | 123 + ...ABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h | 74 + .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c | 167 + .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h | 94 + .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c | 68 + .../ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h | 62 + .../ASN1c/E-RABs-ToBeModified-List-ModReq.c | 68 + .../ASN1c/E-RABs-ToBeModified-List-ModReq.h | 62 + .../E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c | 103 + .../E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h | 70 + .../E-RABs-ToBeModified-ModReqItem-Split-Bearer.c | 103 + .../E-RABs-ToBeModified-ModReqItem-Split-Bearer.h | 70 + .../ASN1c/E-RABs-ToBeModified-ModReqItem.c | 82 + .../ASN1c/E-RABs-ToBeModified-ModReqItem.h | 76 + ...BeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c | 104 + ...BeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h | 70 + ...-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c | 114 + ...-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h | 71 + .../ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c | 157 + .../ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h | 92 + .../ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c | 68 + .../ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h | 62 + ...eModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c | 92 + ...eModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h | 67 + ...ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c | 114 + ...ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h | 71 + .../ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c | 157 + .../ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h | 92 + .../ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c | 68 + .../ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h | 59 + .../ASN1c/E-RABs-ToBeReleased-List-ModReq.c | 68 + .../ASN1c/E-RABs-ToBeReleased-List-ModReq.h | 62 + .../ASN1c/E-RABs-ToBeReleased-List-RelConf.c | 68 + .../ASN1c/E-RABs-ToBeReleased-List-RelConf.h | 59 + .../ASN1c/E-RABs-ToBeReleased-List-RelReq.c | 68 + .../ASN1c/E-RABs-ToBeReleased-List-RelReq.h | 59 + .../E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c | 102 + .../E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h | 69 + .../E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c | 92 + .../E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h | 68 + .../ASN1c/E-RABs-ToBeReleased-ModReqItem.c | 82 + .../ASN1c/E-RABs-ToBeReleased-ModReqItem.h | 76 + .../previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c | 68 + .../previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h | 59 + .../ASN1c/E-RABs-ToBeReleased-ModReqdItem.c | 91 + .../ASN1c/E-RABs-ToBeReleased-ModReqdItem.h | 66 + .../E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c | 102 + .../E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h | 69 + .../E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c | 92 + .../E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h | 68 + .../ASN1c/E-RABs-ToBeReleased-RelConfItem.c | 82 + .../ASN1c/E-RABs-ToBeReleased-RelConfItem.h | 76 + .../E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c | 102 + .../E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h | 69 + .../E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c | 92 + .../E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h | 68 + .../ASN1c/E-RABs-ToBeReleased-RelReqItem.c | 82 + .../ASN1c/E-RABs-ToBeReleased-RelReqItem.h | 76 + ...eReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c | 71 + ...eReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h | 64 + ...ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c | 92 + ...ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h | 67 + .../ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c | 157 + .../ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h | 92 + .../ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h | 59 + ...BeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c | 71 + ...BeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h | 64 + ...-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c | 92 + ...-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h | 67 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c | 157 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h | 92 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h | 62 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c | 91 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h | 66 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h | 59 + ...eReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c | 71 + ...eReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h | 64 + ...ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c | 92 + ...ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h | 67 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c | 157 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h | 92 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h | 59 + ...BeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c | 71 + ...BeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h | 64 + ...-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c | 92 + ...-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h | 67 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c | 157 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h | 92 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h | 59 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c | 91 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h | 66 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c | 68 + .../ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h | 59 + .../e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c | 111 + .../e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h | 70 + .../e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c | 68 + .../e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h | 62 + .../previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c | 68 + .../previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h | 62 + .../previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c | 101 + .../previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h | 68 + .../e2-interface/e2sim/previous/ASN1c/E2AP-PDU.c | 93 + .../e2-interface/e2sim/previous/ASN1c/E2AP-PDU.h | 79 + .../previous/ASN1c/E2SM-gNB-X2-actionDefinition.c | 154 + .../previous/ASN1c/E2SM-gNB-X2-actionDefinition.h | 71 + .../previous/ASN1c/E2SM-gNB-X2-callProcessID.c | 68 + .../previous/ASN1c/E2SM-gNB-X2-callProcessID.h | 60 + .../previous/ASN1c/E2SM-gNB-X2-controlHeader.c | 78 + .../previous/ASN1c/E2SM-gNB-X2-controlHeader.h | 62 + .../previous/ASN1c/E2SM-gNB-X2-controlMessage.c | 68 + .../previous/ASN1c/E2SM-gNB-X2-controlMessage.h | 60 + .../ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c | 174 + .../ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h | 75 + .../previous/ASN1c/E2SM-gNB-X2-indicationHeader.c | 90 + .../previous/ASN1c/E2SM-gNB-X2-indicationHeader.h | 64 + .../previous/ASN1c/E2SM-gNB-X2-indicationMessage.c | 68 + .../previous/ASN1c/E2SM-gNB-X2-indicationMessage.h | 60 + .../e2-interface/e2sim/previous/ASN1c/EARFCN.c | 79 + .../e2-interface/e2sim/previous/ASN1c/EARFCN.h | 62 + .../e2sim/previous/ASN1c/EARFCNExtension.c | 79 + .../e2sim/previous/ASN1c/EARFCNExtension.h | 62 + .../e2-interface/e2sim/previous/ASN1c/ECGI.c | 91 + .../e2-interface/e2sim/previous/ASN1c/ECGI.h | 68 + .../previous/ASN1c/EN-DC-ResourceConfiguration.c | 245 + .../previous/ASN1c/EN-DC-ResourceConfiguration.h | 94 + .../e2-interface/e2sim/previous/ASN1c/ENB-ID.c | 244 + .../e2-interface/e2sim/previous/ASN1c/ENB-ID.h | 79 + .../e2sim/previous/ASN1c/ENBConfigurationUpdate.c | 68 + .../e2sim/previous/ASN1c/ENBConfigurationUpdate.h | 62 + .../ASN1c/ENBConfigurationUpdateAcknowledge.c | 68 + .../ASN1c/ENBConfigurationUpdateAcknowledge.h | 62 + .../previous/ASN1c/ENBConfigurationUpdateFailure.c | 68 + .../previous/ASN1c/ENBConfigurationUpdateFailure.h | 62 + .../previous/ASN1c/ENDCCellActivationFailure.c | 68 + .../previous/ASN1c/ENDCCellActivationFailure.h | 60 + .../previous/ASN1c/ENDCCellActivationRequest.c | 68 + .../previous/ASN1c/ENDCCellActivationRequest.h | 60 + .../previous/ASN1c/ENDCCellActivationResponse.c | 68 + .../previous/ASN1c/ENDCCellActivationResponse.h | 60 + .../e2sim/previous/ASN1c/ENDCConfigurationUpdate.c | 68 + .../e2sim/previous/ASN1c/ENDCConfigurationUpdate.h | 62 + .../ASN1c/ENDCConfigurationUpdateAcknowledge.c | 68 + .../ASN1c/ENDCConfigurationUpdateAcknowledge.h | 62 + .../ASN1c/ENDCConfigurationUpdateFailure.c | 68 + .../ASN1c/ENDCConfigurationUpdateFailure.h | 62 + .../e2sim/previous/ASN1c/ENDCPartialResetConfirm.c | 68 + .../e2sim/previous/ASN1c/ENDCPartialResetConfirm.h | 60 + .../previous/ASN1c/ENDCPartialResetRequired.c | 68 + .../previous/ASN1c/ENDCPartialResetRequired.h | 60 + .../e2sim/previous/ASN1c/ENDCX2RemovalFailure.c | 68 + .../e2sim/previous/ASN1c/ENDCX2RemovalFailure.h | 60 + .../e2sim/previous/ASN1c/ENDCX2RemovalRequest.c | 68 + .../e2sim/previous/ASN1c/ENDCX2RemovalRequest.h | 60 + .../e2sim/previous/ASN1c/ENDCX2RemovalResponse.c | 68 + .../e2sim/previous/ASN1c/ENDCX2RemovalResponse.h | 60 + .../e2sim/previous/ASN1c/ENDCX2SetupFailure.c | 68 + .../e2sim/previous/ASN1c/ENDCX2SetupFailure.h | 62 + .../e2sim/previous/ASN1c/ENDCX2SetupRequest.c | 68 + .../e2sim/previous/ASN1c/ENDCX2SetupRequest.h | 62 + .../e2sim/previous/ASN1c/ENDCX2SetupResponse.c | 68 + .../e2sim/previous/ASN1c/ENDCX2SetupResponse.h | 62 + .../e2-interface/e2sim/previous/ASN1c/EPLMNs.c | 67 + .../e2-interface/e2sim/previous/ASN1c/EPLMNs.h | 60 + .../e2sim/previous/ASN1c/ERABActivityNotifyItem.c | 91 + .../e2sim/previous/ASN1c/ERABActivityNotifyItem.h | 68 + .../previous/ASN1c/ERABActivityNotifyItemList.c | 68 + .../previous/ASN1c/ERABActivityNotifyItemList.h | 62 + .../e2sim/previous/ASN1c/EUTRA-Mode-Info.c | 82 + .../e2sim/previous/ASN1c/EUTRA-Mode-Info.h | 79 + .../e2sim/previous/ASN1c/EUTRANCellIdentifier.c | 85 + .../e2sim/previous/ASN1c/EUTRANCellIdentifier.h | 62 + .../ASN1c/EUTRANRCellResourceCoordinationRequest.c | 68 + .../ASN1c/EUTRANRCellResourceCoordinationRequest.h | 60 + .../EUTRANRCellResourceCoordinationResponse.c | 68 + .../EUTRANRCellResourceCoordinationResponse.h | 60 + .../e2sim/previous/ASN1c/EUTRANTraceID.c | 80 + .../e2sim/previous/ASN1c/EUTRANTraceID.h | 62 + .../e2sim/previous/ASN1c/EncryptionAlgorithms.c | 85 + .../e2sim/previous/ASN1c/EncryptionAlgorithms.h | 62 + .../e2sim/previous/ASN1c/EnhancedRNTP.c | 138 + .../e2sim/previous/ASN1c/EnhancedRNTP.h | 70 + .../e2sim/previous/ASN1c/EnhancedRNTPStartTime.c | 151 + .../e2sim/previous/ASN1c/EnhancedRNTPStartTime.h | 67 + .../e2sim/previous/ASN1c/ErrorIndication.c | 68 + .../e2sim/previous/ASN1c/ErrorIndication.h | 62 + .../e2-interface/e2sim/previous/ASN1c/EventType.c | 71 + .../e2-interface/e2sim/previous/ASN1c/EventType.h | 71 + .../e2sim/previous/ASN1c/ExpectedActivityPeriod.c | 79 + .../e2sim/previous/ASN1c/ExpectedActivityPeriod.h | 62 + .../e2sim/previous/ASN1c/ExpectedHOInterval.c | 83 + .../e2sim/previous/ASN1c/ExpectedHOInterval.h | 77 + .../e2sim/previous/ASN1c/ExpectedIdlePeriod.c | 79 + .../e2sim/previous/ASN1c/ExpectedIdlePeriod.h | 62 + .../previous/ASN1c/ExpectedUEActivityBehaviour.c | 101 + .../previous/ASN1c/ExpectedUEActivityBehaviour.h | 70 + .../e2sim/previous/ASN1c/ExpectedUEBehaviour.c | 92 + .../e2sim/previous/ASN1c/ExpectedUEBehaviour.h | 68 + .../e2sim/previous/ASN1c/ExtendedBitRate.c | 85 + .../e2sim/previous/ASN1c/ExtendedBitRate.h | 62 + .../ASN1c/ExtendedULInterferenceOverloadInfo.c | 127 + .../ASN1c/ExtendedULInterferenceOverloadInfo.h | 68 + .../e2-interface/e2sim/previous/ASN1c/FDD-Info.c | 111 + .../e2-interface/e2sim/previous/ASN1c/FDD-Info.h | 70 + .../FDD-InfoNeighbourServedNRCell-Information.c | 91 + .../FDD-InfoNeighbourServedNRCell-Information.h | 67 + .../ASN1c/FDD-InfoServedNRCell-Information.c | 111 + .../ASN1c/FDD-InfoServedNRCell-Information.h | 70 + .../e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.c | 80 + .../e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.h | 62 + .../e2sim/previous/ASN1c/ForbiddenInterRATs.c | 81 + .../e2sim/previous/ASN1c/ForbiddenInterRATs.h | 76 + .../e2sim/previous/ASN1c/ForbiddenLACs.c | 67 + .../e2sim/previous/ASN1c/ForbiddenLACs.h | 60 + .../e2sim/previous/ASN1c/ForbiddenLAs-Item.c | 91 + .../e2sim/previous/ASN1c/ForbiddenLAs-Item.h | 68 + .../e2sim/previous/ASN1c/ForbiddenLAs.c | 68 + .../e2sim/previous/ASN1c/ForbiddenLAs.h | 62 + .../e2sim/previous/ASN1c/ForbiddenTACs.c | 67 + .../e2sim/previous/ASN1c/ForbiddenTACs.h | 60 + .../e2sim/previous/ASN1c/ForbiddenTAs-Item.c | 91 + .../e2sim/previous/ASN1c/ForbiddenTAs-Item.h | 68 + .../e2sim/previous/ASN1c/ForbiddenTAs.c | 68 + .../e2sim/previous/ASN1c/ForbiddenTAs.h | 62 + .../e2-interface/e2sim/previous/ASN1c/Fourframes.c | 85 + .../e2-interface/e2sim/previous/ASN1c/Fourframes.h | 62 + .../e2sim/previous/ASN1c/FreqBandIndicator.c | 79 + .../e2sim/previous/ASN1c/FreqBandIndicator.h | 62 + .../previous/ASN1c/FreqBandIndicatorPriority.c | 73 + .../previous/ASN1c/FreqBandIndicatorPriority.h | 72 + .../e2sim/previous/ASN1c/FreqBandNrItem.c | 195 + .../e2sim/previous/ASN1c/FreqBandNrItem.h | 75 + .../e2sim/previous/ASN1c/GBR-QosInformation.c | 111 + .../e2sim/previous/ASN1c/GBR-QosInformation.h | 69 + .../e2-interface/e2sim/previous/ASN1c/GNB-ID.c | 106 + .../e2-interface/e2sim/previous/ASN1c/GNB-ID.h | 74 + .../e2sim/previous/ASN1c/GNBOverloadInformation.c | 73 + .../e2sim/previous/ASN1c/GNBOverloadInformation.h | 72 + .../e2sim/previous/ASN1c/GNBStatusIndication.c | 68 + .../e2sim/previous/ASN1c/GNBStatusIndication.h | 62 + .../e2-interface/e2sim/previous/ASN1c/GTP-TEI.c | 80 + .../e2-interface/e2sim/previous/ASN1c/GTP-TEI.h | 62 + .../e2sim/previous/ASN1c/GTPtunnelEndpoint.c | 91 + .../e2sim/previous/ASN1c/GTPtunnelEndpoint.h | 68 + .../e2sim/previous/ASN1c/GU-Group-ID.c | 91 + .../e2sim/previous/ASN1c/GU-Group-ID.h | 68 + .../e2sim/previous/ASN1c/GUGroupIDList.c | 68 + .../e2sim/previous/ASN1c/GUGroupIDList.h | 62 + .../e2-interface/e2sim/previous/ASN1c/GUMMEI.c | 91 + .../e2-interface/e2sim/previous/ASN1c/GUMMEI.h | 68 + .../e2sim/previous/ASN1c/GlobalENB-ID.c | 91 + .../e2sim/previous/ASN1c/GlobalENB-ID.h | 68 + .../e2sim/previous/ASN1c/GlobalGNB-ID.c | 91 + .../e2sim/previous/ASN1c/GlobalGNB-ID.h | 68 + .../e2-interface/e2sim/previous/ASN1c/HFN.c | 79 + .../e2-interface/e2sim/previous/ASN1c/HFN.h | 62 + .../e2sim/previous/ASN1c/HFNModified.c | 79 + .../e2sim/previous/ASN1c/HFNModified.h | 62 + .../e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c | 79 + .../e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h | 62 + .../e2sim/previous/ASN1c/HWLoadIndicator.c | 91 + .../e2sim/previous/ASN1c/HWLoadIndicator.h | 67 + .../e2sim/previous/ASN1c/HandoverCancel.c | 68 + .../e2sim/previous/ASN1c/HandoverCancel.h | 60 + .../previous/ASN1c/HandoverPreparationFailure.c | 68 + .../previous/ASN1c/HandoverPreparationFailure.h | 60 + .../e2sim/previous/ASN1c/HandoverReport.c | 68 + .../e2sim/previous/ASN1c/HandoverReport.h | 60 + .../e2sim/previous/ASN1c/HandoverReportType.c | 75 + .../e2sim/previous/ASN1c/HandoverReportType.h | 73 + .../e2sim/previous/ASN1c/HandoverRequest.c | 68 + .../e2sim/previous/ASN1c/HandoverRequest.h | 60 + .../previous/ASN1c/HandoverRequestAcknowledge.c | 68 + .../previous/ASN1c/HandoverRequestAcknowledge.h | 60 + .../e2sim/previous/ASN1c/HandoverRestrictionList.c | 124 + .../e2sim/previous/ASN1c/HandoverRestrictionList.h | 74 + .../e2-interface/e2sim/previous/ASN1c/INTEGER.c | 1753 + .../e2-interface/e2sim/previous/ASN1c/INTEGER.h | 126 + .../e2sim/previous/ASN1c/InitiatingMessage.c | 526 + .../e2sim/previous/ASN1c/InitiatingMessage.h | 144 + .../ASN1c/InitiatingNodeType-EndcConfigUpdate.c | 81 + .../ASN1c/InitiatingNodeType-EndcConfigUpdate.h | 75 + .../ASN1c/InitiatingNodeType-EndcX2Removal.c | 81 + .../ASN1c/InitiatingNodeType-EndcX2Removal.h | 75 + .../ASN1c/InitiatingNodeType-EndcX2Setup.c | 81 + .../ASN1c/InitiatingNodeType-EndcX2Setup.h | 75 + ...atingNodeType-EutranrCellResourceCoordination.c | 81 + ...atingNodeType-EutranrCellResourceCoordination.h | 75 + .../previous/ASN1c/IntegrityProtectionAlgorithms.c | 85 + .../previous/ASN1c/IntegrityProtectionAlgorithms.h | 62 + .../e2sim/previous/ASN1c/Interface-ID.c | 82 + .../e2sim/previous/ASN1c/Interface-ID.h | 79 + .../e2sim/previous/ASN1c/InterfaceDirection.c | 73 + .../e2sim/previous/ASN1c/InterfaceDirection.h | 72 + .../e2sim/previous/ASN1c/InterfaceMessage.c | 49 + .../e2sim/previous/ASN1c/InterfaceMessage.h | 61 + .../e2sim/previous/ASN1c/InterfaceMessageType.c | 78 + .../e2sim/previous/ASN1c/InterfaceMessageType.h | 64 + .../e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c | 79 + .../e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h | 62 + .../previous/ASN1c/InterfaceProtocolIE-Item.c | 88 + .../previous/ASN1c/InterfaceProtocolIE-Item.h | 66 + .../previous/ASN1c/InterfaceProtocolIE-Test.c | 79 + .../previous/ASN1c/InterfaceProtocolIE-Test.h | 75 + .../previous/ASN1c/InterfaceProtocolIE-Value.c | 110 + .../previous/ASN1c/InterfaceProtocolIE-Value.h | 85 + .../e2sim/previous/ASN1c/InterfacesToTrace.c | 85 + .../e2sim/previous/ASN1c/InterfacesToTrace.h | 62 + .../e2sim/previous/ASN1c/InvokeIndication.c | 75 + .../e2sim/previous/ASN1c/InvokeIndication.h | 73 + .../e2sim/previous/ASN1c/Key-eNodeB-Star.c | 85 + .../e2sim/previous/ASN1c/Key-eNodeB-Star.h | 62 + .../e2-interface/e2sim/previous/ASN1c/LAC.c | 80 + .../e2-interface/e2sim/previous/ASN1c/LAC.h | 62 + .../e2-interface/e2sim/previous/ASN1c/LCID.c | 79 + .../e2-interface/e2sim/previous/ASN1c/LCID.h | 62 + .../e2-interface/e2sim/previous/ASN1c/LHN-ID.c | 80 + .../e2-interface/e2sim/previous/ASN1c/LHN-ID.h | 62 + .../e2sim/previous/ASN1c/LastVisitedCell-Item.c | 102 + .../e2sim/previous/ASN1c/LastVisitedCell-Item.h | 84 + .../ASN1c/LastVisitedEUTRANCellInformation.c | 101 + .../ASN1c/LastVisitedEUTRANCellInformation.h | 70 + .../ASN1c/LastVisitedGERANCellInformation.c | 70 + .../ASN1c/LastVisitedGERANCellInformation.h | 74 + .../ASN1c/LastVisitedNGRANCellInformation.c | 49 + .../ASN1c/LastVisitedNGRANCellInformation.h | 61 + .../ASN1c/LastVisitedUTRANCellInformation.c | 49 + .../ASN1c/LastVisitedUTRANCellInformation.h | 61 + .../e2sim/previous/ASN1c/Limited-list.c | 122 + .../e2sim/previous/ASN1c/Limited-list.h | 77 + .../e2sim/previous/ASN1c/Links-to-log.c | 75 + .../e2sim/previous/ASN1c/Links-to-log.h | 73 + .../ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c | 68 + .../ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h | 59 + .../ListofEUTRACellsinEUTRACoordinationResp.c | 68 + .../ListofEUTRACellsinEUTRACoordinationResp.h | 59 + .../ASN1c/ListofEUTRACellsinNRCoordinationReq.c | 68 + .../ASN1c/ListofEUTRACellsinNRCoordinationReq.h | 59 + .../ASN1c/ListofNRCellsinNRCoordinationReq.c | 68 + .../ASN1c/ListofNRCellsinNRCoordinationReq.h | 59 + .../ASN1c/ListofNRCellsinNRCoordinationResp.c | 68 + .../ASN1c/ListofNRCellsinNRCoordinationResp.h | 59 + .../e2sim/previous/ASN1c/LoadIndicator.c | 77 + .../e2sim/previous/ASN1c/LoadIndicator.h | 74 + .../e2sim/previous/ASN1c/LoadInformation.c | 68 + .../e2sim/previous/ASN1c/LoadInformation.h | 62 + .../previous/ASN1c/LocationReportingInformation.c | 91 + .../previous/ASN1c/LocationReportingInformation.h | 68 + .../e2sim/previous/ASN1c/M1PeriodicReporting.c | 91 + .../e2sim/previous/ASN1c/M1PeriodicReporting.h | 68 + .../e2sim/previous/ASN1c/M1ReportingTrigger.c | 75 + .../e2sim/previous/ASN1c/M1ReportingTrigger.h | 73 + .../e2sim/previous/ASN1c/M1ThresholdEventA2.c | 81 + .../e2sim/previous/ASN1c/M1ThresholdEventA2.h | 66 + .../e2sim/previous/ASN1c/M3Configuration.c | 81 + .../e2sim/previous/ASN1c/M3Configuration.h | 66 + .../e2-interface/e2sim/previous/ASN1c/M3period.c | 75 + .../e2-interface/e2sim/previous/ASN1c/M3period.h | 73 + .../e2sim/previous/ASN1c/M4Configuration.c | 91 + .../e2sim/previous/ASN1c/M4Configuration.h | 68 + .../e2-interface/e2sim/previous/ASN1c/M4period.c | 79 + .../e2-interface/e2sim/previous/ASN1c/M4period.h | 75 + .../e2sim/previous/ASN1c/M5Configuration.c | 91 + .../e2sim/previous/ASN1c/M5Configuration.h | 68 + .../e2-interface/e2sim/previous/ASN1c/M5period.c | 79 + .../e2-interface/e2sim/previous/ASN1c/M5period.h | 75 + .../e2sim/previous/ASN1c/M6Configuration.c | 101 + .../e2sim/previous/ASN1c/M6Configuration.h | 70 + .../e2sim/previous/ASN1c/M6delay-threshold.c | 93 + .../e2sim/previous/ASN1c/M6delay-threshold.h | 82 + .../e2sim/previous/ASN1c/M6report-interval.c | 77 + .../e2sim/previous/ASN1c/M6report-interval.h | 74 + .../e2sim/previous/ASN1c/M7Configuration.c | 91 + .../e2sim/previous/ASN1c/M7Configuration.h | 68 + .../e2-interface/e2sim/previous/ASN1c/M7period.c | 79 + .../e2-interface/e2sim/previous/ASN1c/M7period.h | 62 + .../ASN1c/MBMS-Service-Area-Identity-List.c | 67 + .../ASN1c/MBMS-Service-Area-Identity-List.h | 60 + .../previous/ASN1c/MBMS-Service-Area-Identity.c | 80 + .../previous/ASN1c/MBMS-Service-Area-Identity.h | 62 + .../e2sim/previous/ASN1c/MBSFN-Subframe-Info.c | 101 + .../e2sim/previous/ASN1c/MBSFN-Subframe-Info.h | 70 + .../e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c | 68 + .../e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h | 62 + .../e2sim/previous/ASN1c/MDT-Activation.c | 73 + .../e2sim/previous/ASN1c/MDT-Activation.h | 72 + .../e2sim/previous/ASN1c/MDT-Configuration.c | 133 + .../e2sim/previous/ASN1c/MDT-Configuration.h | 76 + .../e2sim/previous/ASN1c/MDT-Location-Info.c | 85 + .../e2sim/previous/ASN1c/MDT-Location-Info.h | 62 + .../e2sim/previous/ASN1c/MDTPLMNList.c | 67 + .../e2sim/previous/ASN1c/MDTPLMNList.h | 60 + .../e2-interface/e2sim/previous/ASN1c/MME-Code.c | 80 + .../e2-interface/e2sim/previous/ASN1c/MME-Code.h | 62 + .../e2sim/previous/ASN1c/MME-Group-ID.c | 80 + .../e2sim/previous/ASN1c/MME-Group-ID.h | 62 + .../previous/ASN1c/MakeBeforeBreakIndicator.c | 71 + .../previous/ASN1c/MakeBeforeBreakIndicator.h | 71 + .../e2sim/previous/ASN1c/Makefile.am.asn1convert | 31 + .../e2sim/previous/ASN1c/Makefile.am.libasncodec | 1592 + .../previous/ASN1c/ManagementBasedMDTallowed.c | 71 + .../previous/ASN1c/ManagementBasedMDTallowed.h | 71 + .../e2sim/previous/ASN1c/Masked-IMEISV.c | 85 + .../e2sim/previous/ASN1c/Masked-IMEISV.h | 62 + .../ASN1c/MeNBCoordinationAssistanceInformation.c | 71 + .../ASN1c/MeNBCoordinationAssistanceInformation.h | 71 + .../ASN1c/MeNBResourceCoordinationInformation.c | 173 + .../ASN1c/MeNBResourceCoordinationInformation.h | 69 + .../e2sim/previous/ASN1c/MeNBtoSeNBContainer.c | 49 + .../e2sim/previous/ASN1c/MeNBtoSeNBContainer.h | 61 + .../e2sim/previous/ASN1c/MeNBtoSgNBContainer.c | 49 + .../e2sim/previous/ASN1c/MeNBtoSgNBContainer.h | 61 + .../e2sim/previous/ASN1c/Measurement-ID.c | 79 + .../e2sim/previous/ASN1c/Measurement-ID.h | 62 + .../previous/ASN1c/MeasurementFailureCause-Item.c | 91 + .../previous/ASN1c/MeasurementFailureCause-Item.h | 66 + .../previous/ASN1c/MeasurementFailureCause-List.c | 68 + .../previous/ASN1c/MeasurementFailureCause-List.h | 62 + .../ASN1c/MeasurementInitiationResult-Item.c | 92 + .../ASN1c/MeasurementInitiationResult-Item.h | 66 + .../ASN1c/MeasurementInitiationResult-List.c | 68 + .../ASN1c/MeasurementInitiationResult-List.h | 59 + .../e2sim/previous/ASN1c/MeasurementThresholdA2.c | 80 + .../e2sim/previous/ASN1c/MeasurementThresholdA2.h | 77 + .../e2sim/previous/ASN1c/MeasurementsToActivate.c | 85 + .../e2sim/previous/ASN1c/MeasurementsToActivate.h | 62 + .../previous/ASN1c/MobilityChangeAcknowledge.c | 68 + .../previous/ASN1c/MobilityChangeAcknowledge.h | 60 + .../e2sim/previous/ASN1c/MobilityChangeFailure.c | 68 + .../e2sim/previous/ASN1c/MobilityChangeFailure.h | 60 + .../e2sim/previous/ASN1c/MobilityChangeRequest.c | 68 + .../e2sim/previous/ASN1c/MobilityChangeRequest.h | 60 + .../e2sim/previous/ASN1c/MobilityInformation.c | 85 + .../e2sim/previous/ASN1c/MobilityInformation.h | 61 + .../previous/ASN1c/MobilityParametersInformation.c | 98 + .../previous/ASN1c/MobilityParametersInformation.h | 62 + .../ASN1c/MobilityParametersModificationRange.c | 138 + .../ASN1c/MobilityParametersModificationRange.h | 63 + .../e2sim/previous/ASN1c/MultibandInfoList.c | 68 + .../e2sim/previous/ASN1c/MultibandInfoList.h | 62 + .../e2-interface/e2sim/previous/ASN1c/NR-TxBW.c | 91 + .../e2-interface/e2sim/previous/ASN1c/NR-TxBW.h | 68 + .../e2-interface/e2sim/previous/ASN1c/NRCGI.c | 91 + .../e2-interface/e2sim/previous/ASN1c/NRCGI.h | 68 + .../e2sim/previous/ASN1c/NRCellIdentifier.c | 85 + .../e2sim/previous/ASN1c/NRCellIdentifier.h | 62 + .../e2-interface/e2sim/previous/ASN1c/NRFreqInfo.c | 206 + .../e2-interface/e2sim/previous/ASN1c/NRFreqInfo.h | 77 + .../e2-interface/e2sim/previous/ASN1c/NRNRB.c | 127 + .../e2-interface/e2sim/previous/ASN1c/NRNRB.h | 99 + .../e2sim/previous/ASN1c/NRNeighbour-Information.c | 228 + .../e2sim/previous/ASN1c/NRNeighbour-Information.h | 111 + .../e2-interface/e2sim/previous/ASN1c/NRPCI.c | 79 + .../e2-interface/e2sim/previous/ASN1c/NRPCI.h | 62 + .../e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c | 75 + .../e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h | 73 + .../e2-interface/e2sim/previous/ASN1c/NRSCS.c | 77 + .../e2-interface/e2sim/previous/ASN1c/NRSCS.h | 74 + .../previous/ASN1c/NRUESecurityCapabilities.c | 91 + .../previous/ASN1c/NRUESecurityCapabilities.h | 68 + .../e2sim/previous/ASN1c/NRencryptionAlgorithms.c | 85 + .../e2sim/previous/ASN1c/NRencryptionAlgorithms.h | 62 + .../ASN1c/NRintegrityProtectionAlgorithms.c | 85 + .../ASN1c/NRintegrityProtectionAlgorithms.h | 62 + .../e2sim/previous/ASN1c/NRrestrictionin5GS.c | 71 + .../e2sim/previous/ASN1c/NRrestrictionin5GS.h | 71 + .../ASN1c/NRrestrictioninEPSasSecondaryRAT.c | 71 + .../ASN1c/NRrestrictioninEPSasSecondaryRAT.h | 71 + .../ASN1c/NSSS-NumOccasionDifferentPrecoder.c | 75 + .../ASN1c/NSSS-NumOccasionDifferentPrecoder.h | 73 + .../e2-interface/e2sim/previous/ASN1c/NULL.c | 317 + .../e2-interface/e2sim/previous/ASN1c/NULL.h | 63 + .../e2sim/previous/ASN1c/NativeEnumerated.c | 385 + .../e2sim/previous/ASN1c/NativeEnumerated.h | 63 + .../e2sim/previous/ASN1c/NativeInteger.c | 568 + .../e2sim/previous/ASN1c/NativeInteger.h | 64 + .../e2sim/previous/ASN1c/Neighbour-Information.c | 142 + .../e2sim/previous/ASN1c/Neighbour-Information.h | 81 + .../e2sim/previous/ASN1c/NewDRBIDrequest.c | 71 + .../e2sim/previous/ASN1c/NewDRBIDrequest.h | 71 + .../e2sim/previous/ASN1c/NextHopChainingCount.c | 79 + .../e2sim/previous/ASN1c/NextHopChainingCount.h | 62 + .../e2sim/previous/ASN1c/Number-of-Antennaports.c | 75 + .../e2sim/previous/ASN1c/Number-of-Antennaports.h | 73 + .../e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c | 674 + .../e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h | 174 + .../e2sim/previous/ASN1c/OCTET_STRING.c | 2427 + .../e2sim/previous/ASN1c/OCTET_STRING.h | 120 + .../e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.c | 527 + .../e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.h | 95 + .../ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c | 111 + .../ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h | 91 + .../e2-interface/e2sim/previous/ASN1c/Old-ECGIs.c | 68 + .../e2-interface/e2sim/previous/ASN1c/Old-ECGIs.h | 59 + .../e2-interface/e2sim/previous/ASN1c/Oneframe.c | 85 + .../e2-interface/e2sim/previous/ASN1c/Oneframe.h | 62 + .../e2-interface/e2sim/previous/ASN1c/PA-Values.c | 85 + .../e2-interface/e2sim/previous/ASN1c/PA-Values.h | 78 + .../e2-interface/e2sim/previous/ASN1c/PCI.c | 79 + .../e2-interface/e2sim/previous/ASN1c/PCI.h | 62 + .../e2-interface/e2sim/previous/ASN1c/PDCP-SN.c | 79 + .../e2-interface/e2sim/previous/ASN1c/PDCP-SN.h | 62 + .../e2sim/previous/ASN1c/PDCP-SNExtended.c | 79 + .../e2sim/previous/ASN1c/PDCP-SNExtended.h | 62 + .../e2sim/previous/ASN1c/PDCP-SNlength18.c | 79 + .../e2sim/previous/ASN1c/PDCP-SNlength18.h | 62 + .../e2sim/previous/ASN1c/PDCPChangeIndication.c | 73 + .../e2sim/previous/ASN1c/PDCPChangeIndication.h | 72 + .../e2sim/previous/ASN1c/PDCPSnLength.c | 73 + .../e2sim/previous/ASN1c/PDCPSnLength.h | 72 + .../e2sim/previous/ASN1c/PLMN-Identity.c | 80 + .../e2sim/previous/ASN1c/PLMN-Identity.h | 62 + .../e2sim/previous/ASN1c/PLMNAreaBasedQMC.c | 81 + .../e2sim/previous/ASN1c/PLMNAreaBasedQMC.h | 66 + .../e2sim/previous/ASN1c/PLMNListforQMC.c | 67 + .../e2sim/previous/ASN1c/PLMNListforQMC.h | 60 + .../e2sim/previous/ASN1c/PRACH-Configuration.c | 241 + .../e2sim/previous/ASN1c/PRACH-Configuration.h | 71 + .../e2sim/previous/ASN1c/Packet-LossRate.c | 79 + .../e2sim/previous/ASN1c/Packet-LossRate.h | 62 + .../e2sim/previous/ASN1c/PartialSuccessIndicator.c | 71 + .../e2sim/previous/ASN1c/PartialSuccessIndicator.h | 69 + .../e2sim/previous/ASN1c/PedestrianUE.c | 73 + .../e2sim/previous/ASN1c/PedestrianUE.h | 72 + .../e2sim/previous/ASN1c/Port-Number.c | 80 + .../e2sim/previous/ASN1c/Port-Number.h | 62 + .../e2sim/previous/ASN1c/Pre-emptionCapability.c | 71 + .../e2sim/previous/ASN1c/Pre-emptionCapability.h | 69 + .../previous/ASN1c/Pre-emptionVulnerability.c | 71 + .../previous/ASN1c/Pre-emptionVulnerability.h | 69 + .../e2-interface/e2sim/previous/ASN1c/Presence.c | 73 + .../e2-interface/e2sim/previous/ASN1c/Presence.h | 70 + .../e2sim/previous/ASN1c/PrintableString.c | 148 + .../e2sim/previous/ASN1c/PrintableString.h | 55 + .../e2sim/previous/ASN1c/PriorityLevel.c | 79 + .../e2sim/previous/ASN1c/PriorityLevel.h | 70 + .../e2sim/previous/ASN1c/PrivateIE-Container.c | 68 + .../e2sim/previous/ASN1c/PrivateIE-Container.h | 62 + .../e2sim/previous/ASN1c/PrivateIE-Field.c | 184 + .../e2sim/previous/ASN1c/PrivateIE-Field.h | 78 + .../e2sim/previous/ASN1c/PrivateIE-ID.c | 110 + .../e2sim/previous/ASN1c/PrivateIE-ID.h | 71 + .../e2sim/previous/ASN1c/PrivateMessage.c | 68 + .../e2sim/previous/ASN1c/PrivateMessage.h | 60 + .../e2sim/previous/ASN1c/ProSeAuthorized.c | 91 + .../e2sim/previous/ASN1c/ProSeAuthorized.h | 68 + .../previous/ASN1c/ProSeDirectCommunication.c | 73 + .../previous/ASN1c/ProSeDirectCommunication.h | 72 + .../e2sim/previous/ASN1c/ProSeDirectDiscovery.c | 73 + .../e2sim/previous/ASN1c/ProSeDirectDiscovery.h | 72 + .../previous/ASN1c/ProSeUEtoNetworkRelaying.c | 73 + .../previous/ASN1c/ProSeUEtoNetworkRelaying.h | 72 + .../e2sim/previous/ASN1c/ProcedureCode.c | 79 + .../e2sim/previous/ASN1c/ProcedureCode.h | 114 + .../ASN1c/ProtectedEUTRAResourceIndication.c | 201 + .../ASN1c/ProtectedEUTRAResourceIndication.h | 70 + .../previous/ASN1c/ProtectedFootprintTimePattern.c | 151 + .../previous/ASN1c/ProtectedFootprintTimePattern.h | 67 + .../previous/ASN1c/ProtectedResourceList-Item.c | 183 + .../previous/ASN1c/ProtectedResourceList-Item.h | 71 + .../e2sim/previous/ASN1c/ProtectedResourceList.c | 68 + .../e2sim/previous/ASN1c/ProtectedResourceList.h | 62 + .../previous/ASN1c/ProtocolExtensionContainer.c | 8948 +++ .../previous/ASN1c/ProtocolExtensionContainer.h | 2504 + .../e2sim/previous/ASN1c/ProtocolExtensionField.c | 40927 +++++++++++ .../e2sim/previous/ASN1c/ProtocolExtensionField.h | 5181 ++ .../e2sim/previous/ASN1c/ProtocolIE-Container.c | 4828 ++ .../e2sim/previous/ASN1c/ProtocolIE-Container.h | 1371 + .../previous/ASN1c/ProtocolIE-ContainerList.c | 27 + .../previous/ASN1c/ProtocolIE-ContainerList.h | 41 + .../previous/ASN1c/ProtocolIE-ContainerPair.c | 27 + .../previous/ASN1c/ProtocolIE-ContainerPair.h | 41 + .../previous/ASN1c/ProtocolIE-ContainerPairList.c | 27 + .../previous/ASN1c/ProtocolIE-ContainerPairList.h | 41 + .../e2sim/previous/ASN1c/ProtocolIE-Field.c | 48581 +++++++++++++ .../e2sim/previous/ASN1c/ProtocolIE-Field.h | 4903 ++ .../e2sim/previous/ASN1c/ProtocolIE-FieldPair.c | 27 + .../e2sim/previous/ASN1c/ProtocolIE-FieldPair.h | 41 + .../e2sim/previous/ASN1c/ProtocolIE-ID.c | 79 + .../e2sim/previous/ASN1c/ProtocolIE-ID.h | 414 + .../previous/ASN1c/ProtocolIE-Single-Container.c | 1154 + .../previous/ASN1c/ProtocolIE-Single-Container.h | 685 + .../e2-interface/e2sim/previous/ASN1c/QCI.c | 79 + .../e2-interface/e2sim/previous/ASN1c/QCI.h | 62 + .../e2sim/previous/ASN1c/RANfunction-Item.c | 78 + .../e2sim/previous/ASN1c/RANfunction-Item.h | 62 + .../e2sim/previous/ASN1c/RANfunctionDefinition.c | 49 + .../e2sim/previous/ASN1c/RANfunctionDefinition.h | 61 + .../e2sim/previous/ASN1c/RANfunctionID-Item.c | 68 + .../e2sim/previous/ASN1c/RANfunctionID-Item.h | 60 + .../e2sim/previous/ASN1c/RANfunctionID.c | 79 + .../e2sim/previous/ASN1c/RANfunctionID.h | 62 + .../e2sim/previous/ASN1c/RANfunctionIDcause-Item.c | 78 + .../e2sim/previous/ASN1c/RANfunctionIDcause-Item.h | 62 + .../e2sim/previous/ASN1c/RANfunctions-List.c | 68 + .../e2sim/previous/ASN1c/RANfunctions-List.h | 59 + .../e2sim/previous/ASN1c/RANfunctionsID-List.c | 68 + .../e2sim/previous/ASN1c/RANfunctionsID-List.h | 59 + .../previous/ASN1c/RANfunctionsIDcause-List.c | 68 + .../previous/ASN1c/RANfunctionsIDcause-List.h | 59 + .../e2sim/previous/ASN1c/RICaction-Admitted-Item.c | 68 + .../e2sim/previous/ASN1c/RICaction-Admitted-Item.h | 60 + .../e2sim/previous/ASN1c/RICaction-Admitted-List.c | 68 + .../e2sim/previous/ASN1c/RICaction-Admitted-List.h | 59 + .../previous/ASN1c/RICaction-NotAdmitted-Item.c | 78 + .../previous/ASN1c/RICaction-NotAdmitted-Item.h | 62 + .../previous/ASN1c/RICaction-NotAdmitted-List.c | 68 + .../previous/ASN1c/RICaction-NotAdmitted-List.h | 59 + .../previous/ASN1c/RICaction-ToBeSetup-Item.c | 101 + .../previous/ASN1c/RICaction-ToBeSetup-Item.h | 68 + .../e2sim/previous/ASN1c/RICactionDefinition.c | 49 + .../e2sim/previous/ASN1c/RICactionDefinition.h | 61 + .../e2sim/previous/ASN1c/RICactionID.c | 79 + .../e2sim/previous/ASN1c/RICactionID.h | 62 + .../e2sim/previous/ASN1c/RICactionType.c | 75 + .../e2sim/previous/ASN1c/RICactionType.h | 73 + .../previous/ASN1c/RICactions-ToBeSetup-List.c | 68 + .../previous/ASN1c/RICactions-ToBeSetup-List.h | 62 + .../e2sim/previous/ASN1c/RICcallProcessID.c | 49 + .../e2sim/previous/ASN1c/RICcallProcessID.h | 61 + .../e2-interface/e2sim/previous/ASN1c/RICcause.c | 110 + .../e2-interface/e2sim/previous/ASN1c/RICcause.h | 86 + .../e2sim/previous/ASN1c/RICcontrolAckRequest.c | 75 + .../e2sim/previous/ASN1c/RICcontrolAckRequest.h | 71 + .../e2sim/previous/ASN1c/RICcontrolAcknowledge.c | 68 + .../e2sim/previous/ASN1c/RICcontrolAcknowledge.h | 62 + .../e2sim/previous/ASN1c/RICcontrolFailure.c | 68 + .../e2sim/previous/ASN1c/RICcontrolFailure.h | 62 + .../e2sim/previous/ASN1c/RICcontrolHeader.c | 49 + .../e2sim/previous/ASN1c/RICcontrolHeader.h | 61 + .../e2sim/previous/ASN1c/RICcontrolMessage.c | 49 + .../e2sim/previous/ASN1c/RICcontrolMessage.h | 61 + .../e2sim/previous/ASN1c/RICcontrolRequest.c | 68 + .../e2sim/previous/ASN1c/RICcontrolRequest.h | 62 + .../e2sim/previous/ASN1c/RICcontrolStatus.c | 75 + .../e2sim/previous/ASN1c/RICcontrolStatus.h | 71 + .../previous/ASN1c/RICeventTriggerDefinition.c | 49 + .../previous/ASN1c/RICeventTriggerDefinition.h | 61 + .../e2sim/previous/ASN1c/RICindication.c | 68 + .../e2sim/previous/ASN1c/RICindication.h | 62 + .../e2sim/previous/ASN1c/RICindicationHeader.c | 49 + .../e2sim/previous/ASN1c/RICindicationHeader.h | 61 + .../e2sim/previous/ASN1c/RICindicationMessage.c | 49 + .../e2sim/previous/ASN1c/RICindicationMessage.h | 61 + .../e2sim/previous/ASN1c/RICindicationSN.c | 79 + .../e2sim/previous/ASN1c/RICindicationSN.h | 61 + .../e2sim/previous/ASN1c/RICindicationType.c | 73 + .../e2sim/previous/ASN1c/RICindicationType.h | 70 + .../e2sim/previous/ASN1c/RICrequestID.c | 138 + .../e2sim/previous/ASN1c/RICrequestID.h | 61 + .../e2sim/previous/ASN1c/RICserviceQuery.c | 68 + .../e2sim/previous/ASN1c/RICserviceQuery.h | 62 + .../e2sim/previous/ASN1c/RICserviceUpdate.c | 68 + .../e2sim/previous/ASN1c/RICserviceUpdate.h | 62 + .../previous/ASN1c/RICserviceUpdateAcknowledge.c | 68 + .../previous/ASN1c/RICserviceUpdateAcknowledge.h | 62 + .../e2sim/previous/ASN1c/RICserviceUpdateFailure.c | 68 + .../e2sim/previous/ASN1c/RICserviceUpdateFailure.h | 62 + .../e2sim/previous/ASN1c/RICsubscription.c | 78 + .../e2sim/previous/ASN1c/RICsubscription.h | 62 + .../previous/ASN1c/RICsubscriptionDeleteFailure.c | 68 + .../previous/ASN1c/RICsubscriptionDeleteFailure.h | 62 + .../previous/ASN1c/RICsubscriptionDeleteRequest.c | 68 + .../previous/ASN1c/RICsubscriptionDeleteRequest.h | 62 + .../previous/ASN1c/RICsubscriptionDeleteResponse.c | 68 + .../previous/ASN1c/RICsubscriptionDeleteResponse.h | 62 + .../e2sim/previous/ASN1c/RICsubscriptionFailure.c | 68 + .../e2sim/previous/ASN1c/RICsubscriptionFailure.h | 62 + .../e2sim/previous/ASN1c/RICsubscriptionRequest.c | 68 + .../e2sim/previous/ASN1c/RICsubscriptionRequest.h | 62 + .../e2sim/previous/ASN1c/RICsubscriptionResponse.c | 68 + .../e2sim/previous/ASN1c/RICsubscriptionResponse.h | 62 + .../e2sim/previous/ASN1c/RICsubsequentAction.c | 78 + .../e2sim/previous/ASN1c/RICsubsequentAction.h | 64 + .../e2sim/previous/ASN1c/RICsubsequentActionType.c | 73 + .../e2sim/previous/ASN1c/RICsubsequentActionType.h | 72 + .../e2sim/previous/ASN1c/RICtimeToWait.c | 105 + .../e2sim/previous/ASN1c/RICtimeToWait.h | 88 + .../e2-interface/e2sim/previous/ASN1c/RLC-Status.c | 81 + .../e2-interface/e2sim/previous/ASN1c/RLC-Status.h | 66 + .../e2-interface/e2sim/previous/ASN1c/RLCMode.c | 77 + .../e2-interface/e2sim/previous/ASN1c/RLCMode.h | 74 + .../e2sim/previous/ASN1c/RLFIndication.c | 68 + .../e2sim/previous/ASN1c/RLFIndication.h | 60 + .../e2-interface/e2sim/previous/ASN1c/RNL-Header.c | 92 + .../e2-interface/e2sim/previous/ASN1c/RNL-Header.h | 66 + .../e2sim/previous/ASN1c/RNTP-Threshold.c | 101 + .../e2sim/previous/ASN1c/RNTP-Threshold.h | 86 + .../e2sim/previous/ASN1c/RRC-Config-Ind.c | 73 + .../e2sim/previous/ASN1c/RRC-Config-Ind.h | 72 + .../e2sim/previous/ASN1c/RRC-Context.c | 49 + .../e2sim/previous/ASN1c/RRC-Context.h | 61 + .../e2sim/previous/ASN1c/RRCConnReestabIndicator.c | 75 + .../e2sim/previous/ASN1c/RRCConnReestabIndicator.h | 73 + .../e2sim/previous/ASN1c/RRCConnSetupIndicator.c | 71 + .../e2sim/previous/ASN1c/RRCConnSetupIndicator.h | 71 + .../e2sim/previous/ASN1c/RRCContainer.c | 49 + .../e2sim/previous/ASN1c/RRCContainer.h | 61 + .../e2sim/previous/ASN1c/RRCTransfer.c | 68 + .../e2sim/previous/ASN1c/RRCTransfer.h | 60 + .../e2-interface/e2sim/previous/ASN1c/RSRPMRList.c | 122 + .../e2-interface/e2sim/previous/ASN1c/RSRPMRList.h | 77 + .../e2sim/previous/ASN1c/RSRPMeasurementResult.c | 162 + .../e2sim/previous/ASN1c/RSRPMeasurementResult.h | 79 + .../e2sim/previous/ASN1c/RadioResourceStatus.c | 131 + .../e2sim/previous/ASN1c/RadioResourceStatus.h | 76 + .../previous/ASN1c/RadioframeAllocationOffset.c | 79 + .../previous/ASN1c/RadioframeAllocationOffset.h | 62 + .../previous/ASN1c/RadioframeAllocationPeriod.c | 81 + .../previous/ASN1c/RadioframeAllocationPeriod.h | 76 + .../ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c | 85 + .../ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h | 62 + .../ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c | 85 + .../ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h | 62 + .../previous/ASN1c/ReceiveStatusofULPDCPSDUs.c | 85 + .../previous/ASN1c/ReceiveStatusofULPDCPSDUs.h | 62 + .../previous/ASN1c/Reestablishment-Indication.c | 71 + .../previous/ASN1c/Reestablishment-Indication.h | 71 + .../e2sim/previous/ASN1c/Registration-Request.c | 77 + .../e2sim/previous/ASN1c/Registration-Request.h | 74 + .../previous/ASN1c/RelativeNarrowbandTxPower.c | 267 + .../previous/ASN1c/RelativeNarrowbandTxPower.h | 84 + .../e2sim/previous/ASN1c/ReplacingCellsList-Item.c | 68 + .../e2sim/previous/ASN1c/ReplacingCellsList-Item.h | 62 + .../e2sim/previous/ASN1c/ReplacingCellsList.c | 68 + .../e2sim/previous/ASN1c/ReplacingCellsList.h | 62 + .../e2sim/previous/ASN1c/ReportAmountMDT.c | 83 + .../e2sim/previous/ASN1c/ReportAmountMDT.h | 75 + .../e2-interface/e2sim/previous/ASN1c/ReportArea.c | 71 + .../e2-interface/e2sim/previous/ASN1c/ReportArea.h | 71 + .../e2sim/previous/ASN1c/ReportCharacteristics.c | 85 + .../e2sim/previous/ASN1c/ReportCharacteristics.h | 62 + .../e2sim/previous/ASN1c/ReportIntervalMDT.c | 93 + .../e2sim/previous/ASN1c/ReportIntervalMDT.h | 80 + .../e2sim/previous/ASN1c/ReportingPeriodicity.c | 77 + .../e2sim/previous/ASN1c/ReportingPeriodicity.h | 72 + .../previous/ASN1c/ReportingPeriodicityCSIR.c | 79 + .../previous/ASN1c/ReportingPeriodicityCSIR.h | 75 + .../previous/ASN1c/ReportingPeriodicityRSRPMR.c | 77 + .../previous/ASN1c/ReportingPeriodicityRSRPMR.h | 74 + .../e2sim/previous/ASN1c/ReservedSubframePattern.c | 167 + .../e2sim/previous/ASN1c/ReservedSubframePattern.h | 70 + .../e2sim/previous/ASN1c/ResetRequest.c | 68 + .../e2sim/previous/ASN1c/ResetRequest.h | 62 + .../e2sim/previous/ASN1c/ResetResponse.c | 68 + .../e2sim/previous/ASN1c/ResetResponse.h | 62 + .../e2sim/previous/ASN1c/ResourceStatusFailure.c | 68 + .../e2sim/previous/ASN1c/ResourceStatusFailure.h | 62 + .../e2sim/previous/ASN1c/ResourceStatusRequest.c | 68 + .../e2sim/previous/ASN1c/ResourceStatusRequest.h | 62 + .../e2sim/previous/ASN1c/ResourceStatusResponse.c | 68 + .../e2sim/previous/ASN1c/ResourceStatusResponse.h | 62 + .../e2sim/previous/ASN1c/ResourceStatusUpdate.c | 68 + .../e2sim/previous/ASN1c/ResourceStatusUpdate.h | 62 + .../e2sim/previous/ASN1c/ResourceType.c | 75 + .../e2sim/previous/ASN1c/ResourceType.h | 73 + .../ASN1c/RespondingNodeType-EndcConfigUpdate.c | 81 + .../ASN1c/RespondingNodeType-EndcConfigUpdate.h | 75 + .../ASN1c/RespondingNodeType-EndcX2Removal.c | 81 + .../ASN1c/RespondingNodeType-EndcX2Removal.h | 75 + .../ASN1c/RespondingNodeType-EndcX2Setup.c | 81 + .../ASN1c/RespondingNodeType-EndcX2Setup.h | 75 + ...ndingNodeType-EutranrCellResourceCoordination.c | 81 + ...ndingNodeType-EutranrCellResourceCoordination.h | 75 + ...nseInformationSeNBReconfComp-RejectByMeNBItem.c | 91 + ...nseInformationSeNBReconfComp-RejectByMeNBItem.h | 68 + ...ResponseInformationSeNBReconfComp-SuccessItem.c | 81 + ...ResponseInformationSeNBReconfComp-SuccessItem.h | 66 + .../ASN1c/ResponseInformationSeNBReconfComp.c | 82 + .../ASN1c/ResponseInformationSeNBReconfComp.h | 76 + ...nseInformationSgNBReconfComp-RejectByMeNBItem.c | 81 + ...nseInformationSgNBReconfComp-RejectByMeNBItem.h | 66 + ...ResponseInformationSgNBReconfComp-SuccessItem.c | 81 + ...ResponseInformationSgNBReconfComp-SuccessItem.h | 66 + .../ASN1c/ResponseInformationSgNBReconfComp.c | 82 + .../ASN1c/ResponseInformationSgNBReconfComp.h | 76 + .../e2-interface/e2sim/previous/ASN1c/ResumeID.c | 152 + .../e2-interface/e2sim/previous/ASN1c/ResumeID.h | 76 + .../previous/ASN1c/RetrieveUEContextFailure.c | 68 + .../previous/ASN1c/RetrieveUEContextFailure.h | 60 + .../previous/ASN1c/RetrieveUEContextRequest.c | 68 + .../previous/ASN1c/RetrieveUEContextRequest.h | 60 + .../previous/ASN1c/RetrieveUEContextResponse.c | 68 + .../previous/ASN1c/RetrieveUEContextResponse.h | 60 + .../e2sim/previous/ASN1c/S1TNLLoadIndicator.c | 91 + .../e2sim/previous/ASN1c/S1TNLLoadIndicator.h | 67 + .../e2sim/previous/ASN1c/SCGChangeIndication.c | 75 + .../e2sim/previous/ASN1c/SCGChangeIndication.h | 73 + .../e2sim/previous/ASN1c/SCGConfigurationQuery.c | 71 + .../e2sim/previous/ASN1c/SCGConfigurationQuery.h | 71 + .../previous/ASN1c/SGNB-Addition-Trigger-Ind.c | 75 + .../previous/ASN1c/SGNB-Addition-Trigger-Ind.h | 73 + .../ASN1c/SIPTOBearerDeactivationIndication.c | 71 + .../ASN1c/SIPTOBearerDeactivationIndication.h | 71 + .../e2sim/previous/ASN1c/SNStatusTransfer.c | 68 + .../e2sim/previous/ASN1c/SNStatusTransfer.h | 60 + .../e2-interface/e2sim/previous/ASN1c/SRBType.c | 73 + .../e2-interface/e2sim/previous/ASN1c/SRBType.h | 72 + .../e2sim/previous/ASN1c/SRVCCOperationPossible.c | 71 + .../e2sim/previous/ASN1c/SRVCCOperationPossible.h | 71 + .../e2sim/previous/ASN1c/SULInformation.c | 121 + .../e2sim/previous/ASN1c/SULInformation.h | 68 + .../previous/ASN1c/ScheduledCommunicationTime.c | 197 + .../previous/ASN1c/ScheduledCommunicationTime.h | 69 + .../e2sim/previous/ASN1c/SeNBAdditionRequest.c | 68 + .../e2sim/previous/ASN1c/SeNBAdditionRequest.h | 60 + .../ASN1c/SeNBAdditionRequestAcknowledge.c | 68 + .../ASN1c/SeNBAdditionRequestAcknowledge.h | 60 + .../previous/ASN1c/SeNBAdditionRequestReject.c | 68 + .../previous/ASN1c/SeNBAdditionRequestReject.h | 60 + .../e2sim/previous/ASN1c/SeNBCounterCheckRequest.c | 68 + .../e2sim/previous/ASN1c/SeNBCounterCheckRequest.h | 60 + .../e2sim/previous/ASN1c/SeNBModificationConfirm.c | 68 + .../e2sim/previous/ASN1c/SeNBModificationConfirm.h | 60 + .../e2sim/previous/ASN1c/SeNBModificationRefuse.c | 68 + .../e2sim/previous/ASN1c/SeNBModificationRefuse.h | 60 + .../e2sim/previous/ASN1c/SeNBModificationRequest.c | 68 + .../e2sim/previous/ASN1c/SeNBModificationRequest.h | 60 + .../ASN1c/SeNBModificationRequestAcknowledge.c | 68 + .../ASN1c/SeNBModificationRequestAcknowledge.h | 60 + .../previous/ASN1c/SeNBModificationRequestReject.c | 68 + .../previous/ASN1c/SeNBModificationRequestReject.h | 60 + .../previous/ASN1c/SeNBModificationRequired.c | 68 + .../previous/ASN1c/SeNBModificationRequired.h | 60 + .../previous/ASN1c/SeNBReconfigurationComplete.c | 68 + .../previous/ASN1c/SeNBReconfigurationComplete.h | 60 + .../e2sim/previous/ASN1c/SeNBReleaseConfirm.c | 68 + .../e2sim/previous/ASN1c/SeNBReleaseConfirm.h | 60 + .../e2sim/previous/ASN1c/SeNBReleaseRequest.c | 68 + .../e2sim/previous/ASN1c/SeNBReleaseRequest.h | 60 + .../e2sim/previous/ASN1c/SeNBReleaseRequired.c | 68 + .../e2sim/previous/ASN1c/SeNBReleaseRequired.h | 60 + .../e2sim/previous/ASN1c/SeNBSecurityKey.c | 85 + .../e2sim/previous/ASN1c/SeNBSecurityKey.h | 62 + .../e2sim/previous/ASN1c/SeNBtoMeNBContainer.c | 49 + .../e2sim/previous/ASN1c/SeNBtoMeNBContainer.h | 61 + .../previous/ASN1c/SecondaryRATDataUsageReport.c | 68 + .../previous/ASN1c/SecondaryRATDataUsageReport.h | 60 + .../previous/ASN1c/SecondaryRATUsageReport-Item.c | 147 + .../previous/ASN1c/SecondaryRATUsageReport-Item.h | 79 + .../previous/ASN1c/SecondaryRATUsageReportList.c | 68 + .../previous/ASN1c/SecondaryRATUsageReportList.h | 62 + .../e2sim/previous/ASN1c/ServedCell-Information.c | 121 + .../e2sim/previous/ASN1c/ServedCell-Information.h | 74 + .../e2sim/previous/ASN1c/ServedCells.c | 133 + .../e2sim/previous/ASN1c/ServedCells.h | 79 + .../previous/ASN1c/ServedCellsToActivate-Item.c | 81 + .../previous/ASN1c/ServedCellsToActivate-Item.h | 66 + .../e2sim/previous/ASN1c/ServedCellsToActivate.c | 68 + .../e2sim/previous/ASN1c/ServedCellsToActivate.h | 59 + .../previous/ASN1c/ServedCellsToModify-Item.c | 102 + .../previous/ASN1c/ServedCellsToModify-Item.h | 70 + .../e2sim/previous/ASN1c/ServedCellsToModify.c | 68 + .../e2sim/previous/ASN1c/ServedCellsToModify.h | 59 + .../ASN1c/ServedEUTRAcellsENDCX2ManagementList.c | 133 + .../ASN1c/ServedEUTRAcellsENDCX2ManagementList.h | 76 + .../ServedEUTRAcellsToDeleteListENDCConfUpd.c | 68 + .../ServedEUTRAcellsToDeleteListENDCConfUpd.h | 59 + .../ServedEUTRAcellsToModifyListENDCConfUpd.c | 143 + .../ServedEUTRAcellsToModifyListENDCConfUpd.h | 78 + .../previous/ASN1c/ServedNRCell-Information.c | 197 + .../previous/ASN1c/ServedNRCell-Information.h | 102 + .../previous/ASN1c/ServedNRCellsToActivate-Item.c | 81 + .../previous/ASN1c/ServedNRCellsToActivate-Item.h | 66 + .../e2sim/previous/ASN1c/ServedNRCellsToActivate.c | 68 + .../e2sim/previous/ASN1c/ServedNRCellsToActivate.h | 59 + .../previous/ASN1c/ServedNRCellsToModify-Item.c | 112 + .../previous/ASN1c/ServedNRCellsToModify-Item.h | 72 + .../ASN1c/ServedNRcellsENDCX2ManagementList.c | 133 + .../ASN1c/ServedNRcellsENDCX2ManagementList.h | 76 + .../ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c | 68 + .../ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h | 59 + .../ASN1c/ServedNRcellsToModifyENDCConfUpdList.c | 68 + .../ASN1c/ServedNRcellsToModifyENDCConfUpdList.h | 59 + .../e2sim/previous/ASN1c/ServiceType.c | 73 + .../e2sim/previous/ASN1c/ServiceType.h | 72 + .../e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c | 75 + .../e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h | 63 + .../previous/ASN1c/SgNBActivityNotification.c | 68 + .../previous/ASN1c/SgNBActivityNotification.h | 60 + .../e2sim/previous/ASN1c/SgNBAdditionRequest.c | 68 + .../e2sim/previous/ASN1c/SgNBAdditionRequest.h | 60 + .../ASN1c/SgNBAdditionRequestAcknowledge.c | 68 + .../ASN1c/SgNBAdditionRequestAcknowledge.h | 60 + .../previous/ASN1c/SgNBAdditionRequestReject.c | 68 + .../previous/ASN1c/SgNBAdditionRequestReject.h | 60 + .../e2sim/previous/ASN1c/SgNBChangeConfirm.c | 68 + .../e2sim/previous/ASN1c/SgNBChangeConfirm.h | 60 + .../e2sim/previous/ASN1c/SgNBChangeRefuse.c | 68 + .../e2sim/previous/ASN1c/SgNBChangeRefuse.h | 60 + .../e2sim/previous/ASN1c/SgNBChangeRequired.c | 68 + .../e2sim/previous/ASN1c/SgNBChangeRequired.h | 60 + .../ASN1c/SgNBCoordinationAssistanceInformation.c | 71 + .../ASN1c/SgNBCoordinationAssistanceInformation.h | 71 + .../e2sim/previous/ASN1c/SgNBCounterCheckRequest.c | 68 + .../e2sim/previous/ASN1c/SgNBCounterCheckRequest.h | 60 + .../e2sim/previous/ASN1c/SgNBModificationConfirm.c | 68 + .../e2sim/previous/ASN1c/SgNBModificationConfirm.h | 60 + .../e2sim/previous/ASN1c/SgNBModificationRefuse.c | 68 + .../e2sim/previous/ASN1c/SgNBModificationRefuse.h | 60 + .../e2sim/previous/ASN1c/SgNBModificationRequest.c | 68 + .../e2sim/previous/ASN1c/SgNBModificationRequest.h | 60 + .../ASN1c/SgNBModificationRequestAcknowledge.c | 68 + .../ASN1c/SgNBModificationRequestAcknowledge.h | 60 + .../previous/ASN1c/SgNBModificationRequestReject.c | 68 + .../previous/ASN1c/SgNBModificationRequestReject.h | 60 + .../previous/ASN1c/SgNBModificationRequired.c | 68 + .../previous/ASN1c/SgNBModificationRequired.h | 60 + .../previous/ASN1c/SgNBReconfigurationComplete.c | 68 + .../previous/ASN1c/SgNBReconfigurationComplete.h | 60 + .../e2sim/previous/ASN1c/SgNBReleaseConfirm.c | 68 + .../e2sim/previous/ASN1c/SgNBReleaseConfirm.h | 60 + .../e2sim/previous/ASN1c/SgNBReleaseRequest.c | 68 + .../e2sim/previous/ASN1c/SgNBReleaseRequest.h | 60 + .../previous/ASN1c/SgNBReleaseRequestAcknowledge.c | 68 + .../previous/ASN1c/SgNBReleaseRequestAcknowledge.h | 60 + .../previous/ASN1c/SgNBReleaseRequestReject.c | 68 + .../previous/ASN1c/SgNBReleaseRequestReject.h | 60 + .../e2sim/previous/ASN1c/SgNBReleaseRequired.c | 68 + .../e2sim/previous/ASN1c/SgNBReleaseRequired.h | 60 + .../ASN1c/SgNBResourceCoordinationInformation.c | 173 + .../ASN1c/SgNBResourceCoordinationInformation.h | 69 + .../e2sim/previous/ASN1c/SgNBSecurityKey.c | 85 + .../e2sim/previous/ASN1c/SgNBSecurityKey.h | 62 + .../e2sim/previous/ASN1c/SgNBtoMeNBContainer.c | 49 + .../e2sim/previous/ASN1c/SgNBtoMeNBContainer.h | 61 + .../e2sim/previous/ASN1c/SharedResourceType.c | 82 + .../e2sim/previous/ASN1c/SharedResourceType.h | 79 + .../e2-interface/e2sim/previous/ASN1c/ShortMAC-I.c | 85 + .../e2-interface/e2sim/previous/ASN1c/ShortMAC-I.h | 62 + .../ASN1c/SourceOfUEActivityBehaviourInformation.c | 73 + .../ASN1c/SourceOfUEActivityBehaviourInformation.h | 72 + .../e2sim/previous/ASN1c/SpecialSubframe-Info.c | 101 + .../e2sim/previous/ASN1c/SpecialSubframe-Info.h | 70 + .../e2sim/previous/ASN1c/SpecialSubframePatterns.c | 87 + .../e2sim/previous/ASN1c/SpecialSubframePatterns.h | 79 + .../e2sim/previous/ASN1c/SpectrumSharingGroupID.c | 79 + .../e2sim/previous/ASN1c/SpectrumSharingGroupID.h | 62 + .../e2-interface/e2sim/previous/ASN1c/SplitSRB.c | 102 + .../e2-interface/e2sim/previous/ASN1c/SplitSRB.h | 70 + .../e2-interface/e2sim/previous/ASN1c/SplitSRBs.c | 75 + .../e2-interface/e2sim/previous/ASN1c/SplitSRBs.h | 73 + .../e2-interface/e2sim/previous/ASN1c/Style-ID.c | 49 + .../e2-interface/e2sim/previous/ASN1c/Style-ID.h | 61 + .../e2-interface/e2sim/previous/ASN1c/SubbandCQI.c | 92 + .../e2-interface/e2sim/previous/ASN1c/SubbandCQI.h | 68 + .../e2sim/previous/ASN1c/SubbandCQICodeword0.c | 180 + .../e2sim/previous/ASN1c/SubbandCQICodeword0.h | 78 + .../e2sim/previous/ASN1c/SubbandCQICodeword1.c | 220 + .../e2sim/previous/ASN1c/SubbandCQICodeword1.h | 80 + .../e2sim/previous/ASN1c/SubbandCQIItem.c | 121 + .../e2sim/previous/ASN1c/SubbandCQIItem.h | 68 + .../e2sim/previous/ASN1c/SubbandCQIList.c | 68 + .../e2sim/previous/ASN1c/SubbandCQIList.h | 62 + .../e2sim/previous/ASN1c/SubbandSize.c | 79 + .../e2sim/previous/ASN1c/SubbandSize.h | 75 + .../e2sim/previous/ASN1c/SubframeAllocation.c | 80 + .../e2sim/previous/ASN1c/SubframeAllocation.h | 77 + .../e2sim/previous/ASN1c/SubframeAssignment.c | 83 + .../e2sim/previous/ASN1c/SubframeAssignment.h | 77 + .../e2sim/previous/ASN1c/SubframeType.c | 73 + .../e2sim/previous/ASN1c/SubframeType.h | 72 + .../previous/ASN1c/SubscriberProfileIDforRFP.c | 79 + .../previous/ASN1c/SubscriberProfileIDforRFP.h | 62 + .../Subscription-Based-UE-DifferentiationInfo.c | 358 + .../Subscription-Based-UE-DifferentiationInfo.h | 109 + .../e2sim/previous/ASN1c/SuccessfulOutcome.c | 466 + .../e2sim/previous/ASN1c/SuccessfulOutcome.h | 132 + .../previous/ASN1c/SupportedSULFreqBandItem.c | 111 + .../previous/ASN1c/SupportedSULFreqBandItem.h | 66 + .../e2-interface/e2sim/previous/ASN1c/TABasedMDT.c | 81 + .../e2-interface/e2sim/previous/ASN1c/TABasedMDT.h | 66 + .../e2-interface/e2sim/previous/ASN1c/TABasedQMC.c | 81 + .../e2-interface/e2sim/previous/ASN1c/TABasedQMC.h | 66 + .../e2-interface/e2sim/previous/ASN1c/TAC.c | 80 + .../e2-interface/e2sim/previous/ASN1c/TAC.h | 62 + .../e2-interface/e2sim/previous/ASN1c/TAI-Item.c | 91 + .../e2-interface/e2sim/previous/ASN1c/TAI-Item.h | 68 + .../e2sim/previous/ASN1c/TAIBasedMDT.c | 81 + .../e2sim/previous/ASN1c/TAIBasedMDT.h | 66 + .../e2sim/previous/ASN1c/TAIBasedQMC.c | 81 + .../e2sim/previous/ASN1c/TAIBasedQMC.h | 66 + .../e2sim/previous/ASN1c/TAIListforMDT.c | 68 + .../e2sim/previous/ASN1c/TAIListforMDT.h | 62 + .../e2sim/previous/ASN1c/TAIListforQMC.c | 68 + .../e2sim/previous/ASN1c/TAIListforQMC.h | 62 + .../e2sim/previous/ASN1c/TAListforMDT.c | 67 + .../e2sim/previous/ASN1c/TAListforMDT.h | 60 + .../e2sim/previous/ASN1c/TAListforQMC.c | 67 + .../e2sim/previous/ASN1c/TAListforQMC.h | 60 + .../e2-interface/e2sim/previous/ASN1c/TDD-Info.c | 111 + .../e2-interface/e2sim/previous/ASN1c/TDD-Info.h | 72 + .../TDD-InfoNeighbourServedNRCell-Information.c | 81 + .../TDD-InfoNeighbourServedNRCell-Information.h | 66 + .../ASN1c/TDD-InfoServedNRCell-Information.c | 91 + .../ASN1c/TDD-InfoServedNRCell-Information.h | 68 + .../e2sim/previous/ASN1c/TargetCellInUTRAN.c | 49 + .../e2sim/previous/ASN1c/TargetCellInUTRAN.h | 61 + .../TargeteNBtoSource-eNBTransparentContainer.c | 49 + .../TargeteNBtoSource-eNBTransparentContainer.h | 61 + .../e2sim/previous/ASN1c/Threshold-RSRP.c | 79 + .../e2sim/previous/ASN1c/Threshold-RSRP.h | 62 + .../e2sim/previous/ASN1c/Threshold-RSRQ.c | 79 + .../e2sim/previous/ASN1c/Threshold-RSRQ.h | 62 + .../Time-UE-StayedInCell-EnhancedGranularity.c | 79 + .../Time-UE-StayedInCell-EnhancedGranularity.h | 62 + .../e2sim/previous/ASN1c/Time-UE-StayedInCell.c | 79 + .../e2sim/previous/ASN1c/Time-UE-StayedInCell.h | 62 + .../e2-interface/e2sim/previous/ASN1c/TimeStamp.c | 80 + .../e2-interface/e2sim/previous/ASN1c/TimeStamp.h | 62 + .../e2-interface/e2sim/previous/ASN1c/TimeToWait.c | 81 + .../e2-interface/e2sim/previous/ASN1c/TimeToWait.h | 76 + .../e2sim/previous/ASN1c/TraceActivation.c | 111 + .../e2sim/previous/ASN1c/TraceActivation.h | 72 + .../ASN1c/TraceCollectionEntityIPAddress.c | 85 + .../ASN1c/TraceCollectionEntityIPAddress.h | 62 + .../e2-interface/e2sim/previous/ASN1c/TraceDepth.c | 81 + .../e2-interface/e2sim/previous/ASN1c/TraceDepth.h | 76 + .../e2sim/previous/ASN1c/Transmission-Bandwidth.c | 83 + .../e2sim/previous/ASN1c/Transmission-Bandwidth.h | 77 + .../e2sim/previous/ASN1c/TransportLayerAddress.c | 85 + .../e2sim/previous/ASN1c/TransportLayerAddress.h | 62 + .../e2sim/previous/ASN1c/TriggeringMessage.c | 73 + .../e2sim/previous/ASN1c/TriggeringMessage.h | 70 + .../e2sim/previous/ASN1c/TunnelInformation.c | 91 + .../e2sim/previous/ASN1c/TunnelInformation.h | 68 + .../e2sim/previous/ASN1c/TypeOfError.c | 73 + .../e2sim/previous/ASN1c/TypeOfError.h | 72 + .../e2sim/previous/ASN1c/TypeOfMessage.c | 75 + .../e2sim/previous/ASN1c/TypeOfMessage.h | 71 + .../ASN1c/UE-ContextInformation-SgNBModReq.c | 136 + .../ASN1c/UE-ContextInformation-SgNBModReq.h | 74 + .../e2sim/previous/ASN1c/UE-ContextInformation.c | 163 + .../e2sim/previous/ASN1c/UE-ContextInformation.h | 80 + .../previous/ASN1c/UE-ContextInformationRetrieve.c | 184 + .../previous/ASN1c/UE-ContextInformationRetrieve.h | 84 + .../ASN1c/UE-ContextInformationSeNBModReq.c | 136 + .../ASN1c/UE-ContextInformationSeNBModReq.h | 74 + .../e2sim/previous/ASN1c/UE-ContextKeptIndicator.c | 71 + .../e2sim/previous/ASN1c/UE-ContextKeptIndicator.h | 71 + .../previous/ASN1c/UE-ContextReferenceAtSeNB.c | 101 + .../previous/ASN1c/UE-ContextReferenceAtSeNB.h | 68 + .../previous/ASN1c/UE-ContextReferenceAtSgNB.c | 91 + .../previous/ASN1c/UE-ContextReferenceAtSgNB.h | 66 + .../e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c | 91 + .../e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h | 66 + .../e2sim/previous/ASN1c/UE-HistoryInformation.c | 68 + .../e2sim/previous/ASN1c/UE-HistoryInformation.h | 62 + .../ASN1c/UE-HistoryInformationFromTheUE.c | 49 + .../ASN1c/UE-HistoryInformationFromTheUE.h | 61 + .../UE-RLF-Report-Container-for-extended-bands.c | 49 + .../UE-RLF-Report-Container-for-extended-bands.h | 61 + .../e2sim/previous/ASN1c/UE-RLF-Report-Container.c | 49 + .../e2sim/previous/ASN1c/UE-RLF-Report-Container.h | 61 + .../e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.c | 75 + .../e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.h | 63 + .../e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c | 79 + .../e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h | 62 + .../e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.c | 79 + .../e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.h | 62 + .../previous/ASN1c/UEAggregateMaximumBitRate.c | 91 + .../previous/ASN1c/UEAggregateMaximumBitRate.h | 67 + .../e2sim/previous/ASN1c/UEAppLayerMeasConfig.c | 122 + .../e2sim/previous/ASN1c/UEAppLayerMeasConfig.h | 68 + .../e2sim/previous/ASN1c/UEContextRelease.c | 68 + .../e2sim/previous/ASN1c/UEContextRelease.h | 60 + .../e2-interface/e2sim/previous/ASN1c/UEID.c | 85 + .../e2-interface/e2sim/previous/ASN1c/UEID.h | 62 + .../e2sim/previous/ASN1c/UENRMeasurement.c | 81 + .../e2sim/previous/ASN1c/UENRMeasurement.h | 66 + .../e2sim/previous/ASN1c/UESecurityCapabilities.c | 91 + .../e2sim/previous/ASN1c/UESecurityCapabilities.h | 68 + .../ASN1c/UESidelinkAggregateMaximumBitRate.c | 81 + .../ASN1c/UESidelinkAggregateMaximumBitRate.h | 66 + .../e2sim/previous/ASN1c/UEsToBeResetList-Item.c | 101 + .../e2sim/previous/ASN1c/UEsToBeResetList-Item.h | 70 + .../e2sim/previous/ASN1c/UEsToBeResetList.c | 68 + .../e2sim/previous/ASN1c/UEsToBeResetList.h | 62 + .../e2sim/previous/ASN1c/UL-GBR-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/UL-GBR-PRB-usage.h | 62 + .../previous/ASN1c/UL-HighInterferenceIndication.c | 85 + .../previous/ASN1c/UL-HighInterferenceIndication.h | 62 + .../ASN1c/UL-HighInterferenceIndicationInfo-Item.c | 91 + .../ASN1c/UL-HighInterferenceIndicationInfo-Item.h | 68 + .../ASN1c/UL-HighInterferenceIndicationInfo.c | 68 + .../ASN1c/UL-HighInterferenceIndicationInfo.h | 62 + .../ASN1c/UL-InterferenceOverloadIndication-Item.c | 75 + .../ASN1c/UL-InterferenceOverloadIndication-Item.h | 73 + .../ASN1c/UL-InterferenceOverloadIndication.c | 67 + .../ASN1c/UL-InterferenceOverloadIndication.h | 60 + .../e2sim/previous/ASN1c/UL-Total-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/UL-Total-PRB-usage.h | 62 + .../e2sim/previous/ASN1c/UL-UE-Configuration.c | 75 + .../e2sim/previous/ASN1c/UL-UE-Configuration.h | 73 + .../e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c | 79 + .../e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h | 62 + .../previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c | 79 + .../previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h | 62 + .../e2sim/previous/ASN1c/ULConfiguration.c | 81 + .../e2sim/previous/ASN1c/ULConfiguration.h | 66 + .../e2sim/previous/ASN1c/ULOnlySharing.c | 81 + .../e2sim/previous/ASN1c/ULOnlySharing.h | 66 + .../ASN1c/ULResourceBitmapULandDLSharing.c | 85 + .../ASN1c/ULResourceBitmapULandDLSharing.h | 62 + .../previous/ASN1c/ULResourcesULandDLSharing.c | 80 + .../previous/ASN1c/ULResourcesULandDLSharing.h | 77 + .../e2sim/previous/ASN1c/ULandDLSharing.c | 91 + .../e2sim/previous/ASN1c/ULandDLSharing.h | 68 + .../e2sim/previous/ASN1c/UnsuccessfulOutcome.c | 456 + .../e2sim/previous/ASN1c/UnsuccessfulOutcome.h | 130 + .../e2sim/previous/ASN1c/UsableABSInformation.c | 82 + .../e2sim/previous/ASN1c/UsableABSInformation.h | 79 + .../e2sim/previous/ASN1c/UsableABSInformationFDD.c | 117 + .../e2sim/previous/ASN1c/UsableABSInformationFDD.h | 66 + .../e2sim/previous/ASN1c/UsableABSInformationTDD.c | 117 + .../e2sim/previous/ASN1c/UsableABSInformationTDD.h | 66 + .../ASN1c/UserPlaneTrafficActivityReport.c | 73 + .../ASN1c/UserPlaneTrafficActivityReport.h | 72 + .../e2sim/previous/ASN1c/V2XServicesAuthorized.c | 91 + .../e2sim/previous/ASN1c/V2XServicesAuthorized.h | 68 + .../e2-interface/e2sim/previous/ASN1c/VehicleUE.c | 73 + .../e2-interface/e2sim/previous/ASN1c/VehicleUE.h | 72 + .../e2sim/previous/ASN1c/WLANMeasConfig.c | 71 + .../e2sim/previous/ASN1c/WLANMeasConfig.h | 71 + .../e2sim/previous/ASN1c/WLANMeasConfigNameList.c | 67 + .../e2sim/previous/ASN1c/WLANMeasConfigNameList.h | 60 + .../previous/ASN1c/WLANMeasurementConfiguration.c | 204 + .../previous/ASN1c/WLANMeasurementConfiguration.h | 87 + .../e2-interface/e2sim/previous/ASN1c/WLANName.c | 80 + .../e2-interface/e2sim/previous/ASN1c/WLANName.h | 62 + .../e2sim/previous/ASN1c/WT-UE-XwAP-ID.c | 80 + .../e2sim/previous/ASN1c/WT-UE-XwAP-ID.h | 62 + .../e2sim/previous/ASN1c/WTID-Long-Type2.c | 85 + .../e2sim/previous/ASN1c/WTID-Long-Type2.h | 62 + .../e2-interface/e2sim/previous/ASN1c/WTID-Type1.c | 114 + .../e2-interface/e2sim/previous/ASN1c/WTID-Type1.h | 64 + .../e2-interface/e2sim/previous/ASN1c/WTID.c | 81 + .../e2-interface/e2sim/previous/ASN1c/WTID.h | 79 + .../e2sim/previous/ASN1c/WidebandCQI.c | 122 + .../e2sim/previous/ASN1c/WidebandCQI.h | 68 + .../e2sim/previous/ASN1c/WidebandCQICodeword1.c | 140 + .../e2sim/previous/ASN1c/WidebandCQICodeword1.h | 76 + .../e2sim/previous/ASN1c/X2AP-Message.c | 49 + .../e2sim/previous/ASN1c/X2AP-Message.h | 61 + .../e2sim/previous/ASN1c/X2APMessageTransfer.c | 68 + .../e2sim/previous/ASN1c/X2APMessageTransfer.h | 60 + .../e2sim/previous/ASN1c/X2BenefitValue.c | 79 + .../e2sim/previous/ASN1c/X2BenefitValue.h | 62 + .../e2-interface/e2sim/previous/ASN1c/X2Release.c | 68 + .../e2-interface/e2sim/previous/ASN1c/X2Release.h | 60 + .../e2sim/previous/ASN1c/X2RemovalFailure.c | 68 + .../e2sim/previous/ASN1c/X2RemovalFailure.h | 60 + .../e2sim/previous/ASN1c/X2RemovalRequest.c | 68 + .../e2sim/previous/ASN1c/X2RemovalRequest.h | 60 + .../e2sim/previous/ASN1c/X2RemovalResponse.c | 68 + .../e2sim/previous/ASN1c/X2RemovalResponse.h | 60 + .../e2sim/previous/ASN1c/X2SetupFailure.c | 68 + .../e2sim/previous/ASN1c/X2SetupFailure.h | 62 + .../e2sim/previous/ASN1c/X2SetupRequest.c | 68 + .../e2sim/previous/ASN1c/X2SetupRequest.h | 62 + .../e2sim/previous/ASN1c/X2SetupResponse.c | 68 + .../e2sim/previous/ASN1c/X2SetupResponse.h | 62 + .../e2sim/previous/ASN1c/asn_SEQUENCE_OF.c | 59 + .../e2sim/previous/ASN1c/asn_SEQUENCE_OF.h | 70 + .../e2-interface/e2sim/previous/ASN1c/asn_SET_OF.c | 106 + .../e2-interface/e2sim/previous/ASN1c/asn_SET_OF.h | 90 + .../e2sim/previous/ASN1c/asn_application.c | 499 + .../e2sim/previous/ASN1c/asn_application.h | 189 + .../e2sim/previous/ASN1c/asn_bit_data.c | 351 + .../e2sim/previous/ASN1c/asn_bit_data.h | 101 + .../e2-interface/e2sim/previous/ASN1c/asn_codecs.h | 126 + .../e2sim/previous/ASN1c/asn_codecs_prim.c | 335 + .../e2sim/previous/ASN1c/asn_codecs_prim.h | 69 + .../e2sim/previous/ASN1c/asn_constant.h | 87 + .../e2sim/previous/ASN1c/asn_internal.c | 66 + .../e2sim/previous/ASN1c/asn_internal.h | 177 + .../e2-interface/e2sim/previous/ASN1c/asn_ioc.h | 69 + .../e2sim/previous/ASN1c/asn_random_fill.c | 74 + .../e2sim/previous/ASN1c/asn_random_fill.h | 69 + .../e2-interface/e2sim/previous/ASN1c/asn_system.h | 168 + .../e2sim/previous/ASN1c/ber_decoder.c | 301 + .../e2sim/previous/ASN1c/ber_decoder.h | 84 + .../e2sim/previous/ASN1c/ber_tlv_length.c | 186 + .../e2sim/previous/ASN1c/ber_tlv_length.h | 68 + .../e2sim/previous/ASN1c/ber_tlv_tag.c | 162 + .../e2sim/previous/ASN1c/ber_tlv_tag.h | 78 + .../e2sim/previous/ASN1c/constr_CHOICE.c | 1551 + .../e2sim/previous/ASN1c/constr_CHOICE.h | 98 + .../e2sim/previous/ASN1c/constr_SEQUENCE.c | 2077 + .../e2sim/previous/ASN1c/constr_SEQUENCE.h | 86 + .../e2sim/previous/ASN1c/constr_SEQUENCE_OF.c | 376 + .../e2sim/previous/ASN1c/constr_SEQUENCE_OF.h | 59 + .../e2sim/previous/ASN1c/constr_SET_OF.c | 1459 + .../e2sim/previous/ASN1c/constr_SET_OF.h | 67 + .../e2sim/previous/ASN1c/constr_TYPE.c | 98 + .../e2sim/previous/ASN1c/constr_TYPE.h | 280 + .../e2sim/previous/ASN1c/constraints.c | 111 + .../e2sim/previous/ASN1c/constraints.h | 80 + .../e2sim/previous/ASN1c/converter-example.mk | 50 + .../e2sim/previous/ASN1c/der_encoder.c | 212 + .../e2sim/previous/ASN1c/der_encoder.h | 86 + .../e2sim/previous/ASN1c/pdu_collection.c | 189 + .../e2sim/previous/ASN1c/per_decoder.c | 203 + .../e2sim/previous/ASN1c/per_decoder.h | 100 + .../e2sim/previous/ASN1c/per_encoder.c | 283 + .../e2sim/previous/ASN1c/per_encoder.h | 111 + .../e2sim/previous/ASN1c/per_opentype.c | 551 + .../e2sim/previous/ASN1c/per_opentype.h | 62 + .../e2sim/previous/ASN1c/per_support.c | 507 + .../e2sim/previous/ASN1c/per_support.h | 145 + .../e2sim/previous/ASN1c/xer_decoder.c | 387 + .../e2sim/previous/ASN1c/xer_decoder.h | 124 + .../e2sim/previous/ASN1c/xer_encoder.c | 255 + .../e2sim/previous/ASN1c/xer_encoder.h | 101 + .../e2sim/previous/ASN1c/xer_support.c | 245 + .../e2sim/previous/ASN1c/xer_support.h | 73 + .../e2-interface/e2sim/previous/CMakeLists.txt | 61 + .../e2-interface/e2sim/previous/README.md | 95 + .../e2-interface/e2sim/previous/build_e2sim | 86 + .../e2-interface/e2sim/previous/docker/Dockerfile | 54 + .../e2sim/previous/docker/container-tag.yaml | 2 + .../e2sim/previous/docker/old/DockerFile_old | 53 + .../e2sim/previous/docker/old/Dockerfile | 42 + .../e2sim/previous/docker/old/Dockerfile_base | 60 + .../e2sim/previous/docker/old/configure_rmr | 27 + .../e2sim/previous/docker/old/empty.rt | 5 + .../e2sim/previous/docker/old/install_asn1c | 29 + .../e2sim/previous/docker/old/install_rmr | 32 + .../e2sim/previous/docker/old/local.rt | 9 + .../e2sim/previous/e2apv1sim/ASN1c/ANY.c | 450 + .../e2sim/previous/e2apv1sim/ASN1c/ANY.h | 65 + .../e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c | 656 + .../e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h | 48 + .../previous/e2apv1sim/ASN1c/BIT_STRING_oer.c | 174 + .../e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c | 65 + .../e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h | 46 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-CP-Usage-Report-CellResourceReportItem.h | 58 + .../e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c | 129 + .../e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h | 56 + .../CU-CP-Usage-Report-UeResourceReportItem.c | 72 + .../CU-CP-Usage-Report-UeResourceReportItem.h | 47 + .../CU-UP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-UP-Usage-Report-CellResourceReportItem.h | 58 + .../e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c | 129 + .../e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h | 56 + .../CU-UP-Usage-Report-UeResourceReportItem.c | 150 + .../CU-UP-Usage-Report-UeResourceReportItem.h | 47 + .../e2apv1sim/ASN1c/CUUPMeasurement-Container.c | 129 + .../e2apv1sim/ASN1c/CUUPMeasurement-Container.h | 56 + .../e2sim/previous/e2apv1sim/ASN1c/Cause.c | 92 + .../e2sim/previous/e2apv1sim/ASN1c/Cause.h | 68 + .../e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c | 59 + .../e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h | 56 + .../e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c | 65 + .../e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h | 59 + .../e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c | 73 + .../e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h | 63 + .../previous/e2apv1sim/ASN1c/CauseRICservice.c | 57 + .../previous/e2apv1sim/ASN1c/CauseRICservice.h | 55 + .../previous/e2apv1sim/ASN1c/CauseTransport.c | 55 + .../previous/e2apv1sim/ASN1c/CauseTransport.h | 54 + .../e2apv1sim/ASN1c/CellResourceReportListItem.c | 227 + .../e2apv1sim/ASN1c/CellResourceReportListItem.h | 61 + .../e2sim/previous/e2apv1sim/ASN1c/Criticality.c | 55 + .../e2sim/previous/e2apv1sim/ASN1c/Criticality.h | 52 + .../ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../ASN1c/CriticalityDiagnostics-IE-List.c | 50 + .../ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../e2apv1sim/ASN1c/CriticalityDiagnostics.c | 94 + .../e2apv1sim/ASN1c/CriticalityDiagnostics.h | 52 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 139 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 58 + .../e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c | 129 + .../e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h | 56 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 138 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 47 + .../e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c | 75 + .../e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h | 61 + .../e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c | 50 + .../e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h | 42 + .../E2SM-KPM-EventTriggerDefinition-Format1.c | 131 + .../E2SM-KPM-EventTriggerDefinition-Format1.h | 56 + .../ASN1c/E2SM-KPM-EventTriggerDefinition.c | 55 + .../ASN1c/E2SM-KPM-EventTriggerDefinition.h | 53 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 208 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 70 + .../e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c | 55 + .../e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h | 53 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 129 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 56 + .../e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c | 107 + .../e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h | 65 + .../ASN1c/E2SM-KPM-RANfunction-Description.c | 273 + .../ASN1c/E2SM-KPM-RANfunction-Description.h | 73 + .../previous/e2apv1sim/ASN1c/E2setupFailure.c | 50 + .../previous/e2apv1sim/ASN1c/E2setupFailure.h | 44 + .../previous/e2apv1sim/ASN1c/E2setupRequest.c | 50 + .../previous/e2apv1sim/ASN1c/E2setupRequest.h | 44 + .../previous/e2apv1sim/ASN1c/E2setupResponse.c | 50 + .../previous/e2apv1sim/ASN1c/E2setupResponse.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c | 192 + .../e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h | 60 + .../e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c | 241 + .../e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h | 61 + .../e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c | 94 + .../e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h | 56 + .../previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c | 129 + .../previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h | 56 + .../previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c | 129 + .../previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h | 56 + .../previous/e2apv1sim/ASN1c/ErrorIndication.c | 50 + .../previous/e2apv1sim/ASN1c/ErrorIndication.h | 44 + .../previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c | 129 + .../previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h | 56 + .../previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c | 129 + .../previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h | 56 + .../e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c | 183 + .../e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h | 47 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 171 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 46 + .../previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c | 109 + .../previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c | 70 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h | 46 + .../previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c | 109 + .../previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c | 70 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c | 109 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c | 94 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h | 56 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c | 75 + .../e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h | 62 + .../previous/e2apv1sim/ASN1c/GlobalE2node-ID.c | 86 + .../previous/e2apv1sim/ASN1c/GlobalE2node-ID.h | 64 + .../previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c | 60 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h | 46 + .../previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c | 85 + .../previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h | 65 + .../e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c | 50 + .../e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h | 44 + .../e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c | 50 + .../e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h | 44 + .../e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c | 72 + .../e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h | 48 + .../e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 50 + .../e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c | 96 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h | 44 + .../previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c | 60 + .../previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c | 60 + .../e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h | 46 + .../previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c | 60 + .../previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/INTEGER.c | 1735 + .../e2sim/previous/e2apv1sim/ASN1c/INTEGER.h | 108 + .../e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c | 179 + .../previous/e2apv1sim/ASN1c/InitiatingMessage.c | 389 + .../previous/e2apv1sim/ASN1c/InitiatingMessage.h | 97 + .../e2apv1sim/ASN1c/Makefile.am.asn1convert | 14 + .../e2apv1sim/ASN1c/Makefile.am.libasncodec | 240 + .../e2sim/previous/e2apv1sim/ASN1c/NI-Type.c | 60 + .../e2sim/previous/e2apv1sim/ASN1c/NI-Type.h | 57 + .../e2sim/previous/e2apv1sim/ASN1c/NRCGI.c | 60 + .../e2sim/previous/e2apv1sim/ASN1c/NRCGI.h | 42 + .../previous/e2apv1sim/ASN1c/NRCellIdentity.c | 70 + .../previous/e2apv1sim/ASN1c/NRCellIdentity.h | 46 + .../previous/e2apv1sim/ASN1c/NativeEnumerated.c | 367 + .../previous/e2apv1sim/ASN1c/NativeEnumerated.h | 45 + .../e2apv1sim/ASN1c/NativeEnumerated_oer.c | 149 + .../e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c | 550 + .../e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h | 46 + .../previous/e2apv1sim/ASN1c/NativeInteger_oer.c | 99 + .../e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c | 2411 + .../e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h | 102 + .../previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c | 171 + .../previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c | 140 + .../previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h | 47 + .../previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c | 141 + .../previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h | 58 + .../previous/e2apv1sim/ASN1c/ODU-PF-Container.c | 129 + .../previous/e2apv1sim/ASN1c/ODU-PF-Container.h | 56 + .../e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c | 509 + .../e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h | 77 + .../e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c | 92 + .../e2sim/previous/e2apv1sim/ASN1c/PF-Container.c | 75 + .../e2sim/previous/e2apv1sim/ASN1c/PF-Container.h | 62 + .../e2apv1sim/ASN1c/PF-ContainerListItem.c | 60 + .../e2apv1sim/ASN1c/PF-ContainerListItem.h | 46 + .../e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c | 65 + .../e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h | 46 + .../previous/e2apv1sim/ASN1c/PM-Containers-List.c | 62 + .../previous/e2apv1sim/ASN1c/PM-Containers-List.h | 52 + .../e2apv1sim/ASN1c/PerQCIReportListItem.c | 171 + .../e2apv1sim/ASN1c/PerQCIReportListItem.h | 46 + .../e2apv1sim/ASN1c/PerQCIReportListItemFormat.c | 183 + .../e2apv1sim/ASN1c/PerQCIReportListItemFormat.h | 47 + .../e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c | 72 + .../e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h | 54 + .../e2sim/previous/e2apv1sim/ASN1c/Presence.c | 55 + .../e2sim/previous/e2apv1sim/ASN1c/Presence.h | 52 + .../previous/e2apv1sim/ASN1c/PrintableString.c | 130 + .../previous/e2apv1sim/ASN1c/PrintableString.h | 37 + .../e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c | 61 + .../e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h | 53 + .../e2apv1sim/ASN1c/ProtocolIE-Container.c | 810 + .../e2apv1sim/ASN1c/ProtocolIE-Container.h | 253 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerList.c | 9 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerList.h | 23 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../previous/e2apv1sim/ASN1c/ProtocolIE-Field.c | 7190 ++ .../previous/e2apv1sim/ASN1c/ProtocolIE-Field.h | 757 + .../e2apv1sim/ASN1c/ProtocolIE-FieldPair.c | 9 + .../e2apv1sim/ASN1c/ProtocolIE-FieldPair.h | 23 + .../e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c | 61 + .../e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h | 76 + .../e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h | 108 + .../e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c | 127 + .../e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h | 73 + .../e2apv1sim/ASN1c/RANcallProcess-ID-string.c | 109 + .../e2apv1sim/ASN1c/RANcallProcess-ID-string.h | 45 + .../previous/e2apv1sim/ASN1c/RANfunction-Item.c | 70 + .../previous/e2apv1sim/ASN1c/RANfunction-Item.h | 46 + .../previous/e2apv1sim/ASN1c/RANfunction-Name.c | 316 + .../previous/e2apv1sim/ASN1c/RANfunction-Name.h | 48 + .../e2apv1sim/ASN1c/RANfunctionDefinition.c | 31 + .../e2apv1sim/ASN1c/RANfunctionDefinition.h | 43 + .../previous/e2apv1sim/ASN1c/RANfunctionID-Item.c | 60 + .../previous/e2apv1sim/ASN1c/RANfunctionID-Item.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c | 61 + .../e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h | 44 + .../e2apv1sim/ASN1c/RANfunctionIDcause-Item.c | 60 + .../e2apv1sim/ASN1c/RANfunctionIDcause-Item.h | 44 + .../previous/e2apv1sim/ASN1c/RANfunctionRevision.c | 61 + .../previous/e2apv1sim/ASN1c/RANfunctionRevision.h | 44 + .../previous/e2apv1sim/ASN1c/RANfunctions-List.c | 50 + .../previous/e2apv1sim/ASN1c/RANfunctions-List.h | 41 + .../previous/e2apv1sim/ASN1c/RANfunctionsID-List.c | 50 + .../previous/e2apv1sim/ASN1c/RANfunctionsID-List.h | 41 + .../e2apv1sim/ASN1c/RANfunctionsIDcause-List.c | 50 + .../e2apv1sim/ASN1c/RANfunctionsIDcause-List.h | 41 + .../e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c | 70 + .../e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h | 48 + .../previous/e2apv1sim/ASN1c/RIC-Format-Type.c | 31 + .../previous/e2apv1sim/ASN1c/RIC-Format-Type.h | 45 + .../e2apv1sim/ASN1c/RIC-ReportStyle-List.c | 80 + .../e2apv1sim/ASN1c/RIC-ReportStyle-List.h | 49 + .../previous/e2apv1sim/ASN1c/RIC-Style-Name.c | 109 + .../previous/e2apv1sim/ASN1c/RIC-Style-Name.h | 46 + .../previous/e2apv1sim/ASN1c/RIC-Style-Type.c | 31 + .../previous/e2apv1sim/ASN1c/RIC-Style-Type.h | 45 + .../e2apv1sim/ASN1c/RICaction-Admitted-Item.c | 50 + .../e2apv1sim/ASN1c/RICaction-Admitted-Item.h | 42 + .../e2apv1sim/ASN1c/RICaction-Admitted-List.c | 50 + .../e2apv1sim/ASN1c/RICaction-Admitted-List.h | 41 + .../e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c | 50 + .../e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../previous/e2apv1sim/ASN1c/RICactionDefinition.c | 31 + .../previous/e2apv1sim/ASN1c/RICactionDefinition.h | 43 + .../e2sim/previous/e2apv1sim/ASN1c/RICactionID.c | 61 + .../e2sim/previous/e2apv1sim/ASN1c/RICactionID.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/RICactionType.c | 57 + .../e2sim/previous/e2apv1sim/ASN1c/RICactionType.h | 55 + .../e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c | 50 + .../e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../previous/e2apv1sim/ASN1c/RICcallProcessID.c | 31 + .../previous/e2apv1sim/ASN1c/RICcallProcessID.h | 43 + .../e2apv1sim/ASN1c/RICcontrolAckRequest.c | 57 + .../e2apv1sim/ASN1c/RICcontrolAckRequest.h | 53 + .../e2apv1sim/ASN1c/RICcontrolAcknowledge.c | 50 + .../e2apv1sim/ASN1c/RICcontrolAcknowledge.h | 44 + .../previous/e2apv1sim/ASN1c/RICcontrolFailure.c | 50 + .../previous/e2apv1sim/ASN1c/RICcontrolFailure.h | 44 + .../previous/e2apv1sim/ASN1c/RICcontrolHeader.c | 31 + .../previous/e2apv1sim/ASN1c/RICcontrolHeader.h | 43 + .../previous/e2apv1sim/ASN1c/RICcontrolMessage.c | 31 + .../previous/e2apv1sim/ASN1c/RICcontrolMessage.h | 43 + .../previous/e2apv1sim/ASN1c/RICcontrolOutcome.c | 31 + .../previous/e2apv1sim/ASN1c/RICcontrolOutcome.h | 43 + .../previous/e2apv1sim/ASN1c/RICcontrolRequest.c | 50 + .../previous/e2apv1sim/ASN1c/RICcontrolRequest.h | 44 + .../previous/e2apv1sim/ASN1c/RICcontrolStatus.c | 57 + .../previous/e2apv1sim/ASN1c/RICcontrolStatus.h | 53 + .../e2apv1sim/ASN1c/RICeventTriggerDefinition.c | 31 + .../e2apv1sim/ASN1c/RICeventTriggerDefinition.h | 43 + .../e2sim/previous/e2apv1sim/ASN1c/RICindication.c | 50 + .../e2sim/previous/e2apv1sim/ASN1c/RICindication.h | 44 + .../previous/e2apv1sim/ASN1c/RICindicationHeader.c | 31 + .../previous/e2apv1sim/ASN1c/RICindicationHeader.h | 43 + .../e2apv1sim/ASN1c/RICindicationMessage.c | 31 + .../e2apv1sim/ASN1c/RICindicationMessage.h | 43 + .../previous/e2apv1sim/ASN1c/RICindicationSN.c | 61 + .../previous/e2apv1sim/ASN1c/RICindicationSN.h | 43 + .../previous/e2apv1sim/ASN1c/RICindicationType.c | 55 + .../previous/e2apv1sim/ASN1c/RICindicationType.h | 52 + .../e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c | 120 + .../e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h | 45 + .../previous/e2apv1sim/ASN1c/RICserviceQuery.c | 50 + .../previous/e2apv1sim/ASN1c/RICserviceQuery.h | 44 + .../previous/e2apv1sim/ASN1c/RICserviceUpdate.c | 50 + .../previous/e2apv1sim/ASN1c/RICserviceUpdate.h | 44 + .../e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../e2apv1sim/ASN1c/RICserviceUpdateFailure.c | 50 + .../e2apv1sim/ASN1c/RICserviceUpdateFailure.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionDetails.c | 60 + .../e2apv1sim/ASN1c/RICsubscriptionDetails.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionFailure.c | 50 + .../e2apv1sim/ASN1c/RICsubscriptionFailure.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionRequest.c | 50 + .../e2apv1sim/ASN1c/RICsubscriptionRequest.h | 44 + .../e2apv1sim/ASN1c/RICsubscriptionResponse.c | 50 + .../e2apv1sim/ASN1c/RICsubscriptionResponse.h | 44 + .../previous/e2apv1sim/ASN1c/RICsubsequentAction.c | 60 + .../previous/e2apv1sim/ASN1c/RICsubsequentAction.h | 46 + .../e2apv1sim/ASN1c/RICsubsequentActionType.c | 55 + .../e2apv1sim/ASN1c/RICsubsequentActionType.h | 54 + .../e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c | 87 + .../e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h | 70 + .../e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c | 94 + .../e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h | 74 + .../e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c | 50 + .../e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c | 50 + .../e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c | 130 + .../e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h | 41 + .../e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c | 72 + .../e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h | 54 + .../e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c | 139 + .../e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h | 58 + .../e2apv1sim/ASN1c/SliceToReportListItem.c | 139 + .../e2apv1sim/ASN1c/SliceToReportListItem.h | 58 + .../previous/e2apv1sim/ASN1c/SuccessfulOutcome.c | 359 + .../previous/e2apv1sim/ASN1c/SuccessfulOutcome.h | 91 + .../e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c | 63 + .../e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h | 56 + .../e2sim/previous/e2apv1sim/ASN1c/Timestamp.c | 31 + .../e2sim/previous/e2apv1sim/ASN1c/Timestamp.h | 45 + .../e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c | 50 + .../e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h | 44 + .../previous/e2apv1sim/ASN1c/TriggeringMessage.c | 55 + .../previous/e2apv1sim/ASN1c/TriggeringMessage.h | 52 + .../e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c | 55 + .../e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h | 54 + .../previous/e2apv1sim/ASN1c/UE-Report-Type.c | 60 + .../previous/e2apv1sim/ASN1c/UE-Report-Type.h | 57 + .../previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c | 349 + .../previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h | 89 + .../previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c | 41 + .../previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h | 52 + .../e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c | 88 + .../e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h | 72 + .../previous/e2apv1sim/ASN1c/asn_application.c | 481 + .../previous/e2apv1sim/ASN1c/asn_application.h | 171 + .../e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c | 333 + .../e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h | 83 + .../e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h | 108 + .../previous/e2apv1sim/ASN1c/asn_codecs_prim.c | 317 + .../previous/e2apv1sim/ASN1c/asn_codecs_prim.h | 51 + .../e2sim/previous/e2apv1sim/ASN1c/asn_constant.h | 30 + .../e2sim/previous/e2apv1sim/ASN1c/asn_internal.c | 48 + .../e2sim/previous/e2apv1sim/ASN1c/asn_internal.h | 159 + .../e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h | 51 + .../previous/e2apv1sim/ASN1c/asn_random_fill.c | 56 + .../previous/e2apv1sim/ASN1c/asn_random_fill.h | 51 + .../e2sim/previous/e2apv1sim/ASN1c/asn_system.h | 150 + .../e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c | 283 + .../e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h | 66 + .../previous/e2apv1sim/ASN1c/ber_tlv_length.c | 168 + .../previous/e2apv1sim/ASN1c/ber_tlv_length.h | 50 + .../e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c | 144 + .../e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h | 60 + .../e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c | 1533 + .../e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h | 80 + .../previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c | 380 + .../previous/e2apv1sim/ASN1c/constr_SEQUENCE.c | 2059 + .../previous/e2apv1sim/ASN1c/constr_SEQUENCE.h | 68 + .../previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c | 358 + .../previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h | 41 + .../previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c | 561 + .../e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c | 1441 + .../e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h | 49 + .../previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c | 285 + .../e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c | 80 + .../e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h | 262 + .../e2sim/previous/e2apv1sim/ASN1c/constraints.c | 93 + .../e2sim/previous/e2apv1sim/ASN1c/constraints.h | 62 + .../previous/e2apv1sim/ASN1c/converter-example.mk | 33 + .../e2sim/previous/e2apv1sim/ASN1c/der_encoder.c | 194 + .../e2sim/previous/e2apv1sim/ASN1c/der_encoder.h | 68 + .../e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c | 152 + .../e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h | 72 + .../e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c | 141 + .../e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h | 70 + .../e2sim/previous/e2apv1sim/ASN1c/oer_support.c | 122 + .../e2sim/previous/e2apv1sim/ASN1c/oer_support.h | 47 + .../previous/e2apv1sim/ASN1c/pdu_collection.c | 25 + .../e2sim/previous/e2apv1sim/ASN1c/per_decoder.c | 185 + .../e2sim/previous/e2apv1sim/ASN1c/per_decoder.h | 82 + .../e2sim/previous/e2apv1sim/ASN1c/per_encoder.c | 265 + .../e2sim/previous/e2apv1sim/ASN1c/per_encoder.h | 93 + .../e2sim/previous/e2apv1sim/ASN1c/per_opentype.c | 533 + .../e2sim/previous/e2apv1sim/ASN1c/per_opentype.h | 44 + .../e2sim/previous/e2apv1sim/ASN1c/per_support.c | 489 + .../e2sim/previous/e2apv1sim/ASN1c/per_support.h | 127 + .../e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c | 369 + .../e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h | 106 + .../e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c | 237 + .../e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h | 83 + .../e2sim/previous/e2apv1sim/ASN1c/xer_support.c | 227 + .../e2sim/previous/e2apv1sim/ASN1c/xer_support.h | 55 + .../e2sim/previous/e2apv1sim/CMakeLists.txt | 79 + .../e2sim/previous/e2apv1sim/Dockerfile | 55 + .../e2sim/previous/e2apv1sim/README.md | 62 + .../e2sim/previous/e2apv1sim/build_e2sim | 86 + .../e2sim/previous/e2apv1sim/cellMeasReport.txt | 40 + .../e2sim/previous/e2apv1sim/docker/Dockerfile | 54 + .../previous/e2apv1sim/docker/container-tag.yaml | 2 + .../previous/e2apv1sim/docker/old/DockerFile_old | 53 + .../e2sim/previous/e2apv1sim/docker/old/Dockerfile | 42 + .../previous/e2apv1sim/docker/old/Dockerfile_base | 60 + .../previous/e2apv1sim/docker/old/configure_rmr | 27 + .../e2sim/previous/e2apv1sim/docker/old/empty.rt | 5 + .../previous/e2apv1sim/docker/old/install_asn1c | 29 + .../previous/e2apv1sim/docker/old/install_rmr | 32 + .../e2sim/previous/e2apv1sim/docker/old/local.rt | 9 + .../e2sim/previous/e2apv1sim/e2sim.cpp | 174 + .../e2sim/previous/e2apv1sim/e2sim.hpp | 5 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c | 450 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h | 65 + .../previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c | 656 + .../previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h | 48 + .../e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c | 174 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c | 65 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h | 46 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-CP-Usage-Report-CellResourceReportItem.h | 58 + .../e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c | 129 + .../e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h | 56 + .../CU-CP-Usage-Report-UeResourceReportItem.c | 72 + .../CU-CP-Usage-Report-UeResourceReportItem.h | 47 + .../CU-UP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-UP-Usage-Report-CellResourceReportItem.h | 58 + .../e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c | 129 + .../e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h | 56 + .../CU-UP-Usage-Report-UeResourceReportItem.c | 150 + .../CU-UP-Usage-Report-UeResourceReportItem.h | 47 + .../e2sim/ASN1c/CUUPMeasurement-Container.c | 129 + .../e2sim/ASN1c/CUUPMeasurement-Container.h | 56 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c | 92 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h | 68 + .../previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c | 59 + .../previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h | 56 + .../previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c | 65 + .../previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h | 59 + .../previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c | 73 + .../previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h | 63 + .../e2apv1sim/e2sim/ASN1c/CauseRICservice.c | 57 + .../e2apv1sim/e2sim/ASN1c/CauseRICservice.h | 55 + .../e2apv1sim/e2sim/ASN1c/CauseTransport.c | 55 + .../e2apv1sim/e2sim/ASN1c/CauseTransport.h | 54 + .../e2sim/ASN1c/CellResourceReportListItem.c | 227 + .../e2sim/ASN1c/CellResourceReportListItem.h | 61 + .../previous/e2apv1sim/e2sim/ASN1c/Criticality.c | 55 + .../previous/e2apv1sim/e2sim/ASN1c/Criticality.h | 52 + .../e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../e2sim/ASN1c/CriticalityDiagnostics-IE-List.c | 50 + .../e2sim/ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c | 94 + .../e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h | 52 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 139 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 58 + .../e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c | 129 + .../e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h | 56 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 138 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 47 + .../previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c | 75 + .../previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h | 61 + .../e2sim/ASN1c/E2SM-KPM-ActionDefinition.c | 50 + .../e2sim/ASN1c/E2SM-KPM-ActionDefinition.h | 42 + .../E2SM-KPM-EventTriggerDefinition-Format1.c | 131 + .../E2SM-KPM-EventTriggerDefinition-Format1.h | 56 + .../e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c | 55 + .../e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h | 53 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 208 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 70 + .../e2sim/ASN1c/E2SM-KPM-IndicationHeader.c | 55 + .../e2sim/ASN1c/E2SM-KPM-IndicationHeader.h | 53 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 129 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 56 + .../e2sim/ASN1c/E2SM-KPM-IndicationMessage.c | 107 + .../e2sim/ASN1c/E2SM-KPM-IndicationMessage.h | 65 + .../e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c | 273 + .../e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h | 73 + .../e2apv1sim/e2sim/ASN1c/E2setupFailure.c | 50 + .../e2apv1sim/e2sim/ASN1c/E2setupFailure.h | 44 + .../e2apv1sim/e2sim/ASN1c/E2setupRequest.c | 50 + .../e2apv1sim/e2sim/ASN1c/E2setupRequest.h | 44 + .../e2apv1sim/e2sim/ASN1c/E2setupResponse.c | 50 + .../e2apv1sim/e2sim/ASN1c/E2setupResponse.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c | 192 + .../previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h | 60 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c | 241 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h | 61 + .../previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c | 94 + .../previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h | 56 + .../e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c | 129 + .../e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h | 56 + .../e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c | 129 + .../e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h | 56 + .../e2apv1sim/e2sim/ASN1c/ErrorIndication.c | 50 + .../e2apv1sim/e2sim/ASN1c/ErrorIndication.h | 44 + .../e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c | 129 + .../e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h | 56 + .../e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c | 129 + .../e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h | 56 + .../e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c | 183 + .../e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h | 47 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 171 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 46 + .../e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c | 109 + .../e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c | 70 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h | 46 + .../e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c | 109 + .../e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c | 70 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c | 109 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c | 94 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h | 56 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c | 75 + .../previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h | 62 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c | 86 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h | 64 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c | 60 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h | 46 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c | 85 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h | 65 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c | 50 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h | 44 + .../e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c | 50 + .../e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h | 44 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c | 72 + .../e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h | 48 + .../e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 50 + .../e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c | 96 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h | 44 + .../e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c | 60 + .../e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c | 60 + .../previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h | 46 + .../e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c | 60 + .../e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h | 46 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c | 1735 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h | 108 + .../previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c | 179 + .../e2apv1sim/e2sim/ASN1c/InitiatingMessage.c | 389 + .../e2apv1sim/e2sim/ASN1c/InitiatingMessage.h | 97 + .../e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert | 14 + .../e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec | 240 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c | 60 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h | 57 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c | 60 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h | 42 + .../e2apv1sim/e2sim/ASN1c/NRCellIdentity.c | 70 + .../e2apv1sim/e2sim/ASN1c/NRCellIdentity.h | 46 + .../e2apv1sim/e2sim/ASN1c/NativeEnumerated.c | 367 + .../e2apv1sim/e2sim/ASN1c/NativeEnumerated.h | 45 + .../e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c | 149 + .../previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c | 550 + .../previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h | 46 + .../e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c | 99 + .../previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c | 2411 + .../previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h | 102 + .../e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c | 171 + .../e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c | 140 + .../e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h | 47 + .../e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c | 141 + .../e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h | 58 + .../e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c | 129 + .../e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h | 56 + .../previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c | 509 + .../previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h | 77 + .../previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c | 92 + .../previous/e2apv1sim/e2sim/ASN1c/PF-Container.c | 75 + .../previous/e2apv1sim/e2sim/ASN1c/PF-Container.h | 62 + .../e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c | 60 + .../e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h | 46 + .../previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c | 65 + .../previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h | 46 + .../e2apv1sim/e2sim/ASN1c/PM-Containers-List.c | 62 + .../e2apv1sim/e2sim/ASN1c/PM-Containers-List.h | 52 + .../e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c | 171 + .../e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h | 46 + .../e2sim/ASN1c/PerQCIReportListItemFormat.c | 183 + .../e2sim/ASN1c/PerQCIReportListItemFormat.h | 47 + .../previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c | 72 + .../previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h | 54 + .../previous/e2apv1sim/e2sim/ASN1c/Presence.c | 55 + .../previous/e2apv1sim/e2sim/ASN1c/Presence.h | 52 + .../e2apv1sim/e2sim/ASN1c/PrintableString.c | 130 + .../e2apv1sim/e2sim/ASN1c/PrintableString.h | 37 + .../previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c | 61 + .../previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h | 53 + .../e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c | 810 + .../e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h | 253 + .../e2sim/ASN1c/ProtocolIE-ContainerList.c | 9 + .../e2sim/ASN1c/ProtocolIE-ContainerList.h | 23 + .../e2sim/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../e2sim/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../e2sim/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../e2sim/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c | 7190 ++ .../e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h | 757 + .../e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c | 9 + .../e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h | 23 + .../previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c | 61 + .../previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h | 76 + .../e2sim/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../e2sim/ASN1c/ProtocolIE-SingleContainer.h | 108 + .../previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c | 127 + .../previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h | 73 + .../e2sim/ASN1c/RANcallProcess-ID-string.c | 109 + .../e2sim/ASN1c/RANcallProcess-ID-string.h | 45 + .../e2apv1sim/e2sim/ASN1c/RANfunction-Item.c | 70 + .../e2apv1sim/e2sim/ASN1c/RANfunction-Item.h | 46 + .../e2apv1sim/e2sim/ASN1c/RANfunction-Name.c | 316 + .../e2apv1sim/e2sim/ASN1c/RANfunction-Name.h | 48 + .../e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c | 31 + .../e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h | 43 + .../e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c | 60 + .../e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c | 61 + .../previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h | 44 + .../e2sim/ASN1c/RANfunctionIDcause-Item.c | 60 + .../e2sim/ASN1c/RANfunctionIDcause-Item.h | 44 + .../e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c | 61 + .../e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h | 44 + .../e2apv1sim/e2sim/ASN1c/RANfunctions-List.c | 50 + .../e2apv1sim/e2sim/ASN1c/RANfunctions-List.h | 41 + .../e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c | 50 + .../e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h | 41 + .../e2sim/ASN1c/RANfunctionsIDcause-List.c | 50 + .../e2sim/ASN1c/RANfunctionsIDcause-List.h | 41 + .../e2sim/ASN1c/RIC-EventTriggerStyle-List.c | 70 + .../e2sim/ASN1c/RIC-EventTriggerStyle-List.h | 48 + .../e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c | 31 + .../e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h | 45 + .../e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c | 80 + .../e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h | 49 + .../e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c | 109 + .../e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h | 46 + .../e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c | 31 + .../e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h | 45 + .../e2sim/ASN1c/RICaction-Admitted-Item.c | 50 + .../e2sim/ASN1c/RICaction-Admitted-Item.h | 42 + .../e2sim/ASN1c/RICaction-Admitted-List.c | 50 + .../e2sim/ASN1c/RICaction-Admitted-List.h | 41 + .../e2sim/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../e2sim/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../e2sim/ASN1c/RICaction-NotAdmitted-List.c | 50 + .../e2sim/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../e2sim/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../e2sim/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../e2apv1sim/e2sim/ASN1c/RICactionDefinition.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICactionDefinition.h | 43 + .../previous/e2apv1sim/e2sim/ASN1c/RICactionID.c | 61 + .../previous/e2apv1sim/e2sim/ASN1c/RICactionID.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/RICactionType.c | 57 + .../previous/e2apv1sim/e2sim/ASN1c/RICactionType.h | 55 + .../e2sim/ASN1c/RICactions-ToBeSetup-List.c | 50 + .../e2sim/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICcallProcessID.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICcallProcessID.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c | 57 + .../e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h | 53 + .../e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c | 57 + .../e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h | 53 + .../e2sim/ASN1c/RICeventTriggerDefinition.c | 31 + .../e2sim/ASN1c/RICeventTriggerDefinition.h | 43 + .../previous/e2apv1sim/e2sim/ASN1c/RICindication.c | 50 + .../previous/e2apv1sim/e2sim/ASN1c/RICindication.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICindicationHeader.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICindicationHeader.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICindicationMessage.c | 31 + .../e2apv1sim/e2sim/ASN1c/RICindicationMessage.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICindicationSN.c | 61 + .../e2apv1sim/e2sim/ASN1c/RICindicationSN.h | 43 + .../e2apv1sim/e2sim/ASN1c/RICindicationType.c | 55 + .../e2apv1sim/e2sim/ASN1c/RICindicationType.h | 52 + .../previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c | 120 + .../previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h | 45 + .../e2apv1sim/e2sim/ASN1c/RICserviceQuery.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICserviceQuery.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h | 44 + .../e2sim/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../e2sim/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../e2sim/ASN1c/RICserviceUpdateFailure.c | 50 + .../e2sim/ASN1c/RICserviceUpdateFailure.h | 44 + .../e2sim/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../e2sim/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../e2sim/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../e2sim/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../e2sim/ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../e2sim/ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c | 60 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c | 50 + .../e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h | 44 + .../e2sim/ASN1c/RICsubscriptionResponse.c | 50 + .../e2sim/ASN1c/RICsubscriptionResponse.h | 44 + .../e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c | 60 + .../e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h | 46 + .../e2sim/ASN1c/RICsubsequentActionType.c | 55 + .../e2sim/ASN1c/RICsubsequentActionType.h | 54 + .../previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c | 87 + .../previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h | 70 + .../previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c | 94 + .../previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h | 74 + .../previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c | 50 + .../previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c | 50 + .../previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h | 44 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c | 130 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h | 41 + .../e2sim/ASN1c/ServedPlmnPerCellListItem.c | 72 + .../e2sim/ASN1c/ServedPlmnPerCellListItem.h | 54 + .../e2sim/ASN1c/SlicePerPlmnPerCellListItem.c | 139 + .../e2sim/ASN1c/SlicePerPlmnPerCellListItem.h | 58 + .../e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c | 139 + .../e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h | 58 + .../e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c | 359 + .../e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h | 91 + .../previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c | 63 + .../previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h | 56 + .../previous/e2apv1sim/e2sim/ASN1c/Timestamp.c | 31 + .../previous/e2apv1sim/e2sim/ASN1c/Timestamp.h | 45 + .../e2sim/ASN1c/Trigger-ConditionIE-Item.c | 50 + .../e2sim/ASN1c/Trigger-ConditionIE-Item.h | 44 + .../e2apv1sim/e2sim/ASN1c/TriggeringMessage.c | 55 + .../e2apv1sim/e2sim/ASN1c/TriggeringMessage.h | 52 + .../previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c | 55 + .../previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h | 54 + .../e2apv1sim/e2sim/ASN1c/UE-Report-Type.c | 60 + .../e2apv1sim/e2sim/ASN1c/UE-Report-Type.h | 57 + .../e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c | 349 + .../e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h | 89 + .../e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c | 41 + .../e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h | 52 + .../previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c | 88 + .../previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h | 72 + .../e2apv1sim/e2sim/ASN1c/asn_application.c | 481 + .../e2apv1sim/e2sim/ASN1c/asn_application.h | 171 + .../previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c | 333 + .../previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h | 83 + .../previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h | 108 + .../e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c | 317 + .../e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h | 51 + .../previous/e2apv1sim/e2sim/ASN1c/asn_constant.h | 30 + .../previous/e2apv1sim/e2sim/ASN1c/asn_internal.c | 48 + .../previous/e2apv1sim/e2sim/ASN1c/asn_internal.h | 159 + .../e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h | 51 + .../e2apv1sim/e2sim/ASN1c/asn_random_fill.c | 56 + .../e2apv1sim/e2sim/ASN1c/asn_random_fill.h | 51 + .../previous/e2apv1sim/e2sim/ASN1c/asn_system.h | 150 + .../previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c | 283 + .../previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h | 66 + .../e2apv1sim/e2sim/ASN1c/ber_tlv_length.c | 168 + .../e2apv1sim/e2sim/ASN1c/ber_tlv_length.h | 50 + .../previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c | 144 + .../previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h | 60 + .../previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c | 1533 + .../previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h | 80 + .../e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c | 380 + .../e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c | 2059 + .../e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h | 68 + .../e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c | 358 + .../e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h | 41 + .../e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c | 561 + .../previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c | 1441 + .../previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h | 49 + .../e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c | 285 + .../previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c | 80 + .../previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h | 262 + .../previous/e2apv1sim/e2sim/ASN1c/constraints.c | 93 + .../previous/e2apv1sim/e2sim/ASN1c/constraints.h | 62 + .../e2apv1sim/e2sim/ASN1c/converter-example.mk | 33 + .../previous/e2apv1sim/e2sim/ASN1c/der_encoder.c | 194 + .../previous/e2apv1sim/e2sim/ASN1c/der_encoder.h | 68 + .../previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c | 152 + .../previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h | 72 + .../previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c | 141 + .../previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h | 70 + .../previous/e2apv1sim/e2sim/ASN1c/oer_support.c | 122 + .../previous/e2apv1sim/e2sim/ASN1c/oer_support.h | 47 + .../e2apv1sim/e2sim/ASN1c/pdu_collection.c | 25 + .../previous/e2apv1sim/e2sim/ASN1c/per_decoder.c | 185 + .../previous/e2apv1sim/e2sim/ASN1c/per_decoder.h | 82 + .../previous/e2apv1sim/e2sim/ASN1c/per_encoder.c | 265 + .../previous/e2apv1sim/e2sim/ASN1c/per_encoder.h | 93 + .../previous/e2apv1sim/e2sim/ASN1c/per_opentype.c | 533 + .../previous/e2apv1sim/e2sim/ASN1c/per_opentype.h | 44 + .../previous/e2apv1sim/e2sim/ASN1c/per_support.c | 489 + .../previous/e2apv1sim/e2sim/ASN1c/per_support.h | 127 + .../previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c | 369 + .../previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h | 106 + .../previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c | 237 + .../previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h | 83 + .../previous/e2apv1sim/e2sim/ASN1c/xer_support.c | 227 + .../previous/e2apv1sim/e2sim/ASN1c/xer_support.h | 55 + .../e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt | 80 + .../e2sim/previous/e2apv1sim/e2sim/Dockerfile | 55 + .../e2sim/previous/e2apv1sim/e2sim/README.md | 62 + .../e2sim/previous/e2apv1sim/e2sim/build_e2sim | 86 + .../previous/e2apv1sim/e2sim/cellMeasReport.txt | 40 + .../previous/e2apv1sim/e2sim/docker/Dockerfile | 54 + .../e2apv1sim/e2sim/docker/container-tag.yaml | 2 + .../e2apv1sim/e2sim/docker/old/DockerFile_old | 53 + .../previous/e2apv1sim/e2sim/docker/old/Dockerfile | 42 + .../e2apv1sim/e2sim/docker/old/Dockerfile_base | 60 + .../e2apv1sim/e2sim/docker/old/configure_rmr | 27 + .../previous/e2apv1sim/e2sim/docker/old/empty.rt | 5 + .../e2apv1sim/e2sim/docker/old/install_asn1c | 29 + .../e2apv1sim/e2sim/docker/old/install_rmr | 32 + .../previous/e2apv1sim/e2sim/docker/old/local.rt | 9 + .../e2sim/previous/e2apv1sim/e2sim/e2sim.cpp | 185 + .../e2sim/previous/e2apv1sim/e2sim/e2sim.hpp | 37 + .../previous/e2apv1sim/e2sim/encode_e2apv1.cpp | 1150 + .../previous/e2apv1sim/e2sim/encode_e2apv1.hpp | 75 + .../e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp | 1853 + .../e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp | 45 + .../previous/e2apv1sim/e2sim/extras/ricsim.cpp | 216 + .../e2sim/previous/e2apv1sim/e2sim/helm/README.md | 22 + .../previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml | 22 + .../e2sim/helm/e2sim/templates/_helpers.tpl | 49 + .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 54 + .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 8 + .../e2sim/helm/e2sim/templates/deployment.yaml | 79 + .../e2apv1sim/e2sim/helm/e2sim/values.yaml | 48 + .../previous/e2apv1sim/e2sim/helm/e2sim_install.sh | 78 + .../previous/e2apv1sim/e2sim/kpm_callbacks.cpp | 646 + .../previous/e2apv1sim/e2sim/kpm_callbacks.hpp | 6 + .../e2sim/previous/e2apv1sim/e2sim/simulation.txt | 3 + .../previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp | 27 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp | 931 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp | 51 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp | 118 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp | 103 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp | 73 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp | 163 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp | 68 + .../e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp | 177 + .../e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp | 689 + .../e2sim/src/ASN1/asn/chunked_allocator.hpp | 84 + .../e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp | 140 + .../e2apv1sim/e2sim/src/ASN1/asn/elements.hpp | 565 + .../e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp | 267 + .../e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp | 97 + .../e2sim/src/ASN1/asn/per/binary_integer.hpp | 168 + .../e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp | 279 + .../e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp | 136 + .../e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp | 325 + .../e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp | 58 + .../e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp | 154 + .../e2sim/src/ASN1/asn/per/enumerated.hpp | 79 + .../e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp | 154 + .../e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp | 238 + .../e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp | 68 + .../e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp | 209 + .../e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp | 568 + .../e2sim/src/ASN1/asn/per/sequence_of.hpp | 156 + .../e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp | 141 + .../e2sim/src/ASN1/asn/per/whole_number.hpp | 147 + .../e2apv1sim/e2sim/src/ASN1/asn/printer.hpp | 338 + .../e2apv1sim/e2sim/src/ASN1/asn/type_defs.h | 36 + .../e2apv1sim/e2sim/src/ASN1/asn/utility.hpp | 88 + .../e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp | 187 + .../e2apv1sim/e2sim/src/ASN1/asn/variant.hpp | 146 + .../e2apv1sim/e2sim/src/ASN1/asn/version.hpp | 27 + .../e2sim/src/ASN1/generated/E2AP-Constants.hpp | 244 + .../e2sim/src/ASN1/generated/E2AP-IEs.hpp | 568 + .../e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp | 5512 ++ .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 980 + .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 188 + .../e2sim/src/ASN1/generated/X2AP-Constants.hpp | 2054 + .../e2sim/src/ASN1/generated/X2AP-Containers.hpp | 700 + .../e2sim/src/ASN1/generated/X2AP-IEs.hpp | 35962 ++++++++++ .../e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp | 68476 +++++++++++++++++++ .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 1537 + .../e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp | 982 + .../e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp | 85 + .../e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 85 + .../e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp | 428 + .../e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp | 72 + .../e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 78 + .../e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp | 160 + .../e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp | 125 + .../previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h | 65 + .../previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c | 196 + .../previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h | 30 + .../e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml | 21 + .../e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml | 1 + .../e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 1 + .../src/E2AP/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2AP/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../e2sim/src/E2AP/XML/E2AP_SetupRequest.xml | 1 + .../e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 1 + .../e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml | 30 + .../e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 21 + .../e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 57 + .../e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml | 97 + .../e2sim/src/E2AP/XML/GlobalE2node-ID.xml | 12 + .../e2sim/src/E2AP/XML/reference_constants.txt | 16 + .../e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c | 229 + .../e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h | 48 + .../e2sim/src/E2AP/e2ap_message_handler.cpp | 295 + .../e2sim/src/E2AP/e2ap_message_handler.hpp | 47 + .../previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c | 196 + .../previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h | 30 + .../src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml | 21 + .../e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml | 1 + .../e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ | 1 + .../src/E2APr/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2APr/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2APr/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2APr/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2APr/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2APr/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2APr/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2APr/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2APr/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../e2sim/src/E2APr/XML/E2AP_SetupRequest.xml | 1 + .../e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ | 1 + .../e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml | 30 + .../e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml | 21 + .../e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml | 57 + .../e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml | 97 + .../e2sim/src/E2APr/XML/GlobalE2node-ID.xml | 12 + .../e2sim/src/E2APr/XML/reference_constants.txt | 16 + .../e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c | 229 + .../e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h | 48 + .../e2sim/src/E2APr/e2ap_message_handler.cpp | 332 + .../e2sim/src/E2APr/e2ap_message_handler.hpp | 50 + .../previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c | 173 + .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp | 297 + .../previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h | 39 + .../e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp | 39 + .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 21 + .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 67 + .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 36 + .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 21 + .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 57 + .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 69 + .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c | 64 + .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp | 59 + .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h | 30 + .../e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp | 34 + .../e2sim/src/X2AP/x2ap_generate_messages.c | 113 + .../e2sim/src/X2AP/x2ap_generate_messages.h | 31 + .../e2sim/src/X2AP/x2ap_message_handler.c | 139 + .../e2sim/src/X2AP/x2ap_message_handler.cpp | 128 + .../e2sim/src/X2AP/x2ap_message_handler.h | 30 + .../e2sim/src/X2AP/x2ap_message_handler.hpp | 35 + .../e2apv1sim/e2sim/test/Misc/CMakeLists.txt | 86 + .../e2apv1sim/e2sim/test/Misc/test_asn1c.cpp | 79 + .../e2sim/test/Pendulum/Pendulum_asn_codec.c | 180 + .../e2sim/test/Pendulum/Pendulum_asn_codec.h | 46 + .../e2sim/test/Pendulum/Serial/adruino_serial.c | 98 + .../e2sim/test/Pendulum/Serial/adruino_serial.h | 40 + .../test/Pendulum/Serial/arduino-serial-lib.c | 170 + .../test/Pendulum/Serial/arduino-serial-lib.h | 39 + .../e2apv1sim/e2sim/test/Pendulum/demo_setup.txt | 14 + .../e2sim/test/Pendulum/e2sim_closedloop.c | 263 + .../e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c | 56 + .../e2sim/test/Pendulum/e2sim_test_client.c | 378 + .../e2sim/test/Pendulum/e2termination_test.cpp | 223 + .../e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 | 12 + .../e2apv1sim/e2sim/test/WLG/CMakeLists.txt | 59 + .../previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh | 27 + .../previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp | 287 + .../previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp | 61 + .../e2apv1sim/e2sim/test/X2/CMakeLists.txt | 49 + .../previous/e2apv1sim/e2sim/test/X2/x2agent.cpp | 41 + .../previous/e2apv1sim/e2sim/test/X2/x2term.cpp | 73 + .../e2apv1sim/e2sim/test/X2/x2termination_test.cpp | 119 + .../e2apv1sim/e2sim/test/rmr_interface/README | 13 + .../e2sim/test/rmr_interface/rmr_install.sh | 28 + .../tests/receiver/build_and_run_recvr.sh | 30 + .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 163 + .../tests/sender/build_and_run_sender.sh | 29 + .../test/rmr_interface/tests/sender/rmr_sender.c | 96 + .../test/rmr_interface/tests/sender/rmr_wrapper.h | 142 + .../e2sim/tools/asn_defs/generate_e2ap_e2sm_codes | 39 + .../e2apv1sim/e2sim/tools/build_helper.bash | 93 + .../previous/e2apv1sim/e2sim/tools/install_asn1c | 31 + .../e2apv1sim/e2sim/tools/install_dependencies | 38 + .../previous/e2apv1sim/e2sim/ueMeasReport.txt | 65 + .../e2sim/previous/e2apv1sim/encode_e2apv1.cpp | 950 + .../e2sim/previous/e2apv1sim/encode_e2apv1.hpp | 42 + .../e2sim/previous/e2apv1sim/encode_kpm.cpp | 1853 + .../e2sim/previous/e2apv1sim/encode_kpm.hpp | 45 + .../e2sim/previous/e2apv1sim/extras/ricsim.cpp | 216 + .../e2sim/previous/e2apv1sim/helm/README.md | 22 + .../e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml | 22 + .../e2apv1sim/helm/e2sim/templates/_helpers.tpl | 49 + .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 54 + .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 8 + .../e2apv1sim/helm/e2sim/templates/deployment.yaml | 79 + .../previous/e2apv1sim/helm/e2sim/values.yaml | 48 + .../e2sim/previous/e2apv1sim/helm/e2sim_install.sh | 78 + .../e2sim/previous/e2apv1sim/kpm_callbacks.cpp | 602 + .../e2sim/previous/e2apv1sim/kpm_callbacks.hpp | 4 + .../e2sim/previous/e2apv1sim/ricsim.cpp | 132 + .../e2sim/previous/e2apv1sim/ricsim.hpp | 5 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c | 450 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h | 65 + .../previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c | 656 + .../previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h | 48 + .../e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c | 174 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c | 65 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h | 46 + .../CU-CP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-CP-Usage-Report-CellResourceReportItem.h | 58 + .../ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c | 129 + .../ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h | 56 + .../CU-CP-Usage-Report-UeResourceReportItem.c | 72 + .../CU-CP-Usage-Report-UeResourceReportItem.h | 47 + .../CU-UP-Usage-Report-CellResourceReportItem.c | 139 + .../CU-UP-Usage-Report-CellResourceReportItem.h | 58 + .../ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c | 129 + .../ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h | 56 + .../CU-UP-Usage-Report-UeResourceReportItem.c | 150 + .../CU-UP-Usage-Report-UeResourceReportItem.h | 47 + .../ricsim/ASN1c/CUUPMeasurement-Container.c | 129 + .../ricsim/ASN1c/CUUPMeasurement-Container.h | 56 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c | 92 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h | 68 + .../previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c | 59 + .../previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h | 56 + .../e2apv1sim/ricsim/ASN1c/CauseProtocol.c | 65 + .../e2apv1sim/ricsim/ASN1c/CauseProtocol.h | 59 + .../previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c | 73 + .../previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h | 63 + .../e2apv1sim/ricsim/ASN1c/CauseRICservice.c | 57 + .../e2apv1sim/ricsim/ASN1c/CauseRICservice.h | 55 + .../e2apv1sim/ricsim/ASN1c/CauseTransport.c | 55 + .../e2apv1sim/ricsim/ASN1c/CauseTransport.h | 54 + .../ricsim/ASN1c/CellResourceReportListItem.c | 227 + .../ricsim/ASN1c/CellResourceReportListItem.h | 61 + .../previous/e2apv1sim/ricsim/ASN1c/Criticality.c | 55 + .../previous/e2apv1sim/ricsim/ASN1c/Criticality.h | 52 + .../ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../ricsim/ASN1c/CriticalityDiagnostics-IE-List.c | 50 + .../ricsim/ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../ricsim/ASN1c/CriticalityDiagnostics.c | 94 + .../ricsim/ASN1c/CriticalityDiagnostics.h | 52 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.c | 139 + .../ASN1c/DU-Usage-Report-CellResourceReportItem.h | 58 + .../ricsim/ASN1c/DU-Usage-Report-Per-UE.c | 129 + .../ricsim/ASN1c/DU-Usage-Report-Per-UE.h | 56 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.c | 138 + .../ASN1c/DU-Usage-Report-UeResourceReportItem.h | 47 + .../previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c | 75 + .../previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h | 61 + .../ricsim/ASN1c/E2SM-KPM-ActionDefinition.c | 50 + .../ricsim/ASN1c/E2SM-KPM-ActionDefinition.h | 42 + .../E2SM-KPM-EventTriggerDefinition-Format1.c | 131 + .../E2SM-KPM-EventTriggerDefinition-Format1.h | 56 + .../ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c | 55 + .../ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h | 53 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.c | 208 + .../ASN1c/E2SM-KPM-IndicationHeader-Format1.h | 70 + .../ricsim/ASN1c/E2SM-KPM-IndicationHeader.c | 55 + .../ricsim/ASN1c/E2SM-KPM-IndicationHeader.h | 53 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.c | 129 + .../ASN1c/E2SM-KPM-IndicationMessage-Format1.h | 56 + .../ricsim/ASN1c/E2SM-KPM-IndicationMessage.c | 107 + .../ricsim/ASN1c/E2SM-KPM-IndicationMessage.h | 65 + .../ASN1c/E2SM-KPM-RANfunction-Description.c | 273 + .../ASN1c/E2SM-KPM-RANfunction-Description.h | 73 + .../e2apv1sim/ricsim/ASN1c/E2setupFailure.c | 50 + .../e2apv1sim/ricsim/ASN1c/E2setupFailure.h | 44 + .../e2apv1sim/ricsim/ASN1c/E2setupRequest.c | 50 + .../e2apv1sim/ricsim/ASN1c/E2setupRequest.h | 44 + .../e2apv1sim/ricsim/ASN1c/E2setupResponse.c | 50 + .../e2apv1sim/ricsim/ASN1c/E2setupResponse.h | 44 + .../e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c | 192 + .../e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h | 60 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c | 241 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h | 61 + .../previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c | 94 + .../previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h | 56 + .../e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c | 129 + .../e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h | 56 + .../e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c | 129 + .../e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h | 56 + .../e2apv1sim/ricsim/ASN1c/ErrorIndication.c | 50 + .../e2apv1sim/ricsim/ASN1c/ErrorIndication.h | 44 + .../e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c | 129 + .../e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h | 56 + .../e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c | 129 + .../e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h | 56 + .../ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c | 183 + .../ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h | 47 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c | 171 + .../ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h | 46 + .../e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c | 109 + .../e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h | 46 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c | 70 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h | 46 + .../e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c | 109 + .../e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h | 46 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c | 70 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h | 46 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c | 109 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h | 46 + .../e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c | 94 + .../e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h | 56 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c | 75 + .../previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h | 62 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c | 86 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h | 64 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../ricsim/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../ricsim/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c | 60 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h | 46 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c | 85 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h | 65 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c | 50 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h | 44 + .../ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c | 50 + .../ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h | 44 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c | 72 + .../e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h | 48 + .../ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c | 50 + .../ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h | 44 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c | 96 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h | 44 + .../e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c | 60 + .../e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h | 46 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c | 60 + .../previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h | 46 + .../e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c | 60 + .../e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h | 46 + .../previous/e2apv1sim/ricsim/ASN1c/INTEGER.c | 1735 + .../previous/e2apv1sim/ricsim/ASN1c/INTEGER.h | 108 + .../previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c | 179 + .../e2apv1sim/ricsim/ASN1c/InitiatingMessage.c | 389 + .../e2apv1sim/ricsim/ASN1c/InitiatingMessage.h | 97 + .../e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert | 14 + .../e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec | 240 + .../previous/e2apv1sim/ricsim/ASN1c/NI-Type.c | 60 + .../previous/e2apv1sim/ricsim/ASN1c/NI-Type.h | 57 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c | 60 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h | 42 + .../e2apv1sim/ricsim/ASN1c/NRCellIdentity.c | 70 + .../e2apv1sim/ricsim/ASN1c/NRCellIdentity.h | 46 + .../e2apv1sim/ricsim/ASN1c/NativeEnumerated.c | 367 + .../e2apv1sim/ricsim/ASN1c/NativeEnumerated.h | 45 + .../e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c | 149 + .../e2apv1sim/ricsim/ASN1c/NativeInteger.c | 550 + .../e2apv1sim/ricsim/ASN1c/NativeInteger.h | 46 + .../e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c | 99 + .../previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c | 2411 + .../previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h | 102 + .../e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c | 171 + .../e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c | 140 + .../e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h | 47 + .../e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c | 141 + .../e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h | 58 + .../e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c | 129 + .../e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h | 56 + .../previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c | 509 + .../previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h | 77 + .../e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c | 92 + .../previous/e2apv1sim/ricsim/ASN1c/PF-Container.c | 75 + .../previous/e2apv1sim/ricsim/ASN1c/PF-Container.h | 62 + .../e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c | 60 + .../e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h | 46 + .../e2apv1sim/ricsim/ASN1c/PLMN-Identity.c | 65 + .../e2apv1sim/ricsim/ASN1c/PLMN-Identity.h | 46 + .../e2apv1sim/ricsim/ASN1c/PM-Containers-List.c | 62 + .../e2apv1sim/ricsim/ASN1c/PM-Containers-List.h | 52 + .../e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c | 171 + .../e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h | 46 + .../ricsim/ASN1c/PerQCIReportListItemFormat.c | 183 + .../ricsim/ASN1c/PerQCIReportListItemFormat.h | 47 + .../previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c | 72 + .../previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h | 54 + .../previous/e2apv1sim/ricsim/ASN1c/Presence.c | 55 + .../previous/e2apv1sim/ricsim/ASN1c/Presence.h | 52 + .../e2apv1sim/ricsim/ASN1c/PrintableString.c | 130 + .../e2apv1sim/ricsim/ASN1c/PrintableString.h | 37 + .../e2apv1sim/ricsim/ASN1c/ProcedureCode.c | 61 + .../e2apv1sim/ricsim/ASN1c/ProcedureCode.h | 53 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c | 810 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h | 253 + .../ricsim/ASN1c/ProtocolIE-ContainerList.c | 9 + .../ricsim/ASN1c/ProtocolIE-ContainerList.h | 23 + .../ricsim/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../ricsim/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../ricsim/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../ricsim/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c | 7190 ++ .../e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h | 757 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c | 9 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h | 23 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c | 61 + .../e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h | 76 + .../ricsim/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../ricsim/ASN1c/ProtocolIE-SingleContainer.h | 108 + .../e2apv1sim/ricsim/ASN1c/RAN-Container.c | 127 + .../e2apv1sim/ricsim/ASN1c/RAN-Container.h | 73 + .../ricsim/ASN1c/RANcallProcess-ID-string.c | 109 + .../ricsim/ASN1c/RANcallProcess-ID-string.h | 45 + .../e2apv1sim/ricsim/ASN1c/RANfunction-Item.c | 70 + .../e2apv1sim/ricsim/ASN1c/RANfunction-Item.h | 46 + .../e2apv1sim/ricsim/ASN1c/RANfunction-Name.c | 316 + .../e2apv1sim/ricsim/ASN1c/RANfunction-Name.h | 48 + .../e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c | 31 + .../e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h | 43 + .../e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c | 60 + .../e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h | 44 + .../e2apv1sim/ricsim/ASN1c/RANfunctionID.c | 61 + .../e2apv1sim/ricsim/ASN1c/RANfunctionID.h | 44 + .../ricsim/ASN1c/RANfunctionIDcause-Item.c | 60 + .../ricsim/ASN1c/RANfunctionIDcause-Item.h | 44 + .../e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c | 61 + .../e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h | 44 + .../e2apv1sim/ricsim/ASN1c/RANfunctions-List.c | 50 + .../e2apv1sim/ricsim/ASN1c/RANfunctions-List.h | 41 + .../e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c | 50 + .../e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h | 41 + .../ricsim/ASN1c/RANfunctionsIDcause-List.c | 50 + .../ricsim/ASN1c/RANfunctionsIDcause-List.h | 41 + .../ricsim/ASN1c/RIC-EventTriggerStyle-List.c | 70 + .../ricsim/ASN1c/RIC-EventTriggerStyle-List.h | 48 + .../e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c | 31 + .../e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h | 45 + .../e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c | 80 + .../e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h | 49 + .../e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c | 109 + .../e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h | 46 + .../e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c | 31 + .../e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h | 45 + .../ricsim/ASN1c/RICaction-Admitted-Item.c | 50 + .../ricsim/ASN1c/RICaction-Admitted-Item.h | 42 + .../ricsim/ASN1c/RICaction-Admitted-List.c | 50 + .../ricsim/ASN1c/RICaction-Admitted-List.h | 41 + .../ricsim/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../ricsim/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../ricsim/ASN1c/RICaction-NotAdmitted-List.c | 50 + .../ricsim/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../ricsim/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../ricsim/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../e2apv1sim/ricsim/ASN1c/RICactionDefinition.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICactionDefinition.h | 43 + .../previous/e2apv1sim/ricsim/ASN1c/RICactionID.c | 61 + .../previous/e2apv1sim/ricsim/ASN1c/RICactionID.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICactionType.c | 57 + .../e2apv1sim/ricsim/ASN1c/RICactionType.h | 55 + .../ricsim/ASN1c/RICactions-ToBeSetup-List.c | 50 + .../ricsim/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICcallProcessID.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICcallProcessID.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c | 57 + .../e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h | 53 + .../e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c | 57 + .../e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h | 53 + .../ricsim/ASN1c/RICeventTriggerDefinition.c | 31 + .../ricsim/ASN1c/RICeventTriggerDefinition.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICindication.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICindication.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICindicationHeader.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICindicationHeader.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICindicationMessage.c | 31 + .../e2apv1sim/ricsim/ASN1c/RICindicationMessage.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICindicationSN.c | 61 + .../e2apv1sim/ricsim/ASN1c/RICindicationSN.h | 43 + .../e2apv1sim/ricsim/ASN1c/RICindicationType.c | 55 + .../e2apv1sim/ricsim/ASN1c/RICindicationType.h | 52 + .../previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c | 120 + .../previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h | 45 + .../e2apv1sim/ricsim/ASN1c/RICserviceQuery.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICserviceQuery.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c | 50 + .../e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h | 44 + .../ricsim/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../ricsim/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../ricsim/ASN1c/RICserviceUpdateFailure.c | 50 + .../ricsim/ASN1c/RICserviceUpdateFailure.h | 44 + .../ricsim/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../ricsim/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../ricsim/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../ricsim/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../ricsim/ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../ricsim/ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../ricsim/ASN1c/RICsubscriptionDetails.c | 60 + .../ricsim/ASN1c/RICsubscriptionDetails.h | 44 + .../ricsim/ASN1c/RICsubscriptionFailure.c | 50 + .../ricsim/ASN1c/RICsubscriptionFailure.h | 44 + .../ricsim/ASN1c/RICsubscriptionRequest.c | 50 + .../ricsim/ASN1c/RICsubscriptionRequest.h | 44 + .../ricsim/ASN1c/RICsubscriptionResponse.c | 50 + .../ricsim/ASN1c/RICsubscriptionResponse.h | 44 + .../e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c | 60 + .../e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h | 46 + .../ricsim/ASN1c/RICsubsequentActionType.c | 55 + .../ricsim/ASN1c/RICsubsequentActionType.h | 54 + .../e2apv1sim/ricsim/ASN1c/RICtimeToWait.c | 87 + .../e2apv1sim/ricsim/ASN1c/RICtimeToWait.h | 70 + .../previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c | 94 + .../previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h | 74 + .../previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c | 50 + .../previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h | 44 + .../e2apv1sim/ricsim/ASN1c/ResetResponse.c | 50 + .../e2apv1sim/ricsim/ASN1c/ResetResponse.h | 44 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c | 130 + .../e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h | 41 + .../ricsim/ASN1c/ServedPlmnPerCellListItem.c | 72 + .../ricsim/ASN1c/ServedPlmnPerCellListItem.h | 54 + .../ricsim/ASN1c/SlicePerPlmnPerCellListItem.c | 139 + .../ricsim/ASN1c/SlicePerPlmnPerCellListItem.h | 58 + .../e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c | 139 + .../e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h | 58 + .../e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c | 359 + .../e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h | 91 + .../previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c | 63 + .../previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h | 56 + .../previous/e2apv1sim/ricsim/ASN1c/Timestamp.c | 31 + .../previous/e2apv1sim/ricsim/ASN1c/Timestamp.h | 45 + .../ricsim/ASN1c/Trigger-ConditionIE-Item.c | 50 + .../ricsim/ASN1c/Trigger-ConditionIE-Item.h | 44 + .../e2apv1sim/ricsim/ASN1c/TriggeringMessage.c | 55 + .../e2apv1sim/ricsim/ASN1c/TriggeringMessage.h | 52 + .../previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c | 55 + .../previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h | 54 + .../e2apv1sim/ricsim/ASN1c/UE-Report-Type.c | 60 + .../e2apv1sim/ricsim/ASN1c/UE-Report-Type.h | 57 + .../e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c | 349 + .../e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h | 89 + .../e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c | 41 + .../e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h | 52 + .../previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c | 88 + .../previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h | 72 + .../e2apv1sim/ricsim/ASN1c/asn_application.c | 481 + .../e2apv1sim/ricsim/ASN1c/asn_application.h | 171 + .../previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c | 333 + .../previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h | 83 + .../previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h | 108 + .../e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c | 317 + .../e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h | 51 + .../previous/e2apv1sim/ricsim/ASN1c/asn_constant.h | 30 + .../previous/e2apv1sim/ricsim/ASN1c/asn_internal.c | 48 + .../previous/e2apv1sim/ricsim/ASN1c/asn_internal.h | 159 + .../previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h | 51 + .../e2apv1sim/ricsim/ASN1c/asn_random_fill.c | 56 + .../e2apv1sim/ricsim/ASN1c/asn_random_fill.h | 51 + .../previous/e2apv1sim/ricsim/ASN1c/asn_system.h | 150 + .../previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c | 283 + .../previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h | 66 + .../e2apv1sim/ricsim/ASN1c/ber_tlv_length.c | 168 + .../e2apv1sim/ricsim/ASN1c/ber_tlv_length.h | 50 + .../previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c | 144 + .../previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h | 60 + .../e2apv1sim/ricsim/ASN1c/constr_CHOICE.c | 1533 + .../e2apv1sim/ricsim/ASN1c/constr_CHOICE.h | 80 + .../e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c | 380 + .../e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c | 2059 + .../e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h | 68 + .../e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c | 358 + .../e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h | 41 + .../e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c | 561 + .../e2apv1sim/ricsim/ASN1c/constr_SET_OF.c | 1441 + .../e2apv1sim/ricsim/ASN1c/constr_SET_OF.h | 49 + .../e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c | 285 + .../previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c | 80 + .../previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h | 262 + .../previous/e2apv1sim/ricsim/ASN1c/constraints.c | 93 + .../previous/e2apv1sim/ricsim/ASN1c/constraints.h | 62 + .../e2apv1sim/ricsim/ASN1c/converter-example.mk | 33 + .../previous/e2apv1sim/ricsim/ASN1c/der_encoder.c | 194 + .../previous/e2apv1sim/ricsim/ASN1c/der_encoder.h | 68 + .../previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c | 152 + .../previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h | 72 + .../previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c | 141 + .../previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h | 70 + .../previous/e2apv1sim/ricsim/ASN1c/oer_support.c | 122 + .../previous/e2apv1sim/ricsim/ASN1c/oer_support.h | 47 + .../e2apv1sim/ricsim/ASN1c/pdu_collection.c | 25 + .../previous/e2apv1sim/ricsim/ASN1c/per_decoder.c | 185 + .../previous/e2apv1sim/ricsim/ASN1c/per_decoder.h | 82 + .../previous/e2apv1sim/ricsim/ASN1c/per_encoder.c | 265 + .../previous/e2apv1sim/ricsim/ASN1c/per_encoder.h | 93 + .../previous/e2apv1sim/ricsim/ASN1c/per_opentype.c | 533 + .../previous/e2apv1sim/ricsim/ASN1c/per_opentype.h | 44 + .../previous/e2apv1sim/ricsim/ASN1c/per_support.c | 489 + .../previous/e2apv1sim/ricsim/ASN1c/per_support.h | 127 + .../previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c | 369 + .../previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h | 106 + .../previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c | 237 + .../previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h | 83 + .../previous/e2apv1sim/ricsim/ASN1c/xer_support.c | 227 + .../previous/e2apv1sim/ricsim/ASN1c/xer_support.h | 55 + .../e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt | 61 + .../e2sim/previous/e2apv1sim/ricsim/build_e2sim | 86 + .../previous/e2apv1sim/ricsim/encode_e2apv1.cpp | 1112 + .../previous/e2apv1sim/ricsim/encode_e2apv1.hpp | 46 + .../e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp | 1853 + .../e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp | 45 + .../previous/e2apv1sim/ricsim/extras/ricsim.cpp | 216 + .../e2sim/previous/e2apv1sim/ricsim/ricsim.cpp | 132 + .../e2sim/previous/e2apv1sim/ricsim/ricsim.hpp | 5 + .../previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp | 27 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp | 931 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp | 51 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp | 118 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp | 103 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp | 73 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp | 163 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp | 68 + .../e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp | 177 + .../e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp | 689 + .../ricsim/src/ASN1/asn/chunked_allocator.hpp | 84 + .../e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp | 140 + .../e2apv1sim/ricsim/src/ASN1/asn/elements.hpp | 565 + .../ricsim/src/ASN1/asn/error_context.hpp | 267 + .../e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp | 97 + .../ricsim/src/ASN1/asn/per/binary_integer.hpp | 168 + .../e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp | 279 + .../e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp | 136 + .../e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp | 325 + .../e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp | 58 + .../e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp | 154 + .../ricsim/src/ASN1/asn/per/enumerated.hpp | 79 + .../e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp | 154 + .../e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp | 238 + .../e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp | 68 + .../e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp | 209 + .../e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp | 568 + .../ricsim/src/ASN1/asn/per/sequence_of.hpp | 156 + .../e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp | 141 + .../ricsim/src/ASN1/asn/per/whole_number.hpp | 147 + .../e2apv1sim/ricsim/src/ASN1/asn/printer.hpp | 338 + .../e2apv1sim/ricsim/src/ASN1/asn/type_defs.h | 36 + .../e2apv1sim/ricsim/src/ASN1/asn/utility.hpp | 88 + .../e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp | 187 + .../e2apv1sim/ricsim/src/ASN1/asn/variant.hpp | 146 + .../e2apv1sim/ricsim/src/ASN1/asn/version.hpp | 27 + .../ricsim/src/ASN1/generated/E2AP-Constants.hpp | 244 + .../ricsim/src/ASN1/generated/E2AP-IEs.hpp | 568 + .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 5512 ++ .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 980 + .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 188 + .../ricsim/src/ASN1/generated/X2AP-Constants.hpp | 2054 + .../ricsim/src/ASN1/generated/X2AP-Containers.hpp | 700 + .../ricsim/src/ASN1/generated/X2AP-IEs.hpp | 35962 ++++++++++ .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 68476 +++++++++++++++++++ .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 1537 + .../e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp | 982 + .../e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp | 85 + .../ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 85 + .../e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp | 428 + .../e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp | 72 + .../ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 78 + .../e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp | 160 + .../e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp | 125 + .../previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h | 65 + .../previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c | 196 + .../previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h | 30 + .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml | 21 + .../ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml | 1 + .../ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 1 + .../src/E2AP/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2AP/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../ricsim/src/E2AP/XML/E2AP_SetupRequest.xml | 1 + .../ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 1 + .../ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml | 30 + .../ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 21 + .../ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 57 + .../ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml | 97 + .../ricsim/src/E2AP/XML/GlobalE2node-ID.xml | 12 + .../ricsim/src/E2AP/XML/reference_constants.txt | 16 + .../e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c | 229 + .../e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h | 48 + .../ricsim/src/E2AP/e2ap_message_handler.cpp | 295 + .../ricsim/src/E2AP/e2ap_message_handler.hpp | 47 + .../e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c | 196 + .../e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h | 30 + .../src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml | 21 + .../ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml | 1 + .../src/E2APr/XML/E2AP_PartSetupRequest.xml~ | 1 + .../src/E2APr/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2APr/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2APr/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2APr/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2APr/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2APr/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2APr/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2APr/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2APr/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../ricsim/src/E2APr/XML/E2AP_SetupRequest.xml | 1 + .../ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ | 1 + .../ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml | 30 + .../ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml | 21 + .../ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml | 57 + .../ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml | 97 + .../ricsim/src/E2APr/XML/GlobalE2node-ID.xml | 12 + .../ricsim/src/E2APr/XML/reference_constants.txt | 16 + .../e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c | 229 + .../e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h | 48 + .../ricsim/src/E2APr/e2ap_message_handler.cpp | 267 + .../ricsim/src/E2APr/e2ap_message_handler.hpp | 47 + .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c | 173 + .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp | 297 + .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h | 39 + .../e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp | 39 + .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 21 + .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 67 + .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 36 + .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 21 + .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 57 + .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 69 + .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c | 64 + .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp | 59 + .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h | 30 + .../e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp | 34 + .../ricsim/src/X2AP/x2ap_generate_messages.c | 113 + .../ricsim/src/X2AP/x2ap_generate_messages.h | 31 + .../ricsim/src/X2AP/x2ap_message_handler.c | 139 + .../ricsim/src/X2AP/x2ap_message_handler.cpp | 128 + .../ricsim/src/X2AP/x2ap_message_handler.h | 30 + .../ricsim/src/X2AP/x2ap_message_handler.hpp | 35 + .../e2apv1sim/ricsim/test/Misc/CMakeLists.txt | 86 + .../e2apv1sim/ricsim/test/Misc/test_asn1c.cpp | 79 + .../ricsim/test/Pendulum/Pendulum_asn_codec.c | 180 + .../ricsim/test/Pendulum/Pendulum_asn_codec.h | 46 + .../ricsim/test/Pendulum/Serial/adruino_serial.c | 98 + .../ricsim/test/Pendulum/Serial/adruino_serial.h | 40 + .../test/Pendulum/Serial/arduino-serial-lib.c | 170 + .../test/Pendulum/Serial/arduino-serial-lib.h | 39 + .../e2apv1sim/ricsim/test/Pendulum/demo_setup.txt | 14 + .../ricsim/test/Pendulum/e2sim_closedloop.c | 263 + .../e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c | 56 + .../ricsim/test/Pendulum/e2sim_test_client.c | 378 + .../ricsim/test/Pendulum/e2termination_test.cpp | 223 + .../e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 | 12 + .../e2apv1sim/ricsim/test/WLG/CMakeLists.txt | 59 + .../e2apv1sim/ricsim/test/WLG/build_wlg.sh | 27 + .../e2apv1sim/ricsim/test/WLG/ric_perf.cpp | 287 + .../previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp | 61 + .../e2apv1sim/ricsim/test/X2/CMakeLists.txt | 49 + .../previous/e2apv1sim/ricsim/test/X2/x2agent.cpp | 41 + .../previous/e2apv1sim/ricsim/test/X2/x2term.cpp | 73 + .../ricsim/test/X2/x2termination_test.cpp | 119 + .../e2apv1sim/ricsim/test/rmr_interface/README | 13 + .../ricsim/test/rmr_interface/rmr_install.sh | 28 + .../tests/receiver/build_and_run_recvr.sh | 30 + .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 163 + .../tests/sender/build_and_run_sender.sh | 29 + .../test/rmr_interface/tests/sender/rmr_sender.c | 96 + .../test/rmr_interface/tests/sender/rmr_wrapper.h | 142 + .../ricsim/tools/asn_defs/generate_e2ap_e2sm_codes | 39 + .../e2apv1sim/ricsim/tools/build_helper.bash | 93 + .../previous/e2apv1sim/ricsim/tools/install_asn1c | 31 + .../e2apv1sim/ricsim/tools/install_dependencies | 38 + .../e2sim/previous/e2apv1sim/simulation.txt | 3 + .../e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp | 27 + .../previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp | 931 + .../previous/e2apv1sim/src/ASN1/asn/ber/common.hpp | 51 + .../e2apv1sim/src/ASN1/asn/ber/context.hpp | 118 + .../previous/e2apv1sim/src/ASN1/asn/ber/length.hpp | 103 + .../e2apv1sim/src/ASN1/asn/ber/opentype.hpp | 73 + .../previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp | 163 + .../previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp | 68 + .../e2apv1sim/src/ASN1/asn/ber/visitor.hpp | 177 + .../previous/e2apv1sim/src/ASN1/asn/buffer.hpp | 689 + .../e2apv1sim/src/ASN1/asn/chunked_allocator.hpp | 84 + .../e2apv1sim/src/ASN1/asn/constraints.hpp | 140 + .../previous/e2apv1sim/src/ASN1/asn/elements.hpp | 565 + .../e2apv1sim/src/ASN1/asn/error_context.hpp | 267 + .../previous/e2apv1sim/src/ASN1/asn/identifier.hpp | 97 + .../e2apv1sim/src/ASN1/asn/per/binary_integer.hpp | 168 + .../e2apv1sim/src/ASN1/asn/per/bstring.hpp | 279 + .../previous/e2apv1sim/src/ASN1/asn/per/choice.hpp | 136 + .../previous/e2apv1sim/src/ASN1/asn/per/codec.hpp | 325 + .../previous/e2apv1sim/src/ASN1/asn/per/common.hpp | 58 + .../e2apv1sim/src/ASN1/asn/per/context.hpp | 154 + .../e2apv1sim/src/ASN1/asn/per/enumerated.hpp | 79 + .../e2apv1sim/src/ASN1/asn/per/integer.hpp | 154 + .../previous/e2apv1sim/src/ASN1/asn/per/length.hpp | 238 + .../previous/e2apv1sim/src/ASN1/asn/per/oid.hpp | 68 + .../e2apv1sim/src/ASN1/asn/per/ostring.hpp | 209 + .../e2apv1sim/src/ASN1/asn/per/sequence.hpp | 568 + .../e2apv1sim/src/ASN1/asn/per/sequence_of.hpp | 156 + .../e2apv1sim/src/ASN1/asn/per/visitor.hpp | 141 + .../e2apv1sim/src/ASN1/asn/per/whole_number.hpp | 147 + .../previous/e2apv1sim/src/ASN1/asn/printer.hpp | 338 + .../previous/e2apv1sim/src/ASN1/asn/type_defs.h | 36 + .../previous/e2apv1sim/src/ASN1/asn/utility.hpp | 88 + .../e2apv1sim/src/ASN1/asn/value_traits.hpp | 187 + .../previous/e2apv1sim/src/ASN1/asn/variant.hpp | 146 + .../previous/e2apv1sim/src/ASN1/asn/version.hpp | 27 + .../src/ASN1/generated/E2AP-Constants.hpp | 244 + .../e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp | 568 + .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 5512 ++ .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 980 + .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 188 + .../src/ASN1/generated/X2AP-Constants.hpp | 2054 + .../src/ASN1/generated/X2AP-Containers.hpp | 700 + .../e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp | 35962 ++++++++++ .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 68476 +++++++++++++++++++ .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 1537 + .../previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp | 982 + .../previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp | 85 + .../e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp | 85 + .../previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp | 428 + .../previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp | 72 + .../e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp | 78 + .../e2apv1sim/src/ASN1/lib/e2ap_config.hpp | 160 + .../previous/e2apv1sim/src/DEF/e2sim_defs.cpp | 125 + .../e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h | 65 + .../e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c | 196 + .../e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h | 30 + .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../src/E2AP/XML/E2AP_ErrorIndication.xml | 21 + .../src/E2AP/XML/E2AP_PartSetupRequest.xml | 1 + .../src/E2AP/XML/E2AP_PartSetupRequest.xml~ | 1 + .../src/E2AP/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2AP/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml | 1 + .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ | 1 + .../e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml | 30 + .../e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml | 21 + .../e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml | 57 + .../src/E2AP/XML/E2AP_X2SetupResponse.xml | 97 + .../e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml | 12 + .../e2apv1sim/src/E2AP/XML/reference_constants.txt | 16 + .../previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c | 229 + .../previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h | 48 + .../e2apv1sim/src/E2AP/e2ap_message_handler.cpp | 290 + .../e2apv1sim/src/E2AP/e2ap_message_handler.hpp | 47 + .../e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c | 173 + .../previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp | 297 + .../e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h | 39 + .../previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp | 39 + .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 21 + .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 67 + .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 36 + .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 21 + .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 57 + .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 69 + .../previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c | 64 + .../previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp | 59 + .../previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h | 30 + .../previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp | 34 + .../e2apv1sim/src/X2AP/x2ap_generate_messages.c | 113 + .../e2apv1sim/src/X2AP/x2ap_generate_messages.h | 31 + .../e2apv1sim/src/X2AP/x2ap_message_handler.c | 139 + .../e2apv1sim/src/X2AP/x2ap_message_handler.cpp | 128 + .../e2apv1sim/src/X2AP/x2ap_message_handler.h | 30 + .../e2apv1sim/src/X2AP/x2ap_message_handler.hpp | 35 + .../previous/e2apv1sim/test/Misc/CMakeLists.txt | 86 + .../previous/e2apv1sim/test/Misc/test_asn1c.cpp | 79 + .../e2apv1sim/test/Pendulum/Pendulum_asn_codec.c | 180 + .../e2apv1sim/test/Pendulum/Pendulum_asn_codec.h | 46 + .../test/Pendulum/Serial/adruino_serial.c | 98 + .../test/Pendulum/Serial/adruino_serial.h | 40 + .../test/Pendulum/Serial/arduino-serial-lib.c | 170 + .../test/Pendulum/Serial/arduino-serial-lib.h | 39 + .../e2apv1sim/test/Pendulum/demo_setup.txt | 14 + .../e2apv1sim/test/Pendulum/e2sim_closedloop.c | 263 + .../e2apv1sim/test/Pendulum/e2sim_serial.c | 56 + .../e2apv1sim/test/Pendulum/e2sim_test_client.c | 378 + .../e2apv1sim/test/Pendulum/e2termination_test.cpp | 223 + .../previous/e2apv1sim/test/Pendulum/pendulum.asn1 | 12 + .../previous/e2apv1sim/test/WLG/CMakeLists.txt | 59 + .../e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh | 27 + .../e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp | 287 + .../e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp | 61 + .../previous/e2apv1sim/test/X2/CMakeLists.txt | 49 + .../e2sim/previous/e2apv1sim/test/X2/x2agent.cpp | 41 + .../e2sim/previous/e2apv1sim/test/X2/x2term.cpp | 73 + .../e2apv1sim/test/X2/x2termination_test.cpp | 119 + .../previous/e2apv1sim/test/rmr_interface/README | 13 + .../e2apv1sim/test/rmr_interface/rmr_install.sh | 28 + .../tests/receiver/build_and_run_recvr.sh | 30 + .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 163 + .../tests/sender/build_and_run_sender.sh | 29 + .../test/rmr_interface/tests/sender/rmr_sender.c | 96 + .../test/rmr_interface/tests/sender/rmr_wrapper.h | 142 + .../tools/asn_defs/generate_e2ap_e2sm_codes | 39 + .../previous/e2apv1sim/tools/build_helper.bash | 93 + .../e2sim/previous/e2apv1sim/tools/install_asn1c | 31 + .../previous/e2apv1sim/tools/install_dependencies | 38 + .../e2sim/previous/e2apv1sim/ueMeasReport.txt | 65 + .../e2-interface/e2sim/previous/e2sim.cpp | 56 + .../e2-interface/e2sim/previous/helm/README.md | 22 + .../e2sim/previous/helm/e2sim/Chart.yaml | 22 + .../previous/helm/e2sim/templates/_helpers.tpl | 49 + .../helm/e2sim/templates/bin/_e2sim-run.sh.tpl | 54 + .../helm/e2sim/templates/configmap-e2sim-bin.yaml | 8 + .../previous/helm/e2sim/templates/deployment.yaml | 79 + .../e2sim/previous/helm/e2sim/values.yaml | 48 + .../e2sim/previous/helm/e2sim_install.sh | 78 + .../e2-interface/e2sim/previous/ricsim.cpp | 89 + .../e2sim/previous/src/ASN1/asn/asn.hpp | 27 + .../e2sim/previous/src/ASN1/asn/ber/codec.hpp | 931 + .../e2sim/previous/src/ASN1/asn/ber/common.hpp | 51 + .../e2sim/previous/src/ASN1/asn/ber/context.hpp | 118 + .../e2sim/previous/src/ASN1/asn/ber/length.hpp | 103 + .../e2sim/previous/src/ASN1/asn/ber/opentype.hpp | 73 + .../e2sim/previous/src/ASN1/asn/ber/tag.hpp | 163 + .../e2sim/previous/src/ASN1/asn/ber/tools.hpp | 68 + .../e2sim/previous/src/ASN1/asn/ber/visitor.hpp | 177 + .../e2sim/previous/src/ASN1/asn/buffer.hpp | 689 + .../previous/src/ASN1/asn/chunked_allocator.hpp | 84 + .../e2sim/previous/src/ASN1/asn/constraints.hpp | 140 + .../e2sim/previous/src/ASN1/asn/elements.hpp | 565 + .../e2sim/previous/src/ASN1/asn/error_context.hpp | 267 + .../e2sim/previous/src/ASN1/asn/identifier.hpp | 97 + .../previous/src/ASN1/asn/per/binary_integer.hpp | 168 + .../e2sim/previous/src/ASN1/asn/per/bstring.hpp | 279 + .../e2sim/previous/src/ASN1/asn/per/choice.hpp | 136 + .../e2sim/previous/src/ASN1/asn/per/codec.hpp | 325 + .../e2sim/previous/src/ASN1/asn/per/common.hpp | 58 + .../e2sim/previous/src/ASN1/asn/per/context.hpp | 154 + .../e2sim/previous/src/ASN1/asn/per/enumerated.hpp | 79 + .../e2sim/previous/src/ASN1/asn/per/integer.hpp | 154 + .../e2sim/previous/src/ASN1/asn/per/length.hpp | 238 + .../e2sim/previous/src/ASN1/asn/per/oid.hpp | 68 + .../e2sim/previous/src/ASN1/asn/per/ostring.hpp | 209 + .../e2sim/previous/src/ASN1/asn/per/sequence.hpp | 568 + .../previous/src/ASN1/asn/per/sequence_of.hpp | 156 + .../e2sim/previous/src/ASN1/asn/per/visitor.hpp | 141 + .../previous/src/ASN1/asn/per/whole_number.hpp | 147 + .../e2sim/previous/src/ASN1/asn/printer.hpp | 338 + .../e2sim/previous/src/ASN1/asn/type_defs.h | 36 + .../e2sim/previous/src/ASN1/asn/utility.hpp | 88 + .../e2sim/previous/src/ASN1/asn/value_traits.hpp | 187 + .../e2sim/previous/src/ASN1/asn/variant.hpp | 146 + .../e2sim/previous/src/ASN1/asn/version.hpp | 27 + .../previous/src/ASN1/generated/E2AP-Constants.hpp | 244 + .../e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp | 568 + .../src/ASN1/generated/E2AP-PDU-Contents.hpp | 5512 ++ .../src/ASN1/generated/E2AP-PDU-Descriptions.hpp | 980 + .../src/ASN1/generated/X2AP-CommonDataTypes.hpp | 188 + .../previous/src/ASN1/generated/X2AP-Constants.hpp | 2054 + .../src/ASN1/generated/X2AP-Containers.hpp | 700 + .../e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp | 35962 ++++++++++ .../src/ASN1/generated/X2AP-PDU-Contents.hpp | 68476 +++++++++++++++++++ .../src/ASN1/generated/X2AP-PDU-Descriptions.hpp | 1537 + .../e2sim/previous/src/ASN1/lib/asn_e2ap.cpp | 982 + .../e2sim/previous/src/ASN1/lib/asn_e2ap.hpp | 85 + .../previous/src/ASN1/lib/asn_e2ap_wrapper.hpp | 85 + .../e2sim/previous/src/ASN1/lib/asn_x2ap.cpp | 428 + .../e2sim/previous/src/ASN1/lib/asn_x2ap.hpp | 72 + .../previous/src/ASN1/lib/asn_x2ap_wrapper.hpp | 78 + .../e2sim/previous/src/ASN1/lib/e2ap_config.hpp | 160 + .../e2sim/previous/src/DEF/e2sim_defs.cpp | 125 + .../e2sim/previous/src/DEF/e2sim_defs.h | 65 + .../e2sim/previous/src/E2AP/E2SM/e2sm.c | 196 + .../e2sim/previous/src/E2AP/E2SM/e2sm.h | 30 + .../src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml | 21 + .../src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml | 67 + .../src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml | 97 + .../previous/src/E2AP/XML/E2AP_ErrorIndication.xml | 21 + .../src/E2AP/XML/E2AP_RICindication_type1.xml | 74 + .../src/E2AP/XML/E2AP_RICindication_type2.xml | 74 + .../src/E2AP/XML/E2AP_RICsubscriptionRequest.xml | 50 + .../XML/E2AP_RICsubscriptionRequest_Ashwin.xml | 50 + .../src/E2AP/XML/E2AP_RICsubscriptionResponse.xml | 46 + .../src/E2AP/XML/E2AP_ResourceStatusFailure.xml | 35 + .../src/E2AP/XML/E2AP_ResourceStatusRequest.xml | 85 + .../E2AP/XML/E2AP_ResourceStatusRequest_bad.xml | 85 + .../src/E2AP/XML/E2AP_ResourceStatusResponse.xml | 134 + .../src/E2AP/XML/E2AP_ResourceStatusUpdate.xml | 66 + .../previous/src/E2AP/XML/E2AP_X2SetupFailure.xml | 21 + .../previous/src/E2AP/XML/E2AP_X2SetupRequest.xml | 57 + .../previous/src/E2AP/XML/E2AP_X2SetupResponse.xml | 97 + .../previous/src/E2AP/XML/reference_constants.txt | 16 + .../e2sim/previous/src/E2AP/e2ap_asn1c_codec.c | 143 + .../e2sim/previous/src/E2AP/e2ap_asn1c_codec.h | 44 + .../previous/src/E2AP/e2ap_message_handler.cpp | 388 + .../previous/src/E2AP/e2ap_message_handler.hpp | 43 + .../e2sim/previous/src/SCTP/e2sim_sctp.c | 173 + .../e2sim/previous/src/SCTP/e2sim_sctp.cpp | 289 + .../e2sim/previous/src/SCTP/e2sim_sctp.h | 39 + .../e2sim/previous/src/SCTP/e2sim_sctp.hpp | 39 + .../MESSAGES/XML/sample_endc_x2_setup_failure.xml | 21 + .../MESSAGES/XML/sample_endc_x2_setup_request.xml | 67 + .../MESSAGES/XML/sample_endc_x2_setup_response.xml | 36 + .../X2AP/MESSAGES/XML/sample_x2_setup_failure.xml | 21 + .../X2AP/MESSAGES/XML/sample_x2_setup_request.xml | 57 + .../X2AP/MESSAGES/XML/sample_x2_setup_response.xml | 69 + .../e2sim/previous/src/X2AP/x2ap_asn_codec.c | 64 + .../e2sim/previous/src/X2AP/x2ap_asn_codec.cpp | 59 + .../e2sim/previous/src/X2AP/x2ap_asn_codec.h | 30 + .../e2sim/previous/src/X2AP/x2ap_asn_codec.hpp | 34 + .../previous/src/X2AP/x2ap_generate_messages.c | 113 + .../previous/src/X2AP/x2ap_generate_messages.h | 31 + .../e2sim/previous/src/X2AP/x2ap_message_handler.c | 139 + .../previous/src/X2AP/x2ap_message_handler.cpp | 128 + .../e2sim/previous/src/X2AP/x2ap_message_handler.h | 30 + .../previous/src/X2AP/x2ap_message_handler.hpp | 35 + .../e2sim/previous/test/Misc/CMakeLists.txt | 86 + .../e2sim/previous/test/Misc/test_asn1c.cpp | 79 + .../previous/test/Pendulum/Pendulum_asn_codec.c | 180 + .../previous/test/Pendulum/Pendulum_asn_codec.h | 46 + .../previous/test/Pendulum/Serial/adruino_serial.c | 98 + .../previous/test/Pendulum/Serial/adruino_serial.h | 40 + .../test/Pendulum/Serial/arduino-serial-lib.c | 170 + .../test/Pendulum/Serial/arduino-serial-lib.h | 39 + .../e2sim/previous/test/Pendulum/demo_setup.txt | 14 + .../previous/test/Pendulum/e2sim_closedloop.c | 263 + .../e2sim/previous/test/Pendulum/e2sim_serial.c | 56 + .../previous/test/Pendulum/e2sim_test_client.c | 378 + .../previous/test/Pendulum/e2termination_test.cpp | 223 + .../e2sim/previous/test/Pendulum/pendulum.asn1 | 12 + .../e2sim/previous/test/WLG/CMakeLists.txt | 59 + .../e2sim/previous/test/WLG/build_wlg.sh | 27 + .../e2sim/previous/test/WLG/ric_perf.cpp | 287 + .../e2sim/previous/test/WLG/ric_wlg.cpp | 61 + .../e2sim/previous/test/X2/CMakeLists.txt | 49 + .../e2sim/previous/test/X2/x2agent.cpp | 41 + .../e2-interface/e2sim/previous/test/X2/x2term.cpp | 73 + .../e2sim/previous/test/X2/x2termination_test.cpp | 119 + .../e2sim/previous/test/rmr_interface/README | 13 + .../previous/test/rmr_interface/rmr_install.sh | 28 + .../tests/receiver/build_and_run_recvr.sh | 30 + .../test/rmr_interface/tests/receiver/rmr_rcvr.c | 163 + .../tests/sender/build_and_run_sender.sh | 29 + .../test/rmr_interface/tests/sender/rmr_sender.c | 96 + .../test/rmr_interface/tests/sender/rmr_wrapper.h | 142 + .../tools/asn_defs/generate_e2ap_e2sm_codes | 39 + .../e2sim/previous/tools/build_helper.bash | 93 + .../e2sim/previous/tools/install_asn1c | 31 + .../e2sim/previous/tools/install_dependencies | 38 + .../e2sim/sample-messages/sample-service-query.xml | 12 + .../sample-messages/sample-service-update-ack.xml | 48 + .../sample-service-update-delete.xml | 80 + .../sample-service-update-empty.xml | 12 + .../sample-service-update-modify.xml | 62 + .../e2sim/sample-messages/sample-setup-request.xml | 164 + .../sample-messages/sample-setup-response.xml | 72 + .../e2-interface/e2sim/src/ASN1c/ANY.c | 450 + .../e2-interface/e2sim/src/ASN1c/ANY.h | 65 + .../e2-interface/e2sim/src/ASN1c/BIT_STRING.c | 656 + .../e2-interface/e2sim/src/ASN1c/BIT_STRING.h | 48 + .../e2-interface/e2sim/src/ASN1c/BIT_STRING_oer.c | 174 + .../e2-interface/e2sim/src/ASN1c/CMakeLists.txt | 40 + .../e2-interface/e2sim/src/ASN1c/Cause.c | 95 + .../e2-interface/e2sim/src/ASN1c/Cause.h | 68 + .../e2-interface/e2sim/src/ASN1c/CauseMisc.c | 62 + .../e2-interface/e2sim/src/ASN1c/CauseMisc.h | 58 + .../e2-interface/e2sim/src/ASN1c/CauseProtocol.c | 68 + .../e2-interface/e2sim/src/ASN1c/CauseProtocol.h | 61 + .../e2-interface/e2sim/src/ASN1c/CauseRIC.c | 76 + .../e2-interface/e2sim/src/ASN1c/CauseRIC.h | 65 + .../e2-interface/e2sim/src/ASN1c/CauseRICservice.c | 60 + .../e2-interface/e2sim/src/ASN1c/CauseRICservice.h | 57 + .../e2-interface/e2sim/src/ASN1c/CauseTransport.c | 58 + .../e2-interface/e2sim/src/ASN1c/CauseTransport.h | 56 + .../e2-interface/e2sim/src/ASN1c/Criticality.c | 58 + .../e2-interface/e2sim/src/ASN1c/Criticality.h | 54 + .../src/ASN1c/CriticalityDiagnostics-IE-Item.c | 70 + .../src/ASN1c/CriticalityDiagnostics-IE-Item.h | 48 + .../src/ASN1c/CriticalityDiagnostics-IE-List.c | 53 + .../src/ASN1c/CriticalityDiagnostics-IE-List.h | 44 + .../e2sim/src/ASN1c/CriticalityDiagnostics.c | 94 + .../e2sim/src/ASN1c/CriticalityDiagnostics.h | 52 + .../e2-interface/e2sim/src/ASN1c/E2AP-PDU.c | 78 + .../e2-interface/e2sim/src/ASN1c/E2AP-PDU.h | 61 + .../e2-interface/e2sim/src/ASN1c/E2setupFailure.c | 50 + .../e2-interface/e2sim/src/ASN1c/E2setupFailure.h | 44 + .../e2-interface/e2sim/src/ASN1c/E2setupRequest.c | 50 + .../e2-interface/e2sim/src/ASN1c/E2setupRequest.h | 44 + .../e2-interface/e2sim/src/ASN1c/E2setupResponse.c | 50 + .../e2-interface/e2sim/src/ASN1c/E2setupResponse.h | 44 + .../e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.c | 192 + .../e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.h | 60 + .../e2-interface/e2sim/src/ASN1c/ENB-ID.c | 241 + .../e2-interface/e2sim/src/ASN1c/ENB-ID.h | 61 + .../e2-interface/e2sim/src/ASN1c/ENGNB-ID.c | 94 + .../e2-interface/e2sim/src/ASN1c/ENGNB-ID.h | 56 + .../e2-interface/e2sim/src/ASN1c/ErrorIndication.c | 50 + .../e2-interface/e2sim/src/ASN1c/ErrorIndication.h | 44 + .../e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.c | 70 + .../e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/GNB-DU-ID.c | 70 + .../e2-interface/e2sim/src/ASN1c/GNB-DU-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.c | 94 + .../e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.h | 56 + .../e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.c | 89 + .../e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.h | 64 + .../e2sim/src/ASN1c/GlobalE2node-eNB-ID.c | 50 + .../e2sim/src/ASN1c/GlobalE2node-eNB-ID.h | 44 + .../e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c | 50 + .../e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h | 44 + .../e2sim/src/ASN1c/GlobalE2node-gNB-ID.c | 72 + .../e2sim/src/ASN1c/GlobalE2node-gNB-ID.h | 48 + .../e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c | 50 + .../e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h | 44 + .../e2-interface/e2sim/src/ASN1c/GlobalENB-ID.c | 60 + .../e2-interface/e2sim/src/ASN1c/GlobalENB-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.c | 99 + .../e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.h | 44 + .../e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.c | 60 + .../e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.c | 60 + .../e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.c | 60 + .../e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.h | 46 + .../e2-interface/e2sim/src/ASN1c/INTEGER.c | 1735 + .../e2-interface/e2sim/src/ASN1c/INTEGER.h | 108 + .../e2-interface/e2sim/src/ASN1c/INTEGER_oer.c | 179 + .../e2sim/src/ASN1c/InitiatingMessage.c | 398 + .../e2sim/src/ASN1c/InitiatingMessage.h | 97 + .../e2sim/src/ASN1c/Makefile.am.asn1convert | 14 + .../e2sim/src/ASN1c/Makefile.am.libasncodec | 288 + .../e2sim/src/ASN1c/NativeEnumerated.c | 367 + .../e2sim/src/ASN1c/NativeEnumerated.h | 45 + .../e2sim/src/ASN1c/NativeEnumerated_oer.c | 149 + .../e2-interface/e2sim/src/ASN1c/NativeInteger.c | 550 + .../e2-interface/e2sim/src/ASN1c/NativeInteger.h | 46 + .../e2sim/src/ASN1c/NativeInteger_oer.c | 99 + .../e2-interface/e2sim/src/ASN1c/OCTET_STRING.c | 2411 + .../e2-interface/e2sim/src/ASN1c/OCTET_STRING.h | 102 + .../e2sim/src/ASN1c/OCTET_STRING_oer.c | 171 + .../e2-interface/e2sim/src/ASN1c/OPEN_TYPE.c | 509 + .../e2-interface/e2sim/src/ASN1c/OPEN_TYPE.h | 77 + .../e2-interface/e2sim/src/ASN1c/OPEN_TYPE_oer.c | 92 + .../e2-interface/e2sim/src/ASN1c/PLMN-Identity.c | 65 + .../e2-interface/e2sim/src/ASN1c/PLMN-Identity.h | 46 + .../e2-interface/e2sim/src/ASN1c/Presence.c | 58 + .../e2-interface/e2sim/src/ASN1c/Presence.h | 54 + .../e2-interface/e2sim/src/ASN1c/ProcedureCode.c | 64 + .../e2-interface/e2sim/src/ASN1c/ProcedureCode.h | 55 + .../e2sim/src/ASN1c/ProtocolIE-Container.c | 870 + .../e2sim/src/ASN1c/ProtocolIE-Container.h | 253 + .../e2sim/src/ASN1c/ProtocolIE-ContainerList.c | 9 + .../e2sim/src/ASN1c/ProtocolIE-ContainerList.h | 23 + .../e2sim/src/ASN1c/ProtocolIE-ContainerPair.c | 9 + .../e2sim/src/ASN1c/ProtocolIE-ContainerPair.h | 23 + .../e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c | 9 + .../e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h | 23 + .../e2sim/src/ASN1c/ProtocolIE-Field.c | 7424 ++ .../e2sim/src/ASN1c/ProtocolIE-Field.h | 757 + .../e2sim/src/ASN1c/ProtocolIE-FieldPair.c | 9 + .../e2sim/src/ASN1c/ProtocolIE-FieldPair.h | 23 + .../e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.c | 64 + .../e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.h | 78 + .../e2sim/src/ASN1c/ProtocolIE-SingleContainer.c | 147 + .../e2sim/src/ASN1c/ProtocolIE-SingleContainer.h | 120 + .../e2sim/src/ASN1c/RANfunction-Item.c | 70 + .../e2sim/src/ASN1c/RANfunction-Item.h | 46 + .../e2sim/src/ASN1c/RANfunctionDefinition.c | 31 + .../e2sim/src/ASN1c/RANfunctionDefinition.h | 45 + .../e2sim/src/ASN1c/RANfunctionID-Item.c | 60 + .../e2sim/src/ASN1c/RANfunctionID-Item.h | 44 + .../e2-interface/e2sim/src/ASN1c/RANfunctionID.c | 64 + .../e2-interface/e2sim/src/ASN1c/RANfunctionID.h | 46 + .../e2sim/src/ASN1c/RANfunctionIDcause-Item.c | 60 + .../e2sim/src/ASN1c/RANfunctionIDcause-Item.h | 44 + .../e2sim/src/ASN1c/RANfunctionRevision.c | 64 + .../e2sim/src/ASN1c/RANfunctionRevision.h | 46 + .../e2sim/src/ASN1c/RANfunctions-List.c | 53 + .../e2sim/src/ASN1c/RANfunctions-List.h | 41 + .../e2sim/src/ASN1c/RANfunctionsID-List.c | 53 + .../e2sim/src/ASN1c/RANfunctionsID-List.h | 41 + .../e2sim/src/ASN1c/RANfunctionsIDcause-List.c | 53 + .../e2sim/src/ASN1c/RANfunctionsIDcause-List.h | 41 + .../e2sim/src/ASN1c/RICaction-Admitted-Item.c | 50 + .../e2sim/src/ASN1c/RICaction-Admitted-Item.h | 42 + .../e2sim/src/ASN1c/RICaction-Admitted-List.c | 53 + .../e2sim/src/ASN1c/RICaction-Admitted-List.h | 41 + .../e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c | 60 + .../e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h | 44 + .../e2sim/src/ASN1c/RICaction-NotAdmitted-List.c | 53 + .../e2sim/src/ASN1c/RICaction-NotAdmitted-List.h | 41 + .../e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c | 83 + .../e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h | 50 + .../e2sim/src/ASN1c/RICactionDefinition.c | 31 + .../e2sim/src/ASN1c/RICactionDefinition.h | 45 + .../e2-interface/e2sim/src/ASN1c/RICactionID.c | 64 + .../e2-interface/e2sim/src/ASN1c/RICactionID.h | 46 + .../e2-interface/e2sim/src/ASN1c/RICactionType.c | 60 + .../e2-interface/e2sim/src/ASN1c/RICactionType.h | 57 + .../e2sim/src/ASN1c/RICactions-ToBeSetup-List.c | 53 + .../e2sim/src/ASN1c/RICactions-ToBeSetup-List.h | 44 + .../e2sim/src/ASN1c/RICcallProcessID.c | 31 + .../e2sim/src/ASN1c/RICcallProcessID.h | 45 + .../e2sim/src/ASN1c/RICcontrolAckRequest.c | 60 + .../e2sim/src/ASN1c/RICcontrolAckRequest.h | 55 + .../e2sim/src/ASN1c/RICcontrolAcknowledge.c | 50 + .../e2sim/src/ASN1c/RICcontrolAcknowledge.h | 44 + .../e2sim/src/ASN1c/RICcontrolFailure.c | 50 + .../e2sim/src/ASN1c/RICcontrolFailure.h | 44 + .../e2sim/src/ASN1c/RICcontrolHeader.c | 31 + .../e2sim/src/ASN1c/RICcontrolHeader.h | 45 + .../e2sim/src/ASN1c/RICcontrolMessage.c | 31 + .../e2sim/src/ASN1c/RICcontrolMessage.h | 45 + .../e2sim/src/ASN1c/RICcontrolOutcome.c | 31 + .../e2sim/src/ASN1c/RICcontrolOutcome.h | 45 + .../e2sim/src/ASN1c/RICcontrolRequest.c | 50 + .../e2sim/src/ASN1c/RICcontrolRequest.h | 44 + .../e2sim/src/ASN1c/RICcontrolStatus.c | 60 + .../e2sim/src/ASN1c/RICcontrolStatus.h | 55 + .../e2sim/src/ASN1c/RICeventTriggerDefinition.c | 31 + .../e2sim/src/ASN1c/RICeventTriggerDefinition.h | 45 + .../e2-interface/e2sim/src/ASN1c/RICindication.c | 50 + .../e2-interface/e2sim/src/ASN1c/RICindication.h | 44 + .../e2sim/src/ASN1c/RICindicationHeader.c | 31 + .../e2sim/src/ASN1c/RICindicationHeader.h | 45 + .../e2sim/src/ASN1c/RICindicationMessage.c | 31 + .../e2sim/src/ASN1c/RICindicationMessage.h | 45 + .../e2-interface/e2sim/src/ASN1c/RICindicationSN.c | 64 + .../e2-interface/e2sim/src/ASN1c/RICindicationSN.h | 45 + .../e2sim/src/ASN1c/RICindicationType.c | 58 + .../e2sim/src/ASN1c/RICindicationType.h | 54 + .../e2-interface/e2sim/src/ASN1c/RICrequestID.c | 126 + .../e2-interface/e2sim/src/ASN1c/RICrequestID.h | 45 + .../e2-interface/e2sim/src/ASN1c/RICserviceQuery.c | 50 + .../e2-interface/e2sim/src/ASN1c/RICserviceQuery.h | 44 + .../e2sim/src/ASN1c/RICserviceUpdate.c | 50 + .../e2sim/src/ASN1c/RICserviceUpdate.h | 44 + .../e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c | 50 + .../e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h | 44 + .../e2sim/src/ASN1c/RICserviceUpdateFailure.c | 50 + .../e2sim/src/ASN1c/RICserviceUpdateFailure.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c | 50 + .../e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c | 50 + .../e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h | 44 + .../src/ASN1c/RICsubscriptionDeleteResponse.c | 50 + .../src/ASN1c/RICsubscriptionDeleteResponse.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionDetails.c | 60 + .../e2sim/src/ASN1c/RICsubscriptionDetails.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionFailure.c | 50 + .../e2sim/src/ASN1c/RICsubscriptionFailure.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionRequest.c | 50 + .../e2sim/src/ASN1c/RICsubscriptionRequest.h | 44 + .../e2sim/src/ASN1c/RICsubscriptionResponse.c | 50 + .../e2sim/src/ASN1c/RICsubscriptionResponse.h | 44 + .../e2sim/src/ASN1c/RICsubsequentAction.c | 60 + .../e2sim/src/ASN1c/RICsubsequentAction.h | 46 + .../e2sim/src/ASN1c/RICsubsequentActionType.c | 58 + .../e2sim/src/ASN1c/RICsubsequentActionType.h | 56 + .../e2-interface/e2sim/src/ASN1c/RICtimeToWait.c | 90 + .../e2-interface/e2sim/src/ASN1c/RICtimeToWait.h | 72 + .../e2-interface/e2sim/src/ASN1c/ResetRequest.c | 50 + .../e2-interface/e2sim/src/ASN1c/ResetRequest.h | 44 + .../e2-interface/e2sim/src/ASN1c/ResetResponse.c | 50 + .../e2-interface/e2sim/src/ASN1c/ResetResponse.h | 44 + .../e2sim/src/ASN1c/SuccessfulOutcome.c | 368 + .../e2sim/src/ASN1c/SuccessfulOutcome.h | 91 + .../e2-interface/e2sim/src/ASN1c/TimeToWait.c | 66 + .../e2-interface/e2sim/src/ASN1c/TimeToWait.h | 58 + .../e2sim/src/ASN1c/TriggeringMessage.c | 58 + .../e2sim/src/ASN1c/TriggeringMessage.h | 54 + .../e2-interface/e2sim/src/ASN1c/TypeOfError.c | 58 + .../e2-interface/e2sim/src/ASN1c/TypeOfError.h | 56 + .../e2sim/src/ASN1c/UnsuccessfulOutcome.c | 358 + .../e2sim/src/ASN1c/UnsuccessfulOutcome.h | 89 + .../e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.c | 41 + .../e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.h | 52 + .../e2-interface/e2sim/src/ASN1c/asn_SET_OF.c | 88 + .../e2-interface/e2sim/src/ASN1c/asn_SET_OF.h | 72 + .../e2-interface/e2sim/src/ASN1c/asn_application.c | 481 + .../e2-interface/e2sim/src/ASN1c/asn_application.h | 171 + .../e2-interface/e2sim/src/ASN1c/asn_bit_data.c | 333 + .../e2-interface/e2sim/src/ASN1c/asn_bit_data.h | 83 + .../e2-interface/e2sim/src/ASN1c/asn_codecs.h | 108 + .../e2-interface/e2sim/src/ASN1c/asn_codecs_prim.c | 317 + .../e2-interface/e2sim/src/ASN1c/asn_codecs_prim.h | 51 + .../e2-interface/e2sim/src/ASN1c/asn_constant.h | 22 + .../e2-interface/e2sim/src/ASN1c/asn_internal.c | 48 + .../e2-interface/e2sim/src/ASN1c/asn_internal.h | 159 + .../e2-interface/e2sim/src/ASN1c/asn_ioc.h | 51 + .../e2-interface/e2sim/src/ASN1c/asn_random_fill.c | 56 + .../e2-interface/e2sim/src/ASN1c/asn_random_fill.h | 51 + .../e2-interface/e2sim/src/ASN1c/asn_system.h | 150 + .../e2-interface/e2sim/src/ASN1c/ber_decoder.c | 283 + .../e2-interface/e2sim/src/ASN1c/ber_decoder.h | 66 + .../e2-interface/e2sim/src/ASN1c/ber_tlv_length.c | 168 + .../e2-interface/e2sim/src/ASN1c/ber_tlv_length.h | 50 + .../e2-interface/e2sim/src/ASN1c/ber_tlv_tag.c | 144 + .../e2-interface/e2sim/src/ASN1c/ber_tlv_tag.h | 60 + .../e2-interface/e2sim/src/ASN1c/constr_CHOICE.c | 1533 + .../e2-interface/e2sim/src/ASN1c/constr_CHOICE.h | 80 + .../e2sim/src/ASN1c/constr_CHOICE_oer.c | 380 + .../e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.c | 2059 + .../e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.h | 68 + .../e2sim/src/ASN1c/constr_SEQUENCE_OF.c | 358 + .../e2sim/src/ASN1c/constr_SEQUENCE_OF.h | 41 + .../e2sim/src/ASN1c/constr_SEQUENCE_oer.c | 561 + .../e2-interface/e2sim/src/ASN1c/constr_SET_OF.c | 1441 + .../e2-interface/e2sim/src/ASN1c/constr_SET_OF.h | 49 + .../e2sim/src/ASN1c/constr_SET_OF_oer.c | 285 + .../e2-interface/e2sim/src/ASN1c/constr_TYPE.c | 80 + .../e2-interface/e2sim/src/ASN1c/constr_TYPE.h | 262 + .../e2-interface/e2sim/src/ASN1c/constraints.c | 93 + .../e2-interface/e2sim/src/ASN1c/constraints.h | 62 + .../e2sim/src/ASN1c/converter-example.mk | 33 + .../e2-interface/e2sim/src/ASN1c/der_encoder.c | 194 + .../e2-interface/e2sim/src/ASN1c/der_encoder.h | 68 + .../e2-interface/e2sim/src/ASN1c/oer_decoder.c | 152 + .../e2-interface/e2sim/src/ASN1c/oer_decoder.h | 72 + .../e2-interface/e2sim/src/ASN1c/oer_encoder.c | 141 + .../e2-interface/e2sim/src/ASN1c/oer_encoder.h | 70 + .../e2-interface/e2sim/src/ASN1c/oer_support.c | 122 + .../e2-interface/e2sim/src/ASN1c/oer_support.h | 47 + .../e2-interface/e2sim/src/ASN1c/pdu_collection.c | 15 + .../e2-interface/e2sim/src/ASN1c/per_decoder.c | 185 + .../e2-interface/e2sim/src/ASN1c/per_decoder.h | 82 + .../e2-interface/e2sim/src/ASN1c/per_encoder.c | 265 + .../e2-interface/e2sim/src/ASN1c/per_encoder.h | 93 + .../e2-interface/e2sim/src/ASN1c/per_opentype.c | 533 + .../e2-interface/e2sim/src/ASN1c/per_opentype.h | 44 + .../e2-interface/e2sim/src/ASN1c/per_support.c | 489 + .../e2-interface/e2sim/src/ASN1c/per_support.h | 127 + .../e2-interface/e2sim/src/ASN1c/xer_decoder.c | 369 + .../e2-interface/e2sim/src/ASN1c/xer_decoder.h | 106 + .../e2-interface/e2sim/src/ASN1c/xer_encoder.c | 237 + .../e2-interface/e2sim/src/ASN1c/xer_encoder.h | 83 + .../e2-interface/e2sim/src/ASN1c/xer_support.c | 227 + .../e2-interface/e2sim/src/ASN1c/xer_support.h | 55 + .../e2-interface/e2sim/src/DEF/CMakeLists.txt | 35 + .../e2-interface/e2sim/src/DEF/e2sim_defs.cpp | 125 + .../e2-interface/e2sim/src/DEF/e2sim_defs.h | 65 + .../e2-interface/e2sim/src/SCTP/CMakeLists.txt | 37 + .../e2-interface/e2sim/src/SCTP/e2sim_sctp.c | 173 + .../e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp | 299 + .../e2-interface/e2sim/src/SCTP/e2sim_sctp.h | 39 + .../e2-interface/e2sim/src/SCTP/e2sim_sctp.hpp | 39 + .../e2-interface/e2sim/src/base/CMakeLists.txt | 38 + .../e2-interface/e2sim/src/base/e2sim.cpp | 256 + .../e2-interface/e2sim/src/base/e2sim.hpp | 62 + .../e2-interface/e2sim/src/encoding/CMakeLists.txt | 38 + .../e2sim/src/encoding/encode_e2apv1.cpp | 867 + .../e2sim/src/encoding/encode_e2apv1.hpp | 61 + .../e2sim/src/messagerouting/CMakeLists.txt | 43 + .../e2sim/src/messagerouting/e2ap_asn1c_codec.c | 229 + .../e2sim/src/messagerouting/e2ap_asn1c_codec.h | 48 + .../src/messagerouting/e2ap_message_handler.cpp | 396 + .../src/messagerouting/e2ap_message_handler.hpp | 50 + 5056 files changed, 1182012 insertions(+) create mode 100644 ric_benchmarking/Bouncer/Dockerfile create mode 100644 ric_benchmarking/Bouncer/README create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ANY.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ANY.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-Header.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-Header.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-Message.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-Message.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Cause.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Cause.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Criticality.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Criticality.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/INTEGER.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/INTEGER.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NULL.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NULL.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Presence.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/Presence.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/PrintableString.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/PrintableString.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionType.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactionType.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindication.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindication.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_application.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_application.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_codecs.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_constant.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_internal.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_internal.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_ioc.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/asn_system.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constraints.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/constraints.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/der_encoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/der_encoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/pdu_collection.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_decoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_decoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_encoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_encoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_opentype.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_opentype.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_support.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/per_support.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.h create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_support.c create mode 100644 ric_benchmarking/Bouncer/asn1c_defs/xer_support.h create mode 100644 ric_benchmarking/Bouncer/container-tag.yaml create mode 100644 ric_benchmarking/Bouncer/docs/_static/logo.png create mode 100644 ric_benchmarking/Bouncer/docs/conf.py create mode 100644 ric_benchmarking/Bouncer/docs/conf.yaml create mode 100644 ric_benchmarking/Bouncer/docs/e2sm-Bouncer-v001.asn create mode 100644 ric_benchmarking/Bouncer/docs/favicon.ico create mode 100644 ric_benchmarking/Bouncer/docs/index.rst create mode 100644 ric_benchmarking/Bouncer/docs/installation-guide.rst create mode 100644 ric_benchmarking/Bouncer/docs/overview.rst create mode 100644 ric_benchmarking/Bouncer/docs/release-notes.rst create mode 100644 ric_benchmarking/Bouncer/docs/requirements-docs.txt create mode 100644 ric_benchmarking/Bouncer/docs/user-guide.rst create mode 100644 ric_benchmarking/Bouncer/init/config-file.json create mode 100644 ric_benchmarking/Bouncer/init/init_script.py create mode 100644 ric_benchmarking/Bouncer/init/routes.txt create mode 100644 ric_benchmarking/Bouncer/init/schema.json create mode 100644 ric_benchmarking/Bouncer/releases/container-release-app_hw.yaml create mode 100644 ric_benchmarking/Bouncer/rmr-version.yaml create mode 100644 ric_benchmarking/Bouncer/schemas/b_xapp-policy.json create mode 100644 ric_benchmarking/Bouncer/schemas/b_xapp-ves.json create mode 100644 ric_benchmarking/Bouncer/src/Makefile create mode 100644 ric_benchmarking/Bouncer/src/README create mode 100644 ric_benchmarking/Bouncer/src/b_xapp_main.cc create mode 100644 ric_benchmarking/Bouncer/src/routes.txt create mode 100644 ric_benchmarking/Bouncer/src/run_xapp.sh create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/generic_helpers.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/response_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_helpers.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/generic_helpers.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/response_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm_helpers.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/a1_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/format_helper.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/subs_mgmt.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/subs_mgmt.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-mgmt/xapp_handler.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_sdl.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp-utils/xapp_sdl.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp.cc create mode 100644 ric_benchmarking/Bouncer/src/xapp.hpp create mode 100644 ric_benchmarking/Bouncer/src/xapp_env.sh create mode 100644 ric_benchmarking/Bouncer/tox.ini create mode 100644 ric_benchmarking/README create mode 100644 ric_benchmarking/e2-interface/e2sim/.gitignore create mode 100644 ric_benchmarking/e2-interface/e2sim/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/docker/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/Chart.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/templates/deployment.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/simulation.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/build_e2sim create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/container-tag.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/DockerFile_old create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile_base create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/configure_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/empty.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/docker/old/local.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/build_e2sim create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/cellMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/container-tag.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/DockerFile_old create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile_base create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/configure_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/empty.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/local.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/build_e2sim create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/simulation.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/extras/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/values.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/build_e2sim create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/simulation.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2agent.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2term.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/README create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/build_helper.bash create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_dependencies create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ueMeasReport.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/e2sim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/README.md create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/Chart.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/_helpers.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/deployment.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/values.yaml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/ricsim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/asn.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/opentype.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tag.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tools.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/buffer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/chunked_allocator.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/constraints.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/elements.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/error_context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/identifier.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/binary_integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/bstring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/choice.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/common.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/context.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/enumerated.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/integer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/length.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/oid.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/ostring.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence_of.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/visitor.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/whole_number.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/printer.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/type_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/utility.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/value_traits.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/variant.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/version.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/e2ap_config.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/reference_constants.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Misc/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Misc/test_asn1c.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/demo_setup.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_closedloop.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_serial.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_test_client.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/pendulum.asn1 create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/WLG/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/WLG/build_wlg.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_perf.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_wlg.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/X2/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2agent.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2term.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2termination_test.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/README create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/rmr_install.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/tools/build_helper.bash create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/tools/install_asn1c create mode 100644 ric_benchmarking/e2-interface/e2sim/previous/tools/install_dependencies create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-query.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-ack.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-delete.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-empty.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-modify.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-request.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-response.xml create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.asn1convert create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.libasncodec create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_constant.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_ioc.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_system.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF_oer.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/converter-example.mk create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/pdu_collection.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/DEF/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/SCTP/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/base/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/encoding/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/messagerouting/CMakeLists.txt create mode 100644 ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.c create mode 100644 ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.h create mode 100644 ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.cpp create mode 100644 ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.hpp diff --git a/ric_benchmarking/Bouncer/Dockerfile b/ric_benchmarking/Bouncer/Dockerfile new file mode 100644 index 0000000..39f9319 --- /dev/null +++ b/ric_benchmarking/Bouncer/Dockerfile @@ -0,0 +1,159 @@ +#/* +#================================================================================== +# +# Copyright (c) 2019-2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== +# */ + +ARG SCHEMA_PATH=schemas +ARG STAGE_DIR=/tmp/bouncer-xapp + +#================================================================================== +FROM nexus3.o-ran-sc.org:10001/ubuntu:18.04 as ricbuild + +# to override repo base, pass in repo argument when running docker build: +# docker build --build-arg REPOBASE=http://abc.def.org . .... +ARG REPOBASE=https://gerrit.oran-osc.org/r +ARG SCHEMA_FILE +ARG SCHEMA_PATH +ARG STAGE_DIR + +# Install necessary packages +WORKDIR ${STAGE_DIR} +RUN apt-get update \ + && apt-get install -y \ + cmake \ + git \ + build-essential \ + automake \ + autoconf-archive \ + autoconf \ + pkg-config \ + gawk \ + libtool \ + wget \ + zlib1g-dev \ + libffi-dev \ + && apt-get clean + +# Install mdclog using debian package hosted at packagecloud.io +ARG MDC_VER=0.0.4-1 +RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/mdclog_${MDC_VER}_amd64.deb/download.deb +RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/mdclog-dev_${MDC_VER}_amd64.deb/download.deb +RUN dpkg -i mdclog_${MDC_VER}_amd64.deb +RUN dpkg -i mdclog-dev_${MDC_VER}_amd64.deb + +# Install RMr using debian package hosted at packagecloud.io +ARG RMR_VER=4.0.5 +RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr_${RMR_VER}_amd64.deb/download.deb +RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr-dev_${RMR_VER}_amd64.deb/download.deb +RUN dpkg -i rmr_${RMR_VER}_amd64.deb +RUN dpkg -i rmr-dev_${RMR_VER}_amd64.deb + +#Install RNIB libraries +ARG RNIB_VER=1.0.0 +RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rnib_${RNIB_VER}_all.deb/download.deb +RUN dpkg -i rnib_${RNIB_VER}_all.deb + +## Install SDL Libraries +WORKDIR ${STAGE_DIR} +RUN apt-get install -y cpputest +RUN apt-get remove -y libboost-all-dev +RUN apt-get install -y libboost-all-dev +RUN apt-get install -y libhiredis-dev +#RUN apt-get install -y valgrind + +RUN git clone https://gerrit.o-ran-sc.org/r/ric-plt/dbaas +RUN cd dbaas/redismodule && \ + ./autogen.sh && \ + ./configure && \ + make all && \ + make install + +WORKDIR ${STAGE_DIR} +RUN git clone https://gerrit.o-ran-sc.org/r/ric-plt/sdl +RUN cd sdl && \ + ./autogen.sh && \ + ./configure && \ + make all && \ + make install + + +WORKDIR ${STAGE_DIR} +## Install rapidjson + +RUN git clone https://github.com/Tencent/rapidjson && \ + cd rapidjson && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ + make install && \ + cd ${STAGE_DIR} && \ + rm -rf rapidjson + +##----------------------------------- +# Now install the program +#------------------------------------ +COPY ./ ${STAGE_DIR} +RUN ls -al + + +RUN export CPATH=$CPATH:/usr/local/include && \ + cd src && \ +# source ./xapp_env.sh \ + make clean && \ + make install + +COPY ${SCHEMA_PATH}/* /etc/xapp/ +COPY init/init_script.py /etc/xapp/init_script.py +COPY init/routes.txt /etc/xapp/routes.txt +#--------------------------------------------- +# #Build the final version + +FROM ubuntu:18.04 + +ARG SCHEMA_PATH +ARG STAGE_DIR + +## copy just the needed libraries install it into the final image +COPY --from=ricbuild ${STAGE_DIR}/*.deb /tmp/ +COPY --from=ricbuild /usr/local/lib/librmr_si* /usr/local/lib/ +COPY --from=ricbuild /usr/local/lib/libsdl* /usr/local/lib/ +COPY --from=ricbuild /usr/local/libexec/redismodule/libredis* /usr/local/libexec/redismodule/ +RUN dpkg -i /tmp/*.deb +RUN apt-get update && \ + apt-get install -y libcurl3 python3 && \ + apt-get install -y libboost-all-dev cpputest libhiredis-dev valgrind && \ + apt-get clean +COPY --from=ricbuild /etc/xapp/* /etc/xapp/ +COPY --from=ricbuild /usr/local/bin/b_xapp_main /usr/local/bin/b_xapp_main +COPY --from=ricbuild /usr/local/include/rnib/*.h /usr/local/include/rnib/ +COPY --from=ricbuild /usr/local/include/rnib/rnibreader.a /usr/local/include/rnib/ + + +RUN ldconfig +RUN sysctl -w net.ipv6.conf.lo.disable_ipv6=1 + +##ENV PYTHONHOME=/opt/python3 \ +## PYTHONPATH=/opt/python3 \ +ENV RMR_RTG_SVC="9999" \ + RMR_SEED_RT="/etc/xapp/routes.txt" \ + LD_LIBRARY_PATH="/usr/local/lib:/usr/local/libexec" \ + VERBOSE=0 \ + CONFIG_FILE=/opt/ric/config/config-file.json + + + +CMD python3 /etc/xapp/init_script.py $CONFIG_FILE diff --git a/ric_benchmarking/Bouncer/README b/ric_benchmarking/Bouncer/README new file mode 100644 index 0000000..c95aa10 --- /dev/null +++ b/ric_benchmarking/Bouncer/README @@ -0,0 +1,43 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + +This repository consists of Bouncer Xapp developed in C++. Its envisioned to do simple RIC Benchmarking example Xapp. +It is required to have following features: + +1) E2 Subscription Handling +2) DB Access: SDL and RNIB +3) RMR Message handling +4) Bouncer E2SM +5) RIC Indication + +Steps for installation/running Bouncer Xapp. +$ cd init +$ source ./xapp_env.sh +$cd ../src +$ make +$ ./b_xapp_main + +Testing: +======== + +To test the bouncer xapp, E2simulator is required to be build and run. +1. Take the E2simulator code under RIC-Benchmarking/E2-interface. +2. Run/Restart the Near RT RIC Platform pods. +3. Run E2sim Pod using helm chart( build e2sim using docker file available in e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile) +4. Deploy bouncer xapp by following the xapp onboarding steps + +Login to the bouncer xapp and E2sim Pods using kubectl exec to see the benchmarking timestamp. \ No newline at end of file diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ANY.c b/ric_benchmarking/Bouncer/asn1c_defs/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ANY.h b/ric_benchmarking/Bouncer/asn1c_defs/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.c b/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.c new file mode 100644 index 0000000..98f0094 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "B-ControlCommand.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_B_ControlCommand_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_B_ControlCommand_value2enum_1[] = { + { 0, 8, "addition" }, + { 1, 8, "deletion" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_B_ControlCommand_enum2value_1[] = { + 0, /* addition(0) */ + 1 /* deletion(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_B_ControlCommand_specs_1 = { + asn_MAP_B_ControlCommand_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_B_ControlCommand_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_B_ControlCommand_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_B_ControlCommand = { + "B-ControlCommand", + "B-ControlCommand", + &asn_OP_NativeEnumerated, + asn_DEF_B_ControlCommand_tags_1, + sizeof(asn_DEF_B_ControlCommand_tags_1) + /sizeof(asn_DEF_B_ControlCommand_tags_1[0]), /* 1 */ + asn_DEF_B_ControlCommand_tags_1, /* Same as above */ + sizeof(asn_DEF_B_ControlCommand_tags_1) + /sizeof(asn_DEF_B_ControlCommand_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_B_ControlCommand_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_B_ControlCommand_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.h b/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.h new file mode 100644 index 0000000..3e418dc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-ControlCommand.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _B_ControlCommand_H_ +#define _B_ControlCommand_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum B_ControlCommand { + B_ControlCommand_addition = 0, + B_ControlCommand_deletion = 1 + /* + * Enumeration is extensible + */ +} e_B_ControlCommand; + +/* B-ControlCommand */ +typedef long B_ControlCommand_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_B_ControlCommand; +asn_struct_free_f B_ControlCommand_free; +asn_struct_print_f B_ControlCommand_print; +asn_constr_check_f B_ControlCommand_constraint; +ber_type_decoder_f B_ControlCommand_decode_ber; +der_type_encoder_f B_ControlCommand_encode_der; +xer_type_decoder_f B_ControlCommand_decode_xer; +xer_type_encoder_f B_ControlCommand_encode_xer; +per_type_decoder_f B_ControlCommand_decode_uper; +per_type_encoder_f B_ControlCommand_encode_uper; +per_type_decoder_f B_ControlCommand_decode_aper; +per_type_encoder_f B_ControlCommand_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _B_ControlCommand_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-Header.c b/ric_benchmarking/Bouncer/asn1c_defs/B-Header.c new file mode 100644 index 0000000..627deb6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-Header.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "B-Header.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_B_Header_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_B_Header = { + "B-Header", + "B-Header", + &asn_OP_NativeInteger, + asn_DEF_B_Header_tags_1, + sizeof(asn_DEF_B_Header_tags_1) + /sizeof(asn_DEF_B_Header_tags_1[0]), /* 1 */ + asn_DEF_B_Header_tags_1, /* Same as above */ + sizeof(asn_DEF_B_Header_tags_1) + /sizeof(asn_DEF_B_Header_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-Header.h b/ric_benchmarking/Bouncer/asn1c_defs/B-Header.h new file mode 100644 index 0000000..a2da40d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-Header.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _B_Header_H_ +#define _B_Header_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* B-Header */ +typedef long B_Header_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_B_Header; +asn_struct_free_f B_Header_free; +asn_struct_print_f B_Header_print; +asn_constr_check_f B_Header_constraint; +ber_type_decoder_f B_Header_decode_ber; +der_type_encoder_f B_Header_encode_der; +xer_type_decoder_f B_Header_decode_xer; +xer_type_encoder_f B_Header_encode_xer; +per_type_decoder_f B_Header_decode_uper; +per_type_encoder_f B_Header_encode_uper; +per_type_decoder_f B_Header_decode_aper; +per_type_encoder_f B_Header_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _B_Header_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-Message.c b/ric_benchmarking/Bouncer/asn1c_defs/B-Message.c new file mode 100644 index 0000000..3b0b6b6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-Message.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "B-Message.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_B_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_B_Message = { + "B-Message", + "B-Message", + &asn_OP_OCTET_STRING, + asn_DEF_B_Message_tags_1, + sizeof(asn_DEF_B_Message_tags_1) + /sizeof(asn_DEF_B_Message_tags_1[0]), /* 1 */ + asn_DEF_B_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_B_Message_tags_1) + /sizeof(asn_DEF_B_Message_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-Message.h b/ric_benchmarking/Bouncer/asn1c_defs/B-Message.h new file mode 100644 index 0000000..83904ad --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-Message.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _B_Message_H_ +#define _B_Message_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* B-Message */ +typedef OCTET_STRING_t B_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_B_Message; +asn_struct_free_f B_Message_free; +asn_struct_print_f B_Message_print; +asn_constr_check_f B_Message_constraint; +ber_type_decoder_f B_Message_decode_ber; +der_type_encoder_f B_Message_encode_der; +xer_type_decoder_f B_Message_decode_xer; +xer_type_encoder_f B_Message_encode_xer; +per_type_decoder_f B_Message_decode_uper; +per_type_encoder_f B_Message_encode_uper; +per_type_decoder_f B_Message_decode_aper; +per_type_encoder_f B_Message_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _B_Message_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.c b/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.c new file mode 100644 index 0000000..6cb0f7a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "B-TriggerNature.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_B_TriggerNature_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_B_TriggerNature_value2enum_1[] = { + { 0, 3, "now" }, + { 1, 8, "onchange" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_B_TriggerNature_enum2value_1[] = { + 0, /* now(0) */ + 1 /* onchange(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_B_TriggerNature_specs_1 = { + asn_MAP_B_TriggerNature_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_B_TriggerNature_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_B_TriggerNature_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_B_TriggerNature = { + "B-TriggerNature", + "B-TriggerNature", + &asn_OP_NativeEnumerated, + asn_DEF_B_TriggerNature_tags_1, + sizeof(asn_DEF_B_TriggerNature_tags_1) + /sizeof(asn_DEF_B_TriggerNature_tags_1[0]), /* 1 */ + asn_DEF_B_TriggerNature_tags_1, /* Same as above */ + sizeof(asn_DEF_B_TriggerNature_tags_1) + /sizeof(asn_DEF_B_TriggerNature_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_B_TriggerNature_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_B_TriggerNature_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.h b/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.h new file mode 100644 index 0000000..0a0d7b3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/B-TriggerNature.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _B_TriggerNature_H_ +#define _B_TriggerNature_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum B_TriggerNature { + B_TriggerNature_now = 0, + B_TriggerNature_onchange = 1 + /* + * Enumeration is extensible + */ +} e_B_TriggerNature; + +/* B-TriggerNature */ +typedef long B_TriggerNature_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_B_TriggerNature_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_B_TriggerNature; +extern const asn_INTEGER_specifics_t asn_SPC_B_TriggerNature_specs_1; +asn_struct_free_f B_TriggerNature_free; +asn_struct_print_f B_TriggerNature_print; +asn_constr_check_f B_TriggerNature_constraint; +ber_type_decoder_f B_TriggerNature_decode_ber; +der_type_encoder_f B_TriggerNature_encode_der; +xer_type_decoder_f B_TriggerNature_decode_xer; +xer_type_encoder_f B_TriggerNature_encode_xer; +per_type_decoder_f B_TriggerNature_decode_uper; +per_type_encoder_f B_TriggerNature_encode_uper; +per_type_decoder_f B_TriggerNature_decode_aper; +per_type_encoder_f B_TriggerNature_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _B_TriggerNature_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.c b/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.h b/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.c b/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.c new file mode 100644 index 0000000..25831e2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.c @@ -0,0 +1,492 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BOOLEAN basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) +}; +asn_TYPE_operation_t asn_OP_BOOLEAN = { + BOOLEAN_free, + BOOLEAN_print, + BOOLEAN_compare, + BOOLEAN_decode_ber, + BOOLEAN_encode_der, + BOOLEAN_decode_xer, + BOOLEAN_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BOOLEAN_decode_oer, + BOOLEAN_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BOOLEAN_decode_uper, /* Unaligned PER decoder */ + BOOLEAN_encode_uper, /* Unaligned PER encoder */ + BOOLEAN_decode_aper, /* Aligned PER decoder */ + BOOLEAN_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BOOLEAN_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { + "BOOLEAN", + "BOOLEAN", + &asn_OP_BOOLEAN, + asn_DEF_BOOLEAN_tags, + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + asn_DEF_BOOLEAN_tags, /* Same as above */ + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode BOOLEAN type. + */ +asn_dec_rval_t +BOOLEAN_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **bool_value, + const void *buf_ptr, size_t size, int tag_mode) { + BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; + asn_dec_rval_t rval; + ber_tlv_len_t length; + ber_tlv_len_t lidx; + + if(st == NULL) { + st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); + if(st == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("Boolean length is %d bytes", (int)length); + + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * Compute boolean value. + */ + for(*st = 0, lidx = 0; + (lidx < length) && *st == 0; lidx++) { + /* + * Very simple approach: read bytes until the end or + * value is already TRUE. + * BOOLEAN is not supposed to contain meaningful data anyway. + */ + *st |= ((const uint8_t *)buf_ptr)[lidx]; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", + (long)rval.consumed, (long)length, + td->name, *st); + + return rval; +} + +asn_enc_rval_t +BOOLEAN_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + + erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb) { + uint8_t bool_value; + + bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ + + if(cb(&bool_value, 1, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } + + erval.encoded += 1; + + ASN__ENCODED_OK(erval); +} + + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +BOOLEAN__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + BOOLEAN_t *st = (BOOLEAN_t *)sptr; + const char *p = (const char *)chunk_buf; + + (void)td; + + if(chunk_size && p[0] == 0x3c /* '<' */) { + switch(xer_check_tag(chunk_buf, chunk_size, "false")) { + case XCT_BOTH: + /* "" */ + *st = 0; + break; + case XCT_UNKNOWN_BO: + if(xer_check_tag(chunk_buf, chunk_size, "true") + != XCT_BOTH) + return XPBD_BROKEN_ENCODING; + /* "" */ + *st = 1; /* Or 0xff as in DER?.. */ + break; + default: + return XPBD_BROKEN_ENCODING; + } + return XPBD_BODY_CONSUMED; + } else { + return XPBD_BROKEN_ENCODING; + } +} + + +asn_dec_rval_t +BOOLEAN_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, + BOOLEAN__xer_body_decode); +} + +asn_enc_rval_t +BOOLEAN_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + + (void)ilevel; + (void)flags; + + if(!st) ASN__ENCODE_FAILED; + + if(*st) { + ASN__CALLBACK("", 7); + } else { + ASN__CALLBACK("", 8); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +int +BOOLEAN_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + const char *buf; + size_t buflen; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st) { + if(*st) { + buf = "TRUE"; + buflen = 4; + } else { + buf = "FALSE"; + buflen = 5; + } + } else { + buf = ""; + buflen = 8; + } + + return (cb(buf, buflen, app_key) < 0) ? -1 : 0; +} + +void +BOOLEAN_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(BOOLEAN_t)); + break; + } + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +BOOLEAN_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: *st = 1; break; + case 0: *st = 0; break; + case -1: default: ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + + +asn_enc_rval_t +BOOLEAN_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +BOOLEAN_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + (void)td; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: + *st = 1; + break; + case 0: + *st = 0; + break; + case -1: + default: + ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + +asn_enc_rval_t +BOOLEAN_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +#ifndef ASN_DISABLE_OER_SUPPORT + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BOOLEAN_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 1, 0, 0 }; + const BOOLEAN_t *st = sptr; + uint8_t bool_value = *st ? 0xff : 0; /* 0xff mandated by OER */ + + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(cb(&bool_value, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +asn_dec_rval_t +BOOLEAN_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t ok = {RC_OK, 1}; + BOOLEAN_t *st; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if(!(st = *sptr)) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + *st = *(const uint8_t *)ptr; + + return ok; +} + + + +#endif + +int +BOOLEAN_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const BOOLEAN_t *a = aptr; + const BOOLEAN_t *b = bptr; + + (void)td; + + if(a && b) { + if(!*a == !*b) { /* TRUE can be encoded by any non-zero byte. */ + return 0; + } else if(!*a) { + return -1; + } else { + return 1; + } + } else if(!a) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +BOOLEAN_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + BOOLEAN_t *st = *sptr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_CONSTRAINED) { + *st = asn_random_between(pc->lower_bound, pc->upper_bound); + return result_ok; + } + } + + /* Simulate booleans that are sloppily set and biased. */ + switch(asn_random_between(0, 7)) { + case 0: + case 1: + case 2: + *st = 0; break; + case 3: *st = -1; break; + case 4: *st = 1; break; + case 5: *st = INT_MIN; break; + case 6: *st = INT_MAX; break; + default: + *st = asn_random_between(INT_MIN, INT_MAX); + break; + } + return result_ok; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.h b/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.h new file mode 100644 index 0000000..620acf7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/BOOLEAN.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BOOLEAN_H_ +#define _BOOLEAN_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The underlying integer may contain various values, but everything + * non-zero is capped to 0xff by the DER encoder. The BER decoder may + * yield non-zero values different from 1, beware. + */ +typedef int BOOLEAN_t; + +extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; +extern asn_TYPE_operation_t asn_OP_BOOLEAN; + +asn_struct_free_f BOOLEAN_free; +asn_struct_print_f BOOLEAN_print; +asn_struct_compare_f BOOLEAN_compare; +ber_type_decoder_f BOOLEAN_decode_ber; +der_type_encoder_f BOOLEAN_encode_der; +oer_type_decoder_f BOOLEAN_decode_oer; +oer_type_encoder_f BOOLEAN_encode_oer; +per_type_decoder_f BOOLEAN_decode_uper; +per_type_encoder_f BOOLEAN_encode_uper; +per_type_decoder_f BOOLEAN_decode_aper; +per_type_encoder_f BOOLEAN_encode_aper; +xer_type_decoder_f BOOLEAN_decode_xer; +xer_type_encoder_f BOOLEAN_encode_xer; +asn_random_fill_f BOOLEAN_random_fill; + +#define BOOLEAN_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _BOOLEAN_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Cause.c b/ric_benchmarking/Bouncer/asn1c_defs/Cause.c new file mode 100644 index 0000000..216f970 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Cause.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Cause.h b/ric_benchmarking/Bouncer/asn1c_defs/Cause.h new file mode 100644 index 0000000..0311e82 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.c b/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.c new file mode 100644 index 0000000..98cb877 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.c @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.h b/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.h new file mode 100644 index 0000000..fe9470a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseMisc.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.c b/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.c new file mode 100644 index 0000000..007c664 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.h b/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.h new file mode 100644 index 0000000..d074a19 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseProtocol.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.c b/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.c new file mode 100644 index 0000000..81ca48b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.h b/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.h new file mode 100644 index 0000000..9b8f9ec --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseRIC.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.c b/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.c new file mode 100644 index 0000000..fc06d4c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.h b/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.h new file mode 100644 index 0000000..98989eb --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseRICservice.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.c b/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.c new file mode 100644 index 0000000..de4d52a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.h b/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.h new file mode 100644 index 0000000..1a7ad59 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CauseTransport.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Criticality.c b/ric_benchmarking/Bouncer/asn1c_defs/Criticality.c new file mode 100644 index 0000000..e3e69c8 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Criticality.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Criticality.h b/ric_benchmarking/Bouncer/asn1c_defs/Criticality.h new file mode 100644 index 0000000..2df73f9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Criticality.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..54b3fc9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..3aa9196 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..09410ff --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3bbb58b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.c b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.c new file mode 100644 index 0000000..d9b8977 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.h b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.h new file mode 100644 index 0000000..8c67719 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.c b/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.c new file mode 100644 index 0000000..c14802f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.h b/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.h new file mode 100644 index 0000000..52a19b1 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.c new file mode 100644 index 0000000..c3a678c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.c @@ -0,0 +1,126 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ActionDefinition-Format1.h" + +#include "RANparameter-Item.h" +static int +memb_ranParameter_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 255)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_ranParameter_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 255 } /* (SIZE(1..255)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ranParameter_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 255 } /* (SIZE(1..255)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ranParameter_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANparameter_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ranParameter_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ranParameter_List_specs_2 = { + sizeof(struct E2SM_Bouncer_ActionDefinition_Format1__ranParameter_List), + offsetof(struct E2SM_Bouncer_ActionDefinition_Format1__ranParameter_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ranParameter_List_2 = { + "ranParameter-List", + "ranParameter-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ranParameter_List_tags_2, + sizeof(asn_DEF_ranParameter_List_tags_2) + /sizeof(asn_DEF_ranParameter_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_ranParameter_List_tags_2, /* Same as above */ + sizeof(asn_DEF_ranParameter_List_tags_2) + /sizeof(asn_DEF_ranParameter_List_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_ranParameter_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_ranParameter_List_2, + 1, /* Single element */ + &asn_SPC_ranParameter_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ActionDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_Bouncer_ActionDefinition_Format1, ranParameter_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ranParameter_List_2, + 0, + { 0, &asn_PER_memb_ranParameter_List_constr_2, memb_ranParameter_List_constraint_1 }, + 0, 0, /* No default value */ + "ranParameter-List" + }, +}; +static const int asn_MAP_E2SM_Bouncer_ActionDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ActionDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranParameter-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ActionDefinition_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_ActionDefinition_Format1), + offsetof(struct E2SM_Bouncer_ActionDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_ActionDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_Bouncer_ActionDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ActionDefinition_Format1 = { + "E2SM-Bouncer-ActionDefinition-Format1", + "E2SM-Bouncer-ActionDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ActionDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_ActionDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ActionDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.h new file mode 100644 index 0000000..368e158 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition-Format1.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ActionDefinition_Format1_H_ +#define _E2SM_Bouncer_ActionDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RANparameter_Item; + +/* E2SM-Bouncer-ActionDefinition-Format1 */ +typedef struct E2SM_Bouncer_ActionDefinition_Format1 { + struct E2SM_Bouncer_ActionDefinition_Format1__ranParameter_List { + A_SEQUENCE_OF(struct RANparameter_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ranParameter_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ActionDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ActionDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ActionDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ActionDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ActionDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.c new file mode 100644 index 0000000..5832af0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ActionDefinition.h" + +#include "E2SM-Bouncer-ActionDefinition-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_ActionDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ActionDefinition_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_ActionDefinition, choice.actionDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_ActionDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* actionDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_ActionDefinition_specs_1 = { + sizeof(struct E2SM_Bouncer_ActionDefinition), + offsetof(struct E2SM_Bouncer_ActionDefinition, _asn_ctx), + offsetof(struct E2SM_Bouncer_ActionDefinition, present), + sizeof(((struct E2SM_Bouncer_ActionDefinition *)0)->present), + asn_MAP_E2SM_Bouncer_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ActionDefinition = { + "E2SM-Bouncer-ActionDefinition", + "E2SM-Bouncer-ActionDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_ActionDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.h new file mode 100644 index 0000000..ad6944b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ActionDefinition.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ActionDefinition_H_ +#define _E2SM_Bouncer_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_ActionDefinition_PR { + E2SM_Bouncer_ActionDefinition_PR_NOTHING, /* No components present */ + E2SM_Bouncer_ActionDefinition_PR_actionDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_ActionDefinition_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_ActionDefinition_Format1; + +/* E2SM-Bouncer-ActionDefinition */ +typedef struct E2SM_Bouncer_ActionDefinition { + E2SM_Bouncer_ActionDefinition_PR present; + union E2SM_Bouncer_ActionDefinition_u { + struct E2SM_Bouncer_ActionDefinition_Format1 *actionDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.c new file mode 100644 index 0000000..f514394 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ControlHeader-Format1.h" + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ControlHeader_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_Bouncer_ControlHeader_Format1, controlHeaderParam), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_B_Header, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "controlHeaderParam" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ControlHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlHeaderParam */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ControlHeader_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_ControlHeader_Format1), + offsetof(struct E2SM_Bouncer_ControlHeader_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_ControlHeader_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlHeader_Format1 = { + "E2SM-Bouncer-ControlHeader-Format1", + "E2SM-Bouncer-ControlHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ControlHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_ControlHeader_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ControlHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.h new file mode 100644 index 0000000..10b300b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader-Format1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ControlHeader_Format1_H_ +#define _E2SM_Bouncer_ControlHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "B-Header.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-Bouncer-ControlHeader-Format1 */ +typedef struct E2SM_Bouncer_ControlHeader_Format1 { + B_Header_t controlHeaderParam; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ControlHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ControlHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_Header_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ControlHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.c new file mode 100644 index 0000000..f22dd26 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ControlHeader.h" + +#include "E2SM-Bouncer-ControlHeader-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_ControlHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ControlHeader_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_ControlHeader, choice.controlHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_ControlHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "controlHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ControlHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_ControlHeader_specs_1 = { + sizeof(struct E2SM_Bouncer_ControlHeader), + offsetof(struct E2SM_Bouncer_ControlHeader, _asn_ctx), + offsetof(struct E2SM_Bouncer_ControlHeader, present), + sizeof(((struct E2SM_Bouncer_ControlHeader *)0)->present), + asn_MAP_E2SM_Bouncer_ControlHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlHeader = { + "E2SM-Bouncer-ControlHeader", + "E2SM-Bouncer-ControlHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_ControlHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_ControlHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ControlHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.h new file mode 100644 index 0000000..c9c0003 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlHeader.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ControlHeader_H_ +#define _E2SM_Bouncer_ControlHeader_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_ControlHeader_PR { + E2SM_Bouncer_ControlHeader_PR_NOTHING, /* No components present */ + E2SM_Bouncer_ControlHeader_PR_controlHeader_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_ControlHeader_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_ControlHeader_Format1; + +/* E2SM-Bouncer-ControlHeader */ +typedef struct E2SM_Bouncer_ControlHeader { + E2SM_Bouncer_ControlHeader_PR present; + union E2SM_Bouncer_ControlHeader_u { + struct E2SM_Bouncer_ControlHeader_Format1 *controlHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ControlHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ControlHeader_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.c new file mode 100644 index 0000000..8a97659 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ControlMessage-Format1.h" + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ControlMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_Bouncer_ControlMessage_Format1, controlMsgParam), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_B_Message, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "controlMsgParam" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ControlMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlMsgParam */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ControlMessage_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_ControlMessage_Format1), + offsetof(struct E2SM_Bouncer_ControlMessage_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_ControlMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlMessage_Format1 = { + "E2SM-Bouncer-ControlMessage-Format1", + "E2SM-Bouncer-ControlMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_ControlMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_ControlMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ControlMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.h new file mode 100644 index 0000000..148376f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage-Format1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ControlMessage_Format1_H_ +#define _E2SM_Bouncer_ControlMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "B-Message.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-Bouncer-ControlMessage-Format1 */ +typedef struct E2SM_Bouncer_ControlMessage_Format1 { + B_Message_t controlMsgParam; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ControlMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_ControlMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ControlMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ControlMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.c new file mode 100644 index 0000000..565d4e6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-ControlMessage.h" + +#include "E2SM-Bouncer-ControlMessage-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_ControlMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_ControlMessage_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_ControlMessage, choice.controlMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_ControlMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "controlMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_ControlMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_ControlMessage_specs_1 = { + sizeof(struct E2SM_Bouncer_ControlMessage), + offsetof(struct E2SM_Bouncer_ControlMessage, _asn_ctx), + offsetof(struct E2SM_Bouncer_ControlMessage, present), + sizeof(((struct E2SM_Bouncer_ControlMessage *)0)->present), + asn_MAP_E2SM_Bouncer_ControlMessage_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlMessage = { + "E2SM-Bouncer-ControlMessage", + "E2SM-Bouncer-ControlMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_ControlMessage_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_ControlMessage_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_ControlMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.h new file mode 100644 index 0000000..7dac37d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-ControlMessage.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_ControlMessage_H_ +#define _E2SM_Bouncer_ControlMessage_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_ControlMessage_PR { + E2SM_Bouncer_ControlMessage_PR_NOTHING, /* No components present */ + E2SM_Bouncer_ControlMessage_PR_controlMessage_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_ControlMessage_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_ControlMessage_Format1; + +/* E2SM-Bouncer-ControlMessage */ +typedef struct E2SM_Bouncer_ControlMessage { + E2SM_Bouncer_ControlMessage_PR present; + union E2SM_Bouncer_ControlMessage_u { + struct E2SM_Bouncer_ControlMessage_Format1 *controlMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_ControlMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_ControlMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_ControlMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..b1b66a9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-EventTriggerDefinition-Format1.h" + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_EventTriggerDefinition_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_Bouncer_EventTriggerDefinition_Format1, triggerNature), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_B_TriggerNature, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggerNature" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* triggerNature */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_EventTriggerDefinition_Format1), + offsetof(struct E2SM_Bouncer_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1 = { + "E2SM-Bouncer-EventTriggerDefinition-Format1", + "E2SM-Bouncer-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..2f0de0c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition-Format1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_EventTriggerDefinition_Format1_H_ +#define _E2SM_Bouncer_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "B-TriggerNature.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-Bouncer-EventTriggerDefinition-Format1 */ +typedef struct E2SM_Bouncer_EventTriggerDefinition_Format1 { + B_TriggerNature_t triggerNature; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.c new file mode 100644 index 0000000..15c8a6d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-EventTriggerDefinition.h" + +#include "E2SM-Bouncer-EventTriggerDefinition-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_EventTriggerDefinition_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_Bouncer_EventTriggerDefinition), + offsetof(struct E2SM_Bouncer_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_Bouncer_EventTriggerDefinition, present), + sizeof(((struct E2SM_Bouncer_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_Bouncer_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_EventTriggerDefinition = { + "E2SM-Bouncer-EventTriggerDefinition", + "E2SM-Bouncer-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.h new file mode 100644 index 0000000..ccea3b6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-EventTriggerDefinition.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_EventTriggerDefinition_H_ +#define _E2SM_Bouncer_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_EventTriggerDefinition_PR { + E2SM_Bouncer_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_Bouncer_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_EventTriggerDefinition_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_EventTriggerDefinition_Format1; + +/* E2SM-Bouncer-EventTriggerDefinition */ +typedef struct E2SM_Bouncer_EventTriggerDefinition { + E2SM_Bouncer_EventTriggerDefinition_PR present; + union E2SM_Bouncer_EventTriggerDefinition_u { + struct E2SM_Bouncer_EventTriggerDefinition_Format1 *eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.c new file mode 100644 index 0000000..04f216c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-IndicationHeader-Format1.h" + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationHeader_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_Bouncer_IndicationHeader_Format1, indicationHeaderParam), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_B_Header, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeaderParam" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeaderParam */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_IndicationHeader_Format1), + offsetof(struct E2SM_Bouncer_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_IndicationHeader_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationHeader_Format1 = { + "E2SM-Bouncer-IndicationHeader-Format1", + "E2SM-Bouncer-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_IndicationHeader_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.h new file mode 100644 index 0000000..e94cec3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader-Format1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_IndicationHeader_Format1_H_ +#define _E2SM_Bouncer_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "B-Header.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-Bouncer-IndicationHeader-Format1 */ +typedef struct E2SM_Bouncer_IndicationHeader_Format1 { + B_Header_t indicationHeaderParam; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationHeader_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.c new file mode 100644 index 0000000..9def4f9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-IndicationHeader.h" + +#include "E2SM-Bouncer-IndicationHeader-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationHeader_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_IndicationHeader_specs_1 = { + sizeof(struct E2SM_Bouncer_IndicationHeader), + offsetof(struct E2SM_Bouncer_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_Bouncer_IndicationHeader, present), + sizeof(((struct E2SM_Bouncer_IndicationHeader *)0)->present), + asn_MAP_E2SM_Bouncer_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationHeader = { + "E2SM-Bouncer-IndicationHeader", + "E2SM-Bouncer-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.h new file mode 100644 index 0000000..c362a97 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationHeader.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_IndicationHeader_H_ +#define _E2SM_Bouncer_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_IndicationHeader_PR { + E2SM_Bouncer_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_Bouncer_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_IndicationHeader_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_IndicationHeader_Format1; + +/* E2SM-Bouncer-IndicationHeader */ +typedef struct E2SM_Bouncer_IndicationHeader { + E2SM_Bouncer_IndicationHeader_PR present; + union E2SM_Bouncer_IndicationHeader_u { + struct E2SM_Bouncer_IndicationHeader_Format1 *indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.c new file mode 100644 index 0000000..49c170e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-IndicationMessage-Format1.h" + +asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_Bouncer_IndicationMessage_Format1, indicationMsgParam), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_B_Message, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMsgParam" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMsgParam */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_Bouncer_IndicationMessage_Format1), + offsetof(struct E2SM_Bouncer_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_Bouncer_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationMessage_Format1 = { + "E2SM-Bouncer-IndicationMessage-Format1", + "E2SM-Bouncer-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_Bouncer_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_Bouncer_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.h new file mode 100644 index 0000000..f350184 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage-Format1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_IndicationMessage_Format1_H_ +#define _E2SM_Bouncer_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "B-Message.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-Bouncer-IndicationMessage-Format1 */ +typedef struct E2SM_Bouncer_IndicationMessage_Format1 { + B_Message_t indicationMsgParam; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_Bouncer_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.c new file mode 100644 index 0000000..e7aff76 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2SM-Bouncer-IndicationMessage.h" + +#include "E2SM-Bouncer-IndicationMessage-Format1.h" +static asn_per_constraints_t asn_PER_type_E2SM_Bouncer_IndicationMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_Bouncer_IndicationMessage_1[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_Bouncer_IndicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_Bouncer_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_Bouncer_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_Bouncer_IndicationMessage_specs_1 = { + sizeof(struct E2SM_Bouncer_IndicationMessage), + offsetof(struct E2SM_Bouncer_IndicationMessage, _asn_ctx), + offsetof(struct E2SM_Bouncer_IndicationMessage, present), + sizeof(((struct E2SM_Bouncer_IndicationMessage *)0)->present), + asn_MAP_E2SM_Bouncer_IndicationMessage_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationMessage = { + "E2SM-Bouncer-IndicationMessage", + "E2SM-Bouncer-IndicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2SM_Bouncer_IndicationMessage_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_Bouncer_IndicationMessage_1, + 1, /* Elements count */ + &asn_SPC_E2SM_Bouncer_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.h new file mode 100644 index 0000000..c404fd2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2SM-Bouncer-IndicationMessage.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2SM_Bouncer_IndicationMessage_H_ +#define _E2SM_Bouncer_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_Bouncer_IndicationMessage_PR { + E2SM_Bouncer_IndicationMessage_PR_NOTHING, /* No components present */ + E2SM_Bouncer_IndicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_Bouncer_IndicationMessage_PR; + +/* Forward declarations */ +struct E2SM_Bouncer_IndicationMessage_Format1; + +/* E2SM-Bouncer-IndicationMessage */ +typedef struct E2SM_Bouncer_IndicationMessage { + E2SM_Bouncer_IndicationMessage_PR present; + union E2SM_Bouncer_IndicationMessage_u { + struct E2SM_Bouncer_IndicationMessage_Format1 *indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_Bouncer_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_Bouncer_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_Bouncer_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.c b/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.c new file mode 100644 index 0000000..0fc15cd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.h b/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.h new file mode 100644 index 0000000..c0f0a80 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1412P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.c new file mode 100644 index 0000000..0f5a3a3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.h new file mode 100644 index 0000000..60ac19d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1412P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.c b/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.c new file mode 100644 index 0000000..04c0ea6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.h b/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.h new file mode 100644 index 0000000..3feb668 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1412P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.c b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.c new file mode 100644 index 0000000..014dbeb --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.c @@ -0,0 +1,180 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.h b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.h new file mode 100644 index 0000000..0fd9d31 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.c new file mode 100644 index 0000000..f1b3faf --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.c @@ -0,0 +1,226 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.h new file mode 100644 index 0000000..3f7d554 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.c new file mode 100644 index 0000000..635de20 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.h new file mode 100644 index 0000000..fae9914 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.c b/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.c new file mode 100644 index 0000000..5225be3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.h b/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.h new file mode 100644 index 0000000..a3db103 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1412P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.c new file mode 100644 index 0000000..7fccd5d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.h new file mode 100644 index 0000000..231a64e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-CU-UP-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.c new file mode 100644 index 0000000..76534e9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.h new file mode 100644 index 0000000..29b510c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-DU-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.c b/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.c new file mode 100644 index 0000000..538454e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.h b/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.h new file mode 100644 index 0000000..c51b572 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.c new file mode 100644 index 0000000..a0c6820 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.c @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.h new file mode 100644 index 0000000..7868eb7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..14513f5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..779350e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..c0b3768 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..19e5500 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..518e0f3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..f31f72b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..58b345f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..bac3c1a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.c new file mode 100644 index 0000000..781c474 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.h new file mode 100644 index 0000000..bd2c018 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.c new file mode 100644 index 0000000..327ab7a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.c @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.h new file mode 100644 index 0000000..2e53f41 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.c new file mode 100644 index 0000000..f97c722 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.h new file mode 100644 index 0000000..e6e8ae8 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.c new file mode 100644 index 0000000..318370f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.h new file mode 100644 index 0000000..52efce0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.c new file mode 100644 index 0000000..650ae98 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.h new file mode 100644 index 0000000..177a467 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.c b/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.h b/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.c new file mode 100644 index 0000000..9c34727 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.c @@ -0,0 +1,389 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.h new file mode 100644 index 0000000..1072067 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include +#include +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NULL.c b/ric_benchmarking/Bouncer/asn1c_defs/NULL.c new file mode 100644 index 0000000..4a2914f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NULL.c @@ -0,0 +1,299 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Implemented in terms of BOOLEAN type */ + +/* + * NULL basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NULL_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)) +}; +asn_TYPE_operation_t asn_OP_NULL = { + BOOLEAN_free, + NULL_print, + NULL_compare, + BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ + NULL_encode_der, /* Special handling of DER encoding */ + NULL_decode_xer, + NULL_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NULL_decode_oer, + NULL_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NULL_decode_uper, /* Unaligned PER decoder */ + NULL_encode_uper, /* Unaligned PER encoder */ + NULL_decode_aper, /* Aligned PER decoder */ + NULL_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NULL_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NULL = { + "NULL", + "NULL", + &asn_OP_NULL, + asn_DEF_NULL_tags, + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + asn_DEF_NULL_tags, /* Same as above */ + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, + ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + + erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = ptr; + } + + ASN__ENCODED_OK(erval); +} + +asn_enc_rval_t +NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)ilevel; + (void)flags; + (void)cb; + (void)app_key; + + /* XMLNullValue is empty */ + er.encoded = 0; + ASN__ENCODED_OK(er); +} + + +static enum xer_pbd_rval +NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + (void)td; + (void)sptr; + (void)chunk_buf; /* Going to be empty according to the rules below. */ + + /* + * There must be no content in self-terminating tag. + */ + if(chunk_size) + return XPBD_BROKEN_ENCODING; + else + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, + NULL__xer_body_decode); +} + +int +NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) { + (void)td; + (void)a; + (void)b; + return 0; +} + +int +NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(sptr) { + return (cb("", 9, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +#ifndef ASN_DISABLE_OER_SUPPORT + +asn_dec_rval_t +NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t rv = {RC_OK, 0}; + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)ptr; + (void)size; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + return rv; +} + +asn_enc_rval_t +NULL_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)constraints; + (void)cb; + (void)app_key; + + er.encoded = 0; /* Encoding in 0 bytes. */ + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +NULL_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + + +asn_enc_rval_t +NULL_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + NULL_t *st = *sptr; + + (void)td; + (void)constr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + return result_ok; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NULL.h b/ric_benchmarking/Bouncer/asn1c_defs/NULL.h new file mode 100644 index 0000000..802d12c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NULL.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_NULL_H +#define ASN_TYPE_NULL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The value of the NULL type is meaningless: see BOOLEAN if you want to + * carry true/false semantics. + */ +typedef int NULL_t; + +extern asn_TYPE_descriptor_t asn_DEF_NULL; +extern asn_TYPE_operation_t asn_OP_NULL; + +asn_struct_print_f NULL_print; +asn_struct_compare_f NULL_compare; +der_type_encoder_f NULL_encode_der; +xer_type_decoder_f NULL_decode_xer; +xer_type_encoder_f NULL_encode_xer; +oer_type_decoder_f NULL_decode_oer; +oer_type_encoder_f NULL_encode_oer; +per_type_decoder_f NULL_decode_uper; +per_type_encoder_f NULL_encode_uper; +per_type_decoder_f NULL_decode_aper; +per_type_encoder_f NULL_encode_aper; +asn_random_fill_f NULL_random_fill; + +#define NULL_free BOOLEAN_free +#define NULL_decode_ber BOOLEAN_decode_ber +#define NULL_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* NULL_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.c b/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.c new file mode 100644 index 0000000..800da97 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.h b/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.c b/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.h b/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.c b/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.c new file mode 100644 index 0000000..8dccf01 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include /* for CHAR_BIT */ +#include + +/* + * OBJECT IDENTIFIER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OBJECT_IDENTIFIER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)) +}; +asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = { + ASN__PRIMITIVE_TYPE_free, + OBJECT_IDENTIFIER_print, + OCTET_STRING_compare, /* Implemented in terms of a string comparison */ + ber_decode_primitive, + der_encode_primitive, + OBJECT_IDENTIFIER_decode_xer, + OBJECT_IDENTIFIER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OBJECT_IDENTIFIER_decode_oer, + OBJECT_IDENTIFIER_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OBJECT_IDENTIFIER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER = { + "OBJECT IDENTIFIER", + "OBJECT_IDENTIFIER", + &asn_OP_OBJECT_IDENTIFIER, + asn_DEF_OBJECT_IDENTIFIER_tags, + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + asn_DEF_OBJECT_IDENTIFIER_tags, /* Same as above */ + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + { 0, 0, OBJECT_IDENTIFIER_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +OBJECT_IDENTIFIER_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + if(st && st->buf) { + if(st->size < 1) { + ASN__CTFAIL(app_key, td, sptr, + "%s: at least one numerical value " + "expected (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static ssize_t +OBJECT_IDENTIFIER_get_first_arcs(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *arc0, asn_oid_arc_t *arc1) { + asn_oid_arc_t value; + + ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(arcbuf, arcbuf_len, &value); + if(rd <= 0) return rd; + + if(value >= 80) { + *arc0 = 2; + *arc1 = value - 80; + } else if(value >= 40) { + *arc0 = 1; + *arc1 = value - 40; + } else { + *arc0 = 0; + *arc1 = value; + } + + return rd; +} + +ssize_t +OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *ret_value) { + const uint8_t *b = arcbuf; + const uint8_t *arcend = arcbuf + arcbuf_len; /* End of arc */ + + if(arcbuf == arcend) { + return 0; + } else { + asn_oid_arc_t accum; + asn_oid_arc_t upper_limit = (ASN_OID_ARC_MAX >> 7); + /* When the value reaches "upper_limit", it can take */ + /* at most one more digit. If it exceeds "upper_limit" */ + /* but there are more digits - it's an Overflow condition */ + /* Gather all bits into the accumulator */ + for(accum = 0; b < arcend; b++) { + accum = (accum << 7) | (*b & ~0x80); + if((*b & 0x80) == 0) { // no more digits + if(accum <= ASN_OID_ARC_MAX) { + *ret_value = accum; + return 1 + (b - arcbuf); + } else { + errno = ERANGE; /* Overflow */ + return -1; + } + } else { // to make sure we aren't wrapping around + if(accum > upper_limit) { + errno = ERANGE; /* Overflow */ + return -1; + } + } + } + errno = EINVAL; + return -1; + } + +} + +static ssize_t +OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, + asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[32]; + asn_oid_arc_t arc0, arc1; + size_t produced = 0; + size_t off = 0; + ssize_t rd; + int ret; + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + + ret = snprintf(scratch, sizeof(scratch), "%"PRIu32".%"PRIu32, arc0, arc1); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) + return -1; + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + assert(off <= st->size); + ret = snprintf(scratch, sizeof(scratch), ".%" PRIu32, arc); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) return -1; + } + } + + if(off != st->size) { + ASN_DEBUG("Could not scan to the end of Object Identifier"); + return -1; + } + + return produced; +} + +static enum xer_pbd_rval +OBJECT_IDENTIFIER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)sptr; + const char *chunk_end = (const char *)chunk_buf + chunk_size; + const char *endptr; + asn_oid_arc_t s_arcs[10]; + asn_oid_arc_t *arcs = s_arcs; + ssize_t num_arcs; + ssize_t ret; + + (void)td; + + num_arcs = OBJECT_IDENTIFIER_parse_arcs( + (const char *)chunk_buf, chunk_size, arcs, + sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr); + if(num_arcs < 0) { + /* Expecting more than zero arcs */ + return XPBD_BROKEN_ENCODING; + } else if(num_arcs == 0) { + return XPBD_NOT_BODY_IGNORE; + } + assert(endptr == chunk_end); + + if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) { + arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t)); + if(!arcs) return XPBD_SYSTEM_FAILURE; + ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size, + arcs, num_arcs, &endptr); + if(ret != num_arcs) + return XPBD_SYSTEM_FAILURE; /* assert?.. */ + } + + /* + * Convert arcs into BER representation. + */ + ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs); + if(arcs != s_arcs) FREEMEM(arcs); + + return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +OBJECT_IDENTIFIER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(OBJECT_IDENTIFIER_t), opt_mname, + buf_ptr, size, OBJECT_IDENTIFIER__xer_body_decode); +} + +asn_enc_rval_t +OBJECT_IDENTIFIER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) { + ASN__ENCODE_FAILED; + } + + er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +int +OBJECT_IDENTIFIER_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb("{ ", 2, app_key) < 0) + return -1; + + if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0) { + return -1; + } + + return (cb(" }", 2, app_key) < 0) ? -1 : 0; +} + +ssize_t +OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *st, asn_oid_arc_t *arcs, + size_t arc_slots) { + asn_oid_arc_t arc0, arc1; + size_t num_arcs = 0; + size_t off; + ssize_t rd; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + num_arcs = 2; + switch(arc_slots) { + default: + case 2: + arcs[1] = arc1; + /* Fall through */ + case 1: + arcs[0] = arc0; + /* Fall through */ + case 0: + break; + } + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + if(num_arcs < arc_slots) { + arcs[num_arcs] = arc; + } + num_arcs++; + } + } + + if(off != st->size) { + return -1; + } + + return num_arcs; +} + + +/* + * Save the single value as an object identifier arc. + */ +ssize_t +OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t value) { + /* + * The following conditions must hold: + * assert(arcbuf); + */ + uint8_t scratch[((sizeof(value) * CHAR_BIT + 6) / 7)]; + uint8_t *scratch_end = &scratch[sizeof(scratch)-1]; + uint8_t *b; + size_t result_len; + uint8_t mask; + + for(b = scratch_end, mask = 0; ; mask = 0x80, b--) { + *b = mask | (value & 0x7f); + value >>= 7; + if(!value) { + break; + } + } + + result_len = (scratch_end - b) + 1; + + if(result_len > arcbuf_len) { + return -1; + } + + memcpy(arcbuf, b, result_len); + + return result_len; +} + +int +OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *st, const asn_oid_arc_t *arcs, + size_t arc_slots) { + uint8_t *buf; + uint8_t *bp; + ssize_t wrote; + asn_oid_arc_t arc0; + asn_oid_arc_t arc1; + size_t size; + size_t i; + + if(!st || !arcs || arc_slots < 2) { + errno = EINVAL; + return -1; + } + + arc0 = arcs[0]; + arc1 = arcs[1]; + + if(arc0 <= 1) { + if(arc1 >= 40) { + /* 8.19.4: At most 39 subsequent values (including 0) */ + errno = ERANGE; + return -1; + } + } else if(arc0 == 2) { + if(arc1 > ASN_OID_ARC_MAX - 80) { + errno = ERANGE; + return -1; + } + } else if(arc0 > 2) { + /* 8.19.4: Only three values are allocated from the root node */ + errno = ERANGE; + return -1; + } + + /* + * After above tests it is known that the value of arc0 is completely + * trustworthy (0..2). However, the arc1's value is still meaningless. + */ + + /* + * Roughly estimate the maximum size necessary to encode these arcs. + * This estimation implicitly takes in account the following facts, + * that cancel each other: + * * the first two arcs are encoded in a single value. + * * the first value may require more space (+1 byte) + * * the value of the first arc which is in range (0..2) + */ + size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arc_slots; + bp = buf = (uint8_t *)MALLOC(size + 1); + if(!buf) { + /* ENOMEM */ + return -1; + } + + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arc0 * 40 + arc1); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + + for(i = 2; i < arc_slots; i++) { + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + } + + /* + * Replace buffer. + */ + st->size = bp - buf; + bp = st->buf; + st->buf = buf; + st->buf[st->size] = '\0'; + if(bp) FREEMEM(bp); + + return 0; +} + +ssize_t +OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end) { + size_t num_arcs = 0; + const char *oid_end; + enum { + ST_LEADSPACE, + ST_TAILSPACE, + ST_AFTERVALUE, /* Next character ought to be '.' or a space */ + ST_WAITDIGITS /* Next character is expected to be a digit */ + } state = ST_LEADSPACE; + + if(!oid_text || oid_txt_length < -1 || (arcs_count && !arcs)) { + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + errno = EINVAL; + return -1; + } + + if(oid_txt_length == -1) + oid_txt_length = strlen(oid_text); + +#define _OID_CAPTURE_ARC(oid_text, oid_end) \ + do { \ + const char *endp = oid_end; \ + unsigned long value; \ + switch(asn_strtoul_lim(oid_text, &endp, &value)) { \ + case ASN_STRTOX_EXTRA_DATA: \ + case ASN_STRTOX_OK: \ + if(value <= ASN_OID_ARC_MAX) { \ + if(num_arcs < arcs_count) arcs[num_arcs] = value; \ + num_arcs++; \ + oid_text = endp - 1; \ + break; \ + } \ + /* Fall through */ \ + case ASN_STRTOX_ERROR_RANGE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = ERANGE; \ + return -1; \ + case ASN_STRTOX_ERROR_INVAL: \ + case ASN_STRTOX_EXPECT_MORE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = EINVAL; \ + return -1; \ + } \ + } while(0) + + for(oid_end = oid_text + oid_txt_length; oid_text broken OID */ + return -1; + case ST_LEADSPACE: + case ST_WAITDIGITS: + _OID_CAPTURE_ARC(oid_text, oid_end); + state = ST_AFTERVALUE; + continue; + } + break; + default: + /* Unexpected symbols */ + state = ST_WAITDIGITS; + break; + } /* switch() */ + break; + } /* for() */ + + + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + + /* Finalize last arc */ + switch(state) { + case ST_LEADSPACE: + return 0; /* No OID found in input data */ + case ST_WAITDIGITS: + errno = EINVAL; /* Broken OID */ + return -1; + case ST_AFTERVALUE: + case ST_TAILSPACE: + return num_arcs; + } + + errno = EINVAL; /* Broken OID */ + return -1; +} + +/* + * Generate values from the list of interesting values, or just a random + * value up to the upper limit. + */ +static asn_oid_arc_t +OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound) { + const asn_oid_arc_t values[] = {0, 1, 127, 128, 129, 254, 255, 256}; + size_t idx; + + switch(asn_random_between(0, 2)) { + case 0: + idx = asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1); + if(values[idx] < upper_bound) { + return values[idx]; + } + /* Fall through */ + case 1: + return asn_random_between(0, upper_bound); + case 2: + default: + return upper_bound; + } +} + +asn_random_fill_result_t +OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + OBJECT_IDENTIFIER_t *st; + asn_oid_arc_t arcs[5]; + size_t arcs_len = asn_random_between(2, 5); + size_t i; + + (void)constraints; + + if(max_length < arcs_len) return result_skipped; + + if(*sptr) { + st = *sptr; + } else { + st = CALLOC(1, sizeof(*st)); + } + + arcs[0] = asn_random_between(0, 2); + arcs[1] = OBJECT_IDENTIFIER__biased_random_arc( + arcs[0] <= 1 ? 39 : (ASN_OID_ARC_MAX - 80)); + for(i = 2; i < arcs_len; i++) { + arcs[i] = OBJECT_IDENTIFIER__biased_random_arc(ASN_OID_ARC_MAX); + } + + if(OBJECT_IDENTIFIER_set_arcs(st, arcs, arcs_len)) { + if(st != *sptr) { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } + + *sptr = st; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.h b/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.h new file mode 100644 index 0000000..087c6fd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OBJECT_IDENTIFIER.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OBJECT_IDENTIFIER_H_ +#define _OBJECT_IDENTIFIER_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint32_t asn_oid_arc_t; +#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0)) + +typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t; + +extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER; +extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER; + +asn_struct_print_f OBJECT_IDENTIFIER_print; +asn_constr_check_f OBJECT_IDENTIFIER_constraint; +der_type_encoder_f OBJECT_IDENTIFIER_encode_der; +xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer; +xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer; +asn_random_fill_f OBJECT_IDENTIFIER_random_fill; + +#define OBJECT_IDENTIFIER_free ASN__PRIMITIVE_TYPE_free +#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare +#define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive +#define OBJECT_IDENTIFIER_encode_der der_encode_primitive +#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive +#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive +#define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper +#define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper +#define OBJECT_IDENTIFIER_decode_aper OCTET_STRING_decode_aper +#define OBJECT_IDENTIFIER_encode_aper OCTET_STRING_encode_aper + +/********************************** + * Some handy conversion routines * + **********************************/ + +/* + * This function fills an (arcs) array with OBJECT IDENTIFIER arcs + * up to specified (arc_slots) elements. + * + * EXAMPLE: + * void print_arcs(OBJECT_IDENTIFIER_t *oid) { + * asn_oid_arc_t fixed_arcs[10]; // Try with fixed space first + * asn_oid_arc_t *arcs = fixed_arcs; + * size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10 + * ssize_t count; // Real number of arcs. + * int i; + * + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * // If necessary, reallocate arcs array and try again. + * if(count > arc_slots) { + * arc_slots = count; + * arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots); + * if(!arcs) return; + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * assert(count == arc_slots); + * } + * + * // Print the contents of the arcs array. + * for(i = 0; i < count; i++) + * printf("%"PRIu32"\n", arcs[i]); + * + * // Avoid memory leak. + * if(arcs != fixed_arcs) free(arcs); + * } + * + * RETURN VALUES: + * -1/EINVAL: Invalid arguments (oid is missing) + * -1/ERANGE: One or more arcs have value out of array cell type range. + * >=0: Number of arcs contained in the OBJECT IDENTIFIER + * + * WARNING: The function always returns the actual number of arcs, + * even if there is no sufficient (arc_slots) provided. + */ +ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid, + asn_oid_arc_t *arcs, size_t arc_slots); + +/* + * This functions initializes the OBJECT IDENTIFIER object with + * the given set of arcs. + * The minimum of two arcs must be present; some restrictions apply. + * RETURN VALUES: + * -1/EINVAL: Invalid arguments + * -1/ERANGE: The first two arcs do not conform to ASN.1 restrictions. + * -1/ENOMEM: Memory allocation failed + * 0: The object was initialized with new arcs. + */ +int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid, + const asn_oid_arc_t *arcs, size_t arcs_count); + + +/* + * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363"). + * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX). + * This function is not specific to OBJECT IDENTIFIER, it may be used to parse + * the RELATIVE-OID data, or any other data consisting of dot-separated + * series of numeric values. + * + * If (oid_txt_length == -1), the strlen() will be invoked to determine the + * size of the (oid_text) string. + * + * After return, the optional (opt_oid_text_end) is set to the character after + * the last parsed one. (opt_oid_text_end) is never less than (oid_text). + * + * RETURN VALUES: + * -1: Parse error. + * >= 0: Number of arcs contained in the OBJECT IDENTIFIER. + * + * WARNING: The function always returns the real number of arcs, + * even if there is no sufficient (arc_slots) provided. + * This is useful for (arc_slots) value estimation. + */ +ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, + ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end); + +/* + * Internal functions. + * Used by RELATIVE-OID implementation in particular. + */ + +/* + * Retrieve a single arc of size from the (arcbuf) buffer. + * RETURN VALUES: + * -1: Failed to retrieve the value from the (arcbuf). + * >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, + size_t arcbuf_len, + asn_oid_arc_t *ret_value); + +/* + * Write the unterminated arc value into the (arcbuf) which has the size at + * least (arcbuf_len). + * RETURN VALUES: + * -1: (arcbuf_len) size is not sufficient to write the value. + * : Number of bytes appended to the arcbuf (<= arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t arc_value); + +#ifdef __cplusplus +} +#endif + +#endif /* _OBJECT_IDENTIFIER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.c b/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.c new file mode 100644 index 0000000..432ce5a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.c @@ -0,0 +1,2409 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.h b/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.c b/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.h b/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.c b/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.c new file mode 100644 index 0000000..0bee12e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.h b/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.h new file mode 100644 index 0000000..dcdfe18 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/PLMN-Identity.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Presence.c b/ric_benchmarking/Bouncer/asn1c_defs/Presence.c new file mode 100644 index 0000000..2e26921 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Presence.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/Presence.h b/ric_benchmarking/Bouncer/asn1c_defs/Presence.h new file mode 100644 index 0000000..7a7c767 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/Presence.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.c b/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.h b/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.c b/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.c new file mode 100644 index 0000000..ad6f7e7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.h b/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.h new file mode 100644 index 0000000..89996de --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProcedureCode.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.c new file mode 100644 index 0000000..89e5e1a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.c @@ -0,0 +1,810 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1412P0), + offsetof(struct ProtocolIE_Container_1412P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1412P1), + offsetof(struct ProtocolIE_Container_1412P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1412P2), + offsetof(struct ProtocolIE_Container_1412P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1412P3), + offsetof(struct ProtocolIE_Container_1412P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1412P4), + offsetof(struct ProtocolIE_Container_1412P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1412P5), + offsetof(struct ProtocolIE_Container_1412P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1412P6), + offsetof(struct ProtocolIE_Container_1412P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1412P7), + offsetof(struct ProtocolIE_Container_1412P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1412P8), + offsetof(struct ProtocolIE_Container_1412P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1412P9), + offsetof(struct ProtocolIE_Container_1412P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1412P10), + offsetof(struct ProtocolIE_Container_1412P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1412P11), + offsetof(struct ProtocolIE_Container_1412P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1412P12), + offsetof(struct ProtocolIE_Container_1412P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1412P13), + offsetof(struct ProtocolIE_Container_1412P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1412P14), + offsetof(struct ProtocolIE_Container_1412P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1412P15), + offsetof(struct ProtocolIE_Container_1412P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1412P16), + offsetof(struct ProtocolIE_Container_1412P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1412P17), + offsetof(struct ProtocolIE_Container_1412P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1412P18), + offsetof(struct ProtocolIE_Container_1412P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1412P19), + offsetof(struct ProtocolIE_Container_1412P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1412P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1412P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1412P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1412P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1412P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.h new file mode 100644 index 0000000..364495b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1412P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P0_t; +typedef struct ProtocolIE_Container_1412P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P1_t; +typedef struct ProtocolIE_Container_1412P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P2_t; +typedef struct ProtocolIE_Container_1412P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P3_t; +typedef struct ProtocolIE_Container_1412P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P4_t; +typedef struct ProtocolIE_Container_1412P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P5_t; +typedef struct ProtocolIE_Container_1412P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P6_t; +typedef struct ProtocolIE_Container_1412P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P7_t; +typedef struct ProtocolIE_Container_1412P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P8_t; +typedef struct ProtocolIE_Container_1412P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P9_t; +typedef struct ProtocolIE_Container_1412P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P10_t; +typedef struct ProtocolIE_Container_1412P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P11_t; +typedef struct ProtocolIE_Container_1412P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P12_t; +typedef struct ProtocolIE_Container_1412P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P13_t; +typedef struct ProtocolIE_Container_1412P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P14_t; +typedef struct ProtocolIE_Container_1412P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P15_t; +typedef struct ProtocolIE_Container_1412P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P16_t; +typedef struct ProtocolIE_Container_1412P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P17_t; +typedef struct ProtocolIE_Container_1412P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P18_t; +typedef struct ProtocolIE_Container_1412P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1412P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..d572233 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..e94a09c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..49ae4a7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..03c2f74 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..2923ea5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..50ff679 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.c new file mode 100644 index 0000000..caec745 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.c @@ -0,0 +1,7190 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.h new file mode 100644 index 0000000..2515bf4 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include +#include +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include +#include +#include +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..82bda1a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..191ea27 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.c new file mode 100644 index 0000000..92c8c14 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.h new file mode 100644 index 0000000..a6afe03 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-ID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.c b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..506b061 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1415P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.h b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..5cf2853 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ProtocolIE-SingleContainer.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1415P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1415P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1415P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1415P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1415P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1415P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P0; +asn_struct_free_f ProtocolIE_SingleContainer_1415P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P0_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P1; +asn_struct_free_f ProtocolIE_SingleContainer_1415P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P1_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P2; +asn_struct_free_f ProtocolIE_SingleContainer_1415P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P2_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P3; +asn_struct_free_f ProtocolIE_SingleContainer_1415P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P3_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P4; +asn_struct_free_f ProtocolIE_SingleContainer_1415P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P4_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1415P5; +asn_struct_free_f ProtocolIE_SingleContainer_1415P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1415P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1415P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1415P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1415P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1415P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1415P5_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1415P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1415P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1415P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.c new file mode 100644 index 0000000..9d60d21 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.h new file mode 100644 index 0000000..3877316 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.c new file mode 100644 index 0000000..bec3c36 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.h new file mode 100644 index 0000000..2fdead2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.c new file mode 100644 index 0000000..7a2c15c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.h new file mode 100644 index 0000000..30fb177 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.c new file mode 100644 index 0000000..ca5602f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.h new file mode 100644 index 0000000..e8ea3f6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..aca1f62 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..c4505b5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.c new file mode 100644 index 0000000..563dda0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.h new file mode 100644 index 0000000..74853ea --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionRevision.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.c new file mode 100644 index 0000000..12912e0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.h new file mode 100644 index 0000000..6a4a41a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.c new file mode 100644 index 0000000..3e5dda5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.h new file mode 100644 index 0000000..5313c5c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..75fa57f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..d1cbefd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.c b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.c new file mode 100644 index 0000000..7f81582 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANparameter-ID.h" + +int +RANparameter_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANparameter_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANparameter_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANparameter_ID = { + "RANparameter-ID", + "RANparameter-ID", + &asn_OP_NativeInteger, + asn_DEF_RANparameter_ID_tags_1, + sizeof(asn_DEF_RANparameter_ID_tags_1) + /sizeof(asn_DEF_RANparameter_ID_tags_1[0]), /* 1 */ + asn_DEF_RANparameter_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANparameter_ID_tags_1) + /sizeof(asn_DEF_RANparameter_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANparameter_ID_constr_1, RANparameter_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.h b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.h new file mode 100644 index 0000000..8b52f95 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANparameter_ID_H_ +#define _RANparameter_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANparameter-ID */ +typedef long RANparameter_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANparameter_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANparameter_ID; +asn_struct_free_f RANparameter_ID_free; +asn_struct_print_f RANparameter_ID_print; +asn_constr_check_f RANparameter_ID_constraint; +ber_type_decoder_f RANparameter_ID_decode_ber; +der_type_encoder_f RANparameter_ID_encode_der; +xer_type_decoder_f RANparameter_ID_decode_xer; +xer_type_encoder_f RANparameter_ID_encode_xer; +per_type_decoder_f RANparameter_ID_decode_uper; +per_type_encoder_f RANparameter_ID_encode_uper; +per_type_decoder_f RANparameter_ID_decode_aper; +per_type_encoder_f RANparameter_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANparameter_ID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.c new file mode 100644 index 0000000..a5afd51 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANparameter-Item.h" + +asn_TYPE_member_t asn_MBR_RANparameter_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANparameter_Item, ranParameter_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANparameter_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranParameter-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANparameter_Item, ranParameter_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANparameter_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranParameter-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANparameter_Item, ranParameter_Test), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANparameter_Test, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranParameter-Test" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANparameter_Item, ranParameter_Value), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANparameter_Value, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranParameter-Value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANparameter_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANparameter_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranParameter-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranParameter-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranParameter-Test */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranParameter-Value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANparameter_Item_specs_1 = { + sizeof(struct RANparameter_Item), + offsetof(struct RANparameter_Item, _asn_ctx), + asn_MAP_RANparameter_Item_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANparameter_Item = { + "RANparameter-Item", + "RANparameter-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANparameter_Item_tags_1, + sizeof(asn_DEF_RANparameter_Item_tags_1) + /sizeof(asn_DEF_RANparameter_Item_tags_1[0]), /* 1 */ + asn_DEF_RANparameter_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANparameter_Item_tags_1) + /sizeof(asn_DEF_RANparameter_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANparameter_Item_1, + 4, /* Elements count */ + &asn_SPC_RANparameter_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.h new file mode 100644 index 0000000..538cb33 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANparameter_Item_H_ +#define _RANparameter_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RANparameter-ID.h" +#include "RANparameter-Name.h" +#include "RANparameter-Test.h" +#include "RANparameter-Value.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANparameter-Item */ +typedef struct RANparameter_Item { + RANparameter_ID_t ranParameter_ID; + RANparameter_Name_t ranParameter_Name; + RANparameter_Test_t ranParameter_Test; + RANparameter_Value_t ranParameter_Value; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANparameter_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANparameter_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_RANparameter_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_RANparameter_Item_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANparameter_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.c b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.c new file mode 100644 index 0000000..f438227 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANparameter-Name.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANparameter_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANparameter_Name = { + "RANparameter-Name", + "RANparameter-Name", + &asn_OP_OCTET_STRING, + asn_DEF_RANparameter_Name_tags_1, + sizeof(asn_DEF_RANparameter_Name_tags_1) + /sizeof(asn_DEF_RANparameter_Name_tags_1[0]), /* 1 */ + asn_DEF_RANparameter_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANparameter_Name_tags_1) + /sizeof(asn_DEF_RANparameter_Name_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.h b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.h new file mode 100644 index 0000000..16031b9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Name.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANparameter_Name_H_ +#define _RANparameter_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANparameter-Name */ +typedef OCTET_STRING_t RANparameter_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANparameter_Name; +asn_struct_free_f RANparameter_Name_free; +asn_struct_print_f RANparameter_Name_print; +asn_constr_check_f RANparameter_Name_constraint; +ber_type_decoder_f RANparameter_Name_decode_ber; +der_type_encoder_f RANparameter_Name_encode_der; +xer_type_decoder_f RANparameter_Name_decode_xer; +xer_type_encoder_f RANparameter_Name_encode_xer; +per_type_decoder_f RANparameter_Name_decode_uper; +per_type_encoder_f RANparameter_Name_encode_uper; +per_type_decoder_f RANparameter_Name_decode_aper; +per_type_encoder_f RANparameter_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANparameter_Name_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.c b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.c new file mode 100644 index 0000000..957969e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANparameter-Test.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANparameter_Test_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RANparameter_Test_value2enum_1[] = { + { 0, 5, "equal" }, + { 1, 11, "greaterthan" }, + { 2, 8, "lessthan" }, + { 3, 8, "contains" }, + { 4, 7, "present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RANparameter_Test_enum2value_1[] = { + 3, /* contains(3) */ + 0, /* equal(0) */ + 1, /* greaterthan(1) */ + 2, /* lessthan(2) */ + 4 /* present(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RANparameter_Test_specs_1 = { + asn_MAP_RANparameter_Test_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RANparameter_Test_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RANparameter_Test_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANparameter_Test = { + "RANparameter-Test", + "RANparameter-Test", + &asn_OP_NativeEnumerated, + asn_DEF_RANparameter_Test_tags_1, + sizeof(asn_DEF_RANparameter_Test_tags_1) + /sizeof(asn_DEF_RANparameter_Test_tags_1[0]), /* 1 */ + asn_DEF_RANparameter_Test_tags_1, /* Same as above */ + sizeof(asn_DEF_RANparameter_Test_tags_1) + /sizeof(asn_DEF_RANparameter_Test_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANparameter_Test_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RANparameter_Test_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.h b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.h new file mode 100644 index 0000000..88ed58e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Test.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANparameter_Test_H_ +#define _RANparameter_Test_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RANparameter_Test { + RANparameter_Test_equal = 0, + RANparameter_Test_greaterthan = 1, + RANparameter_Test_lessthan = 2, + RANparameter_Test_contains = 3, + RANparameter_Test_present = 4 + /* + * Enumeration is extensible + */ +} e_RANparameter_Test; + +/* RANparameter-Test */ +typedef long RANparameter_Test_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANparameter_Test_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANparameter_Test; +extern const asn_INTEGER_specifics_t asn_SPC_RANparameter_Test_specs_1; +asn_struct_free_f RANparameter_Test_free; +asn_struct_print_f RANparameter_Test_print; +asn_constr_check_f RANparameter_Test_constraint; +ber_type_decoder_f RANparameter_Test_decode_ber; +der_type_encoder_f RANparameter_Test_encode_der; +xer_type_decoder_f RANparameter_Test_decode_xer; +xer_type_encoder_f RANparameter_Test_encode_xer; +per_type_decoder_f RANparameter_Test_decode_uper; +per_type_encoder_f RANparameter_Test_encode_uper; +per_type_decoder_f RANparameter_Test_decode_aper; +per_type_encoder_f RANparameter_Test_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANparameter_Test_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.c b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.c new file mode 100644 index 0000000..e398738 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RANparameter-Value.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANparameter_Value_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANparameter_Value = { + "RANparameter-Value", + "RANparameter-Value", + &asn_OP_OCTET_STRING, + asn_DEF_RANparameter_Value_tags_1, + sizeof(asn_DEF_RANparameter_Value_tags_1) + /sizeof(asn_DEF_RANparameter_Value_tags_1[0]), /* 1 */ + asn_DEF_RANparameter_Value_tags_1, /* Same as above */ + sizeof(asn_DEF_RANparameter_Value_tags_1) + /sizeof(asn_DEF_RANparameter_Value_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.h b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.h new file mode 100644 index 0000000..7b0a2da --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RANparameter-Value.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-Bouncer-IEs" + * found in "/home/ubuntu/ASN-Defns/e2sm-Bouncer-v002.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RANparameter_Value_H_ +#define _RANparameter_Value_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANparameter-Value */ +typedef OCTET_STRING_t RANparameter_Value_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANparameter_Value; +asn_struct_free_f RANparameter_Value_free; +asn_struct_print_f RANparameter_Value_print; +asn_constr_check_f RANparameter_Value_constraint; +ber_type_decoder_f RANparameter_Value_decode_ber; +der_type_encoder_f RANparameter_Value_encode_der; +xer_type_decoder_f RANparameter_Value_decode_xer; +xer_type_encoder_f RANparameter_Value_encode_xer; +per_type_decoder_f RANparameter_Value_decode_uper; +per_type_encoder_f RANparameter_Value_encode_uper; +per_type_decoder_f RANparameter_Value_decode_aper; +per_type_encoder_f RANparameter_Value_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANparameter_Value_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.c new file mode 100644 index 0000000..01034b5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.h new file mode 100644 index 0000000..52cada2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RICactionID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.c new file mode 100644 index 0000000..acf003f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.h new file mode 100644 index 0000000..063508c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..364fcd3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..73826cc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..4fdb387 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..4406da9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.c b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..1e8983b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.h b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..faf8bbf --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.c b/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.c new file mode 100644 index 0000000..3fcd14e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.h b/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.h new file mode 100644 index 0000000..489c195 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.c b/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.c new file mode 100644 index 0000000..0a94813 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.h b/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.h new file mode 100644 index 0000000..851d5b3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.c b/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.c new file mode 100644 index 0000000..0469ed8 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.h b/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.h new file mode 100644 index 0000000..bc4ae24 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactionType.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.c b/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..edf0d42 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1415P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.h b/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..506bbb8 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.c new file mode 100644 index 0000000..26f1de5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.h new file mode 100644 index 0000000..6f72308 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcallProcessID.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.c new file mode 100644 index 0000000..e6028d7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.h new file mode 100644 index 0000000..bdefee2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAckRequest.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.c new file mode 100644 index 0000000..6c14811 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.h new file mode 100644 index 0000000..f1d40b7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1412P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.c new file mode 100644 index 0000000..3fcef66 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.h new file mode 100644 index 0000000..14b86d4 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1412P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.c new file mode 100644 index 0000000..073f472 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.h new file mode 100644 index 0000000..24c7187 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.c new file mode 100644 index 0000000..8906e37 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.h new file mode 100644 index 0000000..dcd5ece --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.c new file mode 100644 index 0000000..49e615a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.h new file mode 100644 index 0000000..f185ee3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolOutcome.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.c new file mode 100644 index 0000000..e9aa676 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.h new file mode 100644 index 0000000..18a8e9e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1412P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.c b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.c new file mode 100644 index 0000000..60c6fbf --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.h b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.h new file mode 100644 index 0000000..8e09491 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICcontrolStatus.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.c b/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.c new file mode 100644 index 0000000..2aeaeab --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.h b/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.h new file mode 100644 index 0000000..963c158 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICeventTriggerDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindication.c b/ric_benchmarking/Bouncer/asn1c_defs/RICindication.c new file mode 100644 index 0000000..52c6f62 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindication.h b/ric_benchmarking/Bouncer/asn1c_defs/RICindication.h new file mode 100644 index 0000000..3cab9e2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1412P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.c b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.c new file mode 100644 index 0000000..77aa08e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.h b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.h new file mode 100644 index 0000000..2ec1a1e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.c new file mode 100644 index 0000000..18db177 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.h new file mode 100644 index 0000000..2b198ca --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.c b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.c new file mode 100644 index 0000000..e458b29 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.h b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.h new file mode 100644 index 0000000..898a1c5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationSN.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.c b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.c new file mode 100644 index 0000000..2fb4a3d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.h b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.h new file mode 100644 index 0000000..d665337 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICindicationType.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.c b/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.c new file mode 100644 index 0000000..cc350e3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.h b/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.h new file mode 100644 index 0000000..4b3ab0a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.c b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.c new file mode 100644 index 0000000..73f7fcc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.h b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.h new file mode 100644 index 0000000..77c63e2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1412P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.c b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.c new file mode 100644 index 0000000..1a93f22 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.h b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.h new file mode 100644 index 0000000..613f8fd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1412P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.c b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..7792227 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.h b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..0dc17cc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1412P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.c b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.c new file mode 100644 index 0000000..f3d1b01 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.h b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.h new file mode 100644 index 0000000..78fe31f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1412P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..f4344d9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..094e91e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1412P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..170a7b5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..bf69065 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1412P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..bb9b5b3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9c5020c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1412P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.c new file mode 100644 index 0000000..6d9cd43 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.h new file mode 100644 index 0000000..7b7d497 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.c new file mode 100644 index 0000000..cbcccfe --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.h new file mode 100644 index 0000000..5d56ea2 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1412P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.c new file mode 100644 index 0000000..cecb478 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.h new file mode 100644 index 0000000..a320a3f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1412P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.c new file mode 100644 index 0000000..fc2bceb --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.h new file mode 100644 index 0000000..9f6279b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1412P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.c new file mode 100644 index 0000000..2ce9f49 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.h new file mode 100644 index 0000000..1c1e484 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.c b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.c new file mode 100644 index 0000000..63f47b3 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.h b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.h new file mode 100644 index 0000000..716dc6c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICsubsequentActionType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.c b/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.c new file mode 100644 index 0000000..2df21d7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.h b/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.h new file mode 100644 index 0000000..3f6626c --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/RICtimeToWait.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.c b/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.c new file mode 100644 index 0000000..e70f0a9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.h b/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.h new file mode 100644 index 0000000..f1bf2ae --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1412P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.c b/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.c new file mode 100644 index 0000000..92fc800 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1412P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.h b/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.h new file mode 100644 index 0000000..c6e10ea --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1412P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.c b/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.c new file mode 100644 index 0000000..8e9941f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.h b/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.h new file mode 100644 index 0000000..906aa20 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include +#include +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.c b/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.c new file mode 100644 index 0000000..6c1d6af --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.h b/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.h new file mode 100644 index 0000000..a9ff45b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TimeToWait.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.c b/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.c new file mode 100644 index 0000000..41f10ca --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.h b/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.h new file mode 100644 index 0000000..da7b498 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TriggeringMessage.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.c b/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.c new file mode 100644 index 0000000..ad4e6cd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.h b/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.h new file mode 100644 index 0000000..b2cc876 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/TypeOfError.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.c b/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.c new file mode 100644 index 0000000..4483d36 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.c @@ -0,0 +1,349 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.h b/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.h new file mode 100644 index 0000000..5d8386e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn" + * `asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include +#include +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_application.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_application.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_constant.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_constant.h new file mode 100644 index 0000000..cdae2a4 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_constant.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define maxProtocolIEs (65535) +#define maxnoofErrors (256) +#define maxofRANfunctionID (256) +#define maxofRICactionID (16) +#define maxofRANParameters (255) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_ioc.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.c b/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/asn_system.h b/ric_benchmarking/Bouncer/asn1c_defs/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.c b/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.h b/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.c b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.h b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.c b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.h b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.c b/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.c new file mode 100644 index 0000000..613e6ea --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.c @@ -0,0 +1,1511 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + int present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present = specs->to_canonical_order[present]; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && ct->range_bits >= 0) { + if(present < ct->lower_bound + || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + if (ct) { + if(aper_put_nsnnwn(po, ct->range_bits, present - specs->ext_start)) + ASN__ENCODE_FAILED; + } + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.h b/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.c b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.h b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.c b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.h b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.c b/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.h b/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.c b/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.h b/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constraints.c b/ric_benchmarking/Bouncer/asn1c_defs/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/constraints.h b/ric_benchmarking/Bouncer/asn1c_defs/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.c b/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.h b/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/pdu_collection.c b/ric_benchmarking/Bouncer/asn1c_defs/pdu_collection.c new file mode 100644 index 0000000..c77a828 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/pdu_collection.c @@ -0,0 +1,30 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2AP_PDU; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_EventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_ActionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_IndicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_IndicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_ControlHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_Bouncer_ControlMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_B_ControlCommand; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2AP-PDU-Descriptions in /home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn */ + &asn_DEF_E2AP_PDU, + /* From module E2SM-Bouncer-IEs in /home/sjana/ASN-Defns/e2sm-Bouncer-v002.asn */ + &asn_DEF_E2SM_Bouncer_EventTriggerDefinition, + &asn_DEF_E2SM_Bouncer_ActionDefinition, + &asn_DEF_E2SM_Bouncer_IndicationHeader, + &asn_DEF_E2SM_Bouncer_IndicationMessage, + &asn_DEF_E2SM_Bouncer_ControlHeader, + &asn_DEF_E2SM_Bouncer_ControlMessage, + &asn_DEF_B_ControlCommand, + 0 +}; + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.c b/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.h b/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.c b/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.h b/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.c b/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.h b/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_support.c b/ric_benchmarking/Bouncer/asn1c_defs/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/per_support.h b/ric_benchmarking/Bouncer/asn1c_defs/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.c b/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.h b/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.c b/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.h b/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_support.c b/ric_benchmarking/Bouncer/asn1c_defs/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/Bouncer/asn1c_defs/xer_support.h b/ric_benchmarking/Bouncer/asn1c_defs/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/Bouncer/asn1c_defs/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/Bouncer/container-tag.yaml b/ric_benchmarking/Bouncer/container-tag.yaml new file mode 100644 index 0000000..8ea858b --- /dev/null +++ b/ric_benchmarking/Bouncer/container-tag.yaml @@ -0,0 +1,4 @@ +# this is used by CI jobs to apply a tag when it builds the image +--- +tag: '1.0.0' + diff --git a/ric_benchmarking/Bouncer/docs/_static/logo.png b/ric_benchmarking/Bouncer/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b6ce56468d87a3d9463ee75297b3895fc9a414 GIT binary patch literal 43935 zcmdRV1y>y1vgqK!-8I48-Gh5@cL>34aCe8`1P=r!c+dd`w=lT7ySqQWbI(2RuDjOz z0k3=Y>h9{2y{mTbUD6%(MOg+Fi3kY*0HDgrN~!?>P>%11%Ln*(hyYMu_5B2EC9Wh6 z0MsTRKbyk6-&2^&swn{g-ZTI}U?>3a_znu(2LRmI0Dwc2cd85k0N*LQRaFQ8fJU~~ z&;jZwDGHc7+OwEiIGS0qc-lL?Qvd)$o&xWe_Le|X3Qv1G2Uh`4;ZOg<5O}}-2h943 z;$J90Tj5VSN?#}>99=9axLLSZ*glCMQBY6_xmbJ^P?MDYH~IUW@TYG;ppyVAtA~dN ziw7r*ql* z8~@8UN1)@ou3fCniaL-{0sVS91$cT*8dn< z1PNV=AsGM=1IS5=Yj{E(wr@+G9 z^hp-7PIS_oS-wV1l&UDjW@2DR(VS63abL7hvm-UveBfha`_O~J*>n6Ch4Zg_x~uZs zlYhn2oMFis{~c4)n9)s(U-{wP(@b@_zv0bE>x|}%JpUfk`u`XEI1RF={qTV07Ss1A zxa)R&l(L`QHN)xB(-ZtX4BD9`!IQp4Aby7NtCW%mB^?C*q7W&0AO7UpSv_lR+VL(S zV=rumFA=!@pAd3AK1|T}(x%LAmE(|T`kxYX%VoR_$B?Rj)3@^6i}b6r=Dh@94f7mvwg=$i2|8C8>s4Z+BE|#j7a|i(e8Cflj>OJJ+*TJDSI<|xy{gFKL94>cfm zP%x865OQ^itF$s9v6fP0C_o;Pm;v0NAYoaaDOi`-DHj>oM@RJC{tMrv5?lP%2UiUH z^K@YNsLHk!7Y%g|lYo5?Z`7}mzWhO~b;fh?;7FQza;P^7GK{B>&7=&C_d!j%6_fpH z>%!~?*SDoG$mrf@E|l)`11+&k>tI1j2?6d@X2A2+%xw&wX^Jn1;ob`B6atNs2eU2& zQ@Dy7$%=44Dt`DeRO0*>15D+$64mukLc!0<-a_D%MO2mSmtx+eA~OjYd^!aguVm!; zL_4>0WsBGjy5B=MuyGS@vk1b!J>Z6yP)>V{Foc57DJ9gsvjm)H{Lhk>qD>u6=XCSg zk@?OY{u(KJ!y^Ogh5qbmx=wG`Zb9i;Nn8t2Y&;O)!ZfreLk-42eal!3j0s|gmX(N+ z?sm>_p}~6mNGEMNoP>aX#DS^6!+6fqBI*4juUD!whxH*5&|YdM>5{DMswYhjZH2Iz zKmnRne}(BYyGTs@X_D@7bL(v53en9^gCp^rtNXsC{RiMQq^;6!k}JSdC;!mp1t>%Y zOpn1+k@tB7*EYFp-iYS(5R9l+t-~ zcG9a#K^_^72IzSGSz@a05=%WbYwax*%_SI~M>6TCC)X@%d~&LL*>IEZgEOZwGG^=> zRQnaQqVr!-LX#IeTv&XlXBIJN#h{D>bcm8nK0z7gI#VGw7kzqKY9jB$Cy9^47j-=+ zu#W1%r6{VpvY)*a6BTRE&4&plhm;S+w5U4i4KsEC@-H|75qvA*Rihb2|K{ngd^Ck(wn=336Zn** zlw7m1QDTQkZi#9Vc7XEA0cD^oFnkeB5H3R~5ouu?;?Cp}n^ zkLxmZ(h#JjgR*5NxL@DpviG@uMY5Vc!UM&5H?Nfdl;%GPH)L7l#Z2(LCNOEtnNsm! z%bH9%kS9nV3Sv51K6}gZbjk^T{iex^3;XJ`m>YwXMW$PSzH1I}uf{Q3hlO?`k%)1=#Oa^)S;wD{rdTha!q# zRY_J$at2x!VUsp8^+bTobF7hg^#-=ikABGlCk=o^!o6kdWF2P^Z%Rg;E~R6k_9ayoM{IqJEZ+uk z(qPKP54xn7`yFuBrV5PXP=(N%3#lod>BDC~XRn?I*WlYR_MI!{F-AWR&pAk(gC2FA zF1Z&P=xP6}Rs|A3umtT?SPpf^2%fDK+N2jhVcw={SUUm(;R7EKTJdwt;GY8wJ9!== z#4J!7A}Ef#TYyks)_@GH7>p-c4od7xctG|ewo7)p2gnsGNj8$5$6Kg|;&?{vAkum_ zN=yZ8xcmEAPz6MItfYmgqGr!+{j)4>@j4Z69)+;#R$dm44Q!tr)z<8%eiz2o?qEWF z41gX)B%tDo84G1EMIQYAA-y<#g2|t71yYUWS?}a@U7808WsC!<`$o&RM&hO?$}4(J zJda#UKPu@Bvw>MYZG?^ifBKIP-z(xIbqfvtnJT&Gtma}b@7XR0@t?L=A}u)HbkZoH z%ldBXpRjpn)DWWY^mWcd`p(X)do)ge_MppT8p*q6yJ`@ZIiFj3MX>dr(Pt6JC~hqrUitn?hPUGDb{+Zn;|{8c zyR)^WHKAv9(;z_){MV9Pz%z3gPP?Gz6)AANr4$L>t9(sPhF2^lP`qv#z1++x>i+mP zNxA!PZF#(gz%Ym552N84{>cIAR>?Fj?D%_{VYbL!j!-(o$Z{GvU9!Z=K#x)GWmPZ5 zj(fxzj_^;PI{D&jQa&H~|b zdPv2V9#~1*o@Nrer|nmLZZ}gT_gYt=RT=kh%~~%P@WzRHGiw9=FE_nxluxPmO**5l(>L`dV{`f94&LrDNg~BDvDo>f zd}*SswVJWovEsZm3YNIAX`nxuY!`w`QW@30rbi&k^3(y;5oHRT7k(g2jIQRJTl|=1 zQ=(AA#?qkz{NAM{a)MLeC@K+?(7|7K4KRmYhOa@)SELn~65&?wcemtF?G5A&!=U|& z-HUkYb?-&Ol2wRq)DgU?Y_$9KYs+YUO=4#yg0kl$s7;j-4xMH!lLga zgg$hzxk$bZjz+2QexapzVHDJbPxrt@&NxUcd{vmxU5i8OCH+359j7tDPPqVp^0&)F zguNyzmT5hlR25HytG(j6C>4^X?I8?onusY@(WC~PP>DSf6vzl`3gAIELfM?7i1l#t zB&~My<=nf^4>n?el#JBA|3cYWSN_Ns=|#pM$A&LP&PZr-7ta29FVawB!3|M;sZ(Xk z>%x%ksbXTixo!CnXNfBZdF1zz0ipq9iU}|dsgU5anHgzEaLuX?0e4$}*2Vag&rU&= zFV~LM_+SZSLt$l*WFns!v0(O7q&lFAOQepjqfcVxz(J7<$BVEH;=Nb=dKm=_OM$Iq zk4B4sEbmppFt@Xop3TNGRiiQ0o8qjz{uPy6bN@>rLj)&-&Oej{!R&Ji4QYbgLR29~ zRHg7`{5Mm-9|X$VihPq2M6A;ze~Zvz#${kqDKn7sku%FOOGN?yK8!ab{!QezDQ@{w3(@!ND*C<;;`P9=58 zQc?Iz@=V)s(XlZ-_kO~{Fuwk^^||Q^el$hSf*8(mg0LiE7`JZ}#1GCE%gsVy%L_rK zyt>D2{#BSeZr|6kY0QEfoV5$G+T-~s(AoaavSs9>J*sr(cj3#;aanOccm0CVy|8d0 z+Mqf0H`-Ky%6~tL5lNjs(Tu1aI*tRHLs}#Wlk{V}-lJl$Y}4T6-VB|m%z+Zwhb*B7 z80a^)*4@F@(9v}$nfZ)19@iOZw#TTX9~q%#THR{ANWEN)266Ck;bD0?lF*wm5TL=n z`|95$mrq%^o&#PV#RSzv9YT0vDG&npcDFKPyj)|)N3&a)9o0PVY;k=ZfG)?zD<5^Z zlznnw&Tbcd^c?n6as_Uqkte)FV0U+#`->6(1e*i`M6clhsBsr`CTTlzyZMCty-`#+ z?DzreihBv&H1Rc2(jql6ai0ed5Php(*hH|RG)JJM z7hs*}>n)VHOy~^4nKWgm^1(Hg+nQIE#UY4Hx%A1s`cSLWq(=$eur8qe zZCRntns4B2b>^>t{(

r@f1gRWk|A*%4`3la7*fhEBO++ zfvvjve+IanAb3ebpxo91qho!$LEb@?k6|ww@9ND|r^>H%YwgJ3G{&6QZiQ(mXHDRr za4yHb!baK{{OxHH8KCusjrz)sK~m1J%m6P)B3N`$$ack0DB~-kGNe}ZK1cs1(@jP* z5!0niAjjsxj0xxK4K~L#5rwN1f!1SBih)1Zz&~XF_yZ~7(@(3bEw*V%9bAUU>3(0D z-%=sal%EY%wVWwvB)umubUJhR7?KAYi9x!ayGpDKFf!{8VFZb+EDQk-4KCD`w;}Uv z*9Q~)ebqj5ryHg^kUxXaXdr!yc^jKQ9p4m5$=cxC=0$=bPBz>vX;Vs87LJn2SYL~+ z#b^_%XoM$cYM7t|ZNj;wS6eYk*D1t&$V;RHaXc}thgrNPOJYVyq)`zUdaIz>&%{#9~QC#g<7y`5DdM z3{Bi)h?As?!UONF@y=h(EIjwmR`@q-r8tr24JkN_lvP{c#^;6IwkOj!^Ij5yugnZ` zn%WM4_qBd_OYmP1(UgR^+vd@pG1AsfH3PK9OdsQ$ER;e;8-EAV2@s zfDern_9?;w4P*^7LZ-^r7*ng-jXzPx^%*B`lO~q@5i_Srt{W$+XX52Tx`9X!8pAj~ zJ=;}5eSYEL%zx-<>ZgZe=RjO{Tp!27fl#D{THL9onTVkKJy@R|NjF5T@vdlF@hfIN z7b&Kw>Od@11A}l9_obH3HMKEa`7TU;2cb`6hQo*S~LEjqyot z)rF_9DGP5>(TVIkY%5Vp!UwZ<@reb$o30sgE5curw>Z8V2h;l)ySHl(N8Vpf4wck+ zJqAKsGj%m4<08S^qS{=$SQ$X#Ikp%&gDY7f=TDCM(DX5N)Qf7S-Zs`;3|mgIq&ER5 zot0~pW+knaSozDm3aim=n%edt7|SmSV_HU1rrrn5HU(o7+j-H((a*LC|>ak*pD_qItJBChVP{t*0j z`m_vB_7r}*A3O8 z)|`n1g?!pBbcq;ArYJK_^?ipkRo&zx#1p<~7PLj94HxV<-^g0CN-qk^&$pr#QKa)n zNvy_!D3>P1R%#X{Pvhv(1J*;O*U)4XrzFMhWS}+&@M*)-a61yS&H{kj;lDfCKAo0) z{AacrG~h(;yy|D%GYFXIof#A6zc&#n$>pyHBD55{ZVcSh$)JGfi5`I4OLa5*H-l>M zB{!*PX&R>bs;Ovz1~2bCKE@0{AdDlFhA2XX1Jf~MPnp>g#x9yvXhm>cI5Li< z83l0>>5JtQxG*nb9f|oYO|w&CjgeH)+e#Ng9sUs3HT6)`mF~hAllSAP>UUe|WXmF6 zjh?u@DXr=PbmtRqy2u{x*!A0S`WQ>Q%LYkYJ7VfiYxwYGEiIuaQoWOP<}_uozIDdD zvZ&JR!g`-=^>LX;FHw>a2++P_qL|hUXt@R_Q6c77!yj+uYh4f z7m~o8v3>uOwY;(>F=oHJ$aWq0@(}MSbM?Zy^&rW2E90jK;0_2XWJrobjy(-#cOcqeUV|)$WAt zeM0Hpm?_!`^N}f{49@{SzIn`va4f$ID4> zVrNi>>kO00pJ1C$@kT??onBLYg$mc_Zk-MCFB3a^2m^O0PW2qeQpZfY(cNwnzk!N& zllqU70&I&cr`-sA^1%xKC4~Zng zJ^AE@;c2Dvz_cs+uh|n((bCUV44~cEK?)N8& zc}47oH~for!8UMHp7CG$pvhY=Qjw7*9?%V)T+UbLL=S$^7{vu+{LWFn}H2+m{y=AFsV= z_$3TgoxxMj`zKY+a|26^CjU1mEz6)EWvF|+^{o&WE9)2tUdQKC%|rFec$n{j{XI(K~$wN=wC^U$7iM+WV9_h4-n(Gle60N2x~$Hlo^W1`G8M%U#7BnYfUxD}#~ zcww;~$%~4L3H4C89QVyWRpTF+=8EefptHfUZhiq=_pK`l(Ijp9;pEu~=rWiecLzRY zAKV5Ze(S0>^8bksYs~N3()x@##_Xk|ne?2cTM}P|6Vt_q#$}`ktOFc1mdvV{^q_WZ zk3coSoc5pWt7+7OeN`&n5{U&aWmF8^^lU}?4Vm{?iUrTBwsw8b8LK;f;lKuTx+HpU z9ObF2DeT@LIt?UeyAk|M`T#|QonMp#2eaG-b!Ti(&B?DvgGV6c`Xcs|?Yh=p`?pb2 zR6m*aCfKK#IFcHT{PD1&YI^ahZO3)S2Kp{4hOIKYkHW3^xHT)ioGXYp%Pu-WC9@1G z7j|EIX~hrWDIe(7Q0sw;uaLLmHbXe_lrK_W9_(YP+vjW0^U{4%=-6LZIW|hFO51t* zESBT9nGfZGRAa7hx&zp4cn^J8%%)eSx#YNKoXHNrOnat85Z0Uk-oAHJIh04!E9BfD zo_$2f9=nWw zGX{W}7=!$aog+1%u9m2?Vdu$t%EmvClw~omo5Q}Qfwhg7FCM2<4tIka>+H}#>a)~N z`0lX=2??~mvsc#_W1>< zu12q{2)JNUPkp7+@~rA%%;q3Xa`c9#{mQL|)@_n((PhIDXMJi1HaZHSWLBZ_uR5FO zA;LPHFXy31@y!n>@XTku`j$}8&18xIk9AUR2IxC}^#}(r#?zLkc+0+LHuC-9Oi*S- zeS|r{Rujgq#0YAu+)E3O?j&0+Oorw!?eOE-+V}E)r`XjR@R2LSTT6SjppTRz4sVv4 zzqJa+Y8oC6vlZY)|&6QC@GPM1eJC%PFB8 zJgXo9=0HroRe3*`Im?iGB+K(XG%Kuf=UG|lD!5+> z0s2XjV8i(j>$?j}5PoD}HJoSUadm~kYk+;g7QaGUQ^rE7U4B;<_(kUJI+NFS>`8sc zD+WV5d#_{vI_VO@FBH){rO~Xn-J0Whax{O5vQ1=<>kkBazwt5iC;iL76RTihn`mTG z5GuTPPLs!}r6XAOiPdyq%PVpfD?8hXde)V72W_|m=r)UNR`fe#3vb;ajQNmBKIw)j zj|_D$eS6vOr|x3G5rc-6pUq0o_p_}dp|OeKv4Hh#_0#+7aKrh?@jM3;nN{1@otf(1 z+0(Jj#$2#Z{LS)Vkrn(Q;Y({somNl!Eh<068J|Zfl+xj+;Ct;*n9u^uGh`;ufuidvq0{{V`MmOt#NmK`w{cUs8a^~{EROHx7#7@@-YTE1PAyo>rU|{y zf}|Rnea1AdjtADId+ZtMk8zx{y)XLv>guOk_QPRnz@g*V02elc;o|Sy3cq2UU9MVZ ztm>UpXXRe*5FmKSn%ufMzU_YA^U`$v$2DJWz1W?;iAX4{XH+$d;%(80-5Uw6mxyEiLs6ezw+k8 zbkzvNOV@b1zq}V5c$b-F+)hPaD%zuWs;%(S(z<=T^+({0Fa&k^*+TaM6Tqti4}33` zy)ij4lwU8bXbW9|{L2@`0`G`?nfT70$oq$rct=JlomffK52Z@XTSKdP;inHSJ~X47 zcaT#$y_dQkC!lpc-y0~V`+Kk1j(JOWPFJ6GWy!Rmv6A@F20k@8O>Gt>8Vtmtf2hEH zX>GOW$BT}@4I*NtR>;^w%k8#dKv?F~`^)|WhSoFGWAX|Jw!gl5%IA4`z?nVq%C5iKZ- z7T&12Jd}F{Gid?(g=`mR!XjUuxF(G_kKOfZ`NhA-@TFW&tYRt!-`97KQAMz&Trr*V z5e@VZ%)yuD!y9;DZ@q+FH75M=3oR>QjcOAC^bCt|yq81efjgL4+W9qK4?uiv6ixZ% zb?;O=N3;pwe%xbScrUokXzStd&Y4sCnAj{0K0ch4{-vYhkKq)9X>9AL(4D)Tp9e%2 ztP9owtZe=c%Jig#cYp3|C^0bZny2k}$gFP%476>gfaN_l418Z+?!}koqP~{Z#}#8v{U+dIoL zmGYvN>V02LAZ`ePwC_nS?j^p~`oQ`??~kh=Ub-4%w9MAr9Gg1;XJfuk+^h(JZyp)G ziwo_(axECHD=_?ryFf(grJ_-tF~b7tY*#!dywa~wV^>v#L|Lv%-2P1yK4c(v!@9{k z5I5U#6mDEhaw()M^E8OW4W2g^ar96Rn=F{J=UT~by%854-XyA_IO+eAZ7#&+XtYoS->#|uq>!_I93B)L~;@~Fd;UT8odRh-) z+qqPA+=q{SDc_XmO=-32da7URfEN69Eo0JKZX88M+Pyc*c1YIjw(`x5x^fS#2DPIt z%a|7kr44TtWQ{ji0e)IB#Lv^b5Ph_sB>i+vht3B$F&7s@!r2@Bk zTQR|=&QEGUN1U9Y+=Q5CEC29)ec(gpa)1Ic=m%*8)V$#CG1&{b`KZ0~=;6{f<9bQ^ zp_n2w+AQSsZ5+bZrFOa=6?I<0XZWJBrsy$t5ew(}#$b5-Cv`vd8|RP!=Ug3_(Y0vO z?N6vc-&qT%z35Z>TsE}1AA$A^%*?y7WWrPk8#oomy>5bn8BW|;=>=zg5)G%DD99MU zDs*eX)>kGAnzA4DDQwXZU7eaCiS&RZ(Zn0?<`+z{7J42U$Vm4X&u^u_WA+9G%O80_8L>{Pz zUFobp4eLAnYw6eT9{4`3^i{|lB*t=EB5a3yOYxd-7>nLB6uX#m2Kv7FTIe3u6sItt4REiiCM)T?!OG7rrf>WIXiMQvEaVFZwZ7Igi%ES(j{YCW>1osQCT~ zX!P|(Z%zljgWZ`Mb-R~FIzWvtI)_2A8k`Mnagu4JBy{!Ev% z-|v$=(*JcM2Ns?RRBGynn)DzOYp@5SU5k^#wuOkDpt;y|-m)`qLRI>~$bM4zje?$8 zfAklD;PvU;6BTL!aa+N(m>MGq)9cJ*#B!LiJ>U%)a{n;d#!Gg1eRAr3PDXaiB0ksB zN+yB2As28s`7OTcj#yq;lc(?`u+ZTyG3@bJQ;q@FG%l5tXx*TZzbueH;7m-;OJ~$fdTWH8$oNB$^`8GCQmbfeszY_= zu#cmpT<7G$q&v4~z{P+z)9lt`JDb|5gxP(83u3XNGRZI2oqX1Pn0ckB#3raTaW50g z3EK}`pc*DJR)QFBt1l>xaQ-#4=j^y_&=hy52I}F;M#Ew3clsmHX1tY3dn7GQ`0rt3 zZ9&3TB#9!6%&`)0^jo{X&ytkY%bc8t!~Db$1CZO(2fK^dx&M^$!{3|c0S^EqIQKzk95PUWI*4wim$s$*YS-#qav6o^{%5|d}`#chOwa^c6OD7gW zc|0DDR-?Z}^()8h;MX1O?$7fAbyk>2@`RY9!J)Ibju_~pBX=XvK zE_z`AEv6Xs+w-CZT~J-y1g8U*w5@7Gf57e%WoKu#jJ0{)1N3y7EP=MDl~H9|!@KJL zQ2(6t$RqY_kvq^+W#tQx8PD1a!$!w}P7J&1=`YTlBLju;xU!MgFewqylb%{>t6{ZB zlUl}U~^lg@6F+VYDZmf}xD zm1^<(ironD#a1)cciP_%8_9LamEEh1F9}X*n z^L0g6y?CkXj$ohjqF+tFX!_-<2i|FbQ$?TLDb0WjrNf=ztSC7T5X4Jl>#__h4UeGLQ%GpckS`} zK-|WmSH)wy$rOV`rBPp+`eqM#qh>}b&8yZ*4o!p`aAQssz;d`_~gDzOh zJ*G|$f0y2uhcCi9kOVC;VIHSt&3}O-!rx7aVn6{05b2#JUeHR^FoKR)L7H|)sy8cMMcR!AQtxO_o3 z!%es9M~8_t=RJqZ{nnNT+O@0R4?w^bC5`w(IBmQLv5!r!s(QrKG+ndpvUJTV(#2KWBO%irqRVcap=mo&+v{^%5Awi9` zDq(pNV|-TD6O16l##XZ9y$z!LCT3ieNqVd$4jOuST4->s!c-+@-N$;hwgl@B=Lya~ zNy$%6}TaASr*rt(8pdxe(Y2#c(QhEVmHx?ez$}<9;NP&6$^>HHzJk6o0g2HKF^5Bn#chH zBA2(<`tW-9KRk!P;mi~SI`WRqJ+`qRM zPx?^nVdzI}+gjGqjH+k9)_{3)AL2)wbITog@3^%J!kmU%(SV54#Y8xU?M4SN{Duwm zxb;nO6=DsbwtEfJS|WY31wvjaHu6pkAUWj ze$5wHM&8x;pA#Ntz0UmipV~hxyT|mL&@->y-nU1D%b)f8zHqO<0Pv3v42a(|id$p+ zcGbKCkVf`34J{EP;+Mtuh?G@sf-}J#xShlJ$SM`bVppt1;>+?Qgd83o(0TLmxO|%- zdDZQi^#*gfs*?qE=hgakY3`CFsl%njf&ER`mzb6NEc+74vCHPiU4F3Dh8d$<)eK%> zYP&Ol5Au!mcW>ik{BOw%mUHAjV`;a}g<%E{yX{d&_3qiu@L|*E<%~ih^g=z3l9H~< zSNX!sM+$hCcKsFFi@+D4@>4ar&t7ZivCMj-BaN{Q%Sy+=RS=p{!cbKw^jYAj#|EBW zARrz;gFjn&-`rfqiiF0Yq19U$0p?Au3%p#SG-H01XB$UQH>TODTF`|kwi`E1y`+8|{mfio6(vG8A$mAU=b z#`)Lc(o^lpxVg+bp!<2&t{MVv=5PA~*xX+he~;1~>~Yno)YvU;-N7ce9F1SBMzlKY z?>)LJto$XpM+5L_6*kORyBU4IGoCCLT0&dpUGcss-Gi%^3Cql_>k1Ix@a28(@X%>n zgfafR5FIgsKr3^@ZO*$KpkD&{c#zsy$%C$fbeaCJ^9y?O>n`!I`Uk?wF z(sOZGzj`zfZ+yGoiZN5`u6R>HT=lZ`!sBdDeYI?UFaEb@C!k3hEg!+Z^)o4JSO9Y1;=nfe*| zl=|FQ`)kmjkh*B9qbH~CTsN6?yR~}{eq0k4g8)>I#nCV;dkcj;4~?cL#q;DB(1UWh zX0%K23iVym4#cn+U?yxsi*MAyWVxkv(ge@>Ye^o+0WR=v zM=7nIiLgZRezLBb^l%^n4u>%{wtx^ki7uv%}iu}^Mx z{GtrF?>QNA1G{VxoeST`;v1VZ5~u|FrJo8v9Y5&mHQTSpjUtZ842W{ZbSIcX+TPR0 z;hQOPW%h52MUJSP9SHW1_JtLAZwuW=R&S}dKzJ6Bdbnmm*8_;sTd@C?t!LmX<1Z*) zh^1*zv$pdAh4lJvVZSb2RRN5;=@@++?4Fh>uapC_=a#Vpx^0_r7*;%w=CDSAs$y2Y z_+2~a+QHFZun(4rb25XMc7o9pIKVS~c~`73XU;%oySY+xr>MKC%HNdLuASKj)f{jk(X!22whd}yz(@ay7vCn?H)PNB=gliXV~M5eH?-ym{W@d%m`Tf080KhV;NtPAw1WT9;MS4InPJ=M zx2!Aog_)Yb5(h?>mD&qD;|It70O>cVi$>n>L{i6ujZpS&4fktmXA*fmik1~5m%hs4 zDwe?^Oy>IFrMq@*it1XX*zT6opN%O3F_VzbGEhxKtV~PW#U`@>U=M;d4)>E*a&KD_ zx`v@sCChrxf%jTPOqU}7EQ${2VCx5?)i5v%yA zuN}7gfYWxDAG42rZmGp+A0ck8IUdG>)2i4YuaC=S9sr(~t&OOmyI7;E^(|(|NZHsR zv_YK9-@NCybM!@opDrrWHVB_lYx(2Gu;%#Q^tWta{GJu`e-`gR z_4PKmy&V2hC1<2_?=OJ}r zw3ENp`k}ZsI_S5%y)n8KaVc$Ha~CT`Gkbd-*!rpBwK3}>t@^WjqMA=6)O%y{`R7~66i4lBJqg*Z}Aatr~bdKIBz)e?Wj|l z?=2SEt3q8>V}(`KC^ywaEgOT)+$QiOEl<^5$U3Q5UUebI56FO9n=@?SRQphTiKQLck#_e}Nm);RF=2fv zsQOx0oziB9Nu$BRM@Vllj812S46VKl*iK zJnUEXm{L|l%KmoBjOsPQ73u$`0gPTE!Y?(18i^d@36v;9$9L4bjyR=la9R~sQLlSn zwO1QNLQ%=Qe@AwzPY;2f=V1N9hyyX(R$A{@Sn)^zdF3oQ&qe!8^$4^SiR`Jokc}V3 z>`VXF?OT?*#dIoWRsQClZJLNFx{(}wX9qYfL)q*2=_c#->PnsW^*JrDiG2J1416$( z^R1XGTQ#5li464MB;Qo<0|ooSZ2ffxfxJv&ISM5o&a=VpC)XXNyicCg4J~{h>|~DJ z8d`+=2U-icJP2}E7DaBV1leA-al3c3t{*ehSyH+n0-Vi|@10mIh<|NmKf5VjdKs-b z>jW7l`84$11&x2g4u}m{dV^(~Ntby;0>q4Ejnte_v2bk0pukJe&|L$Pm2~4fR0}xq zw~-~H1i zwVK4ndj~3j^uurrlHevltrGH1lB$PSYbbQM)P^XQ}L zMUewmiDLwHTx=^f%RzMZ6Xe?*^<_@N0V70>Ylj2jZ2A6Y(Y$Q(P(*me%(wDLt27-@ z=D5i?uL=H&PsG}`Rw_#W38W(p_MBQ!`4L&gCjfBb2e)n=X=1>lH@Uk6y!@PQ7a#fX zLD6MLj_1hDX)pF%}tr~Qw%}mADbQ^NZyQ$i=P{71Q zE)qUv@aL}pM7F#*WTAGOZ{JGG`bd9-@OH2d1;B6!$1>PwJ3o(1?wiFn#FNFVcn`nz zez`b)J81;nof{r^7Z3yTwqD@0e){5!Pft~Rf&FE@O8`{oK|lB?8w0veVj(Tzm@KCG z!?2$DXKEGEtJBk$)0+eCjQFe_fIJqG2Jxs*N`_Oxm9O{R<~IKgDKVXDp%-nsPCxx# z23d>sX9~K(y2AcuC;TTd;tNCia+Zzr2KL=vXH4kPwO9MIY>Pv8$oy|AAnod-169?g z#ko|*1^^W3OZF3CW$3-@7w^*wp$lNl--_i8}&it|H z4ZPgzqc|Xi@@5k5k?SqwsGrH>zo5>jL@+**oE+|ippW^zEat$d8fy>5>je^fU2B}G zuoFB9;=l@5wdDj>0vHu+BTkx`ZAS)e<+ErG6p5bak*WU=0G~i$zX;ruS-iOP)M?D8 zQI{!rdnLUR1!!vWz21WJSy{xC$94?~=FSpWb)07*naR0^KPw63p<0o@)sZcDhr5O5G+Ky8<@vJmFkajBtHX;(+hG%&`n%z&!q;q~3p)$6 z!vYJpZ-1(kFMbH4(r>pTzh?3fKu!C$F7oKA$=IWAku8%)pX4$@aiV7mlS&1Cve4p* zOx?a#E4_L18ph2`!5jZ#ari%*YSdL<1KvDR$F_1^DSJdHUv^u5TJ-d%@!iRun|tgL zYrA6Bu)y-ITXzMX_W_9gq=snMumxPjXTcJ<2q7woOR*E^veOCIo-z?yi7zhsVZrIj zM5MOwsUE;RTh5_LAD=_ZR%cgf3)|6tyovtPIafZg zqpQm13NvsPIBxrZvUR4b(K}6?ESF!q^+{-_k%TC+aNF77Hxh zvGSh);GY6!b-V}81gbQK@afZuAI9W20d$cmOJ^mr>2`PmyDf{enL6>zNz^jSK-%X2~#}O$#af4ME!GrR61V(jdZ7HECt^3ULDW)GVe>yg;9TJQ@PD zhJ;Ops{QymPPjL`+@+ejT67w7KabBzTeVigUf}1^EtZV-W6gTO`mT(1Sm3z5>yKzZ zw+4Xt!#cz>7h&g+OO#iO3!T30!U>b|Q8)S3+6CN24TPPGa>b<9)dZ0~9UJxlj|3=&#;xL41b#udD4EU;|*h8-J6pYxTYxrJCd zkcP(g6jOkfxk(9ZT2c!Bzn;ic3QtQH&2^iE)=#y3#xe44b_E=CE-g(g?hJTi#NY5z z7t0GmbO8Jg}WPe-4tPNoV%G35Gxu-01_i=6>)e2cBA zV-4%C-E>Kw>wN&D@4j?iDc6_va+T^Y3t+By=kTfCrm<%Oz}nYj(-6tHebLB?Otn#W z^8bRQwQmjq+;$>k`{aw5nL25HE8QGeub}~3CetQs^cr9J-cq}wtqya!U;!^J_a4cl z3au_~qx#**yHSfd`3_m21n~0Jrjciu;Jo>trOz1&cz>_5Egod?()btsI_Gi|flWLn&Bq&k;`r zvst2(VR154l|z4M=wGM|^LDD71sb#fK1|?^s7J=0uMXvwwGF`SLJG(Vpo(v=FtO!@ zPMV}Od_+t4il0_* z(9%p9_CdkOd5fE0`uODBa$92VUaL(*XuF??}@R}C}#NQ)thNn zax~Ck{F}1>C_;@}E30C(LJwA(cyn8!*y(f@$kGD7pPYe70N*`)s@gib8dw&zXQ`IMO7R^{vDa4rO|dB z;x{d)8>6QwzG~>@MNik&6~1RJfKxBIw<8{A6E4U7xoQLEzbAd-y1?4(t4K|0ZFXG3 zA}8@AXHuq*x{W-3jJ){?Qy6-br;vq4386_?;+*&9vcX237c}juUi%h#T1KFO zj$w|;Or2Qt-Vb{CoZPoMV$MCf4LY!aPcF=EjePxCv$y61%B33(ujk2Lq^JE zW4J{pNq@g%jXMrp%0MMJUjdJ%T=e`f;mI9ds z>Ke;A4U7^OpW4!z({bXW(Cl->b1IN~@#( z0=0Sc*{amw%&LH6m{$nUHqE{Zq=&pTNGB5-iHxNSP$}~UHed3TJVM=J%npZgNgncq z;FQT^gDXyeU0k)-Uhvj_GpicKEZO+1@s6kaYU*UZ3LJQ6(>k1%R#@Pct8T&PyK1jZ zCY7ua^tK+eo8|p*x(2`k+qYwlcYV78dG^Vc(ev^0 zlG{OQLz*qYuzgjsY$zXsv@ILblk`k0dtlUVxD_;R{XtM4psn)GcWYA1s+J5qV16mrZAwJaK8cN+b9wY#byewaWDsc+1p@ zIpe$TnWI*jHUqt$J~0C=PKC2TODs^zPZGQW}0#z)4CBod_QTI!A!YhxA-8phLLe(LS04SGaT`5kU(COPw zV0AhjX+TVmlx;ndMrhQV4hzlp8Kx6iz6osfrDdq0zTZqx&I@wY??ip&$V`fJOdI$5 zYO)`WiS^V@jY~K!t+z@_9 zFXxrhg%_qtKvv@PMMiv^W{2hBKpGw8?KDE;)Jd97UKTDB@a~4yCSnY}xZHi%Q@gP8 zWQK>khx5G$2xU0*K)Q zAc;%P$%8@C3#UANLKQjjMNV|5eUlPITVAw@tQmPrM3@=*nSeJA7Q_BVuZ8bb8>=mE z+vfeAdaCz7(t!Uh^CvV`dnfHI&>jomI9RsL1SRXtmVkZCUx;sBmd}0L7$<;e)2LqJ z!k7!AxScIA`6Yws28ebt5 zlhn+!^#W*4d~vzqNmNfP+4@{tk;521(0Otz6g!>H0<*Ee8pY#^^@?V7uv_jLJ`;1_ z3xR)0CuJy!h1!KCbn(d*UMMNQiN-WP9k+D|kG@Tpu8tXmB%V)iPzmpiv(Mcpv6D-@WTFxbe>H-Qv5F_p1e#oUsJ^ z5WJ=b7Bc$YGjzH!k&Rdk+gI9#!sDP{(uK5SM4ZTksf`?wF@gh0C%Wx;wJ>GNM%__j z%1asvOS}Xi!bZ!w9Lm_sNvT~s-oUaNR@jpLJ!A8FvG9s6IKt|?%>1<~FqZnBbRwCi0ebFhR zHs9t6-=;}ee6D`uymvhgXP`e_kDSP40^Xhu@HqtY(o*zxh0iZqtl#CUiK$*5ed|@~ z;NH4+v2}&fT_Fa-0>$CtGE{WwY${8b>1Cg7dV#lQV9q}yYSL}!Y8ME)Jp2|cL^=94i4V5JuEX};EeLl~OL$a^SP9LJO8@U+r& z0fD3MZ3jKIxp(Kj=i|20Do+z*sIL zKq-8qB+|nXuUs~r;Y#vpI%RB{iB}oHN20OEQ8#np87C}*l`NLA19)M1$d1mJ~vByI9<*Hv$4RATtXb zc>HlJ57C){H{o#-D^B(gojk3K0)rtaRs!MbU~kf*@5}N)Di?j}jBL7uZJ%KikBD(x z=qZI9bw{F#2UKy@NewrpiyZ)OfFq06z2J?)@#(jAo3D=YBgMVuG&;)oB;W2k=Pb~1 z3*;t-ab$z{j4TU6u-i9uDqdWU8ZaTC2;PY=Bd;VbB}n?TosJ4jJe5FXY@eDWE@9he zSoE22^iwHK!Y4Nzb#vug4Tq68_RBQjG8uU@KWvWQ-9Wx=7v=5Ufw}KrVCi7bjlQ*a z0#^F3Y`f81hRy<&ERZuVD>EKUXmupFTpi9Yx5lht=9K_4q$Lv?X&KHj)5Si+h7$hN z3Jae(NLX-#aiLB3DW5z{m|K8CaI;PgH(AUV57v+=V`m25Sn=~DG}nH2<*v! zU+&wMQwNVBQf}Wi7Nn`H7GQs^oA++YbS_cW761;N1Dy>W1zW2O?2deK`4rZC%ajA* z&W1cYoajrYC+d+G8QT|KqCf4EZ{&p$C9tD*IFwI7pHn6^r%f>5UD6}%Uv0v|2FlwD zMC9p$UF+~dKkM349-Z1T+Bl}9j1tg+Po-f%#*k+Z_^}fLB1hTXU&m! zp!XM#n|)O%@}ISyai^=fhnqgdt!HZK3fk2c zI5If_Wc4y!X_8czy|JW*uwmz90HzI1<)dzX27QNs&9?8jS@V-ukxPs}^2e7&=Yq#a2zg#&EweB4)0_sYvl z4_lG7dR|A2TfC@C`-J2Pf00>v5<+G8-?0se>97IFlpm4PALcRTBC02sJYt23$|0P5tkWwUw!p0*vIHS(MaZmXmP$;ZSK+S|Upw5(_ojF++(6H8$xS!Bh`c>ow*w1@FKQ zHY5A4UM^^xhyRcr#YyBp*_cyD_{E*@KQvpUJHpZ;v^ohV3}VjFIcI_PTOhAXXCv2> z+L7}_ZZW1$79y*#@$;8JnREr=gubDp|H^!KD4(veavEWDT>1?UMa?T2Z~fy0&; zoiqJ&k1`+32f00zZNy~?-d-@oq5o5j6rj_xT>HHRCBA!eFHE1Px!B73OP#iv%YQH} zfN%2goy)w|*B&SFVVnHX{Bbd8CV5sLb=y-WA}>H{`{YU74wEL%=#og}r_cR4L~&-$Gw?2Q zhg8jMBFD|%0ynQ-GmLrNi?Y{TStFMU9>J;;`XOl67yosIPx*4du;r5y)Cg&{E%5z@Ht0}err^C}YWER5Z8p{@YS*!8eomj} z!SNHj&WNr+eQkmLLkm~nBtfn;X_M19B6gV>fhUlgjJjC}0Z|h!$52y70aB3@e_GnK zE(mheY&$z@hbdEg)Xfy>RF-y6ZE19kH&bT{-tW5bK7J_q5vy1|6Xd<$hGS!Yv>~U8 zr3x*fD{5jIz)Gckw^hC??#JL1A{PYb1JK$s-yK?2W1IYZHJJ!|9VJ zo`Pwr+S^Xi>TuKq%36Z=BEA2z1+C86>30^O1#WuIXBPp9Uea!BaK3vSN5t|Y#p2iv z%DO_ts6-bznb4jNWy{OrNK$o^jyb(XKN+YRekj?86 z7UYQ;M7o;A5%^O$nDP4$=hUH2@4if0SGmnJ*4hRWXOZ;hvd%)z_3HIGjosE6ay^KnCQE=m^?pSej`^qLZYNV@P0Es7`fa&CDn zOd&MtmT;~L(&7QNY4_Z@4ShjJ%2h?Bup9TeOa-X}cuGn_ssH=yGs zj0f&cQJ+o`f@l~dep8BSAJKpf$x zfUJ}+1XlssL|*8WlQiNR8X}cO@FGJ$d3=On;W0g3{6Jy2Od3-h<#=!8LE`GXUzkV} zKP>_8yb2z}4R83Ml_tvH(j=TdIf4^*zxR-@c69s&X1b}Um6-H;VM`6*lsgM3{ZbgA zWBUpS+LIA@^Jat~8r~L}>rVF!J6ayWD(i!Cu@)KGZV*ceQY?nu5Y+v%vl_xVI z;2i?uH@&pFCE#6}KM!BkQS0qW^lF#@zUQ!~zWrcM9XNtWg`3c!y5SkAUa9rP`3~jp zvh8yV+;qyCQMCU{QO%CF`YBAC@T5TjLIzAYCM2Lvl6}c7647cr;iu&ppU$fQ`VdNV zm#1K?5_p5WEthY8klPaQzIyd7Q+Pt%$%^-bW6RxyGrzw3P);4gS9sdel*{jbWixu} z#cEH`#*Gt|i{YsKX@SDrh38-@;Q5`b9ao$b{J8*cE-_C))1IQR%U7w}kT#v3=#uod zjHD47r7MlPC2iW5^g^!$-awMaj$d+8!)Ka^&X#~Tm3u0<2VPTeQKfL* zbA3*6EqHre)O4f;Nv27B6{ZB;suQt`^E0(T$uC`kj@+>+6RAuIhg22KM~Op zfKq(Y)8R_8M$Q&YrIR$aAA)#7G0FJ@7pjUPA<58)9X@}iyS3hJw>6C>Ed%d-p~Q*! z&C|=te0LfsMOx_e z?J)U5Gjw65=@hhFtx>lnYJz2XfD(?p%cbyPi+fkxw{uos9cw9gk53%kjQ=)%US90} zh;amd7{{mo+x@72_1MpoSl~LP0c4N0sNZ)@bx=jN)E|8<4(jI)K_;VYnN+3S-@ zS-F;iH%nIXgWK`6Z0gjkS=FpfiFs2Fj4O4^ec=dPZrZG}H%c1OWMr?#O^=w0I6& zT0pw>DfL`6lz%~gS=QC2ofZHHd4A6ORg4oma)RJYbtQ0XZ~A6p=?+X=EgbUF5F5%% z8v1f2^5w&2n@<_r**u2ngf@(S(e079=XrOYx@8OgXP=#GIe1@r;kS-y-}`=4m)VuJ zi&OLF9K!AR#?O6q&*T2=ml4XH7oT;vTgCJ^zUp226|Jwzb+MUT(Yn|IH$LZ6X8_`^ z?7kxMv4YbeqAl{$CDOi>+wLYJljcdBzR24&2~UT7$RmO1P4m;b2>-+OB5#e2i-EpF z^v}j`Ie4>hn6AGS-p<(+v=`FK9QfA&;6Ht=jT?Dl<9L^vW|B^?bKk51U zHo!x*WaUa~#M%PhEW^=5bAD8q%x|etp1xso_)@^A`-hLC!zy;`HsX$i{T5{|QaxDJ!np zrksQ?q0mq3GCCv09CceG?=ASk%f02Pn~${(yl;5*Z*AMUVfmdwscl&{Z&u}|3-Zye*|BwRKw z22rLwM2>zU%do^k3C3)Syr>M*rKQW$NZL`ntmM0}$lZD3xsT6!iJ&NJBa&WH{Kfst z{{88v#)<^BL30n{b?ujbl2ecFgvo2x-)=IsEEUPxNj&v3K4dfhGzKU>iq8DgsV+L@RqJ1&0gXxsZFy> zE_9()N|W%WkE*51h3U$*mB+#|kjCykmMjz8>}x;MMH_7e@1OsC$<_@IEdA-z`^L%^ zt&7q6-6w$W$7Y^?`k8NDWLEtukF*ByXEKZ}!*CM6LTxWSZ>FS?anP1*9HhUC}gB|4CA6rncu_c{4k=WQq4 z|Hu=GhS`VO3f@Y+tFV3JobPUWXlYZQx}SY@JFkH^bON>iE>0x;2aLj>d>VxK{#GcT zv`E@j=Hs9m&LbzD>T0jpEy#b}`x~=fFEXFQicLNCvUEtNPhyrT+Rh9BQ?#Ra@%yo79e%JgeJn;mX&33;gACKd}Ovw%>`IyLN?% zZ54hBA^Nk)22{%kCQ^IUP2>^unJ%4x^>p1yI`R@7b~x0?mz4x?$UK}cOx;~c*KBBQ z2k&2OKC*4smN~a>xSvarXBu+Ordqv`mM?BMW4Zp{{@7FB$H$E)3LrFX5@|+dbw3F! z>#udA?=qXX2rW>|y%jCy!rn0k{)N=o{RYRDF0Ea{Xa^BL8w1T z9mdPGaFlP-MC36{nE<=tyzd?V(B?f6IWw>A;H}h}pfH*H_Al;Pe(dnU(SaU)^Dc54 z_mPhX`ryU}-J_UmuyFP!(;XJU}Rx$X}1|7LB= zHeEjJV6}2fX*rd#a!LaJA+MZUO;tCwbu*G21QYknctC{H#8Ld zZ11+Q^&8e6hli4>U}hESMMWHe^V^trY*Om;KlIhlH)Ayl+bQT7xRWqsx!$cj$-t6* zpkmF%Yx3F;-i@l9*?ZLqry~R))1WDF<4Yu}q(tebU8PZXtOLU7G!=D4LNW!z5%*kx zHy)2ao>)A!E}dr<@s5D^+O;3qTPphBS%24Zb!b2Kk__9Ou~dweQxaOpE9X{|4|NGFGgj^-ooJ(vxo$m%qm4YRzkcd%vp@c|JjXEB5%6Z# zzOTN!f7jTPzqscFSd`G^94)|Ul%qHa<~t86^@ZDV>Y?p8P0b#Ko7d--t)#_Rq&O(8 zN+}pw{Wrb&;x6Ba5trNrT3`Wg$O(M)eyHxc^SWzR7wsNjvV>TI71H!=U&5AH4B|1* z$}AjpTLc7cIXg@##^sW@BoKHfA4>$ik(~FSmoNT+a;s#r1k5SS9p1t(ESdg z1q%MqTT$;<_GaA!9GE#31E)0a#Fr47K7#V{(5|aU&=;T$`Q@m`GZkWo*Q8u~~ zs#5cYyi(5hZa)6*>|az$J{<$^+iqJkfoX!TJ-u&a>cKlsRD*Qpi5S0@&rvu(@bIte zJoUNT^6Eh>DJ=27lr)IfQWWwR;>5xCxlg6lXRLmc`t$QXbv~NSdr_~RSQ?nNKhG3Y z(P|U&Y#^4n&?K!5s=^aLOjF*GY;W8lro zcwYWCyg^>S;l8D6*XBiT^j+Z&a~_;-{cfc`_oJNpm;3T+-(e8T+g&I$?Kf^&!ns%# z^{+|9`GaABFRcE;JkR$(gwf;~y;)-{YQTKAkBd%Pb=nu6(2Z~;FEsHJ-t=*`jJheC z=1xx^mdB>^2-xAA|Mg{eKk}I5(+a<%;JtS3hj!w&eDm0$yjuIC6>4f?$h@>`MMZmE zC!gkrF&F-S*ZbykkghdJ-=* z*%0HlSj&Fixk~4MTi<&@PyYMdG2{1W#-CgL>1Si6?e|dpo_<;Famqv!yyJ#$kkM}K zX2fg}7__3(?qEgGM}lhU(z+xrzGP4+dEZ@q?z10~c&q%5gZF|3g@}~V)+-Q!%C-I?&A3g4=Pu@19Zdr?|lq0y6NxQD0M!!`p7{(dS&h@he{_KK3 z`+x0y37B0+b!OeS^uD*Y)^5DW@~XwQaKN^_0CoZdf58MoNJ0pP0D%dUjl}szGcl_} zhLB~*%n-hOBxDA%kBNyl4A>akl5N?RE!o<)?p90P>b>83=l`qjxwr0nuUp-+TD?_C z_g2+8r%u)VtL}NH>(;H?>?i$uaE)_tO}E`M*c00y(^DrxjSOa#D(6Lpm{R7LSYC86 zE;a5_Qgn%oiFwv_WU_@KwtoE%?$GHCGj6=`;1cV9ihmF9yZ^-DTJ_SC%ds?W#+x<0 zsGkGvw9_==C$UT6w_i-EFJda?(brOHI18c}aT#r~`ZTc>GN18xziD}lNTV6dX*@A%1xh466iT5)_i6CEtqos&uBKDbIkpagz=VvD+aT4rdx)& zeYKR04k>9QgkCDoe5uzhGIkl!X2>}ugX z`VqCmEQ_%#o`&?SFy6ebd?x=8qNn(>&XL{CYWMbeGVZ3K)5cTD*%D5r3}fg#iv3YO z_k$|+KcB8v2Tmoi#2ZWs#6v4S%Jg6SUDwaiC1ml7aXBm}-SX8Yd}nYQu()o%;K5~r zNf>Vq;lN0SvA#wSZJu1W&`iv86yiBU7utAUx0E*eBo~X1drANC7-bqWv&MMu+O@40 zugU){t~Fo4RR0S<>QFsLo7~#(v*>&=;-~R~&;73^)V9Z})Yo@ZsRO-SnSx*&aZhbh zDgPdS*Vcx!sLBz1DpTL$ST>s#yhm)AT!lv!iEd3pJ~|8D?bJEs5!PGau%kyR=?>ehar zZPyb={ZMlRZ)xsMs{is>HH>(*f1o#soe7{-20gwuuM(pl#lW0ZzlaP0;f+7zTBc-d8T8!u6@DirH!T`?|~8j z$K6Tq4K}HeygzuXM*aCS)&9#TQiWVGu^8+x_R@FQbVWHYWqX0)yN=T5OW6noQ#Ta zI%QOO|8H+9@rOUGN!<67>cTU}lIw=Xy!-suHeYy7DsoDu9fA9G)hiCElw0GH4e2 zlzE0qvCxDc&qrUjBAvQK&W#A}E(OD~)$|_hZ9L zJ8tFXr(A=aB<{Ukb*gz$R<$j|lA++^4FV`HCIT|JG)<7q_UcQ+Q=fA7Y@OF!O`X}Jn*(l%B`#{4nfo=O!5 zR9yyNCb71Il|JA&E*;B4GqG@k`)(Y0>N6fXQ}H1BNR=M|(Hg{A+|Qr=aM#gi<0Yp* zmzw@6&aQ@hHuo>7s`M`a_FMTgogGc89S^Ni&5K81zz39Hl%aZd`dz6C2mn&fqruho zaID1A%@5({m3?LV3aYhQcd&mO@3hAvDi0^86PPhQ`msxp_rG;dL3 z{!hV;*#ysJRh?f`eMkQWb;Z!iX>G#HE2r^3joDKA4aR#8jVW*czP`3FiRCxn1Q_)MgdX>r%TB8se(qIO zU6(PR2h(&IoB&P6^lZ5nPIsJkbFq~>`8W(8yg<(A)hw+~iv_Zh*0Mo8LNnzeJzBpd z!@7)YAOl`8_=`b*)(l)}gXq*v)pAA=+g}WbQ5!HAEt@eBG! z7%Vgk?Gw8E(;(1dKbp|yAQB)y$feeyHHi&f| zJPCGLorY4~_~3rf@;HfHl=oD_=rgK*^eJ3wa6d6dM)H)EH0Spu&CzUl#&`?e(Be8M zYozV+y10HXBC1bxhH~_C{?iA$5B!;tKELN#>v?OC^VJV}$?OA2zngikI5~{BFJJiK zDz*77`!WBGjcNpS3b-(x2+%3#Mpo|u=69-m^3dTooO=Aa-@W;vyyriisabq@*S7DR zw>7TQd7`*)`cJ*d?<7PbMFrUijUx7CnHe+~VzS`%?o_2t194UgUk&Ytf>2d!I3^zS)S#)LJyiDsn%Fhqa z+st>j4*nbVPdjbKUI2+0UqU4Zy>14HdH3u4U&n?gvf;P~nNkcPFGveb+Y?PIlPlt$ z`JE4)IP_)8&P15io;Lw$Zq7b&dLaERp!+Ee5JqS&dt_~mQHjP@kG=eXexY>hG0^BYCL)fa39YmBRX zxngWdGiKF}jo}_o-lj`=(P!(D9|_TH%h2mir;>CkXDrMKtG8*>AFVH{#6P2#)(KKH z*zLow^d^qxR+ zAFA64{&RVJvowjl#}X~Qr*>`I#idn2DYj^i1wK^VvAIUoC)%-nV+ZE(=tZx?6v(AO z^kQ7uavbfTnb*~&Q{;+u9Aqled{yt)sh{rO=x;9ZxJz$b<~0p^=8NauIQq1z!$D~D zffHkfkY=T)!|P^UvWvJ?Ctgfezx}J-2md?yGZjk5z)ZE{jP-8Zc<(3iXAu8H3IAH4 z0bhA(zk1WV_NbZ$?0tZ|Gv4Kfno~!5;PHeIGqT9jrc9IZ)_Ucp!h>3DnW+X*-!W8q z0O?ooK>Ag`SlsU?)RD1tqOUGnJGggtt!DAm-J5IGXmx|i=37+KUj{FFH9%Vp=q?1X z_^U%d3s{DHJHPAZd2|@Qq&?!L_(R|fVtXJ>oyT-qIXeFPzh2C~(sErnV z4r!D_MsDm%vCvqM>3BX^=N;5XT?`^4v8GjMlkjC~r?jl*Ln$u^eNVOyOhq~T&4xEB zTZbM{>D(b0Ps1Uk_#YlD$gyS9IMO*?!eG)7U(;ebg8M>C8(pScP)5sElzFCDD7@=K zCyyKtiq1$B8p0W=eF~MP(}};!V(l?ty-kX7^6%K5CiU#Y7pQA)->1^m=XH&|G{eP{ zM}Y4Yw4e`hsLOG?z8$v)Kb$mz8*?C?Eq0Ch!<{QXapN)Mj}(0WDDJ?XqUZIYU|%j# z=+F4M48G2tt4k$vM~Aa{wR}fGZJWY$%(ks5b$pO_cUldnQZUA8l}cA*>x@SHjgAM1 zsuf2Yj-_ZPH`ZCMhLH9POR%@V5_r`O;MJn-c%VqLF&zO7C^o5|>D%mIKD6AnY12{J zEYxY{yORY>i3Y8c*luhkn(&Rum7IyCyI8K2U#iQN6)k}bmdW~Gn`y(%HqEJlv1!xi zZ!h}AzeBs*1W*FjTMwv2s%Vz{!M)TEEOalp2bOxk2BU8VJ#XVFp-^i2%UAP6m!%1s6``ckcVN$$9g08jj9lW1_nt(3K|1-*@SIY{m>g|1-)rG@Lpo|T{Z3;2DSs6<@s7>cJjdDl`zfvqTmSsAg zpADY3r|L5=tH$B)vfB~l-Iffy&*5qX?RgxQa|NbAHsuG)y4O| z|M1~HlbyNqobkK~k>|BN;`^um7JqVm(uT~({@=TwT&8O3bL!G9M=%&ohubnPJ!cW9 zM$387Ti1q(=BD&UBv1cX!xHfZ~^d>SilTeTpC5$v>~%)r@KtMZH0 zJ9{^)m7{e2$e{3OMjwx1?{FEg{8PTYC3v`Jg~)In684C-vES zf^w(v^Z%9EV7Pg~vuTtL zs=DSpR-l;ACYg()FK&XwK{gi2FK&!D$;?E0MTPiLXR0UC6}4M**aMohNH&tNQ}&{g%JUY$>Z)u15r0d4Tk;Zfpp6dU1I7=oQAb}}jDctMx(K=0AuwwYz+Tn( zw`F*pdPmP@)tal*^Z&D^dFQzy##|OuRqilq#%BHuAXajAjI1%dl?=AIc${0&3 zAXpJO_7SoCJRFTb|F!OYFGaMOPt8f={p6FM9!(|_U&8P8u2KlO0%fGXN^Sq{h3c3# z;H45S?+};`2>5s^TBWx3U#Z@D@+wuAua*a5v!QV_)CR0FDGXq~`#6kf-0>2l%7%&g zmDteY^0pk)b`V_>lc#ls3Qa=zXv>3zbpD&Rj@gi&bJHdQ8m3Q9c68h_ggmED%u5gf zlMZ)wETv8!X;KaC8P(W668?IJ{UeI3xY94Y#hx%ZkzOe%1M*DuM7rFx39%DAB(`a# zX**v@-lkD@W`eJpu!j5gzK!a-(-&grJluwX?O|k_A(J;0p&MGfpI@-ZujQ6)(XYZTL9 z#{snEEj2o6^CBJ4E195%Kn^dJd4F-J^S~3OdS*j@P8)AdpCr7*7qRa5xk_M02K)`` z_+GQGRlJ)km2xzP!1N%%XD}C!tx)ei@kVvg5Z?OHbif``O5tu$@t zE6Lk5%ATLVH-u8^x}l5J+j=&rHmoR-tD-YuKUmj!t5GJ;bL60x$_UR$QD0nE_!5g; z<^0S|o781q!b%f9tc+U7{*peEbd;A=T%OleDTp+Al4cyGO-i5fb}wGa`NXewADDI1 zC30d=c=2X5`D5SMg0hrl^T0MmC3 zeyzH#_iFW)6IZE*JYU`vb8(LAnzQOWy?bDF_Mk?l5;~P=yj(g&rFc?S93-8#@HY84 zP_}Hq$>JCAk3V?g(35e=*_E5~o;TqGD< zv_+niz@4K1#j|U!x7lvv-*Tq5n;H>2^^8OlvVV19b}!Lr`Zxj-7(smJMwQ%!ugHBX zu27O>$+5vGLiRz##Twc#lCUoD+ho|J=>R?%sNzjG`t52SeD&K=wSw|%#oAh(LIr6U zmfZ6F;WZ-vnz!1}iE(^?N9`+HsnK@zKw4xrx995X&82y?1W8OTg*Vg3*lV!|=2b82 z?*pIPR^h+*AQ!uD-95yXS{xQx+wbE;gt4@BT5Z-Ce7iN;2S~N7>SY_;&`UJ6i~zXS z(9DZU9;-s>fIBt)a&7)=<3h*N7D?Wn>h(kl!&pLV=*e&YtkN+`tsC=kq>q1oT)s#% zS(yYtC#0mx{;@G8(@m*o)yC1UV#apFEWy2AihNtHHp;WuV&}$6ASDHpc>OH~FTy3I zGX%sGofs{{;woexi5Wt&jLTu?vb#I_cjlr3$&qp}`#d4CaVj+u1m$>(<(WARo#Kdh z$);(6yYep`#Rg`%8V{MnOMfUtYKN1k=wx-w0L*!I)2WSDjV#kWL?q-&u!KKbSm*5X zZsdsP@|Hw<3Hmoyc29t0dnOXB9OA5 zJy`|Z@F)Zp{Lz=&k7e-AG|HK#Um>bORYC&DHX-3W-Jl&Yn#)X>8QIXY3R3HwYK;&_ zjD$CW9V{Y!zi+PZqR#$1L82*wZK>Ds^PffX=Zd)>$4>5yIQinhE`fuWXbf9t2G;4!3eFn#Y&tD%%U&zBC3~k%T$6!MbVJP4lHB2_7%hvVaJ>#{L0*F zvfDh}LW?4?lRQIe=~cd=o~NqMmtpM;<#}~tg6t6fFK5S3Vn*4Wo|Gv46@z@h89bhi zmKs{4A}1KqXuX{QS7dZqisyOQ@FLWiWuY&w9$je96JR1K!jge3hnEfzQi-qqLbZt| zbBPY$!{?O~GER}LlMwit-B@=;bYDk3V_gS4FXd=M%2 zM#+rN|A6sV{?xhm}?PVKD+eLJOY=*!J0Qh~9Ngu+QYRZvYU(~bg-z|A#3a^z?dX@9_A zM|4V3Kr=}Ih=ycO1BQ7~8=P+|LbVaU$l$|%k={Aub1os3s=w!X5jS=pkA|H-x>EY= z;7xb9xm|v5uciV&U(V9_GVre)pMM&kU(c&Y_$>ok-G2LkqrB$b*m%?>o;*CB_yoO$ zE`IR-)neAKpWWYtmfYLE_D21ws7+FJ5^X%HV0K7~l_|NRN8~>AtIDTStst)7NCp1y zQ6MEto@*$XuTGWa)u|#FAsB=IL?t(RCR#Y?<+#V;>^5FO4o8dT$^fnG8X)ugYfFwe zfB7R*y-Rl%Thzp17M}6+Y(e{;*3(k&A_kd6wSf)TU;` zVdZ}m!lgq)upPbvxlcZf=)}+{-1j6w`x+yGcn=@U!LzpFzu5qK6^=(sIc%rKVqvTX z5Lt=%nu4L4E1~wBT`1nY{m%PB<>sD1G)B1JgL<00GjxJuSz_c}fdB*73#TV&vE6C6 zw%o+w16iRcg*> zHS6+PKGb;TOF%7`u{Dx2lX1+ZnTA3u)r}JP(_qs?L!3c;pC^)Lc}ByURQIXvFRke0 z2hmcfXqpCI&8I)<6YA2T$ZK>M8P0oz zwU!*AHkcI~o+Uuq=O2VVKc?`05?Po<#+XL(KuIJ7rFD)s?YOli1tUe5KdUt`@9n%0Ypw#b0 zZ#}m54@ggf_PDi5E8WoTdj&0n{RjYbi4DQ9L-bmlWzRKf_4Am8!oeb~Zq@_%1YT|T_QaC~iAu~q#Y5m0Km{ox54 z)8DZer&dBjx8O4Kkv8ExK;-)?<`Q8+u1(fU7#C5K$*JU}~$bM_Q6J$_UBXd$cWi@9h{7a}=oo zWA25{0{S-oV~<`4I`38DqZ~|u&NFwB(``^fXo@|rQ|$7k@_FU6x2(o(Syq@$kA_S8*1BLkGpROoj*j&9Gj zK8gQhNLa_#R3|~oyf5CIz43gz3M;82;#+cu7mZ9ziR2KJVG<|KVH~l(LD-P9{MC6( ztwuxS3v!HgL&6DX1leENM>(@zZVh@DQVWTXqh!BV)Q&36s2?WpJWhWqe!8N|@&IT6 zJIqBoTRfMW9#Kl|YA~O!KFtd~)XK(DdVbpK&%&!}ESnxkn~8H1wOf3I-K zq3@K~xnE9)z4-@)-Tt#X&@F4tbE;@<_Gl>`xgckAo^Yz1AESHxyhPb6HN1EIj_4dX znDULYgEssDVm7Vejnf-f>bc5J8aBe$fP8`C2-iar-?E|y`=OYCAsn6U@K#=NM0lbk-?w<{Yx zUErW8e=ive?JM9O4YIv1P42ca_WG9D+Hu9z@Xe$~ktlEZ7jL*{Y|0KDtM_Z9RUUSx z(tR&!-O6}XYuCjvRv=DGuj&u1o1W1WN(R128#OVWovHV4ub!PO-IZ zjpq90FJ!#ymo=xs*xE0tx35&cRYR?p!n8=cL!=>)wI zv%7dlGrXC}r36S3^+l|$x&dS?`f2o#?t0oS;c?*}$@7{TI3y;p+mX^ovJ;g(xb3=1 zWmT1QQ;`AgwoJxK`915}G~?{7XAfJPD_hjD#mE|pL~GLp0IW5%m(mBgDX#$}Dsf`Q z=m}}ENJ@iooV1Vz^t3312@CCQ`&^d>lQAty7)TSwz<7AwQfBGeX}dG;cMef`?M}MB zHIShEJ*5r}O~^o#f2OLpjrcU0y@#v#k_yS1?+WUXVD|z=jBi3aHo~{Sk{|^3Voi)lFz#;Qc6TAVa@6%Fa=V1UsF4Rw z_n^xieoQ4|(Os*sOBX};O7-^t66MUSrYzF#q;gQIRYRo*WXap1UC+Y|Vn^;c!>nk- z19qDvNGroho1jyzoH(vO&)g#);O>*@JuDG|zS4)8X(w0z+nG4tpyeT~ zt?DQ2{vW<9ei$bb-gKLS5WmK zKqyxoJjoEt)}`xAyo|D}62Y`w5IRX<``)*KPJfY36VZ(;Ke_Mr>>_1rAP{$Kx0JVg!yPK~7a$^IW5H_mA#=FN{L? zu6p}Y4*Zsa5`S+0ErUf$^rSy@Vssstz`qoz5{}GB310p4(xxNtecUekH(-1`V*BaU z{FM`(JR63F{Kv=p@)QW^t{Zs1e{%i9FBFL5p=S?y<2Fw1hvF-hD8kE{j`gI*wd{wU zF6`a&r@$CLCQp)?IQBg>Yv`->vFIQauD#Np`T0{V|7(3;w#X*F1sf|;C$Yxp`jQBh zN-dop6XU6N?FOtZdwJah^FwZHqgd{>$>K?{F1cRTPam&z+9#369R}SWo-u}P0iSl!M@|e$|s9^}^;w2i@XossQA~K)D{qeX7y6;@T)$0k@ah)AY;~T_EbD>B0m`vi$_9}S2RNb|^5*MtRPm9yW?$|@aDk`0(G``h zVm@LL(T^`9CIZN{EOLdL?{+Gsu1T9jmi}BHb_ZQwK(11t( z5tixv5p5fdqXm^&RQM>ncL0P&%w2bE0!S8x!G#?uGSJFsZ6iT~A36N(A^eV4Jo7pK zj!bl^42``ye$@%>c#7d?iw@{<1>?i|KPE+I@pD%SaNB-V*Wiq;w-mQl2&)YdR%vUL zkyhP)z2a;%6MK-(x!|t~DS&nTr)sUxfb^hzGKnkZiNWa~{<@KLVJxKlV}2@S${FKU znZoc2w*$1DcXrcDCQTUiWw$TxvyuEC%W7@gzu;FiqMP8o6UfUP10x}CndIrR@N5oT z-RereQe1Q49@P?minA^WK1OJ;xc>_#38B2)C1M(F&Se?U6j+o0oU=K1%~1%Q984I^ zhiY|D!q3pm?e52YOWFWVeXM^zF0lV8%kI%~TDo2=<5=kM$8o#D4+ko00**h&k>?4^ ztP^ic#LQc1X&qIUex0f+CAulogmVi;{KI zxzH=*A>H5Kho6T0YrRVko9L`+g-|=zAe!+=x36`YlQOY5snymx^11 z_YsZVJC7j!>TZf`G{V3kqx)ctY~u)>t+q>J7imfn@MZi`o^zfqejrv*CwR2q%$VUZw6 z5n%eqS1zS|{*{A*815ujK^(A`W0z*QESOVuvuq_-qG(c@ zii~TXY)!3zD*vCwYz^mQ!mJEpngU>{Z<>Biq-noDLlnaeQMQFt_*N@=rbGxl@78-$ zYE_SkBEmJd!W~TXDL})RIc-c$vF>U+*mH*Ya_ow202qL`!I(k1wS6MAbCI)_pwY*97kpJ+_3%yHA@ACdAp@ zjD9|6&qP_silYLq{x)~XRNYY**+Ca=-3L6){wSz+=M-HI_i8HDV(QP%UH#&$>hD!8 zXV%do*qINAsEwC0$-Fm=KKI z#VuTk@M>2~am;D;HWZU`UMh%KD63;y;+B*5+g8!-AJMRW+=nJwsoON7mzb`RI6-tn zLxQp=9LSIwW!0`GDI*!uu2cxo>^M7Q7P(sS;$X+MfEzF>ek}lf6gwpf9eOTrDU`;= zi9br&UB6*m6yERk^R~~=k#%2%6rqihoL1xWMrB(^rnlRA*;ydMBXv0Nuq_2%@^cji z2)}_8n%hi!L~vTP21w*2pSrLL-jNT?MCd?tZl=KspMqLkw|&mN#jt_r8>mD{eV~-U zyC~s_X-c}T(YLEcINY)eO?0uUOzaT?>5`n_vGZ~ba7xOIC$aOOjXA|r^Z8?gPQ@}K z$jUr`Pveb*F`7#2N!)zKw=~xLo6rpIHPSEvF@#10*~md6l6Zc2Frm&BV&PyQr*=FG zsSia}CtN>442CXgk$@yMRw-k`b0Ohr-fVuEbr|U6;>4HujG~>;_1C#u_VZ&;Vaqi> z_CoW;n!Wegf0B|X#krMdukxSuRv=vw?`JoFFxd@it_*Swv8v+y5iuiyK|smJR{6pU-Ap}m3n z`t&G>X!bpw+iMmV8rVyYG=kA2ziAeO{&F8?m@3afSf!8r8Qy+H!k+wipUH50iq{&! zOtT?!Hr%Y7y0rSNR#|ogvldFC^XMUI!ADJkV~1Eu`oQXVsaZY-4NrZ1546x7E(Gck zjR1?Q`jF}lO*7Hm+v8p}k}a(*XYH*=1`a6L2vKq<*}7-ZZ9U|yb@|la^c_mV*sO~{ zf`u{zU}oJw_FCMCu_^$s3FQOW2%II$j3qaxME zZt)y%A=5<~;P~GS3Fn})Om|`8um;opEAR0z9{AgH*k0@HzxC*-jA3a~13MAqV_$$O zY_ce{D{6O|>|VJ=xSepD%*KRzJlWF&7F2HlatSU$ONno#UZ1?;)WFaGFLo zMX!M^U2Sn^FB-FG|3e|{^&yqPQmtvm^LYP<8u{M&lAysml!AX8$rM52eZaP!*ZFMr2-vC7XDK>9w$&um4$K^FF9g39J6G8JHKw?tI?EI zrsT|S%sT`Pt~i3MzC5YR1oRPs@$_nG@V)_=(k7Y}J*7$U{07lXTn*9eRP4#)W`Vbe zK!=_*)QQx*zy&opdnjJpH`2so(8=88kjVG;9-(6u-t+b2>k+Ga1GcoHEy7e0xMlA*Aci$1czP!0dj0@uo6M8dV(wEnKJ66nnJ*W5ft`JE*ar>%~zA z>ECAV6&L)Xw7Q?)i}dD(R1pw5X0Dd(t5y-6?yxwk9}=_9L*hH4z9YlKZShe>EtP_S zF=BN%w$qI z&+U5zo!%i=jTk9aR}OdZBh8&~RTMw_s^_U%1Gc*lDbHt9UOt9iz=A+3^~dZJGSc0IS11nACh^*9U>Enm6VzM)Ha zLL*AtP4es6=jOK0Iv+N=IeXpq<|BTsMpx-1Gm9%AH#)8+9UdvI|041d3!v6F{Wdj) z^BaY+0Iq@^U^P;$IFv5H6)4$cdHlUNx^?KiWHCch^kLYDjHOJ-jQ!>0*L@at+dWUD zh_73o{5wJoo0a1py=8o&Qb;0M^P|2z!f;|Kpgqv@XkYg6s2N(-esbSIli;zrLS=GV z?pic%n}&$kjTuDQxAB53WQGwD{)Jfy&h{Px`Y1<&!f0-04dtaDyTTj@j>HKQRG~e0 zN_-`8HVjO5(#8;nFvd%On)4ZBQ#czjxTlilF@g}b6LLMCMgOe(2)cRSykZcdO=-x9 z#&{9k#k1^JRn`lz&)dtYUV4HHio_t@z6`HBDiq|B;ttc#C)vU=G2aW*PVs=Xp|j(L zMw|3$CW?nYoMhS^EGRuv(G{sU^s*Z92OIxEDq_26O{J%dajhH54DA$3Q+v+Q!_P5QIiC_=J&ZxR9vi5a_UJbzyui{S98oUM#y zhVw@MMa|W{!`ICMJtU_#IxpS76H9OMBSFw0Z3=xO{*?Ql$OJ!;ZvP%R33jZvFMmES z5|m$8aphHcw!qmy8Z{I9$Go4?=3?-Xd^@s9f};=VYvGBAtLbZ{N?MJLg_JGJ5@s7m zmqAbBNtn%k6tD>ycZ$f(%9ua7F&o+V$@F8*Sj@%yYz!0|Kry$EJ00-r`sCWiLvI`x zVZH74kliR4qedJh|CxgLx6BwA@X4}^D=C0X$^+&_J+5Cx-<@&GbllsHER00&eLU+( z;z$bOT-fr#(^rW2!e1kfJSPQS++|m3oO#(7ZF4u}|4cN-fcT9)V_eA4Fkaf^YPVC7 zA>3!)9CXZ3&G<}y@7gSZp0w)12ic7X&XU-N|K1t5f9}muN{MH*CXrN{2j3`?E-f9hUro>chg}}@@%`xN9z4Jvt3l4#d5jts3N^7HkCBd~3P$fc z*1vamN~>&HB*@1uT->bA4JxF5qv@R!28Jvvet^sQ2^ViAjWgX({FPyu7xX!3t5=1S zDyDiCwx>CI5Zk!m6$MZM=qycOF<5_!&IQHjcKTlVVBVF<=O1XmJ=;u>$ch5N8fx8v zRk-3`0cdQnXum#r?Nwm>ZU(aG`rkj!gY*A!V$H>!eX)lbsYP5A((W~0;H*!mB@^#W z6yxzS`X=(LLZp0h<&Z!aU|S?=o+JN~y=z0*NbX8$ z{&*plyLHvGk;Wu?d~r>CzC(e!3sMDrNgLsud~oHM@W@*b`u=@!S7!`74uk`vTS;ZT zY)?b=;yq;=_M+a|H{$sbfxKp{CSLP*Vi##JXw{2U_Ah0E@%`QCz#V1(J@&HL(3jml zE7JeAxAk3NgYSCV&fz%Qoz^AjgK9gVZgU>q=xADWgv3A&ceG-WnEs5DHuSERI&h&d z-ax^qIMD(FBe9N6R$}6N1~E5r%O}vZ14+d|=xCdulS4_VOEK(vkPB3Q*Jb0e#eDkp z#CAFdPm+SOO5aAz;F~J>WyFgV7;u>ls~uukKfa~-AUm=WX>mM0I@hMHO6u2Se6Dw3!s-veBRf8e7U@e=P)Oz1l+&PBRrw z@hxUYFWX6>_?qbnY}i%pnjY&_8_8(wp5R-G3s$3?GB~`e>JR+k{4cis-NmqDcV+kQ zJ$l3o7cTy)?uH+z?;SLjam72R8+w$A9D}oORnUKB`(GFZ3y`5HPguO~-ljofnO*!o z#WaN05Lccn2sgBYzOAG6-nTjytwkMq*0#DWEA*!1U_;4jyr|vjru~wD1p9%E#b6A} zqFL|7x<=}kd>$)XO^@Mn*aNcMEkj#AdQip7ZA3+M=$-ImRB8nERitP?*e0y}$|ny% zynDs$-i}h)!XDWP#5hcZ1ily2QZmyZQcEc@AABYfJwR4=#%Q!P^bd(HtNS}!d;CQ! zpsEo-L!Ld&2TQX)@r$NvAo>>l@h@d6w8_VOel6ZcN-e%}EOQqJk*i~OlCDKb5P;lh z)KQU3Z`e-3UBu6ja7UPOia|_vGVvRT_AZ<(&-gNuIJU&X|Jf!x7+8>2{{{nf)lm55`v zJPhrM451}?_rbDtBpnseqdO*gGREsr_UWOWAlRD*1+_@~ngX5|5g>;-m12dRHY8`A zJ77tebwOBQQ=N{6R7$fRRubE5ha)DgtwAGb%RofIJwKI`8E+?P6-=5bzRT%vnvc>(UwzKFdFvp)a0W;W6>ePc#c34=p*2S?&*I zUJ>cy2HD50;IlRK8kcS=4ie;yi!5|SmECgejkHVhbSBTn+VF$V zB)v&&Fpep2jV{tnhXE!_>gpff(SiNODM)@?T6Wo`#)-60QHoUzjtJQ?=96?QOn+qB zk$$J70r0V-u+=&@EsnV9uaQ+QVu9Mf5XKwm-2Z2_$4OY zhO(#On3=GBb-`m>3%Uya#F@5lceE-TDYQDm(3Hr9Eau;KB!fdcU=n}JyhZu=d->n$m0H)P3T8&W-OU^w&MKd{~F)8Soy2z(=E{`wetjd2j3bS;GSDkgG^sk2CyB zLb?Y+K0zNXYEnvXU0Jn!JCN90X>olyA>K$1^pUmV3EB@##0S!u*+ZIMf>nhv3Yr9U zvoTfO^>Qc_H)2Ck0Evj6zW@LL literal 0 HcmV?d00001 diff --git a/ric_benchmarking/Bouncer/docs/conf.py b/ric_benchmarking/Bouncer/docs/conf.py new file mode 100644 index 0000000..e0da2a6 --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/conf.py @@ -0,0 +1,9 @@ +from docs_conf.conf import * +linkcheck_ignore = [ + 'http://localhost.*', + 'http://127.0.0.1.*', + 'https://gerrit.o-ran-sc.org.*' +] +#extensions = ['sphinx.ext.autosectionlabel'] +#intersphinx_mapping = {} +#intersphinx_mapping['ric-app-bouncer'] = ('https://o-ran-sc-doc.readthedocs.io/projects/o-ran-sc-ric-app-bouncer/en/%s' % 'latest') diff --git a/ric_benchmarking/Bouncer/docs/conf.yaml b/ric_benchmarking/Bouncer/docs/conf.yaml new file mode 100644 index 0000000..4b50426 --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/conf.yaml @@ -0,0 +1,3 @@ +--- +project_cfg: oran +project: ric-app-bouncer diff --git a/ric_benchmarking/Bouncer/docs/e2sm-Bouncer-v001.asn b/ric_benchmarking/Bouncer/docs/e2sm-Bouncer-v001.asn new file mode 100644 index 0000000..93ec4f8 --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/e2sm-Bouncer-v001.asn @@ -0,0 +1,215 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +-- ASN1START +-- ************************************************************** +-- E2SM-Bouncer +-- Information Element Definitions +-- +-- ************************************************************** + +E2SM-Bouncer-IEs { } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxofRANParameters INTEGER ::= 255 + +-- E2 Service model IEs + +-- --------------------------------------------------- +-- Event Trigger Definition OCTET STRING contents +-- --------------------------------------------------- + +-- E2SM-Bouncer-EventTriggerDefinition IE +E2SM-Bouncer-EventTriggerDefinition ::= CHOICE{ + eventDefinition-Format1 E2SM-Bouncer-EventTriggerDefinition-Format1, + ... +} + +-- E2SM-Bouncer-eventTriggerDefinition IE Format 1 +E2SM-Bouncer-EventTriggerDefinition-Format1 ::= SEQUENCE{ + triggerNature B-TriggerNature, + ... +} + +-- --------------------------------------------------- +-- Action Definition OCTET STRING contents +-- --------------------------------------------------- +E2SM-Bouncer-ActionDefinition ::= CHOICE{ + actionDefinition-Format1 E2SM-Bouncer-ActionDefinition-Format1, + ... +} + +-- E2SM-Bouncer-actionDefinition IE used for Action Format 1 +E2SM-Bouncer-ActionDefinition-Format1 ::= SEQUENCE{ + ranParameter-List SEQUENCE (SIZE(1..maxofRANParameters)) OF RANparameter-Item OPTIONAL, + ... +} + + + +-- --------------------------------------------------- +-- Indication Header OCTET STRING contents +-- --------------------------------------------------- + +E2SM-Bouncer-IndicationHeader ::= CHOICE{ + indicationHeader-Format1 E2SM-Bouncer-IndicationHeader-Format1, + ... +} + +-- E2SM-Bouncer-indicationHeader Format 1 +E2SM-Bouncer-IndicationHeader-Format1 ::= SEQUENCE{ + indicationHeaderParam B-Header, + ... +} + +-- --------------------------------------------------- +-- Indication Message OCTET STRING contents +-- --------------------------------------------------- + +-- E2SM-Bouncer-indicationMessage IE +E2SM-Bouncer-IndicationMessage ::= CHOICE{ + indicationMessage-Format1 E2SM-Bouncer-IndicationMessage-Format1, + ... +} + +-- E2SM-Bouncer-IndicationMessage Format 1 +E2SM-Bouncer-IndicationMessage-Format1 ::= SEQUENCE{ + indicationMsgParam B-Message, + ... +} + + +-- --------------------------------------------------- +-- Call Process ID +-- --------------------------------------------------- + +-- Not defined in this E2SM + +-- --------------------------------------------------- +-- Control Header OCTET STRING contents +-- --------------------------------------------------- + +-- E2SM-Bouncer-ControlHeader +E2SM-Bouncer-ControlHeader ::= CHOICE{ + controlHeader-Format1 E2SM-Bouncer-ControlHeader-Format1, + ... +} + +-- E2SM-Bouncer-ControlHeader Format 1 +E2SM-Bouncer-ControlHeader-Format1 ::= SEQUENCE{ + controlHeaderParam B-Header, + ... +} + + +-- --------------------------------------------------- +-- Control Message OCTET STRING contents +-- --------------------------------------------------- + +-- E2SM-Bouncer-ControlMessage +E2SM-Bouncer-ControlMessage ::= CHOICE{ + controlMessage-Format1 E2SM-Bouncer-ControlMessage-Format1, + ... +} + +-- E2SM-Bouncer-controlMessage Format 1 +E2SM-Bouncer-ControlMessage-Format1 ::= SEQUENCE{ + controlMsgParam B-Message, + ... +} + +-- --------------------------------------------------- +-- commmon IEs +-- --------------------------------------------------- + +-- A +-- B +-- C +-- D +-- E +-- F +-- G +-- H + +B-Header ::= INTEGER + +B-Message ::= OCTET STRING + +B-TriggerNature ::= ENUMERATED{ + now, + onchange, + ... +} +-- I +-- J +-- K +-- L +-- M +-- N +-- O +-- P +-- Q +-- R + + +RANparameter-Item ::= SEQUENCE { + ranParameter-ID RANparameter-ID, + ranParameter-Name RANparameter-Name, + ranParameter-Test RANparameter-Test, + ranParameter-Value RANparameter-Value, + ... +} + + +RANparameter-ID ::= INTEGER (0..maxofRANParameters) + +RANparameter-Name ::= OCTET STRING + +RANparameter-Test ::= ENUMERATED{ + equal, + greaterthan, + lessthan, + contains, + present, + ... +} + +RANparameter-Value ::= OCTET STRING + +-- S +-- T +-- U +-- V +-- W +-- X +-- Y +-- Z + +END +-- ASN1STOP + + + + diff --git a/ric_benchmarking/Bouncer/docs/favicon.ico b/ric_benchmarking/Bouncer/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..00b0fd0ef0b4e78fbb8cdb413ce84561dfeb404f GIT binary patch literal 15086 zcmcJW2V9fq_Q!*^*Y@7O)jL{-B7s1{OaiD3*&`%Ttk%}OweH#~IBK=vV#v^9$@`w~^E~HS=Nvd315SI6Sj<7m z<)mA2I6XNW4wu{Txig3J0M|OBWZzGEkHd+;53KPU+`<_RVb@hJOLg&A{f!h$4Wh)s zoukD4dq#=Bm=rA@x+YpY@=UaN-2G_r#OINsugjMR=Tv_0u;@jo-HOK(t+!?kusoLB z%k1XYye^MC{$rH;pU#HQ+Wl2Lt$j|U*z5gBv7c?EIOv;5ai0U=e+>T0Xz>sw_zC=w ziL^{S74kJL6NNzLP_$?PEfGd4XWJ!J4d?GscyO~$T6OttKG)=CPfL@m4_mAMZGRWx z=-fWS(bX}+(K9Ym?0Y{_EUAqY_a^W|z5w$O$SeNnCj2p??a;&3a~Ga%GF9$vKIo$;rRJE#K?zTk0q_iEwoKF2d2}&j?2kCHM*akhbv82X{DR zF(i`Wgv%&KxSVF#Y#|S`Q)Fp!zJOQV%pD-3ArB(NB3kO?Oy7I-qENXXO&%zrF(V{2Vq^e~816@72I5+9Acgt{ zQ@G1eigKKQdQ8)?{}_>e{#fwG3s+N^T{8KY9VQFo6R5+%3h=MDFxts|6Q{oK!TbRv z1l)y-dpOao-d;3%av$oq;B%5L{fq*Z29w`H3HdJYCZBn(w-&7vSM_bac z{>~KQ{V6SVo(x+FMP25iY>9s*`XLc@SW9zkQmK2_W2nOs$i8|Dqg{v1jWX=?F}8FK z+t^>J_HXzR-AJ7n)BYodvGV1Vp{&?_5*rkxK*`bC$*bDw0khFv5hFiL6 zv+8>v=^*qB@8$C6_>kcw-!zAUl0zwI?N=0(*arS7YW`m1J|MSI?Z|aFhg^mjP*7iE zn&HmI_#)IJ3O1u2zfIde-hK;B;_q(gg98nHkY3L<+`5`;nEVfY-0WJkwXIQ@r`zGN z^Tv^ETNp`G=8<$$NL%^qJ*OB|q5aFjUk3gP@K?JG;nepS$RW>u9ciLxFxH91;Ez?! zKl=C=+h&lfDH{W9JU8@#Vd@L6;pXA`_;+wP?H2ZOnKgdyxN7;%2$E(jd_Dh?VDb+S zWcIK0{no7n_J0-QcZ2s==Aqyp>M@~nAMi`T-xvJD!9T0#7o4Q-12`vK`+oRvte31Z zO1u>O%OSe&3XH=11Af1l;WfUI1Jixyy2^ZJI~#k?ba=n%bG1K%|GgfcaXO3ob8J23 z{~kEM`^?SYuVnKln}0Opm+>!mNTUf>`^d`VB>34__zC>m$=ood8a6ap`?*ih_FqpJ z96lf|QYkyMf@HfRTi_o>fw6-rAmK~$*}aiG&j0t2`^CE^+Rtjs`$+MU&fwnwex*MC zS=M{Vw#zBDo`GM}2WjYo%?G)L8ynZQ*@OFXhpY?#S$;H;WCxb(=U+X6BrC^Lz>awG zxp{{?vTGIYkI1hry!w6{D_kLf{an|_zrbcUiMwWkUA3N}+=D*IfTZSHblc~tdET(~ zi-!jvNqQ+i))N0Tl57m6fC~r6H>Zre@`ya1P@?+->Y#bXyOgoQRpY>4sbfE||8U#g z?Dy@B-dZ=6Yzw1pJ#+colk zQAfVTMBaIn=lP5p>;Eq7?A}=6>QCZ?NvCx9VgF%he<#xm*b|+F4K?(Ek-86f7MWKB zj``hsXKk~WUr6~~o~eg_>s$)j5lI2}ZjpbP5<+VJ=d{NwhyL$fxwY?)bNF!z_-oku zs~*3p^qtL5BlX;2_y_xq*H4Wyl%uABV8@Y!~skr)&B4Pr~I_ zGJXWVvKjx5B^3DcdGar?iPN68QJZuWY{ne$wTSprErm$iL{N4!f!jrF6=#nEu%k$Gcny{|xZgGy93P z-$uR7uMn@xU9kTQ$%3#xVEelL;6KawZ-f7dE`K~p53ZuX$B)RrT;1lHwr?m`!iL(v z3ujCB#yPAH0{;uP|M}i_4>@=H9sKvnvdgbvzX~~zK2Wb`mgX11|Flqkbw_zq{-CQz zVK;Tn+rEtIP={$P>3`Sj;I{?;BgQ|*>MU&M8Q32{?tuNjkV}wE^ubZGvcV-4A|a?4NJ2y_<*GA7s(xIokgb`0qh}0Xyr1bE-bD;{O8v zXQab_bQMW2>?HqUJ$A1izXjlTYf1mRUSIC8wsV}rrp%F6=g{^AU}wVm;7`bHu(P@7 zBHo`NE1P?aUkU!Q#`ZtDnk2tn)Mq!EYmYG|+H{s{OPw}|5;}fmedvf&x5sGvBCr=i zav`h_eh2$a$Q82emPLGrY{vf*O8d4jwdJ?YrjK|c z)2BDo+>D(`KIAF*|A5>A|8=tB-6X#FDdW!t|2Z}PdXk+^rhuG0{rs4VeDahv-A~sp zuuZIb?LN6J%$nbV_1}<rbGdgKt_6K&7h-$`+jFH-!6Jy(8i^Ca-s z$TBxmK<;z>(G|!ixO|}C6E%}MH6!_>t%lsGv9>3R@yDOX<`7frllb>3* z1m`cMI;<$`X%}7gp?Qabjy%J{KrnBG z6hhu?D~ubzv*f{M+@F&`4tA*)znfw$_;t>%@{?=qE|c#6Zq@F|I|LZEJN^F$zDslqI_OAFfpz-32eoZhc@qCKmr-qKg}aSA07Uue0PP1 zrtLLl@c9%2`Qe0_vg7Nj0u(u~wIQ$UdUD)@_D@sUzjpg;_zC=E9}8JhN_MkfkoA}n za1@hOuOhM%fzcYmhgd-b5PLB9D1eQCyMI1e4|-14Uo`OdZsf1$dnuOj-4xC2lhs3Z zIN@X2{ho^Ho?oXwRDE!<_Raip;EygP`^Xn$w*(UYf^5GnCYzbXWIYw- zmqlbfwh(oLj4e>hn0yk90Q(Tg=gs&p@x2v1O`Gd0WqTrBrN=kk4am)ZZ6A0mFb?+D zkZ{Y(mfK&$9|88okTCGiFDBc0V4saLq=;<4DI}X|kV)Vl4;kGee-1w|r;k2n?Q7Cq z3k_tuB8EtAWajz5sMTrrrhU=tF6N?)DiUo{%|C4X>e^3B{HzZ&{9l88>KpmX1hU*2 z{J`8+t@rYzvF`^RN}3k%@Xw;A%-WxEjwiPpbtFy&|N6@R75__&-w5!x=r`AHf6aT@ zia{MD7Y|Gi$Sca%X4Za>b1?H|5nI#5X{f`Rzp(uWtL(o*&_6F)5S-gd!_}5jwr29* z0)PK)q^v?;b+WAJF5um7da%9spp@!wjYdvVb2wqgXUO&me;W@ z%uRnQO$l!YKZ*~S&qL}p?5t$-kPqWm5cSH&x^N3)`Z(sLWb^~-pqf9UF#j|izZ(0W ziSetk|B34HE0|DFYc;v>3`EKwU#NGUY|7Z0&*0@j5+Heuor#Jcds43kez*HXJ#P~^ zT~(6sa4p$mZn94(SIwb1^AF>nrJjFmF#lM8gEe7Rv6A=Qi-+cmO2f>SRWyrFw1)9b zzX9_H5I@K|$OHdU_!0}jpM&;)gt6Sf?|hR;bdAXVqLOTm*OSej8nWJ6Mb>Lyl3-;8 z@#D+MGPay}G38_)TV7|jyz+tRs+TLeuB~!5+*jYKIp$5QulpYC9U%7L|H`+Jc6;U0 zA0CgX-0csl?|BDjgkOlnj6aLW=A4qOPbo=oq@Jwy*OA4pTH>bHR+(+BQJ8M3KGt=8 z)vPY-s~t=>*Zl2uI{#PS!I#?+?JorXNboOrxkJane_wo^iX5`2%J!VH2K*J^&jJ5+ z-tO8IZbt14vy>XoZpqdEHeFw1@Gfjb*&T>DoJOhQaLm}}5)P*WD>FHq_N)wt7FIH4 zVH}QLTGnoc>9WxDx!W+s=kcYP?(v;ck zGib8eGqg(8Gx1sd?ADi>=Van>Oiws_KJ;@~$+%Eva=hzQT%1lN>au+%E7kWl)Cc^U zda3G(`l{-U`fJ*Opo6swYbOJIXlyq;s1y6FX;=1MCE2KvI!}v>TYVsnd0L(E;VoXs zX?ibGEVGFc_nQ&CQz5HMuAH z=#%@X-MhVz7xP|(qq_@odR8GP?0%H^(`x8PjCllPJY)*;NWMYt!feO_iWElBw{}T2 zgDm%Di@RP*<{Dp;z%Tq(`BTWT=nDN&kz&`JD3K5Ha-_)9>IWHwI6cdSdZm9^gZ>!A z@8gg^v<$K1sn)5~)AVGCh4HD)h_i~!jFVv%t$QKI!xgy_nM<6V>KAx

4K$ruCE1 z6v%X$l;$A+WKj>+22)V)8Q__tsz1{oD`fctaftb@q**pw5vOB*{loVVn;33xnDNGS zD^e)*U)Ql12r)&^)(c&_BB& zheV@4UKKl!7p|eHf()`XVR72M#mKh^H8)CW(JrFw9b6XpxZfT-19>egCsE+4vB(QS zTsh*?M*TjaV&t+|kjLbY$$k8Xadb*KUL?!%?IE)$_UT1S7p!zP+-y`Aj3uoxYSwQtKqu7Ffq`$0^Fvphe+~M#Kz{`E&vzSXun0K}N!`ET9P#gMbbq$XM8y4H z)gOLuibl+q<%RGToS}3`VY)8{KC=@(XnIPbJB!FUfz$a`L+NTcP{iQaSs5YhH-G zyC8O*t+ z(h>5>sU*)F+U)kYZ83Gkp65fqlGUH-pTs|aoC_9jh8-Yx%A(8eXO@DiuDvg$jF6w% zR4GS{M5TY*_Y{=Q;^OevAjXNaP#N|ivewjF`!{jIL@UIN5qDMV|I+F(eC(H?{{;E~ z0|9@x8{AEa8-N69oMS#qyLBS z5FbX;!4f=;e ze{Bq6o`Kw}(8*#|h}W`sbC*NVe>+=#IlV-!eL@Q>FZJMy*D_+P|U`TP=frpSI}K{%yR&`mS*f$#;iX zW*O`c%8_>@1QC-{4!vh1QD`{uOGo@2aEe z6WAMz_pn$Ai}fJx&%J^;$&-4tf3Z9h`Y&v!fTBuWzeXuNL2N;wU8lCZ58(c0+N0aU zU)8=zP0SB5OT_!E__v5Jd{zeg`<3N*NUt5%jSaK7#&cC%X^vI&OP%?yH4M<%5t3k` z6F163{U4(3nQp`@go=9@e_NUUpqr-~#~j*S)eq3m;wpuRsf-h)Rkiy31HJ!*EQd7l zC$ly{%+2Zn@w+45AX4n=eKB=B^j9_04+flp$oUxJ3frrT5EGdr+Vb*^XLjf`hcKUT z4Fvj{NVh!rP@%i0qJ}S4d?UZGl@A~LUFr2B`f@s`$61wr_!O(E5YI@1KV9UISlMho zfS&guGRP%}{@8`a-;aYe^gl$bNF=|uqn-TZ+IZ6L;3L} zXW7XOPn!9Mq2KGVlEgSC3sW2QlS5KP9sC%#>|@HJ1VP0s;Fo@&sHHuPHB!T;+E zpDFWK2O(DAt;mP3*GFT=eKOazlO6hDk>u889X|@QL*|R;pfvA6@e&$EETgrUMC2Id`XoK%&3j8(`)P7g%q0m1-Q~%t{ zh?iJs>aJbNc1L#)yz}2*o8}fV7WZG^%S(a&bxrickEHg&H0Ynz;QO5l-Cs7*ADsIT z{zhMIolW0M&TRJy$a#LNvHq+LAZ#qUUV$yb_oIqsFh3Ua!?mQJ)t~7f1)smV{*MHG zbNe;br|)y%{W~uHCADXuSE=D(`FYGA<-&ZL+rY3A3j>QoX!L*Ir2ZQHWAc@Pk@;Eh z`2`646wSu1KK<+(`oIjj6Co;JG4n}cA4KjCVUNFHOdN$D4EA8Z95xtHO15Dd{qTXo zel28q)M_#sHicIuXtd#ydtUF%1Sqrt+hIK{yKdveTVVzKJ*Kqe=PKGbh%46oNiKq z!)2yCzrL8>O~RFO_s+4h(|7Aq>6;Z{|*bPXbOB zPKQkVgIK0nRr_%7I)iX;r9pU@(tx=)IAJPBgT~>|P^zC0?pfeapQ73RQkv)4kCt>Fi}Q1+>VF8LaCV*~ zNP8jbdSr7qqrFzZYJ5eC#l|zfko+_(^mFPR-j4$3`B1=D_S9z>k0$yDP=wPQoOxm( ziP-P%#6ENHC2qt2N31q7e}6*A$Q7R^exv%IhXCYy`z`P-_nv8U!+qjMhuwy?KQTD4 z$L*z#;T7??KioEz9J}r(u2K4Ks?W51RB@xKmSquu4^#%Y849ACRpb^tkiI9mi>IYB;( zial=6shMviMi}!R&Mj+MuAq#29A`%C)lCoXK`cL8c5nqrZeX8MTCemgZFyfDFI*>& zwoiTOWp)W?4ea~PGIMZ$jr3f)IuE0qiZQm>zZ>d({U}Q0g;*bWY~K}mek?c6{AwM$ zUveu;y*8B6Gt7s4y*K0H2&=QE9%lFNtM|OWV6S(V-JdOa_`B+U-vaf%P7wRD+1SK7 z%Hr|S5ae#;W1spE`?SYTu}9z1ct6`09jPr7Zmo*KdSs;GKn$6S`!+zTRq#4|)A6qSv+`X=j8I@uVyMQ%yOI5vaZAF&D^0JA1kD{-5W`#F#uae~@sAA17*f03z z6k)9n?wb(&e$e&f@&0U&%=QHj5#vioTxJc{!sTUkcHh3JvmR4Sf&rNO`eEH2fOWTD z9@gZXB)-ctmCr?bWUXPqvz$F>dnJ6_&F5 z=62Q8kCg%0*+%I9)p$mU&vVoRF?SX#wZmG#=3o{-6ihEH5{xfcjdfq=Ud?lG?}v~+ z@KJAd`;#7suPCc+_Se>0ZK`@|v7#c~JgQuVScQ(Cs0uT9Hm+o1CmxPfB=Qj^m26BZ XY+}&}KC=mD;X?Iq*l*cA?B4$ePY*3q literal 0 HcmV?d00001 diff --git a/ric_benchmarking/Bouncer/docs/index.rst b/ric_benchmarking/Bouncer/docs/index.rst new file mode 100644 index 0000000..0d56bfd --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/index.rst @@ -0,0 +1,32 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + +Welcome to O-RAN SC Bouncer xAPP Documentation +======================================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + overview.rst + release-notes.rst + installation-guide.rst + user-guide.rst + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/ric_benchmarking/Bouncer/docs/installation-guide.rst b/ric_benchmarking/Bouncer/docs/installation-guide.rst new file mode 100644 index 0000000..75e2e35 --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/installation-guide.rst @@ -0,0 +1,77 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + +Installation Guide +================== + +.. contents:: + :depth: 3 + :local: + +Abstract +-------- + +This document describes how to install the Bouncer xAPP. + +Version history + ++--------------------+--------------------+--------------------+--------------------+ +| **Date** | **Ver.** | **Organization** | **Comment** | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ +| 2020-11-17 |1.0.0 |HCL Technologies | Cherry Release | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ + + +Introduction +------------ + +This document provides guidelines on how to install and configure the Bouncer xAPP in various environments/operating modes. +The audience of this document is assumed to have good knowledge in RIC Platform. + + +Preface +------- +The Bouncer xAPP can be run directly as a Linux binary, as a docker image, or in a pod in a Kubernetes environment. The first +two can be used for testing/evaluation. The last option is how an xAPP is deployed in the RAN Intelligent Controller environment. +This document covers all three methods. + + + + +Software Installation and Deployment +------------------------------------ +The build process assumes a Linux environment with a gcc (>= 4.0) compatible compiler and has been tested on Ubuntu. For building docker images, +the Docker environment must be present in the system. + + +Build Process +~~~~~~~~~~~~~ +The Bouncer xAPP can be either tested as a Linux binary or as a docker image. + 1. **Linux binary**: + The Bouncer xAPP may be compiled and invoked directly. Pre-requisite software packages that must be installed prior to compiling are documented in the Dockerfile in the repository. README file in the repository mentions the steps to be followed to make "b-xapp-main" binary. + + 2. **Docker Image**: From the root of the repository, run *docker --no-cache build -t ./* . + + +Deployment +~~~~~~~~~~ +**Invoking xAPP docker container directly** (not in RIC Kubernetes env.): + xAPP descriptor(config-file.json) is available say under directory /home/ubuntu/config-file.json, the docker image can be invoked as *docker run --net host -it --rm -v "/home/test-config:/opt/ric/config" --name "B-xAPP" *. + + diff --git a/ric_benchmarking/Bouncer/docs/overview.rst b/ric_benchmarking/Bouncer/docs/overview.rst new file mode 100644 index 0000000..d3a37db --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/overview.rst @@ -0,0 +1,38 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + + +Bouncer xAPP Overview +================================ + +The Bouncer xAPP repository contains open-source code for a prototype xAPP for near real-time +RAN Intelligent Controller. The Bouncer xAPP aims to provide basic RIC Benchmarking implementation of : + +-E2 interfaces interactions. + +-xAPP Configuration management. + +-E2 subscription handling + +-Receiving E2 RIC Indication + + +The Bouncer xAPP code is intended to follow xAPP C++ Framework to implement the prototype. + + + + diff --git a/ric_benchmarking/Bouncer/docs/release-notes.rst b/ric_benchmarking/Bouncer/docs/release-notes.rst new file mode 100644 index 0000000..ece382c --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/release-notes.rst @@ -0,0 +1,88 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +Release Notes +============= + + +This document provides the release notes for the Bronze Release of the Bouncer xAPP. + +.. contents:: + :depth: 3 + :local: + + +Version history +--------------- + ++--------------------+--------------------+--------------------+--------------------+ +| **Date** | **Ver.** | **Organization** | **Comment** | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ +| 2020-11-18 | 1.0.0 | HCL Technologies | First draft | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ + + + +Summary +------- + +The Bronze release of the Bouncer xAPP demonstrates E2 interface interactions, persistent storage read-write, RMR and E2 Subscription handling. +Bouncer xAPP uses its Bouncer E2SM (can be found at /src/xapp-asn/e2sm/) for ASN PDUs. + + +Release Data +------------ + ++--------------------------------------+--------------------------------------+ +| **Project** | RAN Intelligent Controller | +| | | ++--------------------------------------+--------------------------------------+ +| **Repo/commit-ID** | ric-app/benchmarking | +| | | ++--------------------------------------+--------------------------------------+ +| **Release designation** | Cherry | +| | | ++--------------------------------------+--------------------------------------+ +| **Release date** | 2020-11-18 | +| | | ++--------------------------------------+--------------------------------------+ +| **Purpose of the delivery** | open-source Bouncer xAPP | +| | | +| | | ++--------------------------------------+--------------------------------------+ + +Components +---------- + +- *src/* contains the main source code. Under that directory : + + + *xapp.hpp, xapp.cc* is generic class which implements all the xAPP functionalities for xapp developer to pick and choose. + + *xapp-utils/* contains generic classes for - persistent data management, configuration management, RMR send/receive etc. + + *xapp-asn/* contains generic classes for generating/processing ASN1 E2AP and E2SM messages. + + *xapp-mgmt/* contains code specific xapp management of subscriptions and received messages. + + + + +Limitations +----------- +- The Bouncer xAPP target RIC Benchmarking usecase to determine the latency/thoughput in the RAN-RIC interaction. + +- The subscription process assumes, on sending subscription request results in valid subscription response and receiving the message indication. + +- The Bouncer xAPP address RIC Benchmarking usecase doesn't address A1 policy and SDL persistent data storage in particular. diff --git a/ric_benchmarking/Bouncer/docs/requirements-docs.txt b/ric_benchmarking/Bouncer/docs/requirements-docs.txt new file mode 100644 index 0000000..09a0c1c --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/requirements-docs.txt @@ -0,0 +1,5 @@ +sphinx +sphinx-rtd-theme +sphinxcontrib-httpdomain +recommonmark +lfdocs-conf diff --git a/ric_benchmarking/Bouncer/docs/user-guide.rst b/ric_benchmarking/Bouncer/docs/user-guide.rst new file mode 100644 index 0000000..eec0bef --- /dev/null +++ b/ric_benchmarking/Bouncer/docs/user-guide.rst @@ -0,0 +1,202 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + +============================================================================================ +Bouncer xAPP (C++) +============================================================================================ +-------------------------------------------------------------------------------------------- +User's Guide +-------------------------------------------------------------------------------------------- + +Introduction +============================================================================================ + +The RIC platform provides set of functions that the xAPPs can use to accomplish their tasks. +The Bouncer xAPP is envisioned to provide xAPP developers, examples of implementing these sets of functions. + +Bouncer xAPP Features +============================================================================================ + +RIC Platform provides many APIs and libraries to aid the development of xAPPs. All xAPPs will have some custom +processing functional logic core to the xApp and some additional non-functional platform related processing using +these APIs and libraries. Bouncer xAPP attempts to show the usage of such additional platform processing using RIC platform APIs and libraries. + + +The Bouncer xApp demonstrates how an xApp uses E2 interfaces and near-ric platform for the RIC Benchmarking implementation. +The following paragraphs cover the various steps involved to create an Bouncer xApp instance, setting its configuration, +retrieving R-NIB data, sending subscription, connecting SDL, and usage of "Bouncer SM" + +Bouncer Creation +============================================================================================ + +The creation of the xApp instance is as simple as invoking +the object's constructor with two required parameters: + + +Bouncer xAPP, may choose to create following objects for obtaining desired set of functionalities provided under xapp-utils: + +XappRmr +-------------------------------------------------------------------------------------------- +An xAPP can have the capability of receiving and sending rmr messages. This is achieved by creating an XappRmr object. The constructor of xAPPRMR object requires xAPP developer to provide +xAPP's listening port and developer configurable number of attempts need to be made to send the message. The key functionalities of the class being : + +1. Setting RMR initial context: ...xapp_rmr_init(...) + +2. Sending RMR message: ...xapp_rmr_send(xapp_rmr_header, void*) + +3. Receiving RMR message: ...xapp_rmr_receive(msghandler,...) + +The RMR Header can be defined using xapp_rmr_header : +:: + + typedef struct{ + struct timespec ts; + int32_t message_type; //mandatory + int32_t state; + int32_t payload_length; //mandatory + unsigned char sid[RMR_MAX_SID]; + unsigned char src[RMR_MAX_SRC]; + unsigned char meid[RMR_MAX_MEID]; + + } xapp_rmr_header; + +Except for message type and payload length, its developers prerogative to use remaining header information. +The XappMsgHandler (msghandler) instance in xapp_rmr_receive function handles received messages. The handling of messages is based on +the usecase catered by a xAPP. Hence, XappMsgHandler class used in Bouncer xAPP is not very comprehensive and addresses only Healthcheck Messages. + +XappSettings +------------------------------------------------------------------------------------------- +An xAPP has the capability to use environment variables or xapp-descriptor information as its configuration settings +creating XappSettings object, whose key functions being : + +1. Loading Default Settings: ...loadDefaultSettings() + +2. Loading Environment Variables: ...loadEnvVarSettings() + +3. Loading Command Line Settings: ...loadCmdlineSettings(argc, argv) + + + +Bouncer E2 Message Handling +============================================================================================ +Helper Objects +-------------------------------------------------------------------------------------------- +Bouncer xAPP creates wrapper datastructures mirroring ASN and JSON messages. These datastructures facilitate processing of +E2 messages in the xAPP. A sample helper object for Health Check message being: +:: + + struct a1_policy_helper{ + std::string operation; + std::string policy_type_id; + std::string policy_instance_id; + std::string handler_id; + std::string status; + }; + +And a sample E2AP Control datastructure: +:: + + struct ric_control_helper{ + ric_control_helper(void):req_id(1), req_seq_no(1), func_id(0), action_id(1), control_ack(-1), cause(0), sub_cause(0), control_status(1), control_msg(0), control_msg_size(0), control_header(0), control_header_size(0), call_process_id(0), call_process_id_size(0){}; + long int req_id, req_seq_no, func_id, action_id, control_ack, cause, sub_cause, control_status; + + unsigned char* control_msg; + size_t control_msg_size; + + unsigned char* control_header; + size_t control_header_size; + + unsigned char *call_process_id; + size_t call_process_id_size; + + }; + +As mentioned, these datastructures are very much tied to the message specifications. + + + +ASN Encoding/Decoding +-------------------------------------------------------------------------------------------- +RIC platform provided ASN1C (modified) library is used for processing ASN1 messages. Bouncer xAPP, for each +ASN message type, uses a class which is responsible for handling a particular message type. +The class encapsulates, the APIs and datastructures used in ASN1C using helper objects. For example: +:: + + class ric_control_response{ + ... + bool encode_e2ap_control_response(..., ric_control_helper &); + bool set_fields(..., ric_control_helper &); + bool get_fields(..., ric_control_helper &); + ... + } + +Note, the helper objects and message type processing classes can be found under xapp-asn subdirectories. + +E2AP Subscription +-------------------------------------------------------------------------------------------- +In Bouncer xAPP, we consider sunny-side scenario, in which for a E2AP subscription request sent, it is assumed, +that Bouncer xAPP will be receiving E2AP subscription response. Handling advanced subscription (class SubscriptionHandler) flows is out of the +scope of Bouncer xAPP. Current form of class SubscriptionHandler has following key functionalities: + +1. manage_subscription_request(...) + +2. manage_subscription_response(...) + + +The manage_subscription_request function waits for the response for a specified time for subscription response +and if no response is received within a specified time, gives a time out error message. A subscription message +is created using ASN Encodong/Decoding and Helper classes. (Refer test_sub.h). Bouncer xAPP sends the subscriptions based +on the gNodeB IDs received from RNIB. Please refer following function in xapp.* for RNIB transactions: set_rnib_gnblist(...) + + +E2SM Subscription, Indication, Control +-------------------------------------------------------------------------------------------- +Bouncer E2SM (e2sm-Bouncer-v001.asn) is an example E2SM available in the docs directory. The Helper and +encoding/decoding classes are in xapp-asn/e2sm. Sample code for control message E2SM: +:: + + //ControlHeader + unsigned char header_buf[128]; + size_t header_buf_len = 128; + + //ControlMessage + unsigned char msg_buf[128]; + size_t msg_buf_len = 128; + + bool res; + + e2sm_control_helper e2sm_cntrldata; //helper object + e2sm_control e2sm_cntrl; //encoding/decoding object + + unsigned char msg[20] = "Bouncer"; + + e2sm_cntrldata.header = 1001; + e2sm_cntrldata.message = msg; + e2sm_cntrldata.message_len = strlen((const char*)e2sm_cntrldata.message); + + + // Encode the control header + res = e2sm_cntrl.encode_control_header(&header_buf[0], &header_buf_len, e2sm_cntrldata); + if(!res) + std::cout << e2sm_cntrl.get_error() << std::endl; + + // Encode the control message + res = e2sm_cntrl.encode_control_message(&msg_buf[0], &msg_buf_len, e2sm_cntrldata); + if(!res) + std::cout << e2sm_cntrl.get_error() << std::endl; + + diff --git a/ric_benchmarking/Bouncer/init/config-file.json b/ric_benchmarking/Bouncer/init/config-file.json new file mode 100644 index 0000000..c714485 --- /dev/null +++ b/ric_benchmarking/Bouncer/init/config-file.json @@ -0,0 +1,42 @@ + { + "xapp_name": "bouncer-xapp", + "version": "1.0.0", + "containers": [ + { + "name": "bouncer-xapp", + "image": { + "registry": "nexus3.o-ran-sc.org:10002", + "name": "o-ran-sc/ric-app-bouncer", + "tag": "1.0.0" + } + } + ], + "messaging": { + "ports": [ + { + "name": "rmr-data", + "container": "bouncer-xapp", + "port": 4560, + + "rxMessages": ["RIC_SUB_RESP", "RIC_INDICATION"], + "txMessages": ["RIC_SUB_REQ"], + "policies": [1], + "description": "rmr receive data port for Bouncer xApp" + }, + { + "name": "rmr-route", + "container": "bouncer-xapp", + "port": 4561, + "description": "rmr route port for Bouncer xApp" + } + ] + }, + "rmr": { + "protPort": "tcp:4560", + "maxSize": 2072, + "numWorkers": 1, + "txMessages": ["RIC_SUB_REQ"], + "rxMessages": ["RIC_SUB_RESP", "RIC_INDICATION"], + "policies": [1] + } + } diff --git a/ric_benchmarking/Bouncer/init/init_script.py b/ric_benchmarking/Bouncer/init/init_script.py new file mode 100644 index 0000000..d645227 --- /dev/null +++ b/ric_benchmarking/Bouncer/init/init_script.py @@ -0,0 +1,132 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +# This initialization script reads in a json from the specified config map path +# to set up the initializations (route config map, variables etc) for the main +# xapp process + +import json; +import sys; +import os; +import signal; +import time; +import ast; + +def signal_handler(signum, frame): + print("Received signal {0}\n".format(signum)); + if(xapp_subprocess == None or xapp_pid == None): + print("No xapp running. Quiting without sending signal to xapp\n"); + else: + print("Sending signal {0} to xapp ...".format(signum)); + xapp_subprocess.send_signal(signum); + + +def parseConfigJson(config): + + for k1 in config.keys(): + if k1 in ParseSection: + result = ParseSection[k1](config); + if result == False: + return False; + + +# for k2 in config[k1].keys(): + #print(k2); +# if k2 in ParseSection: +# result = ParseSection[k2](config[k1]); +# if result == False: +# return False; + + + +def getMessagingInfo(config): + if 'messaging' in config.keys() and 'ports' in config['messaging'].keys(): + port_list = config['messaging']['ports'] + for portdesc in port_list : + if 'port' in portdesc.keys() and 'name' in portdesc.keys() and portdesc['name'] == 'rmr-data': + lport = portdesc['port'] + # Set the environment variable + os.environ["BOUNCER_PORT"] = str(lport) + return True; + if lport == 0: + print("Error! No valid listening port"); + return False; + +def getXappName(config): + myKey = "xapp_name"; + if myKey not in config.keys(): + print(("Error ! No information found for {0} in config\n".format(myKey))); + return False; + + xapp_name = config[myKey]; + print("Xapp Name is: " + xapp_name); + os.environ["XAPP_NAME"] = xapp_name; + +default_routing_file = "/tmp/routeinfo/routes.txt"; +lport = 0; +ParseSection = {}; +ParseSection["xapp_name"] = getXappName; +ParseSection["messaging"] = getMessagingInfo; + + +#================================================================ +if __name__ == "__main__": + + import subprocess; + cmd = ["/usr/local/bin/b_xapp_main"]; + + if len(sys.argv) > 1: + config_file = sys.argv[1]; + else: + print("Error! No configuration file specified\n"); + sys.exit(1); + + if len(sys.argv) > 2: + cmd[0] = sys.argv[2]; + + with open(config_file, 'r') as f: + try: + config = json.load(f); + except Exception as e: + print(("Error loading json file from {0}. Reason = {1}\n".format(config_file, e))); + sys.exit(1); + + result = parseConfigJson(config); + time.sleep(10); + if result == False: + print("Error parsing json. Not executing xAPP"); + sys.exit(1); + + else: + + # Register signal handlers + signal.signal(signal.SIGINT, signal_handler); + signal.signal(signal.SIGTERM, signal_handler); + + # Start the xAPP + #print("Executing xAPP ...."); + xapp_subprocess = subprocess.Popen(cmd, shell = False, stdin=None, stdout=None, stderr = None); + xapp_pid = xapp_subprocess.pid; + + # Periodically poll the process every 5 seconds to check if still alive + while(1): + xapp_status = xapp_subprocess.poll(); + if xapp_status == None: + time.sleep(5); + else: + print("XaPP terminated via signal {0}\n".format(-1 * xapp_status)); + break; + diff --git a/ric_benchmarking/Bouncer/init/routes.txt b/ric_benchmarking/Bouncer/init/routes.txt new file mode 100644 index 0000000..4d7de5f --- /dev/null +++ b/ric_benchmarking/Bouncer/init/routes.txt @@ -0,0 +1,5 @@ +newrt|start +rte|20011|service-ricplt-a1mediator-rmr.ricplt:4562 +rte|20012|service-ricplt-a1mediator-rmr.ricplt:4562 +rte|12010|service-ricplt-submgr-rmr.ricplt:4560 +newrt|end diff --git a/ric_benchmarking/Bouncer/init/schema.json b/ric_benchmarking/Bouncer/init/schema.json new file mode 100644 index 0000000..7ddc84d --- /dev/null +++ b/ric_benchmarking/Bouncer/init/schema.json @@ -0,0 +1,218 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://example.com/root.json", + "type": "object", + "title": "The Root Schema", + "required": [ + "service_ports", + "rmr", + "envs" + ], + "properties": { + "service_ports": { + "$id": "#/properties/service_ports", + "type": "object", + "title": "The Service_ports Schema", + "required": [ + "xapp_port", + "rmr_port" + ], + "properties": { + "xapp_port": { + "$id": "#/properties/service_ports/properties/xapp_port", + "type": "integer", + "title": "The Xapp_port Schema", + "default": 0, + "examples": [ + 4560 + ] + }, + "rmr_port": { + "$id": "#/properties/service_ports/properties/rmr_port", + "type": "integer", + "title": "The Rmr_port Schema", + "default": 0, + "examples": [ + 4561 + ] + } + } + }, + "rmr": { + "$id": "#/properties/rmr", + "type": "object", + "title": "The Rmr Schema", + "required": [ + "protPort", + "maxSize", + "numWorkers", + "txMessages", + "rxMessages", + "file_path", + "contents" + ], + "properties": { + "protPort": { + "$id": "#/properties/rmr/properties/protPort", + "type": "string", + "title": "The Protport Schema", + "default": "", + "examples": [ + "tcp:4560" + ], + "pattern": "^(.*)$" + }, + "maxSize": { + "$id": "#/properties/rmr/properties/maxSize", + "type": "integer", + "title": "The Maxsize Schema", + "default": 0, + "examples": [ + 2072 + ] + }, + "numWorkers": { + "$id": "#/properties/rmr/properties/numWorkers", + "type": "integer", + "title": "The Numworkers Schema", + "default": 0, + "examples": [ + 1 + ] + }, + "txMessages": { + "$id": "#/properties/rmr/properties/txMessages", + "type": "array", + "title": "The Txmessages Schema", + "items": { + "$id": "#/properties/rmr/properties/txMessages/items", + "type": "string", + "title": "The Items Schema", + "default": "", + "examples": [ + "RIC_SUB_REQ", + "RIC_SUB_DEL_REQ" + ], + "pattern": "^(.*)$" + } + }, + "rxMessages": { + "$id": "#/properties/rmr/properties/rxMessages", + "type": "array", + "title": "The Rxmessages Schema", + "items": { + "$id": "#/properties/rmr/properties/rxMessages/items", + "type": "string", + "title": "The Items Schema", + "default": "", + "examples": [ + "RIC_SUB_RESP", + "RIC_SUB_FAILURE", + "RIC_SUB_DEL_RESP", + "RIC_SUB_DEL_FAILURE", + "RIC_INDICATION" + ], + "pattern": "^(.*)$" + } + }, + "file_path": { + "$id": "#/properties/rmr/properties/file_path", + "type": "string", + "title": "The File_path Schema", + "default": "", + "examples": [ + "/tmp/routeinfo/routes.txt" + ], + "pattern": "^(.*)$" + }, + "contents": { + "$id": "#/properties/rmr/properties/contents", + "type": "string", + "title": "The Contents Schema", + "default": "", + "examples": [ + "newrt|start\nrte|0|localhost:4560\nrte|2|localhost:4591\nrte|10002|localhost:4560\nrte|10005|localhost:4560\nrte|10003|localhost:4591\nrte|12010|localhost:4591\nrte|12020|localhost:4591\nrte|12011|localhost:4560\nrte|12012|localhost:4560\nrte|12021|localhost:4560\nrte|12022|localhost:4560\nrte|20000|localhost:4560\nrte|20001|localhost:4566\nnewrt|end " + ], + "pattern": "^(.*)$" + } + } + }, + "envs": { + "$id": "#/properties/envs", + "type": "object", + "title": "The Envs Schema", + "required": [ + "gNodeB", + "THREADS", + "VES_SCHEMA_FILE", + "SAMPLE_FILE", + "VES_COLLECTOR_URL", + "VES_MEAUSUREMENT_INTERVAL" + ], + "properties": { + "gNodeB": { + "$id": "#/properties/envs/properties/gNodeB", + "type": "string", + "title": "The Gnodeb Schema", + "default": "", + "examples": [ + "NYC123" + ], + "pattern": "^(.*)$" + }, + "THREADS": { + "$id": "#/properties/envs/properties/THREADS", + "type": "string", + "title": "The Threads Schema", + "default": "", + "examples": [ + "1" + ], + "pattern": "^(.*)$" + }, + "VES_SCHEMA_FILE": { + "$id": "#/properties/envs/properties/VES_SCHEMA_FILE", + "type": "string", + "title": "The Ves_schema_file Schema", + "default": "", + "examples": [ + "/etc/xapp/ves_schema.json" + ], + "pattern": "^(.*)$" + }, + "SAMPLE_FILE": { + "$id": "#/properties/envs/properties/SAMPLE_FILE", + "type": "string", + "title": "The Sample_file Schema", + "default": "", + "examples": [ + "/etc/xapp/samples.json" + ], + "pattern": "^(.*)$" + }, + "VES_COLLECTOR_URL": { + "$id": "#/properties/envs/properties/VES_COLLECTOR_URL", + "type": "string", + "title": "The Ves_collector_url Schema", + "default": "", + "examples": [ + "127.0.0.1:6350" + ], + "pattern": "^(.*)$" + }, + "VES_MEAUSUREMENT_INTERVAL": { + "$id": "#/properties/envs/properties/VES_MEAUSUREMENT_INTERVAL", + "type": "string", + "title": "The Ves_meausurement_interval Schema", + "default": "", + "examples": [ + "10" + ], + "pattern": "^(.*)$" + } + } + } + } +} + diff --git a/ric_benchmarking/Bouncer/releases/container-release-app_hw.yaml b/ric_benchmarking/Bouncer/releases/container-release-app_hw.yaml new file mode 100644 index 0000000..9688ee9 --- /dev/null +++ b/ric_benchmarking/Bouncer/releases/container-release-app_hw.yaml @@ -0,0 +1,11 @@ +--- +distribution_type: container +container_release_tag: 1.0.1 +container_pull_registry: nexus3.o-ran-sc.org:10004 +container_push_registry: nexus3.o-ran-sc.org:10002 +project: ric-app/benchmarking +ref: +containers: + - name: ric-app-benchmarking + version: 1.0.1 + diff --git a/ric_benchmarking/Bouncer/rmr-version.yaml b/ric_benchmarking/Bouncer/rmr-version.yaml new file mode 100644 index 0000000..ceaf505 --- /dev/null +++ b/ric_benchmarking/Bouncer/rmr-version.yaml @@ -0,0 +1,3 @@ +# Communicate to CI which version of RMR to install in the build/vet environment +--- +version: 4.0.5 diff --git a/ric_benchmarking/Bouncer/schemas/b_xapp-policy.json b/ric_benchmarking/Bouncer/schemas/b_xapp-policy.json new file mode 100644 index 0000000..3ab4438 --- /dev/null +++ b/ric_benchmarking/Bouncer/schemas/b_xapp-policy.json @@ -0,0 +1,22 @@ +{ + "downstream_policy_message": { + "policy_type_id":21000, + "operation":"CREATE", + "policy_instance_id":"Bouncer", + "payload":{ + "class":12, + "enforce":true, + "window_length":20, + "blocking_rate":20, + "trigger_threshold":10 + } + }, + + "notify_policy_message": { + "policy_instance_id":"Bouncer", + "policy_type_id":21000, + "status":"OK", + "handler_id":"BxAPP1234" + } +} + diff --git a/ric_benchmarking/Bouncer/schemas/b_xapp-ves.json b/ric_benchmarking/Bouncer/schemas/b_xapp-ves.json new file mode 100644 index 0000000..8897ebd --- /dev/null +++ b/ric_benchmarking/Bouncer/schemas/b_xapp-ves.json @@ -0,0 +1,30 @@ +{ + + "metrics": { + "event": { + "commonEventHeader": { + "startEpochMicrosec": 1542231546086613, + "eventId": "Bouncer Requests", + "eventType": "Bouncer Request Rate", + "priority": "Normal", + "version": "4.0.1", + "reportingEntityName": "Bouncer xAPP", + "sequence": 0, + "domain": "measurement", + "lastEpochMicrosec": 1542231556086613, + "eventName": "Measurement_vGMUX", + "sourceName": "bouncer-xapp", + "vesEventListenerVersion": "7.0.1" + }, + "measurementFields": { + "additionalFields":{ + "Class Id":1, + "Bouncer Request Count":"100", + "Bouncer Accept Count":"10" + }, + "measurementInterval":60, + "measurementFieldsVersion":"4.0" + } + } + } +} diff --git a/ric_benchmarking/Bouncer/src/Makefile b/ric_benchmarking/Bouncer/src/Makefile new file mode 100644 index 0000000..808bafe --- /dev/null +++ b/ric_benchmarking/Bouncer/src/Makefile @@ -0,0 +1,79 @@ +CXX:= g++ --std=c++14 -O2 -L/usr/local/lib +CC:= gcc -O2 -L/usr/local/lib + +SRC:=./ +B_SRC:=./ +UTILSRC=./xapp-utils +MSGSRC:=./xapp-mgmt + +ASNSRC:=../asn1c_defs +E2APSRC:=./xapp-asn/e2ap +E2SMSRC:=./xapp-asn/e2sm + +####### Logging library and flags +CLOGFLAGS:= `pkg-config mdclog --cflags` +LOG_LIBS:= `pkg-config mdclog --libs` +CURL_LIBS:= `pkg-config libcurl --libs` +RNIB_LIBS:= -pthread /usr/local/include/rnib/rnibreader.a +######## Keep include dirs separate so we have transparency + + +BASEFLAGS= -Wall -std=c++14 $(CLOGFLAGS) +C_BASEFLAGS= -Wall $(CLOGFLAGS) -DASN_DISABLE_OER_SUPPORT + +XAPPFLAGS= -I./ +B_FLAGS= -I./ +UTILFLAGS= -I$(UTILSRC) +MSGFLAGS= -I$(MSGSRC) + +ASNFLAGS=-I$(ASNSRC) -DASN_DISABLE_OER_SUPPORT +E2APFLAGS = -I$(E2APSRC) +E2SMFLAGS = -I$(E2SMSRC) + +########libs + +LIBS= -lsdl -lrmr_si -lpthread -lm $(LOG_LIBS) $(CURL_LIBS) $(RNIB_LIBS) +COV_FLAGS= -fprofile-arcs -ftest-coverage + +####### +B_XAPP_SRC= b_xapp_main.cc +XAPP_SRC= xapp.cc +UTIL_SRC= $(wildcard $(UTILSRC)/*.cc) +MSG_SRC= $(wildcard $(MSGSRC)/*.cc) + +E2AP_SRC= $(wildcard $(E2APSRC)/*.cc) +E2SM_SRC= $(wildcard $(E2SMSRC)/*.cc) +ASN1C_SRC= $(wildcard $(ASNSRC)/*.c) + +##############Objects +UTIL_OBJ=${UTIL_SRC:.cc=.o} +XAPP_OBJ=${XAPP_SRC:.cc=.o} +B_XAPP_OBJ= ${B_XAPP_SRC:.cc=.o} +MSG_OBJ= ${MSG_SRC:.cc=.o} + +E2AP_OBJ = $(E2AP_SRC:.cc=.o) +E2SM_OBJ = $(E2SM_SRC:.cc=.o) +ASN1C_MODULES = $(ASN1C_SRC:.c=.o) + +$(ASN1C_MODULES): export CFLAGS = $(C_BASEFLAGS) $(ASNFLAGS) +$(UTIL_OBJ):export CPPFLAGS=$(BASEFLAGS) $(UTILFLAGS) $(E2APFLAGS) $(E2SMFLAGS) $(ASNFLAGS) $(MSGFLAGS) + +$(MSG_OBJ):export CPPFLAGS=$(BASEFLAGS) $(MSGFLAGS) $(ASNFLAGS) $(E2APFLAGS) $(E2SMFLAGS) +$(E2AP_OBJ): export CPPFLAGS = $(BASEFLAGS) $(ASNFLAGS) $(E2APFLAGS) +$(E2SM_OBJ): export CPPFLAGS = $(BASEFLAGS) $(ASNFLAGS) $(E2SMFLAGS) +$(XAPP_OBJ): export CPPFLAGS = $(BASEFLAGS) $(XAPPFLAGS) $(UTILFLAGS) $(MSGFLAGS) $(E2APFLAGS) $(E2SMFLAGS) $(ASNFLAGS) + +$(B_XAPP_OBJ):export CPPFLAGS=$(BASEFLAGS) $(B_FLAGS) $(XAPPFLAGS) $(UTILFLAGS) $(MSGFLAGS) $(E2APFLAGS) $(E2SMFLAGS) $(ASNFLAGS) + +OBJ= $(B_XAPP_OBJ) $(UTIL_OBJ) $(MSG_OBJ) $(ASN1C_MODULES) $(E2AP_OBJ) $(E2SM_OBJ) $(XAPP_OBJ) + +print-% : ; @echo $* = $($*) + +b_xapp_main: $(OBJ) + $(CXX) -o $@ $(OBJ) $(LIBS) $(RNIBFLAGS) $(CPPFLAGS) $(CLOGFLAGS) + +install: b_xapp_main + install -D b_xapp_main /usr/local/bin/b_xapp_main + +clean: + -rm *.o $(ASNSRC)/*.o $(E2APSRC)/*.o $(UTILSRC)/*.o $(E2SMSRC)/*.o $(MSGSRC)/*.o $(SRC)/*.o b_xapp_main diff --git a/ric_benchmarking/Bouncer/src/README b/ric_benchmarking/Bouncer/src/README new file mode 100644 index 0000000..bfa9d1a --- /dev/null +++ b/ric_benchmarking/Bouncer/src/README @@ -0,0 +1,36 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +This repository consists of Bouncer Xapp developed in C++. Its envisioned to address simple RIC Benchmarking Xapp. +It is required to have following features: + +1) E2 Subscription Handling +2) SDL Access +3) RMR Health Check +4) RIC Indication +5) Throughput/Latency of RAN-RIC interaction. + + + + +Steps for installation/running Bouncer Xapp. + +$ source ./run_xapp.sh +$ make +$ ./b_xapp_main diff --git a/ric_benchmarking/Bouncer/src/b_xapp_main.cc b/ric_benchmarking/Bouncer/src/b_xapp_main.cc new file mode 100644 index 0000000..42d2d3e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/b_xapp_main.cc @@ -0,0 +1,93 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + +#include "xapp.hpp" + +void signalHandler( int signum ) { + cout << "Interrupt signal (" << signum << ") received.\n"; + exit(signum); +} + +int main(int argc, char *argv[]){ + + // Get the thread id + std::thread::id my_id = std::this_thread::get_id(); + std::stringstream thread_id; + std::stringstream ss; + + thread_id << my_id; + + mdclog_write(MDCLOG_INFO, "Starting thread %s", thread_id.str().c_str()); + + //get configuration + XappSettings config; + //change the priority depending upon application requirement + config.loadDefaultSettings(); + config.loadEnvVarSettings(); + config.loadCmdlineSettings(argc, argv); + + //Register signal handler to stop + signal(SIGINT, signalHandler); + signal(SIGTERM, signalHandler); + + //getting the listening port and xapp name info + std::string port = config[XappSettings::SettingName::BOUNCER_PORT]; + std::string name = config[XappSettings::SettingName::XAPP_NAME]; + + //initialize rmr + std::unique_ptr rmr = std::make_unique(port); + rmr->xapp_rmr_init(true); + + + //Create Subscription Handler if Xapp deals with Subscription. + //std::unique_ptr sub_handler = std::make_unique(); + + SubscriptionHandler sub_handler; + + //create Bouncer Xapp Instance. + std::unique_ptr b_xapp; + b_xapp = std::make_unique(std::ref(config),std::ref(*rmr)); + + mdclog_write(MDCLOG_INFO, "Created Bouncer Xapp Instance"); + //Startup E2 subscription + b_xapp->startup(sub_handler); + + sleep(10); + + + //start listener threads and register message handlers. + int num_threads = std::stoi(config[XappSettings::SettingName::THREADS]); + mdclog_write(MDCLOG_INFO, "Starting Listener Threads. Number of Workers = %d", num_threads); + + std::unique_ptr mp_handler = std::make_unique(config[XappSettings::SettingName::XAPP_ID], sub_handler); + + b_xapp->start_xapp_receiver(std::ref(*mp_handler)); + + sleep(1); + + + + while(1){ + sleep(1); + } + + return 0; +} + + + diff --git a/ric_benchmarking/Bouncer/src/routes.txt b/ric_benchmarking/Bouncer/src/routes.txt new file mode 100644 index 0000000..6012ac3 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/routes.txt @@ -0,0 +1,15 @@ +newrt|start +rte|100|127.0.0.1:4560 +rte|101|127.0.0.1:4560 +rte|20010|127.0.0.1:4560 +rte|20011|127.0.0.1:4560 +rte|20012|127.0.0.1:4560 +rte|12010|127.0.0.1:4560 +rte|12011|127.0.0.1:4560 +rte|12012|127.0.0.1:4560 +rte|12020|127.0.0.1:4560 +rte|12021|127.0.0.1:4560 +rte|12022|127.0.0.1:4560 +rte|12050|127.0.0.1:4560 +rte|12040|127.0.0.1:4560 +newrt|end diff --git a/ric_benchmarking/Bouncer/src/run_xapp.sh b/ric_benchmarking/Bouncer/src/run_xapp.sh new file mode 100644 index 0000000..5cca845 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/run_xapp.sh @@ -0,0 +1,20 @@ +#! /bin/bash + +export RMR_SEED_RT="routes.txt" +export RMR_RTG_SVC="9999" +export XAPP_NAME="BOUNCER_XAPP" +export BOUNCER_PORT="4560" +export MSG_MAX_BUFFER="2048" +export THREADS="1" +export VERBOSE="0" +export CONFIG_FILE="config/config-file.json" +export GNODEB="NYC123" +export XAPP_ID="3489-er492k-92389" +export VES_SCHEMA_FILE="schemas/b_xapp-ves.json" +export VES_COLLECTOR_URL="127.0.0.1:6350" +export VES_MEASUREMENT_INTERVAL="10" +export LOG_LEVEL="MDCLOG_ERR" +export OPERATING_MODE="CONTROL" + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.cc new file mode 100644 index 0000000..638b618 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.cc @@ -0,0 +1,266 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_control_request.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_control.hpp" + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +ric_control_request::ric_control_request(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (RICcontrolRequest_IEs_t *)calloc(NUM_CONTROL_REQUEST_IES, sizeof(RICcontrolRequest_IEs_t)); + assert(IE_array != 0); + + e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage; + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + + +}; + + +// Clear assigned protocolIE list from RIC control_request IE container +ric_control_request::~ric_control_request(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Control Request object memory"); + + RICcontrolRequest_t *ricControl_Request = &(initMsg->value.choice.RICcontrolRequest); + for(int i = 0; i < ricControl_Request->protocolIEs.list.size; i++){ + ricControl_Request->protocolIEs.list.array[i] = 0; + } + + if (ricControl_Request->protocolIEs.list.size > 0){ + free(ricControl_Request->protocolIEs.list.array); + ricControl_Request->protocolIEs.list.size = 0; + ricControl_Request->protocolIEs.list.count = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2AP Control Request object mempory"); + +} + + +bool ric_control_request::encode_e2ap_control_request(unsigned char *buf, size_t *size, ric_control_helper & dinput){ + + initMsg->procedureCode = ProcedureCode_id_RICcontrol; + initMsg->criticality = Criticality_ignore; + initMsg->value.present = InitiatingMessage__value_PR_RICcontrolRequest; + + bool res; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding control . Reason = " + error_string; + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_control_request::set_fields(InitiatingMessage_t *initMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (initMsg == 0){ + error_string = "Invalid reference for E2AP Control_Request message in set_fields"; + return false; + } + + RICcontrolRequest_t * ric_control_request = &(initMsg->value.choice.RICcontrolRequest); + ric_control_request->protocolIEs.list.count = 0; // reset + + // for(i = 0; i < NUM_CONTROL_REQUEST_IES;i++){ + // memset(&(IE_array[i]), 0, sizeof(RICcontrolRequest_IEs_t)); + // } + + // Mandatory IE + ie_index = 0; + RICcontrolRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICcontrolRequest_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + //ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Mandatory IE + ie_index = 1; + RICcontrolRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICcontrolRequest_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + + // Mandatory IE + ie_index = 2; + RICcontrolRequest_IEs_t *ies_richead = &IE_array[ie_index]; + ies_richead->criticality = Criticality_reject; + ies_richead->id = ProtocolIE_ID_id_RICcontrolHeader; + ies_richead->value.present = RICcontrolRequest_IEs__value_PR_RICcontrolHeader; + RICcontrolHeader_t *richeader_ie = &ies_richead->value.choice.RICcontrolHeader; + richeader_ie->buf = dinput.control_header; + richeader_ie->size = dinput.control_header_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Mandatory IE + ie_index = 3; + RICcontrolRequest_IEs_t *ies_indmsg = &IE_array[ie_index]; + ies_indmsg->criticality = Criticality_reject; + ies_indmsg->id = ProtocolIE_ID_id_RICcontrolMessage; + ies_indmsg->value.present = RICcontrolRequest_IEs__value_PR_RICcontrolMessage; + RICcontrolMessage_t *ricmsg_ie = &ies_indmsg->value.choice.RICcontrolMessage; + ricmsg_ie->buf = dinput.control_msg; + ricmsg_ie->size = dinput.control_msg_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Optional IE + ie_index = 4; + if (dinput.control_ack >= 0){ + RICcontrolRequest_IEs_t *ies_indtyp = &IE_array[ie_index]; + ies_indtyp->criticality = Criticality_reject; + ies_indtyp->id = ProtocolIE_ID_id_RICcontrolAckRequest; + ies_indtyp->value.present = RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest; + RICcontrolAckRequest_t *ricackreq_ie = &ies_indtyp->value.choice.RICcontrolAckRequest; + *ricackreq_ie = dinput.control_ack; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + } + + // Optional IE + ie_index = 5; + if(dinput.call_process_id_size > 0){ + RICcontrolRequest_IEs_t *ies_callprocid = &IE_array[ie_index]; + ies_callprocid->criticality = Criticality_reject; + ies_callprocid->id = ProtocolIE_ID_id_RICcallProcessID; + ies_callprocid->value.present = RICcontrolRequest_IEs__value_PR_RICcallProcessID; + RICcallProcessID_t *riccallprocessid_ie = &ies_callprocid->value.choice.RICcallProcessID; + riccallprocessid_ie->buf = dinput.call_process_id; + riccallprocessid_ie->size = dinput.call_process_id_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + } + return true; + +}; + + + + +bool ric_control_request:: get_fields(InitiatingMessage_t * init_msg, ric_control_helper &dout) +{ + if (init_msg == 0){ + error_string = "Invalid reference for E2AP Control_Request message in get_fields"; + return false; + } + + + for(int edx = 0; edx < init_msg->value.choice.RICcontrolRequest.protocolIEs.list.count; edx++) { + RICcontrolRequest_IEs_t *memb_ptr = init_msg->value.choice.RICcontrolRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICcontrolHeader): + dout.control_header = memb_ptr->value.choice.RICcontrolHeader.buf; + dout.control_header_size = memb_ptr->value.choice.RICcontrolHeader.size; + break; + + case (ProtocolIE_ID_id_RICcontrolMessage): + dout.control_msg = memb_ptr->value.choice.RICcontrolMessage.buf; + dout.control_msg_size = memb_ptr->value.choice.RICcontrolMessage.size; + break; + + case (ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + //dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (ProtocolIE_ID_id_RICcontrolAckRequest): + dout.control_ack = memb_ptr->value.choice.RICcontrolAckRequest; + break; + + default: + break; + } + + } + + return true; + +} + +InitiatingMessage_t * ric_control_request::get_message(void) { + return initMsg; +} diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.hpp new file mode 100644 index 0000000..2a2272c --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control.hpp @@ -0,0 +1,66 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_CONTROL_REQUEST_H_ +#define E2AP_RIC_CONTROL_REQUEST_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_control_helper.hpp" + +#define NUM_CONTROL_REQUEST_IES 6 + + +class ric_control_request{ + +public: + ric_control_request(void); + ~ric_control_request(void); + + bool encode_e2ap_control_request(unsigned char *, size_t *, ric_control_helper &); + InitiatingMessage_t * get_message (void) ; + bool set_fields(InitiatingMessage_t *, ric_control_helper &); + bool get_fields(InitiatingMessage_t *, ric_control_helper &); + std::string get_error(void) const {return error_string ; }; +private: + + E2AP_PDU_t * e2ap_pdu_obj; + InitiatingMessage_t *initMsg; + RICcontrolRequest_IEs_t *IE_array; + std::string error_string; + + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_CONTROL_REQUEST_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_helper.hpp new file mode 100644 index 0000000..d01013e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_helper.hpp @@ -0,0 +1,50 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef CONTROL_HELPER_H +#define CONTROL_HELPER_H + +// control and indication helper objects are very similar and can be merged into one +// currently leaving them as two distnict entities till final design becomes clear + +typedef struct ric_control_helper ric_control_helper; + +struct ric_control_helper{ + ric_control_helper(void):req_id(1), req_seq_no(1), func_id(0), action_id(1), control_ack(-1), cause(0), sub_cause(0), control_status(1), control_msg(0), control_msg_size(0), control_header(0), control_header_size(0), call_process_id(0), call_process_id_size(0){}; + + long int req_id, req_seq_no, func_id, action_id, control_ack, cause, sub_cause, control_status; + + unsigned char* control_msg; + size_t control_msg_size; + + unsigned char* control_header; + size_t control_header_size; + + unsigned char *call_process_id; + size_t call_process_id_size; + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.cc new file mode 100644 index 0000000..6b7c9b5 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.cc @@ -0,0 +1,415 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== + */ +/* + * ric_control_response.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_control_response.hpp" + +// Set up the initiating message and also allocate protocolIEs in container +// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly +// assign pointers to the array in ProtocolIE. However, this also leaves us on the +// hook to manually clear the memory + +ric_control_response::ric_control_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (SuccessfulOutcome_t * )calloc(1, sizeof(SuccessfulOutcome_t)); + assert(successMsg != 0); + + successMsg->procedureCode = ProcedureCode_id_RICcontrol; + successMsg->criticality = Criticality_reject; + successMsg->value.present = SuccessfulOutcome__value_PR_RICcontrolAcknowledge; + + + unsuccessMsg = 0; + unsuccessMsg = (UnsuccessfulOutcome_t * )calloc(1, sizeof(UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + + unsuccessMsg->procedureCode = ProcedureCode_id_RICcontrol; + unsuccessMsg->criticality = Criticality_reject; + unsuccessMsg->value.present = UnsuccessfulOutcome__value_PR_RICcontrolFailure; + + IE_array = 0; + IE_array = (RICcontrolAcknowledge_IEs_t *)calloc(NUM_CONTROL_ACKNOWLEDGE_IES, sizeof(RICcontrolAcknowledge_IEs_t)); + assert(IE_array != 0); + + RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + for(int i = 0; i < NUM_CONTROL_ACKNOWLEDGE_IES; i++){ + ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), &(IE_array[i])); + } + + + IE_failure_array = 0; + IE_failure_array = (RICcontrolFailure_IEs_t *)calloc(NUM_CONTROL_FAILURE_IES, sizeof(RICcontrolFailure_IEs_t)); + assert(IE_failure_array != 0); + + RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + for(int i = 0; i < NUM_CONTROL_FAILURE_IES; i++){ + ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), &(IE_failure_array[i])); + } + +}; + + +// Clear assigned protocolIE list from RIC control_request IE container +ric_control_response::~ric_control_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Control Response object memory"); + + RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + for(int i = 0; i < ric_acknowledge->protocolIEs.list.size; i++){ + ric_acknowledge->protocolIEs.list.array[i] = 0; + } + if (ric_acknowledge->protocolIEs.list.size > 0){ + free(ric_acknowledge->protocolIEs.list.array); + ric_acknowledge->protocolIEs.list.array = 0; + ric_acknowledge->protocolIEs.list.count = 0; + } + + RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + for(int i = 0; i < ric_failure->protocolIEs.list.size; i++){ + ric_failure->protocolIEs.list.array[i] = 0; + } + if (ric_failure->protocolIEs.list.size > 0){ + free(ric_failure->protocolIEs.list.array); + ric_failure->protocolIEs.list.array = 0; + ric_failure->protocolIEs.list.count = 0; + } + + free(IE_array); + free(IE_failure_array); + free(successMsg); + free(unsuccessMsg); + + e2ap_pdu_obj->choice.initiatingMessage = 0; + e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage; + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2AP Control Response object mempory"); +} + + +bool ric_control_response::encode_e2ap_control_response(unsigned char *buf, size_t *size, ric_control_helper & dinput, bool is_success){ + + bool res; + if (is_success){ + res = set_fields(successMsg, dinput); + } + else{ + res = set_fields(unsuccessMsg, dinput); + } + + if (!res){ + return false; + } + + + if (is_success){ + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + e2ap_pdu_obj->present = E2AP_PDU_PR_successfulOutcome ; + } + else{ + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + e2ap_pdu_obj->present = E2AP_PDU_PR_unsuccessfulOutcome ; + + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding control response. Reason = " + error_string; + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding E2AP Control response . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_control_response::set_fields(SuccessfulOutcome_t *successMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (successMsg == 0){ + error_string = "Invalid reference for E2AP Control Acknowledge in set_fields"; + return false; + } + + // for(i = 0; i < NUM_CONTROL_ACKNOWLEDGE_IES;i++){ + // memset(&(IE_array[i]), 0, sizeof(RICcontrolAcknowledge_IEs_t)); + // } + + //RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + //ric_acknowledge->protocolIEs.list.count = 0; + + ie_index = 0; + RICcontrolAcknowledge_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICcontrolAcknowledge_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + //ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ricreq); + + ie_index = 1; + RICcontrolAcknowledge_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICcontrolAcknowledge_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ranfunc); + + // ie_index = 2; + // RICcontrolAcknowledge_IEs_t *ies_riccallprocessid = &IE_array[ie_index]; + // ies_riccallprocessid->criticality = Criticality_reject; + // ies_riccallprocessid->id = ProtocolIE_ID_id_RICcallProcessID; + // ies_riccallprocessid->value.present = RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID; + // RICcallProcessID_t *riccallprocessid_ie = &ies_riccallprocessid->value.choice.RICcallProcessID; + // riccallprocessid_ie->buf = dinput.call_process_id; + // riccallprocessid_ie->size = dinput.call_process_id_size; + // ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_riccallprocessid); + + ie_index = 2; + RICcontrolAcknowledge_IEs_t *ies_ric_cause = &IE_array[ie_index]; + ies_ric_cause->criticality = Criticality_reject; + ies_ric_cause->id = ProtocolIE_ID_id_RICcontrolStatus; + ies_ric_cause->value.present = RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus; + ies_ric_cause->value.choice.RICcontrolStatus = dinput.control_status; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ric_cause); + + return true; + +}; + +bool ric_control_response::set_fields(UnsuccessfulOutcome_t *unsuccessMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (unsuccessMsg == 0){ + error_string = "Invalid reference for E2AP Control Failure in set_fields"; + return false; + } + + // for(i = 0; i < NUM_CONTROL_FAILURE_IES;i++){ + // memset(&(IE_failure_array[i]), 0, sizeof(RICcontrolFailure_IEs_t)); + // } + + //RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + //ric_failure->protocolIEs.list.count = 0; + + ie_index = 0; + RICcontrolFailure_IEs_t *ies_ricreq = &IE_failure_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICcontrolFailure_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &(ies_ricreq->value.choice.RICrequestID); + ricrequest_ie->ricRequestorID = dinput.req_id; + //ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ricreq); + + ie_index = 1; + RICcontrolFailure_IEs_t *ies_ranfunc = &IE_failure_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICcontrolFailure_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &(ies_ranfunc->value.choice.RANfunctionID); + *ranfunction_ie = dinput.func_id; + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ranfunc); + + // ie_index = 2; + // RICcontrolFailure_IEs_t *ies_riccallprocessid = &IE_failure_array[i]; + // ies_riccallprocessid->criticality = Criticality_reject; + // ies_riccallprocessid->id = ProtocolIE_ID_id_RICcallProcessID; + // ies_riccallprocessid->value.present = RICcontrolFailure_IEs__value_PR_RICcallProcessID; + // RICcallProcessID_t *riccallprocessid_ie = &(ies_riccallprocessid->value.choice.RICcallProcessID); + // riccallprocessid_ie->buf = dinput.call_process_id; + // riccallprocessid_ie->size = dinput.call_process_id_size; + // ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_riccallprocessid); + + ie_index = 2; + RICcontrolFailure_IEs_t *ies_ric_cause = &IE_failure_array[ie_index]; + ies_ric_cause->criticality = Criticality_ignore; + ies_ric_cause->id = ProtocolIE_ID_id_Cause; + ies_ric_cause->value.present = RICcontrolFailure_IEs__value_PR_Cause; + Cause_t * ric_cause = &(ies_ric_cause->value.choice.Cause); + ric_cause->present = (Cause_PR)dinput.cause; + + switch(dinput.cause){ + case Cause_PR_ricService: + ric_cause->choice.ricService = dinput.sub_cause; + break; + case Cause_PR_transport: + ric_cause->choice.transport = dinput.sub_cause; + break; + case Cause_PR_protocol: + ric_cause->choice.protocol= dinput.sub_cause; + break; + case Cause_PR_misc: + ric_cause->choice.misc = dinput.sub_cause; + break; + case Cause_PR_ricRequest: + ric_cause->choice.ricRequest = dinput.sub_cause; + break; + default: + std::cout <<"Error ! Illegal cause enum" << dinput.cause << std::endl; + return false; + } + + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ric_cause); + return true; + +}; + + + + +bool ric_control_response:: get_fields(SuccessfulOutcome_t * success_msg, ric_control_helper &dout) +{ + if (success_msg == 0){ + error_string = "Invalid reference for E2AP Control Acknowledge message in get_fields"; + return false; + } + + + for(int edx = 0; edx < success_msg->value.choice.RICcontrolAcknowledge.protocolIEs.list.count; edx++) { + RICcontrolAcknowledge_IEs_t *memb_ptr = success_msg->value.choice.RICcontrolAcknowledge.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + + case (ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + //dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (ProtocolIE_ID_id_Cause): + dout.control_status = memb_ptr->value.choice.RICcontrolStatus; + break; + + } + + } + + return true; + +} + + +bool ric_control_response:: get_fields(UnsuccessfulOutcome_t * unsuccess_msg, ric_control_helper &dout) +{ + if (unsuccess_msg == 0){ + error_string = "Invalid reference for E2AP Control Failure message in get_fields"; + return false; + } + + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICcontrolFailure.protocolIEs.list.count; edx++) { + RICcontrolFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICcontrolFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + + case (ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + //dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + + case (ProtocolIE_ID_id_Cause): + dout.cause = memb_ptr->value.choice.Cause.present; + switch(dout.cause){ + case Cause_PR_ricService : + dout.sub_cause = memb_ptr->value.choice.Cause.choice.ricService; + break; + + case Cause_PR_transport : + dout.sub_cause = memb_ptr->value.choice.Cause.choice.transport; + break; + + case Cause_PR_protocol : + dout.sub_cause = memb_ptr->value.choice.Cause.choice.protocol; + break; + + case Cause_PR_misc : + dout.sub_cause = memb_ptr->value.choice.Cause.choice.misc; + break; + + case Cause_PR_ricRequest : + dout.sub_cause = memb_ptr->value.choice.Cause.choice.ricRequest; + break; + + default: + dout.sub_cause = -1; + break; + } + + default: + break; + } + + } + + return true; + +} + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.hpp new file mode 100644 index 0000000..1d6af17 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_control_response.hpp @@ -0,0 +1,79 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_CONTROL_RESPONSE_H_ +#define E2AP_RIC_CONTROL_RESPONSE_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_control_helper.hpp" + +#define NUM_CONTROL_ACKNOWLEDGE_IES 3 +#define NUM_CONTROL_FAILURE_IES 3 + + +class ric_control_response{ + +public: + ric_control_response(void); + ~ric_control_response(void); + + bool encode_e2ap_control_response(unsigned char *, size_t *, ric_control_helper &, bool); + + + bool set_fields(SuccessfulOutcome_t *, ric_control_helper &); + bool get_fields(SuccessfulOutcome_t *, ric_control_helper &); + + bool set_fields(UnsuccessfulOutcome_t *, ric_control_helper &); + bool get_fields(UnsuccessfulOutcome_t *, ric_control_helper &); + + std::string get_error(void) const {return error_string ; }; + +private: + + E2AP_PDU_t * e2ap_pdu_obj; + SuccessfulOutcome_t * successMsg; + UnsuccessfulOutcome_t * unsuccessMsg; + + RICcontrolAcknowledge_IEs_t *IE_array; + RICcontrolFailure_IEs_t *IE_failure_array; + + std::string error_string; + + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_CONTROL_RESPONSE_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.cc new file mode 100644 index 0000000..c9f9130 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.cc @@ -0,0 +1,283 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_indication.hpp" + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +ric_indication::ric_indication(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (RICindication_IEs_t *)calloc(NUM_INDICATION_IES, sizeof(RICindication_IEs_t)); + assert(IE_array != 0); + + e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage; + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +ric_indication::~ric_indication(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Indication object memory"); + RICindication_t *ricIndication = &(initMsg->value.choice.RICindication); + for(int i = 0; i < ricIndication->protocolIEs.list.size; i++){ + ricIndication->protocolIEs.list.array[i] = 0; + } + if (ricIndication->protocolIEs.list.size > 0){ + free(ricIndication->protocolIEs.list.array); + ricIndication->protocolIEs.list.array = 0; + ricIndication->protocolIEs.list.count = 0; + ricIndication->protocolIEs.list.size = 0; + } + + free(IE_array); + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2AP Indication object mempory"); +} + + +bool ric_indication::encode_e2ap_indication(unsigned char *buf, size_t *size, ric_indication_helper & dinput){ + + initMsg->procedureCode = ProcedureCode_id_RICindication; + initMsg->criticality = Criticality_ignore; + initMsg->value.present = InitiatingMessage__value_PR_RICindication; + + bool res; + asn_enc_rval_t retval; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error encoding E2AP Indication message. Reason = " + error_string; + return false; + } + + // std::cout <<"Constraint check ok ...." << std::endl; + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding E2AP Indication . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_indication::set_fields(InitiatingMessage_t *initMsg, ric_indication_helper &dinput){ + unsigned int ie_index; + + if (initMsg == 0){ + error_string = "Invalid reference for E2AP Indication message in set_fields"; + return false; + } + + + RICindication_t * ric_indication = &(initMsg->value.choice.RICindication); + ric_indication->protocolIEs.list.count = 0; + + ie_index = 0; + + RICindication_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICindication_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + //ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 1; + RICindication_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICindication_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 2; + RICindication_IEs_t *ies_actid = &IE_array[ie_index]; + ies_actid->criticality = Criticality_reject; + ies_actid->id = ProtocolIE_ID_id_RICactionID; + ies_actid->value.present = RICindication_IEs__value_PR_RICactionID; + RICactionID_t *ricaction_ie = &ies_actid->value.choice.RICactionID; + *ricaction_ie = dinput.action_id; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 3; + RICindication_IEs_t *ies_ricsn = &IE_array[ie_index]; + ies_ricsn->criticality = Criticality_reject; + ies_ricsn->id = ProtocolIE_ID_id_RICindicationSN; + ies_ricsn->value.present = RICindication_IEs__value_PR_RICindicationSN; + RICindicationSN_t *ricsn_ie = &ies_ricsn->value.choice.RICindicationSN; + *ricsn_ie = dinput.indication_sn; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + + ie_index = 4; + RICindication_IEs_t *ies_indtyp = &IE_array[ie_index]; + ies_indtyp->criticality = Criticality_reject; + ies_indtyp->id = ProtocolIE_ID_id_RICindicationType; + ies_indtyp->value.present = RICindication_IEs__value_PR_RICindicationType; + RICindicationType_t *rictype_ie = &ies_indtyp->value.choice.RICindicationType; + *rictype_ie = dinput.indication_type; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 5; + RICindication_IEs_t *ies_richead = &IE_array[ie_index]; + ies_richead->criticality = Criticality_reject; + ies_richead->id = ProtocolIE_ID_id_RICindicationHeader; + ies_richead->value.present = RICindication_IEs__value_PR_RICindicationHeader; + RICindicationHeader_t *richeader_ie = &ies_richead->value.choice.RICindicationHeader; + richeader_ie->buf = dinput.indication_header; + richeader_ie->size = dinput.indication_header_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 6; + RICindication_IEs_t *ies_indmsg = &IE_array[ie_index]; + ies_indmsg->criticality = Criticality_reject; + ies_indmsg->id = ProtocolIE_ID_id_RICindicationMessage; + ies_indmsg->value.present = RICindication_IEs__value_PR_RICindicationMessage; + RICindicationMessage_t *ricmsg_ie = &ies_indmsg->value.choice.RICindicationMessage; + ricmsg_ie->buf = dinput.indication_msg; + ricmsg_ie->size = dinput.indication_msg_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + + // optional call process id .. + if (dinput.call_process_id_size > 0){ + ie_index = 7; + RICindication_IEs_t *ies_ind_callprocessid = &IE_array[ie_index]; + ies_ind_callprocessid->criticality = Criticality_reject; + ies_ind_callprocessid->id = ProtocolIE_ID_id_RICcallProcessID; + ies_ind_callprocessid->value.present = RICindication_IEs__value_PR_RICcallProcessID; + RICcallProcessID_t *riccallprocessid_ie = &ies_ind_callprocessid->value.choice.RICcallProcessID; + riccallprocessid_ie->buf = dinput.indication_msg; + riccallprocessid_ie->size = dinput.indication_msg_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + } + + return true; + +}; + + + + +bool ric_indication:: get_fields(InitiatingMessage_t * init_msg, ric_indication_helper &dout) +{ + if (init_msg == 0){ + error_string = "Invalid reference for E2AP Indication message in get_fields"; + return false; + } + + + for(int edx = 0; edx < init_msg->value.choice.RICindication.protocolIEs.list.count; edx++) { + RICindication_IEs_t *memb_ptr = init_msg->value.choice.RICindication.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICindicationHeader): + dout.indication_header = memb_ptr->value.choice.RICindicationHeader.buf; + dout.indication_header_size = memb_ptr->value.choice.RICindicationHeader.size; + break; + + case (ProtocolIE_ID_id_RICindicationMessage): + dout.indication_msg = memb_ptr->value.choice.RICindicationMessage.buf; + dout.indication_msg_size = memb_ptr->value.choice.RICindicationMessage.size; + break; + + case (ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + //dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (ProtocolIE_ID_id_RICindicationSN): + dout.indication_sn = memb_ptr->value.choice.RICindicationSN; + break; + + case (ProtocolIE_ID_id_RICindicationType): + dout.indication_type = memb_ptr->value.choice.RICindicationType; + break; + + case (ProtocolIE_ID_id_RICactionID): + dout.action_id = memb_ptr->value.choice.RICactionID; + break; + + case (ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + + default: + break; + } + + } + + return true; + +} + +InitiatingMessage_t * ric_indication::get_message(void) { + return initMsg; +} diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.hpp new file mode 100644 index 0000000..6c8abf1 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication.hpp @@ -0,0 +1,67 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_INDICATION_H_ +#define E2AP_RIC_INDICATION_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_indication_helper.hpp" + +#define NUM_INDICATION_IES 8 + + + +class ric_indication{ + +public: + ric_indication(void); + ~ric_indication(void); + + bool encode_e2ap_indication(unsigned char *, size_t *, ric_indication_helper &); + InitiatingMessage_t * get_message (void) ; + bool set_fields(InitiatingMessage_t *, ric_indication_helper &); + bool get_fields(InitiatingMessage_t *, ric_indication_helper &); + std::string get_error(void) const {return error_string ; }; + +private: + + E2AP_PDU_t * e2ap_pdu_obj; + InitiatingMessage_t *initMsg; + RICindication_IEs_t *IE_array; + std::string error_string; + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_INDICATION_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication_helper.hpp new file mode 100644 index 0000000..e319c9f --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/e2ap_indication_helper.hpp @@ -0,0 +1,47 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + + +#ifndef E2AP_INDICATION_HELPER_ +#define E2AP_INDICATION_HELPER_ + +typedef struct ric_indication_helper ric_indication_helper; + +struct ric_indication_helper{ + ric_indication_helper(void) : req_id(1), req_seq_no(1), func_id(0), action_id(1), indication_type(0), indication_sn(0), indication_msg(0), indication_msg_size(0), indication_header(0), indication_header_size(0), call_process_id(0), call_process_id_size(0) {}; + long int req_id, req_seq_no, func_id, action_id, indication_type, indication_sn; + + unsigned char* indication_msg; + size_t indication_msg_size; + + unsigned char* indication_header; + size_t indication_header_size; + + unsigned char *call_process_id; + size_t call_process_id_size; + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/generic_helpers.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/generic_helpers.hpp new file mode 100644 index 0000000..3e0c2df --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/generic_helpers.hpp @@ -0,0 +1,49 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#pragma once +#ifndef GENERIC_HELPERS +#define GENERIC_HELPERS + +#include + +/* Utilities */ + +class octet_helper { + +public: + octet_helper(void):_ref(NULL), _size(0){}; + octet_helper(const void *ref, int size):_ref(ref), _size(size){}; + void set_ref(const void *ref){ + _ref = ref; + } + + void set_size(size_t size){ + _size = size; + } + + const void * get_ref(void){return _ref ; }; + size_t get_size(void) const {return _size ; } ; + +private: + const void *_ref; + size_t _size; +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/response_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/response_helper.hpp new file mode 100644 index 0000000..e6aa65e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/response_helper.hpp @@ -0,0 +1,181 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_RESPONSE_HELPER_ +#define S_RESPONSE_HELPER_ + +#include +#include + +/* Simple structure to store action for RICaction of the Subscription response based on E2 v0.31 */ +struct ActionResponse { +public: + ActionResponse(int id): _is_admit(true), _id(id), _cause(-1), _sub_cause(-1){}; + ActionResponse(int id, int cause, int sub_cause): _is_admit(false), _id(id), _cause(cause), _sub_cause(sub_cause){}; + + int get_id() const{ + return _id; + }; + + int get_cause() const{ + return _cause; + }; + + int get_sub_cause() const{ + return _sub_cause; + }; + + bool is_admitted(void){ + return _is_admit; + }; + +private: + + bool _is_admit; + int _id, _cause, _sub_cause; + +}; + + +struct subscription_response_helper { + +public: + + using action_t = std::vector; + + subscription_response_helper(void){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + }; + + // copy operator + subscription_response_helper(const subscription_response_helper &he ){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + _req_id = he.get_request_id(); + _req_seq_no = he.get_req_seq(); + _func_id = he.get_function_id(); + + // Take care of the actions + for (auto const & e: *(he.get_admitted_list())){ + add_action(e.get_id()); + } + + for(auto const & e: *(he.get_not_admitted_list())){ + add_action(e.get_id(), e.get_cause(), e.get_sub_cause()); + }; + } + + + // assignment operator + void operator=(const subscription_response_helper & he){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + _req_id = he.get_request_id(); + _req_seq_no = he.get_req_seq(); + _func_id = he.get_function_id(); + + + // Take care of the actions + for (auto const & e: *(he.get_admitted_list())){ + add_action(e.get_id()); + } + + for(auto const & e: *(he.get_not_admitted_list())){ + add_action(e.get_id(), e.get_cause(), e.get_sub_cause()); + }; + + } + + action_t * get_admitted_list (void ) const {return _action_admitted_ref.get();}; + action_t * get_not_admitted_list (void ) const{return _action_not_admitted_ref.get();}; + + void set_request(int id, int seq_no){ + _req_id = id; + _req_seq_no = seq_no; + + }; + + void clear(void){ + _action_admitted_ref.get()->clear(); + _action_not_admitted_ref.get()->clear(); + } + + + void set_function_id(int id){ + _func_id = id; + }; + + void add_action(int id){ + ActionResponse a(id) ; + _action_admitted_ref.get()->push_back(a); + }; + + void add_action(int id, int cause, int sub_cause){ + ActionResponse a (id, cause, sub_cause); + _action_not_admitted_ref.get()->push_back(a); + }; + + + int get_request_id(void) const{ + return _req_id; + } + + int get_req_seq(void) const{ + return _req_seq_no; + } + + int get_function_id(void) const{ + return _func_id; + } + + std::string to_string(void){ + std::string Info; + Info += "Request ID = " + std::to_string(_req_id) + "\n"; + Info += "Request Sequence No = " + std::to_string(_req_seq_no) + "\n"; + Info += "RAN Function ID = " + std::to_string(_func_id) + "\n"; + Info += "Actions Admitted =\n"; + int i = 0; + for(auto & e: *(_action_admitted_ref)){ + Info += std::to_string(i) + ": ID=" + std::to_string(e.get_id()) + "\n"; + i++; + } + Info += "Actions Not Admitted =\n"; + i = 0; + for(auto & e: *(_action_not_admitted_ref)){ + Info += std::to_string(i) + ": ID=" + std::to_string(e.get_id()) + ": Cause =" + std::to_string(e.get_cause()) + ": Sub-Cause=" + std::to_string(e.get_sub_cause()) + "\n"; + i++; + } + + return Info; + } + +private: + int _req_id, _req_seq_no, _func_id; + std::unique_ptr _action_admitted_ref; + std::unique_ptr _action_not_admitted_ref; + +}; + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.cc new file mode 100644 index 0000000..6a1ffc8 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.cc @@ -0,0 +1,180 @@ + + +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_delete_request.hpp" + +subscription_delete::subscription_delete(void){ + + _name = "default"; + + e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = (RICsubscriptionDeleteRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_IES, sizeof(RICsubscriptionDeleteRequest_IEs_t)); + assert(IE_array != 0); + + RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest); + for(int i = 0; i < NUM_SUBSCRIPTION_DELETE_IES; i++){ + ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, &(IE_array[i])); + } + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_delete::~subscription_delete(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription delete request object memory"); + RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest); + + for(int i = 0; i < subscription_delete->protocolIEs.list.size; i++){ + subscription_delete->protocolIEs.list.array[i] = 0; + } + + if (subscription_delete->protocolIEs.list.size > 0){ + free(subscription_delete->protocolIEs.list.array); + subscription_delete->protocolIEs.list.count = 0; + subscription_delete->protocolIEs.list.size = 0; + subscription_delete->protocolIEs.list.array = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription delete request object memory"); + + +}; + + +bool subscription_delete::encode_e2ap_subscription(unsigned char *buf, size_t *size, subscription_helper &dinput){ + + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage; + set_fields( dinput); + + initMsg->procedureCode = ProcedureCode_id_RICsubscriptionDelete; + initMsg->criticality = Criticality_reject; + initMsg->value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest; + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription delete request. Reason = " + error_string; + return false; + } + + asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(res.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding Subscription Delete Request. Reason = " + error_string; + return false; + } + else { + if(*size < res.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Delete Request . Reason = encoded pdu size " << res.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + res.encoded = -1; + return false; + } + } + + *size = res.encoded; + return true; + +} + + +bool subscription_delete::set_fields( subscription_helper &helper){ + unsigned int ie_index; + + ie_index = 0; + RICsubscriptionDeleteRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + //ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + + + + ie_index = 1; + RICsubscriptionDeleteRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + + + return true; +}; + + + + +bool subscription_delete:: get_fields(InitiatingMessage_t * init_msg, subscription_helper & dout) +{ + + if (init_msg == 0){ + error_string = "Invalid reference for initiating message for get string"; + return false; + } + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.count; edx++) { + RICsubscriptionDeleteRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); + } + + return true; +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.hpp new file mode 100644 index 0000000..b6d5bba --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_request.hpp @@ -0,0 +1,67 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_DELETE_ +#define S_DELETE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "subscription_helper.hpp" + +#define NUM_SUBSCRIPTION_DELETE_IES 2 + +class subscription_delete{ +public: + + subscription_delete(void); + ~subscription_delete(void); + + bool encode_e2ap_subscription(unsigned char *, size_t *, subscription_helper &); + bool set_fields(subscription_helper &); + bool get_fields(InitiatingMessage_t *, subscription_helper &); + + std::string get_error(void) const { + return error_string ; + } + +private: + + InitiatingMessage_t *initMsg; + E2AP_PDU_t * e2ap_pdu_obj; + + RICsubscriptionDeleteRequest_IEs_t * IE_array; + + + char errbuf[128]; + size_t errbuf_len = 128; + std::string _name; + std::string error_string; +}; + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.cc new file mode 100644 index 0000000..249b3cd --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.cc @@ -0,0 +1,292 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_delete_response.hpp" + +/* The xAPP need only worry about the get_fields from a response, since it does +not generate a response. Generating response however is included to support testing. +*/ + + +// Primarly for generation +subscription_delete_response::subscription_delete_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t *)calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (SuccessfulOutcome_t *)calloc(1, sizeof(SuccessfulOutcome_t)); + assert(successMsg != 0); + + unsuccessMsg = 0; + unsuccessMsg = (UnsuccessfulOutcome_t *)calloc(1, sizeof(UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + IE_array = 0; + IE_array = (RICsubscriptionDeleteResponse_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_RESPONSE_IES, sizeof(RICsubscriptionDeleteResponse_IEs_t)); + assert(IE_array != 0); + + IE_Failure_array = 0; + IE_Failure_array = (RICsubscriptionDeleteFailure_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_FAILURE_IES, sizeof(RICsubscriptionDeleteFailure_IEs_t)); + assert(IE_Failure_array != 0); + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_delete_response::~subscription_delete_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription delete response memory"); + RICsubscriptionDeleteResponse_t * ric_subscription_delete_response = &(successMsg->value.choice.RICsubscriptionDeleteResponse); + + for(unsigned int i = 0; i < ric_subscription_delete_response->protocolIEs.list.size ; i++){ + ric_subscription_delete_response->protocolIEs.list.array[i] = 0; + } + + + RICsubscriptionDeleteFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionDeleteFailure); + for(unsigned int i = 0; i < ric_subscription_failure->protocolIEs.list.size; i++){ + ric_subscription_failure->protocolIEs.list.array[i] = 0; + } + + free(IE_array); + free(IE_Failure_array); + + ASN_STRUCT_FREE(asn_DEF_SuccessfulOutcome, successMsg); + + ASN_STRUCT_FREE(asn_DEF_UnsuccessfulOutcome, unsuccessMsg); + + e2ap_pdu_obj->choice.successfulOutcome = NULL; + e2ap_pdu_obj->choice.unsuccessfulOutcome = NULL; + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription delete response memory"); + +}; + + +bool subscription_delete_response::encode_e2ap_subscription_delete_response(unsigned char *buf, size_t *size, subscription_response_helper &dinput, bool is_success){ + + bool res; + + if(is_success){ + res = set_fields(successMsg, dinput); + if (!res){ + return false; + } + e2ap_pdu_obj->present = E2AP_PDU_PR_successfulOutcome; + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + } + else{ + res = set_fields(unsuccessMsg, dinput); + if(! res){ + return false; + } + e2ap_pdu_obj->present = E2AP_PDU_PR_unsuccessfulOutcome; + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + } + + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding subcription delete response. Reason = " + error_string; + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Delete Response . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + retval.encoded = -1; + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool subscription_delete_response::set_fields(SuccessfulOutcome_t *success, subscription_response_helper &helper){ + + if (success == 0){ + error_string = "Invalid reference to success message in set fields subscription delete response"; + return false; + } + + unsigned int ie_index; + + success->procedureCode = ProcedureCode_id_RICsubscriptionDelete; + success->criticality = Criticality_reject; + success->value.present = SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse; + + RICsubscriptionDeleteResponse_t * subscription_delete_response = &(success->value.choice.RICsubscriptionDeleteResponse); + subscription_delete_response->protocolIEs.list.count = 0; + + ie_index = 0; + RICsubscriptionDeleteResponse_IEs_t *ies_ricreq = &IE_array[ie_index]; + + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + //ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&subscription_delete_response->protocolIEs, ies_ricreq); + + + ie_index = 1; + RICsubscriptionDeleteResponse_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&subscription_delete_response->protocolIEs, ies_ranfunc); + + return true; + + +} + +bool subscription_delete_response:: get_fields(SuccessfulOutcome_t * success_msg, subscription_response_helper & dout) +{ + + if (success_msg == 0){ + error_string = "Invalid reference to success message inn get fields subscription delete response"; + return false; + } + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < success_msg->value.choice.RICsubscriptionDeleteResponse.protocolIEs.list.count; edx++) { + RICsubscriptionDeleteResponse_IEs_t *memb_ptr = success_msg->value.choice.RICsubscriptionDeleteResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + } + + } + + return true; + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + +bool subscription_delete_response::set_fields(UnsuccessfulOutcome_t *unsuccess, subscription_response_helper &helper){ + + if (unsuccess == 0){ + error_string = "Invalid reference to unsuccess message in set fields subscription delete response"; + return false; + } + + unsigned int ie_index; + + unsuccess->procedureCode = ProcedureCode_id_RICsubscriptionDelete; + unsuccess->criticality = Criticality_reject; + unsuccess->value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure; + + RICsubscriptionDeleteFailure_t * ric_subscription_failure = &(unsuccess->value.choice.RICsubscriptionDeleteFailure); + ric_subscription_failure->protocolIEs.list.count = 0; + + ie_index = 0; + RICsubscriptionDeleteFailure_IEs_t *ies_ricreq = &IE_Failure_array[ie_index]; + + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + //ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, ies_ricreq); + + ie_index = 1; + RICsubscriptionDeleteFailure_IEs_t *ies_ranfunc = &IE_Failure_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, ies_ranfunc); + + + return true; + +} + +bool subscription_delete_response:: get_fields(UnsuccessfulOutcome_t * unsuccess_msg, subscription_response_helper & dout) +{ + + if (unsuccess_msg == 0){ + error_string = "Invalid reference to unsuccess message in get fields subscription delete response"; + return false; + } + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICsubscriptionDeleteFailure.protocolIEs.list.count; edx++) { + RICsubscriptionDeleteFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICsubscriptionDeleteFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + } + + } + + return true; + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.hpp new file mode 100644 index 0000000..14589e5 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_delete_response.hpp @@ -0,0 +1,79 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_DEL_RESPONSE_ +#define S_DEL_RESPONSE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "response_helper.hpp" + +#define NUM_SUBSCRIPTION_DELETE_RESPONSE_IES 2 +#define NUM_SUBSCRIPTION_DELETE_FAILURE_IES 2 + +class subscription_delete_response { +public: + + subscription_delete_response(void); + ~subscription_delete_response(void); + + bool encode_e2ap_subscription_delete_response(unsigned char *, size_t *, subscription_response_helper &, bool); + bool set_fields(SuccessfulOutcome_t *, subscription_response_helper &); + bool get_fields(SuccessfulOutcome_t *, subscription_response_helper &); + + bool set_fields(UnsuccessfulOutcome_t *, subscription_response_helper &); + bool get_fields(UnsuccessfulOutcome_t *, subscription_response_helper &); + + std::string get_error_string(void) const { + return error_string; + } + +private: + + E2AP_PDU_t * e2ap_pdu_obj; + SuccessfulOutcome_t * successMsg; + UnsuccessfulOutcome_t * unsuccessMsg; + + + RICsubscriptionDeleteResponse_IEs_t *IE_array; + RICsubscriptionDeleteFailure_IEs_t *IE_Failure_array; + + + char errbuf[128]; + size_t errbuf_len = 128; + std::string error_string; + +}; + + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_helper.hpp new file mode 100644 index 0000000..b43df7d --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_helper.hpp @@ -0,0 +1,181 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#ifndef SUB_HELPER_ +#define SUB_HELPER_ + +/* + Simple structure to store action related information based on E2 v0.22 + Used for subscription request, response etc + + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ricCause +*/ + +#include +#include +#include + +#include "generic_helpers.hpp" + + +// Note : if no action definition specified, octet length of action definition is NULL +// If no subsequent action specified, default is subsequent_action = 0, time to wait is 0 +struct Action { + +public: + + Action(int id, int type): _is_def(false), _is_subs_act(false), _id(id), _type(type), _next_action(0){}; + Action(int id, int type, const void *def, size_t def_size, int next_action): _is_def(false), _is_subs_act(false), _id(id), _type(type){ + + _is_def = true; + _action_definition.set_ref(def); + _action_definition.set_size(def_size); + _is_subs_act = true; + _next_action = next_action; + + }; + + + int get_id() const{ + return _id; + } + + int get_type() const { + return _type; + } + + + const void * get_definition(void ) { + return _action_definition.get_ref(); + } + + int get_definition_size(void) const { + return _action_definition.get_size(); + }; + + + int get_subsequent_action() const { + return _next_action; + }; + + bool is_definition() const{ + + return _is_def; + } + + bool is_subsequent_action() const{ + return _is_subs_act; + } + +private: + + bool _is_def; + bool _is_subs_act; + int _id, _type, _next_action, _cause, _sub_cause; + bool _is_admit; + octet_helper _action_definition; + +}; + + +/* + Helper class that stores subscription data +*/ + + +struct subscription_helper { + +public: + + using action_t = std::vector; + subscription_helper(){ + _action_ref = std::make_unique(); + }; + + action_t * get_list() const {return _action_ref.get();}; + + void clear(void){ + _action_ref.get()->clear(); + } + + void set_request(int id){ + _req_id = id; + + }; + + void set_function_id(int id){ + _func_id = id; + }; + + void set_event_def(const void *ref, size_t size){ + _event_def.set_ref(ref); + _event_def.set_size(size); + }; + + + void add_action(int id, int type){ + Action a(id, type) ; + _action_ref.get()->push_back(a); + }; + + void add_action(int id, int type, const void *action_def, size_t size, int next_action){ + Action a (id, type, action_def, size, next_action); + _action_ref.get()->push_back(a); + }; + + + int get_request_id(void) const{ + return _req_id; + } + + + int get_function_id(void) const{ + return _func_id; + } + + const void * get_event_def(void) { + return _event_def.get_ref(); + } + + int get_event_def_size(void) const { + return _event_def.get_size(); + } + + void print_sub_info(void){ + std::cout <<"Request ID = " << _req_id << std::endl; + std::cout <<"RAN Function ID = " << _func_id << std::endl; + for(auto const & e: *(_action_ref.get())){ + std::cout <<"Action ID = " << e.get_id() << " Action Type = " << e.get_type() << std::endl; + } + }; + +private: + + std::unique_ptr _action_ref; + int curr_index; + int _req_id, _func_id; + octet_helper _event_def; + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.cc new file mode 100644 index 0000000..91071b3 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.cc @@ -0,0 +1,306 @@ + + +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_request.hpp" + + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +subscription_request::subscription_request(void){ + + _name = "default"; + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (RICsubscriptionRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_REQUEST_IES, sizeof(RICsubscriptionRequest_IEs_t)); + assert(IE_array != 0); + + action_array = 0; + action_array = (RICaction_ToBeSetup_ItemIEs_t *)calloc(INITIAL_REQUEST_LIST_SIZE, sizeof(RICaction_ToBeSetup_ItemIEs_t)); + assert(action_array != 0); + action_array_size = INITIAL_REQUEST_LIST_SIZE; + // also need to add subsequent action and time to wait .. + for (unsigned int i = 0; i < action_array_size; i++){ + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = (struct RICsubsequentAction *)calloc(1, sizeof(struct RICsubsequentAction)); + assert(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction != 0); + } + + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage; + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_request::~subscription_request(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription request memory");; + + // Sequence of actions to be admitted causes special heart-ache. Free ric subscription element manually and reset the ie pointer + RICsubscriptionDetails_t * ricsubscription_ie = &(IE_array[2].value.choice.RICsubscriptionDetails); + + for(int i = 0; i < ricsubscription_ie->ricAction_ToBeSetup_List.list.size; i++){ + ricsubscription_ie->ricAction_ToBeSetup_List.list.array[i] = 0; + } + + if (ricsubscription_ie->ricAction_ToBeSetup_List.list.size > 0){ + free(ricsubscription_ie->ricAction_ToBeSetup_List.list.array); + ricsubscription_ie->ricAction_ToBeSetup_List.list.size = 0; + ricsubscription_ie->ricAction_ToBeSetup_List.list.count = 0; + ricsubscription_ie->ricAction_ToBeSetup_List.list.array = 0; + } + + // clear subsequent action array + for (unsigned int i = 0; i < action_array_size; i++){ + free(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction ); + } + + free(action_array); + RICsubscriptionRequest_t * subscription_request = &(initMsg->value.choice.RICsubscriptionRequest); + + for(int i = 0; i < subscription_request->protocolIEs.list.size; i++){ + subscription_request->protocolIEs.list.array[i] = 0; + } + + if( subscription_request->protocolIEs.list.size > 0){ + free( subscription_request->protocolIEs.list.array); + subscription_request->protocolIEs.list.array = 0; + subscription_request->protocolIEs.list.size = 0; + subscription_request->protocolIEs.list.count = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription request memory "); +}; + + +bool subscription_request::encode_e2ap_subscription(unsigned char *buf, size_t *size, subscription_helper &dinput){ + + bool res; + + initMsg->procedureCode = ProcedureCode_id_RICsubscription; + initMsg->criticality = Criticality_ignore; + initMsg->value.present = InitiatingMessage__value_PR_RICsubscriptionRequest; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription request. Reason = " + error_string; + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding Subscription Request. Reason = " + error_string; + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Request . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + retval.encoded = -1; + return false; + } + } + + *size = retval.encoded; + return true; + +} + + +bool subscription_request::set_fields( InitiatingMessage_t * init_msg, subscription_helper &helper){ + + + int ie_index; + int result = 0; + + if (init_msg == 0){ + error_string = "Error. Invalid reference when getting fields from subscription request"; + return false; + } + + RICsubscriptionRequest_t * ric_subscription = &(init_msg->value.choice.RICsubscriptionRequest); + ric_subscription->protocolIEs.list.count = 0; + + ie_index = 0; + RICsubscriptionRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + //ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + ie_index = 1; + RICsubscriptionRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + + ie_index = 2; + RICsubscriptionRequest_IEs_t *ies_actid = &IE_array[ie_index]; + ies_actid->criticality = Criticality_reject; + ies_actid->id = ProtocolIE_ID_id_RICsubscriptionDetails; + ies_actid->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; + RICsubscriptionDetails_t *ricsubscription_ie = &ies_actid->value.choice.RICsubscriptionDetails; + + ricsubscription_ie->ricEventTriggerDefinition.buf = (uint8_t *) helper.get_event_def(); + ricsubscription_ie->ricEventTriggerDefinition.size = helper.get_event_def_size(); + + std::vector * ref_action_array = helper.get_list(); + // do we need to resize ? + // we don't care about contents, so just do a free/calloc + if(action_array_size < ref_action_array->size()){ + std::cout <<"re-allocating action array from " << action_array_size << " to " << 2 * ref_action_array->size() << std::endl; + // free subsequent allocation + for (unsigned int i = 0; i < action_array_size; i++){ + free(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction ); + } + + action_array_size = 2 * ref_action_array->size(); + free(action_array); + action_array = (RICaction_ToBeSetup_ItemIEs_t *)calloc(action_array_size, sizeof(RICaction_ToBeSetup_ItemIEs_t)); + assert(action_array != 0); + + // also need to add subsequent action and time to wait .. + for (unsigned int i = 0; i < action_array_size; i++){ + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = (struct RICsubsequentAction *)calloc(1, sizeof(struct RICsubsequentAction)); + assert(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction != 0); + } + + } + + // reset the list count on ricAction_ToBeSetup_List; + ricsubscription_ie->ricAction_ToBeSetup_List.list.count = 0; + + for(unsigned int i = 0; i < ref_action_array->size(); i ++){ + action_array[i].criticality = Criticality_ignore; + action_array[i].id = ProtocolIE_ID_id_RICaction_ToBeSetup_Item ; + action_array[i].value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricActionID = (*ref_action_array)[i].get_id(); + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricActionType = (*ref_action_array)[i].get_type(); + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction->ricSubsequentActionType = (*ref_action_array)[i].get_subsequent_action(); + + result = ASN_SEQUENCE_ADD(&ricsubscription_ie->ricAction_ToBeSetup_List, &(action_array[i])); + if (result == -1){ + error_string = "Erorr : Unable to assign memory to add Action item to set up list"; + return false; + } + + } + + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + + + return true; +}; + + + +bool subscription_request:: get_fields(InitiatingMessage_t * init_msg, subscription_helper & dout) +{ + + if (init_msg == 0){ + error_string = "Error. Invalid reference when getting fields from subscription request"; + return false; + } + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscriptionDetails_t * ricsubscription; + + for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionRequest.protocolIEs.list.count; edx++) { + RICsubscriptionRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICsubscriptionDetails): + ricsubscription = &memb_ptr->value.choice.RICsubscriptionDetails; + dout.set_event_def(ricsubscription->ricEventTriggerDefinition.buf, ricsubscription->ricEventTriggerDefinition.size); + + for(int index = 0; index < ricsubscription->ricAction_ToBeSetup_List.list.count; index ++){ + RICaction_ToBeSetup_ItemIEs_t * item = (RICaction_ToBeSetup_ItemIEs_t *)ricsubscription->ricAction_ToBeSetup_List.list.array[index]; + if (item->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction == NULL){ + dout.add_action(item->value.choice.RICaction_ToBeSetup_Item.ricActionID, item->value.choice.RICaction_ToBeSetup_Item.ricActionType); + } + else{ + std::string action_def = ""; // for now we are ignoring action definition + } + }; + + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); + return true; +}; + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.hpp new file mode 100644 index 0000000..15695c3 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_request.hpp @@ -0,0 +1,73 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_REQUEST_ +#define S_REQUEST_ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "subscription_helper.hpp" + +#define NUM_SUBSCRIPTION_REQUEST_IES 3 +#define INITIAL_REQUEST_LIST_SIZE 4 + +class subscription_request{ +public: + + subscription_request(std::string name); + subscription_request(void); + ~subscription_request(void); + + bool encode_e2ap_subscription(unsigned char *, size_t *, subscription_helper &); + bool set_fields(InitiatingMessage_t *, subscription_helper &); + bool get_fields(InitiatingMessage_t *, subscription_helper &); + + std::string get_error(void) const{ + return error_string; + } + +private: + + InitiatingMessage_t *initMsg; + E2AP_PDU_t * e2ap_pdu_obj; + + RICsubscriptionRequest_IEs_t * IE_array; + RICaction_ToBeSetup_ItemIEs_t * action_array; + unsigned int action_array_size; + char errbuf[128]; + size_t errbuf_len = 128; + std::string _name; + std::string error_string; +}; + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.cc new file mode 100644 index 0000000..5ed72fa --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.cc @@ -0,0 +1,583 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_response.hpp" + +/* The xAPP need only worry about the get_fields from a response, since it does +not generate a response. Generating response however is included to support testing. +*/ + + +// Primarly for generation +subscription_response::subscription_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2AP_PDU_t *)calloc(1, sizeof(E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (SuccessfulOutcome_t *)calloc(1, sizeof(SuccessfulOutcome_t)); + assert(successMsg != 0); + + unsuccessMsg = 0; + unsuccessMsg = (UnsuccessfulOutcome_t *)calloc(1, sizeof(UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + IE_array = 0; + IE_array = (RICsubscriptionResponse_IEs_t *)calloc(NUM_SUBSCRIPTION_RESPONSE_IES, sizeof(RICsubscriptionResponse_IEs_t)); + assert(IE_array != 0); + + IE_Failure_array = 0; + IE_Failure_array = (RICsubscriptionFailure_IEs_t *)calloc(NUM_SUBSCRIPTION_FAILURE_IES, sizeof(RICsubscriptionFailure_IEs_t)); + assert(IE_Failure_array != 0); + + ie_admitted_list = 0; + ie_admitted_list = (RICaction_Admitted_ItemIEs_t *)calloc(INITIAL_RESPONSE_LIST_SIZE, sizeof(RICaction_Admitted_ItemIEs_t)); + assert(ie_admitted_list != 0); + ie_admitted_list_size = INITIAL_RESPONSE_LIST_SIZE; + + ie_not_admitted_list = 0; + ie_not_admitted_list = (RICaction_NotAdmitted_ItemIEs_t *)calloc(INITIAL_RESPONSE_LIST_SIZE, sizeof(RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + ie_not_admitted_list_size = INITIAL_RESPONSE_LIST_SIZE; + + + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_response::~subscription_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription response memory"); + RICaction_Admitted_List_t * response_admitted_list = (RICaction_Admitted_List_t *) &(IE_array[2].value.choice.RICaction_Admitted_List); + + for(int i = 0; i < response_admitted_list->list.size; i++){ + response_admitted_list->list.array[i] = 0; + } + + + if (response_admitted_list->list.size > 0){ + free(response_admitted_list->list.array); + response_admitted_list->list.array = 0; + response_admitted_list->list.size = 0; + response_admitted_list->list.count = 0; + } + + + RICaction_NotAdmitted_List_t * response_not_admitted_list = &(IE_array[3].value.choice.RICaction_NotAdmitted_List); + for(int i = 0; i < response_not_admitted_list->list.size; i++){ + response_not_admitted_list->list.array[i] = 0; + } + + if (response_not_admitted_list->list.size > 0){ + free(response_not_admitted_list->list.array); + response_not_admitted_list->list.array = 0; + response_not_admitted_list->list.size = 0; + response_not_admitted_list->list.count = 0; + } + + RICsubscriptionResponse_t * ric_subscription_response = &(successMsg->value.choice.RICsubscriptionResponse); + for(int i = 0; i < ric_subscription_response->protocolIEs.list.size ; i++){ + ric_subscription_response->protocolIEs.list.array[i] = 0; + } + + if (ric_subscription_response->protocolIEs.list.size > 0){ + free(ric_subscription_response->protocolIEs.list.array); + ric_subscription_response->protocolIEs.list.array = 0; + ric_subscription_response->protocolIEs.list.size = 0; + ric_subscription_response->protocolIEs.list.count = 0; + } + + + RICaction_NotAdmitted_List_t * failure_not_admitted_list = &(IE_Failure_array[2].value.choice.RICaction_NotAdmitted_List); + for(int i = 0; i < failure_not_admitted_list->list.size; i++){ + failure_not_admitted_list->list.array[i] = 0; + } + + if ( failure_not_admitted_list->list.size > 0){ + free( failure_not_admitted_list->list.array); + failure_not_admitted_list->list.array = 0; + failure_not_admitted_list->list.size = 0; + failure_not_admitted_list->list.count = 0; + } + + + RICsubscriptionFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionFailure); + for(int i = 0; i < ric_subscription_failure->protocolIEs.list.size; i++){ + ric_subscription_failure->protocolIEs.list.array[i] = 0; + } + + if ( ric_subscription_failure->protocolIEs.list.size > 0){ + free(ric_subscription_failure->protocolIEs.list.array); + ric_subscription_failure->protocolIEs.list.array = 0; + ric_subscription_failure->protocolIEs.list.size = 0; + ric_subscription_failure->protocolIEs.list.count = 0; + } + + + free(ie_admitted_list); + free(ie_not_admitted_list); + free(IE_Failure_array); + free(IE_array); + + + ASN_STRUCT_FREE(asn_DEF_SuccessfulOutcome, successMsg); + ASN_STRUCT_FREE(asn_DEF_UnsuccessfulOutcome, unsuccessMsg); + + + e2ap_pdu_obj->choice.initiatingMessage = NULL; + e2ap_pdu_obj->present = E2AP_PDU_PR_NOTHING; + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + mdclog_write(MDCLOG_DEBUG, "Freed subscription response memory "); + + +}; + + +bool subscription_response::encode_e2ap_subscription_response(unsigned char *buf, size_t *size, subscription_response_helper &dinput, bool is_success){ + + + if(is_success){ + set_fields_success(dinput); + e2ap_pdu_obj->present = E2AP_PDU_PR_successfulOutcome; + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + + successMsg->procedureCode = ProcedureCode_id_RICsubscription; + successMsg->criticality = Criticality_reject; + successMsg->value.present = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + + } + else{ + set_fields_unsuccess(dinput); + e2ap_pdu_obj->present = E2AP_PDU_PR_unsuccessfulOutcome; + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + + unsuccessMsg->procedureCode = ProcedureCode_id_RICsubscription; + unsuccessMsg->criticality = Criticality_reject; + unsuccessMsg->value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionFailure; + + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription response. Reason = " + error_string; + return false; + } + + asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(res.encoded == -1){ + std::cout <<"Error encoding PDU. Reason =" << strerror(errno) << std::endl; + return false; + } + else { + if(*size < res.encoded){ + fprintf(stderr, "Buffer assigned too small to encode: %s",(char *)(asn_DEF_E2AP_PDU.name)); + res.encoded = -1; + return false; + } + } + + *size = res.encoded; + return true; + +} + +void subscription_response::set_fields_success(subscription_response_helper &helper){ + + int ie_index; + + RICsubscriptionResponse_t * subscription_response = &(successMsg->value.choice.RICsubscriptionResponse); + //reset list count .. + subscription_response->protocolIEs.list.count = 0; + + ie_index = 0; + RICsubscriptionResponse_IEs_t *ies_ricreq = &IE_array[ie_index]; + + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + // ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + + ie_index = 1; + RICsubscriptionResponse_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + + ie_index = 2; + RICsubscriptionResponse_IEs_t *ies_admitted_actid = &IE_array[ie_index]; + ies_admitted_actid->criticality = Criticality_reject; + ies_admitted_actid->id = ProtocolIE_ID_id_RICactions_Admitted; + RICaction_Admitted_List_t *ric_admitted_actions_ie = &ies_admitted_actid->value.choice.RICaction_Admitted_List; + ric_admitted_actions_ie->list.count = 0; + std::vector * ref_admitted_action_array = helper.get_admitted_list(); + + if(ref_admitted_action_array->size() == 0){ + ies_admitted_actid->value.present = RICsubscriptionResponse_IEs__value_PR_NOTHING; + } + else{ + ies_admitted_actid->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + // resize memory ? + if (ref_admitted_action_array->size() >= ie_admitted_list_size){ + ie_admitted_list_size = 2 * ref_admitted_action_array->size(); + free(ie_admitted_list); + ie_admitted_list = (RICaction_Admitted_ItemIEs_t *)calloc(ie_admitted_list_size, sizeof(RICaction_Admitted_ItemIEs_t)); + assert(ie_admitted_list != 0); + }; + + + for(unsigned int i = 0; i < ref_admitted_action_array->size(); i ++){ + ie_admitted_list[i].criticality = Criticality_ignore; + ie_admitted_list[i].id = ProtocolIE_ID_id_RICaction_Admitted_Item ; + ie_admitted_list[i].value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + ie_admitted_list[i].value.choice.RICaction_Admitted_Item.ricActionID = (*ref_admitted_action_array)[i].get_id(); + ASN_SEQUENCE_ADD(ric_admitted_actions_ie, &(ie_admitted_list[i])); + } + } + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + // optional IE : add only if non-zero list + ie_index = 3; + std::vector * ref_notadmitted_action_array = helper.get_not_admitted_list(); + if (ref_notadmitted_action_array->size() > 0){ + + RICsubscriptionResponse_IEs_t *ies_notadmitted_actid = &IE_array[ie_index]; + ies_notadmitted_actid->criticality = Criticality_reject; + ies_notadmitted_actid->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + + RICaction_NotAdmitted_List_t *ric_not_admitted_actions_ie = &ies_notadmitted_actid->value.choice.RICaction_NotAdmitted_List; + ric_not_admitted_actions_ie->list.count = 0; + + + ies_notadmitted_actid->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + // resize memory ? + if (ref_notadmitted_action_array->size() >= ie_not_admitted_list_size){ + ie_not_admitted_list_size = 2 * ref_notadmitted_action_array->size(); + free(ie_not_admitted_list); + ie_not_admitted_list = (RICaction_NotAdmitted_ItemIEs_t *)calloc(ie_not_admitted_list_size, sizeof(RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + + }; + + + for(unsigned int i = 0; i < ref_notadmitted_action_array->size(); i ++){ + ie_not_admitted_list[i].criticality = Criticality_ignore; + ie_not_admitted_list[i].id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item ; + ie_not_admitted_list[i].value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;; + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricActionID = (*ref_notadmitted_action_array)[i].get_id(); + + int cause = (*ref_notadmitted_action_array)[i].get_cause(); + switch(cause){ + case Cause_PR_ricService: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_transport: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.transport = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_protocol: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol= (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_misc: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.misc = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_ricRequest: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return; + } + + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.present = (Cause_PR)cause; + ASN_SEQUENCE_ADD(ric_not_admitted_actions_ie, &(ie_not_admitted_list[i])); + } + + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + } + +} + +void subscription_response:: get_fields(SuccessfulOutcome_t * success_msg, subscription_response_helper & dout) +{ + + assert(success_msg != NULL); + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICaction_Admitted_List_t * ric_admitted_action_list; + RICaction_NotAdmitted_List_t * ric_not_admitted_action_list; + + for(int edx = 0; edx < success_msg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; edx++) { + RICsubscriptionResponse_IEs_t *memb_ptr = success_msg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICactions_Admitted): + ric_admitted_action_list = &memb_ptr->value.choice.RICaction_Admitted_List; + + // admitted actions + for(int index = 0; index < ric_admitted_action_list->list.count; index ++){ + RICaction_Admitted_ItemIEs_t * item = (RICaction_Admitted_ItemIEs_t *)ric_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_Admitted_Item.ricActionID; + dout.get_admitted_list()->push_back(ActionResponse(id)); + }; + + break; + + case (ProtocolIE_ID_id_RICactions_NotAdmitted): + ric_not_admitted_action_list = &memb_ptr->value.choice.RICaction_NotAdmitted_List; + + for(int index = 0; index < ric_not_admitted_action_list->list.count; index ++){ + RICaction_NotAdmitted_ItemIEs_t * item = (RICaction_NotAdmitted_ItemIEs_t *)ric_not_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_NotAdmitted_Item.ricActionID; + int cause = item->value.choice.RICaction_NotAdmitted_Item.cause.present; + int sub_cause; + switch(cause){ + + case Cause_PR_ricService : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService; + break; + + case Cause_PR_transport : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport; + break; + + case Cause_PR_protocol : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol; + break; + + case Cause_PR_misc : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc; + break; + + case Cause_PR_ricRequest : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest; + break; + + default: + std::cout <<"Error ! Illegal cause enum" << cause << std::endl; + return; + } + dout.get_not_admitted_list()->push_back(ActionResponse(id, cause, sub_cause)); + } + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + +void subscription_response::set_fields_unsuccess( subscription_response_helper &helper){ + + int ie_index; + RICsubscriptionFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionFailure); + // reset list count + ric_subscription_failure->protocolIEs.list.count = 0; + + ie_index = 0; + RICsubscriptionFailure_IEs_t *ies_ricreq = &IE_Failure_array[ie_index]; + ies_ricreq->criticality = Criticality_reject; + ies_ricreq->id = ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID; + RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); +// ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + ie_index = 1; + RICsubscriptionFailure_IEs_t *ies_ranfunc = &IE_Failure_array[ie_index]; + ies_ranfunc->criticality = Criticality_reject; + ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID; + RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + ie_index = 2; + RICsubscriptionFailure_IEs_t *ies_notadmitted_actid = &IE_Failure_array[ie_index]; + ies_notadmitted_actid->criticality = Criticality_reject; + ies_notadmitted_actid->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + RICaction_NotAdmitted_List_t *ric_not_admitted_actions_ie = &ies_notadmitted_actid->value.choice.RICaction_NotAdmitted_List; + ric_not_admitted_actions_ie->list.count = 0; + std::vector * ref_notadmitted_action_array = helper.get_not_admitted_list(); + if(ref_notadmitted_action_array->size() == 0){ + ies_notadmitted_actid->value.present = RICsubscriptionFailure_IEs__value_PR_NOTHING; + } + else{ + ies_notadmitted_actid->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List; + + // resize memory ? + if (ref_notadmitted_action_array->size() >= ie_not_admitted_list_size){ + ie_not_admitted_list_size = 2 * ref_notadmitted_action_array->size(); + free(ie_not_admitted_list); + ie_not_admitted_list = (RICaction_NotAdmitted_ItemIEs_t *)calloc(ie_not_admitted_list_size, sizeof(RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + }; + + + // reset the list count on ricAction_ToBeSetup_List; + for(unsigned int i = 0; i < ref_notadmitted_action_array->size(); i ++){ + ie_not_admitted_list[i].criticality = Criticality_ignore; + ie_not_admitted_list[i].id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item ; + ie_not_admitted_list[i].value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;; + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricActionID = (*ref_notadmitted_action_array)[i].get_id(); + + int cause = (*ref_notadmitted_action_array)[i].get_cause(); + switch(cause){ + case Cause_PR_ricService: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_transport: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.transport = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_protocol: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol= (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_misc: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.misc = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case Cause_PR_ricRequest: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return ; + } + + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.cause.present = (Cause_PR)cause; + + ASN_SEQUENCE_ADD(ric_not_admitted_actions_ie, &(ie_not_admitted_list[i])); + } + + } + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + + // // criticality diagnostics is not generated/parsed currently since optional + // i = 3; + // RICsubscriptionFailure_IEs_t *ies_criticality_diagnostics= &IE_Failure_array[i]; + // ies_criticality_diagnostics->criticality = Criticality_ignore; + // ies_criticality_diagnostics->id = ProtocolIE_ID_id_CriticalityDiagnostics ; + // ies_criticality_diagnostics->value.present = RICsubscriptionFailure_IEs__value_PR_NOTHING; + + +} + +void subscription_response:: get_fields(UnsuccessfulOutcome_t * unsuccess_msg, subscription_response_helper & dout) +{ + + assert(unsuccess_msg != NULL); + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICaction_NotAdmitted_List_t * ric_not_admitted_action_list; + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICsubscriptionFailure.protocolIEs.list.count; edx++) { + RICsubscriptionFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICsubscriptionFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + //dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + + case (ProtocolIE_ID_id_RICactions_NotAdmitted): + ric_not_admitted_action_list = &memb_ptr->value.choice.RICaction_NotAdmitted_List; + + for(int index = 0; index < ric_not_admitted_action_list->list.count; index ++){ + RICaction_NotAdmitted_ItemIEs_t * item = (RICaction_NotAdmitted_ItemIEs_t *)ric_not_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_NotAdmitted_Item.ricActionID; + int cause = item->value.choice.RICaction_NotAdmitted_Item.cause.present; + int sub_cause; + switch(cause){ + + case Cause_PR_ricService : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService; + break; + + case Cause_PR_transport : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport; + break; + + case Cause_PR_protocol : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol; + break; + + case Cause_PR_misc : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc; + break; + + case Cause_PR_ricRequest : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest; + break; + + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return; + } + dout.get_not_admitted_list()->push_back(ActionResponse(id, cause, sub_cause)); + } + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.hpp new file mode 100644 index 0000000..85469bf --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2ap/subscription_response.hpp @@ -0,0 +1,81 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_RESPONSE_ +#define S_RESPONSE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "response_helper.hpp" + +#define NUM_SUBSCRIPTION_RESPONSE_IES 4 +#define NUM_SUBSCRIPTION_FAILURE_IES 3 +#define INITIAL_RESPONSE_LIST_SIZE 4 + +class subscription_response{ +public: + + subscription_response(void); + ~subscription_response(void); + + bool encode_e2ap_subscription_response(unsigned char *, size_t *, subscription_response_helper &, bool); + void get_fields(SuccessfulOutcome_t *, subscription_response_helper &); + void get_fields(UnsuccessfulOutcome_t *, subscription_response_helper &); + + std::string get_error(void) const{ + return error_string; + } + +private: + + void set_fields_success( subscription_response_helper &); + void set_fields_unsuccess( subscription_response_helper &); + + E2AP_PDU_t * e2ap_pdu_obj; + SuccessfulOutcome_t * successMsg; + UnsuccessfulOutcome_t * unsuccessMsg; + + + RICsubscriptionResponse_IEs_t *IE_array; + RICsubscriptionFailure_IEs_t *IE_Failure_array; + + + RICaction_Admitted_ItemIEs_t * ie_admitted_list; + RICaction_NotAdmitted_ItemIEs_t * ie_not_admitted_list; + unsigned int ie_admitted_list_size, ie_not_admitted_list_size; + + char errbuf[128]; + size_t errbuf_len = 128; + std::string error_string; +}; + + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.cc new file mode 100644 index 0000000..f7f2d70 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.cc @@ -0,0 +1,190 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ +#include "e2sm_control.hpp" + + //initialize + e2sm_control::e2sm_control(void){ + + memset(&head_fmt1, 0, sizeof(E2SM_Bouncer_ControlHeader_Format1_t)); + + memset(&msg_fmt1, 0, sizeof(E2SM_Bouncer_ControlMessage_Format1_t)); + + + + control_head = 0; + control_head = ( E2SM_Bouncer_ControlHeader_t *)calloc(1, sizeof( E2SM_Bouncer_ControlHeader_t)); + assert(control_head != 0); + + control_msg = 0; + control_msg = (E2SM_Bouncer_ControlMessage_t*)calloc(1, sizeof(E2SM_Bouncer_ControlMessage_t)); + assert(control_msg !=0); + + errbuf_len = 128; + }; + + e2sm_control::~e2sm_control(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory"); + + control_head->choice.controlHeader_Format1 = 0; + + control_msg->choice.controlMessage_Format1 = 0; + + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_ControlHeader, control_head); + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_ControlMessage, control_msg); + + +}; + +bool e2sm_control::encode_control_header(unsigned char *buf, size_t *size, e2sm_control_helper &helper){ + + ASN_STRUCT_RESET(asn_DEF_E2SM_Bouncer_ControlHeader, control_head); + + bool res; + res = set_fields(control_head, helper); + if (!res){ + + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_ControlHeader, control_head, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_ControlHeader, control_head); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_ControlHeader, control_head, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_control::encode_control_message(unsigned char *buf, size_t *size, e2sm_control_helper &helper){ + + bool res; + res = set_fields(control_msg, helper); + if (!res){ + return false; + } + + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_ControlMessage, control_msg, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_ControlMessage, control_msg); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_ControlMessage, control_msg, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding action definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_control::set_fields(E2SM_Bouncer_ControlHeader_t * ref_control_head, e2sm_control_helper & helper){ + + if(ref_control_head == 0){ + error_string = "Invalid reference for Event Trigger Definition set fields"; + return false; + } + + ref_control_head->present = E2SM_Bouncer_ControlHeader_PR_controlHeader_Format1; + + head_fmt1.controlHeaderParam = helper.header; + + ref_control_head->choice.controlHeader_Format1 = &head_fmt1; + + return true; +}; + +bool e2sm_control::set_fields(E2SM_Bouncer_ControlMessage_t * ref_control_msg, e2sm_control_helper & helper){ + + if(ref_control_msg == 0){ + error_string = "Invalid reference for Event Action Definition set fields"; + return false; + } + ref_control_msg->present = E2SM_Bouncer_ControlMessage_PR_controlMessage_Format1; + + msg_fmt1.controlMsgParam.buf = helper.message; + msg_fmt1.controlMsgParam.size = helper.message_len; + + + ref_control_msg->choice.controlMessage_Format1 = &msg_fmt1; + + + return true; +}; + +bool e2sm_control::get_fields(E2SM_Bouncer_ControlHeader_t * ref_indictaion_header, e2sm_control_helper & helper){ + + if (ref_indictaion_header == 0){ + error_string = "Invalid reference for Control Header get fields"; + return false; + } + + helper.header = ref_indictaion_header->choice.controlHeader_Format1->controlHeaderParam; + return true; +} + +bool e2sm_control::get_fields(E2SM_Bouncer_ControlMessage_t * ref_control_message, e2sm_control_helper & helper){ + + if (ref_control_message == 0){ + error_string = "Invalid reference for Control Message get fields"; + return false; + } + helper.message = ref_control_message->choice.controlMessage_Format1->controlMsgParam.buf; + helper.message_len = ref_control_message->choice.controlMessage_Format1->controlMsgParam.size; + + return true; + } + + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.hpp new file mode 100644 index 0000000..75be447 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_control.hpp @@ -0,0 +1,68 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on Bouncer-v001.asn */ +#ifndef SRC_XAPP_ASN_E2SM_E2SM_CONTROL_HPP_ +#define SRC_XAPP_ASN_E2SM_E2SM_CONTROL_HPP_ + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +class e2sm_control { +public: + e2sm_control(void); + ~e2sm_control(void); + + bool set_fields(E2SM_Bouncer_ControlHeader_t *, e2sm_control_helper &); + bool set_fields(E2SM_Bouncer_ControlMessage_t *, e2sm_control_helper &); + + bool get_fields(E2SM_Bouncer_ControlHeader_t *, e2sm_control_helper &); + bool get_fields(E2SM_Bouncer_ControlMessage_t *, e2sm_control_helper &); + + bool encode_control_header(unsigned char *, size_t *, e2sm_control_helper &); + bool encode_control_message(unsigned char*, size_t *, e2sm_control_helper &); + + + std::string get_error (void) const {return error_string ;}; + +private: + + E2SM_Bouncer_ControlHeader_t * control_head; // used for encoding + E2SM_Bouncer_ControlMessage_t* control_msg; + E2SM_Bouncer_ControlHeader_Format1_t head_fmt1; + E2SM_Bouncer_ControlMessage_Format1_t msg_fmt1; + + + size_t errbuf_len; + char errbuf[128]; + std::string error_string; +}; + + + +#endif /* SRC_XAPP_ASN_E2SM_E2SM_CONTROL_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_helpers.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_helpers.hpp new file mode 100644 index 0000000..7eafb18 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_helpers.hpp @@ -0,0 +1,104 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ +#ifndef E2SM_HELPER_ +#define E2SM_HELPER_ + +#include +#include +#include +#include +#include + +typedef struct ranparam_helper ranparam_helper; +struct ranparam_helper { + long int _param_id; + unsigned char* _param_name; + size_t _param_name_len; + int _param_test; + unsigned char* _param_value; + size_t _param_value_len; + +}; +class RANParam_Helper{ +private: + ranparam_helper _ranparam_helper; + +public: + + RANParam_Helper(int id, unsigned char *param_name, size_t param_name_len, int param_test, unsigned char* param_value, size_t param_value_len){ + _ranparam_helper._param_id = id; + _ranparam_helper._param_name = param_name; + _ranparam_helper._param_name_len = param_name_len; + _ranparam_helper._param_test = param_test; + _ranparam_helper._param_value = param_value; + _ranparam_helper._param_value_len = param_value_len; + } + + const ranparam_helper & getran_helper() const { + return _ranparam_helper; + } + void print_ranparam_info(void){ + std::cout <<"Param ID = " << _ranparam_helper._param_id << std::endl; + std::cout << "Parame Name =" << _ranparam_helper._param_name << std::endl; + std::cout <<"Param Test = " << _ranparam_helper._param_test << std::endl; + std::cout <<"Param Value = " << _ranparam_helper._param_value << std::endl; + } +}; + + +using ranparam_helper_t = std::vector; + +typedef struct e2sm_subscription_helper e2sm_subscription_helper; +struct e2sm_subscription_helper { +public: + + + int triger_nature; + ranparam_helper_t param; + void add_param(int id, unsigned char *param_name, size_t param_name_len, int param_test, unsigned char* param_value, size_t param_value_len){ + RANParam_Helper rparam(id,param_name,param_name_len,param_test,param_value,param_value_len); + param.push_back(rparam); + }; + ranparam_helper_t get_paramlist() const {return param;}; + + + +}; + + +typedef struct e2sm_indication_helper e2sm_indication_helper; + + +struct e2sm_indication_helper { + long int header; + unsigned char* message; + size_t message_len; +}; + +typedef struct e2sm_control_helper e2sm_control_helper; + +struct e2sm_control_helper { + long int header; + unsigned char* message; + size_t message_len; +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.cc new file mode 100644 index 0000000..0fd834d --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.cc @@ -0,0 +1,187 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ +#include "e2sm_indication.hpp" + + //initialize + e2sm_indication::e2sm_indication(void){ + + memset(&head_fmt1, 0, sizeof(E2SM_Bouncer_IndicationHeader_Format1_t)); + + memset(&msg_fmt1, 0, sizeof(E2SM_Bouncer_IndicationMessage_Format1_t)); + + + + indication_head = 0; + indication_head = ( E2SM_Bouncer_IndicationHeader_t *)calloc(1, sizeof( E2SM_Bouncer_IndicationHeader_t)); + assert(indication_head != 0); + + indication_msg = 0; + indication_msg = (E2SM_Bouncer_IndicationMessage_t*)calloc(1, sizeof(E2SM_Bouncer_IndicationMessage_t)); + assert(indication_msg !=0); + + errbuf_len = 128; + }; + + e2sm_indication::~e2sm_indication(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory"); + + indication_head->choice.indicationHeader_Format1 = 0; + + indication_msg->choice.indicationMessage_Format1 = 0; + + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_IndicationHeader, indication_head); + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_IndicationMessage, indication_msg); + + +}; + +bool e2sm_indication::encode_indication_header(unsigned char *buf, size_t *size, e2sm_indication_helper &helper){ + + ASN_STRUCT_RESET(asn_DEF_E2SM_Bouncer_IndicationHeader, indication_head); + + bool res; + res = set_fields(indication_head, helper); + if (!res){ + + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_IndicationHeader, indication_head, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_IndicationHeader, indication_head); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_IndicationHeader, indication_head, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_indication::encode_indication_message(unsigned char *buf, size_t *size, e2sm_indication_helper &helper){ + + bool res; + res = set_fields(indication_msg, helper); + if (!res){ + return false; + } + + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_IndicationMessage, indication_msg, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_IndicationMessage, indication_msg); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_IndicationMessage, indication_msg, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding action definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_indication::set_fields(E2SM_Bouncer_IndicationHeader_t * ref_indication_head, e2sm_indication_helper & helper){ + + if(ref_indication_head == 0){ + error_string = "Invalid reference for Event Trigger Definition set fields"; + return false; + } + + ref_indication_head->present = E2SM_Bouncer_IndicationHeader_PR_indicationHeader_Format1; + + head_fmt1.indicationHeaderParam = helper.header; + + ref_indication_head->choice.indicationHeader_Format1 = &head_fmt1; + + return true; +}; + +bool e2sm_indication::set_fields(E2SM_Bouncer_IndicationMessage_t * ref_indication_msg, e2sm_indication_helper & helper){ + + if(ref_indication_msg == 0){ + error_string = "Invalid reference for Event Action Definition set fields"; + return false; + } + ref_indication_msg->present = E2SM_Bouncer_IndicationMessage_PR_indicationMessage_Format1; + + msg_fmt1.indicationMsgParam.buf = helper.message; + msg_fmt1.indicationMsgParam.size = helper.message_len; + + + ref_indication_msg->choice.indicationMessage_Format1 = &msg_fmt1; + + + return true; +}; + +bool e2sm_indication::get_fields(E2SM_Bouncer_IndicationHeader_t * ref_indictaion_header, e2sm_indication_helper & helper){ + + if (ref_indictaion_header == 0){ + error_string = "Invalid reference for Indication Header get fields"; + return false; + } + + helper.header = ref_indictaion_header->choice.indicationHeader_Format1->indicationHeaderParam; + return true; +} + +bool e2sm_indication::get_fields(E2SM_Bouncer_IndicationMessage_t * ref_indication_message, e2sm_indication_helper & helper){ + + if (ref_indication_message == 0){ + error_string = "Invalid reference for Indication Message get fields"; + return false; + } + helper.message = ref_indication_message->choice.indicationMessage_Format1->indicationMsgParam.buf; + helper.message_len = ref_indication_message->choice.indicationMessage_Format1->indicationMsgParam.size; + + return true; + } + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.hpp new file mode 100644 index 0000000..1976b79 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_indication.hpp @@ -0,0 +1,69 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ +#ifndef SRC_XAPP_ASN_E2SM_E2SM_INDICATION_HPP_ +#define SRC_XAPP_ASN_E2SM_E2SM_INDICATION_HPP_ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class e2sm_indication { +public: + e2sm_indication(void); + ~e2sm_indication(void); + + bool set_fields(E2SM_Bouncer_IndicationHeader_t *, e2sm_indication_helper &); + bool set_fields(E2SM_Bouncer_IndicationMessage_t *, e2sm_indication_helper &); + + bool get_fields(E2SM_Bouncer_IndicationHeader_t *, e2sm_indication_helper &); + bool get_fields(E2SM_Bouncer_IndicationMessage_t *, e2sm_indication_helper &); + + bool encode_indication_header(unsigned char *, size_t *, e2sm_indication_helper &); + bool encode_indication_message(unsigned char*, size_t *, e2sm_indication_helper &); + + + std::string get_error (void) const {return error_string ;}; + +private: + + E2SM_Bouncer_IndicationHeader_t * indication_head; // used for encoding + E2SM_Bouncer_IndicationMessage_t* indication_msg; + E2SM_Bouncer_IndicationHeader_Format1_t head_fmt1; + E2SM_Bouncer_IndicationMessage_Format1_t msg_fmt1; + + + size_t errbuf_len; + char errbuf[128]; + std::string error_string; +}; + + + + +#endif /* SRC_XAPP_ASN_E2SM_E2SM_INDICATION_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.cc b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.cc new file mode 100644 index 0000000..e860e31 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.cc @@ -0,0 +1,179 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ + +#include "e2sm_subscription.hpp" + + //initialize + e2sm_subscription::e2sm_subscription(void){ + + memset(&event_fmt1, 0, sizeof(E2SM_Bouncer_EventTriggerDefinition_Format1_t)); + + memset(&actn_fmt1, 0, sizeof(E2SM_Bouncer_ActionDefinition_Format1_t)); + + + ran_param = 0; + ran_param = (RANparameter_Item_t*)calloc(1, sizeof(RANparameter_Item_t)); + assert(ran_param != 0); + + event_trigger = 0; + event_trigger = ( E2SM_Bouncer_EventTriggerDefinition_t *)calloc(1, sizeof( E2SM_Bouncer_EventTriggerDefinition_t)); + assert(event_trigger != 0); + + action_defn = 0; + action_defn = (E2SM_Bouncer_ActionDefinition_t*)calloc(1, sizeof(E2SM_Bouncer_ActionDefinition_t)); + assert(action_defn !=0); + + errbuf_len = 128; + }; + + e2sm_subscription::~e2sm_subscription(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory"); + + event_trigger->choice.eventDefinition_Format1 = 0; + + action_defn->choice.actionDefinition_Format1 = 0; + + free(ran_param); + + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_EventTriggerDefinition, event_trigger); + ASN_STRUCT_FREE(asn_DEF_E2SM_Bouncer_ActionDefinition, action_defn); + + +}; + +bool e2sm_subscription::encode_event_trigger(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){ + + ASN_STRUCT_RESET(asn_DEF_E2SM_Bouncer_EventTriggerDefinition, event_trigger); + + bool res; + res = set_fields(event_trigger, helper); + if (!res){ + + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_EventTriggerDefinition, event_trigger, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_EventTriggerDefinition, event_trigger); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_EventTriggerDefinition, event_trigger, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_subscription::encode_action_defn(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){ + + bool res; + res = set_fields(action_defn, helper); + if (!res){ + return false; + } + + + int ret_constr = asn_check_constraints(&asn_DEF_E2SM_Bouncer_ActionDefinition, action_defn, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + xer_fprint(stdout, &asn_DEF_E2SM_Bouncer_ActionDefinition, action_defn); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_Bouncer_ActionDefinition, action_defn, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding action definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + +bool e2sm_subscription::set_fields(E2SM_Bouncer_EventTriggerDefinition_t * ref_event_trigger, e2sm_subscription_helper & helper){ + + if(ref_event_trigger == 0){ + error_string = "Invalid reference for Event Trigger Definition set fields"; + return false; + } + + ref_event_trigger->present = E2SM_Bouncer_EventTriggerDefinition_PR_eventDefinition_Format1; + + event_fmt1.triggerNature = helper.triger_nature; + + ref_event_trigger->choice.eventDefinition_Format1 = &event_fmt1; + + return true; +}; + +bool e2sm_subscription::set_fields(E2SM_Bouncer_ActionDefinition_t * ref_action_defn, e2sm_subscription_helper & helper){ + + if(ref_action_defn == 0){ + error_string = "Invalid reference for Event Action Definition set fields"; + return false; + } + ref_action_defn->present = E2SM_Bouncer_ActionDefinition_PR_actionDefinition_Format1; + + + ranparam_helper_t paramlst = helper.get_paramlist(); + + for(RANParam_Helper item:paramlst){ + ran_param->ranParameter_ID = item.getran_helper()._param_id; + ran_param->ranParameter_Name.buf = item.getran_helper()._param_name; + ran_param->ranParameter_Name.size = item.getran_helper()._param_name_len; + ran_param->ranParameter_Test = item.getran_helper()._param_test; + ran_param->ranParameter_Value.buf = item.getran_helper()._param_value; + ran_param->ranParameter_Value.size = item.getran_helper()._param_value_len; + ASN_SEQUENCE_ADD(&(actn_fmt1.ranParameter_List->list.array), ran_param); + } + + + ref_action_defn->choice.actionDefinition_Format1 = &actn_fmt1; + + + return true; +}; + diff --git a/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.hpp b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.hpp new file mode 100644 index 0000000..4d159f9 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-asn/e2sm/e2sm_subscription.hpp @@ -0,0 +1,69 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +/* Classes to handle E2 service model based on e2sm-Bouncer-v001.asn */ +#ifndef E2SM_ +#define E2SM_ + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* builder class for E2SM event trigger definition */ + +class e2sm_subscription { +public: + e2sm_subscription(void); + ~e2sm_subscription(void); + + bool set_fields(E2SM_Bouncer_EventTriggerDefinition_t *, e2sm_subscription_helper &); + bool set_fields(E2SM_Bouncer_ActionDefinition_t *, e2sm_subscription_helper &); + + bool encode_event_trigger(unsigned char *, size_t *, e2sm_subscription_helper &); + bool encode_action_defn(unsigned char*, size_t *, e2sm_subscription_helper &); + + + std::string get_error (void) const {return error_string ;}; + +private: + + E2SM_Bouncer_EventTriggerDefinition_t * event_trigger; // used for encoding + E2SM_Bouncer_ActionDefinition_t* action_defn; + E2SM_Bouncer_EventTriggerDefinition_Format1_t event_fmt1; + E2SM_Bouncer_ActionDefinition_Format1_t actn_fmt1; + RANparameter_Item_t *ran_param; + + + size_t errbuf_len; + char errbuf[128]; + std::string error_string; +}; + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.cc new file mode 100644 index 0000000..e66ddec --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.cc @@ -0,0 +1,266 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_control_request.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_control.hpp" + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +ric_control_request::ric_control_request(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (E2N_InitiatingMessage_t * )calloc(1, sizeof(E2N_InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (E2N_RICcontrolRequest_IEs_t *)calloc(NUM_CONTROL_REQUEST_IES, sizeof(E2N_RICcontrolRequest_IEs_t)); + assert(IE_array != 0); + + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage; + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + + +}; + + +// Clear assigned protocolIE list from RIC control_request IE container +ric_control_request::~ric_control_request(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Control Request object memory"); + + E2N_RICcontrolRequest_t *ricControl_Request = &(initMsg->value.choice.RICcontrolRequest); + for(int i = 0; i < ricControl_Request->protocolIEs.list.size; i++){ + ricControl_Request->protocolIEs.list.array[i] = 0; + } + + if (ricControl_Request->protocolIEs.list.size > 0){ + free(ricControl_Request->protocolIEs.list.array); + ricControl_Request->protocolIEs.list.size = 0; + ricControl_Request->protocolIEs.list.count = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2N_E2AP Control Request object mempory"); + +} + + +bool ric_control_request::encode_e2ap_control_request(unsigned char *buf, size_t *size, ric_control_helper & dinput){ + + initMsg->procedureCode = E2N_ProcedureCode_id_ricControl; + initMsg->criticality = E2N_Criticality_ignore; + initMsg->value.present = E2N_InitiatingMessage__value_PR_RICcontrolRequest; + + bool res; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding control . Reason = " + error_string; + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (initMsg == 0){ + error_string = "Invalid reference for E2AP Control_Request message in set_fields"; + return false; + } + + E2N_RICcontrolRequest_t * ric_control_request = &(initMsg->value.choice.RICcontrolRequest); + ric_control_request->protocolIEs.list.count = 0; // reset + + // for(i = 0; i < NUM_CONTROL_REQUEST_IES;i++){ + // memset(&(IE_array[i]), 0, sizeof(RICcontrolRequest_IEs_t)); + // } + + // Mandatory IE + ie_index = 0; + E2N_RICcontrolRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Mandatory IE + ie_index = 1; + E2N_RICcontrolRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICcontrolRequest_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + + // Mandatory IE + ie_index = 2; + E2N_RICcontrolRequest_IEs_t *ies_richead = &IE_array[ie_index]; + ies_richead->criticality = E2N_Criticality_reject; + ies_richead->id = E2N_ProtocolIE_ID_id_RICcontrolHeader; + ies_richead->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcontrolHeader; + E2N_RICcontrolHeader_t *richeader_ie = &ies_richead->value.choice.RICcontrolHeader; + richeader_ie->buf = dinput.control_header; + richeader_ie->size = dinput.control_header_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Mandatory IE + ie_index = 3; + E2N_RICcontrolRequest_IEs_t *ies_indmsg = &IE_array[ie_index]; + ies_indmsg->criticality = E2N_Criticality_reject; + ies_indmsg->id = E2N_ProtocolIE_ID_id_RICcontrolMessage; + ies_indmsg->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcontrolMessage; + E2N_RICcontrolMessage_t *ricmsg_ie = &ies_indmsg->value.choice.RICcontrolMessage; + ricmsg_ie->buf = dinput.control_msg; + ricmsg_ie->size = dinput.control_msg_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + // Optional IE + ie_index = 4; + if (dinput.control_ack >= 0){ + E2N_RICcontrolRequest_IEs_t *ies_indtyp = &IE_array[ie_index]; + ies_indtyp->criticality = E2N_Criticality_reject; + ies_indtyp->id = E2N_ProtocolIE_ID_id_RICcontrolAckRequest; + ies_indtyp->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest; + E2N_RICcontrolAckRequest_t *ricackreq_ie = &ies_indtyp->value.choice.RICcontrolAckRequest; + *ricackreq_ie = dinput.control_ack; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + } + + // Optional IE + ie_index = 5; + if(dinput.call_process_id_size > 0){ + E2N_RICcontrolRequest_IEs_t *ies_callprocid = &IE_array[ie_index]; + ies_callprocid->criticality = E2N_Criticality_reject; + ies_callprocid->id = E2N_ProtocolIE_ID_id_RICcallProcessID; + ies_callprocid->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcallProcessID; + E2N_RICcallProcessID_t *riccallprocessid_ie = &ies_callprocid->value.choice.RICcallProcessID; + riccallprocessid_ie->buf = dinput.call_process_id; + riccallprocessid_ie->size = dinput.call_process_id_size; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + + } + return true; + +}; + + + + +bool ric_control_request:: get_fields(E2N_InitiatingMessage_t * init_msg, ric_control_helper &dout) +{ + if (init_msg == 0){ + error_string = "Invalid reference for E2AP Control_Request message in get_fields"; + return false; + } + + + for(int edx = 0; edx < init_msg->value.choice.RICcontrolRequest.protocolIEs.list.count; edx++) { + E2N_RICcontrolRequest_IEs_t *memb_ptr = init_msg->value.choice.RICcontrolRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICcontrolHeader): + dout.control_header = memb_ptr->value.choice.RICcontrolHeader.buf; + dout.control_header_size = memb_ptr->value.choice.RICcontrolHeader.size; + break; + + case (E2N_ProtocolIE_ID_id_RICcontrolMessage): + dout.control_msg = memb_ptr->value.choice.RICcontrolMessage.buf; + dout.control_msg_size = memb_ptr->value.choice.RICcontrolMessage.size; + break; + + case (E2N_ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (E2N_ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (E2N_ProtocolIE_ID_id_RICcontrolAckRequest): + dout.control_ack = memb_ptr->value.choice.RICcontrolAckRequest; + break; + + default: + break; + } + + } + + return true; + +} + +E2N_InitiatingMessage_t * ric_control_request::get_message(void) { + return initMsg; +} diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.hpp new file mode 100644 index 0000000..57a2e2d --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control.hpp @@ -0,0 +1,66 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_CONTROL_REQUEST_H_ +#define E2AP_RIC_CONTROL_REQUEST_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_control_helper.hpp" + +#define NUM_CONTROL_REQUEST_IES 6 + + +class ric_control_request{ + +public: + ric_control_request(void); + ~ric_control_request(void); + + bool encode_e2ap_control_request(unsigned char *, size_t *, ric_control_helper &); + E2N_InitiatingMessage_t * get_message (void) ; + bool set_fields(E2N_InitiatingMessage_t *, ric_control_helper &); + bool get_fields(E2N_InitiatingMessage_t *, ric_control_helper &); + std::string get_error(void) const {return error_string ; }; +private: + + E2N_E2AP_PDU_t * e2ap_pdu_obj; + E2N_InitiatingMessage_t *initMsg; + E2N_RICcontrolRequest_IEs_t *IE_array; + std::string error_string; + + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_CONTROL_REQUEST_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_helper.hpp new file mode 100644 index 0000000..11f668c --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_helper.hpp @@ -0,0 +1,50 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef CONTROL_HELPER_H +#define CONTROL_HELPER_H + +// control and indication helper objects are very similar and can be merged into one +// currently leaving them as two distnict entities till final design becomes clear + +typedef struct ric_control_helper ric_control_helper; + +struct ric_control_helper{ + ric_control_helper(void):req_id(1), req_seq_no(1), func_id(0), action_id(1), control_ack(-1), cause(0), sub_cause(0), control_status(1), control_msg(0), control_msg_size(0), control_header(0), control_header_size(0), call_process_id(0), call_process_id_size(0){}; + + long int req_id, req_seq_no, func_id, action_id, control_ack, cause, sub_cause, control_status; + + unsigned char* control_msg; + size_t control_msg_size; + + unsigned char* control_header; + size_t control_header_size; + + unsigned char *call_process_id; + size_t call_process_id_size; + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.cc new file mode 100644 index 0000000..23ef9ae --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.cc @@ -0,0 +1,415 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_control_response.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_control_response.hpp" + +// Set up the initiating message and also allocate protocolIEs in container +// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly +// assign pointers to the array in ProtocolIE. However, this also leaves us on the +// hook to manually clear the memory + +ric_control_response::ric_control_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (E2N_SuccessfulOutcome_t * )calloc(1, sizeof(E2N_SuccessfulOutcome_t)); + assert(successMsg != 0); + + successMsg->procedureCode = E2N_ProcedureCode_id_ricControl; + successMsg->criticality = E2N_Criticality_reject; + successMsg->value.present = E2N_SuccessfulOutcome__value_PR_RICcontrolAcknowledge; + + + unsuccessMsg = 0; + unsuccessMsg = (E2N_UnsuccessfulOutcome_t * )calloc(1, sizeof(E2N_UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + + unsuccessMsg->procedureCode = E2N_ProcedureCode_id_ricControl; + unsuccessMsg->criticality = E2N_Criticality_reject; + unsuccessMsg->value.present = E2N_UnsuccessfulOutcome__value_PR_RICcontrolFailure; + + IE_array = 0; + IE_array = (E2N_RICcontrolAcknowledge_IEs_t *)calloc(NUM_CONTROL_ACKNOWLEDGE_IES, sizeof(E2N_RICcontrolAcknowledge_IEs_t)); + assert(IE_array != 0); + + E2N_RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + for(int i = 0; i < NUM_CONTROL_ACKNOWLEDGE_IES; i++){ + ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), &(IE_array[i])); + } + + + IE_failure_array = 0; + IE_failure_array = (E2N_RICcontrolFailure_IEs_t *)calloc(NUM_CONTROL_FAILURE_IES, sizeof(E2N_RICcontrolFailure_IEs_t)); + assert(IE_failure_array != 0); + + E2N_RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + for(int i = 0; i < NUM_CONTROL_FAILURE_IES; i++){ + ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), &(IE_failure_array[i])); + } + +}; + + +// Clear assigned protocolIE list from RIC control_request IE container +ric_control_response::~ric_control_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Control Response object memory"); + + E2N_RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + for(int i = 0; i < ric_acknowledge->protocolIEs.list.size; i++){ + ric_acknowledge->protocolIEs.list.array[i] = 0; + } + if (ric_acknowledge->protocolIEs.list.size > 0){ + free(ric_acknowledge->protocolIEs.list.array); + ric_acknowledge->protocolIEs.list.array = 0; + ric_acknowledge->protocolIEs.list.count = 0; + } + + E2N_RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + for(int i = 0; i < ric_failure->protocolIEs.list.size; i++){ + ric_failure->protocolIEs.list.array[i] = 0; + } + if (ric_failure->protocolIEs.list.size > 0){ + free(ric_failure->protocolIEs.list.array); + ric_failure->protocolIEs.list.array = 0; + ric_failure->protocolIEs.list.count = 0; + } + + free(IE_array); + free(IE_failure_array); + free(successMsg); + free(unsuccessMsg); + + e2ap_pdu_obj->choice.initiatingMessage = 0; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2AP Control Response object mempory"); +} + + +bool ric_control_response::encode_e2ap_control_response(unsigned char *buf, size_t *size, ric_control_helper & dinput, bool is_success){ + + bool res; + if (is_success){ + res = set_fields(successMsg, dinput); + } + else{ + res = set_fields(unsuccessMsg, dinput); + } + + if (!res){ + return false; + } + + + if (is_success){ + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_successfulOutcome ; + } + else{ + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_unsuccessfulOutcome ; + + } + + //xer_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding control response. Reason = " + error_string; + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding E2AP Control response . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_control_response::set_fields(E2N_SuccessfulOutcome_t *successMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (successMsg == 0){ + error_string = "Invalid reference for E2AP Control Acknowledge in set_fields"; + return false; + } + + // for(i = 0; i < NUM_CONTROL_ACKNOWLEDGE_IES;i++){ + // memset(&(IE_array[i]), 0, sizeof(RICcontrolAcknowledge_IEs_t)); + // } + + //E2N_RICcontrolAcknowledge_t * ric_acknowledge = &(successMsg->value.choice.RICcontrolAcknowledge); + //ric_acknowledge->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICcontrolAcknowledge_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICcontrolAcknowledge_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ricreq); + + ie_index = 1; + E2N_RICcontrolAcknowledge_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICcontrolAcknowledge_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ranfunc); + + // ie_index = 2; + // E2N_RICcontrolAcknowledge_IEs_t *ies_riccallprocessid = &IE_array[ie_index]; + // ies_riccallprocessid->criticality = E2N_Criticality_reject; + // ies_riccallprocessid->id = E2N_ProtocolIE_ID_id_RICcallProcessID; + // ies_riccallprocessid->value.present = E2N_RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID; + // RICcallProcessID_t *riccallprocessid_ie = &ies_riccallprocessid->value.choice.RICcallProcessID; + // riccallprocessid_ie->buf = dinput.call_process_id; + // riccallprocessid_ie->size = dinput.call_process_id_size; + // ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_riccallprocessid); + + ie_index = 2; + E2N_RICcontrolAcknowledge_IEs_t *ies_ric_cause = &IE_array[ie_index]; + ies_ric_cause->criticality = E2N_Criticality_reject; + ies_ric_cause->id = E2N_ProtocolIE_ID_id_RICcontrolStatus; + ies_ric_cause->value.present = E2N_RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus; + ies_ric_cause->value.choice.RICcontrolStatus = dinput.control_status; + //ASN_SEQUENCE_ADD(&(ric_acknowledge->protocolIEs), ies_ric_cause); + + return true; + +}; + +bool ric_control_response::set_fields(E2N_UnsuccessfulOutcome_t *unsuccessMsg, ric_control_helper &dinput){ + unsigned int ie_index; + + if (unsuccessMsg == 0){ + error_string = "Invalid reference for E2AP Control Failure in set_fields"; + return false; + } + + // for(i = 0; i < NUM_CONTROL_FAILURE_IES;i++){ + // memset(&(IE_failure_array[i]), 0, sizeof(RICcontrolFailure_IEs_t)); + // } + + //E2N_RICcontrolFailure_t * ric_failure = &(unsuccessMsg->value.choice.RICcontrolFailure); + //ric_failure->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICcontrolFailure_IEs_t *ies_ricreq = &IE_failure_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICcontrolFailure_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &(ies_ricreq->value.choice.RICrequestID); + ricrequest_ie->ricRequestorID = dinput.req_id; + ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ricreq); + + ie_index = 1; + E2N_RICcontrolFailure_IEs_t *ies_ranfunc = &IE_failure_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICcontrolFailure_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &(ies_ranfunc->value.choice.RANfunctionID); + *ranfunction_ie = dinput.func_id; + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ranfunc); + + // ie_index = 2; + // E2N_RICcontrolFailure_IEs_t *ies_riccallprocessid = &IE_failure_array[i]; + // ies_riccallprocessid->criticality = E2N_Criticality_reject; + // ies_riccallprocessid->id = E2N_ProtocolIE_ID_id_RICcallProcessID; + // ies_riccallprocessid->value.present = E2N_RICcontrolFailure_IEs__value_PR_RICcallProcessID; + // RICcallProcessID_t *riccallprocessid_ie = &(ies_riccallprocessid->value.choice.RICcallProcessID); + // riccallprocessid_ie->buf = dinput.call_process_id; + // riccallprocessid_ie->size = dinput.call_process_id_size; + // ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_riccallprocessid); + + ie_index = 2; + E2N_RICcontrolFailure_IEs_t *ies_ric_cause = &IE_failure_array[ie_index]; + ies_ric_cause->criticality = E2N_Criticality_ignore; + ies_ric_cause->id = E2N_ProtocolIE_ID_id_RICcause; + ies_ric_cause->value.present = E2N_RICcontrolFailure_IEs__value_PR_RICcause; + E2N_RICcause_t * ric_cause = &(ies_ric_cause->value.choice.RICcause); + ric_cause->present = (E2N_RICcause_PR)dinput.cause; + + switch(dinput.cause){ + case E2N_RICcause_PR_radioNetwork: + ric_cause->choice.radioNetwork = dinput.sub_cause; + break; + case E2N_RICcause_PR_transport: + ric_cause->choice.transport = dinput.sub_cause; + break; + case E2N_RICcause_PR_protocol: + ric_cause->choice.protocol= dinput.sub_cause; + break; + case E2N_RICcause_PR_misc: + ric_cause->choice.misc = dinput.sub_cause; + break; + case E2N_RICcause_PR_ric: + ric_cause->choice.ric = dinput.sub_cause; + break; + default: + std::cout <<"Error ! Illegal cause enum" << dinput.cause << std::endl; + return false; + } + + //ASN_SEQUENCE_ADD(&(ric_failure->protocolIEs), ies_ric_cause); + return true; + +}; + + + + +bool ric_control_response:: get_fields(E2N_SuccessfulOutcome_t * success_msg, ric_control_helper &dout) +{ + if (success_msg == 0){ + error_string = "Invalid reference for E2AP Control Acknowledge message in get_fields"; + return false; + } + + + for(int edx = 0; edx < success_msg->value.choice.RICcontrolAcknowledge.protocolIEs.list.count; edx++) { + E2N_RICcontrolAcknowledge_IEs_t *memb_ptr = success_msg->value.choice.RICcontrolAcknowledge.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + + case (E2N_ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (E2N_ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (E2N_ProtocolIE_ID_id_RICcause): + dout.control_status = memb_ptr->value.choice.RICcontrolStatus; + break; + + } + + } + + return true; + +} + + +bool ric_control_response:: get_fields(E2N_UnsuccessfulOutcome_t * unsuccess_msg, ric_control_helper &dout) +{ + if (unsuccess_msg == 0){ + error_string = "Invalid reference for E2AP Control Failure message in get_fields"; + return false; + } + + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICcontrolFailure.protocolIEs.list.count; edx++) { + E2N_RICcontrolFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICcontrolFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + + case (E2N_ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + break; + + case (E2N_ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + + case (E2N_ProtocolIE_ID_id_RICcause): + dout.cause = memb_ptr->value.choice.RICcause.present; + switch(dout.cause){ + case E2N_RICcause_PR_radioNetwork : + dout.sub_cause = memb_ptr->value.choice.RICcause.choice.radioNetwork; + break; + + case E2N_RICcause_PR_transport : + dout.sub_cause = memb_ptr->value.choice.RICcause.choice.transport; + break; + + case E2N_RICcause_PR_protocol : + dout.sub_cause = memb_ptr->value.choice.RICcause.choice.protocol; + break; + + case E2N_RICcause_PR_misc : + dout.sub_cause = memb_ptr->value.choice.RICcause.choice.misc; + break; + + case E2N_RICcause_PR_ric : + dout.sub_cause = memb_ptr->value.choice.RICcause.choice.ric; + break; + + default: + dout.sub_cause = -1; + break; + } + + default: + break; + } + + } + + return true; + +} + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.hpp new file mode 100644 index 0000000..6880e48 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_control_response.hpp @@ -0,0 +1,79 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_CONTROL_RESPONSE_H_ +#define E2AP_RIC_CONTROL_RESPONSE_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_control_helper.hpp" + +#define NUM_CONTROL_ACKNOWLEDGE_IES 3 +#define NUM_CONTROL_FAILURE_IES 3 + + +class ric_control_response{ + +public: + ric_control_response(void); + ~ric_control_response(void); + + bool encode_e2ap_control_response(unsigned char *, size_t *, ric_control_helper &, bool); + + + bool set_fields(E2N_SuccessfulOutcome_t *, ric_control_helper &); + bool get_fields(E2N_SuccessfulOutcome_t *, ric_control_helper &); + + bool set_fields(E2N_UnsuccessfulOutcome_t *, ric_control_helper &); + bool get_fields(E2N_UnsuccessfulOutcome_t *, ric_control_helper &); + + std::string get_error(void) const {return error_string ; }; + +private: + + E2N_E2AP_PDU_t * e2ap_pdu_obj; + E2N_SuccessfulOutcome_t * successMsg; + E2N_UnsuccessfulOutcome_t * unsuccessMsg; + + E2N_RICcontrolAcknowledge_IEs_t *IE_array; + E2N_RICcontrolFailure_IEs_t *IE_failure_array; + + std::string error_string; + + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_CONTROL_RESPONSE_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.cc new file mode 100644 index 0000000..33b2095 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.cc @@ -0,0 +1,283 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.c + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#include "e2ap_indication.hpp" + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +ric_indication::ric_indication(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (E2N_InitiatingMessage_t * )calloc(1, sizeof(E2N_InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (E2N_RICindication_IEs_t *)calloc(NUM_INDICATION_IES, sizeof(E2N_RICindication_IEs_t)); + assert(IE_array != 0); + + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage; + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +ric_indication::~ric_indication(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing E2AP Indication object memory"); + E2N_RICindication_t *ricIndication = &(initMsg->value.choice.RICindication); + for(int i = 0; i < ricIndication->protocolIEs.list.size; i++){ + ricIndication->protocolIEs.list.array[i] = 0; + } + if (ricIndication->protocolIEs.list.size > 0){ + free(ricIndication->protocolIEs.list.array); + ricIndication->protocolIEs.list.array = 0; + ricIndication->protocolIEs.list.count = 0; + ricIndication->protocolIEs.list.size = 0; + } + + free(IE_array); + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed E2AP Indication object mempory"); +} + + +bool ric_indication::encode_e2ap_indication(unsigned char *buf, size_t *size, ric_indication_helper & dinput){ + + initMsg->procedureCode = E2N_ProcedureCode_id_ricIndication; + initMsg->criticality = E2N_Criticality_ignore; + initMsg->value.present = E2N_InitiatingMessage__value_PR_RICindication; + + bool res; + asn_enc_rval_t retval; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error encoding E2AP Indication message. Reason = " + error_string; + return false; + } + + // std::cout <<"Constraint check ok ...." << std::endl; + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding E2AP Indication . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool ric_indication::set_fields(E2N_InitiatingMessage_t *initMsg, ric_indication_helper &dinput){ + unsigned int ie_index; + + if (initMsg == 0){ + error_string = "Invalid reference for E2AP Indication message in set_fields"; + return false; + } + + + E2N_RICindication_t * ric_indication = &(initMsg->value.choice.RICindication); + ric_indication->protocolIEs.list.count = 0; + + ie_index = 0; + + E2N_RICindication_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICindication_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = dinput.req_id; + ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 1; + E2N_RICindication_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICindication_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = dinput.func_id; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 2; + E2N_RICindication_IEs_t *ies_actid = &IE_array[ie_index]; + ies_actid->criticality = E2N_Criticality_reject; + ies_actid->id = E2N_ProtocolIE_ID_id_RICactionID; + ies_actid->value.present = E2N_RICindication_IEs__value_PR_RICactionID; + E2N_RICactionID_t *ricaction_ie = &ies_actid->value.choice.RICactionID; + *ricaction_ie = dinput.action_id; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 3; + E2N_RICindication_IEs_t *ies_ricsn = &IE_array[ie_index]; + ies_ricsn->criticality = E2N_Criticality_reject; + ies_ricsn->id = E2N_ProtocolIE_ID_id_RICindicationSN; + ies_ricsn->value.present = E2N_RICindication_IEs__value_PR_RICindicationSN; + E2N_RICindicationSN_t *ricsn_ie = &ies_ricsn->value.choice.RICindicationSN; + *ricsn_ie = dinput.indication_sn; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + + ie_index = 4; + E2N_RICindication_IEs_t *ies_indtyp = &IE_array[ie_index]; + ies_indtyp->criticality = E2N_Criticality_reject; + ies_indtyp->id = E2N_ProtocolIE_ID_id_RICindicationType; + ies_indtyp->value.present = E2N_RICindication_IEs__value_PR_RICindicationType; + E2N_RICindicationType_t *rictype_ie = &ies_indtyp->value.choice.RICindicationType; + *rictype_ie = dinput.indication_type; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 5; + E2N_RICindication_IEs_t *ies_richead = &IE_array[ie_index]; + ies_richead->criticality = E2N_Criticality_reject; + ies_richead->id = E2N_ProtocolIE_ID_id_RICindicationHeader; + ies_richead->value.present = E2N_RICindication_IEs__value_PR_RICindicationHeader; + E2N_RICindicationHeader_t *richeader_ie = &ies_richead->value.choice.RICindicationHeader; + richeader_ie->buf = dinput.indication_header; + richeader_ie->size = dinput.indication_header_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + ie_index = 6; + E2N_RICindication_IEs_t *ies_indmsg = &IE_array[ie_index]; + ies_indmsg->criticality = E2N_Criticality_reject; + ies_indmsg->id = E2N_ProtocolIE_ID_id_RICindicationMessage; + ies_indmsg->value.present = E2N_RICindication_IEs__value_PR_RICindicationMessage; + E2N_RICindicationMessage_t *ricmsg_ie = &ies_indmsg->value.choice.RICindicationMessage; + ricmsg_ie->buf = dinput.indication_msg; + ricmsg_ie->size = dinput.indication_msg_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + + + // optional call process id .. + if (dinput.call_process_id_size > 0){ + ie_index = 7; + E2N_RICindication_IEs_t *ies_ind_callprocessid = &IE_array[ie_index]; + ies_ind_callprocessid->criticality = E2N_Criticality_reject; + ies_ind_callprocessid->id = E2N_ProtocolIE_ID_id_RICcallProcessID; + ies_ind_callprocessid->value.present = E2N_RICindication_IEs__value_PR_RICcallProcessID; + E2N_RICcallProcessID_t *riccallprocessid_ie = &ies_ind_callprocessid->value.choice.RICcallProcessID; + riccallprocessid_ie->buf = dinput.indication_msg; + riccallprocessid_ie->size = dinput.indication_msg_size; + ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index])); + } + + return true; + +}; + + + + +bool ric_indication:: get_fields(E2N_InitiatingMessage_t * init_msg, ric_indication_helper &dout) +{ + if (init_msg == 0){ + error_string = "Invalid reference for E2AP Indication message in get_fields"; + return false; + } + + + for(int edx = 0; edx < init_msg->value.choice.RICindication.protocolIEs.list.count; edx++) { + E2N_RICindication_IEs_t *memb_ptr = init_msg->value.choice.RICindication.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICindicationHeader): + dout.indication_header = memb_ptr->value.choice.RICindicationHeader.buf; + dout.indication_header_size = memb_ptr->value.choice.RICindicationHeader.size; + break; + + case (E2N_ProtocolIE_ID_id_RICindicationMessage): + dout.indication_msg = memb_ptr->value.choice.RICindicationMessage.buf; + dout.indication_msg_size = memb_ptr->value.choice.RICindicationMessage.size; + break; + + case (E2N_ProtocolIE_ID_id_RICrequestID): + dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID; + dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber; + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + dout.func_id = memb_ptr->value.choice.RANfunctionID; + break; + + case (E2N_ProtocolIE_ID_id_RICindicationSN): + dout.indication_sn = memb_ptr->value.choice.RICindicationSN; + break; + + case (E2N_ProtocolIE_ID_id_RICindicationType): + dout.indication_type = memb_ptr->value.choice.RICindicationType; + break; + + case (E2N_ProtocolIE_ID_id_RICactionID): + dout.action_id = memb_ptr->value.choice.RICactionID; + break; + + case (E2N_ProtocolIE_ID_id_RICcallProcessID): + dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf; + dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size; + + default: + break; + } + + } + + return true; + +} + +E2N_InitiatingMessage_t * ric_indication::get_message(void) { + return initMsg; +} diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.hpp new file mode 100644 index 0000000..af43086 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication.hpp @@ -0,0 +1,67 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + +#ifndef E2AP_RIC_INDICATION_H_ +#define E2AP_RIC_INDICATION_H_ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "e2ap_indication_helper.hpp" + +#define NUM_INDICATION_IES 8 + + + +class ric_indication{ + +public: + ric_indication(void); + ~ric_indication(void); + + bool encode_e2ap_indication(unsigned char *, size_t *, ric_indication_helper &); + E2N_InitiatingMessage_t * get_message (void) ; + bool set_fields(E2N_InitiatingMessage_t *, ric_indication_helper &); + bool get_fields(E2N_InitiatingMessage_t *, ric_indication_helper &); + std::string get_error(void) const {return error_string ; }; + +private: + + E2N_E2AP_PDU_t * e2ap_pdu_obj; + E2N_InitiatingMessage_t *initMsg; + E2N_RICindication_IEs_t *IE_array; + std::string error_string; + char errbuf[128]; + size_t errbuf_len = 128; +}; + + +#endif /* E2AP_RIC_INDICATION_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication_helper.hpp new file mode 100644 index 0000000..276a2a7 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/e2ap_indication_helper.hpp @@ -0,0 +1,47 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * ric_indication.h + * + * Created on: Jul 11, 2019 + * Author: sjana, Ashwin Sridharan + */ + + +#ifndef E2AP_INDICATION_HELPER_ +#define E2AP_INDICATION_HELPER_ + +typedef struct ric_indication_helper ric_indication_helper; + +struct ric_indication_helper{ + ric_indication_helper(void) : req_id(1), req_seq_no(1), func_id(0), action_id(1), indication_type(0), indication_sn(0), indication_msg(0), indication_msg_size(0), indication_header(0), indication_header_size(0), call_process_id(0), call_process_id_size(0) {}; + long int req_id, req_seq_no, func_id, action_id, indication_type, indication_sn; + + unsigned char* indication_msg; + size_t indication_msg_size; + + unsigned char* indication_header; + size_t indication_header_size; + + unsigned char *call_process_id; + size_t call_process_id_size; + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/generic_helpers.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/generic_helpers.hpp new file mode 100644 index 0000000..32c019a --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/generic_helpers.hpp @@ -0,0 +1,49 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#pragma once +#ifndef GENERIC_HELPERS +#define GENERIC_HELPERS + +#include + +/* Utilities */ + +class octet_helper { + +public: + octet_helper(void):_ref(NULL), _size(0){}; + octet_helper(const void *ref, int size):_ref(ref), _size(size){}; + void set_ref(const void *ref){ + _ref = ref; + } + + void set_size(size_t size){ + _size = size; + } + + const void * get_ref(void){return _ref ; }; + size_t get_size(void) const {return _size ; } ; + +private: + const void *_ref; + size_t _size; +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/response_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/response_helper.hpp new file mode 100644 index 0000000..b370ff2 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/response_helper.hpp @@ -0,0 +1,181 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_RESPONSE_HELPER_ +#define S_RESPONSE_HELPER_ + +#include +#include + +/* Simple structure to store action for RICaction of the Subscription response based on E2 v0.31 */ +struct ActionResponse { +public: + ActionResponse(int id): _is_admit(true), _id(id), _cause(-1), _sub_cause(-1){}; + ActionResponse(int id, int cause, int sub_cause): _is_admit(false), _id(id), _cause(cause), _sub_cause(sub_cause){}; + + int get_id() const{ + return _id; + }; + + int get_cause() const{ + return _cause; + }; + + int get_sub_cause() const{ + return _sub_cause; + }; + + bool is_admitted(void){ + return _is_admit; + }; + +private: + + bool _is_admit; + int _id, _cause, _sub_cause; + +}; + + +struct subscription_response_helper { + +public: + + using action_t = std::vector; + + subscription_response_helper(void){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + }; + + // copy operator + subscription_response_helper(const subscription_response_helper &he ){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + _req_id = he.get_request_id(); + _req_seq_no = he.get_req_seq(); + _func_id = he.get_function_id(); + + // Take care of the actions + for (auto const & e: *(he.get_admitted_list())){ + add_action(e.get_id()); + } + + for(auto const & e: *(he.get_not_admitted_list())){ + add_action(e.get_id(), e.get_cause(), e.get_sub_cause()); + }; + } + + + // assignment operator + void operator=(const subscription_response_helper & he){ + _action_admitted_ref = std::make_unique(); + _action_not_admitted_ref = std::make_unique(); + + _req_id = he.get_request_id(); + _req_seq_no = he.get_req_seq(); + _func_id = he.get_function_id(); + + + // Take care of the actions + for (auto const & e: *(he.get_admitted_list())){ + add_action(e.get_id()); + } + + for(auto const & e: *(he.get_not_admitted_list())){ + add_action(e.get_id(), e.get_cause(), e.get_sub_cause()); + }; + + } + + action_t * get_admitted_list (void ) const {return _action_admitted_ref.get();}; + action_t * get_not_admitted_list (void ) const{return _action_not_admitted_ref.get();}; + + void set_request(int id, int seq_no){ + _req_id = id; + _req_seq_no = seq_no; + + }; + + void clear(void){ + _action_admitted_ref.get()->clear(); + _action_not_admitted_ref.get()->clear(); + } + + + void set_function_id(int id){ + _func_id = id; + }; + + void add_action(int id){ + ActionResponse a(id) ; + _action_admitted_ref.get()->push_back(a); + }; + + void add_action(int id, int cause, int sub_cause){ + ActionResponse a (id, cause, sub_cause); + _action_not_admitted_ref.get()->push_back(a); + }; + + + int get_request_id(void) const{ + return _req_id; + } + + int get_req_seq(void) const{ + return _req_seq_no; + } + + int get_function_id(void) const{ + return _func_id; + } + + std::string to_string(void){ + std::string Info; + Info += "Request ID = " + std::to_string(_req_id) + "\n"; + Info += "Request Sequence No = " + std::to_string(_req_seq_no) + "\n"; + Info += "RAN Function ID = " + std::to_string(_func_id) + "\n"; + Info += "Actions Admitted =\n"; + int i = 0; + for(auto & e: *(_action_admitted_ref)){ + Info += std::to_string(i) + ": ID=" + std::to_string(e.get_id()) + "\n"; + i++; + } + Info += "Actions Not Admitted =\n"; + i = 0; + for(auto & e: *(_action_not_admitted_ref)){ + Info += std::to_string(i) + ": ID=" + std::to_string(e.get_id()) + ": Cause =" + std::to_string(e.get_cause()) + ": Sub-Cause=" + std::to_string(e.get_sub_cause()) + "\n"; + i++; + } + + return Info; + } + +private: + int _req_id, _req_seq_no, _func_id; + std::unique_ptr _action_admitted_ref; + std::unique_ptr _action_not_admitted_ref; + +}; + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.cc new file mode 100644 index 0000000..d103d2e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.cc @@ -0,0 +1,180 @@ + + +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_delete_request.hpp" + +subscription_delete::subscription_delete(void){ + + _name = "default"; + + e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = (E2N_InitiatingMessage_t * )calloc(1, sizeof(E2N_InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = (E2N_RICsubscriptionDeleteRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_IES, sizeof(E2N_RICsubscriptionDeleteRequest_IEs_t)); + assert(IE_array != 0); + + E2N_RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest); + for(int i = 0; i < NUM_SUBSCRIPTION_DELETE_IES; i++){ + ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, &(IE_array[i])); + } + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_delete::~subscription_delete(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription delete request object memory"); + E2N_RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest); + + for(int i = 0; i < subscription_delete->protocolIEs.list.size; i++){ + subscription_delete->protocolIEs.list.array[i] = 0; + } + + if (subscription_delete->protocolIEs.list.size > 0){ + free(subscription_delete->protocolIEs.list.array); + subscription_delete->protocolIEs.list.count = 0; + subscription_delete->protocolIEs.list.size = 0; + subscription_delete->protocolIEs.list.array = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription delete request object memory"); + + +}; + + +bool subscription_delete::encode_e2ap_subscription(unsigned char *buf, size_t *size, subscription_helper &dinput){ + + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage; + set_fields( dinput); + + initMsg->procedureCode = E2N_ProcedureCode_id_ricSubscriptionDelete; + initMsg->criticality = E2N_Criticality_reject; + initMsg->value.present = E2N_InitiatingMessage__value_PR_RICsubscriptionDeleteRequest; + + //xer_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription delete request. Reason = " + error_string; + return false; + } + + asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(res.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding Subscription Delete Request. Reason = " + error_string; + return false; + } + else { + if(*size < res.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Delete Request . Reason = encoded pdu size " << res.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + res.encoded = -1; + return false; + } + } + + *size = res.encoded; + return true; + +} + + +bool subscription_delete::set_fields( subscription_helper &helper){ + unsigned int ie_index; + + ie_index = 0; + E2N_RICsubscriptionDeleteRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + + + + ie_index = 1; + E2N_RICsubscriptionDeleteRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + + + return true; +}; + + + + +bool subscription_delete:: get_fields(E2N_InitiatingMessage_t * init_msg, subscription_helper & dout) +{ + + if (init_msg == 0){ + error_string = "Invalid reference for initiating message for get string"; + return false; + } + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionDeleteRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + } + + //asn_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2pdu); + } + + return true; +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.hpp new file mode 100644 index 0000000..e3c1d4e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_request.hpp @@ -0,0 +1,67 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_DELETE_ +#define S_DELETE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "subscription_helper.hpp" + +#define NUM_SUBSCRIPTION_DELETE_IES 2 + +class subscription_delete{ +public: + + subscription_delete(void); + ~subscription_delete(void); + + bool encode_e2ap_subscription(unsigned char *, size_t *, subscription_helper &); + bool set_fields(subscription_helper &); + bool get_fields(E2N_InitiatingMessage_t *, subscription_helper &); + + std::string get_error(void) const { + return error_string ; + } + +private: + + E2N_InitiatingMessage_t *initMsg; + E2N_E2AP_PDU_t * e2ap_pdu_obj; + + E2N_RICsubscriptionDeleteRequest_IEs_t * IE_array; + + + char errbuf[128]; + size_t errbuf_len = 128; + std::string _name; + std::string error_string; +}; + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.cc new file mode 100644 index 0000000..c1c166c --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.cc @@ -0,0 +1,292 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_delete_response.hpp" + +/* The xAPP need only worry about the get_fields from a response, since it does +not generate a response. Generating response however is included to support testing. +*/ + + +// Primarly for generation +subscription_delete_response::subscription_delete_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t *)calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (E2N_SuccessfulOutcome_t *)calloc(1, sizeof(E2N_SuccessfulOutcome_t)); + assert(successMsg != 0); + + unsuccessMsg = 0; + unsuccessMsg = (E2N_UnsuccessfulOutcome_t *)calloc(1, sizeof(E2N_UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + IE_array = 0; + IE_array = (E2N_RICsubscriptionDeleteResponse_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_RESPONSE_IES, sizeof(E2N_RICsubscriptionDeleteResponse_IEs_t)); + assert(IE_array != 0); + + IE_Failure_array = 0; + IE_Failure_array = (E2N_RICsubscriptionDeleteFailure_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_FAILURE_IES, sizeof(E2N_RICsubscriptionDeleteFailure_IEs_t)); + assert(IE_Failure_array != 0); + + + +}; + + + +// Clear assigned protocolIE list from E2N_RIC indication IE container +subscription_delete_response::~subscription_delete_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription delete response memory"); + E2N_RICsubscriptionDeleteResponse_t * ric_subscription_delete_response = &(successMsg->value.choice.RICsubscriptionDeleteResponse); + + for(unsigned int i = 0; i < ric_subscription_delete_response->protocolIEs.list.size ; i++){ + ric_subscription_delete_response->protocolIEs.list.array[i] = 0; + } + + + E2N_RICsubscriptionDeleteFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionDeleteFailure); + for(unsigned int i = 0; i < ric_subscription_failure->protocolIEs.list.size; i++){ + ric_subscription_failure->protocolIEs.list.array[i] = 0; + } + + free(IE_array); + free(IE_Failure_array); + + ASN_STRUCT_FREE(asn_DEF_E2N_SuccessfulOutcome, successMsg); + + ASN_STRUCT_FREE(asn_DEF_E2N_UnsuccessfulOutcome, unsuccessMsg); + + e2ap_pdu_obj->choice.successfulOutcome = NULL; + e2ap_pdu_obj->choice.unsuccessfulOutcome = NULL; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription delete response memory"); + +}; + + +bool subscription_delete_response::encode_e2ap_subscription_delete_response(unsigned char *buf, size_t *size, subscription_response_helper &dinput, bool is_success){ + + bool res; + + if(is_success){ + res = set_fields(successMsg, dinput); + if (!res){ + return false; + } + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_successfulOutcome; + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + } + else{ + res = set_fields(unsuccessMsg, dinput); + if(! res){ + return false; + } + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_unsuccessfulOutcome; + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + } + + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding subcription delete response. Reason = " + error_string; + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Delete Response . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + retval.encoded = -1; + return false; + } + } + + *size = retval.encoded; + return true; + +} + +bool subscription_delete_response::set_fields(E2N_SuccessfulOutcome_t *success, subscription_response_helper &helper){ + + if (success == 0){ + error_string = "Invalid reference to success message in set fields subscription delete response"; + return false; + } + + unsigned int ie_index; + + success->procedureCode = E2N_ProcedureCode_id_ricSubscriptionDelete; + success->criticality = E2N_Criticality_reject; + success->value.present = E2N_SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse; + + E2N_RICsubscriptionDeleteResponse_t * subscription_delete_response = &(success->value.choice.RICsubscriptionDeleteResponse); + subscription_delete_response->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICsubscriptionDeleteResponse_IEs_t *ies_ricreq = &IE_array[ie_index]; + + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&subscription_delete_response->protocolIEs, ies_ricreq); + + + ie_index = 1; + E2N_RICsubscriptionDeleteResponse_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&subscription_delete_response->protocolIEs, ies_ranfunc); + + return true; + + +} + +bool subscription_delete_response:: get_fields(E2N_SuccessfulOutcome_t * success_msg, subscription_response_helper & dout) +{ + + if (success_msg == 0){ + error_string = "Invalid reference to success message inn get fields subscription delete response"; + return false; + } + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < success_msg->value.choice.RICsubscriptionDeleteResponse.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionDeleteResponse_IEs_t *memb_ptr = success_msg->value.choice.RICsubscriptionDeleteResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + } + + } + + return true; + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + +bool subscription_delete_response::set_fields(E2N_UnsuccessfulOutcome_t *unsuccess, subscription_response_helper &helper){ + + if (unsuccess == 0){ + error_string = "Invalid reference to unsuccess message in set fields subscription delete response"; + return false; + } + + unsigned int ie_index; + + unsuccess->procedureCode = E2N_ProcedureCode_id_ricSubscriptionDelete; + unsuccess->criticality = E2N_Criticality_reject; + unsuccess->value.present = E2N_UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure; + + E2N_RICsubscriptionDeleteFailure_t * ric_subscription_failure = &(unsuccess->value.choice.RICsubscriptionDeleteFailure); + ric_subscription_failure->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICsubscriptionDeleteFailure_IEs_t *ies_ricreq = &IE_Failure_array[ie_index]; + + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, ies_ricreq); + + ie_index = 1; + E2N_RICsubscriptionDeleteFailure_IEs_t *ies_ranfunc = &IE_Failure_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, ies_ranfunc); + + + return true; + +} + +bool subscription_delete_response:: get_fields(E2N_UnsuccessfulOutcome_t * unsuccess_msg, subscription_response_helper & dout) +{ + + if (unsuccess_msg == 0){ + error_string = "Invalid reference to unsuccess message in get fields subscription delete response"; + return false; + } + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICsubscriptionDeleteFailure.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionDeleteFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICsubscriptionDeleteFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + } + + } + + return true; + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.hpp new file mode 100644 index 0000000..d9581e4 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_delete_response.hpp @@ -0,0 +1,79 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_DEL_RESPONSE_ +#define S_DEL_RESPONSE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "response_helper.hpp" + +#define NUM_SUBSCRIPTION_DELETE_RESPONSE_IES 2 +#define NUM_SUBSCRIPTION_DELETE_FAILURE_IES 2 + +class subscription_delete_response { +public: + + subscription_delete_response(void); + ~subscription_delete_response(void); + + bool encode_e2ap_subscription_delete_response(unsigned char *, size_t *, subscription_response_helper &, bool); + bool set_fields(E2N_SuccessfulOutcome_t *, subscription_response_helper &); + bool get_fields(E2N_SuccessfulOutcome_t *, subscription_response_helper &); + + bool set_fields(E2N_UnsuccessfulOutcome_t *, subscription_response_helper &); + bool get_fields(E2N_UnsuccessfulOutcome_t *, subscription_response_helper &); + + std::string get_error_string(void) const { + return error_string; + } + +private: + + E2N_E2AP_PDU_t * e2ap_pdu_obj; + E2N_SuccessfulOutcome_t * successMsg; + E2N_UnsuccessfulOutcome_t * unsuccessMsg; + + + E2N_RICsubscriptionDeleteResponse_IEs_t *IE_array; + E2N_RICsubscriptionDeleteFailure_IEs_t *IE_Failure_array; + + + char errbuf[128]; + size_t errbuf_len = 128; + std::string error_string; + +}; + + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_helper.hpp new file mode 100644 index 0000000..ae0c5a5 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_helper.hpp @@ -0,0 +1,196 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#ifndef SUB_HELPER_ +#define SUB_HELPER_ + +/* + Simple structure to store action related information based on E2 v0.22 + Used for subscription request, response etc + + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ricCause +*/ + +#include +#include +#include + +#include "generic_helpers.hpp" + + +// Note : if no action definition specified, octet length of action definition is NULL +// If no subsequent action specified, default is subsequent_action = 0, time to wait is 0 +struct Action { + +public: + + Action(int id, int type): _is_def(false), _is_subs_act(false), _id(id), _type(type), _next_action(0), _wait(0){}; + Action(int id, int type, const void *def, size_t def_size, int next, int wait): _is_def(false), _is_subs_act(false), _id(id), _type(type){ + + if (def_size > 0){ + _is_def = true; + _action_definition.set_ref(def); + _action_definition.set_size(def_size); + } + + if(next >= 0 && wait >= 0){ + _is_subs_act = true; + _next_action = next; + _wait = wait; + } + }; + + + int get_id() const{ + return _id; + } + + int get_type() const { + return _type; + } + + + const void * get_definition(void ) { + return _action_definition.get_ref(); + } + + int get_definition_size(void) const { + return _action_definition.get_size(); + }; + + + int get_subsequent_action() const { + return _next_action; + }; + + int get_wait() const { + return _wait; + } + + bool is_definition() const{ + + return _is_def; + } + + bool is_subsequent_action() const{ + return _is_subs_act; + } + +private: + + bool _is_def; + bool _is_subs_act; + int _id, _type, _next_action, _wait, _cause, _sub_cause; + bool _is_admit; + octet_helper _action_definition; + +}; + + +/* + Helper class that stores subscription data +*/ + + +struct subscription_helper { + +public: + + using action_t = std::vector; + + subscription_helper(){ + _action_ref = std::make_unique(); + curr_index = 0; + }; + + action_t * get_list() const {return _action_ref.get();}; + + void clear(void){ + _action_ref.get()->clear(); + } + + void set_request(int id, int seq_no){ + _req_id = id; + _req_seq_no = seq_no; + + }; + + void set_function_id(int id){ + _func_id = id; + }; + + void set_event_def(const void *ref, size_t size){ + _event_def.set_ref(ref); + _event_def.set_size(size); + }; + + + void add_action(int id, int type){ + Action a(id, type) ; + _action_ref.get()->push_back(a); + }; + + void add_action(int id, int type, std::string action_def, int next_action, int wait_time){ + Action a (id, type, action_def.c_str(), action_def.length(), next_action, wait_time); + _action_ref.get()->push_back(a); + }; + + + int get_request_id(void) const{ + return _req_id; + } + + int get_req_seq(void) const { + return _req_seq_no; + } + + int get_function_id(void) const{ + return _func_id; + } + + const void * get_event_def(void) { + return _event_def.get_ref(); + } + + int get_event_def_size(void) const { + return _event_def.get_size(); + } + + void print_sub_info(void){ + std::cout <<"Request ID = " << _req_id << std::endl; + std::cout <<"Request Sequence Number = " << _req_seq_no << std::endl; + std::cout <<"RAN Function ID = " << _func_id << std::endl; + for(auto const & e: *(_action_ref.get())){ + std::cout <<"Action ID = " << e.get_id() << " Action Type = " << e.get_type() << std::endl; + } + }; + +private: + + std::unique_ptr _action_ref; + int curr_index; + int _req_id, _req_seq_no, _func_id; + octet_helper _event_def; +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.cc new file mode 100644 index 0000000..9b2f897 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.cc @@ -0,0 +1,308 @@ + + +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_request.hpp" + + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) +subscription_request::subscription_request(void){ + + _name = "default"; + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + initMsg = 0; + initMsg = (E2N_InitiatingMessage_t * )calloc(1, sizeof(E2N_InitiatingMessage_t)); + assert(initMsg != 0); + + IE_array = 0; + IE_array = (E2N_RICsubscriptionRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_REQUEST_IES, sizeof(E2N_RICsubscriptionRequest_IEs_t)); + assert(IE_array != 0); + + action_array = 0; + action_array = (E2N_RICaction_ToBeSetup_ItemIEs_t *)calloc(INITIAL_REQUEST_LIST_SIZE, sizeof(E2N_RICaction_ToBeSetup_ItemIEs_t)); + assert(action_array != 0); + action_array_size = INITIAL_REQUEST_LIST_SIZE; + // also need to add subsequent action and time to wait .. + for (unsigned int i = 0; i < action_array_size; i++){ + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = (struct E2N_RICsubsequentAction *)calloc(1, sizeof(struct E2N_RICsubsequentAction)); + assert(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction != 0); + } + + e2ap_pdu_obj->choice.initiatingMessage = initMsg; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage; + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_request::~subscription_request(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription request memory for");; + + // Sequence of actions to be admitted causes special heart-ache. Free ric subscription element manually and reset the ie pointer + E2N_RICsubscription_t * ricsubscription_ie = &(IE_array[2].value.choice.RICsubscription); + + for(int i = 0; i < ricsubscription_ie->ricAction_ToBeSetup_List.list.size; i++){ + ricsubscription_ie->ricAction_ToBeSetup_List.list.array[i] = 0; + } + + if (ricsubscription_ie->ricAction_ToBeSetup_List.list.size > 0){ + free(ricsubscription_ie->ricAction_ToBeSetup_List.list.array); + ricsubscription_ie->ricAction_ToBeSetup_List.list.size = 0; + ricsubscription_ie->ricAction_ToBeSetup_List.list.count = 0; + ricsubscription_ie->ricAction_ToBeSetup_List.list.array = 0; + } + + // clear subsequent action array + for (unsigned int i = 0; i < action_array_size; i++){ + free(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction ); + } + + free(action_array); + E2N_RICsubscriptionRequest_t * subscription_request = &(initMsg->value.choice.RICsubscriptionRequest); + + for(int i = 0; i < subscription_request->protocolIEs.list.size; i++){ + subscription_request->protocolIEs.list.array[i] = 0; + } + + if( subscription_request->protocolIEs.list.size > 0){ + free( subscription_request->protocolIEs.list.array); + subscription_request->protocolIEs.list.array = 0; + subscription_request->protocolIEs.list.size = 0; + subscription_request->protocolIEs.list.count = 0; + } + + free(IE_array); + free(initMsg); + e2ap_pdu_obj->choice.initiatingMessage = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + mdclog_write(MDCLOG_DEBUG, "Freed subscription request memory "); +}; + + +bool subscription_request::encode_e2ap_subscription(unsigned char *buf, size_t *size, subscription_helper &dinput){ + + bool res; + + initMsg->procedureCode = E2N_ProcedureCode_id_ricSubscription; + initMsg->criticality = E2N_Criticality_ignore; + initMsg->value.present = E2N_InitiatingMessage__value_PR_RICsubscriptionRequest; + + res = set_fields(initMsg, dinput); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription request. Reason = " + error_string; + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding Subscription Request. Reason = " + error_string; + return false; + } + else { + if(*size < retval.encoded){ + std::stringstream ss; + ss <<"Error encoding Subscription Request . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + retval.encoded = -1; + return false; + } + } + + *size = retval.encoded; + return true; + +} + + +bool subscription_request::set_fields( E2N_InitiatingMessage_t * init_msg, subscription_helper &helper){ + + + int ie_index; + int result = 0; + + if (init_msg == 0){ + error_string = "Error. Invalid reference when getting fields from subscription request"; + return false; + } + + E2N_RICsubscriptionRequest_t * ric_subscription = &(init_msg->value.choice.RICsubscriptionRequest); + ric_subscription->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICsubscriptionRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionRequest_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + ie_index = 1; + E2N_RICsubscriptionRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionRequest_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + + ie_index = 2; + E2N_RICsubscriptionRequest_IEs_t *ies_actid = &IE_array[ie_index]; + ies_actid->criticality = E2N_Criticality_reject; + ies_actid->id = E2N_ProtocolIE_ID_id_RICsubscription; + ies_actid->value.present = E2N_RICsubscriptionRequest_IEs__value_PR_RICsubscription; + E2N_RICsubscription_t *ricsubscription_ie = &ies_actid->value.choice.RICsubscription; + + ricsubscription_ie->ricEventTriggerDefinition.buf = (uint8_t *) helper.get_event_def(); + ricsubscription_ie->ricEventTriggerDefinition.size = helper.get_event_def_size(); + + std::vector * ref_action_array = helper.get_list(); + // do we need to resize ? + // we don't care about contents, so just do a free/calloc + if(action_array_size < ref_action_array->size()){ + std::cout <<"re-allocating action array from " << action_array_size << " to " << 2 * ref_action_array->size() << std::endl; + // free subsequent allocation + for (unsigned int i = 0; i < action_array_size; i++){ + free(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction ); + } + + action_array_size = 2 * ref_action_array->size(); + free(action_array); + action_array = (E2N_RICaction_ToBeSetup_ItemIEs_t *)calloc(action_array_size, sizeof(E2N_RICaction_ToBeSetup_ItemIEs_t)); + assert(action_array != 0); + + // also need to add subsequent action and time to wait .. + for (unsigned int i = 0; i < action_array_size; i++){ + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = (struct E2N_RICsubsequentAction *)calloc(1, sizeof(struct E2N_RICsubsequentAction)); + assert(action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction != 0); + } + + } + + // reset the list count on ricAction_ToBeSetup_List; + ricsubscription_ie->ricAction_ToBeSetup_List.list.count = 0; + + for(unsigned int i = 0; i < ref_action_array->size(); i ++){ + action_array[i].criticality = E2N_Criticality_ignore; + action_array[i].id = E2N_ProtocolIE_ID_id_RICaction_ToBeSetup_Item ; + action_array[i].value.present = E2N_RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricActionID = (*ref_action_array)[i].get_id(); + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricActionType = (*ref_action_array)[i].get_type(); + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction->ricSubsequentActionType = (*ref_action_array)[i].get_subsequent_action(); + action_array[i].value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction->ricTimeToWait = (*ref_action_array)[i].get_wait(); + + result = ASN_SEQUENCE_ADD(&ricsubscription_ie->ricAction_ToBeSetup_List, &(action_array[i])); + if (result == -1){ + error_string = "Erorr : Unable to assign memory to add Action item to set up list"; + return false; + } + + } + + result = ASN_SEQUENCE_ADD(&(ric_subscription->protocolIEs), &IE_array[ie_index]); + assert(result == 0); + + + + return true; +}; + + + +bool subscription_request:: get_fields(E2N_InitiatingMessage_t * init_msg, subscription_helper & dout) +{ + + if (init_msg == 0){ + error_string = "Error. Invalid reference when getting fields from subscription request"; + return false; + } + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + E2N_RICsubscription_t * ricsubscription; + + for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionRequest.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + case (E2N_ProtocolIE_ID_id_RICsubscription): + ricsubscription = &memb_ptr->value.choice.RICsubscription; + dout.set_event_def(ricsubscription->ricEventTriggerDefinition.buf, ricsubscription->ricEventTriggerDefinition.size); + + for(int index = 0; index < ricsubscription->ricAction_ToBeSetup_List.list.count; index ++){ + E2N_RICaction_ToBeSetup_ItemIEs_t * item = (E2N_RICaction_ToBeSetup_ItemIEs_t *)ricsubscription->ricAction_ToBeSetup_List.list.array[index]; + if (item->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction == NULL){ + dout.add_action(item->value.choice.RICaction_ToBeSetup_Item.ricActionID, item->value.choice.RICaction_ToBeSetup_Item.ricActionType); + } + else{ + std::string action_def = ""; // for now we are ignoring action definition + dout.add_action(item->value.choice.RICaction_ToBeSetup_Item.ricActionID, item->value.choice.RICaction_ToBeSetup_Item.ricActionType, action_def, item->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction->ricSubsequentActionType, item->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction->ricTimeToWait); + } + }; + + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2pdu); + return true; +}; + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.hpp new file mode 100644 index 0000000..28f419a --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_request.hpp @@ -0,0 +1,73 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_REQUEST_ +#define S_REQUEST_ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "subscription_helper.hpp" + +#define NUM_SUBSCRIPTION_REQUEST_IES 3 +#define INITIAL_REQUEST_LIST_SIZE 4 + +class subscription_request{ +public: + + subscription_request(std::string name); + subscription_request(void); + ~subscription_request(void); + + bool encode_e2ap_subscription(unsigned char *, size_t *, subscription_helper &); + bool set_fields(E2N_InitiatingMessage_t *, subscription_helper &); + bool get_fields(E2N_InitiatingMessage_t *, subscription_helper &); + + std::string get_error(void) const{ + return error_string; + } + +private: + + E2N_InitiatingMessage_t *initMsg; + E2N_E2AP_PDU_t * e2ap_pdu_obj; + + E2N_RICsubscriptionRequest_IEs_t * IE_array; + E2N_RICaction_ToBeSetup_ItemIEs_t * action_array; + unsigned int action_array_size; + char errbuf[128]; + size_t errbuf_len = 128; + std::string _name; + std::string error_string; +}; + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.cc new file mode 100644 index 0000000..5308e81 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.cc @@ -0,0 +1,583 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + + +#include "subscription_response.hpp" + +/* The xAPP need only worry about the get_fields from a response, since it does +not generate a response. Generating response however is included to support testing. +*/ + + +// Primarly for generation +subscription_response::subscription_response(void){ + + e2ap_pdu_obj = 0; + e2ap_pdu_obj = (E2N_E2AP_PDU_t *)calloc(1, sizeof(E2N_E2AP_PDU_t)); + assert(e2ap_pdu_obj != 0); + + successMsg = 0; + successMsg = (E2N_SuccessfulOutcome_t *)calloc(1, sizeof(E2N_SuccessfulOutcome_t)); + assert(successMsg != 0); + + unsuccessMsg = 0; + unsuccessMsg = (E2N_UnsuccessfulOutcome_t *)calloc(1, sizeof(E2N_UnsuccessfulOutcome_t)); + assert(unsuccessMsg != 0); + + IE_array = 0; + IE_array = (E2N_RICsubscriptionResponse_IEs_t *)calloc(NUM_SUBSCRIPTION_RESPONSE_IES, sizeof(E2N_RICsubscriptionResponse_IEs_t)); + assert(IE_array != 0); + + IE_Failure_array = 0; + IE_Failure_array = (E2N_RICsubscriptionFailure_IEs_t *)calloc(NUM_SUBSCRIPTION_FAILURE_IES, sizeof(E2N_RICsubscriptionFailure_IEs_t)); + assert(IE_Failure_array != 0); + + ie_admitted_list = 0; + ie_admitted_list = (E2N_RICaction_Admitted_ItemIEs_t *)calloc(INITIAL_RESPONSE_LIST_SIZE, sizeof(E2N_RICaction_Admitted_ItemIEs_t)); + assert(ie_admitted_list != 0); + ie_admitted_list_size = INITIAL_RESPONSE_LIST_SIZE; + + ie_not_admitted_list = 0; + ie_not_admitted_list = (E2N_RICaction_NotAdmitted_ItemIEs_t *)calloc(INITIAL_RESPONSE_LIST_SIZE, sizeof(E2N_RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + ie_not_admitted_list_size = INITIAL_RESPONSE_LIST_SIZE; + + + + + +}; + + + +// Clear assigned protocolIE list from RIC indication IE container +subscription_response::~subscription_response(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing subscription response memory"); + E2N_RICaction_Admitted_List_t * response_admitted_list = (E2N_RICaction_Admitted_List_t *) &(IE_array[2].value.choice.RICaction_Admitted_List); + + for(int i = 0; i < response_admitted_list->list.size; i++){ + response_admitted_list->list.array[i] = 0; + } + + + if (response_admitted_list->list.size > 0){ + free(response_admitted_list->list.array); + response_admitted_list->list.array = 0; + response_admitted_list->list.size = 0; + response_admitted_list->list.count = 0; + } + + + E2N_RICaction_NotAdmitted_List_t * response_not_admitted_list = &(IE_array[3].value.choice.RICaction_NotAdmitted_List); + for(int i = 0; i < response_not_admitted_list->list.size; i++){ + response_not_admitted_list->list.array[i] = 0; + } + + if (response_not_admitted_list->list.size > 0){ + free(response_not_admitted_list->list.array); + response_not_admitted_list->list.array = 0; + response_not_admitted_list->list.size = 0; + response_not_admitted_list->list.count = 0; + } + + E2N_RICsubscriptionResponse_t * ric_subscription_response = &(successMsg->value.choice.RICsubscriptionResponse); + for(int i = 0; i < ric_subscription_response->protocolIEs.list.size ; i++){ + ric_subscription_response->protocolIEs.list.array[i] = 0; + } + + if (ric_subscription_response->protocolIEs.list.size > 0){ + free(ric_subscription_response->protocolIEs.list.array); + ric_subscription_response->protocolIEs.list.array = 0; + ric_subscription_response->protocolIEs.list.size = 0; + ric_subscription_response->protocolIEs.list.count = 0; + } + + + E2N_RICaction_NotAdmitted_List_t * failure_not_admitted_list = &(IE_Failure_array[2].value.choice.RICaction_NotAdmitted_List); + for(int i = 0; i < failure_not_admitted_list->list.size; i++){ + failure_not_admitted_list->list.array[i] = 0; + } + + if ( failure_not_admitted_list->list.size > 0){ + free( failure_not_admitted_list->list.array); + failure_not_admitted_list->list.array = 0; + failure_not_admitted_list->list.size = 0; + failure_not_admitted_list->list.count = 0; + } + + + E2N_RICsubscriptionFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionFailure); + for(int i = 0; i < ric_subscription_failure->protocolIEs.list.size; i++){ + ric_subscription_failure->protocolIEs.list.array[i] = 0; + } + + if ( ric_subscription_failure->protocolIEs.list.size > 0){ + free(ric_subscription_failure->protocolIEs.list.array); + ric_subscription_failure->protocolIEs.list.array = 0; + ric_subscription_failure->protocolIEs.list.size = 0; + ric_subscription_failure->protocolIEs.list.count = 0; + } + + + free(ie_admitted_list); + free(ie_not_admitted_list); + free(IE_Failure_array); + free(IE_array); + + + ASN_STRUCT_FREE(asn_DEF_E2N_SuccessfulOutcome, successMsg); + ASN_STRUCT_FREE(asn_DEF_E2N_UnsuccessfulOutcome, unsuccessMsg); + + + e2ap_pdu_obj->choice.initiatingMessage = NULL; + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_NOTHING; + ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj); + + mdclog_write(MDCLOG_DEBUG, "Freed subscription response memory "); + + +}; + + +bool subscription_response::encode_e2ap_subscription_response(unsigned char *buf, size_t *size, subscription_response_helper &dinput, bool is_success){ + + + if(is_success){ + set_fields_success(dinput); + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_successfulOutcome; + e2ap_pdu_obj->choice.successfulOutcome = successMsg; + + successMsg->procedureCode = E2N_ProcedureCode_id_ricSubscription; + successMsg->criticality = E2N_Criticality_reject; + successMsg->value.present = E2N_SuccessfulOutcome__value_PR_RICsubscriptionResponse; + + } + else{ + set_fields_unsuccess(dinput); + e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_unsuccessfulOutcome; + e2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; + + unsuccessMsg->procedureCode = E2N_ProcedureCode_id_ricSubscription; + unsuccessMsg->criticality = E2N_Criticality_reject; + unsuccessMsg->value.present = E2N_UnsuccessfulOutcome__value_PR_RICsubscriptionFailure; + + } + + //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj); + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(errbuf, errbuf_len); + error_string = "Constraints failed for encoding subscription response. Reason = " + error_string; + return false; + } + + asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size); + + if(res.encoded == -1){ + std::cout <<"Error encoding PDU. Reason =" << strerror(errno) << std::endl; + return false; + } + else { + if(*size < res.encoded){ + fprintf(stderr, "Buffer assigned too small to encode: %s",(char *)(asn_DEF_E2N_E2AP_PDU.name)); + res.encoded = -1; + return false; + } + } + + *size = res.encoded; + return true; + +} + +void subscription_response::set_fields_success(subscription_response_helper &helper){ + + int ie_index; + + E2N_RICsubscriptionResponse_t * subscription_response = &(successMsg->value.choice.RICsubscriptionResponse); + //reset list count .. + subscription_response->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICsubscriptionResponse_IEs_t *ies_ricreq = &IE_array[ie_index]; + + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionResponse_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + + ie_index = 1; + E2N_RICsubscriptionResponse_IEs_t *ies_ranfunc = &IE_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionResponse_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + + ie_index = 2; + E2N_RICsubscriptionResponse_IEs_t *ies_admitted_actid = &IE_array[ie_index]; + ies_admitted_actid->criticality = E2N_Criticality_reject; + ies_admitted_actid->id = E2N_ProtocolIE_ID_id_RICactions_Admitted; + E2N_RICaction_Admitted_List_t *ric_admitted_actions_ie = &ies_admitted_actid->value.choice.RICaction_Admitted_List; + ric_admitted_actions_ie->list.count = 0; + std::vector * ref_admitted_action_array = helper.get_admitted_list(); + + if(ref_admitted_action_array->size() == 0){ + ies_admitted_actid->value.present = E2N_RICsubscriptionResponse_IEs__value_PR_NOTHING; + } + else{ + ies_admitted_actid->value.present = E2N_RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + // resize memory ? + if (ref_admitted_action_array->size() >= ie_admitted_list_size){ + ie_admitted_list_size = 2 * ref_admitted_action_array->size(); + free(ie_admitted_list); + ie_admitted_list = (E2N_RICaction_Admitted_ItemIEs_t *)calloc(ie_admitted_list_size, sizeof(E2N_RICaction_Admitted_ItemIEs_t)); + assert(ie_admitted_list != 0); + }; + + + for(unsigned int i = 0; i < ref_admitted_action_array->size(); i ++){ + ie_admitted_list[i].criticality = E2N_Criticality_ignore; + ie_admitted_list[i].id = E2N_ProtocolIE_ID_id_RICaction_Admitted_Item ; + ie_admitted_list[i].value.present = E2N_RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + ie_admitted_list[i].value.choice.RICaction_Admitted_Item.ricActionID = (*ref_admitted_action_array)[i].get_id(); + ASN_SEQUENCE_ADD(ric_admitted_actions_ie, &(ie_admitted_list[i])); + } + } + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + + // optional IE : add only if non-zero list + ie_index = 3; + std::vector * ref_notadmitted_action_array = helper.get_not_admitted_list(); + if (ref_notadmitted_action_array->size() > 0){ + + E2N_RICsubscriptionResponse_IEs_t *ies_notadmitted_actid = &IE_array[ie_index]; + ies_notadmitted_actid->criticality = E2N_Criticality_reject; + ies_notadmitted_actid->id = E2N_ProtocolIE_ID_id_RICactions_NotAdmitted; + + E2N_RICaction_NotAdmitted_List_t *ric_not_admitted_actions_ie = &ies_notadmitted_actid->value.choice.RICaction_NotAdmitted_List; + ric_not_admitted_actions_ie->list.count = 0; + + + ies_notadmitted_actid->value.present = E2N_RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + // resize memory ? + if (ref_notadmitted_action_array->size() >= ie_not_admitted_list_size){ + ie_not_admitted_list_size = 2 * ref_notadmitted_action_array->size(); + free(ie_not_admitted_list); + ie_not_admitted_list = (E2N_RICaction_NotAdmitted_ItemIEs_t *)calloc(ie_not_admitted_list_size, sizeof(E2N_RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + + }; + + + for(unsigned int i = 0; i < ref_notadmitted_action_array->size(); i ++){ + ie_not_admitted_list[i].criticality = E2N_Criticality_ignore; + ie_not_admitted_list[i].id = E2N_ProtocolIE_ID_id_RICaction_NotAdmitted_Item ; + ie_not_admitted_list[i].value.present = E2N_RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;; + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricActionID = (*ref_notadmitted_action_array)[i].get_id(); + + int cause = (*ref_notadmitted_action_array)[i].get_cause(); + switch(cause){ + case E2N_RICcause_PR_radioNetwork: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_transport: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_protocol: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol= (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_misc: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_ric: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return; + } + + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.present = (E2N_RICcause_PR)cause; + ASN_SEQUENCE_ADD(ric_not_admitted_actions_ie, &(ie_not_admitted_list[i])); + } + + ASN_SEQUENCE_ADD(&subscription_response->protocolIEs, &(IE_array[ie_index])); + } + +} + +void subscription_response:: get_fields(E2N_SuccessfulOutcome_t * success_msg, subscription_response_helper & dout) +{ + + assert(success_msg != NULL); + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + E2N_RICaction_Admitted_List_t * ric_admitted_action_list; + E2N_RICaction_NotAdmitted_List_t * ric_not_admitted_action_list; + + for(int edx = 0; edx < success_msg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionResponse_IEs_t *memb_ptr = success_msg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + case (E2N_ProtocolIE_ID_id_RICactions_Admitted): + ric_admitted_action_list = &memb_ptr->value.choice.RICaction_Admitted_List; + + // admitted actions + for(int index = 0; index < ric_admitted_action_list->list.count; index ++){ + E2N_RICaction_Admitted_ItemIEs_t * item = (E2N_RICaction_Admitted_ItemIEs_t *)ric_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_Admitted_Item.ricActionID; + dout.get_admitted_list()->push_back(ActionResponse(id)); + }; + + break; + + case (E2N_ProtocolIE_ID_id_RICactions_NotAdmitted): + ric_not_admitted_action_list = &memb_ptr->value.choice.RICaction_NotAdmitted_List; + + for(int index = 0; index < ric_not_admitted_action_list->list.count; index ++){ + E2N_RICaction_NotAdmitted_ItemIEs_t * item = (E2N_RICaction_NotAdmitted_ItemIEs_t *)ric_not_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_NotAdmitted_Item.ricActionID; + int cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.present; + int sub_cause; + switch(cause){ + + case E2N_RICcause_PR_radioNetwork : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork; + break; + + case E2N_RICcause_PR_transport : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport; + break; + + case E2N_RICcause_PR_protocol : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol; + break; + + case E2N_RICcause_PR_misc : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc; + break; + + case E2N_RICcause_PR_ric : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric; + break; + + default: + std::cout <<"Error ! Illegal cause enum" << cause << std::endl; + return; + } + dout.get_not_admitted_list()->push_back(ActionResponse(id, cause, sub_cause)); + } + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + +void subscription_response::set_fields_unsuccess( subscription_response_helper &helper){ + + int ie_index; + E2N_RICsubscriptionFailure_t * ric_subscription_failure = &(unsuccessMsg->value.choice.RICsubscriptionFailure); + // reset list count + ric_subscription_failure->protocolIEs.list.count = 0; + + ie_index = 0; + E2N_RICsubscriptionFailure_IEs_t *ies_ricreq = &IE_Failure_array[ie_index]; + ies_ricreq->criticality = E2N_Criticality_reject; + ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID; + ies_ricreq->value.present = E2N_RICsubscriptionFailure_IEs__value_PR_RICrequestID; + E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID; + ricrequest_ie->ricRequestorID = helper.get_request_id(); + ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + ie_index = 1; + E2N_RICsubscriptionFailure_IEs_t *ies_ranfunc = &IE_Failure_array[ie_index]; + ies_ranfunc->criticality = E2N_Criticality_reject; + ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID; + ies_ranfunc->value.present = E2N_RICsubscriptionFailure_IEs__value_PR_RANfunctionID; + E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID; + *ranfunction_ie = helper.get_function_id(); + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + ie_index = 2; + E2N_RICsubscriptionFailure_IEs_t *ies_notadmitted_actid = &IE_Failure_array[ie_index]; + ies_notadmitted_actid->criticality = E2N_Criticality_reject; + ies_notadmitted_actid->id = E2N_ProtocolIE_ID_id_RICactions_NotAdmitted; + E2N_RICaction_NotAdmitted_List_t *ric_not_admitted_actions_ie = &ies_notadmitted_actid->value.choice.RICaction_NotAdmitted_List; + ric_not_admitted_actions_ie->list.count = 0; + std::vector * ref_notadmitted_action_array = helper.get_not_admitted_list(); + if(ref_notadmitted_action_array->size() == 0){ + ies_notadmitted_actid->value.present = E2N_RICsubscriptionFailure_IEs__value_PR_NOTHING; + } + else{ + ies_notadmitted_actid->value.present = E2N_RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List; + + // resize memory ? + if (ref_notadmitted_action_array->size() >= ie_not_admitted_list_size){ + ie_not_admitted_list_size = 2 * ref_notadmitted_action_array->size(); + free(ie_not_admitted_list); + ie_not_admitted_list = (E2N_RICaction_NotAdmitted_ItemIEs_t *)calloc(ie_not_admitted_list_size, sizeof(E2N_RICaction_NotAdmitted_ItemIEs_t)); + assert(ie_not_admitted_list != 0); + }; + + + // reset the list count on ricAction_ToBeSetup_List; + for(unsigned int i = 0; i < ref_notadmitted_action_array->size(); i ++){ + ie_not_admitted_list[i].criticality = E2N_Criticality_ignore; + ie_not_admitted_list[i].id = E2N_ProtocolIE_ID_id_RICaction_NotAdmitted_Item ; + ie_not_admitted_list[i].value.present = E2N_RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;; + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricActionID = (*ref_notadmitted_action_array)[i].get_id(); + + int cause = (*ref_notadmitted_action_array)[i].get_cause(); + switch(cause){ + case E2N_RICcause_PR_radioNetwork: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_transport: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_protocol: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol= (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_misc: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + case E2N_RICcause_PR_ric: + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric = (*ref_notadmitted_action_array)[i].get_sub_cause(); + break; + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return ; + } + + ie_not_admitted_list[i].value.choice.RICaction_NotAdmitted_Item.ricCause.present = (E2N_RICcause_PR)cause; + + ASN_SEQUENCE_ADD(ric_not_admitted_actions_ie, &(ie_not_admitted_list[i])); + } + + } + ASN_SEQUENCE_ADD(&ric_subscription_failure->protocolIEs, &(IE_Failure_array[ie_index])); + + + // // criticality diagnostics is not generated/parsed currently since optional + // i = 3; + // E2N_RICsubscriptionFailure_IEs_t *ies_criticality_diagnostics= &IE_Failure_array[i]; + // ies_criticality_diagnostics->criticality = E2N_Criticality_ignore; + // ies_criticality_diagnostics->id = E2N_ProtocolIE_ID_id_CriticalityDiagnostics ; + // ies_criticality_diagnostics->value.present = E2N_RICsubscriptionFailure_IEs__value_PR_NOTHING; + + +} + +void subscription_response:: get_fields(E2N_UnsuccessfulOutcome_t * unsuccess_msg, subscription_response_helper & dout) +{ + + assert(unsuccess_msg != NULL); + + E2N_RICrequestID_t *requestid; + E2N_RANfunctionID_t * ranfunctionid; + E2N_RICaction_NotAdmitted_List_t * ric_not_admitted_action_list; + + for(int edx = 0; edx < unsuccess_msg->value.choice.RICsubscriptionFailure.protocolIEs.list.count; edx++) { + E2N_RICsubscriptionFailure_IEs_t *memb_ptr = unsuccess_msg->value.choice.RICsubscriptionFailure.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (E2N_ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber); + break; + + case (E2N_ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + dout.set_function_id(*ranfunctionid); + break; + + + case (E2N_ProtocolIE_ID_id_RICactions_NotAdmitted): + ric_not_admitted_action_list = &memb_ptr->value.choice.RICaction_NotAdmitted_List; + + for(int index = 0; index < ric_not_admitted_action_list->list.count; index ++){ + E2N_RICaction_NotAdmitted_ItemIEs_t * item = (E2N_RICaction_NotAdmitted_ItemIEs_t *)ric_not_admitted_action_list->list.array[index]; + long int id = item->value.choice.RICaction_NotAdmitted_Item.ricActionID; + int cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.present; + int sub_cause; + switch(cause){ + + case E2N_RICcause_PR_radioNetwork : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork; + break; + + case E2N_RICcause_PR_transport : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport; + break; + + case E2N_RICcause_PR_protocol : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol; + break; + + case E2N_RICcause_PR_misc : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc; + break; + + case E2N_RICcause_PR_ric : + sub_cause = item->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric; + break; + + default: + mdclog_write(MDCLOG_ERR, "Error :: %s, %d : Unknown RIC cause %d\n", __FILE__, __LINE__, cause); + return; + } + dout.get_not_admitted_list()->push_back(ActionResponse(id, cause, sub_cause)); + } + break; + } + + } + + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); +} + + + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.hpp new file mode 100644 index 0000000..28fad4e --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2ap/subscription_response.hpp @@ -0,0 +1,81 @@ +/* +================================================================================== + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#pragma once + +#ifndef S_RESPONSE_ +#define S_RESPONSE_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "response_helper.hpp" + +#define NUM_SUBSCRIPTION_RESPONSE_IES 4 +#define NUM_SUBSCRIPTION_FAILURE_IES 3 +#define INITIAL_RESPONSE_LIST_SIZE 4 + +class subscription_response{ +public: + + subscription_response(void); + ~subscription_response(void); + + bool encode_e2ap_subscription_response(unsigned char *, size_t *, subscription_response_helper &, bool); + void get_fields(E2N_SuccessfulOutcome_t *, subscription_response_helper &); + void get_fields(E2N_UnsuccessfulOutcome_t *, subscription_response_helper &); + + std::string get_error(void) const{ + return error_string; + } + +private: + + void set_fields_success( subscription_response_helper &); + void set_fields_unsuccess( subscription_response_helper &); + + E2N_E2AP_PDU_t * e2ap_pdu_obj; + E2N_SuccessfulOutcome_t * successMsg; + E2N_UnsuccessfulOutcome_t * unsuccessMsg; + + + E2N_RICsubscriptionResponse_IEs_t *IE_array; + E2N_RICsubscriptionFailure_IEs_t *IE_Failure_array; + + + E2N_RICaction_Admitted_ItemIEs_t * ie_admitted_list; + E2N_RICaction_NotAdmitted_ItemIEs_t * ie_not_admitted_list; + unsigned int ie_admitted_list_size, ie_not_admitted_list_size; + + char errbuf[128]; + size_t errbuf_len = 128; + std::string error_string; +}; + + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.cc b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.cc new file mode 100644 index 0000000..c476c83 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.cc @@ -0,0 +1,660 @@ +/* + ================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, softwares + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================== +*/ + +/* Classes to handle E2 service model based on e2sm-gNB-X2-release-1-v040.asn */ + +#include "e2sm.hpp" + + + + //initialize + e2sm_event_trigger::e2sm_event_trigger(void){ + + memset(&gNodeB_ID, 0, sizeof(E2N_GlobalGNB_ID_t)); + + event_trigger = 0; + event_trigger = ( E2N_E2SM_gNB_X2_eventTriggerDefinition_t *)calloc(1, sizeof( E2N_E2SM_gNB_X2_eventTriggerDefinition_t)); + assert(event_trigger != 0); + + // allocate space for gNodeB id (used for encoding) + gNodeB_ID.gNB_ID.choice.gNB_ID.buf = 0; + gNodeB_ID.gNB_ID.choice.gNB_ID.buf = (uint8_t *)calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.gNB_ID.choice.gNB_ID.buf != 0); + + // allocate space for plmn identity (used for encoding) + gNodeB_ID.pLMN_Identity.buf = 0; + gNodeB_ID.pLMN_Identity.buf = (uint8_t *) calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.pLMN_Identity.buf != 0); + + ie_list = 0; + ie_list = ( struct E2N_InterfaceProtocolIE_Item *) calloc(INITIAL_LIST_SIZE, sizeof( struct E2N_InterfaceProtocolIE_Item)); + assert(ie_list != 0); + ie_list_size = INITIAL_LIST_SIZE; + + condition_list = 0; + condition_list = (E2N_E2SM_gNB_X2_eventTriggerDefinition::E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List *) calloc(1, sizeof(E2N_E2SM_gNB_X2_eventTriggerDefinition::E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List )); + assert(condition_list != 0); + + + + }; + +e2sm_event_trigger::~e2sm_event_trigger(void){ + + mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory"); + for(int i = 0; i < condition_list->list.size; i++){ + condition_list->list.array[i] = 0; + } + + if (condition_list->list.size > 0){ + free(condition_list->list.array); + condition_list->list.array = 0; + condition_list->list.size = 0; + condition_list->list.count = 0; + } + + free(condition_list); + condition_list = 0; + + free(gNodeB_ID.gNB_ID.choice.gNB_ID.buf); + gNodeB_ID.gNB_ID.choice.gNB_ID.buf = 0; + + free(gNodeB_ID.pLMN_Identity.buf); + gNodeB_ID.pLMN_Identity.buf = 0; + + free(ie_list); + ie_list = 0; + + event_trigger->interface_ID.choice.global_gNB_ID = 0; + event_trigger->interfaceProtocolIE_List = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition, event_trigger); + mdclog_write(MDCLOG_DEBUG, "Freed event trigger object memory"); + + +}; + +bool e2sm_event_trigger::encode_event_trigger(unsigned char *buf, size_t *size, e2sm_event_trigger_helper &helper){ + + bool res; + res = set_fields(event_trigger, helper); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition, event_trigger, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + return false; + } + + //xer_fprint(stdout, &asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition, event_trigger); + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition, event_trigger, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + + +bool e2sm_event_trigger::set_fields(E2N_E2SM_gNB_X2_eventTriggerDefinition_t * ref_event_trigger, e2sm_event_trigger_helper & helper){ + if(ref_event_trigger == 0){ + error_string = "Invalid reference for Event Trigger Definition set fields"; + return false; + } + + // set the message type + ref_event_trigger->interfaceMessageType.procedureCode = helper.procedure_code; + ref_event_trigger->interfaceMessageType.typeOfMessage = helper.message_type; + + ref_event_trigger->interfaceDirection = helper.interface_direction; + ref_event_trigger->interface_ID.present = E2N_Interface_ID_PR_global_gNB_ID; + + ref_event_trigger->interface_ID.choice.global_gNB_ID = &gNodeB_ID; + + // to do : need to put correct code here for upding plmn id and gNodeB + // for now just place holders : + //================================================================ + memcpy(gNodeB_ID.pLMN_Identity.buf, helper.plmn_id.c_str(), 3); + gNodeB_ID.pLMN_Identity.size = 3; + + memcpy(gNodeB_ID.gNB_ID.choice.gNB_ID.buf, helper.egNB_id.c_str(), 3); + gNodeB_ID.gNB_ID.choice.gNB_ID.size = 3; + + // we only do global gNodeB id for now, not eNodeB + gNodeB_ID.gNB_ID.present = E2N_GNB_ID_PR_gNB_ID; + //================================================================ + + + // Add in any requested IE items + std::vector * ref_ie_array = helper.get_list(); + + if (ref_ie_array->size() == 0){ + ref_event_trigger->interfaceProtocolIE_List = 0; + + } + else{ + ref_event_trigger->interfaceProtocolIE_List = condition_list; + + //resize memory ? + if(ref_ie_array->size() > ie_list_size){ + ie_list_size = 2 * ref_ie_array->size(); + free(ie_list); + ie_list = (struct E2N_InterfaceProtocolIE_Item *)calloc(ie_list_size, sizeof(struct E2N_InterfaceProtocolIE_Item)); + assert(ie_list != 0); + } + + // reset the count so that adds start from the beginning + ref_event_trigger->interfaceProtocolIE_List->list.count = 0; + + for(unsigned int i = 0; i < ref_ie_array->size(); i++){ + + ie_list[i].interfaceProtocolIE_ID = (*ref_ie_array)[i].interface_id; + ie_list[i].interfaceProtocolIE_Test = (*ref_ie_array)[i].test; + + //switch(ie_list[i].interfaceProtocolIE_Value.present){ + switch((*ref_ie_array)[i].val_type){ + + case (E2N_InterfaceProtocolIE_Value_PR_valueInt): + ie_list[i].interfaceProtocolIE_Value.present = E2N_InterfaceProtocolIE_Value_PR_valueInt; + ie_list[i].interfaceProtocolIE_Value.choice.valueInt = (*ref_ie_array)[i].value_n; + break; + + case (E2N_InterfaceProtocolIE_Value_PR_valueEnum): + ie_list[i].interfaceProtocolIE_Value.present = E2N_InterfaceProtocolIE_Value_PR_valueEnum; + ie_list[i].interfaceProtocolIE_Value.choice.valueEnum = (*ref_ie_array)[i].value_n; + break; + + case (E2N_InterfaceProtocolIE_Value_PR_valueBool): + ie_list[i].interfaceProtocolIE_Value.present = E2N_InterfaceProtocolIE_Value_PR_valueBool; + ie_list[i].interfaceProtocolIE_Value.choice.valueBool = (*ref_ie_array)[i].value_n; + break; + + case (E2N_InterfaceProtocolIE_Value_PR_valueBitS): + ie_list[i].interfaceProtocolIE_Value.present = E2N_InterfaceProtocolIE_Value_PR_valueBitS; + ie_list[i].interfaceProtocolIE_Value.choice.valueBitS.buf = (uint8_t *)(*ref_ie_array)[i].value_s.c_str(); + ie_list[i].interfaceProtocolIE_Value.choice.valueBitS.size = (*ref_ie_array)[i].value_s.length(); + break; + + case (E2N_InterfaceProtocolIE_Value_PR_valueOctS): + ie_list[i].interfaceProtocolIE_Value.present = E2N_InterfaceProtocolIE_Value_PR_valueOctS; + ie_list[i].interfaceProtocolIE_Value.choice.valueOctS.buf = (uint8_t *)(*ref_ie_array)[i].value_s.c_str(); + ie_list[i].interfaceProtocolIE_Value.choice.valueOctS.size = (*ref_ie_array)[i].value_s.length(); + break; + + default: + { + std::stringstream ss; + ss <<"Error ! " << __FILE__ << "," << __LINE__ << " illegal enum " << (*ref_ie_array)[i].val_type << " for interface Protocol IE value" << std::endl; + std::string error_string = ss.str(); + return false; + } + } + + ASN_SEQUENCE_ADD(ref_event_trigger->interfaceProtocolIE_List, &ie_list[i]); + } + } + + return true; +}; + + +bool e2sm_event_trigger::get_fields(E2N_E2SM_gNB_X2_eventTriggerDefinition_t * ref_event_trigger, e2sm_event_trigger_helper & helper){ + + if (ref_event_trigger == 0){ + error_string = "Invalid reference for Event Trigger definition get fields"; + return false; + } + + helper.procedure_code = ref_event_trigger->interfaceMessageType.procedureCode; + helper.message_type = ref_event_trigger->interfaceMessageType.typeOfMessage; + helper.interface_direction = ref_event_trigger->interfaceDirection; + + helper.plmn_id.assign((const char *)ref_event_trigger->interface_ID.choice.global_gNB_ID->pLMN_Identity.buf, ref_event_trigger->interface_ID.choice.global_gNB_ID->pLMN_Identity.size); + helper.egNB_id.assign((const char *)ref_event_trigger->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.buf, ref_event_trigger->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.size); + for(int i = 0; i < ref_event_trigger->interfaceProtocolIE_List->list.count; i++){ + struct E2N_InterfaceProtocolIE_Item * ie_item = ref_event_trigger->interfaceProtocolIE_List->list.array[i]; + switch(ie_item->interfaceProtocolIE_Value.present){ + case (E2N_InterfaceProtocolIE_Value_PR_valueInt): + helper.add_protocol_ie_item(ie_item->interfaceProtocolIE_ID, ie_item->interfaceProtocolIE_Test, ie_item->interfaceProtocolIE_Value.present, ie_item->interfaceProtocolIE_Value.choice.valueInt); + break; + case (E2N_InterfaceProtocolIE_Value_PR_valueEnum): + helper.add_protocol_ie_item(ie_item->interfaceProtocolIE_ID, ie_item->interfaceProtocolIE_Test, ie_item->interfaceProtocolIE_Value.present, ie_item->interfaceProtocolIE_Value.choice.valueEnum); + break; + case (E2N_InterfaceProtocolIE_Value_PR_valueBool): + helper.add_protocol_ie_item(ie_item->interfaceProtocolIE_ID, ie_item->interfaceProtocolIE_Test, ie_item->interfaceProtocolIE_Value.present, ie_item->interfaceProtocolIE_Value.choice.valueBool); + break; + case (E2N_InterfaceProtocolIE_Value_PR_valueBitS): + helper.add_protocol_ie_item(ie_item->interfaceProtocolIE_ID, ie_item->interfaceProtocolIE_Test, ie_item->interfaceProtocolIE_Value.present, std::string((const char *)ie_item->interfaceProtocolIE_Value.choice.valueBitS.buf,ie_item->interfaceProtocolIE_Value.choice.valueBitS.size) ); + break; + case (E2N_InterfaceProtocolIE_Value_PR_valueOctS): + helper.add_protocol_ie_item(ie_item->interfaceProtocolIE_ID, ie_item->interfaceProtocolIE_Test, ie_item->interfaceProtocolIE_Value.present, std::string((const char *)ie_item->interfaceProtocolIE_Value.choice.valueOctS.buf,ie_item->interfaceProtocolIE_Value.choice.valueOctS.size) ); + break; + default: + mdclog_write(MDCLOG_ERR, "Error : %s, %d: Unkown interface protocol IE type %d in event trigger definition\n", __FILE__, __LINE__, ie_item->interfaceProtocolIE_Value.present); + return false; + } + } + + return true; +}; + + + + +// initialize +e2sm_indication::e2sm_indication(void) { + + memset(&gNodeB_ID, 0, sizeof(E2N_GlobalGNB_ID_t)); + + // allocate space for gNodeB id (used for encoding) + gNodeB_ID.gNB_ID.choice.gNB_ID.buf = (uint8_t *)calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.gNB_ID.choice.gNB_ID.buf != 0); + + // allocate space for plmn identity (used for encoding) + gNodeB_ID.pLMN_Identity.buf = (uint8_t *) calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.pLMN_Identity.buf != 0); + + header = 0; + header = (E2N_E2SM_gNB_X2_indicationHeader_t *)calloc(1, sizeof(E2N_E2SM_gNB_X2_indicationHeader_t)); + assert(header != 0); + + message = 0; + message = (E2N_E2SM_gNB_X2_indicationMessage_t *)calloc(1, sizeof(E2N_E2SM_gNB_X2_indicationMessage_t)); + assert(message != 0); +} + +e2sm_indication::~e2sm_indication(void){ + mdclog_write(MDCLOG_DEBUG, "Freeing E2N_E2SM Indication object memory"); + + free(gNodeB_ID.gNB_ID.choice.gNB_ID.buf); + free(gNodeB_ID.pLMN_Identity.buf); + + header->interface_ID.choice.global_gNB_ID = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2SM_gNB_X2_indicationHeader, header); + + message->interfaceMessage.buf = 0; + message->interfaceMessage.size = 0; + + ASN_STRUCT_FREE(asn_DEF_E2N_E2SM_gNB_X2_indicationMessage, message); + mdclog_write(MDCLOG_DEBUG, "Freed E2SM Indication object memory"); + +} + + + +bool e2sm_indication::encode_indication_header(unsigned char *buf, size_t *size, e2sm_header_helper &helper){ + + bool res; + res = set_header_fields(header, helper); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2SM_gNB_X2_indicationHeader, header, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "E2SM Indication Header Constraint failed : " + error_string; + + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2SM_gNB_X2_indicationHeader, header, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding E2N_E2SM Indication Header. Reason = " + error_string; + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding E2SM Indication Header . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + + +bool e2sm_indication::encode_indication_message(unsigned char *buf, size_t *size, e2sm_message_helper &helper){ + + set_message_fields(message, helper); + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2SM_gNB_X2_indicationMessage, message, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "E2SM Indication Message Constraint failed : " + error_string; + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2SM_gNB_X2_indicationMessage, message, buf, *size); + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding E2SM Indication Header. Reason = " + error_string; + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding E2N_E2SM Indication Message . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + + + +// Used when generating an indication header +bool e2sm_indication::set_header_fields(E2N_E2SM_gNB_X2_indicationHeader_t *header, e2sm_header_helper &helper){ + + if (header == 0){ + error_string = "Invalid reference for E2SM Indication Header set fields"; + return false; + } + + + header->interfaceDirection = helper.interface_direction; + header->interface_ID.present = E2N_Interface_ID_PR_global_gNB_ID; + header->interface_ID.choice.global_gNB_ID = &gNodeB_ID; + + + // to do : need to put correct code here for upding plmn id and gNodeB + // for now just place holders : + memcpy(gNodeB_ID.pLMN_Identity.buf, helper.plmn_id.c_str(), 3); + gNodeB_ID.pLMN_Identity.size = 3; + + memcpy(gNodeB_ID.gNB_ID.choice.gNB_ID.buf, helper.egNB_id.c_str(), 3); + gNodeB_ID.gNB_ID.choice.gNB_ID.size = 3; + + // we only do global gNodeB id for now, not eNodeB + gNodeB_ID.gNB_ID.present = E2N_GNB_ID_PR_gNB_ID; + + return true; + +}; + + +// used when decoding an indication header +bool e2sm_indication::get_header_fields(E2N_E2SM_gNB_X2_indicationHeader_t *header, e2sm_header_helper &helper){ + + if (header == 0){ + error_string = "Invalid reference for E2SM Indication header get fields"; + return false; + } + + helper.interface_direction = header->interfaceDirection; + helper.plmn_id.assign((const char *)header->interface_ID.choice.global_gNB_ID->pLMN_Identity.buf, header->interface_ID.choice.global_gNB_ID->pLMN_Identity.size); + helper.egNB_id.assign((const char *)header->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.buf, header->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.size); + + // to do : add code to decipher plmn and global gnodeb from ints (since that is likely the convention for packing) + + return true; +} + + + +// Used when generating an indication message +bool e2sm_indication::set_message_fields(E2N_E2SM_gNB_X2_indicationMessage_t *interface_message, e2sm_message_helper &helper){ + + if(interface_message == 0){ + error_string = "Invalid reference for E2SM Indication Message set fields"; + return false; + } + + // interface-message is an octet string. just point it to the buffer + interface_message->interfaceMessage.buf = &(helper.x2ap_pdu[0]); + interface_message->interfaceMessage.size = helper.x2ap_pdu_size; + + return true; + +}; + +// used when decoding an indication message +bool e2sm_indication::get_message_fields( E2N_E2SM_gNB_X2_indicationMessage_t *interface_message, e2sm_message_helper &helper){ + + + if(interface_message == 0){ + error_string = "Invalid reference for E2SM Indication Message get fields"; + return false; + } + + // interface message is an octet string + helper.x2ap_pdu = interface_message->interfaceMessage.buf;; + helper.x2ap_pdu_size = interface_message->interfaceMessage.size; + + return true; + +} + + + +// initialize +e2sm_control::e2sm_control(void) { + + memset(&gNodeB_ID, 0, sizeof(E2N_GlobalGNB_ID_t)); + + // allocate space for gNodeB id (used for encoding) + gNodeB_ID.gNB_ID.choice.gNB_ID.buf = (uint8_t *)calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.gNB_ID.choice.gNB_ID.buf != 0); + + // allocate space for plmn identity (used for encoding) + gNodeB_ID.pLMN_Identity.buf = (uint8_t *) calloc(4, sizeof(uint8_t)); + assert(gNodeB_ID.pLMN_Identity.buf != 0); + + header = 0; + header = (E2N_E2SM_gNB_X2_controlHeader_t *)calloc(1, sizeof(E2N_E2SM_gNB_X2_controlHeader_t)); + assert(header != 0); + + message = 0; + message = (E2N_E2SM_gNB_X2_controlMessage_t *)calloc(1, sizeof(E2N_E2SM_gNB_X2_controlMessage_t)); + assert(message != 0); +} + +e2sm_control::~e2sm_control(void){ + mdclog_write(MDCLOG_DEBUG, "Freeing E2SM Control object memory"); + + free(gNodeB_ID.gNB_ID.choice.gNB_ID.buf); + free(gNodeB_ID.pLMN_Identity.buf); + header->interface_ID.choice.global_gNB_ID = 0; + ASN_STRUCT_FREE(asn_DEF_E2N_E2SM_gNB_X2_controlHeader, header); + + message->interfaceMessage.buf = 0; + ASN_STRUCT_FREE(asn_DEF_E2N_E2SM_gNB_X2_controlMessage, message); + + mdclog_write(MDCLOG_DEBUG, "Freed E2SM Control object memory"); + +} + + + +bool e2sm_control::encode_control_header(unsigned char *buf, size_t *size, e2sm_header_helper &helper){ + + bool res; + res = set_header_fields(header, helper); + if (!res){ + return false; + } + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2SM_gNB_X2_controlHeader, header, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "E2SM Control Header Constraint failed : " + error_string; + + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2SM_gNB_X2_controlHeader, header, buf, *size); + + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding E2SM Control Header. Reason = " + error_string; + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding E2N_E2SM Control Header . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + + +bool e2sm_control::encode_control_message(unsigned char *buf, size_t *size, e2sm_message_helper &helper){ + + set_message_fields(message, helper); + + int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2SM_gNB_X2_controlMessage, message, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "E2SM Control Message Constraint failed : " + error_string; + return false; + } + + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2SM_gNB_X2_controlMessage, message, buf, *size); + if(retval.encoded == -1){ + error_string.assign(strerror(errno)); + error_string = "Error encoding E2SM Control Message. Reason = " + error_string; + return false; + } + else if (retval.encoded > *size){ + std::stringstream ss; + ss <<"Error encoding E2SM Control Message . Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl; + error_string = ss.str(); + + return false; + } + else{ + *size = retval.encoded; + } + + return true; +} + + + +// Used when generating an indication header +bool e2sm_control::set_header_fields(E2N_E2SM_gNB_X2_controlHeader_t *header, e2sm_header_helper &helper){ + + if (header == 0){ + error_string = "Invalid reference for E2SM Control Header set fields"; + return false; + } + + + header->interfaceDirection = helper.interface_direction; + header->interface_ID.present = E2N_Interface_ID_PR_global_gNB_ID; + header->interface_ID.choice.global_gNB_ID = &gNodeB_ID; + + + // to do : need to put correct code here for upding plmn id and gNodeB + // for now just place holders : + memcpy(gNodeB_ID.pLMN_Identity.buf, helper.plmn_id.c_str(), 3); + gNodeB_ID.pLMN_Identity.size = 3; + + memcpy(gNodeB_ID.gNB_ID.choice.gNB_ID.buf, helper.egNB_id.c_str(), 3); + gNodeB_ID.gNB_ID.choice.gNB_ID.size = 3; + + // we only do global gNodeB id for now, not eNodeB + gNodeB_ID.gNB_ID.present = E2N_GNB_ID_PR_gNB_ID; + + return true; + +}; + + +// used when decoding an indication header +bool e2sm_control::get_header_fields(E2N_E2SM_gNB_X2_controlHeader_t *header, e2sm_header_helper &helper){ + + if (header == 0){ + error_string = "Invalid reference for E2SM Control header get fields"; + return false; + } + + helper.interface_direction = header->interfaceDirection; + helper.plmn_id.assign((const char *)header->interface_ID.choice.global_gNB_ID->pLMN_Identity.buf, header->interface_ID.choice.global_gNB_ID->pLMN_Identity.size); + helper.egNB_id.assign((const char *)header->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.buf, header->interface_ID.choice.global_gNB_ID->gNB_ID.choice.gNB_ID.size); + + // to do : add code to decipher plmn and global gnodeb from ints (since that is likely the convention for packing) + + return true; +} + + + +// Used when generating an indication message +bool e2sm_control::set_message_fields(E2N_E2SM_gNB_X2_controlMessage_t *interface_message, e2sm_message_helper &helper){ + + if(interface_message == 0){ + error_string = "Invalid reference for E2SM Control Message set fields"; + return false; + } + + // interface-message is an octet string. just point it to the buffer + interface_message->interfaceMessage.buf = &(helper.x2ap_pdu[0]); + interface_message->interfaceMessage.size = helper.x2ap_pdu_size; + + return true; + +}; + +// used when decoding an indication message +bool e2sm_control::get_message_fields( E2N_E2SM_gNB_X2_controlMessage_t *interface_message, e2sm_message_helper &helper){ + + + if(interface_message == 0){ + error_string = "Invalid reference for E2SM Control Message get fields"; + return false; + } + + // interface message is an octet string + helper.x2ap_pdu = interface_message->interfaceMessage.buf;; + helper.x2ap_pdu_size = interface_message->interfaceMessage.size; + + return true; + +} + diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.hpp new file mode 100644 index 0000000..a16d95c --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm.hpp @@ -0,0 +1,145 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +/* Classes to handle E2 service model based on e2sm-gNB-X2-release-1-v040.asn */ + +#ifndef E2SM_ +#define E2SM_ + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include "../../xapp-formats/e2sm/e2sm_helpers.hpp" + +#define INITIAL_LIST_SIZE 4 + + + + +/* builder class for E2SM event trigger definition */ + +class e2sm_event_trigger { +public: + e2sm_event_trigger(void); + ~e2sm_event_trigger(void); + + bool set_fields(E2N_E2SM_gNB_X2_eventTriggerDefinition_t *, e2sm_event_trigger_helper &); + bool get_fields(E2N_E2SM_gNB_X2_eventTriggerDefinition_t *, e2sm_event_trigger_helper &); + bool encode_event_trigger(unsigned char *, size_t *, e2sm_event_trigger_helper &); + + std::string get_error (void) const {return error_string ;}; + +private: + + E2N_E2SM_gNB_X2_eventTriggerDefinition_t * event_trigger; // used for encoding + E2N_GlobalGNB_ID_t gNodeB_ID; + struct E2N_InterfaceProtocolIE_Item * ie_list; + unsigned int ie_list_size; + + //std::vector ie_list; + E2N_E2SM_gNB_X2_eventTriggerDefinition::E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List *condition_list; + + char errbuf[128]; + size_t errbuf_len; + std::string error_string; +}; + + +/* builder class for E2SM indication using ASN1c */ + +class e2sm_indication { +public: + + e2sm_indication(void); + ~e2sm_indication(void); + + E2N_E2SM_gNB_X2_indicationHeader_t * get_header(void); + E2N_E2SM_gNB_X2_indicationMessage_t * get_message(void); + + bool set_header_fields(E2N_E2SM_gNB_X2_indicationHeader_t *, e2sm_header_helper &); + bool get_header_fields(E2N_E2SM_gNB_X2_indicationHeader_t *, e2sm_header_helper &); + + bool set_message_fields(E2N_E2SM_gNB_X2_indicationMessage_t *, e2sm_message_helper &); + bool get_message_fields(E2N_E2SM_gNB_X2_indicationMessage_t *, e2sm_message_helper &); + + bool encode_indication_header(unsigned char * , size_t * , e2sm_header_helper &); + bool encode_indication_message(unsigned char *, size_t *, e2sm_message_helper &); + std::string get_error (void) const {return error_string ; }; + +private: + + E2N_E2SM_gNB_X2_indicationHeader_t *header; // used for encoding + E2N_E2SM_gNB_X2_indicationMessage_t *message; // used for encoding + + char errbuf[128]; + size_t errbuf_len; + E2N_GlobalGNB_ID_t gNodeB_ID; + std::string error_string; + + +}; + +/* builder class for E2SM control using ASN1c */ + +class e2sm_control { +public: + + e2sm_control(void); + ~e2sm_control(void); + + E2N_E2SM_gNB_X2_controlHeader_t * get_header(void); + E2N_E2SM_gNB_X2_controlMessage_t * get_message(void); + + bool set_header_fields(E2N_E2SM_gNB_X2_controlHeader_t *, e2sm_header_helper &); + bool get_header_fields(E2N_E2SM_gNB_X2_controlHeader_t *, e2sm_header_helper &); + + bool set_message_fields(E2N_E2SM_gNB_X2_controlMessage_t *, e2sm_message_helper &); + bool get_message_fields(E2N_E2SM_gNB_X2_controlMessage_t *, e2sm_message_helper &); + + bool encode_control_header(unsigned char * , size_t * , e2sm_header_helper &); + bool encode_control_message(unsigned char *, size_t *, e2sm_message_helper &); + std::string get_error (void) const {return error_string ; }; + +private: + + E2N_E2SM_gNB_X2_controlHeader_t *header; // used for encoding + E2N_E2SM_gNB_X2_controlMessage_t *message; // used for encoding + + char errbuf[128]; + size_t errbuf_len; + E2N_GlobalGNB_ID_t gNodeB_ID; + std::string error_string; + + +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm_helpers.hpp b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm_helpers.hpp new file mode 100644 index 0000000..95ab8ca --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-formats/e2sm/e2sm_helpers.hpp @@ -0,0 +1,115 @@ +/* + ================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, softwares + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================== +*/ + +/* Classes to handle E2 service model based on e2sm-gNB-X2-release-1-v040.asn */ + +#ifndef E2SM_HELPER_ +#define E2SM_HELPER_ + +#include +#include +#include +#include + + /* information holder for E2SM indication header */ +typedef struct e2sm_header_helper e2sm_header_helper; +struct e2sm_header_helper { + int egNB_id_type; + + std::string egNB_id; + std::string plmn_id; + + long int interface_direction; + unsigned char* timestamp; +}; + +/* information holder for E2SM indication message */ +typedef struct e2sm_message_helper e2sm_message_helper; +struct e2sm_message_helper { + unsigned char * x2ap_pdu; + size_t x2ap_pdu_size; +}; + + +/* information holder for E2SM Action Trigger Definition */ +struct Item +{ + Item(long int id, long int test, long int val_type, int value):interface_id(id), test(test), val_type(val_type), value_n(value){}; + Item(long int id, long int test, long int val_type, std::string value):interface_id(id), test(test), val_type(val_type), value_s(value){}; + + long int interface_id; + long int test; + long int val_type; + long int value_n; + std::string value_s; + +}; + +typedef struct e2sm_event_trigger_helper e2sm_event_trigger_helper; +struct e2sm_event_trigger_helper { + + int egNB_id_type; + std::string egNB_id; + std::string plmn_id; + + long int interface_direction; + long int procedure_code; + + long int message_type; + + + std::vector * get_list(void){ return &protocol_ie_list; }; + void add_protocol_ie_item(long int id, long int test , unsigned int val_type, long int value ){ + // into list + protocol_ie_list.emplace_back(id, test, val_type, value); + }; + + void add_protocol_ie_item(long int id, long int test, unsigned int val_type, std::string value){ + // into list + protocol_ie_list.emplace_back(id, test, val_type, value); + }; + + void clear(void){ + protocol_ie_list.clear(); + } + + std::string get_string(void) const { + std::stringstream ss; + ss << "egNB_ID_type = " << egNB_id_type << std::endl; + ss << "PLMN Id = " << plmn_id << std::endl; + ss << "Procedure Code = " << procedure_code << std::endl; + ss << "Message Type = " << message_type << std::endl; + + std::string info; + info = ss.str(); + return info; + } + + + +private: + + std::vector protocol_ie_list; + +}; + + + + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/a1_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-mgmt/a1_helper.hpp new file mode 100644 index 0000000..6637209 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/a1_helper.hpp @@ -0,0 +1,49 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * a1_policy.hpp + * + * Created on: Mar, 2020 + * Author: Shraboni Jana + */ + +#ifndef SRC_XAPP_MGMT_A1MSG_A1_POLICY_HELPER_HPP_ +#define SRC_XAPP_MGMT_A1MSG_A1_POLICY_HELPER_HPP_ + +#include +#include +#include +#include + +using namespace rapidjson; + +//typedef struct a1_policy_helper a1_policy_helper; + +/*struct a1_policy_helper{ + + std::string operation; + std::string policy_type_id; + std::string policy_instance_id; + std::string handler_id; + std::string status; + +};*/ + + +#endif /* SRC_XAPP_FORMATS_A1MSG_A1_POLICY_HELPER_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/format_helper.hpp b/ric_benchmarking/Bouncer/src/xapp-mgmt/format_helper.hpp new file mode 100644 index 0000000..0c1bfbb --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/format_helper.hpp @@ -0,0 +1,48 @@ +/* +================================================================================== + + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * a1_policy.hpp + * + * Created on: Mar, 2020 + * Author: Shraboni Jana + */ + +#ifndef SRC_XAPP_MGMT_A1MSG_A1_POLICY_HELPER_HPP_ +#define SRC_XAPP_MGMT_A1MSG_A1_POLICY_HELPER_HPP_ + +#include +#include +#include +#include + +using namespace rapidjson; + +//typedef struct a1_policy_helper a1_policy_helper; + +/*struct a1_policy_helper{ + + std::string operation; + std::string policy_type_id; + std::string policy_instance_id; + std::string handler_id; + std::string status; + +};*/ + +#endif /* SRC_XAPP_FORMATS_A1MSG_A1_POLICY_HELPER_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.cc b/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.cc new file mode 100644 index 0000000..e2954ae --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.cc @@ -0,0 +1,213 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + +#include "msgs_proc.hpp" + + +bool XappMsgHandler::encode_subscription_delete_request(unsigned char* buffer, size_t *buf_len){ + + subscription_helper sub_helper; + sub_helper.set_request(0); // requirement of subscription manager ... ? + sub_helper.set_function_id(0); + + subscription_delete e2ap_sub_req_del; + + // generate the delete request pdu + + bool res = e2ap_sub_req_del.encode_e2ap_subscription(&buffer[0], buf_len, sub_helper); + if(! res){ + mdclog_write(MDCLOG_ERR, "%s, %d: Error encoding subscription delete request pdu. Reason = %s", __FILE__, __LINE__, e2ap_sub_req_del.get_error().c_str()); + return false; + } + + return true; + +} + +bool XappMsgHandler::decode_subscription_response(unsigned char* data_buf, size_t data_size){ + + subscription_helper subhelper; + subscription_response subresponse; + bool res = true; + E2AP_PDU_t *e2pdu = 0; + + asn_dec_rval_t rval; + + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, e2pdu); + + rval = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void**)&e2pdu, data_buf, data_size); + switch(rval.code) + { + case RC_OK: + //Put in Subscription Response Object. + //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu); + break; + case RC_WMORE: + mdclog_write(MDCLOG_ERR, "RC_WMORE"); + res = false; + break; + case RC_FAIL: + mdclog_write(MDCLOG_ERR, "RC_FAIL"); + res = false; + break; + default: + break; + } + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2pdu); + return res; + +} + +/*bool XappMsgHandler::a1_policy_handler(char * message, int *message_len, a1_policy_helper &helper){ + + rapidjson::Document doc; + if (doc.Parse(message).HasParseError()){ + mdclog_write(MDCLOG_ERR, "Error: %s, %d :: Could not decode A1 JSON message %s\n", __FILE__, __LINE__, message); + return false; + } + + //Extract Operation + rapidjson::Pointer temp1("/operation"); + rapidjson::Value * ref1 = temp1.Get(doc); + if (ref1 == NULL){ + mdclog_write(MDCLOG_ERR, "Error : %s, %d:: Could not extract policy type id from %s\n", __FILE__, __LINE__, message); + return false; + } + + helper.operation = ref1->GetString(); + + // Extract policy id type + rapidjson::Pointer temp2("/policy_type_id"); + rapidjson::Value * ref2 = temp2.Get(doc); + if (ref2 == NULL){ + mdclog_write(MDCLOG_ERR, "Error : %s, %d:: Could not extract policy type id from %s\n", __FILE__, __LINE__, message); + return false; + } + //helper.policy_type_id = ref2->GetString(); + helper.policy_type_id = to_string(ref2->GetInt()); + + // Extract policy instance id + rapidjson::Pointer temp("/policy_instance_id"); + rapidjson::Value * ref = temp.Get(doc); + if (ref == NULL){ + mdclog_write(MDCLOG_ERR, "Error : %s, %d:: Could not extract policy type id from %s\n", __FILE__, __LINE__, message); + return false; + } + helper.policy_instance_id = ref->GetString(); + + if (helper.policy_type_id == "1" && helper.operation == "CREATE"){ + helper.status = "OK"; + Document::AllocatorType& alloc = doc.GetAllocator(); + + Value handler_id; + handler_id.SetString(helper.handler_id.c_str(), helper.handler_id.length(), alloc); + + Value status; + status.SetString(helper.status.c_str(), helper.status.length(), alloc); + + + doc.AddMember("handler_id", handler_id, alloc); + doc.AddMember("status",status, alloc); + doc.RemoveMember("operation"); + StringBuffer buffer; + Writer writer(buffer); + doc.Accept(writer); + strncpy(message,buffer.GetString(), buffer.GetLength()); + *message_len = buffer.GetLength(); + return true; + } + return false; +}*/ + + +//For processing received messages.XappMsgHandler should mention if resend is required or not. +void XappMsgHandler::operator()(rmr_mbuf_t *message, bool *resend){ + + if (message->len > MAX_RMR_RECV_SIZE){ + mdclog_write(MDCLOG_ERR, "Error : %s, %d, RMR message larger than %d. Ignoring ...", __FILE__, __LINE__, MAX_RMR_RECV_SIZE); + return; + } + //a1_policy_helper helper; + bool res=false; + switch(message->mtype){ + //need to fix the health check. + case (RIC_HEALTH_CHECK_REQ): + message->mtype = RIC_HEALTH_CHECK_RESP; // if we're here we are running and all is ok + message->sub_id = -1; + strncpy( (char*)message->payload, "Bouncer OK\n", rmr_payload_size( message) ); + *resend = true; + break; + + case (RIC_SUB_RESP): + mdclog_write(MDCLOG_INFO, "Received subscription message of type = %d", message->mtype); + unsigned char *me_id; + if( (me_id = (unsigned char *) malloc( sizeof( unsigned char ) * RMR_MAX_MEID )) == NULL ) { + mdclog_write(MDCLOG_ERR, "Error : %s, %d : malloc failed for me_id", __FILE__, __LINE__); + me_id = rmr_get_meid(message, NULL); + } else { + rmr_get_meid(message, me_id); + } + if(me_id == NULL){ + mdclog_write(MDCLOG_ERR, " Error :: %s, %d : rmr_get_meid failed me_id is NULL", __FILE__, __LINE__); + break; + } + mdclog_write(MDCLOG_INFO,"RMR Received MEID: %s",me_id); + if(_ref_sub_handler !=NULL){ + _ref_sub_handler->manage_subscription_response(message->mtype, reinterpret_cast< char const* >(me_id)); + } else { + mdclog_write(MDCLOG_ERR, " Error :: %s, %d : Subscription handler not assigned in message processor !", __FILE__, __LINE__); + } + *resend = false; + if (me_id != NULL) { + mdclog_write(MDCLOG_INFO, "Free RMR Received MEID memory: %s(0x%x)", me_id, me_id); + free(me_id); + } + break; + case (RIC_INDICATION): + mdclog_write(MDCLOG_INFO, "Received indication message of type = %d", message->mtype); + message->mtype = RIC_CONTROL_REQ; // if we're here we are running and all is ok + message->sub_id = -1; + strncpy((char*)message->payload, "Bouncer Control OK\n", rmr_payload_size(message)); + *resend = true; + break; + + /*case A1_POLICY_REQ: + + mdclog_write(MDCLOG_INFO, "In Message Handler: Received A1_POLICY_REQ."); + helper.handler_id = xapp_id; + + res = a1_policy_handler((char*)message->payload, &message->len, helper); + if(res){ + message->mtype = A1_POLICY_RESP; // if we're here we are running and all is ok + message->sub_id = -1; + *resend = true; + } + break;*/ + + default: + { + mdclog_write(MDCLOG_ERR, "Error :: Unknown message type %d received from RMR", message->mtype); + *resend = false; + } + } + + return; + +}; + + diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.hpp b/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.hpp new file mode 100644 index 0000000..a0c97f6 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/msgs_proc.hpp @@ -0,0 +1,68 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +#pragma once + +#ifndef XAPP_MSG_XAPP_MSG_HPP_ +#define XAPP_MSG_XAPP_MSG_HPP_ + +#include +#include +#include +#include + +#include "a1_helper.hpp" +#include "e2ap_control.hpp" +#include "e2ap_control_response.hpp" +#include "e2ap_indication.hpp" +#include "subscription_delete_request.hpp" +#include "subscription_delete_response.hpp" +#include "subscription_helper.hpp" +#include "subscription_request.hpp" +#include "subscription_request.hpp" +#include "subscription_response.hpp" +#include "e2sm_subscription.hpp" +#include "subs_mgmt.hpp" + +#define MAX_RMR_RECV_SIZE 2<<15 + +class XappMsgHandler{ + +private: + std::string xapp_id; + SubscriptionHandler *_ref_sub_handler; +public: + //constructor for xapp_id. + XappMsgHandler(std::string xid){xapp_id=xid; _ref_sub_handler=NULL;}; + XappMsgHandler(std::string xid, SubscriptionHandler &subhandler){xapp_id=xid; _ref_sub_handler=&subhandler;}; + + void operator() (rmr_mbuf_t *, bool*); + + void register_handler(); + bool encode_subscription_delete_request(unsigned char*, size_t* ); + + bool decode_subscription_response(unsigned char*, size_t ); + + //bool a1_policy_handler(char *, int* , a1_policy_helper &); + + void testfunction() {std::cout << "<<<<<<<<<<<<<<<<< +#include + +SubscriptionHandler::SubscriptionHandler(unsigned int timeout_seconds):_time_out(std::chrono::seconds(timeout_seconds)){ + _data_lock = std::make_unique(); + _cv = std::make_unique(); +}; + +void SubscriptionHandler::clear(void){ + { + std::lock_guard lock(*(_data_lock).get()); + status_table.clear(); + } + +}; + + +bool SubscriptionHandler::add_request_entry(transaction_identifier id, transaction_status status){ + + // add entry in hash table if it does not exist + auto search = status_table.find(id); + if(search != status_table.end()){ + return false; + } + + status_table[id] = status; + return true; + +}; + + + +bool SubscriptionHandler::delete_request_entry(transaction_identifier id){ + + auto search = status_table.find(id); + + if (!trans_table.empty()) { + auto search2 = trans_table.find(id); + if(search2 !=trans_table.end()){ + trans_table.erase(search2); + } + } + + if (search != status_table.end()){ + status_table.erase(search); + mdclog_write(MDCLOG_INFO,"Entry for Transaction ID deleted: %d",id); + return true; + } + mdclog_write(MDCLOG_INFO,"Entry not found in SubscriptionHandler for Transaction ID: %d",id); + + return false; +}; + + +bool SubscriptionHandler::set_request_status(transaction_identifier id, transaction_status status){ + + // change status of a request only if it exists. + for(auto &it:status_table){ + if(strcmp(it.first.c_str(), id.c_str())==0) { + it.second = status; + return true; + } + } + return false; + +}; + + +int SubscriptionHandler::get_request_status(transaction_identifier id){ + + for(auto it:status_table){ + if(strcmp(it.first.c_str(), id.c_str())==0) { + return it.second; + } + } + + + return -1; +} + + + +bool SubscriptionHandler::is_request_entry(transaction_identifier id){ + for(auto it:status_table){ + if(strcmp(it.first.c_str(), id.c_str())==0) { + return true; + } + } + return false; +} + + + + +// Handles subscription responses +void SubscriptionHandler::manage_subscription_response(int message_type, transaction_identifier id){ + // Make This Thread sleep for 1 Second + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + { + std::unique_lock _local_lock(*(_data_lock.get())); + mdclog_write(MDCLOG_INFO,"Subscription Handler: Status for me id %s WAS: %d",id.c_str(),this->get_request_status(id)); + + //from the message type we can know if its a success/failure etc. + if(message_type==RIC_SUB_RESP) + this->set_request_status(id, request_success); + + if(message_type==RIC_SUB_FAILURE) + this->set_request_status(id,request_failed); + + mdclog_write(MDCLOG_INFO,"Subscription Handler: Status for me id %s IS: %d",id.c_str(),this->get_request_status(id)); + + //this->print_subscription_status(); + } + //_cv.get()->notify_all(); + +} + diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/subs_mgmt.hpp b/ric_benchmarking/Bouncer/src/xapp-mgmt/subs_mgmt.hpp new file mode 100644 index 0000000..c500827 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/subs_mgmt.hpp @@ -0,0 +1,204 @@ +/* +================================================================================== + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ +/* + * subs_mgmt.hpp + * Created on: 2019 + * Author: Ashwin Shridharan, Shraboni Jana + */ + +#pragma once + +#ifndef SUBSCRIPTION_HANDLER +#define SUBSCRIPTION_HANDLER + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "subscription_delete_request.hpp" +#include "subscription_delete_response.hpp" +#include "subscription_request.hpp" +#include "subscription_response.hpp" + +#define SUBSCR_SUCCESS 1 +#define SUBSCR_ERR_TX -1 +#define SUBSCR_ERR_TIMEOUT -2 +#define SUBSCR_ERR_FAIL -3 +#define SUBSCR_ERR_UNKNOWN -4 +#define SUBSCR_ERR_DUPLICATE -5 + +using namespace std; + +class TransmitterBase +{ +public: + virtual ~TransmitterBase() {} + + template + const T& getParam() const; //to be implemented after Parameter + + template + void setParam(const U& rhs); //to be implemented after Parameter +}; + +template +class Transmitter : public TransmitterBase +{ +public: + Transmitter(const T& tx) :obj(tx) {} + const T& getParam() const {return obj;} + void setParam(const T& tx) {obj=tx;} +private: + T obj; +}; + +//Here's the trick: dynamic_cast rather than virtual +template const T& TransmitterBase::getParam() const +{ + return dynamic_cast&>(*this).getParam(); +} +template void TransmitterBase::setParam(const U& rhs) +{ + dynamic_cast&>(*this).setParam(rhs); + return; +} + +typedef enum { + request_pending = 1, + request_success, + request_failed, + request_duplicate +}Subscription_Status_Types; + + +using transaction_identifier = std::string; +using transaction_status = Subscription_Status_Types; + +class SubscriptionHandler { + +public: + + SubscriptionHandler(unsigned int timeout_seconds = 30); + + template + int manage_subscription_request(transaction_identifier, AppTransmitter &&); + + template + int manage_subscription_delete_request(transaction_identifier, AppTransmitter &&); + + void manage_subscription_response(int message_type, transaction_identifier id); + + int get_request_status(transaction_identifier); + bool set_request_status(transaction_identifier, transaction_status); + bool is_request_entry(transaction_identifier); + void set_timeout(unsigned int); + void clear(void); + void set_ignore_subs_resp(bool b){_ignore_subs_resp = b;}; + + void print_subscription_status(){ for(auto it:status_table){std::cout << it.first << "::" << it.second << std::endl;}}; + +private: + + bool add_request_entry(transaction_identifier, transaction_status); + bool delete_request_entry(transaction_identifier); + + template + bool add_transmitter_entry(transaction_identifier, AppTransmitter&&); + + std::unordered_map trans_table; + std::unordered_map status_table; + + std::unique_ptr _data_lock; + std::unique_ptr _cv; + + std::chrono::seconds _time_out; + + bool _ignore_subs_resp = false; +}; + +template +bool SubscriptionHandler::add_transmitter_entry(transaction_identifier id, AppTransmitter &&trans){ + mdclog_write(MDCLOG_INFO,"Entry added for Transaction ID: %s",id.c_str()); + + // add entry in hash table if it does not exist + auto search = trans_table.find(id); + if(search != trans_table.end()){ + return false; + } + + Transmitter tptr(trans); + trans_table[id] = tptr; + return true; + +}; + +//this will work for both sending subscription request and subscription delete request. +//The handler is oblivious of the message content and follows the transaction id. +template +int SubscriptionHandler::manage_subscription_request(transaction_identifier rmr_trans_id, AppTransmitter && tx){ + int res; + // put entry in request table + { + std::lock_guard lock(*(_data_lock.get())); + + res = add_request_entry(rmr_trans_id, request_pending); + if(! res){ + mdclog_write(MDCLOG_ERR, "%s, %d : Error adding new subscription request %s to queue because request with identical key already present", __FILE__, __LINE__, rmr_trans_id); + return SUBSCR_ERR_DUPLICATE; + } + } + + + // acquire lock ... + std::unique_lock _local_lock(*(_data_lock.get())); + + // Send the message + bool flg = tx(); + + if (!flg){ + // clear state + delete_request_entry(rmr_trans_id); + mdclog_write(MDCLOG_ERR, "%s, %d :: Error transmitting subscription request %s", __FILE__, __LINE__, rmr_trans_id.c_str() ); + return SUBSCR_ERR_TX; + } else { + mdclog_write(MDCLOG_INFO, "%s, %d :: Transmitted subscription request for trans_id %s", __FILE__, __LINE__, rmr_trans_id.c_str() ); + add_transmitter_entry(rmr_trans_id, tx); + + } + + // record time stamp .. + auto start = std::chrono::system_clock::now(); + std::chrono::milliseconds t_out(_time_out); + + //the wait functionality has been removed. + + + _local_lock.unlock(); + // std::cout <<"Returning res = " << res << " for request = " << rmr_trans_id << std::endl; + return res; +}; + +#endif diff --git a/ric_benchmarking/Bouncer/src/xapp-mgmt/xapp_handler.hpp b/ric_benchmarking/Bouncer/src/xapp-mgmt/xapp_handler.hpp new file mode 100644 index 0000000..5b547b7 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-mgmt/xapp_handler.hpp @@ -0,0 +1,21 @@ +/* + * xapp_handler.hpp + * + * Created on: Mar 16, 2020 + * Author: Shraboni Jana + */ + +#ifndef SRC_XAPP_MGMT_XAPP_HANDLER_HPP_ +#define SRC_XAPP_MGMT_XAPP_HANDLER_HPP_ + +class XappHandler{ + XappHandler *xhandler; +public: + virtual ~XappHandler(){delete xhandler;}; + virtual void register_handler(XappHandler *xhandler) = 0; + virtual XappHandler* get_handler() = 0; +}; + + + +#endif /* SRC_XAPP_MGMT_XAPP_HANDLER_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.cc b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.cc new file mode 100644 index 0000000..b4a1bb2 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.cc @@ -0,0 +1,138 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + +#include "xapp_config.hpp" + +string& XappSettings::operator[](const SettingName& theName){ + return theSettings[theName]; +} + +void XappSettings::loadCmdlineSettings(int argc, char **argv){ + + // Parse command line options to over ride + static struct option long_options[] = + { + {"xappname", required_argument, 0, 'n'}, + {"xappid", required_argument, 0, 'x'}, + {"port", required_argument, 0, 'p'}, + {"threads", required_argument, 0, 't'}, + {"ves-interval", required_argument, 0, 'i'}, + {"gNodeB", required_argument, 0, 'g'} + + }; + + + while(1) { + + int option_index = 0; + char c = getopt_long(argc, argv, "n:p:t:s:g:a:v:u:i:c:x:", long_options, &option_index); + + if(c == -1){ + break; + } + + switch(c) + { + + case 'n': + theSettings[XAPP_NAME].assign(optarg); + break; + + case 'p': + theSettings[BOUNCER_PORT].assign(optarg); + break; + + case 't': + theSettings[THREADS].assign(optarg); + mdclog_write(MDCLOG_INFO, "Number of threads set to %s from command line e\n", theSettings[THREADS].c_str()); + break; + + + case 'x': + theSettings[XAPP_ID].assign(optarg); + mdclog_write(MDCLOG_INFO, "XAPP ID set to %s from command line ", theSettings[XAPP_ID].c_str()); + break; + + case 'h': + usage(argv[0]); + exit(0); + + default: + usage(argv[0]); + exit(1); + } + }; + +} + +void XappSettings::loadDefaultSettings(){ + + + if(theSettings[XAPP_NAME].empty()){ + theSettings[XAPP_NAME] = DEFAULT_XAPP_NAME; + } + + if(theSettings[XAPP_ID].empty()){ + theSettings[XAPP_ID] = DEFAULT_XAPP_NAME; //for now xapp_id is same as xapp_name since single xapp instance. + } + if(theSettings[LOG_LEVEL].empty()){ + theSettings[LOG_LEVEL] = DEFAULT_LOG_LEVEL; + } + if(theSettings[BOUNCER_PORT].empty()){ + theSettings[BOUNCER_PORT] = DEFAULT_PORT; + } + if(theSettings[MSG_MAX_BUFFER].empty()){ + theSettings[MSG_MAX_BUFFER] = DEFAULT_MSG_MAX_BUFFER; + } + + if(theSettings[THREADS].empty()){ + theSettings[THREADS] = DEFAULT_THREADS; + } + + +} + +void XappSettings::loadEnvVarSettings(){ + + if (const char *env_xname = std::getenv("XAPP_NAME")){ + theSettings[XAPP_NAME].assign(env_xname); + mdclog_write(MDCLOG_INFO,"Xapp Name set to %s from environment variable", theSettings[XAPP_NAME].c_str()); + } + if (const char *env_xid = std::getenv("XAPP_NAME")){ + theSettings[XAPP_ID].assign(env_xid); + mdclog_write(MDCLOG_INFO,"Xapp ID set to %s from environment variable", theSettings[XAPP_ID].c_str()); + } + + if (const char *env_ports = std::getenv("BOUNCER_PORT")){ + theSettings[BOUNCER_PORT].assign(env_ports); + mdclog_write(MDCLOG_INFO,"Ports set to %s from environment variable", theSettings[BOUNCER_PORT].c_str()); + } + if (const char *env_ports = std::getenv("MSG_MAX_BUFFER")){ + theSettings[MSG_MAX_BUFFER].assign(env_ports); + mdclog_write(MDCLOG_INFO,"Ports set to %s from environment variable", theSettings[MSG_MAX_BUFFER].c_str()); + } + +} + +void XappSettings::usage(char *command){ + std::cout <<"Usage : " << command << " " << std::endl; + std::cout <<" --name[-n] xapp_instance_name "<< std::endl; + std::cout <<" --port[-p] port to listen on e.g tcp:4561 "<< std::endl; + std::cout << "--threads[-t] number of listener threads "<< std::endl ; + +} diff --git a/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.hpp b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.hpp new file mode 100644 index 0000000..4866fa0 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_config.hpp @@ -0,0 +1,67 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +#ifndef SRC_XAPP_CONFIG_XAPP_CONFIG_HPP_ +#define SRC_XAPP_CONFIG_XAPP_CONFIG_HPP_ + +#include +#include +#include +#include +#include + +#define DEFAULT_XAPP_NAME "bouncer-xapp" +#define DEFAULT_PORT "4560" +#define DEFAULT_MSG_MAX_BUFFER "2072" +#define DEFAULT_THREADS "1" + +#define DEFAULT_LOG_LEVEL MDCLOG_WARN + +#define ASN_BUFF_MAX_SIZE 4096 +#define MAX_SUBSCRIPTION_ATTEMPTS 10 +#define BOUNCER_POLICY_ID 2 + +using namespace std; + +struct XappSettings{ + +public: + typedef enum{ + XAPP_ID, + XAPP_NAME, + BOUNCER_PORT, + MSG_MAX_BUFFER, + THREADS, + LOG_LEVEL + }SettingName; + + void loadDefaultSettings(); + void loadCmdlineSettings(int, char **); + void loadEnvVarSettings(); + void usage(char*); + string& operator[](const SettingName& theName); +private: + typedef map SettingCollection; + SettingCollection theSettings; + +}; + + + +#endif /* SRC_XAPP_CONFIG_XAPP_CONFIG_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.cc b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.cc new file mode 100644 index 0000000..31cf774 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.cc @@ -0,0 +1,174 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== + */ + + +#include "xapp_rmr.hpp" + +XappRmr::XappRmr(std::string port, int rmrattempts){ + + _proto_port = port; + _nattempts = rmrattempts; + _xapp_rmr_ctx = NULL; + _xapp_received_buff = NULL; + _xapp_send_buff =NULL; + _rmr_is_ready = false; + _listen = false; + +}; + +XappRmr::~XappRmr(void){ + // free memory + if(_xapp_received_buff) + rmr_free_msg(_xapp_received_buff); + + if(_xapp_send_buff) + rmr_free_msg(_xapp_send_buff); + + if (_xapp_rmr_ctx){ + rmr_close(_xapp_rmr_ctx); + } +}; + +//Get RMR Context. +void XappRmr::xapp_rmr_init(bool rmr_listen){ + + + // Initialize the RMR context + _xapp_rmr_ctx = rmr_init(const_cast(_proto_port.c_str()), RMR_MAX_RCV_BYTES, RMRFL_NONE); + + if ( _xapp_rmr_ctx == NULL){ + mdclog_write(MDCLOG_ERR,"Error Initializing RMR, file= %s, line=%d",__FILE__,__LINE__); + } + while( ! rmr_ready(_xapp_rmr_ctx) ) { + mdclog_write(MDCLOG_INFO,">>> waiting for RMR, file= %s, line=%d",__FILE__,__LINE__); + sleep(1); + } + _rmr_is_ready = true; + mdclog_write(MDCLOG_INFO,"RMR Context is Ready, file= %s, line=%d",__FILE__,__LINE__); + + //Set the listener requirement + _listen = rmr_listen; + return; + +} + +bool XappRmr::rmr_header(xapp_rmr_header *hdr){ + + _xapp_send_buff->mtype = hdr->message_type; + _xapp_send_buff->len = hdr->payload_length; + _xapp_send_buff->sub_id = -1; + rmr_str2meid(_xapp_send_buff, hdr->meid); + + + return true; +} + +//RMR Send with payload and header. +bool XappRmr::xapp_rmr_send(xapp_rmr_header *hdr, void *payload){ + + // Get the thread id + std::thread::id my_id = std::this_thread::get_id(); + std::stringstream thread_id; + std::stringstream ss; + + thread_id << my_id; + mdclog_write(MDCLOG_INFO, "Sending thread %s", thread_id.str().c_str()); + + + int rmr_attempts = _nattempts; + + if( _xapp_send_buff == NULL ) { + _xapp_send_buff = rmr_alloc_msg(_xapp_rmr_ctx, RMR_DEF_SIZE); + } + + bool res = rmr_header(hdr); + if(!res){ + mdclog_write(MDCLOG_ERR,"RMR HEADERS were incorrectly populated, file= %s, line=%d",__FILE__,__LINE__); + return false; + } + + memcpy(_xapp_send_buff->payload, payload, hdr->payload_length); + _xapp_send_buff->len = hdr->payload_length; + + if(!_rmr_is_ready) { + mdclog_write(MDCLOG_ERR,"RMR Context is Not Ready in SENDER, file= %s, line=%d",__FILE__,__LINE__); + return false; + } + + while(rmr_attempts > 0){ + + _xapp_send_buff = rmr_send_msg(_xapp_rmr_ctx,_xapp_send_buff); + if(!_xapp_send_buff) { + mdclog_write(MDCLOG_ERR,"Error In Sending Message , file= %s, line=%d, attempt=%d",__FILE__,__LINE__,rmr_attempts); + rmr_attempts--; + } + else if (_xapp_send_buff->state == RMR_OK){ + mdclog_write(MDCLOG_INFO,"Message Sent: RMR State = RMR_OK"); + rmr_attempts = 0; + _xapp_send_buff = NULL; + return true; + } + else + { + mdclog_write(MDCLOG_INFO,"Need to retry RMR: state=%d, attempt=%d, file=%s, line=%d",_xapp_send_buff->state, rmr_attempts,__FILE__,__LINE__); + if(_xapp_send_buff->state == RMR_ERR_RETRY){ + usleep(1); } + rmr_attempts--; + } + sleep(1); + } + return false; +} + +//---------------------------------------- +// Some get/set methods +//--------------------------------------- +bool XappRmr::get_listen(void){ + return _listen; +} + + +void XappRmr::set_listen(bool listen){ + _listen = listen; +} + +int XappRmr::get_is_ready(void){ + return _rmr_is_ready; +} + +bool XappRmr::get_isRunning(void){ + return _listen; +} + + +void * XappRmr::get_rmr_context(void){ + return _xapp_rmr_ctx; +} + + +void init_logger(const char *AppName, mdclog_severity_t log_level) +{ + mdclog_attr_t *attr; + mdclog_attr_init(&attr); + mdclog_attr_set_ident(attr, AppName); + mdclog_init(attr); + mdclog_level_set(log_level); + mdclog_attr_destroy(attr); +} + diff --git a/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.hpp b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.hpp new file mode 100644 index 0000000..fedc1e9 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_rmr.hpp @@ -0,0 +1,195 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +#ifndef XAPP_RMR_XAPP_RMR_H_ +#define XAPP_RMR_XAPP_RMR_H_ + + +#ifdef __GNUC__ +#define likely(x) __builtin_expect((x), 1) +#define unlikely(x) __builtin_expect((x), 0) +#else +#define likely(x) (x) +#define unlikely(x) (x) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct{ + struct timespec ts; + int32_t message_type; + int32_t state; + int32_t payload_length; + unsigned char sid[RMR_MAX_SID]; //Subscription ID. + unsigned char src[RMR_MAX_SRC]; //Xapp Name + unsigned char meid[RMR_MAX_MEID]={}; + +} xapp_rmr_header; + + +class XappRmr{ +private: + std::string _proto_port; + int _nattempts; + bool _rmr_is_ready; + bool _listen; + void* _xapp_rmr_ctx; + rmr_mbuf_t* _xapp_send_buff; // send buffer + rmr_mbuf_t* _xapp_received_buff; // received buffer + + +public: + + XappRmr(std::string, int rmrattempts=10); + ~XappRmr(void); + void xapp_rmr_init(bool); + + template + void xapp_rmr_receive(MessageProcessor&&, XappRmr *parent); + + bool xapp_rmr_send(xapp_rmr_header*, void*); + + bool rmr_header(xapp_rmr_header*); + void set_listen(bool); + bool get_listen(void); + int get_is_ready(void); + bool get_isRunning(void); + void* get_rmr_context(void); + +}; + + +// main workhorse thread which does the listen->process->respond loop +template +void XappRmr::xapp_rmr_receive(MsgHandler&& msgproc, XappRmr *parent){ + + bool* resend = new bool(false); + // Get the thread id + std::thread::id my_id = std::this_thread::get_id(); + std::stringstream thread_id; + std::stringstream ss; + std::fstream io_file; + + thread_id << my_id; + + // Get the rmr context from parent (all threads and parent use same rmr context. rmr context is expected to be thread safe) + if(!parent->get_is_ready()){ + mdclog_write( MDCLOG_ERR, "RMR Shows Not Ready in RECEIVER, file= %s, line=%d ",__FILE__,__LINE__); + return; + } + void *rmr_context = parent->get_rmr_context(); + assert(rmr_context != NULL); + + // Get buffer specific to this thread + this->_xapp_received_buff = NULL; + this->_xapp_received_buff = rmr_alloc_msg(rmr_context, RMR_DEF_SIZE); + assert(this->_xapp_received_buff != NULL); + + mdclog_write(MDCLOG_INFO, "Starting receiver thread %s", thread_id.str().c_str()); + io_file.open("/tmp/timestamp.txt", std::ios::in|std::ios::out|std::ios::app); + std::time_t sentMsg_time; + std::time_t recvMsg_time; + struct timeval ts_recv; + struct timeval ts_sent; + + while(parent->get_listen()) { + mdclog_write(MDCLOG_INFO, "Listening at Thread: %s", thread_id.str().c_str()); + + this->_xapp_received_buff = rmr_rcv_msg( rmr_context, this->_xapp_received_buff ); + //this->_xapp_received_buff = rmr_call( rmr_context, this->_xapp_received_buff); + + if (io_file) { + gettimeofday(&ts_recv, NULL); + io_file << "Received Msg with msgType: " << this->_xapp_received_buff->mtype << " at time: " << (ts_recv.tv_sec * 1000000) + (ts_recv.tv_usec) << std::endl; + } + + if( this->_xapp_received_buff->mtype < 0 || this->_xapp_received_buff->state != RMR_OK ) { + mdclog_write(MDCLOG_ERR, "bad msg: state=%d errno=%d, file= %s, line=%d", this->_xapp_received_buff->state, errno, __FILE__,__LINE__ ); + return; + } + else + { + mdclog_write(MDCLOG_INFO,"RMR Received Message of Type: %d",this->_xapp_received_buff->mtype); + mdclog_write(MDCLOG_INFO,"RMR Received Message: %s",(char*)this->_xapp_received_buff->payload); + + //in case message handler returns true, need to resend the message. + msgproc(this->_xapp_received_buff, resend); + + if(*resend){ + mdclog_write(MDCLOG_INFO,"RMR Return to Sender Message of Type: %d",this->_xapp_received_buff->mtype); + mdclog_write(MDCLOG_INFO,"RMR Return to Sender Message: %s",(char*)this->_xapp_received_buff->payload); + + if (io_file) { + gettimeofday(&ts_sent, NULL); + io_file << "Send Msg with msgType: " << this->_xapp_received_buff->mtype << " at time: " << (ts_sent.tv_sec * 1000000) + (ts_sent.tv_usec) << std::endl; + + io_file << "Time diff: " << ((ts_sent.tv_sec - ts_recv.tv_sec)*1000000 + (ts_sent.tv_usec - ts_recv.tv_usec)) << std::endl; + } + + rmr_rts_msg(rmr_context, this->_xapp_received_buff ); + sleep(1); + *resend = false; + } + continue; + + } + + } + + if (io_file) { + io_file.close(); + } + + // Clean up + try{ + delete resend; + rmr_free_msg(this->_xapp_received_buff); + } + catch(std::runtime_error &e){ + std::string identifier = __FILE__ + std::string(", Line: ") + std::to_string(__LINE__) ; + std::string error_string = identifier = " Error freeing RMR message "; + mdclog_write(MDCLOG_ERR, error_string.c_str(), ""); + } + + return; +} + + + + +#endif /* XAPP_RMR_XAPP_RMR_H_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp-utils/xapp_sdl.cc b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_sdl.cc new file mode 100644 index 0000000..622348c --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp-utils/xapp_sdl.cc @@ -0,0 +1,71 @@ +/* +================================================================================== + + Copyright (c) 2019-2020 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== + */ + +/* + * xapp_sdl.cc + * + * Created on: Mar, 2020 + * Author: Shraboni Jana + */ +#include "xapp_sdl.hpp" +/*need to work on the SDL FLow. Currently data hardcoded. +An xApp can use the SDL for two things: +- persisting state for itself (in case it fails and recovers) +- making information available for other xApps. The xApp would typically write using SDL directly. +- The consumer of the data could also use SDL directly or use an access library like in the case of the R-NIB. +*/ +/*bool XappSDL::set_data(shareddatalayer::SyncStorage *sdl){ + try{ + //connecting to the Redis and generating a random key for namespace "bouncer-xapp" + mdclog_write(MDCLOG_INFO, "IN SDL Set Data", __FILE__, __LINE__); + DataMap dmap; + char key[4]="abc"; + std::cout << "KEY: "<< key << std::endl; + Key k = key; + Data d; + uint8_t num = 101; + d.push_back(num); + dmap.insert({k,d}); + Namespace ns(sdl_namespace); + sdl->set(ns, dmap); + } + catch(...){ + mdclog_write(MDCLOG_ERR, "SDL Error in Set Data for Namespace=%s",sdl_namespace); + return false; + } + return true; +} + +void XappSDL::get_data(shareddatalayer::SyncStorage *sdl){ + Namespace ns(sdl_namespace); + DataMap dmap; + std::string prefix=""; + Keys K = sdl->findKeys(ns, prefix); // just the prefix + DataMap Dk = sdl->get(ns, K); + for(auto si=K.begin();si!=K.end();++si){ + std::vector val_v = Dk[(*si)]; // 4 lines to unpack a string + char val[val_v.size()+1]; // from Data + int i; + for(i=0;i +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using Namespace = std::string; +using Key = std::string; +using Data = std::vector; +using DataMap = std::map; +using Keys = std::set; + +/*class XappSDL{ +private: + std::string sdl_namespace; + +public: + XappSDL(std::string ns) { sdl_namespace=ns; } + void get_data(shareddatalayer::SyncStorage *); + bool set_data(shareddatalayer::SyncStorage *); +};*/ + +#endif /* SRC_XAPP_UTILS_XAPP_SDL_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp.cc b/ric_benchmarking/Bouncer/src/xapp.cc new file mode 100644 index 0000000..64beee4 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp.cc @@ -0,0 +1,254 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + +#include "xapp.hpp" +#define BUFFER_SIZE 1024 + + Xapp::Xapp(XappSettings &config, XappRmr &rmr){ + + rmr_ref = &rmr; + config_ref = &config; + xapp_mutex = NULL; + subhandler_ref = NULL; + return; + } + +Xapp::~Xapp(void){ + + //Joining the threads + int threadcnt = xapp_rcv_thread.size(); + for(int i=0; i~mutex(); + delete xapp_mutex; + } +}; + +//Stop the xapp. Note- To be run only from unit test scripts. +void Xapp::stop(void){ + // Get the mutex lock + std::lock_guard guard(*xapp_mutex); + rmr_ref->set_listen(false); + rmr_ref->~XappRmr(); + + //Detaching the threads....not sure if this is the right way to stop the receiver threads. + //Hence function should be called only in Unit Tests + int threadcnt = xapp_rcv_thread.size(); + for(int i=0; iset_listen(true); + if(xapp_mutex == NULL){ + xapp_mutex = new std::mutex(); + } + std::lock_guard guard(*xapp_mutex); + + for(int j=0; j < _callbacks.size(); j++){ + std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(_callbacks[j]), rmr_ref);}); + xapp_rcv_thread.push_back(std::move(th_recv)); + } + + return; +} + +//Starting a seperate single receiver +void Xapp::start_xapp_receiver(XappMsgHandler& mp_handler){ + //start a receiver thread. Can be multiple receiver threads for more than 1 listening port. + rmr_ref->set_listen(true); + if(xapp_mutex == NULL){ + xapp_mutex = new std::mutex(); + } + + mdclog_write(MDCLOG_INFO,"Receiver Thread file= %s, line=%d",__FILE__,__LINE__); + std::lock_guard guard(*xapp_mutex); + std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(mp_handler), rmr_ref);}); + xapp_rcv_thread.push_back(std::move(th_recv)); + return; +} + +void Xapp::shutdown(){ + return; +} + + +void Xapp::startup_subscribe_requests(void ){ + + bool res; + size_t data_size = ASN_BUFF_MAX_SIZE; + unsigned char data[data_size]; + unsigned char meid[RMR_MAX_MEID]; + std::string xapp_id = config_ref->operator [](XappSettings::SettingName::XAPP_ID); + + mdclog_write(MDCLOG_INFO,"Preparing to send subscription in file= %s, line=%d",__FILE__,__LINE__); + + auto gnblist = get_rnib_gnblist(); + + int sz = gnblist.size(); + + if(sz <= 0) + mdclog_write(MDCLOG_INFO,"Subscriptions cannot be sent as GNBList in RNIB is NULL"); + + for(int i = 0; imanage_subscription_request(gnblist[i], transmitter); + + if(result==SUBSCR_SUCCESS){ + mdclog_write(MDCLOG_INFO,"Subscription SUCCESSFUL in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); + } + else { + mdclog_write(MDCLOG_ERR,"Subscription FAILED in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); + } + } + +} + +void Xapp::startup_get_policies(void){ + + int policy_id = BOUNCER_POLICY_ID; + + std::string policy_query = "{\"policy_type_id\":" + std::to_string(policy_id) + "}"; + unsigned char * message = (unsigned char *)calloc(policy_query.length(), sizeof(unsigned char)); + memcpy(message, policy_query.c_str(), policy_query.length()); + xapp_rmr_header header; + header.payload_length = policy_query.length(); + header.message_type = A1_POLICY_QUERY; + mdclog_write(MDCLOG_INFO, "Sending request for policy id %d\n", policy_id); + rmr_ref->xapp_rmr_send(&header, (void *)message); + free(message); + +} + +void Xapp::set_rnib_gnblist(void) { + + openSdl(); + + void *result = getListGnbIds(); + if(strlen((char*)result) < 1){ + mdclog_write(MDCLOG_ERR, "ERROR: no data from getListGnbIds\n"); + return; + } + + mdclog_write(MDCLOG_INFO, "GNB List in R-NIB %s\n", (char*)result); + + + Document doc; + ParseResult parseJson = doc.Parse((char*)result); + if (!parseJson) { + std::cerr << "JSON parse error: %s (%u)", GetParseErrorFunc(parseJson.Code()); + return; + } + + if(!doc.HasMember("gnb_list")){ + mdclog_write(MDCLOG_INFO, "JSON Has No GNB List Object"); + return; + } + assert(doc.HasMember("gnb_list")); + + const Value& gnblist = doc["gnb_list"]; + if (gnblist.IsNull()) + return; + + if(!gnblist.IsArray()){ + mdclog_write(MDCLOG_INFO, "GNB List is not an array"); + return; + } + + + assert(gnblist.IsArray()); + for (SizeType i = 0; i < gnblist.Size(); i++) // Uses SizeType instead of size_t + { + assert(gnblist[i].IsObject()); + const Value& gnbobj = gnblist[i]; + assert(gnbobj.HasMember("inventory_name")); + assert(gnbobj["inventory_name"].IsString()); + std::string name = gnbobj["inventory_name"].GetString(); + rnib_gnblist.push_back(name); + + } + closeSdl(); + return; + +} + + + + + + diff --git a/ric_benchmarking/Bouncer/src/xapp.hpp b/ric_benchmarking/Bouncer/src/xapp.hpp new file mode 100644 index 0000000..bfb62cc --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp.hpp @@ -0,0 +1,94 @@ +/* +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +*/ + + +#pragma once + +#ifndef SRC_XAPP_HPP_ +#define SRC_XAPP_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include "xapp_rmr.hpp" +#include "xapp_sdl.hpp" +#include "rapidjson/writer.h" +#include "rapidjson/document.h" +#include "rapidjson/error/error.h" + +#include "msgs_proc.hpp" +#include "subs_mgmt.hpp" +#include "xapp_config.hpp" +extern "C" { +#include "rnib/rnibreader.h" +} +using namespace std; +using namespace std::placeholders; +using namespace rapidjson; + + +class Xapp{ +public: + + Xapp(XappSettings &, XappRmr &); + + ~Xapp(void); + + void stop(void); + + void startup(SubscriptionHandler &); + void shutdown(void); + + void start_xapp_receiver(XappMsgHandler &); + void Run(); + + //void sdl_data(void); + + Xapp(Xapp const &)=delete; + Xapp& operator=(Xapp const &) = delete; + + void register_handler(XappMsgHandler &fn){ + _callbacks.emplace_back(fn); + } + + //getters/setters. + void set_rnib_gnblist(void); + std::vector get_rnib_gnblist(){ return rnib_gnblist; } + +private: + void startup_subscribe_requests(void ); + void shutdown_subscribe_deletes(void); + void startup_get_policies(void ); + + + XappRmr * rmr_ref; + XappSettings * config_ref; + SubscriptionHandler *subhandler_ref; + + std::mutex *xapp_mutex; + std::vector xapp_rcv_thread; + std::vector rnib_gnblist; + std::vector _callbacks; +}; + + +#endif /* SRC_XAPP_HPP_ */ diff --git a/ric_benchmarking/Bouncer/src/xapp_env.sh b/ric_benchmarking/Bouncer/src/xapp_env.sh new file mode 100644 index 0000000..64b2cd4 --- /dev/null +++ b/ric_benchmarking/Bouncer/src/xapp_env.sh @@ -0,0 +1,14 @@ +#! /bin/bash + +export RMR_SEED_RT="routes.txt" +export RMR_RTG_SVC="9999" +export MSG_MAX_BUFFER="2072" +export THREADS="1" +export VERBOSE="0" +export CONFIG_FILE="config/config-file.json" +export XAPP_ID="3489-er492k-92389" +export LOG_LEVEL="MDCLOG_ERR" +export DBAAS_SERVICE_HOST="127.0.0.1" +export DBAAS_SERVICE_PORT="6379" + + diff --git a/ric_benchmarking/Bouncer/tox.ini b/ric_benchmarking/Bouncer/tox.ini new file mode 100644 index 0000000..e1a2967 --- /dev/null +++ b/ric_benchmarking/Bouncer/tox.ini @@ -0,0 +1,34 @@ +# This work is licensed under a Creative Commons Attribution 4.0 International License. +# SPDX-License-Identifier: CC-BY-4.0 +# Copyright (C) 2020 AT&T Intellectual Property +# documentation only + +[tox] +minversion = 2.0 +envlist = + docs, + docs-linkcheck, +skipsdist = true + +[testenv:docs] +basepython = python3 +deps = + sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf + +commands = + sphinx-build -W -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html + echo "Generated docs available in {toxinidir}/docs/_build/html" +whitelist_externals = echo + +[testenv:docs-linkcheck] +basepython = python3 +deps = sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf +commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck diff --git a/ric_benchmarking/README b/ric_benchmarking/README new file mode 100644 index 0000000..ec33208 --- /dev/null +++ b/ric_benchmarking/README @@ -0,0 +1,45 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + + +This repository consists of Bouncer Xapp developed in C++. Its envisioned to do simple RIC Benchmarking example Xapp. +It is required to have following features: + +1) E2 Subscription Handling +2) DB Access: SDL and RNIB +3) RMR Message handling +4) Bouncer E2SM +5) RIC Indication + +Steps for installation/running Bouncer Xapp. +$ cd init +$ source ./xapp_env.sh +$cd ../src +$ make +$ ./b_xapp_main + + +Testing: +======== + +To test the bouncer xapp, E2simulator is required to be build and run. +1. Take the E2simulator code under RIC-Benchmarking/E2-interface. +2. Run/Restart the Near RT RIC Platform pods. +3. Run E2sim Pod using helm chart( build e2sim using docker file available in e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile) +4. Deploy bouncer xapp by following the xapp onboarding steps + +Login to the bouncer xapp and E2sim Pods using kubectl exec to see the benchmarking timestamp. + diff --git a/ric_benchmarking/e2-interface/e2sim/.gitignore b/ric_benchmarking/e2-interface/e2sim/.gitignore new file mode 100644 index 0000000..4cc349e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/.gitignore @@ -0,0 +1,12 @@ +build/ +rmr/ +temp/ +.tags +.tags1 +.asn +tools/asn1c +tools/asn_defs/*.asn +tools/asn_defs/*.asn1 + +test/WLG/build/ +test/X2/build/ diff --git a/ric_benchmarking/e2-interface/e2sim/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/CMakeLists.txt new file mode 100644 index 0000000..bf57fda --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/CMakeLists.txt @@ -0,0 +1,173 @@ + +project (e2sim) +cmake_minimum_required ( VERSION 3.5 ) + +set ( major_version "1" ) +set ( minor_version "0" ) +set ( patch_level "0" ) + +set( install_root "${CMAKE_INSTALL_PREFIX}" ) +set( install_inc "include/e2sim" ) + +if( MAN_PREFIX ) + set( install_man ${MAN_PREFIX} ) # is there a cmake var for this -- can't find one +else() + set( install_man "/usr/share/man" ) # this needs to be fixed so it's not hard coded +endif() + +include ( GNUInstallDirs ) + +if( NOT CMAKE_INSTALL_LIBDIR ) + set( CMAKE_INSTALL_LIBDIR "lib" ) +endif() + +set( install_lib "${CMAKE_INSTALL_LIBDIR}" ) + +if( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" ) + if( NOT PRESERVE_PTYPE ) + set( deb_sys_name "amd64" ) + else() + set( deb_sys_name ${CMAKE_SYSTEM_PROCESSOR} ) + endif() +else() + set( deb_sys_name ${CMAKE_SYSTEM_PROCESSOR} ) +endif() +unset( PRESERVE_PTYPE CACHE ) # we don't want this to persist + +set( rpm_sys_name ${CMAKE_SYSTEM_PROCESSOR} ) + +if( DEV_PKG ) + set( deb_pkg_name "e2sim-dev" ) + set( rpm_pkg_name "e2sim-devel" ) +else() + set( deb_pkg_name "e2sim" ) + set( rpm_pkg_name "e2sim" ) +endif() + +set( pkg_label "ricxfcpp${spoiled_str}-${major_version}.${minor_version}.${patch_level}-${sys_name}" ) +set( rpm_pkg_label "${rpm_pkg_name}${spoiled_str}-${major_version}.${minor_version}.${patch_level}-${rpm_sys_name}" ) +set( deb_pkg_label "${deb_pkg_name}${spoiled_str}_${major_version}.${minor_version}.${patch_level}_${deb_sys_name}" ) +message( "+++ pkg name: ${deb_pkg_label}.deb" ) + +set( gen_rpm 0 ) +find_program( rpm NAMES rpmbuild ) # rpm package gen requires this to be installed +if( "${rpm}" MATCHES "rpm-NOTFOUND" ) # cannot build rpm + set( pkg_list "DEB" ) + message( "### make package will generate only deb package; cannot find support to generate rpm packages" ) +else() + message( "+++ pkg name: ${rpm_pkg_label}.rpm" ) # debugging if we think we can gen rpm too + set( pkg_list "DEB;RPM" ) + set( gen_rpm 1 ) + message( "+++ make package will generate both deb and rpm packages" ) +endif() + +# bleeding cmake names are short novels; and when lines cannot be split they're a pain +set ( srcd "${CMAKE_CURRENT_SOURCE_DIR}" ) + +# this gets us round a chicken/egg problem. include files don't exist until make is run +# but Cmake insists on having these exist when we add them to include directories to +# enable code to find them after we build them. +# +include_directories( "${srcd}/src/DEF;${srcd}/src/SCTP;${srcd}/src/messagerouting;${srcd}/src/base;${srcd}/src/encoding" ) + + +# Compiler flags +# +set( CMAKE_POSITION_INDEPENDENT_CODE ON ) +set( CMAKE_C_FLAGS "-g " ) +set( CMAKE_CPP_FLAGS "-g " ) +set( CMAKE_CXX_FLAGS "-g " ) +if( GPROF ) # if set, we'll set profiling flag on compiles + message( "+++ profiling is on" ) + set( CMAKE_C_FLAGS "-pg " ) + set( CMAKE_CPP_FLAGS "-pg " ) +else() + message( "+++ profiling is off" ) +endif() +unset( GPROF CACHE ) # we don't want this to persist + + + + +add_subdirectory(src/ASN1c) +add_subdirectory(src/DEF) +add_subdirectory(src/SCTP) +add_subdirectory(src/messagerouting) +add_subdirectory(src/base) +add_subdirectory(src/encoding) + + +add_library( e2sim_shared SHARED + +"$;$;$;$;$" + +) + + +# we only build/export the static archive (.a) if generating a dev package +if( DEV_PKG ) + add_library( e2sim_static STATIC + "$;$;$;$;$" + ) + + set_target_properties( e2sim_static + PROPERTIES + OUTPUT_NAME "e2sim" + SOVERSION 1 + VERSION ${major_version}.${minor_version}.${patch_level} + ) + + target_include_directories( e2sim_static PUBLIC "src/DEF" "src/SCTP" "src/messagerouting" "src/base" "src/encoding" ) +endif() + + +if (DEV_PKG ) + set (target_list "e2sim_static" ) +else() + set (target_list "e2sim_shared" ) +endif() + +install( TARGETS ${target_list} EXPORT LibraryConfig + LIBRARY DESTINATION ${install_lib} + ARCHIVE DESTINATION ${install_lib} + PUBLIC_HEADER DESTINATION ${install_inc} +) + + +unset( DEV_PKG CACHE ) # prevent from being a hidden setting if user redoes things + +IF( EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake" ) + include( InstallRequiredSystemLibraries ) + + set( CPACK_DEBIAN_PACKAGE_NAME ${deb_pkg_name} ) + set( CPACK_RPM_PACKAGE_NAME ${rpm_pkg_name} ) + + set( CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/local;/usr/local/bin;/usr/local/include;/usr/local/share;/usr/local/lib" ) + + set( CPACK_set_DESTDIR "on" ) + set( CPACK_PACKAGING_INSTALL_PREFIX "${install_root}" ) + set( CPACK_GENERATOR "${pkg_list}" ) + + set( CPACK_PACKAGE_DESCRIPTION "C++ framework for RIC xAPPs based on RMR." ) + set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "RIC xAPP C++ framework library" ) + set( CPACK_PACKAGE_VENDOR "None" ) + set( CPACK_PACKAGE_CONTACT "None" ) + set( CPACK_PACKAGE_VERSION_MAJOR "${major_version}" ) + set( CPACK_PACKAGE_VERSION_MINOR "${minor_version}" ) + set( CPACK_PACKAGE_VERSION_PATCH "${patch_level}" ) + set( CPACK_PACKAGE "${pkg_label}" ) # generic name for old versions of cpack + set( CPACK_DEBIAN_FILE_NAME "${deb_pkg_label}.deb" ) + set( CPACK_RPM_FILE_NAME "${rpm_pkg_label}.rpm" ) + + # Future: define dependencies on RMR and other libs + + set( CPACK_DEBIAN_PACKAGE_PRIORITY "optional" ) + set( CPACK_DEBIAN_PACKAGE_SECTION "ric" ) + set( CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} ) + set( CPACK_RPM_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} ) + + # this seems ingnored if included + #set( CPACK_COMPONENTS_ALL Libraries ApplicationData ) + + INCLUDE( CPack ) +ENDIF() diff --git a/ric_benchmarking/e2-interface/e2sim/README.md b/ric_benchmarking/e2-interface/e2sim/README.md new file mode 100644 index 0000000..2790b0d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/README.md @@ -0,0 +1,98 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +This is an update to E2 Simulator, based on E2AP v1 defined in ORAN +E2 Simulator is built as a library that supports basic functions and is +linked by an E2 Simulation application. + +The E2 Simulator breaks up the simulation roles into two: +1. Base E2AP support +2. E2SM Support + +#1 is the role supported by E2 Simulator library, while #2 is supported by the +calling application. An example of a calling application is provided in this repo +under the + +E2 Simulator enables a specific E2SM to be supported by the calling application in +the following way: + +* E2SM must be registered by the calling application +* E2SM-specific code uses callbacks to handle interaction from xApp +* E2SM-specific code must continuously implement simulation logic + +Registration of an E2SM with the E2 Simulator entails the following: +* RAN function definition +* Callback functions for any of the following: + Subscription + Control + Any Responses + +The following is the E2 Simulator Main Program Flow +1. Upon startup, Simulator generates E2 Setup Request + For each E2SM that is registered, include RAN function definition + +2. Upon receiving incoming requests, decode + Identify RAN function ID + Call appropriate callback function for RAN function ID and request type + Provide entire encoded request + If no callback is provided, we return an error response +3. Upon receiving responses, decode: + Identify RAN function ID + If a callback is registered for this message type, call it based on RAN function ID and request type + Provide entire encoded response + If no callback is registered, no action is taken + +E2SM Callback Functions: + +* Callback functions are responsible for sending responses +* They may also need to set up ongoing simulation messaging + REPORT Service sends back periodic Indication messages containing REPORT + INSERT Service sends back periodic Indication messages containing INSERT +* They may need to associate incoming messages with existing service invocation + Modify Subscription + CONTROL message associated with INSERT +* Base E2 simulator should not be concerned with these details; only specific E2SM code should be responsible for any messaging + + +# INSTALLATION Instructions (tested on Ubuntu 16.04) + 1. Install dependencies + $ sudo apt-get update + $ sudo apt-get install -y + build-essential + git + cmake + libsctp-dev + lksctp-tools + autoconf + automake + libtool + bison + flex + libboost-all-dev + $ sudo apt-get clean + + 2. Build the official e2sim + $ mkdir build + $ cd build + $ cmake .. + $ make package + $ cmake .. -DDEV_PKG=1 + $ make package + + diff --git a/ric_benchmarking/e2-interface/e2sim/docker/Dockerfile b/ric_benchmarking/e2-interface/e2sim/docker/Dockerfile new file mode 100644 index 0000000..5b3ebab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/docker/Dockerfile @@ -0,0 +1,28 @@ +#================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== + +FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:9-u18.04 as buildenv +RUN mkdir /playpen + +RUN apt-get update && apt-get install -y build-essential git cmake libsctp-dev autoconf automake libtool bison flex libboost-all-dev + + +WORKDIR /playpen + +COPY . /playpen +RUN mkdir build && cd build && cmake .. && make package && cmake .. -DDEV_PKG=1 + +CMD [ "make package" ] diff --git a/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml b/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml new file mode 100644 index 0000000..4983202 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/docker/container-tag.yaml @@ -0,0 +1,2 @@ +--- +tag: '1.0.0' diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_C_RNTI_constr_1 CC_NOTUSED = { + { 0, 0 }, + 2 /* (SIZE(2..2)) */}; +asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + &asn_OP_OCTET_STRING, + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + { &asn_OER_type_C_RNTI_constr_1, &asn_PER_type_C_RNTI_constr_1, C_RNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/C-RNTI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef OCTET_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_C_RNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +oer_type_decoder_f C_RNTI_decode_oer; +oer_type_encoder_f C_RNTI_encode_oer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; +per_type_decoder_f C_RNTI_decode_aper; +per_type_encoder_f C_RNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem = { + "CU-CP-Usage-Report-CellResourceReportItem", + "CU-CP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_CellResourceReportItem_H_ +#define _CU_CP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_UeResourceReportItem; + +/* CU-CP-Usage-Report-CellResourceReportItem */ +typedef struct CU_CP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 16384)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_CP_Usage_Report_Per_UE), + offsetof(struct CU_CP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE = { + "CU-CP-Usage-Report-Per-UE", + "CU-CP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_Per_UE_H_ +#define _CU_CP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_CellResourceReportItem; + +/* CU-CP-Usage-Report-Per-UE */ +typedef struct CU_CP_Usage_Report_Per_UE { + struct CU_CP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, serving_Cell_RF_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serving-Cell-RF-Type" + }, + { ATF_POINTER, 1, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, neighbor_Cell_RF), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbor-Cell-RF" + }, +}; +static const int asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serving-Cell-RF-Type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighbor-Cell-RF */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem = { + "CU-CP-Usage-Report-UeResourceReportItem", + "CU-CP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_UeResourceReportItem_H_ +#define _CU_CP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-CP-Usage-Report-UeResourceReportItem */ +typedef struct CU_CP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + OCTET_STRING_t *serving_Cell_RF_Type; /* OPTIONAL */ + OCTET_STRING_t *neighbor_Cell_RF; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_CP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem = { + "CU-UP-Usage-Report-CellResourceReportItem", + "CU-UP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_CellResourceReportItem_H_ +#define _CU_UP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_UeResourceReportItem; + +/* CU-UP-Usage-Report-CellResourceReportItem */ +typedef struct CU_UP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_UP_Usage_Report_Per_UE), + offsetof(struct CU_UP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE = { + "CU-UP-Usage-Report-Per-UE", + "CU-UP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_Per_UE_H_ +#define _CU_UP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_CellResourceReportItem; + +/* CU-UP-Usage-Report-Per-UE */ +typedef struct CU_UP_Usage_Report_Per_UE { + struct CU_UP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem = { + "CU-UP-Usage-Report-UeResourceReportItem", + "CU-UP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_UeResourceReportItem_H_ +#define _CU_UP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-UP-Usage-Report-UeResourceReportItem */ +typedef struct CU_UP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_UP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CUUPMeasurement-Container.h" + +static int +memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmnList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PlmnID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = { + sizeof(struct CUUPMeasurement_Container__plmnList), + offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmnList_2 = { + "plmnList", + "plmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_plmnList_tags_2, + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */ + asn_DEF_plmnList_tags_2, /* Same as above */ + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */ + { &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_plmnList_2, + 1, /* Single element */ + &asn_SPC_plmnList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_plmnList_2, + 0, + { &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2, memb_plmnList_constraint_1 }, + 0, 0, /* No default value */ + "plmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = { + sizeof(struct CUUPMeasurement_Container), + offsetof(struct CUUPMeasurement_Container, _asn_ctx), + asn_MAP_CUUPMeasurement_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container = { + "CUUPMeasurement-Container", + "CUUPMeasurement-Container", + &asn_OP_SEQUENCE, + asn_DEF_CUUPMeasurement_Container_tags_1, + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + asn_DEF_CUUPMeasurement_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CUUPMeasurement_Container_1, + 1, /* Elements count */ + &asn_SPC_CUUPMeasurement_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CUUPMeasurement-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CUUPMeasurement_Container_H_ +#define _CUUPMeasurement_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PlmnID_List; + +/* CUUPMeasurement-Container */ +typedef struct CUUPMeasurement_Container { + struct CUUPMeasurement_Container__plmnList { + A_SEQUENCE_OF(struct PlmnID_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CUUPMeasurement_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PlmnID-List.h" + +#endif /* _CUUPMeasurement_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c new file mode 100644 index 0000000..1027911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h new file mode 100644 index 0000000..1b829a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c new file mode 100644 index 0000000..1709929 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.c @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h new file mode 100644 index 0000000..d175009 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseMisc.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..e5b11b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..72329ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseProtocol.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c new file mode 100644 index 0000000..11d9e4e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h new file mode 100644 index 0000000..417532f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRIC.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..6773fd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..4270eb3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseRICservice.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c new file mode 100644 index 0000000..08a317d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f3fe969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CauseTransport.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CellResourceReportListItem.h" + +static int +memb_dl_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = { + sizeof(struct CellResourceReportListItem__servedPlmnPerCellList), + offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = { + "servedPlmnPerCellList", + "servedPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_servedPlmnPerCellList_tags_5, + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */ + asn_DEF_servedPlmnPerCellList_tags_5, /* Same as above */ + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */ + { &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_servedPlmnPerCellList_5, + 1, /* Single element */ + &asn_SPC_servedPlmnPerCellList_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3, memb_dl_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "dl-TotalofAvailablePRBs" + }, + { ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4, memb_ul_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "ul-TotalofAvailablePRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_servedPlmnPerCellList_5, + 0, + { &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5, memb_servedPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "servedPlmnPerCellList" + }, +}; +static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = { + sizeof(struct CellResourceReportListItem), + offsetof(struct CellResourceReportListItem, _asn_ctx), + asn_MAP_CellResourceReportListItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellResourceReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = { + "CellResourceReportListItem", + "CellResourceReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_CellResourceReportListItem_tags_1, + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + asn_DEF_CellResourceReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellResourceReportListItem_1, + 4, /* Elements count */ + &asn_SPC_CellResourceReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CellResourceReportListItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CellResourceReportListItem_H_ +#define _CellResourceReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedPlmnPerCellListItem; + +/* CellResourceReportListItem */ +typedef struct CellResourceReportListItem { + NRCGI_t nRCGI; + long *dl_TotalofAvailablePRBs; /* OPTIONAL */ + long *ul_TotalofAvailablePRBs; /* OPTIONAL */ + struct CellResourceReportListItem__servedPlmnPerCellList { + A_SEQUENCE_OF(struct ServedPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } servedPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellResourceReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[4]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ServedPlmnPerCellListItem.h" + +#endif /* _CellResourceReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c new file mode 100644 index 0000000..217d8e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h new file mode 100644 index 0000000..ab1ecf2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Criticality.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..0306093 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..1222f03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..502517f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3f0d07b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..825808b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9cef6bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem), + offsetof(struct DU_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem = { + "DU-Usage-Report-CellResourceReportItem", + "DU-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_CellResourceReportItem_H_ +#define _DU_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_UeResourceReportItem; + +/* DU-Usage-Report-CellResourceReportItem */ +typedef struct DU_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-UeResourceReportItem.h" + +#endif /* _DU_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct DU_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct DU_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1 = { + sizeof(struct DU_Usage_Report_Per_UE), + offsetof(struct DU_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_DU_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE = { + "DU-Usage-Report-Per-UE", + "DU-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_DU_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_Per_UE_H_ +#define _DU_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_CellResourceReportItem; + +/* DU-Usage-Report-Per-UE */ +typedef struct DU_Usage_Report_Per_UE { + struct DU_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-CellResourceReportItem.h" + +#endif /* _DU_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,138 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-UeResourceReportItem.h" + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct DU_Usage_Report_UeResourceReportItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct DU_Usage_Report_UeResourceReportItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_UeResourceReportItem), + offsetof(struct DU_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem = { + "DU-Usage-Report-UeResourceReportItem", + "DU-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/DU-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_UeResourceReportItem_H_ +#define _DU_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DU-Usage-Report-UeResourceReportItem */ +typedef struct DU_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DU_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..94650be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..6f3f1c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-ActionDefinition.h" + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition), + offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { + "E2SM-KPM-ActionDefinition", + "E2SM-KPM-ActionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-ActionDefinition.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_ActionDefinition_H_ +#define _E2SM_KPM_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition */ +typedef struct E2SM_KPM_ActionDefinition { + RIC_Style_Type_t ric_Style_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" + +static int +memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Trigger_ConditionIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { + "policyTest-List", + "policyTest-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_policyTest_List_tags_2, + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_policyTest_List_tags_2, /* Same as above */ + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ + { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_policyTest_List_2, + 1, /* Single element */ + &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_policyTest_List_2, + 0, + { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + 0, 0, /* No default value */ + "policyTest-List" + }, +}; +static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { + "E2SM-KPM-EventTriggerDefinition-Format1", + "E2SM-KPM-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ +#define _E2SM_KPM_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Trigger_ConditionIE_Item; + +/* E2SM-KPM-EventTriggerDefinition-Format1 */ +typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { + struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { + A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *policyTest_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Trigger-ConditionIE-Item.h" + +#endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-EventTriggerDefinition.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_H_ +#define _E2SM_KPM_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_EventTriggerDefinition_PR { + E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_EventTriggerDefinition_PR; + +/* E2SM-KPM-EventTriggerDefinition */ +typedef struct E2SM_KPM_EventTriggerDefinition { + E2SM_KPM_EventTriggerDefinition_PR present; + union E2SM_KPM_EventTriggerDefinition_u { + E2SM_KPM_EventTriggerDefinition_Format1_t eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader-Format1.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { + { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "id-GlobalKPMnode-ID" + }, + { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_Report_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "message-Type" + }, + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-Name" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-GNB-ID" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader_Format1), + offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { + "E2SM-KPM-IndicationHeader-Format1", + "E2SM-KPM-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, + 10, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader-Format1.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_Format1_H_ +#define _E2SM_KPM_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include "UE-Report-Type.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalKPMnode_ID; +struct NRCGI; +struct SNSSAI; +struct GNB_Name; +struct GlobalgNB_ID; + +/* E2SM-KPM-IndicationHeader-Format1 */ +typedef struct E2SM_KPM_IndicationHeader_Format1 { + struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ + struct NRCGI *nRCGI; /* OPTIONAL */ + PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ + struct SNSSAI *sliceID; /* OPTIONAL */ + long *fiveQI; /* OPTIONAL */ + long *qci; /* OPTIONAL */ + UE_Report_Type_t *message_Type; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + struct GNB_Name *gNB_Name; /* OPTIONAL */ + struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "GlobalKPMnode-ID.h" +#include "NRCGI.h" +#include "SNSSAI.h" +#include "GNB-Name.h" +#include "GlobalgNB-ID.h" + +#endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader, present), + sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationHeader.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_H_ +#define _E2SM_KPM_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-IndicationHeader-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationHeader_PR { + E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationHeader_PR; + +/* E2SM-KPM-IndicationHeader */ +typedef struct E2SM_KPM_IndicationHeader { + E2SM_KPM_IndicationHeader_PR present; + union E2SM_KPM_IndicationHeader_u { + E2SM_KPM_IndicationHeader_Format1_t indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage-Format1.h" + +static int +memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 8)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PM_Containers_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), + offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { + "pm-Containers", + "pm-Containers", + &asn_OP_SEQUENCE_OF, + asn_DEF_pm_Containers_tags_2, + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ + asn_DEF_pm_Containers_tags_2, /* Same as above */ + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ + { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_pm_Containers_2, + 1, /* Single element */ + &asn_SPC_pm_Containers_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pm_Containers_2, + 0, + { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + 0, 0, /* No default value */ + "pm-Containers" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1), + offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { + "E2SM-KPM-IndicationMessage-Format1", + "E2SM-KPM-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format1_H_ +#define _E2SM_KPM_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PM_Containers_List; + +/* E2SM-KPM-IndicationMessage-Format1 */ +typedef struct E2SM_KPM_IndicationMessage_Format1 { + struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { + A_SEQUENCE_OF(struct PM_Containers_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pm_Containers; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PM-Containers-List.h" + +#endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.c @@ -0,0 +1,107 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage.h" + +static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), + asn_MAP_indicationMessage_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { + "indicationMessage", + "indicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, + asn_MBR_indicationMessage_3, + 1, /* Elements count */ + &asn_SPC_indicationMessage_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationMessage_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { + "E2SM-KPM-IndicationMessage", + "E2SM-KPM-IndicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-IndicationMessage.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_H_ +#define _E2SM_KPM_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "E2SM-KPM-IndicationMessage-Format1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { + E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationMessage__indicationMessage_PR; + +/* E2SM-KPM-IndicationMessage */ +typedef struct E2SM_KPM_IndicationMessage { + RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_IndicationMessage__indicationMessage { + E2SM_KPM_IndicationMessage__indicationMessage_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_u { + E2SM_KPM_IndicationMessage_Format1_t indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-RANfunction-Description.h" + +static int +memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_EventTriggerStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { + "ric-EventTriggerStyle-List", + "ric-EventTriggerStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_EventTriggerStyle_List_tags_4, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ + { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_4, + 1, /* Single element */ + &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_ReportStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { + "ric-ReportStyle-List", + "ric-ReportStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_ReportStyle_List_tags_6, + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ + { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_6, + 1, /* Single element */ + &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ric_EventTriggerStyle_List_4, + 0, + { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_6, + 0, + { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-ReportStyle-List" + }, +}; +static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), + asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { + "e2SM-KPM-RANfunction-Item", + "e2SM-KPM-RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_e2SM_KPM_RANfunction_Item_3, + 2, /* Elements count */ + &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, ranFunction_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunction_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_e2SM_KPM_RANfunction_Item_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e2SM-KPM-RANfunction-Item" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { + sizeof(struct E2SM_KPM_RANfunction_Description), + offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), + asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { + "E2SM-KPM-RANfunction-Description", + "E2SM-KPM-RANfunction-Description", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_RANfunction_Description_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2SM-KPM-RANfunction-Description.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_RANfunction_Description_H_ +#define _E2SM_KPM_RANfunction_Description_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunction-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RIC_EventTriggerStyle_List; +struct RIC_ReportStyle_List; + +/* E2SM-KPM-RANfunction-Description */ +typedef struct E2SM_KPM_RANfunction_Description { + RANfunction_Name_t ranFunction_Name; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } e2SM_KPM_RANfunction_Item; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_RANfunction_Description_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RIC-EventTriggerStyle-List.h" +#include "RIC-ReportStyle-List.h" + +#endif /* _E2SM_KPM_RANfunction_Description_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..49cae9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..4dee64b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..cefa91b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..2b8b070 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..b607aa1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..ccec4bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..824871d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..7e142ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c new file mode 100644 index 0000000..212c6fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8af6b41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..e8fc32f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..f97a53c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-CUUP-PM-Format.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItemFormat, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_CUUP_PM_Format__perQCIReportList), + offsetof(struct EPC_CUUP_PM_Format__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = { + sizeof(struct EPC_CUUP_PM_Format), + offsetof(struct EPC_CUUP_PM_Format, _asn_ctx), + asn_MAP_EPC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format = { + "EPC-CUUP-PM-Format", + "EPC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_EPC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_EPC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_EPC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_CUUP_PM_Format_H_ +#define _EPC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItemFormat; + +/* EPC-CUUP-PM-Format */ +typedef struct EPC_CUUP_PM_Format { + struct EPC_CUUP_PM_Format__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItemFormat) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItemFormat.h" + +#endif /* _EPC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-DU-PM-Container.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_DU_PM_Container__perQCIReportList), + offsetof(struct EPC_DU_PM_Container__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = { + sizeof(struct EPC_DU_PM_Container), + offsetof(struct EPC_DU_PM_Container, _asn_ctx), + asn_MAP_EPC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container = { + "EPC-DU-PM-Container", + "EPC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_EPC_DU_PM_Container_tags_1, + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_EPC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_EPC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/EPC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_DU_PM_Container_H_ +#define _EPC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItem; + +/* EPC-DU-PM-Container */ +typedef struct EPC_DU_PM_Container { + struct EPC_DU_PM_Container__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItem.h" + +#endif /* _EPC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..e971c4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..a209847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-CUUP-PM-Format.h" + +static int +memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SliceToReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = { + sizeof(struct FGC_CUUP_PM_Format__sliceToReportList), + offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = { + "sliceToReportList", + "sliceToReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_sliceToReportList_tags_2, + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_sliceToReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_sliceToReportList_2, + 1, /* Single element */ + &asn_SPC_sliceToReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sliceToReportList_2, + 0, + { &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2, memb_sliceToReportList_constraint_1 }, + 0, 0, /* No default value */ + "sliceToReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = { + sizeof(struct FGC_CUUP_PM_Format), + offsetof(struct FGC_CUUP_PM_Format, _asn_ctx), + asn_MAP_FGC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format = { + "FGC-CUUP-PM-Format", + "FGC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_FGC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_FGC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_FGC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_CUUP_PM_Format_H_ +#define _FGC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SliceToReportListItem; + +/* FGC-CUUP-PM-Format */ +typedef struct FGC_CUUP_PM_Format { + struct FGC_CUUP_PM_Format__sliceToReportList { + A_SEQUENCE_OF(struct SliceToReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sliceToReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SliceToReportListItem.h" + +#endif /* _FGC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-DU-PM-Container.h" + +static int +memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SlicePerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = { + sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList), + offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = { + "slicePerPlmnPerCellList", + "slicePerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_slicePerPlmnPerCellList_tags_2, + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */ + asn_DEF_slicePerPlmnPerCellList_tags_2, /* Same as above */ + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */ + { &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_slicePerPlmnPerCellList_2, + 1, /* Single element */ + &asn_SPC_slicePerPlmnPerCellList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_slicePerPlmnPerCellList_2, + 0, + { &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2, memb_slicePerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "slicePerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = { + sizeof(struct FGC_DU_PM_Container), + offsetof(struct FGC_DU_PM_Container, _asn_ctx), + asn_MAP_FGC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container = { + "FGC-DU-PM-Container", + "FGC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_FGC_DU_PM_Container_tags_1, + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_FGC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_FGC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FGC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_DU_PM_Container_H_ +#define _FGC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SlicePerPlmnPerCellListItem; + +/* FGC-DU-PM-Container */ +typedef struct FGC_DU_PM_Container { + struct FGC_DU_PM_Container__slicePerPlmnPerCellList { + A_SEQUENCE_OF(struct SlicePerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } slicePerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SlicePerPlmnPerCellListItem.h" + +#endif /* _FGC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnListItem), + offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = { + "FQIPERSlicesPerPlmnListItem", + "FQIPERSlicesPerPlmnListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnListItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnListItem_H_ +#define _FQIPERSlicesPerPlmnListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnListItem */ +typedef struct FQIPERSlicesPerPlmnListItem { + long fiveQI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnPerCellListItem), + offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = { + "FQIPERSlicesPerPlmnPerCellListItem", + "FQIPERSlicesPerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnPerCellListItem_H_ +#define _FQIPERSlicesPerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnPerCellListItem */ +typedef struct FQIPERSlicesPerPlmnPerCellListItem { + long fiveQI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-CP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_CP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_CP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_CP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_CP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_CP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name = { + "GNB-CU-CP-Name", + "GNB-CU-CP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_CP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_CP_Name_constr_1, &asn_PER_type_GNB_CU_CP_Name_constr_1, GNB_CU_CP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-CP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_CP_Name_H_ +#define _GNB_CU_CP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-Name */ +typedef PrintableString_t GNB_CU_CP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name; +asn_struct_free_f GNB_CU_CP_Name_free; +asn_struct_print_f GNB_CU_CP_Name_print; +asn_constr_check_f GNB_CU_CP_Name_constraint; +ber_type_decoder_f GNB_CU_CP_Name_decode_ber; +der_type_encoder_f GNB_CU_CP_Name_encode_der; +xer_type_decoder_f GNB_CU_CP_Name_decode_xer; +xer_type_encoder_f GNB_CU_CP_Name_encode_xer; +oer_type_decoder_f GNB_CU_CP_Name_decode_oer; +oer_type_encoder_f GNB_CU_CP_Name_encode_oer; +per_type_decoder_f GNB_CU_CP_Name_decode_uper; +per_type_encoder_f GNB_CU_CP_Name_encode_uper; +per_type_decoder_f GNB_CU_CP_Name_decode_aper; +per_type_encoder_f GNB_CU_CP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..737a4f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..e6b9c43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_UP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_UP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_UP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_UP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_UP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name = { + "GNB-CU-UP-Name", + "GNB-CU-UP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_UP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_Name_constr_1, &asn_PER_type_GNB_CU_UP_Name_constr_1, GNB_CU_UP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-CU-UP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_Name_H_ +#define _GNB_CU_UP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-Name */ +typedef PrintableString_t GNB_CU_UP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name; +asn_struct_free_f GNB_CU_UP_Name_free; +asn_struct_print_f GNB_CU_UP_Name_print; +asn_constr_check_f GNB_CU_UP_Name_constraint; +ber_type_decoder_f GNB_CU_UP_Name_decode_ber; +der_type_encoder_f GNB_CU_UP_Name_encode_der; +xer_type_decoder_f GNB_CU_UP_Name_decode_xer; +xer_type_encoder_f GNB_CU_UP_Name_encode_xer; +oer_type_decoder_f GNB_CU_UP_Name_decode_oer; +oer_type_encoder_f GNB_CU_UP_Name_encode_oer; +per_type_decoder_f GNB_CU_UP_Name_decode_uper; +per_type_encoder_f GNB_CU_UP_Name_encode_uper; +per_type_decoder_f GNB_CU_UP_Name_decode_aper; +per_type_encoder_f GNB_CU_UP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..65e23da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_DU_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_DU_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_DU_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_DU_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_DU_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name = { + "GNB-DU-Name", + "GNB-DU-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_DU_Name_tags_1, + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_Name_constr_1, &asn_PER_type_GNB_DU_Name_constr_1, GNB_DU_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-DU-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_Name_H_ +#define _GNB_DU_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-Name */ +typedef PrintableString_t GNB_DU_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name; +asn_struct_free_f GNB_DU_Name_free; +asn_struct_print_f GNB_DU_Name_print; +asn_constr_check_f GNB_DU_Name_constraint; +ber_type_decoder_f GNB_DU_Name_decode_ber; +der_type_encoder_f GNB_DU_Name_encode_der; +xer_type_decoder_f GNB_DU_Name_decode_xer; +xer_type_encoder_f GNB_DU_Name_encode_xer; +oer_type_decoder_f GNB_DU_Name_decode_oer; +oer_type_encoder_f GNB_DU_Name_encode_oer; +per_type_decoder_f GNB_DU_Name_decode_uper; +per_type_encoder_f GNB_DU_Name_encode_uper; +per_type_decoder_f GNB_DU_Name_decode_aper; +per_type_encoder_f GNB_DU_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..81bc2b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..cf5438c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-Name.h" + +static asn_oer_constraints_t asn_OER_type_GNB_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_DU_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-DU-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-CU-UP-Name */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1 = { + sizeof(struct GNB_Name), + offsetof(struct GNB_Name, _asn_ctx), + offsetof(struct GNB_Name, present), + sizeof(((struct GNB_Name *)0)->present), + asn_MAP_GNB_Name_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_Name = { + "GNB-Name", + "GNB-Name", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_Name_constr_1, &asn_PER_type_GNB_Name_constr_1, CHOICE_constraint }, + asn_MBR_GNB_Name_1, + 3, /* Elements count */ + &asn_SPC_GNB_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GNB-Name.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_Name_H_ +#define _GNB_Name_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-DU-Name.h" +#include "GNB-CU-CP-Name.h" +#include "GNB-CU-UP-Name.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_Name_PR { + GNB_Name_PR_NOTHING, /* No components present */ + GNB_Name_PR_gNB_DU_Name, + GNB_Name_PR_gNB_CU_CP_Name, + GNB_Name_PR_gNB_CU_UP_Name + /* Extensions may appear below */ + +} GNB_Name_PR; + +/* GNB-Name */ +typedef struct GNB_Name { + GNB_Name_PR present; + union GNB_Name_u { + GNB_DU_Name_t gNB_DU_Name; + GNB_CU_CP_Name_t gNB_CU_CP_Name; + GNB_CU_UP_Name_t gNB_CU_UP_Name; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_Name; +extern asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_Name_1[3]; +extern asn_per_constraints_t asn_PER_type_GNB_Name_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..0b194e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..339797e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..f31a018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..6047414 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..2728634 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..0bae91d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..25f0346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..2f36099 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..91e427b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..d6767bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..58f3724 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..bd653ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.c @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ID.h" + +static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ID), + offsetof(struct GlobalKPMnode_ID, _asn_ctx), + offsetof(struct GlobalKPMnode_ID, present), + sizeof(((struct GlobalKPMnode_ID *)0)->present), + asn_MAP_GlobalKPMnode_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = { + "GlobalKPMnode-ID", + "GlobalKPMnode-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalKPMnode_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalKPMnode_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ID.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ID_H_ +#define _GlobalKPMnode_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalKPMnode-gNB-ID.h" +#include "GlobalKPMnode-en-gNB-ID.h" +#include "GlobalKPMnode-ng-eNB-ID.h" +#include "GlobalKPMnode-eNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalKPMnode_ID_PR { + GlobalKPMnode_ID_PR_NOTHING, /* No components present */ + GlobalKPMnode_ID_PR_gNB, + GlobalKPMnode_ID_PR_en_gNB, + GlobalKPMnode_ID_PR_ng_eNB, + GlobalKPMnode_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalKPMnode_ID_PR; + +/* GlobalKPMnode-ID */ +typedef struct GlobalKPMnode_ID { + GlobalKPMnode_ID_PR present; + union GlobalKPMnode_ID_u { + GlobalKPMnode_gNB_ID_t gNB; + GlobalKPMnode_en_gNB_ID_t en_gNB; + GlobalKPMnode_ng_eNB_ID_t ng_eNB; + GlobalKPMnode_eNB_ID_t eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_eNB_ID), + offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID = { + "GlobalKPMnode-eNB-ID", + "GlobalKPMnode-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_eNB_ID_H_ +#define _GlobalKPMnode_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-eNB-ID */ +typedef struct GlobalKPMnode_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_en_gNB_ID), + offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID = { + "GlobalKPMnode-en-gNB-ID", + "GlobalKPMnode-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_en_gNB_ID_H_ +#define _GlobalKPMnode_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-en-gNB-ID */ +typedef struct GlobalKPMnode_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_gNB_ID), + offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalKPMnode_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = { + "GlobalKPMnode-gNB-ID", + "GlobalKPMnode-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalKPMnode_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_gNB_ID_H_ +#define _GlobalKPMnode_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-gNB-ID */ +typedef struct GlobalKPMnode_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ng_eNB_ID), + offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID = { + "GlobalKPMnode-ng-eNB-ID", + "GlobalKPMnode-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalKPMnode-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ng_eNB_ID_H_ +#define _GlobalKPMnode_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-ng-eNB-ID */ +typedef struct GlobalKPMnode_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..f113921 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..c1ab6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..07f8116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..1e254a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..bfcc098 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..e31846d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..d220e9a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..e8246ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..de67caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.c @@ -0,0 +1,389 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..a8a01f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..c1bec19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + converter-example.c\ + pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..8abd4f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,240 @@ +ASN_MODULE_SRCS= \ + GlobalKPMnode-ID.c \ + GlobalKPMnode-gNB-ID.c \ + GlobalgNB-ID.c \ + GNB-CU-UP-ID.c \ + GNB-DU-ID.c \ + GNB-ID-Choice.c \ + GlobalKPMnode-en-gNB-ID.c \ + GlobalenGNB-ID.c \ + ENGNB-ID.c \ + GlobalKPMnode-ng-eNB-ID.c \ + GlobalngeNB-ID.c \ + ENB-ID-Choice.c \ + GlobalKPMnode-eNB-ID.c \ + GlobalENB-ID.c \ + ENB-ID.c \ + NRCGI.c \ + PLMN-Identity.c \ + NRCellIdentity.c \ + SNSSAI.c \ + C-RNTI.c \ + RIC-Style-Type.c \ + RIC-Style-Name.c \ + RIC-Format-Type.c \ + E2SM-KPM-EventTriggerDefinition.c \ + E2SM-KPM-EventTriggerDefinition-Format1.c \ + E2SM-KPM-ActionDefinition.c \ + E2SM-KPM-IndicationHeader.c \ + E2SM-KPM-IndicationHeader-Format1.c \ + E2SM-KPM-IndicationMessage.c \ + E2SM-KPM-IndicationMessage-Format1.c \ + PM-Containers-List.c \ + E2SM-KPM-RANfunction-Description.c \ + NI-Type.c \ + RAN-Container.c \ + Timestamp.c \ + Trigger-ConditionIE-Item.c \ + RT-Period-IE.c \ + RANcallProcess-ID-string.c \ + RANfunction-Name.c \ + RIC-EventTriggerStyle-List.c \ + RIC-ReportStyle-List.c \ + PF-Container.c \ + GNB-Name.c \ + GNB-CU-CP-Name.c \ + GNB-DU-Name.c \ + GNB-CU-UP-Name.c \ + UE-Report-Type.c \ + ODU-PF-Container.c \ + CellResourceReportListItem.c \ + ServedPlmnPerCellListItem.c \ + FGC-DU-PM-Container.c \ + SlicePerPlmnPerCellListItem.c \ + FQIPERSlicesPerPlmnPerCellListItem.c \ + EPC-DU-PM-Container.c \ + PerQCIReportListItem.c \ + DU-Usage-Report-Per-UE.c \ + DU-Usage-Report-CellResourceReportItem.c \ + DU-Usage-Report-UeResourceReportItem.c \ + OCUCP-PF-Container.c \ + CU-CP-Usage-Report-Per-UE.c \ + CU-CP-Usage-Report-CellResourceReportItem.c \ + CU-CP-Usage-Report-UeResourceReportItem.c \ + OCUUP-PF-Container.c \ + PF-ContainerListItem.c \ + CUUPMeasurement-Container.c \ + PlmnID-List.c \ + FGC-CUUP-PM-Format.c \ + SliceToReportListItem.c \ + FQIPERSlicesPerPlmnListItem.c \ + EPC-CUUP-PM-Format.c \ + PerQCIReportListItemFormat.c \ + CU-UP-Usage-Report-Per-UE.c \ + CU-UP-Usage-Report-CellResourceReportItem.c \ + CU-UP-Usage-Report-UeResourceReportItem.c + +ASN_MODULE_HDRS= \ + GlobalKPMnode-ID.h \ + GlobalKPMnode-gNB-ID.h \ + GlobalgNB-ID.h \ + GNB-CU-UP-ID.h \ + GNB-DU-ID.h \ + GNB-ID-Choice.h \ + GlobalKPMnode-en-gNB-ID.h \ + GlobalenGNB-ID.h \ + ENGNB-ID.h \ + GlobalKPMnode-ng-eNB-ID.h \ + GlobalngeNB-ID.h \ + ENB-ID-Choice.h \ + GlobalKPMnode-eNB-ID.h \ + GlobalENB-ID.h \ + ENB-ID.h \ + NRCGI.h \ + PLMN-Identity.h \ + NRCellIdentity.h \ + SNSSAI.h \ + C-RNTI.h \ + RIC-Style-Type.h \ + RIC-Style-Name.h \ + RIC-Format-Type.h \ + E2SM-KPM-EventTriggerDefinition.h \ + E2SM-KPM-EventTriggerDefinition-Format1.h \ + E2SM-KPM-ActionDefinition.h \ + E2SM-KPM-IndicationHeader.h \ + E2SM-KPM-IndicationHeader-Format1.h \ + E2SM-KPM-IndicationMessage.h \ + E2SM-KPM-IndicationMessage-Format1.h \ + PM-Containers-List.h \ + E2SM-KPM-RANfunction-Description.h \ + NI-Type.h \ + RAN-Container.h \ + Timestamp.h \ + Trigger-ConditionIE-Item.h \ + RT-Period-IE.h \ + RANcallProcess-ID-string.h \ + RANfunction-Name.h \ + RIC-EventTriggerStyle-List.h \ + RIC-ReportStyle-List.h \ + PF-Container.h \ + GNB-Name.h \ + GNB-CU-CP-Name.h \ + GNB-DU-Name.h \ + GNB-CU-UP-Name.h \ + UE-Report-Type.h \ + ODU-PF-Container.h \ + CellResourceReportListItem.h \ + ServedPlmnPerCellListItem.h \ + FGC-DU-PM-Container.h \ + SlicePerPlmnPerCellListItem.h \ + FQIPERSlicesPerPlmnPerCellListItem.h \ + EPC-DU-PM-Container.h \ + PerQCIReportListItem.h \ + DU-Usage-Report-Per-UE.h \ + DU-Usage-Report-CellResourceReportItem.h \ + DU-Usage-Report-UeResourceReportItem.h \ + OCUCP-PF-Container.h \ + CU-CP-Usage-Report-Per-UE.h \ + CU-CP-Usage-Report-CellResourceReportItem.h \ + CU-CP-Usage-Report-UeResourceReportItem.h \ + OCUUP-PF-Container.h \ + PF-ContainerListItem.h \ + CUUPMeasurement-Container.h \ + PlmnID-List.h \ + FGC-CUUP-PM-Format.h \ + SliceToReportListItem.h \ + FQIPERSlicesPerPlmnListItem.h \ + EPC-CUUP-PM-Format.h \ + PerQCIReportListItemFormat.h \ + CU-UP-Usage-Report-Per-UE.h \ + CU-UP-Usage-Report-CellResourceReportItem.h \ + CU-UP-Usage-Report-UeResourceReportItem.h + +ASN_MODULE_HDRS+=OPEN_TYPE.h +ASN_MODULE_SRCS+=OPEN_TYPE.c +ASN_MODULE_HDRS+=constr_CHOICE.h +ASN_MODULE_HDRS+=INTEGER.h +ASN_MODULE_SRCS+=INTEGER.c +ASN_MODULE_HDRS+=NativeEnumerated.h +ASN_MODULE_SRCS+=NativeEnumerated.c +ASN_MODULE_HDRS+=NativeInteger.h +ASN_MODULE_SRCS+=NativeInteger.c +ASN_MODULE_HDRS+=PrintableString.h +ASN_MODULE_SRCS+=PrintableString.c +ASN_MODULE_HDRS+=OCTET_STRING.h +ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=asn_SET_OF.h +ASN_MODULE_SRCS+=asn_SET_OF.c +ASN_MODULE_SRCS+=constr_CHOICE.c +ASN_MODULE_HDRS+=constr_SEQUENCE.h +ASN_MODULE_SRCS+=constr_SEQUENCE.c +ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=constr_SET_OF.h +ASN_MODULE_SRCS+=constr_SET_OF.c +ASN_MODULE_HDRS+=asn_application.h +ASN_MODULE_SRCS+=asn_application.c +ASN_MODULE_HDRS+=asn_ioc.h +ASN_MODULE_HDRS+=asn_system.h +ASN_MODULE_HDRS+=asn_codecs.h +ASN_MODULE_HDRS+=asn_internal.h +ASN_MODULE_SRCS+=asn_internal.c +ASN_MODULE_HDRS+=asn_random_fill.h +ASN_MODULE_SRCS+=asn_random_fill.c +ASN_MODULE_HDRS+=asn_bit_data.h +ASN_MODULE_SRCS+=asn_bit_data.c +ASN_MODULE_SRCS+=OCTET_STRING.c +ASN_MODULE_HDRS+=BIT_STRING.h +ASN_MODULE_SRCS+=BIT_STRING.c +ASN_MODULE_SRCS+=asn_codecs_prim.c +ASN_MODULE_HDRS+=asn_codecs_prim.h +ASN_MODULE_HDRS+=ber_tlv_length.h +ASN_MODULE_SRCS+=ber_tlv_length.c +ASN_MODULE_HDRS+=ber_tlv_tag.h +ASN_MODULE_SRCS+=ber_tlv_tag.c +ASN_MODULE_HDRS+=ber_decoder.h +ASN_MODULE_SRCS+=ber_decoder.c +ASN_MODULE_HDRS+=der_encoder.h +ASN_MODULE_SRCS+=der_encoder.c +ASN_MODULE_HDRS+=constr_TYPE.h +ASN_MODULE_SRCS+=constr_TYPE.c +ASN_MODULE_HDRS+=constraints.h +ASN_MODULE_SRCS+=constraints.c +ASN_MODULE_HDRS+=xer_support.h +ASN_MODULE_SRCS+=xer_support.c +ASN_MODULE_HDRS+=xer_decoder.h +ASN_MODULE_SRCS+=xer_decoder.c +ASN_MODULE_HDRS+=xer_encoder.h +ASN_MODULE_SRCS+=xer_encoder.c +ASN_MODULE_HDRS+=per_support.h +ASN_MODULE_SRCS+=per_support.c +ASN_MODULE_HDRS+=per_decoder.h +ASN_MODULE_SRCS+=per_decoder.c +ASN_MODULE_HDRS+=per_encoder.h +ASN_MODULE_SRCS+=per_encoder.c +ASN_MODULE_HDRS+=per_opentype.h +ASN_MODULE_SRCS+=per_opentype.c +ASN_MODULE_HDRS+=oer_decoder.h +ASN_MODULE_HDRS+=oer_encoder.h +ASN_MODULE_HDRS+=oer_support.h +ASN_MODULE_SRCS+=oer_decoder.c +ASN_MODULE_SRCS+=oer_encoder.c +ASN_MODULE_SRCS+=oer_support.c +ASN_MODULE_SRCS+=OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=INTEGER_oer.c +ASN_MODULE_SRCS+=BIT_STRING_oer.c +ASN_MODULE_SRCS+=OCTET_STRING_oer.c +ASN_MODULE_SRCS+=NativeInteger_oer.c +ASN_MODULE_SRCS+=NativeEnumerated_oer.c +ASN_MODULE_SRCS+=constr_CHOICE_oer.c +ASN_MODULE_SRCS+=constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NI-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_NI_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NI_Type_value2enum_1[] = { + { 0, 4, "x2-u" }, + { 1, 4, "xn-u" }, + { 2, 4, "f1-u" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NI_Type_enum2value_1[] = { + 2, /* f1-u(2) */ + 0, /* x2-u(0) */ + 1 /* xn-u(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = { + asn_MAP_NI_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NI_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NI_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NI_Type = { + "NI-Type", + "NI-Type", + &asn_OP_NativeEnumerated, + asn_DEF_NI_Type_tags_1, + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + asn_DEF_NI_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NI_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NI-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NI_Type_H_ +#define _NI_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NI_Type { + NI_Type_x2_u = 0, + NI_Type_xn_u = 1, + NI_Type_f1_u = 2 + /* + * Enumeration is extensible + */ +} e_NI_Type; + +/* NI-Type */ +typedef long NI_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NI_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NI_Type; +extern const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1; +asn_struct_free_f NI_Type_free; +asn_struct_print_f NI_Type_print; +asn_constr_check_f NI_Type_constraint; +ber_type_decoder_f NI_Type_decode_ber; +der_type_encoder_f NI_Type_encode_der; +xer_type_decoder_f NI_Type_decode_xer; +xer_type_encoder_f NI_Type_encode_xer; +oer_type_decoder_f NI_Type_decode_oer; +oer_type_encoder_f NI_Type_encode_oer; +per_type_decoder_f NI_Type_decode_uper; +per_type_encoder_f NI_Type_encode_uper; +per_type_decoder_f NI_Type_decode_aper; +per_type_encoder_f NI_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NI_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCGI.h" + +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 2, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCGI.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentity_t nRCellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCellIdentity.h" + +int +NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 36 /* (SIZE(36..36)) */}; +asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { + "NRCellIdentity", + "NRCellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentity_tags_1, + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NRCellIdentity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCellIdentity_H_ +#define _NRCellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentity */ +typedef BIT_STRING_t NRCellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentity; +asn_struct_free_f NRCellIdentity_free; +asn_struct_print_f NRCellIdentity_print; +asn_constr_check_f NRCellIdentity_constraint; +ber_type_decoder_f NRCellIdentity_decode_ber; +der_type_encoder_f NRCellIdentity_encode_der; +xer_type_decoder_f NRCellIdentity_decode_xer; +xer_type_encoder_f NRCellIdentity_encode_xer; +oer_type_decoder_f NRCellIdentity_decode_oer; +oer_type_encoder_f NRCellIdentity_encode_oer; +per_type_decoder_f NRCellIdentity_decode_uper; +per_type_encoder_f NRCellIdentity_encode_uper; +per_type_decoder_f NRCellIdentity_decode_aper; +per_type_encoder_f NRCellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUCP-PF-Container.h" + +static int +memb_numberOfActive_UEs_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_3[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_numberOfActive_UEs_constr_4, &asn_PER_memb_numberOfActive_UEs_constr_4, memb_numberOfActive_UEs_constraint_3 }, + 0, 0, /* No default value */ + "numberOfActive-UEs" + }, +}; +static const int asn_MAP_cu_CP_Resource_Status_oms_3[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_3 = { + sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status), + offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx), + asn_MAP_cu_CP_Resource_Status_tag2el_3, + 1, /* Count of tags in the map */ + asn_MAP_cu_CP_Resource_Status_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_3 = { + "cu-CP-Resource-Status", + "cu-CP-Resource-Status", + &asn_OP_SEQUENCE, + asn_DEF_cu_CP_Resource_Status_tags_3, + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]) - 1, /* 1 */ + asn_DEF_cu_CP_Resource_Status_tags_3, /* Same as above */ + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_cu_CP_Resource_Status_3, + 1, /* Elements count */ + &asn_SPC_cu_CP_Resource_Status_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container, gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cu_CP_Resource_Status_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-CP-Resource-Status" + }, +}; +static const int asn_MAP_OCUCP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cu-CP-Resource-Status */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = { + sizeof(struct OCUCP_PF_Container), + offsetof(struct OCUCP_PF_Container, _asn_ctx), + asn_MAP_OCUCP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUCP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container = { + "OCUCP-PF-Container", + "OCUCP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUCP_PF_Container_tags_1, + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUCP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUCP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUCP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUCP-PF-Container.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUCP_PF_Container_H_ +#define _OCUCP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-CP-Name.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OCUCP-PF-Container */ +typedef struct OCUCP_PF_Container { + GNB_CU_CP_Name_t *gNB_CU_CP_Name; /* OPTIONAL */ + struct OCUCP_PF_Container__cu_CP_Resource_Status { + long *numberOfActive_UEs; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cu_CP_Resource_Status; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUCP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCUCP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.c @@ -0,0 +1,141 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUUP-PF-Container.h" + +static int +memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pf_ContainerList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PF_ContainerListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_3 = { + sizeof(struct OCUUP_PF_Container__pf_ContainerList), + offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_3 = { + "pf-ContainerList", + "pf-ContainerList", + &asn_OP_SEQUENCE_OF, + asn_DEF_pf_ContainerList_tags_3, + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]) - 1, /* 1 */ + asn_DEF_pf_ContainerList_tags_3, /* Same as above */ + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]), /* 2 */ + { &asn_OER_type_pf_ContainerList_constr_3, &asn_PER_type_pf_ContainerList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_pf_ContainerList_3, + 1, /* Single element */ + &asn_SPC_pf_ContainerList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUUP_PF_Container, gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pf_ContainerList_3, + 0, + { &asn_OER_memb_pf_ContainerList_constr_3, &asn_PER_memb_pf_ContainerList_constr_3, memb_pf_ContainerList_constraint_1 }, + 0, 0, /* No default value */ + "pf-ContainerList" + }, +}; +static const int asn_MAP_OCUUP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pf-ContainerList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = { + sizeof(struct OCUUP_PF_Container), + offsetof(struct OCUUP_PF_Container, _asn_ctx), + asn_MAP_OCUUP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUUP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container = { + "OCUUP-PF-Container", + "OCUUP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUUP_PF_Container_tags_1, + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUUP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUUP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUUP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OCUUP-PF-Container.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUUP_PF_Container_H_ +#define _OCUUP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-UP-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_ContainerListItem; + +/* OCUUP-PF-Container */ +typedef struct OCUUP_PF_Container { + GNB_CU_UP_Name_t *gNB_CU_UP_Name; /* OPTIONAL */ + struct OCUUP_PF_Container__pf_ContainerList { + A_SEQUENCE_OF(struct PF_ContainerListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pf_ContainerList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUUP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-ContainerListItem.h" + +#endif /* _OCUUP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ODU-PF-Container.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellResourceReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct ODU_PF_Container__cellResourceReportList), + offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = { + sizeof(struct ODU_PF_Container), + offsetof(struct ODU_PF_Container, _asn_ctx), + asn_MAP_ODU_PF_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container = { + "ODU-PF-Container", + "ODU-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_ODU_PF_Container_tags_1, + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_ODU_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ODU_PF_Container_1, + 1, /* Elements count */ + &asn_SPC_ODU_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ODU-PF-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ODU_PF_Container_H_ +#define _ODU_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellResourceReportListItem; + +/* ODU-PF-Container */ +typedef struct ODU_PF_Container { + struct ODU_PF_Container__cellResourceReportList { + A_SEQUENCE_OF(struct CellResourceReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ODU_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellResourceReportListItem.h" + +#endif /* _ODU_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-Container.h" + +static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oDU), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ODU_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_CP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUCP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_UP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUUP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */ +}; +asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = { + sizeof(struct PF_Container), + offsetof(struct PF_Container, _asn_ctx), + offsetof(struct PF_Container, present), + sizeof(((struct PF_Container *)0)->present), + asn_MAP_PF_Container_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_Container = { + "PF-Container", + "PF-Container", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint }, + asn_MBR_PF_Container_1, + 3, /* Elements count */ + &asn_SPC_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-Container.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_Container_H_ +#define _PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "ODU-PF-Container.h" +#include "OCUCP-PF-Container.h" +#include "OCUUP-PF-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PF_Container_PR { + PF_Container_PR_NOTHING, /* No components present */ + PF_Container_PR_oDU, + PF_Container_PR_oCU_CP, + PF_Container_PR_oCU_UP + /* Extensions may appear below */ + +} PF_Container_PR; + +/* PF-Container */ +typedef struct PF_Container { + PF_Container_PR present; + union PF_Container_u { + ODU_PF_Container_t oDU; + OCUCP_PF_Container_t oCU_CP; + OCUUP_PF_Container_t oCU_UP; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_Container; +extern asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_Container_1[3]; +extern asn_per_constraints_t asn_PER_type_PF_Container_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-ContainerListItem.h" + +asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NI_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-type" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CUUPMeasurement_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "o-CU-UP-PM-Container" + }, +}; +static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = { + sizeof(struct PF_ContainerListItem), + offsetof(struct PF_ContainerListItem, _asn_ctx), + asn_MAP_PF_ContainerListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem = { + "PF-ContainerListItem", + "PF-ContainerListItem", + &asn_OP_SEQUENCE, + asn_DEF_PF_ContainerListItem_tags_1, + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + asn_DEF_PF_ContainerListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PF_ContainerListItem_1, + 2, /* Elements count */ + &asn_SPC_PF_ContainerListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PF-ContainerListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_ContainerListItem_H_ +#define _PF_ContainerListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NI-Type.h" +#include "CUUPMeasurement-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PF-ContainerListItem */ +typedef struct PF_ContainerListItem { + NI_Type_t interface_type; + CUUPMeasurement_Container_t o_CU_UP_PM_Container; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_ContainerListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_ContainerListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..e3754f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..6835400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PM-Containers-List.h" + +asn_TYPE_member_t asn_MBR_PM_Containers_List_1[] = { + { ATF_POINTER, 2, offsetof(struct PM_Containers_List, performanceContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "performanceContainer" + }, + { ATF_POINTER, 1, offsetof(struct PM_Containers_List, theRANContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAN_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "theRANContainer" + }, +}; +static const int asn_MAP_PM_Containers_List_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_PM_Containers_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1 = { + sizeof(struct PM_Containers_List), + offsetof(struct PM_Containers_List, _asn_ctx), + asn_MAP_PM_Containers_List_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PM_Containers_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PM_Containers_List = { + "PM-Containers-List", + "PM-Containers-List", + &asn_OP_SEQUENCE, + asn_DEF_PM_Containers_List_tags_1, + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + asn_DEF_PM_Containers_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PM_Containers_List_1, + 2, /* Elements count */ + &asn_SPC_PM_Containers_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PM-Containers-List.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PM_Containers_List_H_ +#define _PM_Containers_List_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_Container; +struct RAN_Container; + +/* PM-Containers-List */ +typedef struct PM_Containers_List { + struct PF_Container *performanceContainer; /* OPTIONAL */ + struct RAN_Container *theRANContainer; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PM_Containers_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PM_Containers_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PM_Containers_List_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-Container.h" +#include "RAN-Container.h" + +#endif /* _PM_Containers_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItem.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = { + sizeof(struct PerQCIReportListItem), + offsetof(struct PerQCIReportListItem, _asn_ctx), + asn_MAP_PerQCIReportListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = { + "PerQCIReportListItem", + "PerQCIReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItem_tags_1, + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItem_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItem_H_ +#define _PerQCIReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItem */ +typedef struct PerQCIReportListItem { + long qci; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItemFormat.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = { + sizeof(struct PerQCIReportListItemFormat), + offsetof(struct PerQCIReportListItemFormat, _asn_ctx), + asn_MAP_PerQCIReportListItemFormat_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItemFormat_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = { + "PerQCIReportListItemFormat", + "PerQCIReportListItemFormat", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItemFormat_tags_1, + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItemFormat_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItemFormat_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItemFormat_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PerQCIReportListItemFormat.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItemFormat_H_ +#define _PerQCIReportListItemFormat_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItemFormat */ +typedef struct PerQCIReportListItemFormat { + long qci; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItemFormat_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItemFormat_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PlmnID-List.h" + +asn_TYPE_member_t asn_MBR_PlmnID_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PlmnID_List, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct PlmnID_List, cu_UP_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct PlmnID_List, cu_UP_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-EPC" + }, +}; +static const int asn_MAP_PlmnID_List_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PlmnID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PlmnID_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1 = { + sizeof(struct PlmnID_List), + offsetof(struct PlmnID_List, _asn_ctx), + asn_MAP_PlmnID_List_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PlmnID_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PlmnID_List = { + "PlmnID-List", + "PlmnID-List", + &asn_OP_SEQUENCE, + asn_DEF_PlmnID_List_tags_1, + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + asn_DEF_PlmnID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PlmnID_List_1, + 3, /* Elements count */ + &asn_SPC_PlmnID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PlmnID-List.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PlmnID_List_H_ +#define _PlmnID_List_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_CUUP_PM_Format; +struct EPC_CUUP_PM_Format; + +/* PlmnID-List */ +typedef struct PlmnID_List { + PLMN_Identity_t pLMN_Identity; + struct FGC_CUUP_PM_Format *cu_UP_PM_5GC; /* OPTIONAL */ + struct EPC_CUUP_PM_Format *cu_UP_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PlmnID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PlmnID_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PlmnID_List_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-CUUP-PM-Format.h" +#include "EPC-CUUP-PM-Format.h" + +#endif /* _PlmnID_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c new file mode 100644 index 0000000..4f55ae3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h new file mode 100644 index 0000000..8f93430 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Presence.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..0e488d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..a2e8fe8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProcedureCode.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4046387 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,810 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..5034a64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c9d5808 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..3376410 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..ad1c8b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..5b730c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..f77445b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..1837ac8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..af5597c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7190 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..573edcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..9c7e653 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..8193bd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..9afe610 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..f6d2261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..c516962 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..b17c298 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.c @@ -0,0 +1,127 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RAN-Container.h" + +static asn_oer_constraints_t asn_OER_type_reportContainer_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_reportContainer_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportContainer_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oDU_UE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DU_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_CP_UE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_CP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_UP_UE), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_UP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP-UE" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_reportContainer_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU-UE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP-UE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP-UE */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportContainer_specs_3 = { + sizeof(struct RAN_Container__reportContainer), + offsetof(struct RAN_Container__reportContainer, _asn_ctx), + offsetof(struct RAN_Container__reportContainer, present), + sizeof(((struct RAN_Container__reportContainer *)0)->present), + asn_MAP_reportContainer_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportContainer_3 = { + "reportContainer", + "reportContainer", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_reportContainer_constr_3, &asn_PER_type_reportContainer_constr_3, CHOICE_constraint }, + asn_MBR_reportContainer_3, + 3, /* Elements count */ + &asn_SPC_reportContainer_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RAN_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, timestamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Timestamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, reportContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportContainer_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportContainer" + }, +}; +static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RAN_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1 = { + sizeof(struct RAN_Container), + offsetof(struct RAN_Container, _asn_ctx), + asn_MAP_RAN_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RAN_Container = { + "RAN-Container", + "RAN-Container", + &asn_OP_SEQUENCE, + asn_DEF_RAN_Container_tags_1, + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + asn_DEF_RAN_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RAN_Container_1, + 2, /* Elements count */ + &asn_SPC_RAN_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RAN-Container.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RAN_Container_H_ +#define _RAN_Container_H_ + + +#include + +/* Including external dependencies */ +#include "Timestamp.h" +#include "DU-Usage-Report-Per-UE.h" +#include "CU-CP-Usage-Report-Per-UE.h" +#include "CU-UP-Usage-Report-Per-UE.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAN_Container__reportContainer_PR { + RAN_Container__reportContainer_PR_NOTHING, /* No components present */ + RAN_Container__reportContainer_PR_oDU_UE, + RAN_Container__reportContainer_PR_oCU_CP_UE, + RAN_Container__reportContainer_PR_oCU_UP_UE + /* Extensions may appear below */ + +} RAN_Container__reportContainer_PR; + +/* RAN-Container */ +typedef struct RAN_Container { + Timestamp_t timestamp; + struct RAN_Container__reportContainer { + RAN_Container__reportContainer_PR present; + union RAN_Container__reportContainer_u { + DU_Usage_Report_Per_UE_t oDU_UE; + CU_CP_Usage_Report_Per_UE_t oCU_CP_UE; + CU_UP_Usage_Report_Per_UE_t oCU_UP_UE; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportContainer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RAN_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAN_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_RAN_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAN_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANcallProcess-ID-string.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RANcallProcess_ID_string_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RANcallProcess_ID_string_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RANcallProcess_ID_string_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = { + "RANcallProcess-ID-string", + "RANcallProcess-ID-string", + &asn_OP_PrintableString, + asn_DEF_RANcallProcess_ID_string_tags_1, + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + asn_DEF_RANcallProcess_ID_string_tags_1, /* Same as above */ + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + { &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANcallProcess-ID-string.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANcallProcess_ID_string_H_ +#define _RANcallProcess_ID_string_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANcallProcess-ID-string */ +typedef PrintableString_t RANcallProcess_ID_string_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string; +asn_struct_free_f RANcallProcess_ID_string_free; +asn_struct_print_f RANcallProcess_ID_string_print; +asn_constr_check_f RANcallProcess_ID_string_constraint; +ber_type_decoder_f RANcallProcess_ID_string_decode_ber; +der_type_encoder_f RANcallProcess_ID_string_encode_der; +xer_type_decoder_f RANcallProcess_ID_string_decode_xer; +xer_type_encoder_f RANcallProcess_ID_string_encode_xer; +oer_type_decoder_f RANcallProcess_ID_string_decode_oer; +oer_type_encoder_f RANcallProcess_ID_string_encode_oer; +per_type_decoder_f RANcallProcess_ID_string_decode_uper; +per_type_encoder_f RANcallProcess_ID_string_encode_uper; +per_type_decoder_f RANcallProcess_ID_string_decode_aper; +per_type_encoder_f RANcallProcess_ID_string_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANcallProcess_ID_string_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..f1554d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..e7fd073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.c @@ -0,0 +1,316 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANfunction-Name.h" + +static const int permitted_alphabet_table_2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_2[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_2(const void *sptr) { + const int *table = permitted_alphabet_table_2; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_ranFunction_ShortName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_2(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_ShortName_2_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_2)/sizeof(permitted_alphabet_table_2[0])) + return -1; + return permitted_alphabet_table_2[value] - 1; +} +static int asn_PER_MAP_ranFunction_ShortName_2_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_2)/sizeof(permitted_alphabet_code2value_2[0])) + return -1; + return permitted_alphabet_code2value_2[code]; +} +static int +memb_ranFunction_E2SM_OID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000) + && !check_permitted_alphabet_3(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_E2SM_OID_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_ranFunction_E2SM_OID_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} +static int +memb_ranFunction_Description_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_4(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_Description_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} +static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, + asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_Description_4_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_Description_4_c2v /* PER code to value map */ +}; +asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_ShortName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-ShortName" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_E2SM_OID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-E2SM-OID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_Description), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-Description" + }, + { ATF_POINTER, 1, offsetof(struct RANfunction_Name, ranFunction_Instance), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Instance" + }, +}; +static const int asn_MAP_RANfunction_Name_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_RANfunction_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-ShortName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunction-E2SM-OID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunction-Description */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunction-Instance */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1 = { + sizeof(struct RANfunction_Name), + offsetof(struct RANfunction_Name, _asn_ctx), + asn_MAP_RANfunction_Name_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RANfunction_Name_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Name = { + "RANfunction-Name", + "RANfunction-Name", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Name_tags_1, + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Name_1, + 4, /* Elements count */ + &asn_SPC_RANfunction_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunction-Name.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANfunction_Name_H_ +#define _RANfunction_Name_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Name */ +typedef struct RANfunction_Name { + PrintableString_t ranFunction_ShortName; + PrintableString_t ranFunction_E2SM_OID; + PrintableString_t ranFunction_Description; + long *ranFunction_Instance; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Name; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..3d8697d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..4e54dde --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..7661a88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..9b3be69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..fc95705 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..f0a61a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..985330a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..033ed53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a0b271b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..58ec9ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionRevision.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..f55d0a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..9e45736 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..c52b90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..b8bd23c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..fb5c08d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..386c289 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-EventTriggerStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_List), + offsetof(struct RIC_EventTriggerStyle_List, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_List_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List = { + "RIC-EventTriggerStyle-List", + "RIC-EventTriggerStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_List_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_List_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-EventTriggerStyle-List.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_EventTriggerStyle_List_H_ +#define _RIC_EventTriggerStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-List */ +typedef struct RIC_EventTriggerStyle_List { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Format-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Format_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type = { + "RIC-Format-Type", + "RIC-Format-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Format_Type_tags_1, + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Format_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Format-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Format_Type_H_ +#define _RIC_Format_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Format-Type */ +typedef long RIC_Format_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type; +asn_struct_free_f RIC_Format_Type_free; +asn_struct_print_f RIC_Format_Type_print; +asn_constr_check_f RIC_Format_Type_constraint; +ber_type_decoder_f RIC_Format_Type_decode_ber; +der_type_encoder_f RIC_Format_Type_encode_der; +xer_type_decoder_f RIC_Format_Type_decode_xer; +xer_type_encoder_f RIC_Format_Type_encode_xer; +oer_type_decoder_f RIC_Format_Type_decode_oer; +oer_type_encoder_f RIC_Format_Type_encode_oer; +per_type_decoder_f RIC_Format_Type_decode_uper; +per_type_encoder_f RIC_Format_Type_encode_uper; +per_type_decoder_f RIC_Format_Type_decode_aper; +per_type_encoder_f RIC_Format_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Format_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-ReportStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1 = { + sizeof(struct RIC_ReportStyle_List), + offsetof(struct RIC_ReportStyle_List, _asn_ctx), + asn_MAP_RIC_ReportStyle_List_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List = { + "RIC-ReportStyle-List", + "RIC-ReportStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_List_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_List_1, + 4, /* Elements count */ + &asn_SPC_RIC_ReportStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-ReportStyle-List.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_ReportStyle_List_H_ +#define _RIC_ReportStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-List */ +typedef struct RIC_ReportStyle_List { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RIC_Style_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RIC_Style_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RIC_Style_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RIC_Style_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RIC_Style_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { + "RIC-Style-Name", + "RIC-Style-Name", + &asn_OP_PrintableString, + asn_DEF_RIC_Style_Name_tags_1, + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Name_H_ +#define _RIC_Style_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Name */ +typedef PrintableString_t RIC_Style_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name; +asn_struct_free_f RIC_Style_Name_free; +asn_struct_print_f RIC_Style_Name_print; +asn_constr_check_f RIC_Style_Name_constraint; +ber_type_decoder_f RIC_Style_Name_decode_ber; +der_type_encoder_f RIC_Style_Name_encode_der; +xer_type_decoder_f RIC_Style_Name_decode_xer; +xer_type_encoder_f RIC_Style_Name_encode_xer; +oer_type_decoder_f RIC_Style_Name_decode_oer; +oer_type_encoder_f RIC_Style_Name_encode_oer; +per_type_decoder_f RIC_Style_Name_decode_uper; +per_type_encoder_f RIC_Style_Name_encode_uper; +per_type_decoder_f RIC_Style_Name_decode_aper; +per_type_encoder_f RIC_Style_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Style_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type = { + "RIC-Style-Type", + "RIC-Style-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Style_Type_tags_1, + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RIC-Style-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Type_H_ +#define _RIC_Style_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Type */ +typedef long RIC_Style_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type; +asn_struct_free_f RIC_Style_Type_free; +asn_struct_print_f RIC_Style_Type_print; +asn_constr_check_f RIC_Style_Type_constraint; +ber_type_decoder_f RIC_Style_Type_decode_ber; +der_type_encoder_f RIC_Style_Type_encode_der; +xer_type_decoder_f RIC_Style_Type_decode_xer; +xer_type_encoder_f RIC_Style_Type_encode_xer; +oer_type_decoder_f RIC_Style_Type_decode_oer; +oer_type_encoder_f RIC_Style_Type_encode_oer; +per_type_decoder_f RIC_Style_Type_decode_uper; +per_type_encoder_f RIC_Style_Type_encode_uper; +per_type_decoder_f RIC_Style_Type_decode_aper; +per_type_encoder_f RIC_Style_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..0b566bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..d7f13c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..692fd38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..8eaf217 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..515679d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..48645e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..51f45f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..95bbadf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..2e8bc94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..c3f5d07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..dd1d941 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..e1eeca6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c new file mode 100644 index 0000000..ecd1ea7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h new file mode 100644 index 0000000..b21d3a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c new file mode 100644 index 0000000..69f2101 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h new file mode 100644 index 0000000..b51809c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactionType.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..c1445fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..7acfeb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..a7d682f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..d388b85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcallProcessID.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..d69a24c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..73f9da7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..eb3d6d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..63dbb73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..044706c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..919f11c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..2b0400b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..f26977c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..f3df4b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..5cc6cc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..c40874d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..94481fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..2b54af3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..f35e61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..8dc0c58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..627ebaa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICcontrolStatus.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..4c892e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..f323980 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c new file mode 100644 index 0000000..be2a72a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h new file mode 100644 index 0000000..8a8173d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..31e2f7f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..0d1448d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..096f61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..97ce63e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..74782d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..30d8c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationSN.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c new file mode 100644 index 0000000..81beabe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ae14d7a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICindicationType.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dfe67b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h new file mode 100644 index 0000000..24636d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..a2c83c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7db0a4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..8ec4465 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..f9353cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..fe21337 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..ec27597 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..61334b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..71e1e62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..04b54c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..1560efb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..4ff78c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..f25c782 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..70a20c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9b93735 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..39475fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..cd5b0f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..f0a7a43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..fb43397 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d6ed804 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..836322b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..64e2e45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..1008fb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..dae24c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..c622986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..18f61c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..159b5e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..6bd2096 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RICtimeToWait.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RT-Period-IE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = { + { 0, 4, "ms10" }, + { 1, 4, "ms20" }, + { 2, 4, "ms32" }, + { 3, 4, "ms40" }, + { 4, 4, "ms60" }, + { 5, 4, "ms64" }, + { 6, 4, "ms70" }, + { 7, 4, "ms80" }, + { 8, 5, "ms128" }, + { 9, 5, "ms160" }, + { 10, 5, "ms256" }, + { 11, 5, "ms320" }, + { 12, 5, "ms512" }, + { 13, 5, "ms640" }, + { 14, 6, "ms1024" }, + { 15, 6, "ms1280" }, + { 16, 6, "ms2048" }, + { 17, 6, "ms2560" }, + { 18, 6, "ms5120" }, + { 19, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = { + 0, /* ms10(0) */ + 14, /* ms1024(14) */ + 19, /* ms10240(19) */ + 8, /* ms128(8) */ + 15, /* ms1280(15) */ + 9, /* ms160(9) */ + 1, /* ms20(1) */ + 16, /* ms2048(16) */ + 10, /* ms256(10) */ + 17, /* ms2560(17) */ + 2, /* ms32(2) */ + 11, /* ms320(11) */ + 3, /* ms40(3) */ + 12, /* ms512(12) */ + 18, /* ms5120(18) */ + 4, /* ms60(4) */ + 5, /* ms64(5) */ + 13, /* ms640(13) */ + 6, /* ms70(6) */ + 7 /* ms80(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = { + asn_MAP_RT_Period_IE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RT_Period_IE_enum2value_1, /* N => "tag"; sorted by N */ + 20, /* Number of elements in the maps */ + 21, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = { + "RT-Period-IE", + "RT-Period-IE", + &asn_OP_NativeEnumerated, + asn_DEF_RT_Period_IE_tags_1, + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + asn_DEF_RT_Period_IE_tags_1, /* Same as above */ + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + { &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RT_Period_IE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/RT-Period-IE.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RT_Period_IE_H_ +#define _RT_Period_IE_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RT_Period_IE { + RT_Period_IE_ms10 = 0, + RT_Period_IE_ms20 = 1, + RT_Period_IE_ms32 = 2, + RT_Period_IE_ms40 = 3, + RT_Period_IE_ms60 = 4, + RT_Period_IE_ms64 = 5, + RT_Period_IE_ms70 = 6, + RT_Period_IE_ms80 = 7, + RT_Period_IE_ms128 = 8, + RT_Period_IE_ms160 = 9, + RT_Period_IE_ms256 = 10, + RT_Period_IE_ms320 = 11, + RT_Period_IE_ms512 = 12, + RT_Period_IE_ms640 = 13, + RT_Period_IE_ms1024 = 14, + RT_Period_IE_ms1280 = 15, + RT_Period_IE_ms2048 = 16, + RT_Period_IE_ms2560 = 17, + RT_Period_IE_ms5120 = 18, + RT_Period_IE_ms10240 = 19 + /* + * Enumeration is extensible + */ +} e_RT_Period_IE; + +/* RT-Period-IE */ +typedef long RT_Period_IE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RT_Period_IE; +extern const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1; +asn_struct_free_f RT_Period_IE_free; +asn_struct_print_f RT_Period_IE_print; +asn_constr_check_f RT_Period_IE_constraint; +ber_type_decoder_f RT_Period_IE_decode_ber; +der_type_encoder_f RT_Period_IE_encode_der; +xer_type_decoder_f RT_Period_IE_decode_xer; +xer_type_encoder_f RT_Period_IE_encode_xer; +oer_type_decoder_f RT_Period_IE_decode_oer; +oer_type_encoder_f RT_Period_IE_encode_oer; +per_type_decoder_f RT_Period_IE_decode_uper; +per_type_encoder_f RT_Period_IE_encode_uper; +per_type_decoder_f RT_Period_IE_decode_aper; +per_type_encoder_f RT_Period_IE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RT_Period_IE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c new file mode 100644 index 0000000..3f96a6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h new file mode 100644 index 0000000..e7f6ec8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c new file mode 100644 index 0000000..c8afcc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h new file mode 100644 index 0000000..08a576e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SNSSAI.h" + +static int +memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = { + { 0, 0 }, + 1 /* (SIZE(1..1)) */}; +static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SNSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2, memb_sST_constraint_1 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct SNSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3, memb_sD_constraint_1 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_SNSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SNSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1 = { + sizeof(struct SNSSAI), + offsetof(struct SNSSAI, _asn_ctx), + asn_MAP_SNSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SNSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNSSAI = { + "SNSSAI", + "SNSSAI", + &asn_OP_SEQUENCE, + asn_DEF_SNSSAI_tags_1, + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + asn_DEF_SNSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNSSAI_1, + 2, /* Elements count */ + &asn_SPC_SNSSAI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SNSSAI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SNSSAI_H_ +#define _SNSSAI_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNSSAI */ +typedef struct SNSSAI { + OCTET_STRING_t sST; + OCTET_STRING_t *sD; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_SNSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNSSAI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ServedPlmnPerCellListItem.h" + +asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-EPC" + }, +}; +static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = { + sizeof(struct ServedPlmnPerCellListItem), + offsetof(struct ServedPlmnPerCellListItem, _asn_ctx), + asn_MAP_ServedPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ServedPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = { + "ServedPlmnPerCellListItem", + "ServedPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_ServedPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_ServedPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_ServedPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ServedPlmnPerCellListItem.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ServedPlmnPerCellListItem_H_ +#define _ServedPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_DU_PM_Container; +struct EPC_DU_PM_Container; + +/* ServedPlmnPerCellListItem */ +typedef struct ServedPlmnPerCellListItem { + PLMN_Identity_t pLMN_Identity; + struct FGC_DU_PM_Container *du_PM_5GC; /* OPTIONAL */ + struct EPC_DU_PM_Container *du_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-DU-PM-Container.h" +#include "EPC-DU-PM-Container.h" + +#endif /* _ServedPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SlicePerPlmnPerCellListItem.h" + +static int +memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = { + sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList), + offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = { + "fQIPERSlicesPerPlmnPerCellList", + "fQIPERSlicesPerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnPerCellList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnPerCellList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = { + sizeof(struct SlicePerPlmnPerCellListItem), + offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx), + asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem = { + "SlicePerPlmnPerCellListItem", + "SlicePerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SlicePerPlmnPerCellListItem_1, + 2, /* Elements count */ + &asn_SPC_SlicePerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SlicePerPlmnPerCellListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SlicePerPlmnPerCellListItem_H_ +#define _SlicePerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnPerCellListItem; + +/* SlicePerPlmnPerCellListItem */ +typedef struct SlicePerPlmnPerCellListItem { + SNSSAI_t sliceID; + struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SlicePerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +#endif /* _SlicePerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SliceToReportListItem.h" + +static int +memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = { + sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList), + offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = { + "fQIPERSlicesPerPlmnList", + "fQIPERSlicesPerPlmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3, memb_fQIPERSlicesPerPlmnList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = { + sizeof(struct SliceToReportListItem), + offsetof(struct SliceToReportListItem, _asn_ctx), + asn_MAP_SliceToReportListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem = { + "SliceToReportListItem", + "SliceToReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_SliceToReportListItem_tags_1, + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + asn_DEF_SliceToReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SliceToReportListItem_1, + 2, /* Elements count */ + &asn_SPC_SliceToReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SliceToReportListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SliceToReportListItem_H_ +#define _SliceToReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnListItem; + +/* SliceToReportListItem */ +typedef struct SliceToReportListItem { + SNSSAI_t sliceID; + struct SliceToReportListItem__fQIPERSlicesPerPlmnList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SliceToReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnListItem.h" + +#endif /* _SliceToReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..55bad07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..fd04d94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c new file mode 100644 index 0000000..c4eec34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h new file mode 100644 index 0000000..6fad8ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TimeToWait.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Timestamp.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Timestamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Timestamp = { + "Timestamp", + "Timestamp", + &asn_OP_OCTET_STRING, + asn_DEF_Timestamp_tags_1, + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + asn_DEF_Timestamp_tags_1, /* Same as above */ + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Timestamp.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Timestamp_H_ +#define _Timestamp_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timestamp */ +typedef OCTET_STRING_t Timestamp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Timestamp; +asn_struct_free_f Timestamp_free; +asn_struct_print_f Timestamp_print; +asn_constr_check_f Timestamp_constraint; +ber_type_decoder_f Timestamp_decode_ber; +der_type_encoder_f Timestamp_encode_der; +xer_type_decoder_f Timestamp_decode_xer; +xer_type_encoder_f Timestamp_encode_xer; +oer_type_decoder_f Timestamp_decode_oer; +oer_type_encoder_f Timestamp_encode_oer; +per_type_decoder_f Timestamp_decode_uper; +per_type_encoder_f Timestamp_encode_uper; +per_type_decoder_f Timestamp_decode_aper; +per_type_encoder_f Timestamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Timestamp_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Trigger-ConditionIE-Item.h" + +asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RT_Period_IE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "report-Period-IE" + }, +}; +static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = { + sizeof(struct Trigger_ConditionIE_Item), + offsetof(struct Trigger_ConditionIE_Item, _asn_ctx), + asn_MAP_Trigger_ConditionIE_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item = { + "Trigger-ConditionIE-Item", + "Trigger-ConditionIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_Trigger_ConditionIE_Item_tags_1, + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + asn_DEF_Trigger_ConditionIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Trigger_ConditionIE_Item_1, + 1, /* Elements count */ + &asn_SPC_Trigger_ConditionIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/Trigger-ConditionIE-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Trigger_ConditionIE_Item_H_ +#define _Trigger_ConditionIE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RT-Period-IE.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trigger-ConditionIE-Item */ +typedef struct Trigger_ConditionIE_Item { + RT_Period_IE_t report_Period_IE; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Trigger_ConditionIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Trigger_ConditionIE_Item_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..45dcd5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..734cefa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TriggeringMessage.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c new file mode 100644 index 0000000..76beba5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h new file mode 100644 index 0000000..9451b1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/TypeOfError.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "UE-Report-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_Report_Type_value2enum_1[] = { + { 0, 17, "oDU-Report-Per-UE" }, + { 1, 20, "oCU-CP-Report-Per-UE" }, + { 2, 20, "oCU-UP-Report-Per-UE" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_Report_Type_enum2value_1[] = { + 1, /* oCU-CP-Report-Per-UE(1) */ + 2, /* oCU-UP-Report-Per-UE(2) */ + 0 /* oDU-Report-Per-UE(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1 = { + asn_MAP_UE_Report_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_Report_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_Report_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_Report_Type = { + "UE-Report-Type", + "UE-Report-Type", + &asn_OP_NativeEnumerated, + asn_DEF_UE_Report_Type_tags_1, + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + asn_DEF_UE_Report_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_UE_Report_Type_constr_1, &asn_PER_type_UE_Report_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_Report_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UE-Report-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _UE_Report_Type_H_ +#define _UE_Report_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_Report_Type { + UE_Report_Type_oDU_Report_Per_UE = 0, + UE_Report_Type_oCU_CP_Report_Per_UE = 1, + UE_Report_Type_oCU_UP_Report_Per_UE = 2 + /* + * Enumeration is extensible + */ +} e_UE_Report_Type; + +/* UE-Report-Type */ +typedef long UE_Report_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_Report_Type; +extern const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1; +asn_struct_free_f UE_Report_Type_free; +asn_struct_print_f UE_Report_Type_print; +asn_constr_check_f UE_Report_Type_constraint; +ber_type_decoder_f UE_Report_Type_decode_ber; +der_type_encoder_f UE_Report_Type_encode_der; +xer_type_decoder_f UE_Report_Type_decode_xer; +xer_type_encoder_f UE_Report_Type_encode_xer; +oer_type_decoder_f UE_Report_Type_decode_oer; +oer_type_encoder_f UE_Report_Type_encode_oer; +per_type_decoder_f UE_Report_Type_decode_uper; +per_type_encoder_f UE_Report_Type_encode_uper; +per_type_decoder_f UE_Report_Type_decode_aper; +per_type_encoder_f UE_Report_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_Report_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..327134e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,349 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..7762209 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h new file mode 100644 index 0000000..af5a0fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_constant.h @@ -0,0 +1,30 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#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) +#define maxofRANparamters (65536) +#define maxUeReport (32) +#define maxCellingNB (16384) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk new file mode 100644 index 0000000..0109476 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + converter-example.c\ + pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c new file mode 100644 index 0000000..0d559a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/pdu_collection.c @@ -0,0 +1,25 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_EventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_ActionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_RANfunction_Description; +extern struct asn_TYPE_descriptor_s asn_DEF_RANcallProcess_ID_string; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2SM-KPM-IEs in /home/rshacham/e2sm-kpm-v01.02.asn */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition, + &asn_DEF_E2SM_KPM_ActionDefinition, + &asn_DEF_E2SM_KPM_IndicationHeader, + &asn_DEF_E2SM_KPM_IndicationMessage, + &asn_DEF_E2SM_KPM_RANfunction_Description, + &asn_DEF_RANcallProcess_ID_string, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt new file mode 100644 index 0000000..66fbf41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/CMakeLists.txt @@ -0,0 +1,87 @@ +#================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"), +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== +# + + +project( ricxfcpp ) +cmake_minimum_required( VERSION 3.14 ) + +set( major_version "1" ) # until CI supports auto tagging; must hard set +set( minor_version "0" ) +set( patch_level "0" ) + +set( install_root "${CMAKE_INSTALL_PREFIX}" ) +set( install_inc "/usr/local/include" ) + +# Must use GNUInstallDirs to install libraries into correct +# locations on all platforms. +include( GNUInstallDirs ) + +# externals may install using LIBDIR as established by the gnu include; it varies from system +# to system, and we don't trust that it is always set, so we default to lib if it is missing. +# +if( NOT CMAKE_INSTALL_LIBDIR ) + set( CMAKE_INSTALL_LIBDIR "lib" ) +endif() + +set( install_lib "${CMAKE_INSTALL_LIBDIR}" ) + +if( DEBUG ) # if set, we'll set debugging on in the compile + set( debugging ${DEBUG} ) + message( "+++ debugging is being set to ${DEBUG}" ) +else() + set( debugging 0 ) + message( "+++ debugging is set to off" ) +endif() +unset( DEBUG CACHE ) # we don't want this to persist + + +# ---------------- extract some things from git ------------------------------ + +# commit id for the version string +execute_process( + COMMAND bash -c "git rev-parse --short HEAD|awk '{printf\"%s\", $0}'" + OUTPUT_VARIABLE git_id +) + +# define constants used in the version string, debugging, etc. +add_definitions( + -DGIT_ID=${git_id} + -DMAJOR_VER=${major_version} + -DMINOR_VER=${minor_version} + -DPATCH_VER=${patch_level} + -DDEBUG=${debugging} +) + +# Compiler flags +# +set( CMAKE_POSITION_INDEPENDENT_CODE ON ) +if( GPROF ) # if set, we'll set profiling flag on compiles + message( "+++ profiling is on" ) + set( CMAKE_C_FLAGS "-pg " ) + set( CMAKE_CPP_FLAGS "-pg " ) +else() + set( CMAKE_C_FLAGS "-g " ) + set( CMAKE_CPP_FLAGS "-g " ) + message( "+++ profiling is off" ) +endif() +unset( GPROF CACHE ) # ensure this does not persist + +# each binary is built from a subset +add_subdirectory( src/ASN1c ) +add_subdirectory( src/kpm ) + + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile new file mode 100644 index 0000000..b8c119c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/Dockerfile @@ -0,0 +1,104 @@ +# vim: ts=4 sw=4 noet: +#================================================================================== +# Copyright (c) 2018-2019 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== + + +# -------------------------------------------------------------------------------------- +# Mnemonic: Dockerfile +# Abstract: This dockerfile is used to create an image that can be used to +# run the traffic steering xAPP in a container. +# +# Building should be as simple as: +# +# docker build -f Dockerfile -t ric-app-ts:[version] +# +# Date: 27 April 2020 +# Author: E. Scott Daniels +# -------------------------------------------------------------------------------------- + +# the builder has: git, wget, cmake, gcc/g++, make, python2/3. v7 dropped nng support +# +FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:9-u18.04 as buildenv + +# spaces to save things in the build image to copy to final image +RUN mkdir -p /playpen/assets /playpen/src /playpen/bin +ARG SRC=. + +WORKDIR /playpen + +# versions we snarf from package cloud +ARG E2SIM_VER=1.0.0 + +# package cloud urls for wget +#ARG PC_REL_URL=https://packagecloud.io/o-ran-sc/release/packages/debian/stretch +#ARG PC_STG_URL=https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch + + +# snarf up E2SIM dependencies, then pull E2SIM package and install +# Dependencies: sctp + +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + + +#RUN wget -nv --content-disposition ${PC_STG_URL}/sdl_${SDL_VER}-1_amd64.deb/download.deb && \ +# wget -nv --content-disposition ${PC_STG_URL}/sdl-dev_${SDL_VER}-1_amd64.deb/download.deb &&\ +# dpkg -i sdl-dev_${SDL_VER}-1_amd64.deb sdl_${SDL_VER}-1_amd64.deb + +# +# build and install the application(s) +# + + +COPY e2sim_1.0.0_amd64.deb /playpen +COPY e2sim-dev_1.0.0_amd64.deb /playpen + +RUN dpkg -i e2sim_1.0.0_amd64.deb e2sim-dev_1.0.0_amd64.deb + + +RUN mkdir /usr/local/include/nlohmann +RUN git clone https://github.com/azadkuh/nlohmann_json_release.git +RUN cp nlohmann_json_release/json.hpp /usr/local/include/nlohmann + +COPY . /playpen/src/ +RUN cd /playpen/src && \ + rm -fr .build &&\ + mkdir .build && \ + cd .build && \ + cmake .. && \ + make install + + +CMD kpm_sim 192.168.122.66 32222 diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt new file mode 100644 index 0000000..2c0890f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/cellMeasReport.txt @@ -0,0 +1,40 @@ +{ + "cellMeasReport": { + "du-id": 1000, + "cellMeasReportList": [ + + { + "nrCellIdentity": 0, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 10, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + }, + + { + "nrCellIdentity": 1, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 0, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb new file mode 100644 index 0000000000000000000000000000000000000000..9d7464bc5bbf0decd6c8fe3de0aacb7454b28080 GIT binary patch literal 386448 zcma&MV{m3)@TeQxwrzW2TN6!e+qP{^oJ^95ZQHhO^G)*J`JMl%Tet3)b5`x@-LEt9K}Gn0k)|Hc0t|9SbZ8Nw0Az<^MpHW`3`U+er*(j9M} zVebuoh3UM(?)73}7nv{|89AjOTvXU6X#T^ZBY z)AQ$&H7e?b*$bSMX%hIA+F+>k__FgGfQRcMq3MjUlZLnRtBB%7Zkn`)HPL$WmYO3B z)!J(e8Aqbcvfqsw#P)P{5WniQzWtbUCi@%vuIAh%hu{oNTNX`z*=1?-9mQzdJTEtZG(lK#y{2GHZ6T9R; zQ*A1PdbpxhBg5xxX{L+cWdgi>9$h^gIGj@dNv`(b^~!Tj>9LQ(11v?9DmNiicKP_N z*kdn3^`*XKxWt@qKF6QCGkUN~QYPdv;x9nOnHDy?mfL9nt zD~Y%|xg{trlBExbL0KC+>L{-O2ulB`@;(?kznpwwm@{d!7guxiK+bs4 zWdaccTMviJRw)ZJlMMz5k+hae0Q+VF(jK$ktjhq*FyEwg5f*ZRkn^d4x{4tjUDnOllFsXL1qK4qY3g?6s)-lDdaKj&l{$fJvC|N^s>QrRU(RZ?N;%TrUfh8z(DK z^(0fIF%#2DY62UCwxhqYuyiE{(|bPync8BMdNaIl2aLWBw~{N8A46{KO&NdVCofRk zV19bqmwTPbQ@!bNuCk!CkY!g3(^{B?K3%f5}DWVnBVNoI1W+-E(^GR53%Uy-8_ zQuD?o?Y^jCI@T{oq9{6|o`8CnmdK)(%kjf7tv2JPIPOT~ND&_!0*i!OQb+g+^1YuL ziNw!%MX!z6)=32?9m-51A#8EDBs@{}s$FVGB^n&H>%Hz6EP=KkM5ivu9#N2;L$5(f zL-o#$Bl9p~_=CO&#TxbTPYY}htV+0z`{R!!h&_O>1)9mF@2}lR$hTIHB0nuCCATZIn$j!kZu%p zWidE8c0GJ2FfL%esGm)KMZK1S`D9Pt-OF%$A_B!Gw0Ic7l^S)FwtrW~H$*NyQV9ci zJ{)`UNY8#{KS+X&7>T%3_8EKYfqU{?1~u6qzc&B|l)RmTiCm%7hIWE_>Os@MD+is7 z*82-X%!IV7)2kMJ&{uP|%5MZ1nwDH-j*1p!H#NwlL>+y;VMh`;a&~LVs0vn+?ZzoB zFtXv@cl$1m4ysex8onG7m=%dkTT+{4>rNT)!1Sy+vS>X^&~F}z!;T{ykBM$>Sz?;$ zWl9GECFzIOpOyB}jL0H4NuUKEdVK^nG11`i>}7|yX!V;LxpP%XGAXaML{HxUX1yA`rbaW`{A=U_An4^E_$ler;khqgdfk&{`A4ypX4*0 zHneT{Ub%NcNhYd0+TsXLB0*^Pq1EZZ$lg~F@ECEv7}U`Aasvz%PSb*oa5-E!MPb6)jhdn2+8&cS$*Ff`C-0JSljg=)(Of7aEQJxd^bzAD z>$)Cbdv1+6J3Eq>iyPyw3IujYz-W~qKESrx`(H6_^eVwCzscHM^YO(j70hN?X6kTB z`V3_ukKn(^Nz|#n%uq+9szI%VPolb!&yd=<=42G-MiNX{xok7vfdpMhFa{2mr^xhohqP6ET z;lXQTi!7ADF+K--1Xn?1IUNa zzAN^&n1!V&>Ghl-2GZO$ElY=BCFR5SX;b=*?%JF|ymCKD2N_VP_c(%bVC#2PUEK{O z`1%mIoY&6Jx;W)M-IJipJs=O8Z@%7UDBEYT(A@b*!X zrw`zq$9K;UZ@j3#?8~IiXH#H8&)Xmoq5xR4=vdmOpIjmX-udKeu zwI&c6rc8zj;$0$s#f13Va|U18mifGm5+^zpMAxn(|v(J9HBM&i%jXB^zromXra;o!IqsQsO!n0BPZyyIS$pf5V0V<7u($)NTs<(?>&Y8McbdgX@MOLiagU0xyG)n$% zA?yF1l>NouT};(RP*)p25*WdvIln@M!#<@Q_#Bk4Be>9oAsYqjFKPj=2v%`cNg67y z>q@x%zCC~F=YZiDWwe^`!m3GAFZRT!hz|i08W^;EEC1f2U{$dyg13wWa_%qt%#Vl) z83C;q2GcU{bd3#wJIq0I(_`UX%Z!85BENEUSI*%<3I7<|l;P09l^ju3P#!{Yxtq%< zLx1xi(cn(d(8FCb2t+4m9hO33I8i-z3}!;Z%e2r2Ce8iEoiJ=? z)=|^BoClp9tSSzfD*%DphyInYrji_QNxoc(lpY-W=8U{7g+wUA?Hz-mE5~g{)ClYQwI|c zsyPL=Qf zi4vD%Xc#A5+`*wc_aP!tLS%>8@aEdq^Us=d#i@sBRn z4XsNpgdReQxSRc32`h^!5bz+E0gjjmhBT5mzzgig(i&G_|4aP2Ykg8xMeRO6Y0IJw zBvctc*RQ&KP<$LhS5rs20Ox@6RQd5fL-=vftlxIdEF!}#WcF`N!w;xG`^hvoz#EMB z0+|$rgES(qbSqbiTkYJbivYfuXf$nB(()>6FAHs$P@9~8g>bH-xYqSK6+K?>!rz?s zXnooq!G;}%DKI}y?FvFp1HRs`&YHkvH^rh5zT(+mKI`z&nq0gMDTwU?Dt4s zZsz1UjlDJES*?Ws34S^FO9g`=Z}Xfa>CwQQa1klG)U?-9qX0pn?dr%tM+GBxWYL{g zcgqJ))|ctKe-tM|I9^XosvM9-e|f4G?@&x^t9(~ayg5`X)#jBsP$g^| zDn98!#HQorgk?-^tZ_y}H9wf*fRFKGW!?Usp$jRxk5{B9lFXLf^H+AP`O79b42I|d zDP$3(n{d>JM6bxx?WiefEE7r32?2k1P+h+nrhiRgfC^W%2*({N6k~dQ98h*^XWibD z#WF3TL^FuRY3U1V+Y0iqiY(!4$Jz(J$&a;!g@J!ab}&uCevI)>OWVoSb{M(txfyo1 zT_^Jh1q^Bh!;ECWSdG0XNra8;2aUJ4yVJwsc;|Usn(c>d5LvG0-Y%y2%hqxh&8CXw zZqK=!$0BCOFHNqJzl=1Q0+#4K1*h5|uTk7w{=`JDz8hXp$H_OXISjmF&xAfytR+h< zC<07f%Lnw5~0t%SZZ_ z()g-g(Tw;A^Dac%nG`RrMbcy!~->)d)&DM92y^VXhv8}h7oin0R;WsB1Z&2ub?aKKTJ)7sIh!AY33Irbezt|1YTdM_~R>tcRV4m7ACC z|Icc!x_x{$dEA9|0`fHb>E_SKP(*u1p2kt4-)}f8?yyR8P%(w)j1jQf{2YQ&f_r z4Q-!v105Ynov3MKqY2UT>=_RB_S_w3p!-1UfX+!%2H%T1V#V`30#}}Q%y19AM-jVx zSFU*e#oITYh`mwYAJnytJH|weDMz@_H^%m$}zFq+cKo?mB8nH)F(WeGKeC?h$ZT@GN2>`xby?%A3 z9R+P17Ho691azKzI09RhYg;!2FMuH$qd@A~`s6M60rXp72J_2rFXpZkPj{gN`&(59 zpSD9zmGUc61oyLUWFfBr#E}4TwcAmp!|{OFVo$s>!2A={x7RK|QNoX0y89C&v>BnW zV!u6i-1s7jJgLPLqdZ*#E)JBS7>Pl=w1N;`UjSR*gHEJHQUvfr~kt33$*6f zBD}a zR`fxgO0o35gdFtBrC`{1>&lD|_QE*W>Jj}8c{;W7JdXgrAA()c3?WPhQ$pXTW6x>*qwDb|_CAB3bP$T4ScYMV`FAf5E z6DCFJWRH|w5h8MmF@6Qb#L+Y7H{&VLj&G*VhpY8T>=h8WYwVJN8>2ISxOpBiIy)lr zWiG@NKjeezeafRi42BYk5JSA;`ybH5&9~^KAsbX9Aw&!{tGzL3%%a(FlGj$R3xm&M zCO*U?EKRKEubvB1QLXohFZx$_P>(ULO_zSr#YwNhh^4MQE+u#U4a1p~74ZB6kyJqe zW&5XHy2sHbd!n+(Iv71!g}m$va&B~%2KD_F?xNYaJ@AORBc3GbmIi*{YJ#GGbn_7i zpBT6GoZ)Hr26$_K?9G34&FTt0`P$TCbyHIP4!LX-Rja-QN(Y_!xA|r7Z@c}w+T0{% z=Q-`U+N^a7VDL1W9XH2!E0mZLOXfW=M;|G_@>nGh_$w|w7Kpsb0<66UeuTgRTZyo~ zckzx6c;3tstys?+34sQ~DRZ6hqwL5S*)TwQl7JeRD1W%Q$%giL)Oe61 zqDCalxte!h1&YjT7{SG4?67|T%rP=7+c^>aG;Ku1{#qrC5^$I&Ik6-LNswRCRP+#+ zNZ}s)cgR_>g@)IuA;m`)MD=_odo;AMageh3vuiByDqeWhoOEiUaLxI}MnpGEVtrrBAcI^Rj8_2wFdC!fQ=*`J==I1o=>v4}tr7zIc+ zRDIQ~nKp0}qB@#JOq9qn?{{Sa5vF7{0^#or9`_PQ0}!=c?j9(iKlP1+38i1L95J*fgh3pF%AK#2?R~3GX zeXbz(K?hRK8i<0E&BK}d@;M!$D<5OLI{8@UmwU|g=Yl?&xxzAaG2 zKws_4?uowIxZx~9%`v7?gSYT^hG7J}eOmWjZ;O1+uk*YCz*}5!4+v@Fb}Satm$1Qv z+5Qs9#`R3&m9NfI&!EDHLr`i|OSIS@>M$i@Nh75sw5LJ11}};v^&glZ>~z&s4G9e9 zY%!-5R5!*%<@YQ^HbsKs_zr`;(`HNo^F5WT?`vK@aV}4ESO_wfOxL& zhBQ8YGmm*+1#|Mo{MgD+>w;hpdGE&%tIYK!LS!BUYKO{n(EE3jF%AYOXs6r}TQo7g zIiN4W%oc#?saIPCm*b~^$UNI(LBY(1AHK0OL4h?gpz84l8~94l_E7J(dpB$lkp2}4 zgGGwc0-46T+!pCLKE@O{Ft+Sf1JhZJCAsv8oVCuAXuOHg()eOPg8(5bK-?q8+xqp( z(sQ3vqTwmcuwCLh*ztxbDvz`cSx6fpr(nNqW0d1hdyluNBWX{Ymy)5|wcN$_kc-0! zi(B24V8d@|87Wf$hv$)qak&-L38_48BaZC6^* zw!&`frQF*<7lMZ^KikOIkc)AGIE!nfi(m8m(9^r~*okVUU$M>7d_`HEzw;Nas=jOj z?%vyub}sk0+}X-1$RfR-&K<> zh5BvNjJNPTYc%Pw`fpb0YzRMdPC7j@Qj3-*JeF6 zLSsG|bYzLAQkgJe(Isz)154AE2WF1sljei}2IJ(W(@PDUWUkU~Xj3F1eT4)PfQ|4U zsWmRMK}i+=9oC06?dSQW64G#FTI{SRYj{#=lha*8b zJ0+kYE<8LIB>toY*98H9XcVTWB#{fkXr@9y%W>ux&dzHFZmE95sq*dr@${+u@3*6fn3s# zu2^s3QA|q-Po~p0gxtdmWuob0ZS0`-+=cjK=MFF$>eY?-BWG)Dk_@%ZJ)W>u%n{nI zY8u6TJ4h!u2l{X|&rQ__WMidfb zi}*gTZ4hB6`P`t2XGp2=jGC1h^TyB91rm(bFhn0t>LCp{Wo_KyOPNDC5F|mi(=Kxi za>X~nG&+??1S%X`i`&p?lB=t=<2hwdEW<3Q*O-TvHE<5Hr`6)-RQOJUv5RcmVx;k| z0~cw8;mAaU&^elSFH84J5GZIGfYlmm|Ab=s4scW2Gx$Jqw;5p;wI+j%4Ls0efqsxg1#A0er9b(fI!C)dM|4n)sC?2St9Kj_n3H*p;T~ zJjYK7afXc1{}YusW;TGx3|{p_>;}nVYdj9bhG*42qaYf3r+Ny~a>%p*=I{(o`yjC^ zFA3PX62NSM`CMG9-}8qky&ia5T(ab^T>mAMdJPmQ?g3hm7q$S~bwJzQn}D&d%P$6V z%cl<2FS#Qbtmh7g@27@>qL4W8A-vtO=$L)uf%NSDaXK_%aE@T1aPjYScKm5(qxe#9 z8hLRWwp*8%4ePf~VGudnQr9XA#)o7z1I8wj-@BjAuiIkhk@L{bG%_9c zvrVeXPAdi=s7yZ8PYhV{Q+e`Th}=AfkbSVCCWs5w*zDinJ!9{mMZ5e${Qe2mT?@g9 zRB1w$=R-f?n6T~ZMP*8?@~g4mAp`FTnlosVy1!cV#ka+kiky8zV@NMS)R$35&_%G! z0STDz!{?*T`9R4RpmGnecD`m6$c?sQ0!&)F%3GL+yEyI-2BopyUdsKsy&k*j&ac0gcXiyTFPtco5hf$O9;A|VOiz1`M zWDO-(b3|s!O1ylK)Rp;U?FdVsvD7wU)~8L-j=ZKWYr4D~Y;hzz->PpZo10{F(fBO7 z2%T`Ly7!l|iWFj`41#Kpqt7EA%=SeHc5(QMu^r7d?o=o{E?fZU;A#!%&8iaw1c>JE z`t-HrV>`lvj;YvWzBPXNTK)ks>)hD(sfW|?p+fl-Tl1ft;JD+T9)#~5-sRrCq(b)H z)Vt`dd8WPI9Pm@omzBoams?|!aqo43*NC7iocmsUu9{vCxB>?3tpb4f|D_PD zrV*&SWYP?5f-?uq!d$)V2Bf~^Kkv$31-v9H$pB{IR5rdFLnqgPy6!dr185V+I^a0N zZw+tQy18$Fg4cI|=iHxbAeE>cFe~s9RG8@16BVQ)1QARbjvvZWP!&PA(@}yX(D4@- znUgTp04K_y5CVo5;MKJLt?Mm>&4ODGa8baLc;cmZpZMRg1%3bg9Z1?9 zzGx<1BT>ve`gh~#6#1{iMV5ZO>=L{1$H@f|2{nBA>YWi7mG>$^{?_ngQzQ%%LLbMB zJ{TH#hu`ca1L5Aj+WCg)_B1xkSi1jCTwvszIS!pri z&irWLBAPdmo zGU%kT%X*XHxTGaf2d^|Mp3C$=(`Zu;?|ETm3;4?im%XR!%m1p1jtc;^mw+i4`{qXG ze*iedDRzJNCf#9N1NjNTJYV&U0zJs!JT>v4k7(_q7~Owo^rk4h@Hfu;k7iwaU=4oF z*mgLq8fUE9DeqQ~l=RSBsqdz7SKVeBF?yg2r#sRve%t_9Y7$7au7q@Jm&Ni1)OQ!W zQg?x`_|IRxIj~AzKm!a%ROCNS2@XJmzacXqau_dPz!CCIU`9t>Q8i|J+8Qt;T4mrx zmUi+6NKdAVzsNV%Zwmx%$@kp?c&d0I{_A=xU(dfmy?P4dLjS$_#_nsY$$2^H` z32*`!Tz^miz z(k5HG7Rnx}HUuwl{OT?K3j|bueC|pPEH(kliQPto03U%2LPSAWjY<<;WI0Nij7E1( zqAAVPy47XB6W6W<40x)Ns6&ykexvYZdIS|ux4;wFh3oBEHeP^9<;Y<3=v=q=Em%)M z{??FVy3-wqZ7kH>yhDWU{MwBL25jE``3C+QGt!>fF9x^3+93gdC6IdAAwuErlQZ-J ziq2vG%bIvl=Z9j1gEfMeF!hcB`WY~?pcNC441kjtLS%DgOB(5&^D`j|{9aEKX&L>c z1WB3xK$H=D)>uG(RR$KF;ui)wPVy=mgsyOYm`0GxMyM*88FqSxVNwF0iemt|bfGJ+RA4kF3 zNKxUCr3@9b9BDbyZQdg#+Li)s-`_~#N2`88Kmr1Vwp*)yqL4zU_V9o2I09UL(TB*o zw51x%`LwZW1PztcS*W?_;xFVX0!W${V9G2I&|?4qI#38W0f;N5KoRb%MnF06`D!%I zUdnM>C8%how(c5L5y!y0THieU=dMWkKhOE>!#Z-CgQ^bmYj`M6rn8qQ2|=ENb!P)F z`ye#|Lff5scwiVCz?mRhAiw`L@ZSVkx)#cT(k1~>Y9PWuQQWP@hpxN-1p}#N=fV*v zM|}{qIT``ops!0wF}8}3E(WPxm<|br8zQ?Fm~w|lBv8F)3C!UB1|IDJSJkh2Z(D5u zy-{~V*8xfQ2Cc`v%WHo3dvOF}dd{nm7+cE02&ndPAR+?Uff*%_hoBRe&AC$Kq?GYt z2^VR<@;?8fxTu2>EYC?oaq7s4#o<{9)ctc`-ip}*0(T08egFhme*cSz-G33uzqZdN z4HW*@X_jupRRQ4ah(nUutaT2)hc4fImrLhu*dA^4isfH97=ou8$24^zXC`A z0i<8M70*D)0kvhIbj|aJP{LZlH!}~8#xztSscjQz$$%o4uz(b2LU_V3(ww4R7$M1D zS({_|zeH<-u@O*wIQt>s&(LDfVPkO&QqWg*x?=n}if&3ODfKXo|3rjH@OWnjgxhvZ zf9%y>xIbwLp03riyHF;Gz6!X>uJa`dd+Dv%0?u2noc;qbzbn6Hb9K}q`lRf9ksbYT z0^>}{;S8Ud`atz?p+gg(p^s|h>4m{!wY3=%F^d@R#?Y9;pn2+RP(=tWSvG-J3kMTk zYuCNImQ72qLSNor0p$C~F+W)PsPC`*iMDr2cU~MvZHk!I2RGSn2bFdVLhgyjf`M;V z0`JI3P@i45gbAZWifNvXn)9D(JR8vV8T&M%**qQkhRt{+FoAoZmSWyQ=$4<_Jo)0Z znNOxpUmm92-5f7Fx_RDXePoj;H$vpr(b;zHx10{O?GEjN0G0YhA-N<+8CKP%sfMz*$_iTfyIF7~?%tBc8XX4obUcW}T0D;~ytA1-g81tP| zn(jw``H;>0!gXQ4U9y-rS{!E4RH~?mr1N>^y|D?n*KkCte%r*r`G}0t)|M`-L?jk+ z-wBbk;J3gO-h%0!POiV?t(}i3?{f#v*=sJ~Lp|-wNlA=T3DCH#I8kCdjDZpF`3&R6sY+Fys^R#MC3L+|H0|V=s~$Ll(oD< z&?nv};qjs<=A2(;0uE-Gq>Q+|T|w)-Ax?c(J^~<2{4Bmn18qG@Do&C8ir6lu8Tk6H zhY}U9ywVR@I(UnJ7xWxvUybM3^2v=0{-u9=XT5gxHbB@Mc6uZ+s#EIZ%N^8uJVzXM zY7=Mw_e7Te3(a0xjv9; zTc`xRZfeGAI<&|<^#o4}iitee=p#@0AnJr2pX5vZF(C$TV-u94Z{TE-J@vODYCoos zD^u%FdzjXgsO7Ge_Z%1ZoyaeHgI~dr`Curc^`mjDB{hqlpJ>34((-1pz%>k!m3Hib zm>iOpF?aHc-O)=}M|S$3&sLviffU}Xl2}+l@a82o9~obdyHMMclaG_2L}WWkJNh=O zk9QXf2vDPB3Pq?~<>SU&@u>w6?Yk3!F@E>aR9E|52Sy-pptHg4s?YAShfXV9EvIy^eOqxBg+vZLqbCfCNa- z97TPuA913k#7d#3_>&Qpj!f);0p=_E{?tf7DlB(ct$}Q+-&}ZmEOYucO0;G6AKiP) znq_No!dy!I)H#Ijs+4Y~SL{$Tu3*Vm5yS0$J`g8dA!4`;P~-T5?Mw87Nug-d`$jAX z{_33(X{5~uIy7H=^~QxhUjg-U{kQl_ZS?E*UJbdyF-fskvEAzFchPc3VSY25?89aw zMFIS&T~dYcvL^KR@7He+pbiYE4 zRy;_HbChzD=ZUPOoaV$cLWM{`9x=}*k{8dnQI7A}vY1xL(6X*XM8(tlHFY68yUFlm zOZGD^bPm#dt9A>gj+dgO57pv!*GguVC{|aH*mB)2H-+c?7)K@t^Fj4L7Sdk+^FIbJ zogixst8KxzK5WDJ#$XSMZY{Km2#FW!oaT_{w^gG;3r`YLGj5HYRTkjSB>EZuRXv+J z@jA1*){v!77NNxie_T~55dB#UlrLCURkrG@2wr_!s|W@@dG^C6QoeyAHu*XJrU{KzC%AQR!@lnHx_1!XQ|Kn2F3MmNaN4ku))W5^Yt z_oDdc@)&DuIiwpgg>p20hNyco_!zI>Q>zlGoH+&!DG85sdpCp;tJB`1nLI{`e2(ud z>U`R%?^m8U7vH(OcBsT0+;|q3F?s>=kVFM3UhyA4ZxI}5>f(AGo4UxQ`#)=s0bRiI zgxi4X-GEJbL-=3G04YFFTR`H0)8;p-Wzo>!uV1FL*zS2J1A;)pR02Km=EhPzsg#u09Due`_g1e84HdRZNDq10}fh!VOy`Ff~z*zXVU z_c+7#jJ5a>%UjR41?jALM&lC}Go9mJ2EX)_h!nt6Wmvjr(@}%4-u&W~i{p*E%!Zfo z^(8uyR4|n_@^1&M(&HJv$=NheID(`QqtTs^ZDeOSWUbz`YnhTC3rOdGBnQv}aj7Mk zPj8Nhim4Xt+~_gs*B&*_;JJDgJ{3CmsJ=(89o3*l{G8N~Mi8CVkgjArF5n6iSUyu-P}?Lz9UE!#$si1^Eno3KjWHN7xq&_Ch0aDNc^ ze%DKxwbufUHL6M7y)&8c)#_6Vf%RgYlNcV9?w$r^cQ#=GhR=6G^|$cQCKQivM6#st z&=vxZZ$>hg6y?$=oMM%UMl2`w7g0l$^*$<&@^`N~&s%bySN~#u&ai7F;+P`=lw%1b z?dZC|C&qA0=*PBdTGZr~3S}qZcHbu)|DT|98KVVp!j=JQ*&e zB+lS36UXf}NyZm6;*5T-YLAd+&S$?-8J;{sa(0}cd~7$yQI~cbp0do~tekN2y`a;A zD_x2Y>eJkr?z;f2ew>+WPYdGRUTSSq#=v(KF-w&O%)ipITopn_*O~7> z;hX#W0yhFmSu}Z$xh9BpwBjNLlBNIbBBivM(2;1F-aW9G!WWUjU=PhWiIIt94|^W2 z6q|_;9r`f1rLK;}ur{oZ>cOc!6FiZKheh9ol;r?>Kwj-9z}CW2w7qMePA4s#Q{a15 zj2bRZhz={e1CrA3W0}tuz?SEVH@Boiv1L3PaZ*CC!=m>~!A4n5_NwTAZ-y0#wu%Z* zP-O0g(<*diHVzK1ftux`C7DpJ%fLjFum}!zL4>BeBrk$W$2iz0v-}`4yPLUZPFL-B z89D?B`5~Q1=*iQIr^{F)M2dr5fb}i4BIbB^{CRPhV*ovB(R=ItChY(t<}Qn!J9m1O z8k@PNP@8~W5Rk=TbFNHKMh+g8o4xZ~#!5GmgN)rtT#g#MYWSIkcGm9ugv^2sG`!^_ zBSS|ps8s%QmSa3&bo#X{wGtGcpQsm3~_lPvcFXfq*p@p6{Fy zPD$(A+6yOtp9?pKxpAJy!7P|?;=(7sBne49iAC<-%bg&&Ni>)BT<>E8&USOq&#=aP z0_RN)dVs|*z+GjQDd5*&1SgRCB1qgsWm9JfK3KF2naMYfZVf1$1aYNl+bRE`)&&?7d> zcQ3_YHxj~7vTMsfm@~HdwhgU+x+fbhKU&|7St|YP2WRd*atW&R|7#?qsk$TPwWCl5GK)`i@8D5=UJRMe}W zL+sJ-E0r#Qmk58NsX4hzb;o}f^%aoa#>8sJZw-@Rvp2|0xA4S90xF+9=vaC9NE`%T z>nF7t_G(V9H_25V+dhmgICI%0S@Y(+NH^!k<&@~GjOeK{IvjFUq;vBJ@3pPbBA-OK zp51^##(a&QhDA&o0FuMV0K4Zjm%Z16=5|1C)PEdZ>3?0~6rDpdr2Q~t5H`~d1>G9` zNe=R?d=2N&UE3=T)>gz2^YH!$wsQ%7=K%Gx+sCRHf{S?4@b*_D*ckat!;Y%%=+Wo!*h zvh-)HrTBpb1R0tTIaJac?taA3Y^(r9xcMBZ6UQN9l!^AAB>GsX2sYangSL!HQ6k8f z-er5@vB!T!Vg5j;e{5hg;9HUi6+)WzQUq-Mej+&r)c4%gT&vB}60;@KLTiHrzLns7 zif(q>_?H)3PS8(yoB9R;r^1TkDERB@@W%BsYn~j&+JDODKgF&tym1)CM(fw#`ta6a z3L8&!>y}C8WN~tLz}m`73kQh%C!yTGQZPz|i!w^i9!lAiGBddpJ=Ic~wHE4FTgdCR z#fMjAD^+5iQYvmot7Kv;h8;Y$e``uY9eDcEgah>isr??dID$h0&KwIJPaSy;KP_vW+u z`9KZN0E(_B?lgbj8^Y9av_JR5pa@J^%6pJ9q1)csl!6p{c*F7xvWW}r-dq}b;6OL* zGRREy=0cKIvO_|ZcvA1!reN-v-r$L52v$?s+C(~yQ-y=MkYvj(E&G;^{0w@usAf~sm}81L$& zN3EtHU5~=>rz)mRhem8lv4dKzd4+eg?q#WEw}V=zM#V<++Q9$b?@Z6El{e+b&{rq4vPkbM7r9z^efRE})SbWqQ8 ze(P@qfw6jcj=NApVtvyXE11IVRmq#^huV$Cw^iGAQ15m|8E7?zSw#54|5;5CdsodP zs;~7X`O{nP-VJ_oAn0jEf_Qm%uh&%H$1&h`U}PAW1KgE5=8B8!ns6Y^$?ow6yfyjh zq-~56H)*U03fd4WB+0fYHF^U$tN^Zb%}OqF+S&jPZGdI8dV`6tiY|0M>b%hj8>lMF%8=)U=xvGy|3+2PUuZ7poMGA&S!aJ> z8rL;YdH>6~o8DK4H+r|Zg1UlsuOx!Tig;}!Rb@@h7v`Q-KInxxXIR`Dhh};G7lQg_ z^v{+o4bUpw8hZ_h6~TkL4)ck+<{B-t94pAP4U4-DZ3QQC!Rciyd!dlE4&yYtGR#2R z{K6}9&g1{(qx%cN>VJF$Hv2)f695Qm7 zPA#<8tDoRngfncNb@Zqzf)f%Z&{&nneOSS)vSqIZ@dhCHw9-}HiT#hU!~YoXwa(uC zXB-g5^S3684Wj0MJVU(VLOJ~NT#Fj9%&8VWP^e|Lb>*hmq_n*Gy&vZM{qI7Sf-wN9 zVDHo7ux>kfCV-3I|LglvQuG=)Yej`}JHQSS`{#@x@bTv$raCR79Hg6${igxMJeoyd zIu7u9(EHPYV(Bm+Uy)=d>@XkoN9euMWW)Tu0TDPxJTTrDXi~LYc^j}L{b#h7BR7`? zMCncWsn1!f&+4-`Zs6YXo!;>35LoBrNs|wh$iKMnO;Sz(-hjlkT1{CbRSCXM#?|gr zcwW4k5|u_i;}~>JNfG3KG5Pl$@)Jc9Gy713`YYMi68FN^_KEq{W`v_B(e>^o0VldY zig_dC^^fa_RJbsYJ;n8X=2I!C`C`=Yx9@R%Xs3xb`5B{$p<*bOu+0>^XO$So)5H&0 zSt$UAC3U1QiFEcbY4Irui!^O{Bd{N|W}aZ29CfSeBto#^l8wA*H7*U}Kr|?F=bWUV zJ+VxR{^|*^pXR=xn$8qaWscHAdrgT!{BfKO@$0a3-Zg#VPH9l*qSst_K0VS&s>y4; z_@k@+ZJW6x((u|8RP(N6GBIp*RN_T{lhA_##~Ngp6R3=YzHLxS>ATI?Qi?>%^q^Q0 zy|+zS`f8n#n3(!4HlrLJ-FJYc9xwLTb<^5cM#DnGw^}oG!Ls!xE%?mn%Z;`6rGjkB zsd2+a(b?y+tBV5@!W2sjxm#K?il-RMi?TW$mG1WDe1!uVRL*&i_a=WT;`*BXHHe%U zmWI>&bVGKmj0jyRj%^B$i$-EN=P4VOA?ev8;Be2bi%tSSjL?P@CEJ?&=8Sp62W%CV~<)}?o{rT}66^*x)n)de!6oMh? z_iA3B=qf!Q){FhVVz#!Agj}m``I+`QU?_29hjJtqf$?HOB;jiLd#6Oej-rrA4O(rQP%R0<>UwpBQ6CGLj zwd8|$k8z6lklg{XYx4VO>{2!P`I~OTqXMqZEOk2z{LQ|sWP=qNvF*{@xAw)9(kM3C zGiM1WG$X4}n2;#lYrhUpqs0#{G!NQ3XBEnR#Tr>LRG-2mf|R=$+0tYfz0*u81Aj6- zOF8o^$#ZKkHBG#6S&#CplzKTvnb>XX>5;AG7t_xo{c}^-W~DQF6F!rG^}mI2C9Xp4 z8$bBl>jPr1rv20`G2pdx_y>j`tZq!uI{Rez)&k%MIx)g}IEh!tasmj~3FX0-0cox58+EOq_DxNWOy_Cy97I`~meVU9h=&6xc zzbTj1K6Fq_%!R}*j+QV~4AsdsoyPe(J|I-YUcR8nafn>;JGv~pc*JaRNJ@>VyDa4w zraZ07krb>ut3;r~h(cS`r<#4Yg{D*3(Sw=N!o!+stne^}HXZT_ESqX;4q<5V!A|PN zI!0_7-Zp!W(~K%5ZkVzS_3;ubJL^R{yadyBl3DZp%p-r3+ZvN2{4f{g_8u!Yu<^&% z=$Qv>{FyKrYsnhewlB$T#o6m?&7v^Lyu5@xa-4xca)=4_>+>0@MgmC#%&y%zmp2jGiVNWP_=TC=fVm>5yG6JgLySq!(qw&N9{1(BcwEN}p=C=xqveCv{a6usZ_F z925Jsxo3?or#Csx&3mi(x+gxW9+n#)Ds#jxHRLHD7(QNw9~f8hVTBo=4{92G-TOpr zNOS$NE{JQD%FZwIR8Mb(&fd;E8|_=9H+CeyuA6N5r)G7sJYFuYpM`wwESg(MuCksB zAg$^W%ZR3&lHB+I(rIl%(*K6GL#`2~YEp|)Lco)Acw|?& zGhzdVb2-iB;)ym`?+QDHtR1Ua9r3HSmm5^2AuD5wsM62YC_``lz3(yKAw$Dnv#yk$ zpX=z;gh#C%%CM|lCYL6QX3ZOA3FED`X;ZgT!zyPFnP_b}GNiSoa!Z-a`DUYSbsHz; z2|~-Cnd-!~Hsf+<)s~giS8PwNA6a;mu4U}|T4w9gc^8K*D9AmlFc5eRFoa#JQB$*|A+f*Iq-Z?Jh35xYBEoEQ$TRu9k(BDCpw#MA z*A=IK**Ni^8reAGt@-5a8nPVInfld<8^cWFnFcdPojxE<*45A;SpWbDN0pb$*zeK5 zSk%Z%J+P3bWaS8(G8Nm%-rJ9+cQD49eCd-5`^~CVT1whad73IXNfTTRwk4~W%H3`n zm+}v`C-I?9__;KhkEarnp4zCJdvuL~_oH>Rsiq_h=D%n$uytjuM8#fM8mQ@@IGjs; zWny{xS(p`7l_ksas7i5~%ETnscg7It_x_`{C8MmG^XU-hq4ffd*`sYPaAR`=srA?2 z%;z-mt<{6}#f9IU>i=wBbtUuPntxi~c3jEG-)iy1$OR-AQL7gdDeQzx`7#YtQ8KXO zV8$=b|47*N1)WEKgDHdLZulycr-qqiqvC@>XCo9^9HJ^*)woLPPCA*+{rD>;tz%aT zd0R#qX;W(2=d>!GyG;0A5cRew=d2q!!c<^AA>{CDiU;1HRK1TE&Q5g-?yK`tU)^pD zwb8Pz8d_vhi;J3r{uFhU^f#NNBN{3R>lx{F5xZ+84JqK!Zg5=>3rR!lcnflz9G z4CSh&Eop2soADL5pb(Db{vJ^Ku$@r9ZJj5~_*IraQ1Wd5HmNvV&NBPVN*S72gYs_? zg*tua)BA;=L1ty94@tR{Jy)c4WnpIz%uj`X?HLTd0Y|1)i>@-#@;x7QmOG>@y3o7# zLn+G`Dq?9~fty2Rx(>fTzn?0^W2UMEMAJ4f>*XAd^-c%DS`yHBpWNev>ou`nd z;SWzeI!3233XZpIvY6^9`Kg+qRBt3JU<(==(;kYr5%lK#j--yLYf9GY+T0`|Vs4vO z)%--7K~TK6q8>d+e<_!Y)$c->p}weXZdczDuHH4!WYy!+RO|9bn|iRb=bs@O1zk5> z%SoM+o*eL#3ay<QREt^!$}9(luto&s|t7vBm%;w8HMKxedSKOiR) zdwJ;?yz{y5X*#oHD0kb>i4eFJGlnH##0TInLo@C{o+ay#=QsV)4Rtr7*&|C!WT-nM zJ0+@6y&6j=wCvRZpeGdS5A4TZS-sSbIT_xC8u+>I%;o1T>@fpIhiu)wCpU|k}i+!@${sR)x}7uws}sc*J#JejOpSQrRtl#oB24usLT zSF>?D53W+#e@{Wm_04G^UTyJGQ61hHNEYYa*8T0o@3wCu51L~3b`c_q;55VIVlwD% z!jEq`{fMB1Zi*~4H~u7GsL-Bn1zl+>0?XK|EN|qC(u= z8u>ug)x31>Y`v8IiDJ3TEmhoyPInvvahF5G4&_mst33c^&>9pNe#EuU_Wd_~H@;B; z@OG(uEcOks<^J{`@*`Tc9&m?G@ycC+M) z#?2yyHtM>w@l>OYSu78()d=9{YQmc~pBdR{5y#C=ffK#ico@;gjtJpQZLumv<|_ELipcp@#8Md;Y@vB2G{D?@HfD+ z-C$X5;)qdFn{jdXD0t&v^5F`GvQLEMi+c+-j@ql>S^aX-Ma8t!Z! zKhegN!Ln5X_=4b!DsI7vBym5$FGz_tX6}K!%p5%4=5DnG>}S+I8TI;jWD>T2)s8+n7(#Ze6 zKxr^1)tdOf;Bo*Q^!^vbg9B&%ft++_=7F3{XOQD;^+DctDHe&ajY|{IyClyD0sFWu zYWH^gPD&p12jocc`z~;}Z^Bi=7}Q+jq5UXe6=f8$oENHIs{CJVsWqGmF@9J}7<{9+I`y8ujce(*% zlc%xc99M2lz$8h}zm9uCr-gTP0$+2W-dSe@Pzv(_MZ)Iw*w_R?dSCn$7aI^|assUg zjF#M(8x3uEf%vl$RUsqxjS^y`k;N)JjzUpnIHt%52SkLaW??=JoA&+M2=Bb~GQIV> z@Ue8i(0|aJJzh(_nAV9=EbVLk;j{$qcm~`;RlxI46UdSG{EifiXa-e4IkZFQy)U&w zenrOCf&B9oeGSblF{^$C%j~Lv)g0Mn_fHSE(=uQd@5N84+5zlO9|Jj;9u@z!SS#ol zwr2t%N=juN>)^HU7tuldW1&6NYI`*o3jan~Z77*LBM&C-$9$dXUsKP`dISbiV=Omv_rg3#+ezpNdw1oF{1%8Znu+M%@8Izo2;N z&7aGMT6B3NLM*ICu8#FnToZAbO=yI=dQ)O)%fPfEB+^5_4=_I{9uKaA%?B$g%`~={ z%;Q%}$R=ec9s+b9mcsjM0XNVhCsh2qW3#LCp(+bRXD!$oSl^TMyXL{C+j` zhFd87&@7HO2AH4>Ub&^R>!NG<~)?srl+$hOLc+e?l(O4YPV4 z_=JEr+cz=MA$TsfoNsvVdu%y=)i}zgjltQGVq44RMbu0r_fy;aN~%pkSJ1r2-xfT1 zaqz7HG41`h8^B|*3*cL!QU4!|a`3Kzu%xi{8U6X6c5Bp1uA#ey6L(DC&Wg6u*b#Id zp~*C)GOGImq_R>VK(8|{|r1!CmJQ|Vq2<>z_gCD_kSdTGk6fwPruO5&C$2rK=+Z^yjJVl=!K72w$ z*tA*CqFfpmOcCtIY=!U%cb|NbbTlfe+KHX!?07p?O-&Rqh>P`_3!jKO){BYpgv~UJ?IKRI3$x+# zemI<~fQ$|}f&xjIp)0VJ`CAwqi?}3z=C3+}`H`ZpeA2@%_%w3qNoWSyyTG?{Z)`XllzdwG*N%Gs5KXE0A1-{~NAzvj2!v@p zzIg^?hNz#rSbQO^c3%S(I)S?e-3>5EyTTeU@6=)oO4w<1 z*QGy)UTXDG;as^1oUdL5+R+GIevoPo%*rNJ=x}4tJc&Fu=_hJ#KNPP>_1l*eNp>V} z{Fs#I`;UAQtKG1|HC>z<88{eQuA+@VM4)0_68X=Qpv{Nt3q$K{iJVHCSB4})Ud<}T zZZ{gsBVdmak9T+IFNS;>SY6fwEZ2RA@?hD#6(DyEKDst0uKip3reiNs()j0XHF0^X zIY2MHw&Fdb@veq$dd(}t!}=|M+SPuez|W}>=nor2xL<7YPP+pJ9{U%nwt+2Kuc

;YMQBZw0B zF-WFhP7EW&yyT!XNp|cc7rHShb+l0X`^95{`I!+wP!;=O z*)sQ7K<(59FahqO+a=bkcJW z@Dn}Sj8zEzpAhe6*?MXL}BqXP+qoJ908BG&Ip81c>*DexkQpI;hind=V= zX=ej8A9Hbr+d>9y^m>BC>GfAw>8kE-Vaq%XdJFI8V)4Me*oqA9#l`T6ey>A`1H&FC z@>@@xb_`A@oi+?tC!JOdR~?@P3JnQcNgJ&<(g2C!YOtdZ$6@bq?ZTJ~AovyZW?U@- z*2Ax8?;BMH>FPM~G@_(yo6_$xzZ#%YX-hO1VkJ!wwm@VG8V{-fxZ*!PiGX@@*PBhC` z7!K5ofDg&t4;k?8&xYg5f9xmgdf*s}<#QnW5qsU+G54?f7uTDW2T-U?`_}w}zBym& z9YgEfJWkPXLeb2+_t!qM=7g0IH9%VcO6vqDI|-!nY6YI8hf?!^Nf&!95c(r_mflFn zdcJxI4ukZ$GaI$(#-=iP+uRxU+1^WDN~sr31r>e%aJEb1%$8!O&XIk&9up^z21`a~ z4n5um(`;J2eSpQ(I1eZ1p+!PM|#iu;kp0-UuAVWMdu- z{Q}_tKlodq76W=MF|lV4o5OfiENS#yfj1z2N^OSei#A`kN-7C%A;ti?fN}3 zrftDX{o)2AW9Qa7W1_TCkj|zzS1E1qK7Y?qZs5P7A($oOsD2SA!}^|ahW+q3O?s93 z9*8oc-di)!b`JGNj~9Kd4Moi>srZ13mC(mAMc#J3^GAEp1;CReSNQ-|b(S81Ls-2w zSeH%Hd&r~nLS7W8@MZM1KtJ?A1bv-#k?T$QY=k2GvYN1@rXI-#s-Xt~YvO|)6F_uM zdV;6s3X~|V;SE$TR9%7JyYe!SW(N);Nk+s3MvTEY93pKb0g`0fn5+>`8x{(o+gufb zd4hv2h(@0f-Yi8AI#}S>jsuVx2v*QRZ(#b2VXZ~=7VsCGPrvd&t?G`T7xLy;Quv^q zca{#|nFWd4Q?E%U_WIb&>_}r^|a2{vQ8*k~t=ym&DJwFW3s+^c3V;*}0c;0KDm*QQn7isx$7C3 z=%W$gBkQ1%( z=l^4Pt|E6JLrl>3kUEcU?m#Osa4+ylAH=}F3SLa*m9;j!g8qXmJqFp5UntRYnMGCZI9%0Ihjd| z30rWsR^ysthponkTS)VV;nqjJ*T=S_>|LN4aQ*;Rj{blYpd6Zk?S=gQJBR)yk-$5( z`J2_IVMBMv{@Xf`&EwtqkM}D#}9^;JtPZT~lMhYIw?HGkPL4 zGlE1TR_TB%Q#@AKUYaz5#My28FIzadcoY(SI&&b?54LUq)c&njaviAmSKS8BO{yD# z7ClI81E&7S%G&6;s4^WC@#V2>fdtA5j|A%%)CQ4DHv$}xSo;djKG(ZO3A-P4@60?F zYRRQZ+PzHnP&x{x-}RLQt7w(t*NxBquRo4|R{PGz9D?(Z8Slb^_E;O$9)Dm~+Ao=u z%zSs1b8DV|2--L8t^Tv?)ZOZ7KD6+DnajvM{1E)^kfD8T*SWqm)NF3)i#eZBaH%i! zJ>bxAoRjW=&{YeJU>ctnW;{>}1JDR>K`JHxX?@`JG8Jflg`Da)?U)cxO=f03g;1RU z@Of^ZXvrC~;6n~dRyp2kFRGkyVGxrUwHhwL+SV&MD}iu{f*syQF?WQ>21(4s;8b3$ z*x)=ytk_TKvzty{Ie{Nhk#z)3!Y?jKcp0m2gN{4+N{n1`apgE@vNOhVr9WI0Y_Sbp z_lhK!-_JJX8@R?BghGy{4RLv02{sluWUPiKh_Z1A7;)NmjT1WXVO>W?*R&7q#CsSl zk>@n|zyGS8S`V?-oa3RYZfe`rPH#tT{n;~ZsyP@ZWEEyJ7-)=Dj?)uxry2yj4=411 zBH4_=P7uJR0RWwLhXO5)f~24VT^sUm9SN!Z)2X*zrsuV=wsT;Dsiui(0;^awF~5ke zt_-o-H-&Gx5+D67tCl244}h`c3h=|?66pNTF7RWug6K|%IcR-YBdUEPXxt;Z`Ik2% zJ5<>ZzHo{(9%uytJ9&w73xt_hz=oYDLe8ZbzkpSpi!iet685!!Nqq|t@3(pHPi_$T z2qd(a8%AG+qmy7+gS5XOv>Rk2Vm{iH6H3_xl#kS6bP`MM4dVDj-t^ytB0Yt^_Q1E& zdew5FTFhFVd@iDAy-vv*H`VyCYGM8?Up!m5 zp}1p1$^68mylTLuZfIjHEc40q1Oi{B)9XCvOcZZd59`-IKazRhh_qw8znpfEtx3lR znRi>!A~w2QW`B9r;9qt$*bKr#V-+BzGfoEAy@5=y*E9Wwe#^$lq6+iEGX@00#h~3a386e)%M@kY$Kq&QZ*4-%{1|wLUCUB0&7Nqt3a|Fw2DzxG5uJn>|{I zrDjh9rbHCXR(^3VSg5rA=x?2xv2nw=5O=H;YBI_P4lOxKDZE()iAjBfetysO zBT8i&V+v)got5{@Ao>rNIeH7p3Co|aVfVyD60a;--cDeKq|jly`#iQ?$S(?SU@ zvYOaTNi;|-PE4mtn4lJ|CS?%9@~s+nM5$PgdA%qr_MlW3Ugrmmzdr)Eg7JiaJ%!NV zLxEo1mloQ9Ks`QIRzYbmJmD??lKkn;jgLS@F|O zI9Bnd+PD=rhb)o5Iuz~K;wU*wI1(m8#?x$alJRA}g$?p8QrwrhaPP6CS7SO?>BZ|P zfPIzdGH7%5sjufGr%$cMRekL*lUEq!AB-;~L)h21nA%2Sq8sRd?5 zawO^;F`dat7;(vB=c^^P+Nr^LJ=u#4%S^)2$$5!7&%5a@Y7L@?rtwil<$$A7iJp~F z75VDu6uq|*m_3=Tvc!^4{X#yD!uqRPt{T6b+@98!aK`^ys$_PRuI7{QELRVqvt}I! zhNS)IuWf+SYXSMLsjmcrbt({;C_Ihl%XTafZTWO}^2qYg7Aa`ZykK?7{TWpBB=Uan z!Ho|D)7Xm!5UPMebKyY$kL+r6aa1t0AmY@GB7?b@zVHBb-UBiF`s*H}1zRiRfaruN zPo)^!!g)gIgIH;;=l_yjt!Qwd5d5X@VY91>>o)4Mk;6f8cppbM-!{N|^Cr44?!Cjfe>kwXMWj+A+IJ z=SH(pZu~Q4%}-3~jmE^K&Y%ds|7CUhm*Pf*2vFu1Lvkckd1Avx!>9@KwXhOwT-n($ z`P{IG23na95Ls&9yg5C6)W?srIQ3hV1e%*$9}It=?S99L+$F=0ZzGtUt7}IEF2qdJ zkyQmJ8H&3kL$6Vl?U-kbPSSqheq+J>NE+JqDR$yexZ>n^k9}Z+l;m^#^SFh|WW7^| zrlErxo#a$P55(%)|YQLEo?{htvNr$JBd z<^2V^{^pepgLL1-R8WBj6i}w}8&E`^BuBoJ%WBYraCEl=nouS*UT)7SmmwjnB^@$~ z`N~<@0CVd6RV5m`k0ODsVVsS}nNdwX0sCD3=kIozT_+UkKQyp^*7;3J3)#jdT#O@V ziN1MZT}sF|yQW#r(5uP_(IMxdGL=;i$nnJeULB+~aZZ$(2vISW;+>~2JTxI#oG}r4 zq8V=80KB}9K78ImrcX$rt8m=4UTBHqSNQ-(-h2gnLPwG9G@tDWUShpKBEC8j?gXz@ zR0)m=E9XCspt^Gm9MWS%I|Lz8Z`m?qkM>xj1g~%uovPE&&%Z5*T1X*3r{zHo<_(92 zx>bc7sauk*!pOgJR7d98VH~Zf}S?w zGyH&p?aJ-IKZ#7E44|3C zAHlblq3BdubZQEGB61Yp{afUmR2)d_JL69|3c;)9$vLoXn{{n%O@HIbx>04!LI?gV z6O*HfA|>Hq5Vu8!2odcx_5V^PJ;Q3@m^SE)U~icekf1OGLA$F{S|#|jQ(uqcyN@C4 zM)FI?SC(k71;2T2DRGtm2zr_*ilCpxqU9C*=kO{J65{7-ce6rlY zTz<(zvRq5A=&T=sMnn^(`{7R;puzJo^o!Npe~0K>xn$8126%)dNdBGpkz|!&d)Rc! z3vA+Qv2>l1>jZQvLANk90(Pq3pE1dxf#O|m$U@{$4AdHxK_MhM8%b(Y>syAR#P0P( z4G_FZJMyKQ$QS0&QMe{)D2ZJR2A)Goo>B1?>|@pUJL4F#{Hl=g%EVt$e*KYFh;^%J zBzU0bpPo=(a~Q;a@95D9?&k*LBA;4@_XJ58kSUp*M%1L?DVOz3C?FcO$3D;RFF?&! z{u+T&(Zk*OjceqIDTIThJGRl`wB@nCtiXrVxc@Qv^z=d8x=1?zYt7qpMYwFae+O(B zJVGVM&{_PZ9;382m2=H&HMA|#!|Kq#o%iR8*Oe70zcRmnSzj&DGv5o2lP1&j*O4)5 zO^&Xs$+~Yg&Qfr=`ow~;xeey$kI;y@)`&(qLVi7K^8Mq#A*lo}V1osxq3Hf8as0;e zH%->|yeN0TfMU@x-Z~-Nq3qp_v^e3#aL3aSt7O*Ot{kPaGQJoT2c9(N9jVZsd%+}n zzWQO;dCcq#8;%n^cYplxonVI)pIajX2vP`dpWjP0#8iq+JcWNe16DgsnbXtQc?XRq z_dj}_%A+fdDvbgE zgGAKD2^7D(h2!DFd_E_R`(eefqd%m1W6rC;l4sJ{X^L@pAB;qFAv#^SbpHAx_v16F zgw7f}X?j9hs)`IQ)@{Okv=w&MFP1t{24T@XzQdtYMtk3jU$eVk2vwjizD1x|CDnez zVhA1LFKB9Q*Z-qm$Xu~&89e$ZVl44WFe&``wcu)x9SY)p1+IMX#Ie}6IE(}BhH&Ch zWatW^${aj`#EMhr&_xRkN5#GAzv{|g?26l1;ii&BO-(nQrDfsV$(fLwP@*pRIU|CoUkPd`-KxB;w!>5_{%)zk7_W)TTG2B*X>i^$F~ zh-uuv%9w40(dscUfw^^OC{}IId6zpDmbs2!mvmN&a4O*rrVIMpR zv|VlcJo&Oq5}%xv6!@4HTB>bD)x-4XzV%@g3j7;GZi&V;hQ)g?D8aBtRt!c`s4h0k|uTaFY%dFe1GNA z4f6SaC?*xn2@!WP>o>A-pRld+t6*s$Q&Zai{+*LjCa z@t<6>p1mI*AH-J&W=_uQg6IAI+iwb<-M#1T4SegKmk0Z5_p&(OgH}j62F~Y)0ty;v z3>;sDe;928-4Tq~#>6&1u0%a@en5``{q8zf;N^=M8us3!;W5}1(v6^xqtD0SsWYIn zHZv_EuMF6cURn0wc@92aXW>k=U&}j;80Tj1n-pu+H!kFj%1JpWihsiTng9Wk;Diop zZZHpm`&5b&8tr@&6wlkGE`~A=mEERY*xC#WjrnGzP2JNk(ZPAW=Zr9xYcS5s>sGs~ z1T(G0yGeLV<=N9s(|%=xFJ(Q1%NV7C8v=Kod_fS=wn@vLg6eNV6uvmWKYB?#DCaGS zX%Ph5W;ml(kvJ~6@p|MFY)2g$6NZH%{GD_XVQJG6q231zuZgQmzi?ex%)WDN(|bSGsU!-;P! z40AAA85Jgi4#0Ej>a8aqsX)xJw9d1WuvdjB(?s?v{&(}uJ7Y|FMHX|eI6NyB6xT^x zp=ngP&fE01e=qck=+Sr-KX(xlW2o+M?YK{cpm!ezQJJ{O+csR9F%7xMvX3rz{PPl` zMx;{_7da~7$Df=MptL58^MsGRMUIuXu9eNjn#JNaZ?QK5P?k_S!%>vl%YRFtHy}7Me=2 zQlquATDdpJuOhzeQrPibr5L=u(F+~S_0|5?96)J`AKm!Dhj3;PnIeDK56L_bFL82= zTv_R!#yXX_yUw^8`6jN8(e9>SE*Zeu+UFnTIh5s?I!e?Nc1*(Tm0Tk2i3*;6g9F`$ zut!Y_$IiC|jA3pw)7)bVfALp-7ejI*r9F@Ow#*zx`N_Q|k}QA1XJ*nZ&ZM6#N2ps$f;V!!#FK;5u=fUPqVlQdNO=e|zKfmUMh|`@$7Q&m}dVvcvta#ua{VQD)#yfZ+hNcqYtJ=^^CU@dueKGj+N?2dr ze8X@pFu871W0UGNj!aVsv5zbdCKmAel9L5-0brJ!ZC{BP?5x0+DLvIpS|~;c(38w6 zJDq4FOybz=`!;=7DL3~nqqX`aR+g~cFDl9(VLx}rSq~_zcAt?JydM_GaPe*q`kk>)% z_zJ9xuamU~@qW=ol*<@*qXeI5G&w}nt!ro4cjYgZL8LH&_8A91sW4*>UCbCaOVFbM za-RMQb>fbQbVNMHstLaWGux?fWcOZ!E3x8!L@kInf*pO)E4x`C$Wpq4uCT1ltAin) z(GR;ZI6@3+oi^=L9~vEb_h+^yj>@Ua*h5#GGo!+1*Bg<5cWlI9;STXMehU9dP@6zb zl9C|U`Hhsg*<4tuCB(d%V{n-F<3T=6$|{-iLdn+7Fhmkb_NEvdqW94Nbngd_;FXMbVa&5-FdGs zb=ZqMW*K>%Y7+c)IN4{Z);Le<=!B!u-ULYKGxtoy^cMMs|{B@NnYg0~SR0h;$N=orqyq0NKeH~dN_ z9Ow_KBFGO6|7r(Atjzl^<2F!y4x4@^2)@DVjs!rS9>j~ z8k>0P$UwG`9x4*qEKW;H9c@NNv5sR-@d+k{e;MS~s4(8l-$L(>8mv(DItqmTFm-u- zBMQK)CzSdYEOj_!fD z;O1AS@C0J-0q{wpQfNMKy74XbN(W1X`KstFw(ul@Fy$_nOUZ61ah5N;>6T7=y_*lgwrA$ zst{SqqwV82PXWtswf9|}%f;y3Xth*6bpK-dnnpg7v>6UK*RS_`vBF431Abd!)lj_kTZrYSx}C*#Uu-dvOIHplZS4_mwCZGI{-B=%H!U z_9@qF+;ene{g#vABA>_4M=M)$=z%p8jKnNMEPW-22mN#W__wZ!j(R;P#`ghDV8C4d z6*7l3WXLN*(CC$(q9P`d)n||ME5Zb&xyy2|lnt19I~^)Kh5HzPJOSa$zB%ABTwo}@ zyp88T{+f&l^rVwQ1hZ~5?DOP}XMO8;d>G!&b%GduM9(5p}`+@eW~$1{{2;}jVSiu3HuMmKk9g+ z=>t;3bWQnsC!DLCT21pIop*U`*HC@QwkJjo6{ja zZI(0B6Of4K70H)pB5LPk_eGcwzT%ZmbDV1qBQg7P0)OYRl+Xjx>P|o(^6@T6gqS}J zT05~I;MPybVHex|%pYyXB}DY35AOyy2vtp$g#i7kz#4ADvFmCZeT%fe^Uq+a6(7Wt zNJn|BAgdwNrIFLJsIc)~0@w6B-S}#~A@BQ>ouWkYYd@K_0I?o%|K;AQ=1l}|{%FP1 zj5`z&!>`|0aQU5*3^@iFUq)bT^GLzyce{`sTP`^TsZC*%7>HzfaRqVC_vWv-M4bak zD!Br&X`?)@7zd&x{83F$=+xOy#|1qn6Z^cVVJ{_mTPI_TXJpEfs>}$7#N+Mbg_dnE zlN_6|(nnKSFpcKz6-Zw<7y2mYKh>bFOLS%jEzQ02K&CJ^wGPIibXI0<(d49?uz79x zZWE(;BxCem{n+hi%M|@UeBNQkRk6eMyJ|K)YPbyk5fQ3(@KNf4OHMX}Ik~l!;3>(P zE2qviEyH}hS@K!mP4u5P2``-O82vbm2!-V zLH}F=MAR|UhkkwMaP)Tk+Ulp3aGTE#&e433rMl+c3a^I+3s#mA)|#-l18ZZEQn1T& z`sb+M5{~i))<}Iu-IrIf<9R7OPo~v8w0SxOiOhr2ZrrmLO_%o?_HC+0%nPc-JIFqd zIl1IALt6IDtmm)=_~cw1yLdWB;lb^g&Y6*-FY>Z&Qpq&BU_s>3i(Es~imh2R?P4LE zhM;jIO^&h`?1@f1cBxui9gm?8Q3!Vuz&yS>Hr^1F6we^?^0S|@bal{pXxgsYUhOcr6KWAcG(?|x`&%jz1TKpV48DU>u!C0jqxz{~35jqQ zZd$b)uoIZ5Iw`L?LoDv$;0^NN{|;XJAZTZ+v4vR>uWnp_c2F2M^dML9!ybHFnC1=F zbs2B~o321jN*NrEdtQ-0742AOg1ePL7N2P)g|U5yZGBAMWT}u`uL#XtWET>=l+XIO z=}ol6>QY{tY(I|-)FM)e6x|r>0_Ac6T)Gd3LQXWGgeOb&=cBp0Huh&S+^EC0{f})x zPEB_!VzDi*Y*h5yfsCyTi>fj4njv!$&#Ob77AG_%f_!m}2)_p{w$nD<7w!!WF8OQN zwyts9nsj=Mi>3=QBUGVm)QR{m**>|+78RZ}Bi_*-RZY)JE~%}Pk^ zl<~iggLs6ttFn*;7u^br!!qnT()leT-Gq+tl1C2aNnP{rmkNNIG!k`DcvI)npQZ1_ z=X7{tA&*2hI>jI19)rR_JrI+|VEbJzx4Mc<^}O#G??8LaDtXhy#-K7yRp9y4pE*^L zA0*E7Wq;7!(oy{)s|4BaZY=ti*1Yy=P0!|8vy_fd9v+|fea|F?pPk+}Ry>e#KYQXI zgtADo?OpT$H$Qz}QD`YfjuA}z`~yL&gOjZKRNN7lGWYXnULE3hrG`$V<%W*|xPME6 zLxg@IagmA`>>_jC*&>>H5atmhZGv@4uS{bxw8CVBUl>B5HAoBJ{O3!j?xk@NMyuK92+mtOzn5^CI5W*=3b)&!>Vyuyrz$Z zjg2{*CQ~bXF4JAVgE}XP#cF_qWDtjMxZCNTsG#ic9}-HpQu8p<*;#5-gK>X2U_m9m z#L}?!+_U`Sx1YPldI_Bl5P5vSSkI1k0dRl5Oy~ezk+yw%0BuV{Ehw%_(0><-bnn_q zn-Mb7J;-BPD2Ou_&Q{Dj5DtxO&?l?8FDRIZeSe<*!-~{M!nSX^a6*VOe1k8d@#zL^ zKW8*!0S?*~$3@66d(MaS=1(p#-L`^yN~t@BNA^d}7)IzK$!|@(Sc6anTLxT0Oqt75 zez}3EGpSCddk`6u4a)zDvflxw5cbX+7v(w~;$-u0bmZmOb-Qme7Cz7uRzaCKHxv$! z>S83(6)(3kbWQKf`QaKYd)1MQ5b)Vn&FP&OagHh+tu*zW`*)v&x_ek!zBj1e{3xc5 zXvm^@X5#iI_8(x$o=o+pK9o}L{fMg0#xO*k}fz0>*)$Kpn`;t??f=2aTXcj|Tyo>ic_JzC8 z=A>Bwb<$ji0Jc=yZGuf(1v>$W=hOSM5&r5F+cw?crh$ zbWiRr^vULoP-nHk9SH!?nYcL>D6C)7Z*5F-(!yFBRC99@1)u$P4VwL{GG0p z%~x_*j)$s*8l%NyEXmOX4l_>WV{&90XFoqCr)jJ-cTG1@Y|9a%TY3Qy92s4$mE?Mr z;=Pc^qu{B{jq*(Suxoi5*>z#L0t(8OU zgb1ES!j~`Mn=$aMPy7=lq|~HP;{8Khmu^?=N;%NJF*TmjQS41ICd1cZ`Z)~2b&6U> zb_X{qJ8%;!K#8}rIFt%|9ME3@e*aVi?3_7th3$6y$0owex&`8gGNzcWzk8J()m*Zc%;Kcp5_YO$;`?PPO+x@%e zyu&1Mbh;STTbCfTLgQ7|YS2A*R$Yc#?_bT0e@{;rcmpRdu0v&yCCntJ; ze)bObF_hvV#m|v_g4-d3d8&}1CZuFH_@;Weg%LmNGV=00hkWU7Yw*|JS*yvn8FAx; zW1&n)vS!;Fu)p%SPkChaC!Top***g5s6R6Q*Uw3F&}#0Z#)f+q@S6nW5((Z1Z<@w; zaG;EHl0XeQAfLxOTiYm%cf22e^qOsi+5gpRe7U(HT4sm%Nd2Fek-XaB2&Cwre}?ER zo{Jqr9B?Ob{9DlM^T1BfRp_1%2hFnTjS5i&i`nc{bwHngkjQRCzJAoHM2zd!641~Opgyg+s2noa? z8DKI@LSBAMJ}bPC4-CA#%$rH#ObC8^?{m(*=brnik4mDuQQ57kyYD&s{P)>s?|t@m zp^`8TkkwRV&TEFX=ELeFK=d^SJu~CN3nilNXa@$B_f7Z$Ud1{kUqSJ*2~K$_Sv^6c9I=U{)q zrfa(RiAc(*K^tx*#n(&53ryH4gzYTSp1Ipr><{qT`X5GSiKTjnskGk zTg#k=Nof4}yhi^IKz(G=hZb@&4~_nQ3#Q?125g~#)CPVFatWgECj*@>89+;=PWPwO z{ICkT{p0C~PF+7UzcR&44TsT)#YK>V4R&4EU2C4HDSdKzc`1E*WjPhk+IZ}RkFMiS z+}sUak25$oMU2Sl&;U1uWbH=QXPa48fHybOLB$!ZHQs)f-Gi!DLTzrZ zL%R4&ynKQsjORBq~>ojSOTZ1B#Emv87A8bJAqJ5~h|5ULT)%@-|@kXB1&Q31Z>0ElAHla+dU}r^a zJ_@`=0i%=~+!`L73^+boy{ZYgSOU`3j`Vyy+qVjpezV5(Msx*V&!QFdNf)%L>8k)* zB@5?xT+jAC5Z70GUyZ*`;IH13+T~uE3W?Pw^^;pz9P?v#%ng|_%SwqZ>Wk=-4m~Gg zFJp5$3-CE)uFl;8n)S3-0@LM8bpe2x9gn|-ncKm@z>pwYkm&WXu}e}8qBX=q|MMR6;+zY;;pNetj@rk)}_jo}PJZ+yvHyj#9& zK)qn*X*Ly1ZraT6F}U5u0ZRdp7W%Z2PHM4LP1%+M71j}t*7K%XkN*vSmG`}>VY&QU zeV6C&^7PKLGkA+M!;3VrNNC5Lb4WPloEHM?(qjf-%kwvgET|qlXK2QJk2_U@RHWiK zdEIJB!{tA#vUiJZl~G6jGcr6htls}m?D>D%olltmr)xz3j zlkcZiokRzF9A*yx>iLy6WJkO#JnbbG?#~}Pg!|8BH&XJBYbQ4ni5ifW`BAj6h(2wa ztJ|hTkdn9z$&!~xuEWE@0bY#UMMGXvCL%uIxKk&z6|OyVojl3TnIxCCKtg(Pd@I#* zzLs-+Um+^yxs@(e7NOF}_K@^Mb_YEWKnmZhEzn8EujoMC(OSC>N z!k-Z{bkDBqMIJ1A@L2SRRL9(+cJ5IP4xTeBbK1y%+UIX{tS98!fD*lTPf7S zlFZ{g#siYjFrKxT?{QSPZNL%E3D?fF*nOIrwS*>``xfUR;x(f{9CVgqT{-s9JgKYQ zW7=yB%PH=(Axdp|?%_U-ds}cayBbMpsqI=)p96VAUEBZ#cF;E;*z2#Zku6w*J}&pLh`jIJNn{f zSy_yL=6DvS4%@PWh(xe2E_wdCiu^bCC;Eo^5|>YC>2ny{6CKu-%6%A_oSp=Jy2C8@ zZ=aL<1m=cKsLwrI^E=KC38OV{ZsJ_SW=Zpott)CMCZLhSqrEV9f#O&sX-=scv`bX> z`|FnPzE(cb{68OB7|!h+0qWWR4JC$D{(pREFaGDQe6B10AGRNTE;WB+)o3m6!5de1j=(s_6GCr)(EKvI)id%;FhsK6eNdkJ5=nCujwRb7sg>mE8X zFvMOqf^p%ehVaHJRF`q+u9;t!B7qH@n>^pAG1Xjuf}GYX-M##re@pCC_av-*Z^&4(?zKe6GOk(EI&(XL)3>e`Muz{St#pTwBgtYt@3Y7}#*NGi+>db=9S7d;&iA|rx9>Xi3!iCyVzWx&El z2FM9BVzcBG7N2AD6-I+xu;RIuX^6z&@JK^pV^lKG^8-4gB8L(cq+2|40q0w2jnXYl z=9TMQ9F$+}q?42ImcWi>fC<~o2ZMD&-m}l@PP^mYc?^I1 zqIhd0dmIZ<5j z+?&IDt$2N#l;wbFYHl)<(O2fvs6U&W>+D1$d8D30tIWzqNjbTQr|L-*0724(NSX*p zI<+v59zhUglBY`qp2BC33QUGZDZ-H<_BOlcftO;+C7A5w znzZPINz!^APB=Hrs3nb}q@ne8h#EQ=h@|FJ`yJ~g|Lo=RawEm)r1y^q%SNWs%s(c zMq)V`q{uaV>f-?~0u;tP0DT#;*TYrzqzc1DsVenwVJLJdSr{@USs1o# zW7t?S9Hny2E|!JfSfrAGES2YmwMZoaPYUAetZWp26Sd~|VHXzplveK7(j-l=Fy-7k zj$<~>s1s6h=;8_y@`Wr5^%m;+gocZj zLY9%qRh9Nt+iJ3@!mj}akux?6cxRGc3UBymIl){SaHj?4B_IqYJ1;pEqKny#;NU?6 z);J3Rhq;Y>KVE5AL#m|ou5cP)S(F;@pO@r*CLe{~F1Fg*#R2`=r+M}&XmK+q0hPhH zq0Rzz`TtDnwJWLlZJhw>$$!U&6Dt2dnoRET|GV+IZsfmw6^iK?bOey!?c5>2DW%QF zfX6I;R&EU)cFY#TRyhQSpVHVN`r! zrx+Dq=s8A37&rCFnJ?%xMg~WrAXKqt;a&spwS}3c zoI!7ABZH!x>t8HFF9y9VgjCD7 zdLi#gSKTjT#7)1G4Kn=>Oho&>NJS5U$=pp{q;(;I8Qk4nWN;x-8Mb^GwxTn@zKa{! zvKJJX!`-Q!94;uT3>-kERtSp9lJ#fFhGmg?vlREw~f@B)RfBQy&X zK(JuR2Y#g&ThvZ+RxJ9g?`-rTCw+H|4?X8Edw8b6Q@*nKhn(@19Y2KslDFXS^S#0h zgfM6_uJE(H!X|{A>=o7^Trx$?YdtKm zJh{G@c6=xF^tm2KHp*t+BEJg-Dbkf|^op7V;irTe;at(LmTTz2(Q+NLxW$vBGN+mq z*CPmvK@g2l+zrGyagN75))056Q$->~yaHq)0xq#c>YeUW0q^L(&+fX)p?qAO6q!e! z55#d)s^!gs@LeLVBFe+LM*f4VWCX!FQuH;=1axcwZ%uSU0a)^791SrnFvA6VqtniB zZ!vaCl+O7bcB_}VG0&W)8j%@#wOS-19#?+Xqtv$Y=AO>p`f7`hU>+q8@PkU0G>W=#| z^38fWYeAh-VgWAI@OG_mx8!lq>hW7dd8dJ(L8e;4+JG@uaPXvF99zEfr(MrZz-nu8 zV5j>u?AKm@PH*WcUI5Ll$h;L_sf*C}Fa;ZFcEwk4aOS}F%E47w=1gssg@|$AIPnEN zS$&bFDEktNo!~AQIkTWnEVg_)GkJP0r7xs_^;%h6Tv%Fm)(=h5xS#XwWijqgh9z`3 z%;1D%0Ed2Nq?jJUle5&avTryRa(06qTK0`b-Mk)|^9-DOlrSNlutXTA!xL+Vb~E(o zg)v-Ul9GQzx^AVvd1fh<>RU+~EZhI5%cL-_ zS%%}7j1e{G&YgTv!+7!KJU>fMW@gUmSeTxAIJNZX@@#tkOdmU*Vq#AS9^66E183E| zgiR6(c7A4cF|Eu`rNA==9=fSpFB&j zQ>dlWshK{F#)ySN7Qo(ta;5(iRgTpmexLKIkDLO-SI`vb^|gW5k?vwa?QBO9VfhRn zNN7Ojif$X3j|w@F;MCkUYOhNzE%Yy}EGsF6Q#AC`n=_4U$qnYD#g`1+_(e|&q}*K} z)D}%v3R2uDX)G)^h%%zmSWsuu`Jf?86-eZ|5?{Gby95*gSF+e$nfJa+rEIZ~8|V!i zDVoXc9IBv|;vKYY3|K>hb?x=MHu>;EdYbF#@SE>;WtCSWtWi_6yHUO%qM;KTs;_Csa5}8gz%%?JV!T6Mr9z)oglJjiT!Ai$dGCEl@ec!Qszg8x zP80XPYK8{mst2-NmlX4KAy-|vWs9QlS)&X2iqeOO8IQ?MOX?ik-5vMG!XGj)7}B~5 zA7n-DFNW8zOFAZPmM0zaRzE{6?IMb{=@|Rrq5uT5wPF^%t!48>nqdK;n*%=%S0Qyw z{1kWwgEk&IEz2G{y{eUCl5FIpqc1$eode5Gs5y=RRn;*`M&jaduUMjEF6n5B?*mj> z$F`zsa^7E)07ciat)QAb=2Ybkgh#1MfGX@*IjSxT{<;Jx%8r$zdu732lK|D%v06o~ z${V~;;D=eO9OSu2GwP3N?m5Tgy~aiNfUwr@bGEHhE}d1Cgp%S~7IE3NiYa0}lXzjZ%*odRce0Kx zZe$Azi5wfU1*zgFi_Jy}bTT+&#hiA z5f|rvwDafYh$(d~Erhv9vpe6KyY(>yjc{=0vO`TEYs<$s4D2El`Cv!=o#QyDOb$J(-ri%Q?)S`Nx#T{zwuX_% zHx1^`UHCnxfpv99D)WbFrAtKOw{4sDo1QadI@JSV-~Bf!ozH>HC7wo}%tU}l7ARS2rE%6;+zsFs0K z1dd;zaVY~GvVx`~KgbE2s+01DC10RE=~tlg+87qyJ7WzJWKeSB%Bo3?^+i07#gQ2Bo?ezs66A+Y57wyQ2Gcij z>0I-QQ9xLexPIE?>&G**1RvrOm6@_>mM_x1KIKMXpCrZS_xXMJDAv4dBIvUY6az1x z8RUb%TaN`UW{K0^La}J%akBP`Ee?~(QUsZpA;ZRF5e$~fgH9v@%nH<3RNg0#3vvWN z0tPScbCM;Zn_5Ps9Ci5_T>u=;G+oYURanslE=1Erik3;2=#@Aeo7S>;_9g~Z&lM}Z zaqk+&qp^Id<3Xjh2PnrWxsO$BFrZ9ZiD6I}BGDuieuQB1b47#4IAtyP+yF@v<+5)n zxby|jkT|Nahl(6dybtE|I+AyjZWoK?<(-m-!){4aQj+|+#;pp$)=Op2o!~V2#c*t7 z9bpSY&_{A5ZOAjRVHxRk<<*0TU3Ddf!I0!)tfGAydHO+?K*fX+Go*^z=~ z`Lbm7XEB(hvj+nQkQC`t&ufXhrb5V*50@&O?e$EzjI51Bm-Vc_!mg%8U5?>qV%LGK z>fWdQpL+Jc+@NP$Wz_TkGM@DNe;nV7|FSEeu=_tF*N6eIFm?svncx&_GL1@Z*h13N zlgkTB(q*8?M2f+gb;+`gqPXk32)in7QvGlQFi1Dd!$>!C*EiY{w!T^G!&$SC2lgXM zukMPc6bT|KIgM&{wYEn64L?md0AWW{s5nw`Uec@$w0B2sS+^ehsthg*5 z*krvxhofx4WOll|IX)N5S?D4-3aOrp?d$~%7cJaJvwoqvl)0>#j=SXcxrpZ8>u~yW zBCibf+c-B%S>^x-vIVm)UjC};b1;Wp?Hel^lA>V?1%7`575HRw2Xl@edXxH{Mk z1~>i?j0=;%N=bLdbb^$Y;hdp!hM>~}>*hZ1sf?-UjlAPz+m-VQxeIg9e2kB=hZpw5 zRSLu)`4ktr8e*|nba>G{%nLOgk%b)x4S>t>lc?2T;xR9a7HqlVm4t7@awXDgMK(ua zEz#L*ASDKu1n9193ierfUFt2~#|*oZfg7(dIZ5{MnxWwnUz!xXRG<`HyemO512hZ> z;$chS>?U8cBXjYxJjNF{vbI&mF%*^t5y)z#3#IbKl8liAn`Il8G)k+vwJ~R^*$hjQ zfSvpJ=N-fqPZYe?unjL&@mOq8fCqhQd1f*_*I8JL=WHCy+-k2Tel^UzN9}Y?aq{8( zpT`J(TRcV`{%>T&AO9~gw#WbN%IA8y|E*)Z&(yp>{8V6YLZi>RdVs%G{>XxHwOQE_w*JUVFH+!OJ8tkSN z)raaUhx>MKUjsyh;FS`z%#j3tBKQdfEG0PBxn^dgdZn?{z-(93g=ZN9-( z%KHx2O0ab{J1i+yBLzfap~c%t+eDZeHYJ=`l)<0vh5Qad7!U<~sPCR3K!>+v`#kF4 za7_Lw7M61Rq}OMO->B%@%QSp9i@wA8eO?vtYEq8dNIHmr;-Z9~(+4{-2V= zi9P=hyYgw5xflD~()EgvrP|Vm@VQ45IFTIJCYSG9CZjSFb@C|uTO_%ieW^8k^W_VL zYx2BH zY7N5nnwrm~`mqCdyM8Mr6N7D3fuo@dGOigVYTnK4MY_YdPVqbNVqQr@4hA@$KFunx z*%$FFF5`2K?w%3 z!V-E)nocuzZefN@u+FCEr~5RcKprQIEwqxN5Gd&Hw7`}K;mhz#7otYYtWq+O6@qGQ z9iz9?jZl&`Slrz?9Hr&@nT2A(=5h&Ndk3^;K07eJZ6(jg25%7p6)lyVT-48{GMULU zDSdWwetHghp~b~pocpEWDQmG%VksB zDgvvW10Fe48FPC zrFgA6CUas!^xrEpJ1BI`nOT?y#NeEiAD{+Zm1zwcy;I6lU_B}3oJO*$tWyAbv;EYQ2}-AWY}dgYU9Oh!A60%ba?2+V!A4|Ral-) zR(##Cmz>(_o@O9gQ7F3=XB#@Ql$#0NQ^_hn8t6QXrqkWXJpu?M|u)MS#7r}Nfi z4k@~kf9wqbFPDseLl*_{B^i)WVp6CvK$Q}3fXL2y+j2FXcY$f{_#>TI!=eAIq9>Ve zj%j6!InPkD)-N)6iD((4VW?_{X|8b-brmMe~BI^-Fez17t_-c?)b=P^7zEa z#Bj0~Py?}hP)n@#X_N|oGLjMBFt&QN{!^NhI-WOjyGh4fMn)ZZv=7OG|D zFoNvYV6wv@fHr)*GOYtaEmnlrWEwM$dv4*3o{kR;4D@PmrVEQ}@t()-wcgOvCui&h z?ux(F^@k_*$)z(HU3Y;!uP*_exU3>h?G)nawju6{=!nRS5$$X^-*glC)Qj0PWu_;W zC+RY_8+V9qeIRdml5>LY2N-2^L*a0bbS+sy>qo{^G><9M^bOJIgmSE^>a;)n+*7RBE=)feQDl9do%~F%HE- zDUOP#UM(Ka_G%Ak@zvg5?bRASoWO_OXOipje@un9y)x?Xf62tKPyRnXwio|(S3Z0E z-yZ+>o#p=qkKLoao{g?Vae{b5+7eXWkOP^D_83>s=E|j#K{6rk55?Xff{i;75@aOR zw0Gd*N98hZ1##IEinC#$r%iE3kFvSjMgXQ9bYjWgCMFcS*kzq*k7--MpQuHajmJqg z#jS>6J7m0;gQRNYHg&uJ8-&J>0DhD7k72P5bU{)wFR@-_jbimG)=axlfiA{0deK@Z z#5~0saeRAnp6lq-*#5sgBY?W{pP=}!BYXS*ZhWpM{r`5Yf7@*QyQlx()BiVGyFLB? zp8mi7Cxqkm838z8pT#XVq3!B&+00C8>EYCpK9|lcr{?w7uB28{dM5q4l!mg$p=+HP z=BjFmp>GBqV@SQ6b)yEt!8vsl!#15AxN)PfX*5;#?y%7j{2x;UGnM|fSipMrpULqN zmH!*xv;W+kPuQYQWo3;f-V^H)4%{%})QOn=V>>)|JCd?ak^ajM;H2W>|nDc9|6&rq3u(+iI;~=Ft>x$#~q8 zT21IP)5NP%bu1bYkCToWHj?=$8eRhfhEa0QnP`SPr`Og!( zd|PGIIsc6$6C*zVf8%@pKX&Cas3`y0spwkr{I`%=(x+40SC8ZO&kK$A`scnZlc7BM z_1qPAfKooXysqc$t;T#oqX)qS*r9AKC3vr;8XO_CI0aZbKQMNDOdFaQgs~d!bz<-# zqm7OR$>p;fCe!Pvxajpi=tK_-b3~Y}!qG{anw(#lPftzG^@}iec#xRFC)WiaHj(?E zbIFI_O_tOb}to^t7`pb+}2?0(%~J5Onv)qHah_fH1{XYgo49r1Hr&gv z^U(4XJ>D*$%7K(Uoi>*}a|f2_7-zCF^=>ks{>Zt2Q~;siPx~pN6ox6}h~W%C{Ue66v}6h=A2FIZVK_{}-U%b< z6V3lSveIppQSbg=K>VNN_~;)0zZ;+Hga6O0EaH83h5vVxT`60P zAYzsT(N*UiE2d8yA}|L!F{6X)WCsSjSNA1R^9Vc|MHpvB9hM}963y#RXz`L9x~&(D zh)zAoB5em%kzK#$!!TpmIcBKFBU0uK94Xm{*PmYh+3YHKwM^6=8m89gAF<<;o_9sjG^Bk95K;8S5-wIgp8( zY5QB_pcO50uQZYkLO83k+84lrG{G4-Hm{Md-wl$3#9me3cOKEfXXgg0&udsQUY2>d-0+xU!(AVT8|q+l%JG(&<_bzlq81< zcT3Y=kw^?AsHYc78aImTW7geBhPAADF?-2!A`-_3IPuKm9-HXx6L=Y(;XwU;&0YVx zsM#)Rk}2>op8DNLgdVAbSN74Is$V@b3n^5nwx9SIcT;svz>?mdSOr&B5+_X=pmowz0#tnnbED8p+(*~N8*BkY{!R8#4f3UGL z$@h;u>}V9}Wz^~V*M&kwUoF^{8>Y?W_-ZBM_C#npmTYKXU|hz)5)qD248V(;ehls; zoNSfoydp8QJxT+8f-|u%0BbPa$%fLMR%T<16S6aOLI%#sCQXez6>HGoi0272J5tC` zr})&L0@orH%BobTrIBy@NvZI~gbZpcapdGPL`( z@m_6Eo9GQPC#kvgrfvH4I@J0*txu;dKUb!k?B%NW$kRrxy3*0vYrmu0+tY37>ZU9h zJVrnA#E!Q5F}8qe5>rJS-7YThIty|Ktc$iYW3DCZqTc$e>>BI6ZFFC&{ntnbMz0*H z55*c1m9PX#nDvIa#u<=sJr-XWJQLSrq5jIEqskf_Z1^Rcu+>))HkMhfhuK>am@h29 zM1>r*k~WO%D{;R^4Of=jY(lYUG&%rGSP4eZvYC7ZMy67Q(-Kq*7Ic3F$PFMvRE{N$ zkGdeI71C>7&6|>_WL&(Krf8!xluuE;Do@bUY+&6vik;#pCHZRQ{m_+dLqFuV-E`-i zs5GmN$)e0chM%D&+ePOLy#uz3^-ji7MrtBIS}BX;F|$~1_JHi31iqV|NZe~pg~tLOibk;LBle>XnC_FqHe*W&SiVKFsNgh@UB%P$%}$p>k^+Iw42 zd|W&#S+(n#2m4VpvbjWmgp885TAyUn@tCM|h;+TQ)gB2hi_Ji;;zs@U;LrqGZ6y)| zNtu^p=0?o03fLpu!fGW7v^by*ktGsL$Az=at1NLREz9 zO-eRVXi&4Q&dP|Hp1lqyN;6E6L>_%yQS|=58}{Fcq2%bWYX3DnwCDe2S3V*8|21j; zF)ezj94bIy{CYsU=1ek~~HfSR5r4?jh-D#9+#h{mKW_FztbWSc#=__#F zna?aQO{V8l)141$Lt8_nO`b1P;hP1EE_+IqVCDgsH61emOOtNuQoeu?!=a9yJ^r*-eAR+_Jcyr1P>yEj-!P zNnyIG*%JC3E7-zo4wNE`bRES8(G40f6nU1A zT1>K0HxbZ6B~eXIbUA3Wf=%kxy@AFvD7P@A4}M7|^{ln=W0W$9`(1C`xdl)taTL8y zI!uvdFmF1_dNQyX%=#WpBa9;K2P6UKH;D^o!M>!K*-J)sKzpPBgM$VTRijuYN4dfC zU92x?xOZ1R={UJW82Nfci42TY924}>u=Q$;l?;3B!vO@-z@A%MA>NU)RH=)jogn1vW6(yvo(`F)_kG91!Fr1jV)E44&Rgx&OM zC$S;k*-}_(FR{T$jt(_}1by7JsmxY6WsOYY!{(9#N^4bfeY}AVw(ulAY-y*`qTa zp-N3<5$`v-(^GSm|ER6{rko>S9%P<73RIw>p*MNrQ%@jQ3r9Zgl#TTqH^kswhuwgT z1a*Qn5K^;RiPz0rgF>kiR86;b5zEiB_;3z{Ek3;#_a7kDzED?R+jpqNnsCKF;6P@b@c9e%+ty04qc}-cZb$IH~54f6dYQn zAFWlZXfXkkjo)B}K7(;1C8)Lv3kgX+pWj&z`3oo*&_lZ6q`b9x(*|w0Vm^j${&nZ1 zkV+0Q4YDG2#2Wi{{(!M@yU5en=CVdMsSXdJ)Y!uksH0m7sApsbJ{>48mD#M|%01Zc zY4djI6E6ST+O7Ma<0xtJ-TxfllmG3;C(QnL?NyNh?Xz5jmaZ|pfdO(WMc!*8gZZ}x`D)_3NHO0)-M7AFsjDq=Vn z>cw*gF{St%(%*Wp1KB#UzmT<_UrsH}PtMIfs;y*FGb?l2%*y-}iy?#w>W04&0uef6 zptA{=uU;!lerlPQJmEx&&SvcNxMH!@R73|JG?)q=IIzQMas$u6o~ShZ&LNIs&0d=j z-Vnj;i^ULN1tDA&w91=fPOShGA4op>ow05bBEi)rHUEt$^2umEpl)mghbi=$yS zJB>*7!KMRGL>f?Ww@u7ybYg-B4v$S8&v(JN~qlIav4WP0hMK=Mrq3nprCeXDnEPSZBR)f6Zmgxs6)s0);JUKo2d^ z5|)olg+zWH-f>H8a zwiJ6(oii#kkS*tOwTdhMVHG0cNQSJADJ4I%>bVV_ZE4HW6V7*xAWx_AI4&fZ+=V^}6`F)>ckPUsvL*+%-9Qq#IXS22JtT(UQC zr*eswlM(XGFFZ02&4P@hlySvP72F_^XKD`ejQR2eH%VkVy#SfU)ja-Y;av2L6wX8i z;7y=9pkg$ft{@Wu@9dQK1`;kot^n1CLWD3EzYPQHrcgCZiZqGK?BYhj=5gr|YZe;A zToeZgpHDqFbfVL}yd0QS5HdWml-9YN&0TzM9v%Lc;=!anVAF7YZCxl-SP4e8fCLs# z19l--sL-zJ=)WyjCW8gj9d5u@Dqk$c)j_axn|&HNTQfINEQgzX-l#B%P@^)I^E+~- zc<*x^eWK+*yK?_~bUcyp-TzMR*?;fK=em;r1l|8W-^~5*-H`uiGi0G9&V)$!-KE6u zXvL2?!UFdyPM^lw1lbG>W(4RQ*2zhQxOHNHk=sE3B;w*HZk4p}Lr2W$BpzZ0VT@&R zQL9w$YJ7(a(V)R#3|54V({%fd(X?H zCU@>{()g~HHw|B`vs$sjSZirkO7pgtJdCoC6^?a6Zli4B(H6s(bMZq6)7Oax1j};B zH00!Ix^n{6i8cv~%;-Q9>%bpn&Ak9RUk2u_#EdD8YPD2$53S-n>}B582y1*MJ(r@1 z0jKc3#>9Jm#Q-o8q_+y z<{HTKv8jWCj`cFOK5w8~B+kaWE7`3JQEnX4^QqVBnU$%jR7MWP&dJtWiVnVHlQbh*dLo;nrsY%ajQyk?N)0AiJ~&XwyLXkG~E} z3oG-}`tnkGkz=4c#M!(wJNPCSGN2xa-THmnfMuQtyC$9N(->v(&C$pU!_wXyc~3Zi zIcdv1;a0XuB&aZEn}+Fi6*7o{CIE_UEC7pGvK=O@nSHc5k1abM0i~Ifdt2^0N1y+8 zCH}+kNYa1*XD|NS?tDV-{|xuhAy7L%m|oE4va42~wpA#b@M8crrh(u**W!^e=+4mj z_S_k2@@CL7OO%hBi`v}Q*0n*#S{T5kLoEg{rPMAUfYZ#q<#HCK#3D4a+!##5 zE;La?+*GJ@DVmDTg^!d&<-Png_jKx>T`L$FyGj}@_B+oVI$5MV-UMDF3kL?S7~`5# zu2ZPU_7Kc5Q;x-ypkpmdTSN4Si_p5A0^`nVPkPySFV%|`lk@1nn6?bZinKO3R~&Sr zA_XHyjDql@gIlR%|BbS3*y7@3f{pW&rYqv03alAMo)_Qi&aJF1?4xzbP8y0}E`fMB z3HUjniBlu1HdJYTVOe|C>xW*|@63q2cQKGQn6;h{6LKfM!DLNWlw&*vyP3lU_PVTZ z<;i$332s=4BP&_Z3w4-9w#UGc!T_@BqkaOWE8QGqcE)5`?48ig)^B7{gIg%F1VtkY zBfnNNoxxc{{xib7I7nkco|hfvFVvKuk<;8tn!9UWMN4c8Cl|#uK@;xBYj9K$CoZS5 z)Gdzom{iRuzhOkmId!?QDr;zhAA|4k4DqOEqb&oI#((w z<1YsT5rfwZC-q%yXDai5W?^-3C(1w@&+*Yv{*NAz{~H}j42_J8YD0L4fo%KAh~oc8$HtPw$uVX8M@L8Y?*H$~=bi_$)!fFZu0iFvI^_F3 z90!+q3{Av?#0SxOn+T6iE(~(ii@R}DH-{i=V#1%5vcaoyD~G-tP`0F#ytuk}Hdj#J z@Faxpk1 zs|UXg5QcGTE{)>IOlp2wpITU%Uyfx`OAn`(^tp6qIW@1pb|tlv(lhDTrDDDY$9xTq zxs|iax>e3yFzgt6#Q>T>Wxt?B)W=s$L$?jf){E9URJ3%lxJUz)Fp}AdzL72EApv0u zuJr2SXeya06zhy$a!ketISjj2Su!54LD7p7Dd;zSae8HmMrK@1x>?8>0cq8eU$>mj z*okBr=f@gzs{rWc0XAGKm8*Gl1F09Ym9)8-NXplGGWN(u*4jv$sf;~AQZDE*e98jC zkxI5uO`kP02|blcO(#>E9O;lg3z=+`-lk1Aor0T?jOZ!IF`?^B`43q$21Xf3ShiZE zQ&z1AsLj=MLrFD9d9MY$awJZ!Edzq)V;?-gm7hTmrm|iKHh1?~EZrrW1 zj*cK~D?PV5lw$u9DQsWDXR+pb>A5It5W-c|+8YCH1A8O0f2@sjzf5qeC6A3eAq)@k$LQ9*SKNOF~!rrIpH8 zDlJVRD1KOPHXom^8GE>x-AWe$3DhTv|2JI&ms%wChbb2u+h(#hQSsJ`gDH59{9-J_ zp2)o7m#e%RCVQAuxvs<4eLvQ)15U<*TijvGhvbmiEbIIWu2L_rRNGm zm3!WH~40GgEIr8 zbT#tEZX+z$b5KhW2?Y3BWLicWN=## zUupz!ZPw$%l97B^V$9i~MbnWwhi}!Z81Mub&ur!Oy`gCOhus6$W z$o<=Rt^{^wl`S`T17}w|?N(_1I2<2KH9fbr1qpTLrpo0L7aT`H58Giki%>3SaU<(2cJ-!e=gyX< zvPpz0V<(fkUMm$?j4*W9LEWW8W$R3vvk?V3m4QCTQgM2vQj7QmKVet_Z9k|GX_uHl%x1wf8`p1S4k?WFU0fstqY`t2iz`)Z zgB%B_z@l$_Ms+q2J}FldqlkP3+8(xpNyFIyDJ!;+fQ+xPo4o0zh^-_AJjoLAXUy3& z3<|evq)9P?wx+2%lq4Lv%)=##hf5O6?v!ru9}gD_m91Rz+*(Y@5er zgq95^0q&ES1BkGPjLQ-r4V@LsI!Awh=zss=Tz-$U;C3-_hNUH66 zTZfafrRvEOr8VZJZPK4)Ae+@5h9c=O6i`thwE>fb?T?9J@vfbW#wb-~lrtKm4m+F@ zM}bzyt`Y7c;iE8(7vW(q7Ws0qM+Hq-Y@HcM3^};UKr+UC79H*44CoY(^j{IM zdrWS8WO^zQ!RQR@0z1qvpcK(+l!#I!Ix)fyHluY9HZAwK$~8{t$RHK#_l30BeG|Yt z1AKeEI?RqTpk6-e|7OR!kP#B369JVXJHw{V^BtBSoevOn;_x7V`DS)JDGBX zn$7U$P11Fj?VivXmq}+9y@=WQnWgOn8t2+1FKa|+r&6kOHc2v^o!Sx-sDE(w1SmYA z>usj&tr5n$r;+;Xr`nn(2*@@TcioCN$Po%=V7puio4h4=@=LrExKC3iW~M!dYbc5Ws+ov&t7j!i;cB(dO2r$ljqF5y;jjjI9KoQcSiUF7br5{ zQQ9q0)e&LHQBND!wCKWB$IY{O@6<3Y?Cg4KLga~L=3$X6 zo<%{$1a`a-mNzj&WxZh&<0Z{Z-&AS3_x(MT*s&g>dt_Owl*sAigjKKPYcckWjtdFK z5>Y&&GQFpenCKHyflJ7kyGRwv!!apPG#IQ@%Q+)os~S^~Am(1ObDJ_eOo8gTk0ia2 z*U>?fZq-(qi%isTx>w)4S%+8vDBGYaZzkwMU?FGdwMw4&1}C2+Wd{B$K;$>9J4P5S z8Xh*DEt$2McEL$GGVE`OUBg?GboCE?L1l{=G#HtVR+<&rXRIWvQZ89WXkU-{@<}5k zDjJr1WVB9hR=CdNSW9RYO;}2Wf@#*dWhvEkyrHt>UKARC(U~T6ohjSxDK9*?yi8@< z@HByQgTHeofbWeE%(y)_p|++_%5yh}b*G1kpT&&=c470DENHOJw1i~OqSm-RhQd}z zD?=}b`QEGDQzv7CcezZHRLF_w3tRp&1BFng$3n?`4a^8;VLlXQVa^c;nURZj1lx+6 zjaZ7adzp@%xPNBW8(5yq9lemg4m0aD>km_7Cc1&CLyc*Di#7zCYEf%Owlc_QR?ME5 zVjyQm*})|nvx74OCsQ+~Zl-S}Ju16^`B2Yfji(E@OA9En1=F*MP|Frk(dO;T0&3R0 z37H8?nPp~&9MZ$qvlBBVIhN_tgC-`ryrQP+3RKLLcL^ryQY}S;0M#=aw9PR?tiv0f zj>)L$=#|!lUPTUV)`X``4Qu$#fCGiuvKrsSTfruuFC)&~;JUhc(>rPEiayPhcbe3d z1GqCIDvekA#-@e;;!xd9H*%O{{fv*W`D)aV8iqQ6A!}UQLPI5wRNWpIw+F(8UeEB5XarTxwx4TO%=v?IWuKaCCgQ+Xu53a3l*bOgrjoCXJ?>_>|7o> zB8_`L#!VDp{s%QF7S)8oHh*ZqNZyG3w+%wmqbGYj@Nf@2Yk9FE+UA6W?I@Es^qm#P z#LepM@4STDdCad+5{}UJ5^#H#O$CVK9eJK&1J4o;4^??8?;%_Go=%yIGn?*tG!<5N zPol=EPWl8mqX^Y1ulXo$L?LylCqigv&G3j%RjcEoiB%g;(4rrWq*Y9*quKT`r;Z!< zbQ~A$0jXm?vK-G>icp8wc;X^VQhg1B+BgZNnb8i3kBh9GLJ)>>qFO8IX1QERaZhT^ zU8vr3(X{8H>DqMBwC6g=t?c#eI_L&wWJVYxlbS!fVlJMgT%Il(5vEQ$Fs7M#AAQ-b z^O5!&?~X}=DV7PZsgCJn@i4ASPCIVUAx*lx>Dis=;4tgxI_^idVT2s)o#gmV*?&(Z z)0qjKZc=ZbzTV)@$57sswXDK=DGiOB)g6LTkDR1Zo0+pZ?wHCb0>*4b2({c^@-Y9@ zN#lBojcp@+6V^51JrmwB4fG5BCC1*z3*0#EW9O1;pXl*+`KUf z<({*vUHF}wS7w^~Kpl1YP z>3n{F9IK`qvdxO?P>)oW+ll0aok&!x{lb#g#UnHWnYk%rc=ASs|A57_-2cc8J4P@N z=lFC)jkd9sS_~Io`bKdZE<$h2?%WI7u;(9mXM4Ghf8bHORxu5JQv;3$n+%<7VYrMb z$i6#0R~$--q;487j)WfvbT~!>B)W|#Afe!c>lc)01d)@d@lC_4N!Xb^V?z}0$j75L z2ET4&tflEU5mw=e@aZ=ZKK&+I+ZUFE|giL^oLb=Cl+-YgCxJVd0JwF!4 zszlgS`NxQvRJG*J+>1<>!e3+jZ*#Qly537$Bxculn|FemHD`R(FgZ)PyQ>1Z-a$97aT ztP$gFK$LV5?Sy)t;om{?0l$iPXVm$Mvb``n|o!1ep@Vpq0piKNkZ4P@48 zlvu0LNY-j+-Q(_Djjif9E`)=t2AtcC2pM7XBJb8r@>C>^TjT|(Seh`%3(6g6j~61$j1p-KOCk-~ z?$oPcZB!@{h#@+AvR(FoA!@9hFb51SO11`^Y}pzx5H}eEP6imn`KDw<8KZ5m1yssw z!4y!z;9=Xw^hRa!crwmR3z_^Tdg+KT8&t|{ht*)nZ1WloPU@)qEGi2%ykZf{WWu{l zZb*`UoNmJqvf|QNA8+^_-GPUoZpIeWJ7)(l2U1x%Girp%RT%nmro(J1XFAgYmg8Cl z4=f8ozCymEZ679YR=5X;*dmU5+4&oCawe0mN{q8&OtxK5#lJlbf1p-lJOq84w#?we z)A1%}re(9jt`cr*0JOW%&ofG3jrc%)%nR0ASo&bKMR`wj$OZ^YOq zAn-?XN(A$BE9(I2S~Y{u}de%?rSNXg#3*_*0?mBggu z4U0*WUiE1kP2>XShGHQ%S=W!sb-nh79qB0wX;MXK=QwVv>s6>C4M?_Rr&lR?6Kh}H z9+ZWhWM_NE%oK-GzFs7W_ApHW9gq|asKj|#TB6(WkVUTZ*!773C(bQsuYx2wVcM&D zqM~3UntJ$KVRFIZA^EK7n)-o>hjpv8t)JyzuS&|Z^M-CbTFm6 zQKjR}QXntYP@3K>*{FMcq5-LSJ$YZ9-7+GxvJ?4_BdrOn>s&o-O)@Np{@cc-sD@$! zM)$YaTpA4)7%enb;_tOMSKLdD86LoI*RCqnl~^UWDX|Lgk@`h9ELW?~_3k`|pt;!q zGn5S7$9!^vrUL#1vRFQB(d6=MbM%tmH_O<^+w3&5r9IZ=Oh#S(i>Gc)NIYAg77CRf z)~~HQ0(In%*OAC)l-M@EAv%yfss>*htu~-Y-E|xmkl+pRQZ_klZdSr{ZC$?zxYFdY zf!wC*Cs@GJg61dW#zISijwba!N_IuF$8KQV^ijV!Wg&GYN^++@Y^>kZn(ewT1x z=bZwy&JDn^J^4)?>*l7}qI$PyTA_R{Q#39arChh7nilr_rdklR=}+hs=&u3MPqnhg-|C6Au31RLDc)yl*31z;nR52WX6$*IJleaaIup7$)+izA z+kZyK(VFCCjd;S?Cu!#IlvE&rv%wV$Y~#pYmnm!5Ze$w=ao_avtrE0+p@kN@Sk5l% zuC;}V$ZROW+=_?t4Xw>6AKy@)FNvN~V~tIz8D&Zd z>GpQT>})G8xm$5mcHxuJpQ*9!GU0fm15|Z(V1AllZAA`5+QMmSM3qUl?R+nG6bjp; z+{&HyNR@ii!rtSG0GScSa2=a8iD-HVE!&toIv9jc?39d}zXloCA>>@Wlo(OI1_&^p zg$>f-9U_$5HT(^xma-P*MipH|x%mmAk2|w3wc_Qc5hA@qL{vG4L=ivayS&MBX5I#l zYlPdi`bjaHae*fglyF43?G)5&M7Y7N=Vr9&`y8&HQO29OHB5_H1>52npvsqvdN!9c zEX$SR*xB{egvb-AuwGo&7t!e&p8m#~yGRjb71z*NM3q)~k0O%1YP;Io#>h?+JGJZu zwuwn9?a;n0b6ZnxJ3@VRawT?bat#h@O??tW6a3d3yNsk&D8l%!Sp&IBWuQFBAy&?= zxR7i`FG5|jMAb`q)2MphWvx;oN9w5DK#rg#(oNyZ&4ftWH8|w0$B^$g`#Ux=!sEgkr_5JB@?*cH&0hJ!>_7e2+28n| zhw#^LJooC^-p|fn`O=ltyD+1Z=gMc{@tN5xzc>5z?FjhHqJ;7Dsi&6V>*@;Td1ms; zmu9d0hDe7mW}ki#e}5AHFmz8JWHqThm!BOTq1xI9>D7PyP1cTYK6K^s7iX{3p7k|{ zWxbO6%I8yGOZ@MOHX zSH1>affcx!@Zb8j--f?me-?j!CiSOJK3A}hKKWe5{+=hFOW*po9|rI@a1IDNzLU5z!E{@q{y zmv2A+{JX#Y5Aaviz}u5US1$h<^yHW7_T-b7|7?FP3!U?&*{cs7#uxPa$!CuSweE;$ z-K{_HKCE!VEreqB)sD!;eB(U8I%>B_Rr*GX<5JMDY>=eU-V7LNXR5{SeYF4HV*kB) z?cUiF_ntd(ZzguHb>iNk;e4!6*&M+?W3fuPYR5K>>T20CVu|GVz!3bGh!swxPgG9C z*e6|r<3u5^VOp(JE3O(V?kuvT-d!5>Y|5GLB=hN=b_qspdhd*yReCY5`yGRe>Zz}W42mWCc(sfc9|A^T6 z?|=C)CSkw7g};xo-~Wog?_j^bjlVVa`+58w?_#a*z=t9B&_NFq>|q~0Jj5Oj(8DZy zI7knR?BOPQIL{sqcNC$9Z)6W$9Tq%nu!oyFu)-DgaFiZw_VB`v8hmZBhZlFuz}FM( z;UyhN+5atjxTE6|V0)51ytLyAJiLoN+}rU4e7&1J^mlv+zTVFs2I%1#_Ap2fA7c+g z^zaGxknHG(uTQdvVXE7+>|wOy2cewbignY|2WS}XIPgr-8HNwxPyYKSvAKL0K8i?= z#tt2R0APm>{}Mdij01_)zJ+bHhYsUt67+)tdRy!WzPgogyt)J7?Ds>`?@9W7=|EX*oaN<^H_l{JiNdtkccE1J7MB#b3aocR%kW_#Rei{P}W(zRFdg`(brRdL|;#TgT8(sb`yU6;O+GF zo>$Y?dtXOi@2k+)k6xv(4}6rqe(cNi_2bXc*E4q>!mkhCPhTGyr>~Eu>FcKo^!2fK z(brG^6n*{7r|IkCU!||VKS`DNhsUY9|M+bJK6mF~{Q75;zW(O`ef`Th`uf&8aFAb2 z&3*nU$n_HX+0k(a{2L-HUtl=D%#eMRA^R(a<*yl*zh$VuhRE*B7dB&u{t(e%#=Azu zA6ViV(VG27i3sgKz`hP2kbrj|?mUU#*xxj@Iv=2w|I(^ajCDSUzYj3#(Ru3UA+l7Ut*h&5 zOss^i?)Sx5HlmI%qZjw?f6GCfwQqyJG|}FV{owq8H$MSiFV|QZ`!K~X;mcoQFMk!j z?&+bID^w3m@JCL9SI`^dL(n3ec6Z^j;J^*)ubaHU3)m62J3v-yVm}fEoS|;L?n2VQ z{#3D`SK?@PzIH#32To#IRP=`nf~xsKe8Wle^g|kviPf? z+>Z~R!&jg4zCU#Mi#Oqnp>a8gzgdnC5VGe2a@!_NCpU`yZSdC!ou*Z(I{y`Ktr&6;xy zHRscZyq)Xtu8C>C@V{o>v7`%YK<1m*p2a9kjH1@ps4TMSqFU zJ)Gg~_}~5#&>UllF#W#w%<(6jF#F!~(EarEy_k95dlosqUKQVK9DIdtfv=Z%)c5?_ zTlpg*-2a|Wyp>_RpJQZC3Cz~%FvorPhrKz;Yt^5Nbv*df^!qGy+HXMaOWnNF_Va4p ziGM%r)++Xen5fp@cMF7f&m6>hJi+VnGFHpy-ohSVjtTd_=iU5mPl4Wki@$wE>}I)| zjKM+}RbwGGfY0uBMwpqc)>l;k{2HD*ne1*d)sjb^NUWz z@W&khz5THB^Tm+*h)Deso*Fv*4oZCxliWGb@#;Gn%F>baZCKD<2dU9_-`2sJSUQ5) zUka@{>^AacFLvq+yZr6ET`$M2MI)5_Ss zKjJhUp#wOId|eP_V^qfZ$j3_g^Bn)apD)j|{QKKMGCKIYZy(}60)IO?{^iIm@RwwJ z@ULTVqg*rwYpb=AT^qEjg~3vJQ%?*J8p(dTZ@QMv8G|IGgtxiD>C{YYux3>U&BE&7 zdM-D(H8G}-jr5y^Qf;e$y;K_C`<@o)d;@NN6zx9>alqD}Z$JN(#R{q4{0 zzs26%ci)Tl-?jGS{*A--;kWkpre?K{wMlYP@O^nLjJP0xIo{rdP#AKY*K#Qx4T ze7x^JU4;Cb8^3z^QJ(&f5C6@FHom;^#lw&8yZ5#aJqbj!qXQ~!ls02kv;0LASAkpsTUVZ8&=13rM9KnCNxMq#vtZ zHuHtW#as-Y;r|#@GsKFkrct8o7pn!^AOy9NMXCr50%q!MZ>bO)AOi; z#9HWUW_I0*UCeD{t57$+n5|wgsuolqW<-fn$fkC~a4JXvMzdU6cUqmRRhO~JFdOW0 z%`~B8?1DFyOB`nA`8T|(lr8Lma?OSo*yW2kYJ!#BWGw)kSm>Hr&e~LpMt?jFyO^`f z#Z`IEvR=&QF4QWd3X19FwKdDIW5-1w+A*g=rin+JEUV610eZ0IL0S(3@!UG zi!*dpVF4CfwTx^vw-L)$*K@RjU<}YfOU&LxB{MWfr^+Xi6WB3TqhwR(U{_*sUWuS*PJRdvhG7Au?3 zkrwu(CCvub3-FlK6FOB>m%5Xthx-x+LwARPWhLcSBIfqrnfVoM>i+u^Bii`D=)jQH zU$ko_jdfjae%jcEPrTL0Q&dJ6tR9dj4@E7h`1s@8tA4KJ<7Xb@19 zRjk0wTPr~cSQhrT&PBGm&c-FdzLK#f=swbnyhHsd{|NgUc9yBywfdQE#*=k=N8OeT+$XN6P$p+i!t6nccnPfK4ux!P3Rd?DHIE)S%7TN z5=cF6@@#VDSbuvOFOp@cMlwACNP$R1jL!mISfLWr0UIuQBAm(CM%L1C-oToi@OKr_ zZ5`+UOmwqWEXk`5%FfUW{DmR#+d|+k4uQWU1b%x6+|T8IFZ_F+nc?8p_A&)Y)a?+JnbSP1;zg}{F{ z1pXObPfF*4Ie@_Vf-Vpd-g_Jwe z!TRBae8_~{W+4QRdM43d=Ve<`iG<7`!RsjQHz#4v9kzR@dPwa6bV&v=h<(%$a$8rF0PkK`a?ojXEK87lCJsx>e9z zq;$9nzx6!(oR{EtNN}Nl#$mfjf^SOc@08&0QPLmb&p$4~4@l{MO2TuO1pm2^^q-Z| z-z~wvu9Vx)pO1F9@IzAimvng3kMs23)8XR(9x44ghocDaF<%!|B3|fk>I~6!CxW4e_N{0D<$|JD&;=K%l(Uxa=#u@?tc#{_s~8Uey;?- zS%S;sHN4MTA2D7zDZSip?^M!@etVCUUatR-NpQLTACcg4{XZ8{pWj#DKg;1?mhi+S zJbxKd?tfSC{1(UauOan6v_BZn3naK)|9%NB_cJesc2F$$F8-`3@R#%FhZMM=7jIPH zz5H2lI>?c9$K21&5*)dVf8_0afdcH+Ipq*MvP`sK7tKpC3`+|2t3ry$XDWm;1N^U*zyj1^%NP&-W|vIo|P4 zDezUE{znw}G>3m&fsgV|{bdFI*StQTRp4Lb&%dL<^Bm8gDDdMP&)+EU|Cf);|EIt| z!0~)rfya6MyE?pZ(f*exaGm$hD;4-To<5<#|A?1+N`e27B5)S)1^#?qf&VGTZz%9@ z^ZHj6_K0pWx4N1^zJahcN{{!rS|x0)Lc0 zrxo~7{=A~Vd-ynJ75D?ZUC$`+%e+57qQHNeKmURP7yHnsRs6hNf1tp-`14;V@JU{u z|Ej=W&HLdW6!qvn=#PR={0{=b^|3d|SkmLWV z0>8lF-weSc@(K7=p6)gU{vrPS(u2Wx#ufM{Is5?y{vY}C83iuZe@20e{?Zlri#h(1 z0xxhpmI8kb@8@R}c$VY;v;zMT4*#tX_#Z3q-xK|;z`x3$J8tsAzsBJ&R^b22>;ISn z7oW!!c#5~{DFyxxp8ls4xZrDlSAqXNPyb&O_$;r_KPzyPKi_r83xAyB?^ED|9RGv@ z7w3W3DDW}fKmSI7KgQu#6!bDXe{ei+QQ+_7@T&^^n|!?9r@;S+ z&#Mn9@beu0aRvT*UY~!jz_-|A?6V5|S&rv-6!`zj$MH`T_$_?C{f&yBr$5-`g%5G~ z3l#V-@cO(=fs6A?N`c=g_;Uq*hWFcJ3S7va))e>>Pye_A7j)|TLhAoc1^z6r=MO1x zA?f{51%5m4w-0f+IPVB~*(a6s2RZz63jELcc>RF_f0Wnrs|x(@IQ;8sdS1`}rqoBs zF%NeK*XJb)T-4`21up6{qQLj_ae1iQEmxMBr=|3=RC`{*^JR|zO$z+`_&7eHz`vi@ z|6NkK@_F-vN_rtz`Z)#uLmdC775G~@o-Zo!4PMVbRp7n6@V}MnBWow*b9a{n7qV2f z{(^s2;V~)webTeWzxOHW&r0x@N$@u+>BT&e<%hC1<84ZMG0$TI)}^AIU4?JE%Dy+m zuc~2Y2W(WA59G6UHa4(oSpY4w2YQP?@z(%}YhwfJxtz|!`H{X>Br{fP>vY>O#(!s5 zSF6UR=XI8Dl3OB$c#=|>g_0p&LnQ<2Fc2l|9mti7=zt(LP%7KTz?u1#ev%|}OvZ-3 zRz;QQzy10IsUC0aH*P`yE(3h z6!_PA*!SN{avz)$LN9U$|GtmoRPDsx8e%x6mfy#5s>z?=fMo@)DbI;m@EQ{N|3QJP zTFO(g;QBwoJNSt@6mPcqEsQ=%E)c79*`gR@E}tA z?t9qxveIC+{Vxc~|1Mttm(|HXn3&MyPrW<-!=vNLi6-y(FTTV5{Sg0qd+bI0UjH{M zvsW&^|4Qw>$}R3EFTWQ~bKigYy>!p~*wxf~8@(C*bn4kp;ac-L2Y5R5rBA&y0Q&6g z(~AdYucqEVd*yS#zE2=|^0|&%-}~&_p0$V8KA(DaUkr-B_1{0sbFE!TeU@@wNqyq; zsgGf%+0UmwiDiDHfCT}{!vbYjAj&Uw`B45}l#`+C;wZ7g-*~a-!no7UtErED3d!$h z5aQfn|M-)aKmI%`CnO(K?2}hMJA3uqC$6SGK6~YNc-AMMi_Qj#Khx!w^!8_O{o#nz zP>WdY<=k1pr%dYVQP$&b@~bQF<-HU!uvp2!JMJ`nzWZp z{6tp}#$TlT9AngEaA$&x|4QnqCoex0J*uBiy{m&7zVfcCsi!7Cd4PK3_da#2GO_9m zw=e&`CiBCJ;NM^7-(O+XV?99&=GSL_fG4NbBHUA8=i*p@dG^Z6S3ZMjB4*R<)91bf z6{VqXV($Mij*L5oQ3b$+rq%UsD5mieV4$S+@@y<{y+p2(r?$CDBDxISpPYM!O;5K; zSFlLoBIN4IQ=-CGKJQ||`B&3CYd-Z9&o5IX>e$bmh)GNF?a$h;;p^%BL?xcC97dx1 zD+843vvLKI6h{rpH)frcc@_RWT{(d3>Q|0(O#38EpQuNTqWbyCZ)&iaeQowi4IPYp z&m;abZT8J@+0Ih z+x9_HC>ge1vCE}+Z_FyAtGC!H8n>f$u~BN)s5~>Zyg2Cfx+E-;*Yesu4{CxJehgE- zLCerP&9bvq8-1IUG<3z1hdee`rd+Y9W%4unrE>D0hN>1y>srn%7$sX{4bbc|{Hj%R z2J05UC(=)qOC=*`V-`%rO3&J?RBd2jAeLh({(ttq1HP(a`Tw4qgj_D67el{PL3-~< z%7q(AGlixY0tASLfGL0lK>;PkAgG815wKy$3W^FS&5lo>g3p45Cx`_*R{k@yv*+xY z+zaUQ{r=_i&*zifJ>Qu#yF1&@J!i(FB-*7G_d`JoO7SUAVd;#5sZM>y<`nq3B(*Y~I6J&KEO1+7dgnKctisCiJad8Gx#Q}gIy z6r&{tQ|5T8)f37&rD#?u2$_6Q0PXvhfldkvN;Dr4!}YI1)Fx$wO_QfI)rm~A(Oc?g zbj26bJBPb9-2JLfVeT((auVY&UgK0khlx`*{zBYQ9nSRFc3>28I{yBnO~TBx;m&Cu zX&vTTJ6VNEv;*_FBR}SGo4gb6rIPH6{$aG&HVH!~BsK|yZy9QnFqqaRVKA*t!eCmP zgu%3J5(Y19lQ4K;n}orO5$YnEE^L!9cww7_!3*0Y%p$L05(W*R*d}4Hz_v*kys%Be zpaF?fFbRX!S!|OqXcfga34>1qY?CnfYLIOb1~1mCiym}gn}orO@FrofY}?dDKMP-Y zsAdvok=+dI7THgPqt|0~wMiHhf+k_`hnQI3%WxHkZE72TK@?k)&?mg%O~N3q(j$y? z0;OYpTd<>i;I&P{RM^R-PO`#I)@X)hio-V&0;Wlr#!h4m?HKw(1)8&TMp!X^}+MqxaKO(|?fVRH&wP}q{fRus0TFhF4&3fofH zj>7g7cA&5$g{M>4iNeklo7C!u}Kvpl~3C zgD4zK;SdUk8sRVshf{bag(E0TpfHibBnp!$3{p6f!ci24C`_U7EDA?cm`Y(9h3OP# zP?$;K*%W3`m`!00g}D@tp>QmP<0u?Y;RFiLq3~P^CsKGGg?SWCqA;Jr$rMhZa4Llb z6i%aXI)yVRETr&!3NN6rh{Bl^7E?Hj!r2sFNMQ+ur4*J?SWe*_3g=QdkHU*6yqLmE zD7=)y`4nD8;Q|U5Qg}IqS5UZ!!o?IWq3}uyucB}%g%uQDO<^U4*HBnR;W7%ZrEocg zD=55}Q+OMNYbd;(!nG8xqi{WicTjjIg?CYS zH--05xPiiZDZG!u`zd^Y!UrjQh{A^{+(_Xg6h2DfV-!A4;S&@-N#Q06H&gf&g-=ts zg~Deje3ruJDBMcnHVU^>_&kL#P`HD_ofPh(a5sfVDExxLFDd+r!mlYjO5ryYeoNtZ z6n;}^l6z5z~h2qqh&0j|?L_ts>KRQ}&j^Z)*|4_EL7 zxV*;KT)32?EB~OVqIoThuIWcn)maoR%cJPpGKyBLq3DLED7x`=if;a#qFZ9(FuHXB zMYoNmXze_T?zozwyKbcD?hO>(^E^cxKBDMe{8=Er=KW15dSEC;N4HYRe)yp#Mn8@v z@K^~&KkuaIm#ZlH^=^uO`w$P_^m4TScs)PA7vZ<8=J5YGN!g=h?o+}(QNlh|QVuF9 zpDEFYP*@8x*+d4o@Wz&#b#O`sxLWyY(HqvNZ(7J}4W)fnYc!BmYZ#{409UQyeSoJ` zy;@{|YpKnje67PD#59|}sWozn;-@!vH{1N_R5rz*foZn^u3DM+<^}IaX+5shA?kfU zuEF>UL;y?l6IRgdp6WI0L<~h<97L)@be5^LlXjNs_T3f^s+QCllp@Pf<1``vjZ%Wmh3a9_*eD!c zI2w&1rV2D0(^uIUDsT^icZVsZBER|)katETU(yQ5AJz_|oXffbgXd#SYXFt!mW@QvG_@(V4}^^>0xJqX9Ij#to!NHEs}1s&Rv9QjHr* zvs>J7npERP(4-odM3ZVCv|Q>O4HSt~R3e2ny%) zqX>J|q2#Q(d?=}{xA%2+eHX4A(MG7Y@oICfw$N$|x=$j>|k2MipzxBX+T>JWM8qsph zwXNUzlX?*kGtq{=Rh`vAMIA`g!9yJ?)Dc1*49o+7x#?HiU$ya7+g!DsEiyKX=GO2y zYm=)p_m8@|Ve7xyt3Dhz>eYX{eSQ9lsQx?s?c~0Zc5?q1{0&o8{M}#FVeu=7;;@a8 zjoQAhCk};=(but_IMm&=`nIJny0iW#n5{~Fib*cbmrvE#d3^13v-(F-vtE_{rZuFa zRr;r==+-!VuJWRjB?)U$|F^~sw17VhVaG`rt?>0d7M3nrU04>@$EPm5M2S}~2CD{c z*xq}7gOiLavp>gI>(%ObvJmFX#&z*XcY34V2&~fOY}5yno?d9UqETPk@13q{w*m0p zq~Oz4BR1+c8=yYadz#|g8IDymIc?D|_O2MGFEi*elioqFn$U9PT~Xv2;KS4a9~PPx8|#=9-_RDns-b$j z2bh%f8GNOLPx6q7YwNI-FxHmvnJwWkmyfTwc%&rjOI`@u(!|@U8yA(pDfKsV| zj!{|xk2KZ_D0M5K)UAMWUBzMf)A&je=HfWPf~m`S-8`xy>hfYNgrm3lFVxuZwq5o$O+$oD97BYsIfe-19YcgoO+$pu97BZ79YcgIsv9C~sSFXeavLIS?KVUh(6$HL z;M;?3tJ@xIhpzy&4`+L@Lv`DO9jn_OJYCuz>=efKU}tH2@Qi4vv0HatNOv_np01RD z>UTTMa@x3iZKJdFaNQn*^q!!G7)K4g3^jnL-qhZZ=;JnF*wE=j9&Mp{g)Jl{O5T8bF+&0Q`i6bb`^^Y%J8??zhK5o8!)kdakc(aql)FlkesTB z)l4Cts>Maex+4B8i$B|P#`GgC%YwVn5SLS=;<9e#5ELtyX|%Q|2AmUVoGZ=bhAqhWAQ*%7+2Bk&Jfw3cJKtr6Zgc?jq|y9JKwt7PMGRvTQgTLSWM!nQLS(0mIy*O* z8zgB6xsG$!StjARg6)=oKabMS=6ew4l`3y@~||)9HXcy>1=>c80Eu8NEid{o01Hz z3mOmROg8+9oXQ&f=>fSj6= z4LR6C(-NU|(q%uO4uF*oCgmuTMY@8}eS=x)!5nQi)4V4mDVUv|mkl`vlWpsGb_1j* zq_M6HD|n7^Q6=9lCY2yLn3|Kob;e0+Ak-Hdeq=&+4mOzGwG&cP*>)dRDVUa#HC`7V z+mr0~IfhJid*&u*da^S!p&^n+Lskjnp@q>}6iJ~DA=ILxY%Wnj@tnevS*nVN2eb0V zLJxx|6?%ahv)MU7Ny}EfG&w0L)3NbLMLpY{&&ZUK8IU7EOVwKK=7j zGyC_&>cH-gZv!s8OE z*_pwll#waWn;gTHRF(`%+aQH#H-D6t6Wf*OgA0HM=0MaH_!? zOb_Ly^ct8hY>DRO8QTG+tc)yY@q#JMRzdH)+{~cr-KwiAbFO$#Mn+!$7kmR(~P#|v1l)l{hiee^^ug3Io>p;tY(N_{UND}6FfUJ!JdqJ+oMVMtjv@& za~=J=t=i&ZNN?7u*ES9Jq6`D?%ZR(+?Sx`jOeGRO3H-tgnPz)GHjoyKh(m>MW! z3}vHiLQ}h|QlPbE)vjuT!Ul_-QJ$2Ui^~Z2TWpKGsC^w1#x$wWN(HsDE!VQqYZ|rOq`dFI zmWSRGO0=g1_nUlq<9hS*ot>GI&Xe@t@cyN?np=H3vwJw~Pk3vPZRkAP6MkAYnK)gfyv^d{L|t`QQ}6rMQ34_$EhV7RAkwX*(%motDX9U{usH)h zfCxypba&?lNJ&f@$pO-_ksC1BZ{NRuf1K;=I@iv5<9Xh?@B4Y*`d6N#&68iBzGoXV zSb2W&-}$_n_J2g>UHoqZQ^gZDi%Y(pwib_0cV;15*~(cLx2tA-f_v95SM3lFjWuK! z^;&_LvbR<$A@!b-^PZG8)lqz(0b1XFf+sW^hX3vw&M|ldx z8f1em@{ynZiShpp^45~`U>_@ptItAZiC!;uWnAQmY)oeSNLGAijC}wn=i!l*^!9k} zWWvY0=)cf2rk~LTEFu|pD$b7G?TD>D4ayJD8Xj-JNI6XOJjnYN8Pk=m{j}|Go>0?a zp}MjnkK)7;r166TcT$3|m$r@res}GGQf(w>T#WH^S?OfP=bJ2dxAI=uGbUB`R=&4Z zesM&N3tz_BTUfGm&eg>g$_PK}d&P{9s$4y&t9*Mn0*zxY@7u2{WqlYoQhXk^+;1$N z=bb5@v{1(TxtPX)*R zW^D;5D5^?U{{7gj!7bBokeH<8wX3OR6EaygL2_1>F*o`}NbY1_-px}JsEgSxcuOJ8 zl>0@@-aP8S;8C&?ue$=@v%gK8L!(1lul0J8X;W2Q`~aFhe1hR1u5MVZ%X4s+Q_Wa< z=LKBjnP6J_dki$8cJVEW%cklB*hA&J&~*H1>tNnVF;{rxe2%q&hl7fqQE7X_{m}bG zP_vh`Aw9;fxd3^`JYooP|+UOi@sgdD3Pv&h7_l`&pl*>rIchj?JzAxL ziAf15yBCmx6nYyu`{p+ruNZZ7O$)w$n*N4t{rL#OV}B5{%D!MI8XoG_0?1{qq%lrj6^af)YTRB zvN@3EM_T!Ka~bYk#nnpx4o_6iTRrEYVfKK>Bwzg~xU1A9EI!GCI)D0Qro0dk9Oam4 zn$!PS6%aj1B`*YBi(K&=4OcND)ro38z5k+4)fVk>&KyI(f6%O%iUfKA!z4H zP5ZEh+PKm^$G>H`zk~?Klj(#M;*O=UQgvl{K92K@xCecQS2jzX<7xWWnmzN6_OHla z3Uj+a`Odh543#!zsy%H}S>xj>=efSpQ?FrEz5t;3*;Vu* znR6}E4g9e#j73cpHGd{$m;n}<+C6-hsnkDtrk$?mZTz>}quv83Rgu2(r?5m&RN^%x zVpp`|Xw_duTJm?X^%G9XHKD}E94mhaTv><4>fh|+H@Ite-hoqQpdjd}@{gKKG(+6M zRIwQ`4s~K{T=FPFiu4h4$ZUC+T##Po;4+xHiaUWLC`++*4$RYU53`&gn0AFRazj@qwu`%muSQZ?XA>Tp3Gq#!p^ zS{**;Ckx!n%Uk`k#16$XYmc&^vJR7unE!BrcMnt~~ z{hlY%_fJ)z#Y{D`6U`y07Ixroz!avXE5Z7XaWD5+!Sl6x>4y1x2KP&_#-ZKD<(0BYE;14D1{n!)5LteJ{)EZpFl=8YIygEYqz8B5jq2cF4{{d5njOX_v? zB%~Lvo2#bDjlQl#;})bEs=eb;C?|BL(zgiaR?C|EMAG35x(p`>=gY6O|57#LAx+Rs zB^xh>lct*DCfa|iOs~3kwM)N3VSNAe-(A+I$HPQF;XbR3w{<=U<3X1R;nUzvq90eO zE`_Ns7o@*z&4pG6)%1B^EH;yRT`ayLWFaWS1?h~pVY~}Nz{kMYAJEJjbjv-QaDMM8 zb+qrCIc9N<6!uqyi%5EL(}qa;`tYkt_fd-<_Yjcz)h#IzH8a+k3wW&&EcFSuO#6>B z`Y}E&zGnODD$h_{>;q9444QeR|CVhv&)acNd?6dJYyZWEOxGL$&EF8jk;%9lwN&9;@h8#FPAm$}o5uDXX z+nOUSM;^w#y*L){JAv{u=SNI9G$bC@4_{=( z>J8L!W^~Woa-D>KIlcK4KQ)2GtDuz;xK(DHbLh=`WC?5Qh3=EZx-w|s3-mi8ln2sM za%nU8>xf@!-IB@fK%{mvNZV1N6m;_u7ZII5cM zEmE&NzfNf8{x}2a$}+r$?s69C(BGMJ zUqy5XG`BxwBSACBV%U{2nFOpyMq$~Y19 zz&H0?w@2PRST}(8U{EMDwJd;>C5vNAN(0xBW zRw(56Ne2ba?xxcaN!bb`$TbkVyMVdv=r;iTf7`h+#7eRIZ7=i3?&^H+TFv$4mC5&>ZZ~v`H zBkL+Wq?#YyWHa6lK>X?UAz4Yi%%rrrw({gbb5*uXktn6kef0vM#!ihmq0(!Fo*p{q z5}w14CeQLVKrXb*xk4c$`^dilgwstN1NJ;j(GV%>6I?tL7MvqQkB#gUK|I6)jalhAy!pEq@1`r=N!@n_jcNLk)~W4Id8W`_Gh7N0i69e+hC~v z*75CsaMX5)=MUdjh!Q~qwxn-I)2bBL$%jTTLu`@Rtyy?_Eay_q?bGvNtR{dHaf1_w z0>`c{jgXiVIczpO?gbtJ@b0lvDDz?#BF z+1r!%bn|w}^7q=w84Y&CrUp!KA50<_Aa~sNA@NH5xvUnF(+B^C4l7?d=mAA--YVN6 zML~E3U6AIMC`~I^DHICFzs0FQ5lFC%IWiU9nkI^FVFo@yJ9dhg+{4MBAk_?5fmys3 zbbni_g#stU5xD+bZ zInIHjgdeclzrn4Ftgr-E!&l$o*r2P$h<-rs*eU!26garyPz)E{IJOW#Z?}buKEz6h z-~rIp{?mUCq0(C?CKNcj9BH$AIEwMWWVq;BK$|X-8g#wFh4x?S#!z(rx1AnI(*1ex zobG?6Xi!HUfAeO-HgtL&F=D0nCc*kD8$i(IDm|7E(5ccd^q3 zh0dNz18N30c6gz=!`F?gBu7rNhIL+@@ry0RaB5$CnIJmVA~%-gXfs5T39BLE!U_cv zUf%^kqR*FfktCG}B>+BQMENz6diMqf|7>&n6TWyX!!C^OTGAg+@eNvG7DRtlKvnXm<-=&Q??aFJ1-qc zQ{tRw@rMBA)Z-4~?(FTZ>!;(J5H;lIwyaEIuzbr%1AuezbdeGO>^&jK+#cDb0#k2n zPY1c|d^!8?K%3)AL&(vg$I-@G%;3=4S#$ZG(LY63MYcf-@s3w66n6 zLvvgdg&2e6k6Pv^a9Xq5!bW(T)ehp7*#8+2^8z0(xr`OMVXJWtx?Lq+F@iaYpFs!1?ksbVZv&4F%4@YZY>@^UGYv2B4|Xf&;y&>5~uF4E^|U+Fm_r(EgVU%F9kir%pC!0kO7>0XrKjtgZP#e zvmHYWPG8BT4C}aECWs=PZ&n3Cig~cd=(TSUAvBAPXhk!t=(_*51XO?hI+8r>MXFyG zeDD|t6hJ#Jb!(G!CtRXvu}a-51P-)%?k?24Hmk~isdZ%)#SkQciEJTR`F1@M3IGnB zC^H86<+MuL)F*42M^ zR|MSMKu0vQuzM{!Rf5@Tpf zVh8utpup)47?X5=pKB0;#@XM*(FKX7_~pPkUBb%YE3hx4{b zQ=6J@0OZT{%v&hr*Nw{;xVQzLhs5spsZlvxy5UDXad+}|q7R|fAwF-DhjDHgldQyS zANxYDExc37!=(1t>@4+W`!)cmU)RH)-yFr$fpOr+SaXm(SmYdWIv)qXf5HsID8m#H z%3@U6VLsaBuu%7jKVx`~kzH;yWozzz#vm6F1T(b8`6f#c-B-C?malMi-Kou;RKl$i z?Da5+5m-Y@m;fLGW5Ui)k6n2FUHg6s!w_a@UZbi2&Vf_3IRJLu*<^B+?74onx7ysnnKFVodBH+|LyqO*gJL}d)S}DJR^7<(wXoEPrbGXsT zHZ>2SHAtV(HaM%FY$|1^FeXv5UcqLSDwbXGam8(SSPPOcXPPl5q8 zb6Rrms&e92>^^u=4{4R#MN)m9{uoq+(1E&#=kRX&J$07w+1G@mdUsQMgLP|Qi3_|rDHw^RQy>5KCD+pB-=C%Iy5 z6q^eFU70RE(W;GEw{#*|)-2i%D2R)?EdIn2Jf%h8Zh~&7U>`M`q8fibSJ~H0Gl*y8 zLTA>weg@(%u{}K+IdiP&E-N-~m)*t3zlzkOe%+H2e0OVWxdrTkrIv)`{(`*;!*jg4 zcdvWR{@r>mc-&(0SFE<(SrDBbB=hp?WQd~4x2ry>A6N2%Dz`0-hQ|td%)|0xy*E^H zrL86Kr=nmc=4xChV+U&RWJ7^#1Y-XMM<PRLi@up4h}3ZjU$u0^_TeD&rvhTP^sjDHULs$!6HU1-~V z8mOr6fAe*O6~FbgB8U`K0Ae*!9=)08?X^slg|9R%kgwI>p7SihQbu5g$P@6CjXK6s z5uivk4%Fv4SZxvQ@4CY5D#jZn;wV3r@pPp)4RLTZ3#UE^nBQ*C;EilST%Wqy>{`dz^B0wPiqNCds~Wb5djX~NAH zgZ`s2X3pNX;^5+d*1Pmbw}Weh{hQ_x$tG^>O8zB^UDW$w`J-oEmo!gJNvIWK53kuq zo?bOB_Ym3XJApKpbr&T}XmK(oEK3EJ0-p%FzsUzCq^kvssth$^_7im*n^YA}0fjg> z8=8+@>z>Xw^;JUmfsc}AjaTGM)UT^cG!0lxi>T~W`Q7AIlG{Ri`AJ_;nijKXJ|c)8 z_k?4(u>DMWm3ZZ{{y@C3aE_MgZBn^rhiMw*1w({Dvod?pzDIqQ4pdQa3qo7Yr%Y2m zwA><(&3u^JA!=gz;OosgfBDbqZSR;ZJY#dCVRFx^#rh@?ITy}==*H|HZ{!;Wh+YC- zW*G;F%AW1}gi!c1dpem+I?Z^D{Mpd@R~1ySzKAZj@ueTq-#FNQFOrhvCZ^fXnkTSe zq8z9o(0M=HrF8w$V218L6Oo?!Oi5~co*C(i@SxQwEkj$HW3`lkrVil>Go#^Nldy^+ zauFNs`$=~ z*Lu_3=y}IZeouVKYNClm1-)0~w;PZ9LpSEjDnV*;))`rAQz;?Sm@=RB2iNDUxPs)x zjyQ!e0nQymMq#|6oj=3aTdGX?^1gJnI3EH~aP0Hp!~G1CZ|N?5*;B78dxFNA0_rIe zCBy2v2iY&h(uxl->iFlqBPFvtoWr6;TKH&ieYn64Yw?VB>IBSD&aMa#|M0RX&e5vN z;^AQ(I=`g7cE{moJ9@JJoAPhY?2^WWfG`Z$0skSLSoexlf1 z)nZPsRRaF&f}$F8lx2hSi#;W8vqW)>)vMU)RRMLEf8h z`z&+8rla_>oL`oiHrZ`)Ds3D4{Wqt{%+0*CnD2>8n4Ih-eGQBC+8dhb?%v}I(KG)_ z-Um&mncdFT8RzRO9yY3id&}q3rjGGZA)qDR*CxaIV#Am)*{SYr_ma>3?CN6z`s+Tc zo#bu&|GOh9?L!~t0{cX0vVT>5T!b|P7F&C^h|Ts!sIdmlRT}%e!t{o1v|uMM?Z!ke zQ?94)`=M=B|F!EFu4XP;jmV@rH42?sj4=4G+T;W*^mg49;_;x_t&8#R-aV8VDQJLA zkKcxE-nm|CPP)EyB^l}9ZV-ON)H06JXp9%oN(e}bf=rKyH z(WMbM4EiG_zp$vhq9JtlXV~J}OikU)jVzDGLZsz`23P%-Ch?KlKO&!h*JjJ(1CDSA z(B|qX@g-h)BaS5(BvpB&JAeGEa+yMU!t1MkqFv^Ou5zC);TjuNn8^0>8$=!L>e}9h zTDRKXG=Jz=^V|%OU$P3tQn|u@dFu4^N`e-dQ!4|Cd5{;hN2h8RICn4ZG3Cadwez1v zefUrX{CiYaHJL8nNwYIyc~1jW$VxYmP(4E8B|k-S6u2L5-CT)@%{_9*daoW@Z(V74 zr@M!A^qp|wufe4ebB^Cp?JU+?4`SXgEzcoW-SLNq zGea#yi$w`7=6%B3SjNyr=_SDEir;esmY@O=3)TAH@74OR0V@Gi;hxQnUoU&=8&T9# zgT;%hY@yi3u6M0C^;##N06+IDA4x^DdZX+9h3UIcyaaCXi~Nr1sj0i1>_aeU+0NGX z0WW)`uSeL*CTCd&Wpv>*{TWpPyN>=ikFwk}Ww9>9QHjkFPhZ-+BdRtp2M4mJjyjim#yO~J``+IN>iy-cNKmBWT_^p2 zL!0yTiWxg~%Xf^`n$@oh-`&>gXUZ8}AvcP45}vCGUa5t}nNLzhpSHxAO;II{OvE1= z6=jIqFYcxs0)hmw6eJ?+FbuyQ|`?}@Z3@;Vp)yZsuT$7;*i))38`uV#oOPg=E{((1a zz_~gwGcQfc1@HWT+>O>Jfow|)-A}2QY>P!L2IbwG{53jEVrw5bl~ ze{Wv)UszY$zNM&XD%Lkyi^C~{IrdxcO^9c#oor4ohh;^_QOnKFE6It}6~@I8GliEv z4G;U1hq&lTaK1+WQBqO@EyGsj5)vQ0yIEZ;DEO{Cw%--z40^=9vkDGT7;9_CWZ77{*pR9x`&9eWzBg)y6!IcQ(x%%v{@d zQ^fn@9h*1$Nxc>(!9(z|i*UW6xx;G}V#P2Ar1SNyD^g@}(vD1eu_Z@3EPOF&d2>Q4 zx`Wks^y(RF5F9T4HLJ!#j{x=0Rv4gbwyu&WZCX%81T5-!gzD1yS|rwBb@6K!^EgIN zRgd*EBnFy!c%2Mw5l1V3!DR?3|3d$kbWCrE|XBKn)O$kdl=~ zvAEs4VGsfm*^8=`X2j~OOy)$#2K&u*iVR^JzpK%3aq`A0~ z8PcUe3Bk~M3#~CgqI|pi0m=iLHr#0YER;WBb?mbGVe756D4JvGVAH);sKN06BFKNiRZXJ2b5>TR1MG5AYOBt<9d z$Q!~s_kT;_ZO~=Oy)dyBln3-w5S4QYfI(|&7=!Yf-Go7hBfEM~{I9vVdkQIw7+I)0 zXR;_|7{zvnK5}8;`W4iD@#88*=eOex0PM@LObsjS({VAN=51#Iyve&*2>|(VNk?4m zSr$R86j|d(ypq1D^AJnhE%GqPF9iaFpSLKnlGqh_;wd}HTjn?jRUx9tNfGv6bMRwO z7xm>Ur1iNP$L2s2Rpu68PU=XGVrd<$WPsE^_WuEIIreXd6MXU*0Er(F*G0ausYwUS zZR~Lq@-$&isSv#>%7iVk$zdhQ84R%y26X{#L_wYf4xi!fKEWIWY{?5VNW$?)s*nH& z&dHNhd)gi`U}4M&u0BZeefPnTlzJH4LPJ?y9o8ltGiIt$|e~gg} z0qzj~TtZb6P)RzH>fE!UdpN}{1U>ftY@Y?xd*dXR7j4cgO4HiBX7dE(>E399jA>I8 zVZ^f9+^Q46Ip1mme}*!nz!`Vj@t}((A!Bo63)O}Th zjJP{y|2ziXq^olC+GOK%8Z3eU!-(l2E!%S`JEb;`2}DM(6*_Y##MR+qI&|2(TcQuK zK?B;vV2)Im95~AUGWAVX4S~Rtox{9`DkFSTC~>)!h)jY>-3XvFUkbhu-cozpLK#*A z&JjYt>#nx!i=}qCkzm3y*^GY&pniw!KSkGEhNQvILsGawiok7(&bz1Els3w#Z8}Jo zog3keAU7rNZaefo>W-H*cApi;N{o-GY>B)N7K#Rc?>0u`f6wLKvr(45G#g?W2n>#0Go_7lpkvqg#H82BHHiF)Wxj29Tk5ODA^X z?(2BmJRkMnCx2=zu9k3JZMKb6=E2q8PqF@&9dBeul}(UWIKLD)6Xr9WwZirORhCPJE^;@%OxC0@msw!XSeVHzg=n6n+N=b*|(ctZ#L5%f_U z*C2JLk!m20#PCF;{_gWnOkZK|iGFTB#@s+=N#P#jumV@+VQYFW{F~29mpDt-I|~=b zbr#ZIQ8I*2IE|TxMZh<25!2Oy9W^5d59Pq>l@e%RyA+0K;m+uQ6>(wD1t;h`5t*V`UVJTCtF|RNTVP@fqCEn;#ajN2DR=8=_KmaU#3j2MyD$8z6 z>~^I+VyY!{8caF0FEg;c7zn!3!@^>w=2wr_&Pd}zP{dQ19{f!f_~QoI8lFo}dDIi? zb_ToPE8#pXb@5IE_ZF;Z_edydu8z9lh_BrAHd6T!pexJo#~Zs$k~G*%)0$m5H{*?^>`2;fk(*10iTa75$9OCZOk+f-?{v5vT| zHEO*nZTA!{M;DB*T=a&kwxVXy4cTB_%2hY>l%%Z2bwZO&?Do+@RyENpTfMo@Kb1<3 z*}q0)dHwQn{GRy|^r&P*cEIJun9MTUC&sLSRgkq$yCm^ly_ULZ6jz!T*{e{!4S5ZA z*>E}HY?GAqxjf&j{$p4rskkR1G;m=Zv*_cQP0a8r4v6c8` z-F@|} zH-5;kv>d0h)!6wD>U<{09y>A_pdbe}bwOT36G@`{>FB2o{N)*B6YHK%(Dv-ll=}gC z)^;s^M+@!Qyk3=yZEvlY$Hg(Thc@7!UfY+Nsf$u#fV}9-NR{LsRl^720YEH@e$ZP*Wt7fV5@|x_wfcxt3@Nrw7y|wIQx5b=`hr3M% zPM-Z|SI1pme|^^8p&lq5@un;_6?a8HXOt88>@LVOE6;9Z{9Pr&UDdR0QQ&i2iAh+Z zQ5~#Ikp^f|+6SKrpkizG?5i$bdTYi_#9P zpq7PyD)Qt5K+Kuw6_a>JsMFC3sLR0|Ef(XN+_PEiCHN_naU3#gJd0TN%uqj)auwdm z-Uy`@t(=`}|I)DwTU0YmSyn4?q|1)dmAFt-;m!Up?E|-i=FpB?CF;%ZFV+tQ5=~by z?>sHiJJ_6)s0QYZ|4z#UOU(rzln*-0SaY)Aa!rLV3WFVD6#N_*?R`oH6ZG=bVHQqG zC4GO{y*ba`NIm*6ff|fsZO*D!O@&PG6Q$=UHYPCk6VX>KwM=+M?b28|Tyeb2%B~P* z)DDaLxtsS?kyFfr$5c2yHZ}Rlh~x;LO8<`#HS+}9g{Om35vqzweOe6s9Gd^uJ^h(P z&GH%gpCcNdp#K|MVRO;3{ZSS@`NlT3&lU6I4UPJQu%P%DMTV)^seIVD&w9q8(dPu) zncq2a%xn=^$y(-G3HBfSC&?GO&3y#Kom;o3DZZ6tRhX!o4`lv5oNS2c65tR2vitF6 zbll7G!rNE--vvI*(1l{`MNE@M@;eFH2 z#|y_pZuYf&U)u%@`jxW(h3F|bXX?n;W(;_i@Jo0R8JDN)RVe9b>TppRe9*G}{cox3 z9g<%1R*=8QO3p9(z1yTG!*QhNZtFeaSd6)lWvFD61i8GWHeKR-H_5aV{RH7In;G%v znsLt30=JLKL$vvDPS5aG-P%J9zE$Yi?6m)6*uffo# zvb&uJDd}1AGC$Ss6Or2zHE28Q@~2tZ8O2MuzrSk_4tFu@Ng_aGAeVsWywVNUX6S>Z zw*h);?*p7QLIP^71H6okp35)#z35IL=Pzrse3hx6xiposSsLFbhm33qn5Y;gcI#p5 zcvl@FufYGtp!C;4VP%pI&TQD3)6!0%s1ju6^Z4tx`M)fJGtV}e81mkiy!^IWN?I(| zVFsd6R(r(uI+uZUArRvn>w2lCMvt~}Wl2Ryy(pAM8zgq&2K zypS0DPcg>hg~}MwW`jMNk(eU7_JI)X5o9@jR zOcw8ngg*eo6vX0f4Qv=S*o^&R-q5`hsh81de%*s=>`Otgt<5y}8R{qH4!drb>^Yif zV(1cdTl2ioUx!6U*#oNmhN63sJ;83+<8Z@?O8(%l{aDMq5Ib`*yhUj~j<1qdleaem zgqtlkyGf|&OFzt+Pjla>Y;ic&m5Dh~1~0ugf7HM|dm720VAFS6)WT5c9T$Ds72)D; zqE2tK6jS3#lzF+zcei#}3}36jT9qa$gm5u)k0d+Ue=EtF^zRtw99#LVSqW3zH_5f5aPWWw#QbnoU;;gv63Ji zsMiFwp>~hkKl!<>?f&-awZy|`-5>xztsgx5&Ks&r6QLXpQ^DW4Ns!)7o??bfYYx5 zeYv_6VQj{E!a+lu`B%y*+oL~uiwmY+d>bYwcZFE2XKSn&4n=)cg{kofs+kGqj< zyV|^5Jks0DU+8&I@5u_)<>j&yL0-MTU{Z3uleOn(rN?L@+~Ht8&0-ind{5K_v$pN| zEZ4Q5R<`ymY70SDzHNeRa9{r8jgQuT6IhZX%2o%c%RGae+zwjX6r2d2<0jJ_NTe+o}NKHam+XpuIz z7Bi$o=bFZWb9>)?HrSR{VGvzAzsN06(PvHk#ab%ja1tXR_=;@$q&|J=t_c#ZLKQiY zSwvx)V2QZtEIV=tpTBgPwH4mn-&hs z(mmUbI%0|6$~R62^0q_VstDwnS8e=*F{tm3TEl;AU9{U~UCkVmUeq!T;nkzQ)TOkj z()x6(+HaO{%io}?dcPy`UW{qYAEiBS8FIMCiHpn7&`33B^4y7Xw|Ah*MoPF zY~5YvVtt*m;m?;b?+IK%PW@C6zOdeZtZ1gievQ$n<1p166?0x5C_Z%lv80k!-*eE! zLoc{(@LdCpd+VI8>L8{iSvvOTFCMcdhPf5%Ee@&%dC=^OHeU4)6H>WT3JD=i^Y8C= zy1RFZH?~BkbXv?lF=1gSA0>4&D_!?UEBf&`kvJ{dBvq+r#nN5Dx+^;GqCEa|Yfo^R zBk)z$$haun?1xlp?HKGquF^o;vr4+9Xv$P8#1hdQUH!%J$>wuv3JyNE#|g6jI$yp! zfXo-TWZ%AI$n#qYFI#wxODv%FXY_7Kku5Wki`{%&S{%L>SRNDbD_6Yk>TTY{jEoMZ zepQBC+}#YN%HS5d?5H;SvEy?4IJ{M5op$5%^V79A5omtU*PVDK=QFh=m+^bNso^L5 z2T4!0k0T4YNw3^nDWE~?+Gif5l)wN_o-WSF-Nx+b)Fach=zVUm-eW*{@48Hhv$X(f5vHtw82-kP032^OFjZ(?*Ai75r_=<%#HlS=Ix=8oU~cT0V2gZ*9U@W<6sEerxnbzwUlXYf0Rb*_}3-X!EskZjCq@G4e>1w7uqNZf01Y z=PEIFYf=RrH$f2Y8?;R~p6#oxfz!S@e;p@Ih9whx!?r__;)%dm<#Qab9Q<<(zk zfXH#c2ly3JY;YpCvnw~asd3=hz~<)Y#n1o5PfxZC02f}jYCPt+`t`!Lbr-@uTa@75 z^)B6i(Q3Hw#4tL;U(egDIFxfjlCb2?cR740K)J>r<(Ej{C{8UTgk$TtmhaBPny>g| zsRRm8q{y9TVFB{kV|nWOgxM!ZbDuijQzyx&s;>jDcX$tcjLf|Xzv#~?|D4d>-#WfqVnfM zVN3G5_G!7klA@$|{Me+l;@68z(tLWvW|E=q0!@Chrnd`Eu3)Der~9ZQkmFtzgv$aV4ekTa`diL|fKRg(x*Q1);;p>l-qqL$f9(&h& z8z&8`1>gCj8z5UO|L*P><8Jl7mT z{Mm&hYXWupb%rTN8)HE^cK^B6Y<9joBH#70h`!1~eZoJJzx`G>+6$YJpWIYExHBL{ zU$v((q5GG9Ss^ap+Uw`eY!!VKI5l5Vli$i3Px@`vzrZ#8zkK-^{&p7@b&R6M1d+GV z*&lOy&&sxk1)3oSXRZ|Lak_as$Cvbqb3aN5wn4+4P>5N%<~& z)xA4^$LT#4WAYD4=oMjU`AkQJu7eMv1HdX1)w%o&%V*ENUEI&#=|86L`ar8LDq6CW z9Lg8s&#PV&t}?MdJH~wINj34Gvyx!Kdd93;^v!Ho^oFny;y>pxVUzLyoU1Aa`Mey% z)qTjiYj{=z<(5lA;4U&>uawnbzGI;QT_go|M0|VMuMKl0qOZc$4Dq6TkI;1LL|rWo z60M)ABbHuH{8{9G6u_zO;!HF0-z)m3-+7+9k*W_D(UXW4xSDu6koOxWO@7aBXg5x} zBCad+Ea1Cwihi+DymLVQ>ql}}MfFskqeaP}!}$+!#yMVK3^?_%W6Uk9nWF^qawep? za#^^?rQ}-T{5ZVnn(FX3<#@43+EDf(%eUN0pqrRrL$-0O=Xth7WV6llEvavec5fz< zSB*>zy{R+XV$sJ@x$WV=-C|A z3HE;aWq&dCK%nY`BDF!|np5=AO;-N(ae*^%gbYB>9{xk?LiIN68<P}^Knbj>IoOF;|lpWf;7i5mb+!6`X#kWk%8>%gk!C(Kh;FL+4P`jl6_~!K`8^6m|5#kI9{?GM2 z;5^i(2<>Qpm_J=cq<-1u+?1~X;Fh*G{Qf&%h!{yViq^DDTD>Fli5`_$oo~_3mljvS zr|r(F-o_I1Y1xe4i4PftMx872M;noS^n*G`h8WQovE1>Ce+XjguZa0{*&01r``tDP zqK>JEv*Pjt3DWa>=%gh}v|F}wUa>!EW01++4jAYZTujRCu2Qbbq@5LUR9jhJqI6z3w zCFth2ce5%5b8Cb1`SMSy?_4d5a8RO5i8Oo$<(90Wr~a9t$ixi8&-LDcW4%FZ-bm%2^QZKhrNag*#*X zCrQPpK7V($NqhijQ(yaeK~<#s?%AoN>*R06e;lO6yasr)x5Zq>@|V6l_N3T}f9RaAEgRo$`kn9^-V%b1QvlL~}1JFk(u3 zpKrnX4y5GGnnrQ*?uR&yy7sLV89ozMEQWDWRg~zLg_GWcG1CV(P{F*s@ihlct3``t z#uf6HxrIeyZK{=CG${3#RzKCVN=1zvbm!;-w6r?EPvyhFL|*bhkBsxXr6A2U?+9E9CQb zLP!oFq&xoe=YI=9juT)Qe-6i=2a%x@ITYASG|Dr&d3030gX>NV)S)Sm@BM@l(MQSG zyHQEL)Of}Ff2ORGLb@Lvy_-;{_j_&JjK6=KgsS-%Mtby1b)5J&`u|9}2H;GZr~kyZ zZQItx=Eb&c+qgIv+qP}%VmrCuiGBI<{=cf8p5JcO?#y)0?DW>mbZf3o8A$^dz%Dc! zas3hK{p5qHI6i!s#z3h_f8TZ@Mt%k{qerb0D|1Mq%g=Lxa6nO`UFu+Pq?OwQYJ;YD zJ@vTXdw#UL80+=oZbBe-Ff^>?mb*yx3mF?+7!!Hy#*Wawaj`Gum;_u#h`PS@XjW&- z^bz@NQ|A0*e#$B!Ot8i=(_MW70~Zt3c-{#$Q!Z9Sub}C_;+W_hDhQ}N3kgiKUAl3z zeuG#bg51+3R%|VyyHG9^1nD0U){0zakotL8!|~bc0;aoVAG34)s|)#+rQLH@UcC_t z*^3L{0QO3j6(&)g^h=Chs9#(TPJYMker>xN26@vGvaV@Z<@Cwm&op=9mHnfJqG?_8 zV98-H<~5oYrfyy6mk!Ij-V5`RAE^&GP+rOh!m1W+oeuD&ldRxP%7?_0AiC!;!6VL{ z*aG$@jFk}fEWw?agOL5o`7Fd4A&@u&5>97V>X)Te{4VBB$Gml8{uZHXA(&_f7M`wi z!5dJ&j&>sUL^Ch68eEw-UYJi{-MWZd<4$S=SFBL8<$*`l2u>V_`d=X%m=D?5d@MU1>nu+*7c2vaID+%L{NgrP#_)pJkQ5jbG;M%B+_1yVVe3Ub~Cb+ zhBXS+1t8!K8-2HPBYd~#Z-U+5%Qqjermu*=roVY$-cPHRhdYm4p}C7-^#gW}pJ8xS zkE(>vwM1Htf&2^R=YjO2wM0CVft~#f!)uQoL4WarIuUui*YQ!*RFU6&xY#2=M{9*D za+>}cBpYA8MVPeRdDwmz5u=0G^)DtT21MCLJ4WvdP#*6=xaFgzb152+_@`C~ZXRzx zAg5GY8Zl<$5ea@`%YXc{u5w}hQ3%W$4}10Ldj!YoeGNYS z@%SVXF%q-Q& z{O>6pz-Ac4^ayC~y%4ulS~HjXXI6eS!xsooq}~^JKh;2=2S(cT)?*!D&p2PRjR(Eu zZy#77-Y;h+mBGtP79tI0Z#QQ5r&D)yzW1D%ky(G9>Bijw1|gGyong7yoXlG;vmG8x_za8$LKhmqy9ry+MvYTm2;B?j<@`Yi^p|JYkkd0eG@SzB326gtC zIoKHZLhM({Cnx2AHBe^t0Ga@1+Qe5~$E~3Z5R1d?8#_Yk;QHl-dxy*`T0?fhi?=y( z9GE4j-6R71CErC1k!)P45+tp<(!-E4{VuqM1y{~*){@?pMOUC^F@ZN%;fky9jdx31 zXi}dXJcG%$zI#&oye5*`xJYAGGoR~4p#KJH^=Eoi^MzWogK|_}w`*QG?5!iKX53-@hDKI8@;ykq<5^fRHJ!USAPp^%rg$Q_!oN>N3{C+a%=%#SOGsL>% zu=BWni%>{iyG6IAP_iMH?3O|+M&GWgB@&tjV3A+UKrN;`{!z;TF>fs2;Lc-ur)#4J zQcNqaew8JD1WUSGlc%|WltErd(vkLf*hH^a4re4_^Lhc=P3%F`GMTvjvwtq=lltUv zlN=Tsfot_@5}jh3-jI*jZPoN=KSpJg^-R<3^&}JWpU!drR*3|c+9s_G-xXxas#Us= z7kZITxm|li#X{#@<);nAYSO!O<-}6~a;qE9 zv@3FM6uUNS^=W-h9`e2f7*?-*?yG-1v39$GNcD9{hjZqYlz#Ld0{tpjel;qmg?%mk z9oUvX4tsIIr%#Y zAbTG9FW$_l=;f49yX?kRAjP$uUVVGYLK<;^w{gO2c>7YG8x6oLn2ZsUo`0uS!*mn- z)Uj}{OjG@tSMz=s#{B!$B?G^4AF|E;mKeWI(7({;;QqK@JFkUE$|^e?&ocx7FP^mTSFuw!EtR zJnSO;r53nA?PL|32IZa?P?k2}n!#${XXLbLONjzWO4DU+hEwF^tj+2(K}4alCh~>K z&q9LIma4o3@S^$KXrF!<>RC4(GAS9|6o9@xCDUe+b|PMT<)_P%M4w_zovgz=^whpt z@*vI`CN0l3#u>hfz{NN>d5EtFaOoiVos@M&$qB4q^x>w zyZfaJUYxYkS>-`PoqKWXce+rHolMi0ejJK6Wma9tiYSVc+YF6~aV+Pn4bC(B{O)+3?QNAKX$UCvZ-HTY!hn_i!4Q!l5RdGp5i(X(!Je zus4f+&&6dV;EO;|8PO%%TgM-+_;CWqlQ;kpYfiEqbcYYeVj^F%OX_epR2M%ejGAfI{rcf93e*V5^GKcn}o>@)Ir{CL1K&+HiWBo&JKBb0K9+zGcZP#rc3ljrex| z?C%gnZBy~5OS;+y*X?@mqTDse!BnZ$=(zzI;`;M@I``LK^glxVhgO{ZBikd&zwY!S z<1VhiaTN(91Am_N6*` zl|s1A^|*vp&90nqP}3%8-+pGe*Z{){uD=U1ljCqkp2}P7j`5eEN8-%Y()#c{)cjv~ z=UeQ}vbW(S%(I?t{+`M&_1ouO(4aA-Hx+3i#xtI^&vrvJ^fN7bwE(r4*Y-UG;oYT_ ziv+lM&~pv>*6@Sv(ZgV|c6-1j15_9HnbUyNXS*;#)NS!xL`94rPROIt1*!q`O+8H* zBn1J@o6kf7WZvL&5?qj#z=uQsom~HB+zmxyJH|hcjbY|p*$pDOw+3?EY9f2{cRraE;}JpQAbhP< zt?7XNGQM-q;-3<4#U)XU^wg)wwXx%M&SG8OK?(9nygQ-Ha*n0e+{3bsPI`4H^yOTB z373W$!{rfGvnj5bn}@C~(k3hC2$(U7mk{(kU1nc|zy2K=b9L$%^2aA*9y*E1Be5oa zC{$u)-Svpmj5?0E9)d=47X^0!^lPb9$*zHP6e<70O5Al|TDdyp?3|+Lg+=cnmWY{- z_gE6^a0xI)#H9c zS;XS~efEQyxPteYe|bjiw|eC#-IgkT2Kkg$t$zH~h{}R7 zNKDX?nm?AB-_9nGyEMCe$%E+k?avKj1CS*+FcDWBqg@olK1!MFiQBheiZ;nhB!$&g zoW<{eJja?}=X7j%=PSma0Q!lL6@i$vZ(V9%;E-D#(*JMhH=_VHzX7V^3<{xQ70MsC zRQo*BqEtJZDkR4+2{op`0WDD{1@PJqBW{8LuVMX&@1XbAHGqGA$aLfKGjOrx6hVic zP-@fiuf$#Zjl8kWp!9yTDN;S6LSr5w*a!WN5( z5FY)S15xQErb6iepTGjMG77$Kjn0-in)>C-_RAj2!-Dr{M%a6natVdjyPNETfcV>~ ztj5vA?6wf-ITwjP`cs|mXrmh^$aEtKS_iI{(RXQKLw&1ljsbFbB@1k-h$Ve67cy!u2DcE`tuC^vECMhnSMb|PUVJCvkl;z?)ODb zl>i|&CcWZ~c*d8sh0qc@&V8(X19pxkqJNwMc56k5m&PLw$S9J)qO9xGolUt7%T9jbg#l) z4^96c&hr%Enu4ThRVcQQM_(g5KK+u)ZeK%eSrqVi-htp&LC9jzq2Qs&Kcs(v7C=Hv zQ#Xd1N`qRF<5i-IK;VI5RtK&rDG7_KA&Y}IrZqUPnugO5xTN?0N=TMP0Fk4GU;C;QBVfr!n0H*v&BVFo+KJ0BP13^wn&r8omj7 zDQ`})w=?qO90~xP#y75l80vv{0MYc}>s7b?=>LEk7Y?%a7|S)7P!s{e(-2U2j!L5N zLlr~U2nZNFV8ztwdsb4lDwPeA*3Z;=W~tOOEbrzy+ZPDJN#Ki#swe(FgWSZtpbGS3 zyzRLogzOEA_HfJS>McPJ>7Vej8AnRF>HbSNkVWmg#-w%Yw6-i3g)14F71 zhiD}5mvJQ2-`Z6ma+P?A&Dm*CF^&*$?jDpeM>aj{w^p&B57IEo%#Q9MsZ!Q!78BsqQ-XU`K1%vE7vj->GY0CwzE3i zhP@!#V#l&bz-}CK%Xfxn2V9ZR%-YNG28KPK4XoNfg?Uion3L|jleA*5dZ_5c&fKb_ zHH>h>J6xda#2T1YGK^;NRxph64mC4KsKNG*yttQc7>hkeGf1!xw~laIWo#J_XGSqd z*fKA%d1RQx+-4d*F^uw=zQJ`<{Iq2`n2B(Xaq5+M;H*=R5_3VI%+`rLadc$&)vWI&8L~FJoRWbz(h)YY~!`T1VQ!h9xD=6nX$nb}_e5e!xn zgLzOg=07~p0HEOB6T;xf&u2l*uwzl7n+B9Gg4pQ9t^!<(z|3`Gx#=>q0N%?WTq;LQ zAg<#eO$-v*KW0<`epi7y6~T6d zFo26P^7$LLC<$n;vg6^2McA?QLQV-b;q674grtnLVt87-gH1suW{7r3+e&?+aB^omjPhhDw>g2$UFlKK`j}R)fxjsk}q{ zk+F?QbhU^0AgpK-J^v^!O|by%<`ERL306(=g1+GBXjKbuVwynXmtVxSF|og3n&==K zu9;S)lUehHnh)%2qh<}XUDQolb*U=3F@L{NR#8Wl?TMeXAk^^Hc z7<1m(gRR&;L9Y42pl#S=AnfA(Cy3KEb}ZMyt_b z9R)%=T>+Y1c=g^Mq(XjvEhZB?$GBe-{cAmth&OpNi5 z@E}}ra5LBDC2?T_K*)@&(a!zXY+j%bB^*KBqEQyXa`Qr_A{)CDk%Ipls9s?FF^ zP`hu<E2@m?zr~bq=p#)Tp2YP z*36-PZvo;}6Vshw^-f8S<2?J5L(c1G5VffipnNaPL?(^12$~ggpAOZ3hwxuZfoP1Kp;QhNBR?Rc})$3>CdCHpzfZM7M6`SAv2i|Q5;-ksXtVNBt zPi|o9las)&DP+%E*mTHkXmQz6Z|5E=2Qi?AXTLk!|3{Ny6G!l^V&8|ynGY;I^%9e5uG&l3 z8&AHO(7O@3VI=^G83+1!bjLv$=h-%H6ynF#?+X68OltwQQcYp_wyY=JOR8V17d*@( zpz5XF`xZcUw;`lafj$L{;Hv3AHTS8p}J>5Syb8zA;Wg zf<)B~RLfH^ndY2r=mXh|6Ms}_l9m7hKf zPT!sA!fxxn6F)lCG2k^|XdCvZM2^UyYScm1Sk-UM2oyTU__kw z6FOPA0HDQiCQf`M;^|b7Z`zNsEGeAvy?VzIrXOWQNDP5mvP;S43K8A}(yf7=H2aZ0Je2hfJhlWY^DshaA2p#0bhhid77` z$t(wMS}vxXSE1B~IKrk)X3DxJ?hcu$=%iGke7G(chm5&+_1cJDy7*=%0!62Jw67z`(6rd$ccJ_11wQcs`+hWzUkC#gb^fG1HS7YA`{>zRRuLAx{YCjog2e!Ue z+}png*&Wgd5j2b*FRHdVgXUGZK!WzOYp}LChei($whfwMh3xzo58*b9cT{=$6}n$> zo!%HOOv(L-I41z)Uqg?&+-b(*E6Qn^@iw9TWWsdHN#F=N)Jq1P+g@J)NSG@h3|%?Z zzQGR<_A-DzwJUeF98eLO3EUEAuneWNN%6lC1*h9Wni6(BZ4p-K2S#7 zpH0|J_sHy4Oe3jt{Le@{93RQjYAr^$I=K(!s!|yqY2>*x+tWNK+ zs_!nKx4lSQ%L(3O3J_&-%+> z;YtanZ*4&?ev%-1dHEMssa>Cz;OD=$l>KMGQ+_|sazeE8738grSxelQYpE+bdT%Su zt&zCK4?PK<>d+|&IVi7@?=AT5qsU;e(kkb&28LD$UG=Y4?3VKMNccerR8uV1m5{#r z9W^%`rW&Y;>n)J^amOt!m;1abPFU1E+EoWAZ$IF4sf5pUI|Q+3AZ?2Cdd>YSp>hhf z!VLNLl5_6ewG8R|{b*ge98=#*CM^SdI5A2ky95dXl$8GjG9~jin<{ll6g*m*wPOOI zu6UbmhO=jOybruF&;={^s4O!KsVueEQ_^e{cug#9W=8~j--}uUamR*pDvzqVGIrPz z<|E^zE1`@T`%=82lb>x2qPR$ux{=P8-nb!e(%A0+bm0j$r2k?|n1W0 z^4l7z8`~kzvnn1)-u0LVj0-u;daWWqz0%LTt{4~kp|0?u3fVM0;cQ_G8@DNNRYpn; z!?`4M`(&F1pm{;?nSR>mn62HQil@p2HkC|H{S5zPTrfsflf`Cp&ztmA>>4F+6yVb^->hovK_+Rs!Xs%ckXvKnaE)sw6MBHStfI)M&-{md zXB%fU-7mIuPojqI(`>vXL_KnCZ)@GDqc$ZLsUu4Nj3;ckIK99gyZZ&-**7%Sg3u#I zWh9TsQXWNw`00=MJ7KQ`BC{n^0yQ4=UZwxNV7B&|Vk>jc19=wGvJfnu^o1g{3MBJ1 za9w;AO!Ejg&>juav7K(fb;f~DxU0mE9rL$>qWCT29uW_968Z>F;6HeY#7bAv0gDBW zEvb8)<8b(&a;$rz*5C=HY$~^M5WeQjxh&DAGW`zlqse8yoiM<$EB?wGuX<`8SixH5 zZ)1c57MGqSFRO;pV-c*muUt8u`&NJ=;1u<=?pK)*^6$C=3V9OquHh)hUIb22Wy!u_ zudrcdom0bfZe>TRi|*qOKQi2IQPNAw$l7quY@zHKB3G!P-??tXQ07e#GbccjHCq(* z)LIU%B3bz|;shwA`+9P5gpg|sd(I<{Kn5-0MSKo}EsDGV$PfRK1R;z+FKmF{K_5cW z{>ytCqMb7+PpcDLdD%mGIT~XY(NC#Rj>++j=x11sB%54c)OcRav-lP3ezjK>Nsm3h ze`g!HmL3KRm=Fh_v`GiExa4R&d*M7wr*eE1v1a;TVuJJ8ni(b_m5(X5vcl7n4XTF^ zp~dERkX!OFc?x9uQ_saMo?0z&i90fgcfn=bClu>2&lyVOw@iL-e};Tad2=e%*%C^ety2fU1P~Z!+nTtOIC!uZDkRfN3$$s9c-W~Y@?PbIfpDG{dWEw-k+Itp&}|5qHWC+J1ZHmU^aN zA+#ANuT4klFm+HK7)6_Lyu}d70y#BbfG4W-oRr2;{JfBsWYcXNW7EMwH5~b5VrmbZKY3f7lOD@JE zVM5u2JAiztUMRI9sW~mfr?7w)+STrjRD@*g4_H(u?Z?#sZC6!>r1-_CcVW&1Sn0s5OmJ)- z(E&cly7~RA@C`!UaQ%|;*$>`&_^uWp+)OUk0#F8EPG3`C82N0m%3(Q?YM84;N))z^o`c*Ke;xl(1 zO*=;XB2igPlL|Va0%g7F`@5dZ*Q!3(1!m9hTi$RQy2~!qhuHHIdZRH*{)6WOyIru) zf&peq&nH4PTRO!DG-kB9+MmrsJxszzP!0WFcVkssJwzc7&BD_ou;$mFb~u~WRNVbN zF#wKDP+yoz-7xqz#-^@kZ8d2S&rr4Xay3|TS(1K#QY=u%*4V+uR~e@O-04DO6tFvFJVibs6k=swK`{4SYV&3|fiX+mG#BZWOjUCN+4 z873Su{aq=0HYo3dS@Ed1nDp){8`L!PL_`7P*AiCCNH^lf3nJSiE!7e5j33XwM-Rf>#3$LCu9`x^S)SWO+p!jMwgkEd(zgpJq~a=@>Kio9pb*{8WH)T32Rd$-?KtA4RB%Q ze|Ju7-@byrYw#BkH5%b?;BmMe@K0EC2UKu+i40$f3b9svFwnG1r5EWKW0i#sDx~& z!waCS78QRZZM$CGx_u~dfNIOXi}u{X144o1fp-Ls>;tliE`q|cru*>MKbW^OUHF8b zrNNqGQkwECZUsJ-c;6F_(gVhi&sLqOu;yVCHiuJuUVAS;b|K?yx-_7+?h)wD!G zh_GTUA`fUFd=;2;_oFQ^_BK5z;Sxn)OVSi+$yObuR-z5i&C+WMIl z?`Xh2^d@1=YcO^oW&?;;qXTG}@5Tv_&x%U!yf>Xv&D#~{GDxD8h{ zu0>~|02`!mtM9Nm#WzrA@>asa1|-o;fUgyi1s!G0y<*_s5TyrIw@8TYxySE$KFfx{ zFD!Zj)Hmtqe^vGG$AUVB%Q9eRW141LAfD+^Wl1?TZy&*1_R z2eWxmF#T)Ph;TI8+`F#mvQ9)kLK8w|!h*4dIKtK`%Nv@US+E%Oy7Ugvu&z#r=0;1W@^+AvbcfPmCex9@fNBjin z-;_&F^^*?uTm#R0~ZI$-p zRie)b7?y|bDiZ0~3MHVPXtYqU05w-A zm9$9qG0;ucG)p^$kYU)gNERKy0BzctxiQ+#DC#y%LlDIQbwd<|w~{fQEP00XFVAQS z?`ftq(*CriV{XFY0ySQU8U z&FY_^e5aWpq#qeG5ZBcO6_X zlH6*)RU{idDQIg{M0Q~!WhE2AGPmg4qtu@V z@m0>;n}FT%VWGswO2f>B>1m?t(GDvFHpZyaermix!bNQyv6y{`P$5FgoZ1Iy8}F=adjZSll~+cN6$x~Yhira~669#wHmqvsITITy+J$lU$#|%@wZDA+5HX)N zd8kqLObg5-i+@5QDsBuoEW{75h+#sRgD(ykASi z{_6{-atoQ|?VZlmN+ttK+|bgQYrhBMqQa@9lFdk<2TPi z_}Fuv3vio|7r)#nKFSb^P?m9CQN$7P2T}e!y`TpFKy8iMmUT(ysg4n`h;56h3PsCJ zdH&g6Y;cQ*sfDvc8=ESB^z(m>X$jhlZi&suc0qz>p45qtJvE#w%&3ax7!G0wUZ{1h zdqY;#wW!B2G^2_KP^s-qS=`KG1O8Ub^49R%O!J4W7mlt?!ZVv8M}DgLSN2Fr&sagF z8+R8NTE+(wYi6jcxKCCa=Q@@l58-}0zF?>xPy^?H?WRL2l zgNZYWchlx7-MXjP9u0|ix^nv)R{Qblx3Bo_`~A3Jo4kw zHpwExv(#CkhiUVlbkdEks%o1XO|5~QZPOa>F=oKg@1Pn%~TB3z}cdZsoM!8()~U z-x^;W`J2reUZ7(WjBb^&iKY&;u!+VFOjvSf4%V@W<_?mXbB7L+S!Vr@cgJFG`7!6l zUcfP#`d`E_pN)J`W73U%S!2?TK3F-&9)BlD^f_V?5nb9}^Mum#yJC5}gLt+Q(Gv8< z$u%*Myb^LAz-XvzXyG!0Emoy1f zj_KImo-FFFN?LFDhzVUA@t);}mj9>(0KH1`;+$ zRo$Fy(^ph~5_~*0_p*>g+(>BP2LV;sPwB za*f{=(Mk^9(+Yit`yHye6BqQ@p3VsMz~GizhxN2HA-4OOV)$ynS|{n6#~=S(BZ4GU zub&de(v3{2uHe^ZG@{?KzrmV+gSK|w2M^lx#-9I%jd$7GmDi2jB2pcPA936Jms&$8 zs!BDgw}WI&^_CI)sut5+hGNuWvM>Wk3|qIYl=T_`)O=B@0fOr4T{R8hYlV*ODqc#t zANspCb^Ik1OnYk?ZE_}b2w5e6(Y#p2Y-)TzJGeGX*E--djr4VTHcT1gI)DK98y$dX z6N|pH_d)5vD3+XeLg$VzJ&00SKRcf5k|0+gw_|`*NwQKy8Kur`HX}nL{+&bF^6BtrFkfX z*^7%S-tH0{<}D2{YB7-ia{`gA*Xy<*6!QLm4|g5m)B1~rn^H?!w$&HF=crzxD(U?Q;xu! zNBE=J%qOv}o((k=g`CDXvS%-INVg~8DX?yr8oB@|0;axUAH-A*(fby-V<#NKl?>AR zrh0P08FXHiGRH=^_Tzc75F*wD>EYE4)m?M@=z#g0{Hn(y6gfFjtO^HXoAJ!K!IHN@ zxZHm5|F~ERW2HnauIpWYNLBk`F!2g^Ytvtpg8M+~SK=pQ5E4*Q_YhOwPa^%m(VX2I zK2uh=zq+&<$?(8&_wx<+k;2bxKgA9KKg5Oo+tXEkTL5H;ITzu>PWtn`Y-`BQm!1UD zYJjkqkmYA!MmMD23;(C(%ssg8<4_n+X`<@`5M#_hQ4*Z$XJ6W zra+K#LqieZwq$QL@WJ}R?^?<8xW;SpuF+*aI0}9!Wn)}Gvw+n9cIaSbNb%I zI=Qw$%gl;=;r>SMFO5Q#O{1-m1LfvGLY4D6R+Y^vf!Jk4O~&0Jskq$UsPx1ICn4N; z#!pCuqCoif0evLgVS5`?4*lGDUn_kE5ZMcqA@1JI^CVs}o?_#la~sW_e_8zXmuyEl0S6dze^l6yCN@TP4_i z6+07LMu0nbsElnfi@)Q)V6I%VPrxj=40PR`{*1P2J@C-M$nr|SC5&r7mHB-g%4o4b z0)upa7Foc@dGGJx*;KQuoW#4EI5X^fXb$gy=}Xqsw>{mZ9>UNnXAA96Aon-yt$fz5 z&Cw;fZOxmM;?*+}MSjuK^@xKwpuhTXl)gwu{l|rfwgS^iR#=C%YnHN3=%z&5AIjc^ zE0s1!FbT;TNw8m!>kO>};?jb(vv!HeQ=ixt$s=GEZLn|4P;(Bc$>XI$tq0@>>r~EK zTJjr$gB(qnl{L%NK)(xq!K!tpAAL^h_sS}L5a!3X(AkglLoO3!TOZX@vEHLm4;fF# z3Bd5KN0d!5ap`wk2#hRJ*7&QBJ+kg?eXrrPh~+=F`3MoqM{Eh;0^kkjY{yu_CU}Ch zYnGgn&hc2yzH02BMH2nw#WJQF7^0z1YF(Uqc80w77KMlkWvk#uVm!|d7pVz?wA$B| zJ9lRp-j9NAIpl6UN%d#ZSc%y8_^l{xogEcb_Peyy>btePBbkqts#~sK>K*p&UibfT zv-khF+vzvge82n;+wK0xKaXpS$IEtZN7bF27#?Rm+9n@|^{7w(Ms+C*rjD%of!`Wq z8U&ypq|QUsBWz=GCU44=0)NY6|NCJCDnGueq$!-~q5Q&(@Q!8+bQo}~d{_w|5@U-- zxA-N~j_pu^bVYWxq+>;-3V+$XOx8|lT$$`Az9%T{&F7^yKJ(SY5Pw7 z*uEhsBjBXXFrnbzB;WazqVtWqT4k~P2^;h}fpGk}=0RFDtuQvbon!uD@&d6RErcLj zD<+%u`ie2V(G(522d(~VqhXrl2;#`vo8rm_#ueQ@{(m}`02e8-B_SU@F}59lQLzYoPgSu9!A~ZXnXS9DNJPBH)<{GHrXsRlA02FN z!Il#O9HQSZ8O-j!n7COZK|vmZbg7U%kJW0pXzv+kafeMTL%Np1)XH@~c|PYws^fXU z)CCwXGT1Cj9d#8Z0m=>8%bwq?Ilj=CCxlFF#CcKR8{vHU%W9^u0r9lLvPo))uvU)Y zmnwfHS6BX8GWbbi;dwYFj^Qj3McW>>UgexzZ={9c{Ep=JLyg44@BwWrZA*kJn)axa z9^>b@d=1Jsqr?0;PQWj{k;7;B(8ZejucDdHqukuXUdYVDzOj*y>)y`F;~LuNSvKJw zC2iZ~#$6D((MO09Qs=Zg9IF3jm94Hp+xUcIyHWw}ZqUIics zPIt_3LgLP?Cj6Hk5yc$ZO(P`sb@5BzdE*3Z61%Nbk~elCcsw}yz!bgF$`!hUj8jTi zjck@-d;F2h8R;}lQh;!h8+u$BBnFuz_ z7UsW{se6H_+X!cS!o?7j>Ky7^ar;ZC(A+fgm(X?(m9G3XyM3GaZ_`A;2Rp&RrQnY& zjp#79M^Yhx zR%#!uIM}((jcVje+}W4SJp&_2ZY;wddj~M;B}kF!AQi|&_~0u!LU0w{O%2_&;V}k; ztds#A`Mo9Y8jr9KAO1GZY=EsC{#AS2;}U1&o6W$*zj)RyHcMUGC7NJyodX5z1VzvmPp zcAesFF1o>DqC!d$OKe=hwPMohc(Wrd=AjX~htA6s1$L>1adw!4au{$V%$_b6+g)Y+ z=sy`b$1=kiY@kTo+HV=XM}Y(YAUJ=W94TP$h>`RrFipR$j+DcBQv;ZFSFDzHt{Lez*Z>ElNx*6AHy8y!_MQES%R1e$Su-mNDUxvX41w^gp!DD&*V zSlHVo;R#FwwlQVXKgJ=;PT71{tcTERSN1dT#Rbp;L1XhP%%H8bnu>6+W@hZ_*+v%Z+>7F4le%+8w@=qDp`3Jb?nSItQ`m4_& zOjNN8iZF{x1me%1;7fI9n4 zmIyu)gD#mQqS_UaSB72{i?dght0%|IkJ=}2Da9A@Ouk5_NXYdPJnpinnN$;w>(G5OAeh;m0Jk|FXLy)P zIt0?gS06Wpus0ok^5rLP3QC8@orNW&**EESYT%?ad?zcm@+*B_TTyI0sGuki?BQX8 zXV{SND7IiahJ2p$Y)L8Lh!30QwIe6m( zg2nvm*q+6Fmh@g>$T+*t;641Thu|ZkDjaroHcQ)UxXJv6u~d;mJ4giYpjmk0SOT#B zFAawYI>dQL1M-;A5b{`n6k*cmCr(P)|LD2HTq)PUEW?!T%s`D56U7G}fp_$~tmhJu z6^ z#FUIXRPdQkF|6f#F6K)6c#HXi4(I^|=1Tw3skoWaehsZ?;!HkKxhXyA3IdKCd_OVe zKXF_&-zz~YrHO8=iF_PY1N3Y*%pU63Z!yly!)H2`na{_@{0wK!64B_5B>Ao+9Ih)I zTVzz7pE9=E&V{&@QkaDhj@oMvdwJu6|AavWj@mcjbQyf#OJObFFju<P80$ay+M zbrky6TFnz&$cIjf2!{u2h&j_X6Sswf66DMZd}a*}`@7am{`zm)A^t28B&7*Wu}cMZ zORDd}+N45Go_CoLw2^%R;XC<10{6Q4{{9UQ>vRKBDP zTJgIw=sKH06JEj)i-?^8fr$Ya#Khj0ghAJTrwqE`Q)bZ01Ja3Q|4Z7WYnGCw)b7{~Wp)X7R zJ2Zpt&n?ZL|$yh|}qiE2h%pfMdR~mF*ub27qy5K>%j4#-P z>-BzZ;B@7ym*tI!40`Aznc-o1VoboVLU7nSaQrF%f> zzNB;yD&3cr?kh_7Ri*oy(mkYfUst+sDBU-e?!T1oTT1tBrTdQ3eOKwer*z*}x`&nS z2TJ!trTdZ6{aERKqI8ca-A|S7XG-^|(mkehk1O31O82DFJ*9L{E8WkP?iWh;OQrjj z(*0WLexr2HDBW+B?srP}d!>6;>HeT}&nev>mF`cd%O-@vhL0WMW4TZ}OD@#Tk_#hi zhPhqwua1LSG-P+!D1 z!USLB&+_cp*AAza9xSUb>Y&K#i>G zL|rBbXDGrMig1QTI5XmHK{zwAt~{d6)Cp%sJt_!iD#DqHaHd9B8i6~QL{b`gnkyJ!3mZwV4x$OO3`4&QgT46yYq5uqpy~q=}>| za-Sru(g~}gP71;*MOdW>t2Dyuh)II5Ix<@>hO2eL>Zsmt@vPN~uv!sTYlQxYErQS= zc~TPkbwYpCazW@R!nrZ>2sf{lgvxjAEHxjExx<#Vzf<>dCjdmsKz zIjn@-J}uwnT)A1YgxoQ*gxs;W3KQn{MFo2B%YqIE-xYfp3p(PvAgJXQ#Hc-t1)Xq9 zhpitLTuk?>8XkH~8vSJG@(wQCi(&DO6sJNKc9g%jSePJx_Oq~$iuR-XVJ)Qc-~)Qx z7MAb9M<#_?_nc$;`=_sticpw&M?a4w(yBhp_?Qgd=XGLYX=GNO)6m)z6>Ue$MFR#-RS)*ZVEm43X(7`IDRqh zWJ2ia_C7`rL6dtDDf$`R)NrI32r?Z<78=H%fBw0c)Eu zXpC0rJgIy5!@uR}`|O^+&+ciF9BQ;(qm|M@mQw#Cr)!&j?8dP}mhI5;s6KGTM;Caz zglOdmdmo7Sdwt-ipnYIRfT4Ao%RbPybsC=Fkw5op-RPqa5Eh_NYMd(~8xr<=@kzsO^I z0|nh-(zt+kK3i%kOBM32ZY1MFS`U7rxSL6Cl)n23A7UlEe?;Tc{myIp(NZ6!t&VX0 zhKETX{99=>@#91OpzQvh8(66^^sK^5j^J-o4Wos~KoPtf!x(@>_*Za56%{6nLTM>{ zB9H>jipfC2`H;F&Co~3>^8A~F@}Tqyn8d_w;Ojir%fL8<>!?J504_wWvl?)vK~HPwirmlrGr z?OQ(Oen3Udv3_30Zmlfk5R~qRPXtnsV^<>K+mQN1Co~4^=lR{A1>-?!1NcO|&3V$U zY^n5ApHKXZclEl%-92`SStMv1%=|21++HKcZIPBmO*{ua3-&4)F}2tR>mK`HRTEF! zyESSxbH^U7ec)B|Db1G3Vktl8rCX00FA-C9481xn2}rY!ayLH-{VUV!Ey35Q(L2)y zV43(g=V&nhpmYU%B9H}~5|MV4^@(VFobzTa&v2OsrLQ05Ju2@#(WA)!P*<8mmK2-&K3=RMSrE+UFudH6V!*y zFWF%0guNY-7xgFOI-#kMOz6+2m0MvM=~@E$ZaT)j7-O4O;;Oh+&uG@Qk|m;aAABN^ zf_ncBB>WIkUmWAjjJ;1Xo8kDvgSdU1t>tmW+D@{fw99cVd&Gx~KH~T>)h9ypRj=7yg|9=?T!rsJqvqU~tcW^EqR)IMrk~JB9MZ-eFG8>1ySw^r?-)rdpn-9 zE!S9;w^4eVo;?By(c5EA@bNGhY}ln`Rvt&`!4tfDt`pt!``N*C&z_L2b66Y-@Tus{ zPbzJ7C_riA$$*iDhl1buNMj=odU01^ab@SYfU<(Q1i z=iL|I#6JJD%B@a8P`dmychEOt#fI;6d05j|T^OZ1PdjGgn15dkk^Lb4=rnKMp6pOm zY1F;cyci#PJzyv2bA29+7p39wi9i-?<=0Ph+mFJ~>#gN^MCL*1($BS_7qa@P#cXMi zX1zq|ZHvhlbq8DcB<+yZn-)_G*BxRVp#hl1l0&UeF2dw!Bl&9Ry7z0vsfiAydqr_4 zcdB-`Mw=h(rN6sQq5;>+4+nQFfBvZXGtKBDL3PXyA+FS)fV z<@%^$2t6Qw0G5e=Yrj+$sZ&^#Zh}t)vS6ny_>wpCP&k!+Rm)Q#^Pu$9m%N!bYU`uW zr?CstQLsL!yUu}9y|1`si$QT3Hb&^=E6Js&IC+n+R3VwN5R|6CC*mA8?BCq5m_nRr zM*}qND{Z3H7V{~b@EVO+9T8Bv28oe^hW0FM^9_*N@s-x*WNX+}^oEtVHJs{WjZzI8 zlzxMh8yIE8LtpWJ`IOc#FOm9@U-Q|u!Fj$s1l1$?!Kf#FtxfS_>0#^3r%X8t=4hQR zTT;CK^B)tJU#L&&K* z^mv_4)0sUn^p=!Zph-Q$`(mj!qUrT01F#hQD>X8gVImVINuh7QuekOZEcaq))vco|9I4Fvb_HYepYBiyYO)Lttz6eECQtszU5TQ z`B61_6f8x1X!`2fDoXnc{m=LrZA|-S5E%~Q{BOB?2FRmuftiNxiR;h#R%pCxK%w+@ z_(UKJx+nWv?j9=+&i}PMLu4M5o))(Jq#qWii^C!{G$dDa;~iyvEBw`8FgBD9`OdbS z&SMA3u5^$DuZp?W=*qv@K{Jly&}WlNz}guae^bei(mCJR58_4)y*ThH5a0G4_Z(h& z(Pqs#oa{M`RLzeisVvBg3|Hd z2TTQ(M(DOB1(cgj4BObm0Eg`#a0)MgEM?zohZ`eqJmtzCjxU)rH%wW zY}Y&cmv3$XR%@})Dm8YgMl=eMqTd@u`q6Z7#8sUK5N z2$4A;UVE1NWFtGQf#+7B=h)GB#be~D63)CwD`AQ(0j2N5Cj$AP77DY68y2OMw zUB37po8qbc8(wFA>BIDf#am5CG=oeuZHBDAZ87U<4R12pQD6{D-ole?1Eb-s<^i8t z&Np03Nj$_D(aWG?)SL@edz3Cc=QxJ7bxl*ceWfnGS=cfEpA!{g3y%-&3y%-Q!eg5W zaeffU!+p!E;M6V+Uws_dcCCKY-ewF9<2UMOV#(y_WH@>Z_)%q3=T0ac{-fjQ5#748 zVU%n7ouxiX7YO~HV)0Rx028jJpCR>8y7@=j3=ea7FVKHo(^n%7r5^?8$HJWaho-MC zFQ7E+C;Jh^h`ufn=E$Fveu>maX+NiaOruzcWP*6|PvUa^PTLsk$H|syq-uV;1PQV?N7BrJo}9G%dJ^YZ-bG#=#|lsV;lt%m#j4lF8!qwOF=lNz6{!>r*jJEUcGRyouaqE~+rS4O+o zwlv8}bu&z4V?LW_)E&Z;VDp|7!#Jbapyn%-{w8eb{}i`5AN1S)8cZLhU4M1x$DG5t zzAuPJ{K{M4C;NEs%E_uVQgud!(#zo!ffPu%piXO8MINf_x&Z_m1m`+C=jEL1C5=<{ zYLvc-oHq#0bzpPdWVh=m2+j%4c6QD;IajOSf^nj>BYYx`a?Y5VB8Vh_DE&8Wq-ca4 zIZ>%bI9L**v<3;0f(Vmw=q-cP4LYF_SHtr^5!5i0K8rldI8R!QHeq&^dVl=J=SjSI zj#e9WK6>>&v22|tQ&WxYG?YUcnTGavLaryi`5lh6m4!8^fe!+3ufFZT!bqOw3%qM+ z^{N94X$26{lxu7gf>!i!0Qc%mLeSd8-~PK-KYx4?6SOtgl3>Y83-f(dMo2poAEgQk zB1Zz}d`busIp-E3=*v0Z+|JHjL;7*f4Yw=;&IBW*KPUa{z(Rw(6{6j$Vi-?{h|0GA z1Dr*b{g9P<_~@eUECZ|Rn=(C&ia2<55iQk1K4wOp5a~~NJ-07r=_8Eqyugpr9cimK z9OLPqxyi?Q`WJd6^6C`={}mrx0DQ+5k(&%rqhpH}BF>af(rs$1R~=haj_HX{k!N|T z3ZJa9`tzfD>bs+hOX%=ZXjS4E}@nR-6*F?vJj+znOmo z>$WKM!zThMu-md`XlH1D145=uWIR4z7uK#UMUQ^Nr7=qmV970uHRsMgPnS3cRTNA!Lgr4{ z!H#weo6iincd_)Qm`5voM#!RBfAWhF_@JQObWbGI|1lbIu4}*2t{sU@5%aEtkf%$5 ze=aEC13qCTBe}=wE#+DncOyRmf1DAH5_%IP+0RHez040FyUg>{q735+Qpd;HvR7M+ zKXuyPpPkII6J2vt-i>U=Fw8neW;n$0s~60*Aq|X>hDl-l!ZO1X@wrfqjIc0NsMFmX z*piSs~;GB6nlSiKe!gLPdeDl)7wr>+kS z7DgI`n;{Lu!cY&H8|p=>0vjo=1hB9%Pu4+(CNfKyo~5Z`$_!6#iK6h%kgYZ3Z)UHU z$kJTeQU{YQ>QF7wLlJe1_;43Yn~`;7$(U>@R4{RolNCu?=|WLZ>jshq9p0w3ff1}( z+wSI&@Fr%{x`QHbO(lYMdiC^1i0VOQxAquDd*u%#=@1S{Y>jASE988I;heFfViZ=! zpkh=QBkly1vQ!-}ZlJYeXP2$HF0mUYOzXlK!WctW(y{{kQEYP)zq+OJUeUddEDH0* zbvNU~%Nqt%phrj09}pG-X9DrPZ0(Vt+apTpX>Wq-OkU4k4IG{K(&lC+A-%&*RmVQP zY(^!r#)4Ipv+k&zWH&&T)z9SA$@V5$%WBjgha$2Ma8{Ws4D3PU1si)14Y4{n#8TQr zwm7gQ)eX%uAPl`I%uZ81iE|8gj;#Xjpma8z+ky)+aA`24fowjk=uo@=Fh{29B8D-{ z#k<>ZX92SMBb;MYA|sbCHNkd_j*6o>Vzg>f)+||ymX$uHugSPDF*b1c!)bMQ!`?QA zkuBP^oC+J?%P4O+Bphdh9D6?~1?Akn+yEtN^~cr#0l)8v+|J=ly@!RAglx54?5*#^rRy&=ig8kVcPVXu~=wP#0Y6T%$T zxtM`-RTmNSz&zf)pn&-}5K&pouM4=Kju2d~n`xW;7lxVRBMf6v6Emh^I81o08jg=> zVm1cRVi*IKuxN=Hq~Q$X3e(wc99U`!U!hyrC|eew%#6Fz40NKvuCigv&6ce4SDWgf zZWznWz=MQgtT6c?CYN7hszEOr?^;tf6R=!oI;VESxZZRQD3sn{Hn2?~IA^YOI0*G_ zG;PBZJLM{enyBY$twIUp@ijJyVccX!IJ?o!5J-Vx+@hIf7`JLE8ZT>2)$7y&@-|1U z4deCzZyLrOroG1+#+|0@l8#lwT@Hk`*xe>Sq+0k2?0yCwTGyMn4#ZcGLRBr*{qHex zZ)T&}+`#u^DTm4CzfU+e4BuMR-oR(dyG{Gi=|Pj$Vh!*Kb1*U2Q4{k+rgrqHgU^$r zgIpc_WeOiukZX&G!wUBi5r@g_QF8?xPgvPoMVy*rn@kyS&aAhyZNxnWkQm!G;Bg7q z4ysQ$+Czd+?bhH;b|P-+CrZYn4QxrdVi$j{9Oqxh8 zq`NuN3moYdragTjd-EOXhK_U>N7|Xc#F2K|H_nmHaHKms(oX+4?dj`Ck8q^LZjbou zw6i|W_Hnj%cSpLBBmK4`?X>R^NBW`a~IUb$@&8-4-Y=|AUuaH09f=|5-M z>HiD)_dUoN|Ni~= z@4tWl{rm6VfB*jb_kZiJ7ydxT@WFDtnKP{EtwWqR8SDe&`0FCKuK6eoPS=WuljE&+Egx}Up>#kSndNq`TYOX&C~L$ zeg8Di;Pi}tn#EUMP*F(j_|Nij91uv3Hg;?-c!8A z`Q?SBzN+p8m6iC!rJC}JszP6tuh3hTUkU1N!>IO`dh<(*DzMT@GTT?+uc%__;{57j zfBv*mpSQB2w4`93L#i@W=9g5dR6#{~wZE#Sz|TbarKJ@G`I5A(Vzy5My#A_uXl*9p zh5HK%g5Y%+drf&sd5OOyzqDk&uaIQ}k9hS`xMm4BN0kd1iprt>(`u$q_i?RCf0eC# zaF!SQr%k8{(C;uTpn}s&iU17-r_U|$Rr*UR%Dq6wGSHBLXkAdAQ&5~=McJzT(ByuK zqNSxiA%$Tj6)G?`y{5bX8S_iM=xas_tyEIr1;0YSVUn6^U$xiaTz^d^BgXm*9;b5!Q)vflR7#c zGDos$k%`CE6cj*udQIu*8h=4W85fT)uMQ53PRmZu_KwRQn>lKTm}+58?p_RYYeSv@ zQ>SC~8bPU}veSp8k7b&pp!nIoOqi&PgxOhD6$QS+nkru!R7KZHr!fU1p^!<_s=$2c zmN0CYAZ649Tg}ITS)(%?qA}ysN2R4pIh5wFD5xmSOz)OfQSOIkaJWz8V8XGPY1K8; zstc-0XjU8Rn^ohh_Sb?{R|17ED43C7QVLZJiVgOa`ux7Xq81u|Q2NndKF8N_~YzwJ10_!B76Gic+V&TpWy!LpGxHglZp5&o&k*)9cBFb}M`! zvm3x94hNN#7uqHYRkblSzAD~}(yOW}sxlp#qqEXSY17V-Qdk$1rYDp`7wwignD=@b zd|q5<%#Nqt-xyaGFxM5b8Lr6Zuc-9HghqCI#L%cN@K=<{5gE_kBV(ndURDP*`!h zUAp*?VY+gfh9oENGF)ymbXDlH)^LjXLr0#gwg$|Z;0_5{zPP)!^rS1gnHA^i)XWtf zF~`-Rg=-cXe-JMO$&!`gs0-vcn`0tPiQz-8vaEuX_oQ zyE;v>UbQy-;OfwPq&2e$7~U8Mq%sGngix*xJ($Q9(+p&FI!wCCT5lEcWN3#;r**h) zhXm^se7ie@Jh0e0u`4s=Lu1`+>+Gow)}+s=O4d>=+?CW63$V^&80zX6{_OkjKZ5ij z^GLxRY9-TGi08y^l`n*ap{JOrY3PQ}tx2wn!@;5ruFPgHgArK$4&egdEg~T~>q25r zgydPnLh4(|A(ilnwN^c9Ej?{bIBjh>y^&>a&azv(t$Q|F6HkFl?``AU@+Vckkl0vH_=n#zJX5 zUAhs;+XvM3;kxEIYlOAI8q^K@a7cgxlx_{fwswWO(wfrua~K|@F4VgTeq9|h-x}tM zk90K-$o{5m6r1?phPf+Wkc+ri8#-qHUF24r!r-#%#VLgiDvFO^9RzGX)^5a&H)$_9BRv{aQQS=qk zco=>k$G}>HA`v($y_M{U=%dTH4R1y&M{RILxfoR*|c20J_U98_Fg>MDo5UZ>-DL zLI0lZY8jyaKK9VKU?XBHcDNcSJS3nm{$ZFQp0lDeHqoJX4RdLb?)I|_s_qHsCl5C^ z&&^);gVm*1kUS^BcCVpj&ro9gl# zLiyBUbI2!QI7NW7cDs_pX@;Oq7DA!>Jv>B(4i7!ysvnT^F=~`<0p+|{*R-0u(gO71 z*!?3rC}S}ecHugq6POol1h0pR9%XCnZQ!{T*2~re)^Tiu?PQ2>oK5^QidzQs%_~iz zT}vz5?Ec6A?cTvU(^DqQzq?MtY{bCe?zU9|=E0B#R&o~fKv#fWOXZlc)#5dpNiGWL zu;*}k4hiTM>l&L@)6+kIr(SVIH`-%mSTk7b+4|w@IGJ4(kog73JnVDK?AvV(wTf9z zo5~Y%8VuLPUmHSf^U=mSAP#Jq$FOBC3UJy>^<^f7pz$SiEdd9|b%z&{M zgynVF@HX)e&{p-VWPYG&rbE}8L67!ubmC%LyRIQki!#hQ`zm4akdgg968vd#hwH!ZeSx&gf zv9P+Tp);N!g{`&3f%fk>(r)#I%SsuSG18kcHa*=te$?Rfu_GpAjvC@k88z5DHho-r zw&9&P&L5v>yIKt=#+CCjNA>l3i^^-f1#{=d_wjnmE2_%!)wS2mtl^^)#Rfrq&#L@# zx{m8DDW6`EKF;5pT_VpM*V8*LAH#I`%fj#M9^P#4xHRv$RIibeJdfK)EGE1{EW@jbhWixNq;PFsGFTCcQSqia4->e$2%wK^iD9qmruk&XP zFJ;B1^-7;@R8~}%;H4{XbxBdV;ib!&{<(%1w)px1M@dOG9}S2a@K3f?@FI0#uq`$y2rs2p z)5YnEIR(|=%=|(xWQD@Di)vnZQOz5FX+oc@crQ76IC#2;cc|DZ$t+dg%Zg9XD@?BK zToq&WM-od`< z`8B0}1{M-3pscErGM~4~hcdpm!|3`bleyb7M@;LH&OY(j*Lqb$PlkramL8Xt=5<_Q z@>W;+3aY*FhBwP!Wk4OueC7UX^2mRr+b2-BPr&|Hh-P@bmHCD7>??tN^<-bY*w>}J zHI#2Jr8?48ciQN%wT*2sfKR-RrclnW&G)sr9(|Y&g^%=3t0|c2^F!4NeRI>tLS@Rz za38~8QB!K*h4uvL+`s5%@!Zo1J@Kj=+h(G1Ra0I~8(n`j0^hF>)|zoi~r9QJNuutq+^u*=bN%8G$l+8RX#ExJ&Tn<7U5OX%yE}` zNfG>2SyfR~m0t!;KD&ZlboG|!m-!5DW_e|eKa-CE`zEcNC1ayzSCkY+b?$OWXVEje zToM~a(;=E86$fyk@MQp?CePaE;vi+glnRrozpQe4Nh#QjHKe0kum3j>XDK5xhm1-e z>`hG>mk9#{4sHRvnA+Usn^xg1_LaiHC%H%P%8O0}G1+AQ&@JLX6$LSWRSh1oa`H=S ze60IByD2m5pLf&RCjWohX)(uzr*}B0!&vU^g&+lkR1DHENc0-j#Z@KcGr<(^^b)@T zeH40rjhtm_JKWi)RBYzn|D&T_Vr?}}ti8&KwIA&g|BgHOd>6QiV_gOBWsqIHwiOAk zXljLwY9I8lLT`RmQ4Jm{Y1iE-ukaUFRm}1JpIEa2U2o^m$%MvEFQexE|9fN3<`qov z=Frr`M&w`2QBXxZ27%{B!=c)!^5JsFImUw<1~v4ezF!BgCl1ZN-hXHg zIAO34mK+uHYVEYO_F0(aMna^ZidHFu(=)ubeMci@+$b+pCnasTcXUqr*o+aQbG>Op z)6<3kS-tUi3tKPusxD%&NWl((%ZWAPy(Jy>L(-3*O8I zAO5Gu)}>%gwJ+V#4x?~!LI)9LFN`+PHPeL|@m{)%iXR}HhXuC8g6@aj8<{%xuU3ZM zo{rv7?#rzGfWwTKHg-53ANn$LZTA6XW_$C%d!Phn%kqQYCV=by|9n5!dieir*!J{_ zb4jWdn;nP&S+(^`Purbj(6555Hp|6o6UY-_Bo)CKVhGK?B=S>*o_*x$_@v8>LSI1%GF4WTXoqm% zFZWf~6cp3heU)#vuc}%*#7S4-0?J`ZGWGIW4|RMQ#uj|FO*;W=wc5|}X;B(cQ;it@?l1`wloq%JToYJ9<5eRDq)%^^Q$;vjvWmz1`g1-tFx!yL)sPvdLsOT(SvC zwj3Z`1V#Rc*b4}#s30m9P@3fj*ujPc6%-T%3m{g&|687S=ACEenPjpFa#21%`H}Cu z`_9ZeZ+YtXnNDQo%Ui-=*=|mW7(*>y5q {Wh%Gs!)h$qJeryg6n<(;4Zsh7#m5=o{u~vu0$zFF2N$NpaHVvk+ z;j-$*+mT46*m^CoXY4R>oFDuA*@=>R^6F*TT#ikh%4eg|J<7!EK^}%WY=||Cmy(ZA zTAS@dEkN&Tt@|y!r@gPVT0zofpO-e&)$~QC1GfLpO1pnR*FpeeyFOpd1ty4P@>3=8 zysx%RAjVb94rvTBEa4U5ComsyCFM9T7>%**#g!Rgrn7kwg58&jN7}`KZd$W!9axi0 zG>WVJuY-GL#)}C^A4yD>`*Qs`_EnP8Ik&sP9b9Yg>OzjSiY{+aNF$%WAL{VsjoD** z)ZRtDdQ5DWaU)%{EMwea(@M2brxTk;8~7y2TI@TR+}* z?QGxTf*t?%5wn?vSg`JGur`|3+1|KqlPhn{{`#IHt}ed0%xpZ%{Zc%fp69~|6_(9X zHXU1|%B<;(Q9IU*h47BI=?V%%oR1*u5q4Kg{8fC&wjG360U35k7t8UAt_{{&tmt9( z)%{ZfjJoN&g!gOHa4T@#*gBg{HlG|DB^6GowZ@JRS5{r5)%CMo9*V59nM|rY;p2&x zX&m;+z*QaY9-T~-<*f{5M9Sm}*$N_FB^!{g2=hrUrgs%qx(N5&7OgZpP9~FxOf;s#x&sLGX@%MFPhTx-0|C5o{d``Cc{M8}a5}MK7otNa;C8Uv$ zua=S@Smudesf^4pT?R6CIMICZVq4%>_Cod_=2$VomiFSsJalKO-Q+4z=iIGBz6R@f zr`qP@xuLZ}P)=tiQ?`KYt5Vl&gpRcHRSt0*!sluGk(yC3XyZf44mC&mtKU$nzB?Mw zcY9K3B>ZGZmL}Qc;9I|`+k(s_n>J$!E;Kjo*Asy$@Ry0H*?7)h#TXL{$;cPvMqt<; z1+f97@>65k@Mal4v}$S0O;PUvFQe#<&k|Gm|AcOy5Jy0e*^0aTA|~6r*@?ofMAqbV zrkI~}=ib6eEwgBaxR6O_n8;A_hXW10ZAz+@Z{>L@sq;mZ&ex9JQGKrYjQ^T_)fPvx zWy>dK4zV}OVWH4}=0x}jJZa6A&9M!RFS;4$zHs-gkp>HI_P1t#^d6s$aa?wrJRiQu zmQ`AW>CMq+(Sdyy(kEWxA%AS8hB3l4!(?M@O{u z=IZUHc%tj_bkQ1PhXrltG)3Q$P+q_W2YB*r3vAO&UR2T1h8gE`B~#v5m5T-2p{fqv zbN}I@D*Q5JtYD)YHn@?`V)r(}%YK<|8HV6HI|i@r!e5L}NiF)DFEsXCtY;CdRnU(V zX>T9P=d(vH@`U3q7ZI|YPpO$B#FZ45lLQl{OUZ5exAq7>VQpLf>P|eucNSrHK(4(e zJ;`0cYEAo=Qb@e6_ zx6DuE7M9@*&snMz^DY|m8DIAei)qz^WLn%D!U#O^89srL(KgTY%t$)AzDztO0y5$v zWXPrf1M$L%H9?mKj%^(wc1nluc@nOlr8_>1`;-JjdSdc}%c3nYpFb=cLLO2=u!wnAU z`{bs(3^YUKO7@keCZ|ePDys9>@*w51haA(WYxZMD8{gNt zgh4$?&9&CX2IZl+9B)G--L})M{_ineZwavjvQ_yA znUj2}$~=!cWNLBMM4!DG>?ATKr?Od@wN}V8B||vfePppFw(bdwj3<6O&f}ig-+K%Y zVa2?j=zoE2w3jP3asIEBHXlJ3*h?|@OxaOZ^&Cv2G*e0@CewyoX7U7UbS9(lz6Bh7 zNCM=P^65gp1n@7Sa*oZ*6?ns^{Y^sQ!8P}1;_48HZOkDMYOse0pSL2vAAH#5mnv7FD1 zm5`Cyy{P0q&#kDVg@`ajbq}0u>sM6-geRxR;=OE=ECV36S>1#|VmDYiiGYBmx#Znbj0D5bZ%1JAy8D23_n5NOF@qketH06Xkz_ zLX8R(Vk^9u&y^H+m8N2cO%sB+JOAuSV3^Sam3F)-1+7`0w0w0512DUxwA|)`^MTh^`vH;V-1&aa1O0DJH*if8tPgWj z7Nnz`-9d)>@ui3uBFqxxkFuc*_N7ZXr?~?Q$XxO^#V@DScP{Up!e0uUvVm##)1xAY zpS!FJf@zpNR%y~OM|jydQ(Fznn_NKHRc^`$ylol zrtI8vi=>h+9quz{_c8Nn!G_8$f3=ckAX1?^CkNTua7Qzf99FORvgWSf4zm23alY## zaJA0X>Rvm{%G}m!&9XsBRt_26r1w}SZ#3xBs_eaH9R-o;vl>nk+jk{o2hWgr!-9@n z)VciVqouD*ob0^vrSLgJfk{(E%DQ+N0}gd1rF)ZQY({iAO5nibt5aq&ck$t_dn3XG(H`?b)h?K^nbBOYt5{i3@-|QtOOI#r;ZDjh`Y-3n0q~X4t z&jiIeRFY%0qt!PusLM`Js&Ei?yoO^p#lJh1cE?{7FOv?F9imMBWOC?8uSn`&X^yNi zNBX#~?h1WqFkuL7GT;;g$uir9WGPtAs2l2-ebrblIVt=40Y%H+(>*Xa(AU%5FR0mh z8xfdYEG9w+EBUf8*B>}X~Rr>Y`GDSDtq&nJUq9%~q22i{V4RdA)_70sk zwRuF#>+Vx)d88a|FUkVZ3DK34J6=wVvo#KX6PPSJG-?iU>3}c!cK#t82VyyAPUNSG zmBW4H@g6bV;S)h_T`CY<%c`ey6l>;u^y8$2H0 zrE_1_IUssa7AxR9_S5pH$fwhsHkGfo60ccMP2y4xVIWjdiohW7!lSHt!Bi-?Pi6^Z)&8y0ntI-55|2$OYdjPp` z?Zs>Un+)Mv7JQR#Nxf~&9`)w09JEUddaoS?CvzY94gi8z6B`D4LuKx6T54-GDTf{I zl*10`JRwV@G^QpOD$8ZpQ3>Mt#_0n(HD-|sq1mhf#*@l!?kMORv3kpm&Ibrrx@C~l z`%uYs%S84eQ&*U3ld8ylu_Rc~t$~eou8?3V zLfXitG8IEJH|Y(nEeZZbb1Ek&5ukZ9&lB4QtJ&SF$ZifDWh~O0n}705>){4cWf=rL zAXF9sKU!0XjZCVas8q^tlODA$+cC-osa)7`fi!W(Q$wfett}cZ+qtLB=lt^dEXiy< zm*d-8sldbexJkWQ3V=?<03cJR7sRVx!qNSYSP=MFjtsshKov(+~dTO}`aQ^ybvk8_Fo?$*!s4bJD zs3qVBvBA_zBA{`_blb%D{&k-^RmrO+-qeIREScP83JnkC3k*~Zuhh!&RXXQ-aEWDz zvobZ7qw`%~-@~Tl&$aHu7HpciF(H_F%E8r3SeOQ`UG4xgfwmD>_cZtbXb+gN=aU@N8k^~j+A#J=o zXh2Z6H&7}FlS9Rq#d0GJG!V`EwV?b#E%DGT?s#Zf9vJEe`Z$@EX>R6_W)P<7XPF2l zvJ=9YLFSgqRoQR6NuQ~-%tzJO%8jgT>ewZ(kgT?P@$P>Tg=atCqO6& zP6%g@&lKa=mI1h`sHzS-s!FVVCPbBNyTu%H=-Psd2M&3n4pnX)Q)Y#FfzJ;}6Da^lJIg);lU5IKOpDvd*?UjM?lGJ=z* z;Xpc$A^*;?T82Gz-1|Ul@IIjPnhgw&t`@e{rrjqM$2XH3_&`kMIOP)4r`d8z@yt%6 zFva>5{B1(mnp>ss!07(DmJtu^e34?^lIGM%i?BPEi%_D~0MCNj5>zk(P%dh*&E6`n zc6L|2Nk~!EuTE2@EL4t_QH&6xI+ECZwE*@&$A?U{?jBy**WYiBtnC{biudZCW4Cjb(qK?{C`kNyJ<}%^UPoU;`gw0W2E{>gZsZ1IQ)`)Fe zR`CL#RxOp=98%miPKqmPw*fJ(IG4s0#d+`-ZG$h`Wh4sv##k(7rRVh3_YK4x2SK=; zI>*5si$_N?xoF2Yr|Xl}M@#H};?MXwUgG7J^2M1%F%`_qx0qYG<;+_rQqe7$?4kJd z+@uYDXqoe&u7vycrJ6YwN9graC9C9)ZWpv*6gOo9?4ruM(cIxWu5zlc1rI$o4c1Of z6A)C--=Pt)^NqBAhzf>{#td{|g_e(Ficr8z@Wj)Ucv9I*G*ZY|Noyukf(a$!G|M)b=vbyKc}h!k z9IQPBn7k$E01emXLA!c@w`3r}ODM)6A=VTEle3=$NnIZCPRuhVU2(am>cky7u6&AzRg>`$bzsX;NsK=AZj`8B z{rc*%^(U1}s=Ofo;{$7S8kBpd2@x=soXBT*MI`Q5o=V$J<(jHu^h9;yuLkf#41xqz zyK&r(Hv*HRwo;OuNg)f)yw`G;ry%po87}H?v+NBhl&R~HDym8`>8{nV6Nr6NZR%7B zgS@ib$clcmCCHo?1OlR#H*eFZOc;ONuiK0pd@Kt2QmEj)S0gq#5(o&YYa}_XZO>jQFj7UgT@|wuX}UXEv_sHTh?D^y zuy5qXq@7LE3jUYT{_2QwL=c0F`&9I=m8o2uYAGT1a8a?MJu3^}*4;N3lUyx=C`i>P zNfZ)EQR0n>HyhX~&(?+VOoTSHGA(wUnVhha8%#ENdBKaM9=Yq#oGfbzoKkkMN1Z7- zC3CKbkSm`vnaEiv;=X2sDG5+jf>=S0FS(`Fuw2+c!8 zRtl({qz=j&ckx(UQH8-_83}#hbc)KS*{myB4K&c^HEjD*A=x^;OE-u#J)?lX7~f%f zDi=20n*&J#Q{Qum;s&ee&%bP!;VTx|nsVw8^~IU!0%?IjYP>Ac&PhY{bahdYFI@+D z%2j0*N`{RVw8&!~t-@D$$#B**e@#`d*i0qLiKg~UePvV}O|W*dxVyVM3GNWw-95N_ za00=DySux)dvJFNEbg#CfJOK6-g~}tz8^iiJv~!Z{cP>&Gt*V|6o6fkRRSFpiK{2ON1HC1Q3&&AJ+w(BDMt zUKYD*y*iF(Pv;X(_af2~+?wuEY=4I0+*pi35T0 zIUyvDlk5MXJyP1VcUwjf!+Lu4!Kvqn-zYVCv*g{pXaYbmf z-1%3?4COi!VrCSDVcUbjce+O`G8fqcjfs}?nI_?Er|iLx^BmHbOKQ}=T03z15L=bm zvUsm43_GPylh#gPkMZ-gV}DMkbFNb|Vb>I=G$xxRD9lDhaAEOu(>O&a=JZ_I$5s?h z7?AOYDAY-kCbf*M=W=Jw@zR$Z8%L>pkYB~!F#LjU_dcXAc&W4LkBpO0xiVI4plUQ| zC5Z)y(kn8NJTYEEVm=f23|!fIS*~-!W_}PrrP`$6SGJ5j>39D1;LDRRn1xHe#$KEh z=%V@>vN4%9yd@d(%gV#rOza>*Aav{gVuRipcPUkS^H=)k-DphL79qcj434BrLB*V$ zn5Q7-)!JxuRBe4l7w4_qf}P*fr{kvzs_UFtx4$B!V4jlGKXp!Fqse7YyIA^^#u2gJ z6HNzxE4?M`9@`5X2~-Dm&6=N_;VFq0${8u7OcU(IfP`b$R*U{&7&RqEosFn1)CfSR zexEE+;ZC4qOMm`hXWu$gMpKUA`h&sVeH_w3b!=qQh?pf6zD|gwRS;}_bPQ5du@hSrR&Ali_M=wsv0+Ignz0BJ@dwE7 zd7(zvoDNrBQl5Rf;c(?J;(qrDob%!sTi6bK-M6CINVif^)&spJ1sZc93B5gy7#ssb zn2X{q5`*b2JB}j5l;%*yXLA}g?bj(;rDn1$V+C__j@+79W@FlLB_)fF$-}SBN}CEa zcf1IGpEWJlpyEEcrH)&orahByxVb9Cw`QnZNhN>UGf3t}JG7%sZG_sAxezoQ$j$0e z8X(>rJ2DOm@6V(Mj!YBnN<6}8{lp;U`ufxJhz zLA-f*XAYh1Gh+`&@!0;#qLH|210^unj#QRBfc(Ntd@CFp`QixHt_b3{#fj+i=rvA# zDo!CM9Ci{@cT|kdQj#Y+ew7K(c%)Yfa8S5>wl5Wp$l0jOFeLcse-op8o5j`&o6r)(IGL_1vI*a#d=>2h<45IM_4x62a~I0MCUuIbv3C+MR*hZy|&_U62QxUkat&hLho z9vVBLamYyu37N~*{8RqB&Qc28Zp~|NWr^1gp0PCx9fs8%b{XxzX$_S>VC+$;?2S-sIp+wgAt+e}12K``K;zi;H>mQC7-L$; zCQ3ot6&u;JzYP@%T88Kq527s6QtGq-*m%K3q+PmJGyT~I=%!WW*|VkD>aw`{c%{=p z_){4Q-T+}ogiNcLAM9CQbfp@{T9b?EHSOBB%f$X@6s^S=@@Y?(ckRkBw8%ffv~ASJ z*IR@pO4exT!H2Q493 zJ)KVMB@&h64U^?1zufFqN~v5Pb*$aP^-3DU@3^Sc;`(@}JUjles3~vRaxWCSqmhrc zxnm0>%oWX|2y1VPj$&$J0N&Xac>duQl{vWRT!X3g*y>OI{J5jRr0!yp{^8(bU6I@#;?mrG}DE=?M9gdo^_Qkw%=?a5f0af@QzuTCk%IT%{vG4YZNxY5fHyGPH#gpLh$8YY^D zX+m>aNr}q}&gFD`8w@KoQ-JH=JBb|oC_-DJ-}t2E4nTB2&WhiKbp4}GeOen8AVWqn z{~SxB>A0Mc?VTE$?k zqb&qy4!&%0oxw=7bGN}fS+Gz#xj}IO)bb-l=^h;u;{5pS8puB`u&_%}SxM=@<_I4e zhPTzaHaMYt+j!6+I2$1wz0bah@-GoGx~K*+r({=>APrPU$hG^$$3%xIEJo!2-9OVZ z>}N*>rFkqAM=EK^d~tXIykKLG{&K`d>T#&Y{@m#hPve>YCFZ!af^+16_dM$V(7d{t+%JPd)DG^YH2Xz-!jssSTjpv zIvNCzHCbJJEwGS?)lPNI2yJvVIwFpXc<%EL3b%9Y;1d*g4Lrq=DVG|nDm0gsL{(KA zf0!`L-O0++qt_ZAlZa<{b#PMtRDb%BQvnPM#pIlDC%?B>{78nsu))%%9b%ikC@*t! z)mLmuUBi=y|1(EWT6CL?9A!tel{pr=_Jc3U&Q>yN0#YF?>5j^ZNC(NEq>w@w@TkKy z?4Ovtvz5aK`k$Cn@==W48;FN&*H5zk&^$f=V>IMvxVMv`D-*i#QJ%F&Ns6fBp%bW9 z5*|z=TjMP88Ss2ZBUUKa6TDE~4$C){GF?4Pk>Ye#)36%S68fs3u0vjxGi zIE+owWrc#m?q}4X_)U^rK72CnL|rCT^B0r9ID#hI7#P#)>#*^Jt&tW*XPunxaup7y zRy9I48<#$r9xVg+9+D+1@TQANq*T7{^T|0Wh-9k={Kqf4Gi8)2pO*J%TRp>>{rSS9 zWqMz!>1xMInEdmJe!CS^2u-QxMG}2IxA4>3_(jP-_?H|da^*l{X3XVQ506b=Wz6O~ zLHKE+Y0B<;zfoci|KZ{KF5rG<`J?jK_%ttpCPa3O^qU(p!1WGHga_3uBZT8jHnIzAr#B6 z!_&Qa#5^xkcCG=|8S(j=OS1wB<5CJWFr$jsHBX_6`_|`=%iqQ7vBG%1fmOuNtv8LJ zqpdrypVw@v+*!&Rv!@t|MRXGt;fN!C6l^ogQmssKw>ku?7Nc}eO^H>BaMnXF*Sup~ z?5s+&aGa&G^0<)|k7C~|f%%clQ1&I64G0BLz!b3+f=rf|UGB085 zlhDcfVniZAI+6O+5=LLIyC=B?W&>lLfB)5QSIr?{^%E_OZrqX6$E83fWv5FYH8Eev zC~lsLVH;O*UPz9v00=`W=&Iu7OD}wO+am}Kj&!rzx(Tx+6No(4I5%kN)V+WF!26GWBC9x@+G9_J8c&i25-w>U?M_T62j0--QIUw1rLKZf7WZ!CA_7f+h;!ywQJFu(^)?!<`C+v>IjU?NSfN3!^wXR#*!Bm4 zFpH3(kkQ;Z*sO#VT7g|l=#jn6;@i-|k(-Do6DVNHEdxpuw;HXBQgL-dg$rr?IFmlZ zHgw*zn_>sXw?>!6zQR!#Bc#LHCFYC2c5=_%bQH-n(XX4D>6qIM2e2Lh$+H>7Q*jgG zgMoa$WIGY#q)GtS><{edUvzANCM6w(zQuK;bK~16bVO+!nJJiysoybC6j1-o{abp0 zDU4{u9zuHP_ogH|6T4+?RKJCJ`XI@(j9yQszDHTyZvn#ShB|-!(KtdI)dLe6Ro|CG zdWg98wT=7kfN|uG>gNr^Dbq~xIIe^Ulm*N{+5~idxN@cylHa@huBDwIWE--aX$LY)aag?k-8~6n$((g zWULP^Hq+H&7u)?H&H`Q3sKzl1F<$EIZ{x0}2DTYu%L(seer(lW*R9b~jBldzx5l{{ zJrkW!Y8+DVyn(e8JUqfB=GN*{<_m)$dV!-c_%4Q`(E?G&Ph|lLIa01R%>&6Qm_sUD zVV?t(4T?vunCjLYekW*4c|HWHfw&Gom19z(c%9lDe!?BBre7Hzhhv;v*%}4}l6IyV z<=9`|(}19wzkb#TWbdz64{aRf5Eqvf_dI>AtGuYv(A2U5_8$%voL0pW~3!`jGDtP`&`C9oWIJ;{( zQ8G$^!D|b!X~ox6`HzsgO>w%dxL@+Tcus6-+On){S>5z^T=Bcx4wZ?VKI zMe_8T5GS`S8%jku5XtIzB-`|q(|$c0EQ}(m-G(E46d8nY(MJ1n<(Wa+p*uhHr^mTk z4&*mH4{!~Z03R(hql0L!wxtm9vNxRrkOsl{>*+=XNPpaLaNoO=jfkH{TyG zF}W);$Boolkkh5vBwiG9W?%YTbMqt8TIomm?9j_H&ZnH43bExI)}|JwVQ-**1_|Cy z%@HzIrc;zn-m!ct=ajTX((cleukX|7Wg6eg)9m3N89#6cxPEean@+kZs@_<}23LV?Y_#L z#Zpp|VY!w^u1rUIpFZui$&z33_uQ2lLy(0_`)x9B{$pd+`Z>TX#Aik?MV$a)%S`JS z@5+D`Eeb`i9`Y>Xixs6VdT8)=HXT;xe1*>X{q#7|t<)(7{;Qd1UM+Td(VnYUsC*NK zYy^Y<+IZr36$JZOi;q<*W{{S$otl$JLR@1Lz0{#XXjvm@X`UlAR@aWF77<4LLf`(?u7k9B^K?)Kk0~SXu0y8&gAP^y!ohUu&sx@Q=wV%a$8S@th|~>QoqGy z-SIN~)@piW9dl}_+Z;Ekb#-QlI_p2-d^MWtnGy zPHhscY`DvKIt9Zi?;G%Lf+muv+H_pT+bx*M4GWR0H>Tp-sltk>9i=KWE%(L>){}b= zW9^TciMnA8_+7w9-mfu{2@K^B#olgOInsdTl8LM%w0dk#8pdFs#u%PL4R1*~f&c3> z_*Hh4rg~=<|InnqlFX7R`x@b-GEB~Sg0&`d!>;%v;*A2lcz#`* zDnpDIG#8eI$=tt00ME%ynGjK|^c9MM{T_|I|D|l&5P7`PB+ieyZgnl{M^{H%ZpOuo zR}F;jZxTJ7{c98*!$fLh{_#Yn$NBG~_I1;IHtkR*$XAd|`Jhhbw+kPWp}y#nk1S7* z>#M*dCXG!Jd}70CBoodX=#WNtr5yegqI0r&Oc08}05cnh)ep3~i}Pz9xYcL64nFgm z0`pY<(nIYW&Mg~6?U1T&W6ym-4wER8-^5%^I|~_4dJb1aOnMU|H|jU!^trl2GeW&= zRy7i`YEvIMmh@3P2ZR)JbEM2IO&VFh*G!W*xfmObN`o7r{Map0ncu%irjMbyNet5A zPr$t8f1i=n<#tmV%m3tZds~cPRJ6uyUdFhQ$#Xi*JjjI!LPUyf;gwLY58NI@O^PT@ zrGZAnc(pLK<<3QlY{I;sG+drs9H(q;8I7|f7bo3!zInDo+g8pyIkr{ zna9LH=Z_UYBFxI~wg()uO?nk$Nu;kS_2b0wckWeE^N55uoul7-IV)mnMl=+Kk8pYa z^tUw5QjPNRpTe+O1Ltqp%Cee{^O(qgwt2%()e8lVK+l=B@@!~0R)wYZ`N&0Xw8T>AF+`PP@hX229pj@ zd;k(-oy$R`nmV}~-qaLWJv@Y(8g_}>Cx@*?XdO9JI5Q=R>lSK~zx|^S=dVA{<*L&_ zsZl=>XhQJ)bbt!Ob6~+rdR0BmkyXYGi7M;GGpy=zU)RbLN=xVkEsc3`X&eWBm)OY6 zzgvQq>cF61j-|oOVxlhYos#snm2*vcrh{Gm3jBKg8oy$`yDboq6e}>%9#;V`QmQpu z>R5;_ZJk&!{E%?Gat&%$t?^pgNLX!w|tg49>VL?G*qY(p4&%3(07e1{< zb;0>`h5Jqy_?ME!{ZS_5GM{BA;ENkxz3*5)KGM`GM&YzPyI)z5oMd;?@}|u5QS2y= z2vRAi{B@9-i>OZ1EGdZKP)9N`{G7^1aTc=N1P=N>KYvmMILP7hkk>t$647T|@J;&`=LcoOJvq!t#B-yU`2-YddT`uBM`EU2d_9i)k~e`us_1Wl2Z zw|n&Gb;+Eu8K;9vSHs8g@Rxk;X1##I%t2Uj8Quet)oxMQl;Pv2ggL%8|nMD zN7RS~4cFGM-qxYIMb@)u215>nbv?uxS zo1}Xp?jn$DVAiB+z1}tSR!V#mu2Suq#6^Y4o?X*vokL+wrVW=H@CW78q&$m*Dj&X` z1q?%W%*KIGTU&vn``@&&=4vX0t3W#|He0L>1P} z^xs*sN}TSPl~(}vuBd%fl*-)Lx;5k=+o9wb;;xuVG0mn1jmXc2u0{=fR5D%Di7#cq z%I&eqqlUkF*i@`a$;doWhTX4nChLWmZ(*-pXA~Z zq|DDSb-g@0cz&~pB!6gQQFJUiQG3-g)5=_xS+c1`+>YkI3eXjq`@7R-OTNvt-rpg- zHg)7hkzT`H<)Y!q-5^vjx$W42M5{gSd#rf%)z6ZUf4=KNr9-iuIv?D2kQbMUN|NLd zE95`H=x9DjwrS$L}XY*#)zbVPws>%AYd7mvBt2iSx$d2*TNl9Wf=@t-4*9%AP#-T;Bichfo zZr?GiuxX+?nX5_mIMXzbUmaxB5S=P~&#Lf`Nf+_kXhUPBnhPTae+(Nc_m-#U4CoRL z=I;eq|1MI=aCct*($&ck8HCsxv-CwrsK2+0Y_K~z+WZ`ncV6UDi^fu|!ST5;1E5f8 zGToK2PFwdvQ|-E~mN>{LO}C@n7Gm(_jIJQ|CNl%2Le21JwoOq-=*%MtIpe?fYD}#y z;i`?cxK*jaNK$li6k%F{g3-|H5$t)?z(W9Wotr+LaA@#0XQ$(f95#9KmUV zoI?n*qIvpJe1%X$JQ2G^1QlsWN^=P`hNJ1KMKjY>_}KENpdQ;QA*da93-4kiZV{%x z_(~)R8!X*Q9YJ(*ipWt|3+!Io%|8|0Yb-lV_~FN z*?fM*Fhx$R4Fk8hRgIp66BbM4b@4h%g6V?(3-rEKy*O_-QqWY1%m{o8r43K>Hl`2} z6S}($jE2>EmH`L)q{e8UbaU?9o7dL`!j!vFHCtJbPZ_45uMxPG|$O3=3P)HKbT z2v(e?qgYX||C6q)FjkFQ+_lx4aD|as6Pfg`<6N$d>SQax*E>xfNOH7lU~GU71t(fREoSa>G>akU^`; zOnN*GcXoRQ+OoiYGs9rnOOBiEhPJqh`Y%0Q8nW}vi^`-PAli{TLMmqxx8+vCL`WW7 z9^p5`Z)+RvFsv?}5}8p%d$(v=d{58RDG^f9bkndFr$#$kOB**K%ROQ0AL*t}I+Egm z_4Q$$R$aHMol}>7X)npeX)|2AZ-}fGwlYI#ecImM{+Na=r-!o}(l*&z2XY%@7>24~ z?4ChI)0xGg#o`mERhA_bRBoY;%MnxV$+)M5%+`=f{Hlo8Cl9$Su4lVo*g_3=Qi=|C z>CGLVU%HbiYj<0&UYX^oQMfJj>pg|JGA&h=QFIy2VgioP1sk(9bKd;|Z~ic~B+kQZ znd2&}2C2DJX&hW^l`Z^HTTi^_{+9)xr$L(|8=0x9&~84NLefjwt;O5$OU2MmyO1^c zyr!p|e3vzD7))lt>8x#u!Y^ct3p9{mp_D?4vM`1z zanZh;aCLaWiRPz`RsJl?`g+UGYTVP`p!5nbWv*ii2;}BsIx-hGC|0|<)KGBnvSG;@ z&p2&NanKRW&S6$F{ES>c30~^6mQz>#Ud)MBpb9-b&A54DaDckm`km(5xqSS*v)=yB zAgw~0@@WLuw=uzJq%-b^mf?w_0xy-GV)#C-DjT(8#<*CbvVf}u{e-O%N6`c|h#Mz< z&Eof-N7JF@HrYm!98lRRvV`4gB4@AU@G_=>qBWoBxNgDlLbt@md z@9$8=-bGW=utvcRQ7S5AE`+QNrh-y6^(1C-m5589UEeOcvf-ZP6Rsmw$zPVFlpk9t zZ28lgD~+(m5&6|x*f5$}F|bWD#qjZa3ZY5wv7fWQ;@4xj>_&1iC%0sOCOh}86=3S6i-p&`4b9&}--E zZ*z7Ov>U^ue+5@hNtd3CQ8xUle&(hxSomGE_EBX$K?2;;znu@6(ejcqWR9h)ZgzBlk@?Q;bnAAgi$o0hIsePj*cFGByEL{YU z`~2S~y^mZ~VmN`@Yz^=GbwS8YxTattP^!DtW6Pp5m+Smgu}wV>8&X9lR%gM)G8gDO zKdx{%k^CBZ*+hq+m9%Vhmd!iZFBa*kt+VLcSETM#PJ$X?v$oT<*yF^#L4Ipbxl8nM zIS)s};1vYQg*s2AZ%Wh!6)Mw_1*cj6N|{7X&%*4v8x_2X;=0&I-7ILQR}D8~BwkNY zo4?lcLhcm2_e+V_$lw1~oY{leMv~ZQc`F1IxOLYlkE4frj%2oobzv}vvTtiTtT~2A zCl#6uwbI%I-S2{;{}hQK-I=sAJ_T9~;gsT2SB}~W!f!#h?de!wb;43oIJMX`)gUPc zCDG5$b_DVCDsCufXj&Uxn57(KRi5*ws($1m!eHxs1dlO5UzR$mJI*{=r;%5sE_G^p zlN6Hd=4c77#?@RSCT1sbZVhuJFr!Wzi5?J+MXnCQtF0U5S2{}Q5n=n|4Cb;j_Z=Dx zOrq`4`s3_gv<7Y&4%KD|WtscgtM}FF(eo0wQ zwQv=3!#1)y=}BReG4*ZR&s+&Fi0AlI%2Xa5U!o37DV$PRO17f41K5P&Dj46dS{`m@OUEuifcT>MEZMLB$*u97FC(7%94spDcml=nrw$(!U(GPXl;4s7Xo+ zeaaGo)@f;AMQv4`u)GzP)V_-!5Lu1BmD%r^)1tgTt?e`K?M3nSbSzK2O*#)EEs1{F z!tM|YQZzF%oCX@8P zg2clh+P_*gzoqOYlO4kLJ`aygeAR!DaeZBXIJ-a;Lf6{gUoPp+i8_^^r15p(rXkIU z^H@+wwYq1d^r#Q{oeYE!F-UJlHNv}#UA!no@(Zx+<(xSIuvo&SrYRipj}87@(h5qg zs0>t5tff>EU!V#seYGsMLX=#w(A)9h%KTEMa$jlh&zuk=9ooFG%7m%kUwnv}8*^va z7(tO5QyEOa|2a&#uaHIoQ<7=g<8{1PbG|61?GE&kP*abT$z<}Ei8fJBvP`etdPHxc zbBUHR$icRvF2m3O zm5DLv3FRm++1sp^V7DEapncxP&#;P`@t{QhzyzKm5Y# zJxa#Ne@I0I3oCBb)kx?xn;vbI3N~C;*DJ9zRsT)G;VwJCNcg8uksA9>>{GwxH84|w z�$EPu*_5bM-TQ%rYCSWHk?#HHrv*3~c{lg!*OYA~zq-nw zkErM$hd=}m8Py+b<=X_C$P2hUUduDsfY*em5SvX+Djg}W2Jr=kS+y=aV{FG$PL$uQ ziN;X&h|8AB`=9qUV=kjdq%bRe6;Dhzz}UzfSdjH*;#)blrVL*Tl)4??jaJfUnSk8S z^;rCwcj!g7SDgmt&Ar;8MmYQ&1#uOc6DIx=Bfovg7`90M3~8S@$CdNio|KAF*(t`R z(OuAwDZ#r|9=+N&%znwP-;z)ww~@(~O^xi<^6LDmnJc^J&`CZjq+vW+(RV;M^~5ov_>~g*v+h@@t=qQ1#|Gt zZe?1Y-p_%+Fi}m)mR~95861}8{nYq!D z$J8E`%3bi=q*KrdFB%CqxPsD@u;((v4wV^|z?7Z@4Rsg9-j(^{KJXjQFynO-5@$H+u?mUuIp zzFjPBoj$oH-P`eyeaOWWWVvT(aPsKUzHfwoTz5o?CZ0Q^BeK%J;O_9 z_q9r2`(5hwvB;y=qw%mmF|y-=}+d5D0|Prmv*#`iyC7QQQ`fBivTR=w;7o7 zxaBlv9p}^65~Q*;!n-`rZJS-e_4kOU=Qn>YUDGu=zfs-ICO}4PP^p)$1Qm*oRhWq zxVx&nAqW<-#q-AkWY z()nMHH`oSbBR{KMp4S|i)=M>=igNIz2i^PlrmyGwG!K2TTM@@gf7ZI3wHyx()*Rj!pFb1Kyti?^)eOJGtybJ?{5oIabK^2Ft~8#tzDD~f zW>i<_@(_~*d`3gg`?*h~BoeTbNh-ZPd++?F)#vZHbOhmUBx%XZ)7^azbi*oy`nt~n1pceN`)ua? zQ{?TLVdKS#u1@{V1;e0hWz*&3$~r4YyjMTG{|>9#UcE1jTM)Jn_=f&G{4Zp6A1-BV zGh4UM`1+RN{MYH7W$(jgLsw{HGp1}|$4ck8Iw!K%Sml0qTU5tZanOA*kiP}iXP2KV zTwMTK1X6-?6`&q^Zd~UKp#whGKHrO8zIi6ER&e>v#r^}|I;|nCDlgO_dAs`eEfCQG zo`I`h>YU@Uc75gqpSYU~W=gG?1cyA34&80*1TjB;xaC)Z7d$P}@WDZ#RXbs=aj9`$ zKtj*9Fv==}_eBBX8-x!?@+82#710|oCt{GYJ>_+^Yah~lH%9Z{1eg3#fOi=FlrKAemru%Jki1U@Z^CfzkdC>y#%uc{pIoNjk3LL+ zeKGxYl%OhvS3*EvYX6QT@R|bjhyjL!e+`EACkYHl?{^{xWx>A|LHlzA1_bpxQGoOj zUbz7f+Ul3nn-R`rQK1m(~Aq>kIsA74*A103rei_|;EF4RXQ+w;{ZCLBFF1 z2ITbz$N)uXL3!w4WrSBN=y&=+NMb)36=)RUl?VErIuMfDpGOJW!2&lyze@ukSb-wa zz%S_FDCl<{07M`VlGJZZ2}(oQdgQeLcYD8s0f3$8{x)(D3xb~=U?;4-G`!s~Z{NJu{#6^QDCDJGCi637BgN(15s z#9?^B1$ttD*`Rx)`{QUphtTh^fNNS1Dd3t0#2fel(=v2#SpO;}m>)n!4iW{3w^Ii7Eq25 zm;!3 zz)2yn@5emQ-i!OYguL3o8bYLg2Ed=B2G0&*g5Z_CMO0r<3P5BaxbLIfyAP-f#=jD7 z$9U~g`40F7Q1$}J!{j~yjWNLOZ~>A)BEj~5c;-U95UW5J?uIKrlQ7@aoMAllc26O> ztu9iUE5kU<$6D!#7ov#tEg9e@I=B_Omn6_h8MyuP+nxYsyJtZB|KGs1(C_?!$16I_ zot*wha*z;$-xt76R==?_@C6;*3*Ac=_=OVmhVc3cAQIo-^HM+jU&F%!Q$YLE2l_s` zMUW{0r9ad|(!iJiV>zHSM*Aaif>%g?5%jhkaQjYXj}72N2SNp0Q-fFmBANYh6d()e zD#;-rduVwv$`Z=KeaRYr1r6SZ_&0_oM5CoNhFaVLP{wQc8N)UUXGDdsA z??-@HSicp5A5~zUIPe$~><#@c1rW*W|3VHzLU^S_^SI&OLc0X>q)8}1E@gS@P2m=Z#RG8{fq%3(fyn7exCn%vGTT7 z>?V&WjWWwCyGE3q3>@_9av7+ z;KLMXk13`1%W!x>#s7d9fqrNEsFfcmA`67On%bF+P*x$7U!8fsqo4z234x~tUgBnp zKBQd8C5iaqeW>;*5iNna0-vW0gG>SiZqUwp^{*#xHU+``weOdGf4qN3*N~B-|pUf-c~1>K6)=_FSWixqd8ummLZA& z&po(gSa5m&hloU8<36;}9Ny3OhFTvGy)Z@i74?5~xn}Zk+Og2`Id{z-58JVn3!nS! zjUg}FV$A`nKqZ5~1^l$@<31y9#H|P(mCQTH<*^8)L-z0!3#zCtC*_9*^yHCChp5-p zkw=)TVLE#6efbx+tq-^|cQN3=*F^JBUN6!@mpjhnqdDy`_t~omuWUrxsqJ(hSF@DA zb=;H33b-)a8W}P>)8&fV@Wy>8vQjyg866<@+#}GC80`4aL6H2%x2r$L3zn-cmHDV0 zYc~HOF!8_sefG|W^|Rj}-QYjw49g{aOu8pBqy76qDLc6F+uO$s1cRTiq=_e7{u6%D z^uMw!@9)LmR{vUtyKF_csqA}~e&7Jt5=$yH74S~x$2*z>hT}q8{jeiI1-JI`|30@z z(H`@TM@a`<=vc+ZC)+;GMyc$-mQe9s4NI0|mHS3Oy5H(QOhRbcnK7QYaS#Momb~AA zU;_nQu;t#L4%Hyn?}^se!`kI{4afAc0yj9e+uQWcbiHCf(`xj2d#kJjr9U7UFMkxu z>vzHhp9{VT{@oKn!;^kJHeuKksq3Y4rmGdtF|MHh01|Z>5?=IvclPeUc>2a7_vL~35<IQnCuo&D*A)sCfIM0x#qx%=OjgXSb?|FE*WHiWHzg2zKb?{~Xpg+B+~ zcGw06)~_X;vxn?6^Sfp{$Dm}W44-=bHy@+h%ELf%~~!&-V`3ofYK(B zaf5#f_=}r)bC*>OpO=`QmjwhEVL5x|HLLdk_cq^}0RAdI{ob1}5B}x-5o_|?&bQzx z*L}sA*3$q|5E0^fjd3HJ8V;}O{daGrw^#Vpa7^za$YXwgOGT0v`(M&S|WBdRZKAzj4} zG>4h63V7lu-!eKw@=<~El-3GH*!cJTiGBW6QXm1Xm8#o3Z~fze-9 z%&1AQ)Ryugx4qfAB&`uHJ?9W+OTN2Yv$T6Y+mUTb^DUUE^JRJ%UIoFDQf-@?X3mj+D!l)^_M%pIS)6;X^pz!XFSRg&`$M9ImL zwg9Lts4w3k>-Kh_V97pWXQ^-~vHoX0qP6>NgRz~*P_tN#pR*@No zqMv?Dv&t#cetMCv_i0y59KB8(ly<}G#%Da%34|JyV4`$)lKt-d39nKOT(si%u-QH} zsN6M%BHiOy{WnBpMJ-|aKVhr4O(TzjWL(O7{NjSF699^^M?#6-WKCIz2o+nT&15-~ zz8~5qk&5aKfor!0Lgmjx%DnpDTs+28UF;Hf(oPrc^|NBrzr{K#A$a_7h+4WD5l)^} zgzoXtp~qq>iR1G`WrsN_m{iWbyu$ z^ZRly0%GhH6wqD!Ly1ImdMwUhrwj9F+~)hPC&C$dE8(2SMs>JiVA}d+v={oNTy=4! zNzCt$^<}4FGc1$BWgFJ=4A_KU&slv3m*qE5-@9;kiQSNz?-!y^t9GeCcdvZly>VJmYLM?0W3Ha z9ec*`xI1$jpI7aIZPB=*vND+{)=WN^`F!LrSjv}+EOJ*SxN@EuKUdTVdt7O$Gf3Tl z(IF%6Ni|5V%)V0zIBL}~OUx^jb*Z#|u+jgB54;~QDc#S?%N}BnKxGM9s{|y+FW+jl z?kO>)sy?Tbnm9Ieo{-P@*v}+o0fhc<0m>1kevFt(5fojqrhd;yU=DLBeB(3Bb4dP%jrw5Y+xo8 z#%SwT{&lN}a#f|6Kp4GfmXEG#!xL01k{RSacK?nyrI&QGHMe1|Q=qu2k-a)$G1v!_ z>~V`6j$K2=W@N47Pp675zrs#(TEo{GRLA%-Ji*nPxGB@of-)(!K#^tH)?k^WRbWpG zxF&x&RA#lvO&_;B2bDMe3fJc6S99);R7$D+jM`kNnM;3UWqaAxB951#*}`7V1%Dp= zg8T-c5DPJ1l7CG^Du4J&(py23u`tYijQP?v+}?w*N*Q`ch)0UqFeJWKbn}i z&T?LB%;=*efqCj$Poo@|(xMI)#XlZ?jUM5vo+u#O?Leo5XsP7Yy+^XfI;Jqy=vsYE zPESFdxS_PV%P!LOu=Nx7BVn%C$?r_d|F+&I2p`~~QGU@`D@2fqDZ#UYLy&m)k0muo zFfaWAmK^xFB4A^kheS62%~^9%Bw(-<=PwMfw|!UpNw`e=yfpnC+u=K>twxj-4#&3i z9y*ajv8G{F89pXQL47m2xM}MNv9_&v%}y=hI+YrmPS(3w8i);gG9%!;RZN&exAj8E zq})T5V!`w=#Y$f)oG!7{$TfHl{B-)u{uW2fjcQliEy9ok$hsjsPn(jTUh#lvi&pDB z+@P>-<9frO?akaga+UEZB}jMPs`U*HXULk$4MmyuPu)Vy4Sh@I44|BHZ(aIRtt@Ya zIiymPceg5V)v4By!-YDc!)7+NKb}ZWUq0OndTVBEuy{;#R?=b7?kQLbxaB z0(=WBPpowAlMNDb9-k3dxGrwz+a2&xs0PBf-bi-47n2*y=j^A5A#QW_XT33Z6>BJu zwj3o_jJbRmI3D>@B*Yk3^YzN89(TWOR=oG?9CoV9n>29MZZ<>KjF0Lcn1sDjT#GOX zju^Yf#sy9lw(~`_F_5=KDjkC)?Pt-?D+jYJ?BvY@#x`3zX?xP|L?5vq$kKbRc&0TU zOM8mOtGm3}vlz>eEQ!Y6w_VbXgRTLGls@r&3PQG7k?0i%J4g;dXJS7n*X>Q^wKDrL z`&D}@!;)J*js%59uH6%gj~aa4>TinqW3#y9b9#<5CkIe<$X67WM^ zE-nMM9nibBHTY9tUg7TZU3N^aG~0nP)~p-f{47^F*$93>&Wdu}%KPU%zJUCe>tzt$ z@0Z@_tE%*cwv6k5oxevfk4@ISU1TFmJs~G$F(+k2_eJToaKHUmu-?p7MexK#tnA)S zb`Av#^CmeB$d23W-iEneg9&@phOWQO7U6sLRkj$Hv_M+J>Q+EyDk1@}@B4TNetj@X zB0u#+qVU=`nPC5iq%RLhBK`l*%EU|o*|hS&n{6%aTs0NUBTGwnKW$k_(y^@_n`o9| zB9lo9nVDHp>p{o1Zrg#KVk#JpM_H0xnyJKSQeH4#3^KrP`u_eIALe=Hndf;QujloC zKjTcR-Q7B4P~;)8F(~+7p)`ax#N)(xOb3uA$B$nYBoYl5_#B^gh9ABD_2zSWBPPZ( z-o=_tR|~$X9KvaZ1o^msyL@FhO`kL{s@m~Y_4*a6=O+y)<3Mq6vBoozr*epOZdYbdJZ7&o3#(fBaE zvbsk2_Ns8iPpeMUzB1?o7EIn4c>ZfRZD%-*a*cD3t6Jzj{oK~D@fwF}VW5Xhq?&)1 ztT6JL5Kl0$FML(Syp#V?86#OYG46C-$hg7jx++ZMbBs|F4-IxUy&_>wJVH|`;}Nam z$tl1T_V4%GZRTgJ5NPO06&k=PDZNv`mk@}Jz2MG0>-lZ!YuPnizg+L@3<-L6@= z8eO@l{Iy2EioH>g*Pa!dqo>|^+@X3eUriUrNjo%u=bFMACUuqM3%w0vO4s-<~2QM#;Bfjmu%=Z334k| zvpWtuvgr-@uBIMS#Z}YI9hru@HLK~Sgr0we%rM#^{&(~HdlhzD!67kKP78TtT9plK zZ5O?o!*eJ22g(uh-Qzry2W_Pvj2uCC?sATsT2; zpU#-o9xKdEJQ}d6VNxAtP^XLaV58AV)I?{PMX24-MAbxY^U^|UI4{+_L?%z zcJ~G+MM;L=Ot(wbmAONTlzEe>izkZTcMbK??kcAd#);`_^XY2L2%W-deuu=87}ND{ z=_pW@jl$_%d7i@8mHs@e>5nAT?xuwsny_CwUlz;NcG)O_nQT|tMaODynKoPT-fiu!1UVlSZcXx{Gc^0qCxSG(&8Yp zI^3jo(WD2hmj{b}# z_2Vp2@7bJLutZB5`f9dkCp*VqB)z39TZCH1xnW_#V>8sJ6 zMaE!jX->WLALX=h>T2%LcoZWYe?aUb9FpHsGx3MSH@*+%a@WKQXRlf#~@;I%=j z;&7VOb5#FByHOi%k`qRRo=vLldwPv)8~PR*BcU4fiho79`*a7KWDS(FjP{`%g>-9s z0=WtxC}1HM)%aS|F4cD&M4~~YcH9;FH@@nQxwyBXGp3>1TB!ogNz+4-n5t-V=ok(lf1QuX*RrJloU{x3{POeMk0{zY(jVWBF?lNjf=iXMa&6UlvUAO1v%~eeH z*!nM0GUz{LU&Pu1L9+Mb!d#7(u^1?HWzYZN^Cw>NBx>&xgg47&gd=W0TC;p*v^h7E z$sw$n<)*yZMyz*>(;@>=S(50fag!zb7S&IU8}y3#%DCy zyl_3}6!sA^L`3xfV%^b{AMYNwlu7Y(E@N9F76i$p@Qd2l1^rEPJL_USIh>U)WtTHt zQHsk9DqkZP2}Vpj&0gnXsVQ6Y_?MX(+<$ho-YhhGml{=d5 z_gpm`h7|02?G%pi$>&Cz3C6dvFBBvkd5-zeOh~8TYBmEDJ>c7JT*GBdr+qZqTsH*c zOra&H0oQJ{$Hh)OH=0f-KlVuo73;R>GUcz(PwG5PmSPFK52sMdZ5i1b{JnF?Eu8RF z){1P+EW2ow&ILqqMhQ;2!T)t{zGnPdxB*iuZYrDUf}V+ORVc!cTHv`t`dyO07+1;S zuf3bF!ZBx=8}2XdMg+>M#_mf=*cTN}Fd~t+loyIv7j)~7IDH~lZGHM%G){fu#6(@y zk-lGlBp&~~)i?q?e(YfCN&liwByd7+|7o)4nv8do+uTqu|F3CXO$E1852th0a08C?b-2!R|zf z?es`EvYU2kqz@N2evPcuGdutl(fA_vi`vhvcK!!-JdxwklG)*ozU|Z05t2gr)4r}K zRQyG)$3V(LxmQyf3&H3$)UZS*%zTK}?F#fO*ZqvHLrQD}QhWDq^a5HpTUoKzQbj$J z6XM6!sILA1uab!Z7)Fk}tfs1XX5(X=aCReXzyS`Zq+q|voO|29B#$83pPHeFgvHqq z63C6;r%RB#qdP9EL@sFlvhqNtx(S$y)MdtUndqhOcZhaX{$s7Isn<#7Dw`WnatN|w z*`IPZwsz+}TAWLeWIaUoC^va=$rhgP)fms$0DE7z^lj7@mNu`7TJPtRaCgsgMqoqbYRC+>U&Ygxp$FZM*EeP?V!C~|4nznzD! zIhb7i!Kp~($hjM5*C7jCC`aAVy_GcK#z!=gvd6wf@epTf!}qJL2<01|E7V?H08S|w z^#A}fCGEsix;y)M##jIl{s{O%XG{i8`wyf;hJ#T6H) zS04C&m@Si9oCR0Nnw0^*;Yg8u0~*Bz;3ShxY*8h!{a#+iJE9kj#|OxFp^ z0OLu`r`VJJQQ<*zVjkMAi8HSQro!%W%x<5GL2eGYqUCs!ohWHhdpVWe=S%)R+Uow+jDqD2uu zGS~#nQlv+6g=zL*`@;1NM2X{oaxNDiM$5thx)^_7LV3ch~DO@}~ig!c7yx;X?7gYEuyF6dhP=5{c3)7fGCE$j(IfNvHvIIx= zOWO)=XZ=ax0yb06XDzc)eb|jt?8|%&@TUwoM%}3(h8MAy^Ke*okSk(sg{oZWcWdN* zs%%(lp{%OcQ%@v6b|#04cNEI8nr5jB`qV`EBt4V-IHs!eRe^WipXpqD4lwA##b;9; z){57pA1B;v%Xj789*2%{ZyQWYxPlnLhAbZ6 z$hITES&goeR(m3OHD;jVzbGZ@(Wdu7AI+2p%ZJZmC$D4B(!YRvJL640_G=D-qsyx| zo=KieNOYyw#qn99aqPhZ5}eRMQctEpb=2tE4gvAr@O=DdZB{V|@RIj2rUPVBOS30( z(g?Pilu>8td!3U|(XPCYvy>et84t{r2hkeBy(Yk1_8t*Mh!>fD<=%$n?(_oF66_3v zo4nc>=Z>z&Z9`mS@2TU9xn!C>te5yn}qTmE_ea)mVpM~q)iJW;zHH1@`p_>gj#Vp&X z^Wpl31Y^*dh6tRgVDTr$Sq-rE^ZQ90;Eps>b2W#7#egDTgJ0|N(tuN&17Ag$k9+C# z2e`hO4lUWD^gfG|rlSsA1&;G_)_0e8CvpMnej}0Voq30!ybow`qrXy(V_Lk=3}q=D zUzZT>4d2GB|AXhQJW3bV^=zbrlb5`&(BLlfot2gLDXUxjKs0(rQ{vioHGeY~Y?#fXd`+<{_3!!07dDzX zT<^LgOR-kt;h4jC@RJ`4`-%4^-ll#(__@lWo@{) zA?P3)v`o>PkCC0E5b=4rdYyQOuhyOZTuBQ>)Gnh#i8z|tU#E}5DdzI}%R`X!kzdpm zL?hd#Kc0L0*!?fYB>KnZse1pG2)!$M)w^H4mpA22@HuJtNL$QRYhpSv_JsovC{83# zI??#w4|&Nqfu4fo$t-oGcv@2EPR~*(-09yKzAp4Et$=WELNtO;?xW=xe)q+sF-hRw z&bnizJZRdENyBu;g+4+_bi?l1L^M|AcyP>Q7Y&0exC+B|oqo=BLo<;x^>Iw=$DhKx zqlbh=QsFubLonZcRSdXdhgUX7`wo`>S%^W0O$1g$#DL_;D%ty>ZxP7m&mtO8Iat>g zESIoDf*%Gb3$X>Jvj+zdp=>E;nCjyTl+sg(se(5Jgd*B| z#nP&vmIADa4URVMJ*M4*;RbCk1}A~UdreXYtkB^?FOZ(X0Hhcfhs_Zy2wd4IF-DFB zh9s#ZOryiaIBDiaBj>~dVIB|GEnZHQdNrvQ?qNUi?*!Os;TVPlW8jnsUsVe>y zEd*%{`FDJYY)kJeE1b!`zj&B+8PN9-IDz2paN@nOq^AVqP2X0EzBk>%Wx*g{`{=dUrnhvUL zC~H`6E1j$Kb`_26;QDrL9hGAp!RIQ{EZXH&nCA^e^0d?DGWE&Xqbkg#!;pQ4JSCd- zrj$iBIQBHbp&I5bHDm6kJH5G{6Q!`rAxJx6~?qG;@nXG zdIdlEqBPA(Ry8O13pUb>4e4%Zq>Cx2K=TT3re7d?&v~$m?_dIpY!!2rr~F7Kj8hupkf+h|x*?HZe0bN>=pyqqo0+e6MR|oUrlb+#^S4bW zG~_VXt9J{J^hMoE;Axm<@F&~rSq?J6VQ)Qlz5VEUsRet~tCdTP9t z$k8{tU?I=T)_!$7ZwiZ6TN9sEpGm$**5YJ<#qn2aB4@a7411gf@a{CT*$*>;1u|d; zSkTI!O5vJpc|W$fcVVReiLhmg?9!#+VZ*rgUkz`H5r#Yn+ox~lPsO^T>s%x~ZjgeL z$&EG3Zr*d?x!)$*ol0mQ- zbCaoOT<;bTjA@;I3HHbOqRQF9GCyD)w4AG+J@qd}Ui5rhvS*j@v?g}OT6qADF@@LZ z>u}^#p@)TQk;LqCY8!5((tz1k5g{GM$!N1x?LtD*NyWGbr?5f-)AmQmE!j4rFa-Wg z#%5EJ{q?4`(kXs@Em>L9P`hX?68Pji{*jqdal)UEjb=9VzUuQ-vQMp(GLY^87rLVx zS`HzrWaHZB3XJ%cl{}xq!t1KFYL=a{>LgV^6U$T760AOTi~nNQxYzd0e(g<^1P~&G z;S+n^&{(xu#sXzx4m&eg_8vtS$OO+g+G7|!(k>T3apgIw{be}C^xW6( zg!0ThG>alLEoa;lkVzvzwkH0WS`*8?joi){NkT^m_D`8LfIf#PQO|CP#+fKTupB}# z>1qF%t7Og!G-lwW31xja@=1ekQdN+C(^3+D}xzARqVn{uBE=0`N7EVD$a$nTeN)%$zH}bG#-jyc!?~ zj$up2&gmf}ON#}7?Ivv9y1W>Wa+5vra#~k`DA!Qwq|8~?7L2)YsVf%SZRHDN9?`6n zidhNb16*&8EFbI38N;Nz8cE0JsjF2SN97A@nu83_^?##qMdPYk6~4CW$0N&=*y>ZZ zidjlO&Sqo68I5$u15AUeoGj*2nJ8Oko`@~4ahq|pnNUn3e@f-fcG4tB9KQ3rwOpZ1 z$}fx%@dJwDlqPoA7sdkE;eQKVYc0l337;8q>L%26C|IDMpS~tJfi9@*Lf4W#SB`GEt-F zY=*EzktHy*dXZ9YChXjdMY>btxHtv8k4u}G5%$S(sOf!rw}Wyp(D@|Bx-b<;`Wy)N zB&|_gH7@9MB4K1HSG6{&dI8oVAzNeRLhYZ!y{$%4xI*g`V!A6mt6AiVZhNifV6oLs z=P<3=+^O@&-pokoa5}IIhJKasNqV1TB zvAthQFbyuGu-n`KJ}YZDx_T+Ngi(y>{Y4$UZsZuW=zffUf%xT66G3q@t5qJ~FCa)Q zhbkPFjtL3E;Cf{wFP|}L58X~?{8IEG$%i9757zv?rglvV?ES&j`1@b(id^x;Z6{u# zRdTY-(DFQRE=fQ|UANP?dU zzSH1M6d3y7^W+T%j;ozc&okKo>mNmMaB!YxZS^fX-4$@}@>tF%H)%OyGwhB0C4O0` zB{9$FM~#nK?DzK#nD55-b~P|E}gY=0~&B9GM<+&L{~ym$oM=AY-DDXvdp^OK=-7N(m7Khlqb<;$f{e}4ChS&wWh z7T?+Y&OKq(OXW3iU)gmMtorO*;N>&)Lm00kJ9q^js}2gQ^`*X?{3+!dvxC6QF$Ofa znXKWm&P3KF@r2x-uLU#uKXp~>Y=`sy3_~A&ixHDkz6mXCnSA)@%#`gFmp8Io^J0() z=*Z|^b2wmIq+)-OiOWjAlke!^!)dtzRzQx7XZmh>+eLab>Rg&HT8DOq#UN=ArN8!P zOnqq-Oq*0NA9AkT5A7j)lJJcd3TOA;KZ{7^G4!b|)L85w*+`$-aL+5j-k_t{>E=O# z%Co5##4i;wBz4A1OToOAt&CW7({RP%5PFl~A5gnX_#y5rW?Ca5kV$U*jP*`sPr4a>LSu_H6pz!kR*xBOYp_+ek zN?Ik72jD)2;x2YzI6)6YqJWf-9rjW5smWvRKKf~AHy=*nHSp%n0&I|{D=`1-qkV7h z{r&I>Y*gRpi;>_JynMx8S_+)$h+Q+m@#GM+2QCcmzvLT>W^_{+dDzVkt*`a^p!h_> z2A~8BuQCe0w>-}m3=jXk@|7DckJTePD@--VZmwMe|7TG)L8D-|Pb2zr)!QAh;zS!k zn5Sn)rLSm>b1}kiW5h(PZ8`5G?=!+4TCo`RGni?f+SW!-OUeLv<`l={owr z%Dp@xx5rN)?zFe!b!5I)s<-viT#R$3ZyG@9;!&9nA$M0lH*3r>SCP{RfGiC)rqRvh1 zIc?EK*;u7OZi{b9U9xa=V2>|mVZrQ1v30=nHxEjJ&3&t29FuQ@pf>iFXw&VlCff*eZw>~7n7j+7^H{GUImxNBDXj$ z5)!$o_Mg1(*7-lsemHOEI?Ntdd-U3oZAK!nVsLoSyeZw@?=~0?d6plMiEJ^uI>ZCG zsW&qDt=Katd{JK6|NgDmF7bys&uv79ikRW-#*P?dEd=2UJ*XOAN?G%gF%sWo4ovRJ zM_WNHI?Sa#X#rx`v{5tv2s%2h;-#N(+F2_o$*0|20$VkgB_DbdBaFx#+u{`a~xXkW6?4?NEagq)TOwFH4Kc^=$UQmP4pY6b$ve2Mlz z+ahQvS^aWOKB@xqsGl_=o|LOEle+dg$zck#C%x3eN58>{q1r`TZA~?@#@R;Pa za?WoB8x?OZijl-=qP;ZAF$KQ;H&%Et8-n7lV5YTqoZo89ZUhM)n--?iU!sbXq!n~Aku@Dd6%;~9EGWM3wIH{Oi zosWJ3^FG&H59H?uiv>s)(%Y~Q+QUq6F(&^_^3h){$q$Y%LLQ6re&&fgOJ4Cho*9ep zfsILnn}QDbbzO^~UPP*vI#Dl*J2$W7oA@ai)^JLGsU{Arac7?qcQT~5_%IXuFxgLF zSg?;rD>znl+)md7rtg;S^UG(?h9g*`g**D2iR3H8T*jjokqecmUBGnn8E+T?X)>)l z@T5iPVO%=u=L4VHE^&lIHI!AAEq@1uzv`mY<&UaNsGu!;;4#BvlUv`d~t-+DglvtXaFMDTtR;9&g(uW zMw)jJq=(LtM!&0+2vU@p4{m{tw4YBSUc-KuBk9whPJvd}fCOfdVk7#xr}73r+Elus z)^%ES-r0|wtq;h-Bm>`BiLIZRwx)p-Bn}tr^9_%dtFGOMVRqO6L6Pp>l>S{=f;-1# zf&NaNQU*!NRbMW3!%VM@sOB4fys59Q?yT6tO9T>&#l!dm;q>7Tm}45xwSn3`<4p^` z{NwQ7Zwpxj*>Z5GZkS8<Hcqxh)8PxA7EkNKqpXxnpMkDav!P4xz0AYV{V%_j3K>WyncQQtfE z_JitykrdJ16v(Rg2+I??y$k4xp!e4N0yQXOc`iQsgVVO6GnvHVC1VG$CENKQ4B7ls zd1@KwgCCEUf9xfmCyi^gOe8Q*>E})nv0U>uFL=-8$nwX3n7F-b+H7+K~y7lJ7~q;guvu-C7W6Fy8iu(l@5d`gpB+>M3Mxci$Qz>(`e5)HMHmAi+8)Li%wbgJ6r=YTV@=nq{2OF(HnOg^@bQwdNq!+H0n_Ys zG2q*C9E>wAgJ*h{amF^}qrX9imP>pew@5>S%v5K7-ri4hl{k$*bqC{jE7~lf)MU{y zyzKkDYr87Ak{wWkQ9Y>%K;z{%x;;} z*Lqy@)K0e!jLquruPBM2obEUCtTwAc@P>~{pz2L*- zRD3_4$Vh8fn$M}$J?vC$JA=e8=s38ee~4&``jErRcj~&ra+$7Mkk5963;df`U19x* zQoMOIepb2z-#)aO>PjUW1`F+U8zEJ)kFU#zSBI`kmqyi^Pu*1fQ6$=c9)8J)C)x)F zUqE8FMP^tSA#_Vx0UZzez#frU?xz+K{OVR?QwbTCHd1T=o`zlXr-M?>5kpy+Y_&#SSK1B^C zLl1m33*Z;xsx*wZu6#)`>TD>eT?+iLF1FTf)YtIA4LE^Bi}SR;(5+6<78b80{aIEC z7E;s)H;wS*pagp(64~(xvI~meT|rAKiltD$o+c%PqZXx+@i8c2z|vvKSUexYh#?DT zCzc;B;FnC6)zYz6p47B(`fxsb4xCjP+qSLWH#y@_U{LbEC0L^oFx@`6SNneyjZ!aN zegTUF{wApB(VBjP9@wlXMx2qvOC;La@oyqxEco=L3XI%SUYU>N5@Qg1NCDLxlM>aZ zvWEBd^#skI`Xd6$(v*8UeblFNUMzR#lVaA2rc(;O8VtA<4XTuAhqYyrkN!iFt3%>DR_&#!W3kAB?nQnimDAt8@^bW~6mOile z8%U0v&gZqF?1k_Ja;c^nG;yWyY#p!c3|I=KxG2B&ymeTLWe0ETzwSz3pZda->-wjC{k)h zz%SM8Fg8Jwc)Z2U>)sJq%74!4)=Y7aaqwlJQf@S+Vt(dd>S#VJtz%y@eX7`?a06dYasWc!Q9pZ<3* z2PDf_$1fmFPh!>p+xx95#JUgUWlRcn);M<%^i!x>6q{-TM{gYptMzNEm~f@e&@Y@O zne4Rtf}_w`FG)>A-@Nhd<4eY@_^}b#O#>z{b7$B%A;^oj=ddpB}a zP~BtFXe?H_m(R$9M^hjuJ&NKySNehtJ>VGJ;5^PzMHXVwl6)u-lJBC8 z%Q3l^x>B8oR;&0`pnv=xafxC_i=`q2b(vQF1SamHC1*h&6k?Xs<;Nwn{4XMNA5~oe!#*bhc`U1b;Gt((EZ=lOJK+IGh?$ynXsqYi z$pc9Vwu&oxzl(F{R8K;J@t44A+Q|0$(6NqavPlE`K*k02D6z01{njOdXqNQF90PVJ*jGAc z+eRDpfO@|5d+~=M{P4{*?vD*MaZMgEl)e`Lw5D`=tqn3)O6>P>sF4*jQWu#_uH$ zS6rF^TzbtE-T|TL^3G!E_A%i3dCucslc=+Y4y6;wg=x-F?BG%U$oksVgVmIj_P{g9 zs(11qp^lq@N)=yPaIEeNShB~k-x_X)gJqk*Lwjh?7DExcX><=Na-70`wcoFBj&C%3 z*$0I;QEE1nUPTh5{&OFco-(C6!nU1^H5ZXZ!?BkSJ(uT$!UoRR7BD_7S*G4GR?UC= zY`WDZnlrUyEVc8z@a-j({;0pAWp7e~^LYOQ(35tN7tKkc_~;I-r;oioFYZ@Sq3DF8 zvS2L1(C6wi{>c?o?P5$PLy%wrmLFLi9ERFs95kYK?(hY{(lHUy_l*8&6_JJmhV8-h zo$40TM${Ye@Den}eyYpirjcwSlURR2CizUPfE6zla>gUfNc+$s=KoKFlk% z`m;9S&mu+)dbnQ|2D#q{4p_kl{Z)_UZooNYW##76!J`AGV*GWBW9hx35NM3^-qS}N zmx>i0e=qo_WH64CXx22{u6(u|9GEQHxh5q;TJG9Q)}}9|_^4Zdg7WU;m7DWX0T|d| z6TAWI<{@|kE_*$!(3O+$~LEY9!CGJSWGVXy}anm%Nyxk4UW(o z=L8R*5#?%VjID6%ojX1lyJReoCuFx-CfW+7lFuWLFDvZIJ`aqsqlt=wNw~{S=YoZW zqgPkL!)j}yiBm?3@$?zl?E!!D_wy?hKgu%)y>BS=myv}*S|&dl$ikis*a$%-%| zy&CHvm}cltGd+C_iN~Ox6d$!uKKl?9ySvBrB-SpAPkYi~S+S!(($-|DZC~P+ut*ga zXKNpLXlcs*hd>^>;s45p%pX}-~ZCBS*K~rfg_U7e?ViB4i_KwF+xg)NbOe6 zPu+Nz4~$ilMmMmXhr6+;LzW&3@e60fy7vB{Ul~afoix1c;|ppQa%`bMaw;+pD(uTJ zi0_OP9eVA(mSK+AGX`Tsge4iP4sC~^rfj^ zhBx>LjMAW#1C(s=X4yMzY8hcrRiE+F|55IID3HG#ylEnb28Bv|H_)fYD|pOCE%(y) z{x~d}G5#Ky^3Al82XxF&v&KsD)GR2Wd2Vqx)_D}zk&xE!fO+kWbX$`TXh{pFw-roL zoXt#ASni2=cp=>DpEu@}@=;Y;Bpy!eTublzM1|fY723u=n;ts=yS7FTTRef~Dy;YLrDybMP22k^L>fDXlz^oG9crV{#539w zEWd55PO1NH43mb0Kk}-=KLlF=i@`6!PromPdy0F4^fjg6 zm%4w$Yj2fe$znfu&d4^3V+>ZQ=XW$dO`C}Y6}dz*KXq;_Nub?h2d8%C)xL2vdBK02 zGo2UL+Gp~lGifgmD^_VIN4#ztD5xRES?=0qG z?ZqJeXtFGt*P1yo7yc-=*yZp&bRqciU^o%Grpya#GaoV&reL|d z1CV_sQ{@S*)YSd=7*v>AEwTJ0eiT41WBK}219x6a?CX=IDHqB8iURlSosZ0!Jxx$ z!N65V#>U-X_pjuw1cnXJb_lG3=x;JXlMH2h!^w9xt35c=_Iaid_Q#_X_DR-rC?*pr zMurxMqBo|Fd(=wj^U}fKoGpBHr2bZH?Z84x_Z7rqo2gF7I^17DgNwv+3ZE4;s$94U z9X6*JjzZ?mYn0ndZOS{`AboO7vL}3~FhH5km*#RX$ZWBWL82jslEYW?$ug_dQe-=;pFa2x&WE;=#w3o7$$LoW8t1sXYdnL8%BeeyMVr5 zAgf(8Y82aUSWDp-HV53e0s>8(YY`x254HOAkTn_%$xkxfjgCkXlwXgxRm=;V{sER( z%13;mEtPW3KMRv2KPZTYLTb&>T~2(ORryBtGBn~wfK%tPzeoufi(J|96qKrm1-vjNKzli-kxj>MuBGL{nF?9qenT`VoX@GkVg&c%^=i z)K>KCJLQ)@p6ccf-?$x%Qtsd%Q#jYoZI)Yt@;Iu&hXovrQ~6Ka73-= zRHnV~%YgM4V;HpdD=m;9JT<b%RFxLusz6)~&0JYg`g^4vFZjSiQ8?8vZ6O ztn-DfKNk`eXERqOxFn2QQP36eKP-j9gGwGzhCzHW<9Hyft@NobVL1+rSnvQ-O+z7x z#-B<%i}YxQ>{xBDHZNB%-GI`*s+d^lq>kPKt=8=9I}SQ5NoS=(H!k$W$lTdqH}Vn~(M} z#$MGYNJ$}VXNeU+fwxrFgz@pYiWQ}-<--+&VYTK1CXC6>(R*eiqj)FkX#~Gb^;b9= z)}QDF`@I(VcqIHVCbDIo*7fgz%EC%De?Y0reP6k7$i0dzkklUghizWhiHD%Qlt+7+ zK0a%|+>_sY=9p|gzZsH%gJAJ4-`PadJng0KO>BHu#sc{5SBvAen2dj&CMpUuTl;tx zc1Ku?;Ex7JYBrL$4gXiu7n$yq4m5$BTmfIyXqaEZqovTAwnJsVOR%`|j=PBh$5k@L zE#pbXnS<5yV0rS{Av?(FKJ#xc_@}RezX-Hhrr*7xZ~qGQeCsZ-n9IoGXGJ205 z+xYqDFLHN2a7xYF~%5D?9HD9TlbWuJHRtL6Kjf*jM|E3o;nv$r$dWdV(a(#DYEt5Q3U3^z^X;? z;meAjDaNIP)mHGC85ChVh>?-~>j-$s91aCq3h$J?$NEYTtgT%+d~z>nwTH@>j_{L` zYpGb$JM*Y3$7X8BOgJ;yXRjM<*oHUaVZm*G-@jfMx&0?Dm=eo-n`CG z_JX!Tb`;zA>mxEmy5Bo(4ga?weTrn-mD>Qgam=-oWKZe>?PQr-!UE1+1)mu%O({ZH zFM+u}>El0ZEIxQ7EF2fcfT{+c8X?QGbM-8~`dL=wb5PNI{PhBeCL6`Jx|a+r^|h7G zF_;cQk=L}r&|54|L*vsXF*S)mLy=W z!{F8sWC=25)P^Fk`MNagJS&gCpMnJ+hM(0WA?=k?NFrsAQcerowvcjJ=5YgG7)=AmK(+kfD|2(LBk zS`VMxd_0N)HPlmVO*4)s5^1Nh3a$8&7>^SXL}$`iml5x;d9Bi@G0p8quGAmKvn61j zGALpdyrJEOypc`&U{1y|&jb4*^Un&-X_ocNJgkqilkh8$(QLTA5KP}&URj7N9L{;= zQGO!J9k3-^ONUl__n;}A=3jVmx7A#xyM&~2I!H2ED-I+@(Yus&;7z9~j|2zKyZw+W zwqqLvUs`Y44B>+YHCdn*802D9B4<4E3iw6!1DvXHxRCH=Ah9h#c?neKC>Ebb3J{;p z&0yU1vX@@eIjS4>BGnf%xsr{kAdGpDNw84#7=2@r=h4#?yxl##J0~TO(sM-cPysJX(Wpo^M zH=IRO;=GYasO~PxQgiI9U35*j)Uis*UIsdkerwnc83uf82)eimsg@ z$-{JCsEI4};w(yg;R!Kzo3`Bd>t@qX`WJrRbm@toz(ZH--n(;tFl@1c)XLt6zd$ug ziX}xdx9?Xn6#2QrDTM8g?kprQPpVd*X2o@r5D$2)(*6$uV8>}!@yQ{-~@%#(;?sf8|wl~ro>BjWYNV!Yvh7>kvBI1R=fJ0g3}j}EpV z3XV%kCa*hpkp#y_Bj|$x=f&^Fe~F&n%a2_rU32BjeZ?O?V@pNh{nO%?;~m>4k~}2~ z6`9kgk^N_|f7tWO&iZQuO6d+uzl0e4$vgX(`YCeYr?cS){uNsyw`;v!_<@c5mL zXwsd)-zdHIigp_}>cX^%p6{$EBlA)-(pikmK=uY>EYxZD$QnPuOts=?l6n^H_c?G~ z@UBE6b1u-h7Ao>j)CR(Pj?e<&Ol6|j80@FcR=aeEv#q9<=aQIb$J6WhK(;ZB3VU|O z)m~=pE-juuhs62kJwAmrE*kDF&4-QTw{K27E{*w{)Ei#AaDub8_NQJ&9mt5J z0bJIa>5-M7V0Rrd7q(k3ojC4?Is1Doob0L0Nuu;x8A9B#urL;Jh8Qy6o+1|WPGEN| zx?(h?z|FX_sd+aT{n-&BffYCCZ~3%2nHf~LDw(NU0lA7ThOMFeIDh3NI7?aBwGK0p z!7@KDfE=g($5eP@Rw5E$l{EPKO){deB_#Ju<9yj&{n{a1f+aZ zeX_+r(+QG5t*arA=ZCag;ysKj23BqW^Q%HKF;ehh`yT|~6Kd}|?2#kwe9)rr6qd?e z@?pr2DA0w>ff>sZN>$VUkF7TWhx&{D$Lmv(kbQ|VA%sw=B+Dd8wnRzRX+shkl6|Hk zYsj7~QzR9UY$MBrku7^s#ANKDF^t*g{r+9w-~a!6p5OEQo@bW#-1oibp7T2A-h1Bn zo_nXInRo{AIn*X&=^WX<{0_0$RXEP7{-2We>@H>P*}oR9-BK3Z{Qvq8L-Etcg`Zn+ z-7|dZi(UPlyK7qP%li+_vPbO8+p+@k72UUC#&Y%Wp%!IPqx&aiX78AQvX-vhKa%hn zOV7F1)ha&Q1Pkd?M<1M;G9r>r z*I&5W9W-fQ-YVZas{!&kd>t7E%i|i ztNIbJrjW_BdY)aN1i2iEg)O+U-9ZyzBF_)h`5u7r;~Ai(0B9wHa$>~98_?k_X3Z+& zf-0srKbiZVRlR#<#?n5k`V&swnb*}vjjigF#rxkbNB8(WSby`p(BhED*BnrT3igJ|{9A|mn$^7avG#^(#snZ$-dSAMtg~xH*o8_$=QE8 zpf3CJOaC9p9h)EnMFULVn@8x-H#U?Cp03aF;s`PGnP&jCEI@4+pyp~-pXJ=W@wwO) zAqwwZx@aB;^EJ#llKtCKF5fDxclC(3s@ISJG69wU$N&hrgX+scrP#T9kh)E7Xj|IgDB{ z?DaHd0tlF}f(n*|m&DBD^}f_ItB87k8at%Ov#a~)WZY*KW(MXX+suSZ6UVPbyfZc2 z$9eZcTxSc?+K23O>g3b~V(>NOUmj8UtNs*3G%v)&h@-&VU5S`T3nr6FN|DCBRF_JTS4Tk<%B4FX>|>+*91+*fD02}*MRV)a6jCVH=m!cC zKE`ge`k#2t>^Kj0Q0_0&Oj1#x$EWw*BJa2d|GZ1?NQIQhK9#nA9LSMVwwPGv`QK4> zsUdsH3_vWF`oD3KDfhpxnYcK{V_r}iv!VagqU(NWJNr>9u7Tx|7pP+sAutl?uR5u~ zsxXOA_*wxbrYk4WGE|X!BsT*x<(koF1GE$WBABr?;gcW@{1y;VE{K6nZWM7<~+fsD67%n+7mlub)x^z(Xj4OR!sBR{( zQ3W>~r{lWJok9{F6?xflvE*>~3JJ=?@J`bF{XaTmo?Y|WR>s%^#(USNB#8bd1R6h; zf+pCs?DH##!+erN|8jgFf$s7W299?Ok%7C{sul15mACCW5!rrnGAhKVtbw7T&8gsX zS=0ZP)=woCUFSEl;R-U-=f(P?NdW@X0DRs2aS&*>W@Ket2Ud6znR}{B5pksC4bn}b znghC(Afc1IvHVa-FFP_y1<0idduS_Y~N3~|ke6Dm~9uE1L z)_>K?I94nr8W*;gibLD>Ns?DSl00`){iXG%+KC>dWeqFiQKz-~Or~-`#c}HOpD+Oz z61-g1d%$?xG|`{fv;EYRW>!QNb11JrftY<0i#bm2MelxV9Qc%?6^A2+KC1dFc{RS@S zwdZ%d*fbq0!*S9DF5hoK+J5SPs|M|&$ScAaEwT%kO|o$9(=qh!ny<==&<1Nae^;c) z9VrH4ld70si@UcOD`D~k2a`MIYTX*?I*BSzXz zIOjq3x;8(eG$~I%BS^mVC%Yk*d9*C?i8yu(=dgizg)r7rkDU1T6I=Kf8 zyGv3vS8+sf|Hpy(0w8R6GREoe^}W=amVjAL6f&^MHv933oXVtjtUnMsu1eJ#X(!e{&vz2hws-GS%dfxp7o}Wd? z2{HR!kES{0xgRQ_wuWm=ZW zz@4-0(24{xrA>sz4{R2NZmF1XZRQtk?C8~;Zg311^N$W!I}=~m!gf4KUHh3br3fMN zbd!`ZZgCO{=Ne__DyQRQ9;0sWqBeb$m>0D@1Fvh~D>9g`O-A~?4!{TddLqoZ`~M*f z&P5z8pzI)DLW^8~=O0KjE~Z_9N3>Al8zV39GirJGnGRrU61I(d`)mx$*V4<^bW>(# z!z~iy;hpf8Q<;4SGW-0}P${fcF%|fA8o{%ozEMv!d+iDs&V0|h{v}LL?rpL?*tG4u z`>+w?}m3dch%lvfw5mc^wwhN&HF^0II*=s|(7fDE3tT0T`H-)WcesC?fFVTD5biDWW*dgacbDr3Si*fnP9v>-eF(vpn*(z&y6^)#QM2sx&5uY@zH(V7D&rt#F@1;m`*gKm=bjp z3>M8xX`E78$JHU!>lx)tE=Rfvr^&)tLWN|7cFnyfN&<0D7)tK)(`#+9fkTwiO+~gP z^q1U!O}c97%1&}17L!77c$)lpycL03RqTot2jLj!B@NTSM)=E6uEwM}l|SYAFyhq= z;_}+?dH28970~Zu9pk+E;rPwBmC@cStkBc5C7u0#EUi_?%RGH^<1<~1OI%F5x&0}7 zk>QL8e-${v47w?ZJl)9OERpeUh*CUMk&)9Dt}%INI1l4OUZ+OZ-6m(=6LC07rM{i- zvh)`zW~d}i>KzKJE4}}@^!{#_A@z{&dHr(cfkTULhU#-?ikpny&a`E6Ez@M0C}JR< zhv#d*c;8`huVZ5(c}Gh9a4Ms4I~Yns$!qSH!6Kj;STWXd7RwGbLy+w!FO#LHM$LmA z0o^~GGM9qd4b-6=6&^{8`+3^WU21+pV{g9&p~w=MH=~lzAJ@Y?`HXpBdDQaaV(`U9 zolma`$xOXEgT=d-7pol?^Xv?*sXn&&VW-D|1DUonourZ(j{4*U>QqK@b!jEoSy3#3 zd&v8t3s&P@&Vr@eJLI8B;{)2fuX-BrD-GBSfLgzxqrc{x8Sw-4ZH=MMI$_zY)0H@3 z1cH6_#N$a%g4T}^XG44K!YB@5q>nR!rD^^jW<;E4tZ?_&<*Cqj1Me(CO30Au1>=T- zZ-erMv}8xFLVLE|snWxt*zrO}oMlO-Wyu%ys)#3-^w+d9BR-lnr#}(dKPk&_`C3Y& zTv^n)!qsjcbs2)A@lR1D4yS_O-?z*=QF3X$+C`zqb!+c=XbU|kT9YNM!Bfnl;XbZ{ z=MF5G0SnCC+kAP^x15G457BKGu{$-?&jq0wxO1-T^Z>%#YtrRn6bN>xFVr#w8?GWs zn0A>MiA?B5ySyf(U98Oe3m!-(K{QVzQY?F|KoNus)a&ZAyk9R(J*{tKXs}`|q3eke zFP`+PVRq8n#4|A;E#Wwo{7YcPlxG%kf?gxd(o*B?2kB&CNeV63iPC1-+?<9h3o&X( zeR{oKkXBJTLr@J}6cKS5(g)FD|4Qqp%5tr+?)l7PWgzMVqsGn;kFRTG)fjsPuA$6l zv9euO#<&30bb&W%uY89S-7A;#G-n-7t)Zi^Su=%wX z5p}PzkC@kf6E6O_ae+O1nVqElVwjMNe@%J>B1D7#mJjKGPUxBimXG@H@F(1*#SA;p zjvA}UTeE*JN)m6qI!N7btpJ{KEjsGf?}ekkZ|lNweyBUTkfW&i9qvStKN0LLBZ=WU zv0zp|sJfoW_{06)L+rT*(@&9cQ+dlJ#PF%#OBQ7GPxIg`Fqb5F(stvLG^y?LicTQ! z*naozoN9`q_Qr4~{(DL+{(InmR7E@-EQEg7?-fU~Yn>8|Lp};zLTEtNr<0SKa%Q~9 z;d>k6kUKf>eyY{NQ(Fn081%|fFw>^^J#ewdkCn>&=VrPYc>qGkhv`H{+n(W-fMoZ* z>fhKFDl8k+sl}%UpsjNfH!q)R=HARjf4Q5M{oqr^ddmEUDmCn6EFO%^rHJ_0>qof9 zs6{_z!g83J63J#!dQ3GA@|$ z(7FXSbhS~nivtnMSt~?|BhPPLJhc}1Xl8oVwOkabH!@{56|4PhgOZ1k)Um=OkcVQc zCQr8qoia&SqVFlh|AX74MyJh??HeH(Z}AHJ9UA2wB=3YJH1-uaOyQF=+6edSCB8t% z<6!x`8^7e}dfjls5=%kBsyx(lPy0sWv5ROUim<(Ff1N3~$-39RO^Q;2uk{g^8htQu zwY|pegbmu4q;=VKJib(Fls?DTUNiCH6}}cLazQHQ&ddwAz0$cVh5MGLiWU}Cl< zEJccyNR4vzK55VLk8)0TA1r4iZPzGgv;lb;{n6m(O0?#rE#S~xqu?!mGWZzakmL<0 z;(nZI-)JuT0Z6#YOOA3{j)ISY-Jk>^|4PJ1^3knp=q5_}Q*s#W{*oL)ua%M6+*Ux56$dD;%K?h>#wQMz_rJOY zKC1R!bj4-se_&op;Fs)~V&|oDnRx$&=Hic5hPed6K6)$vA1UApE1Y*7GuHyMNEA`> znqe!L2IXsuPl+KMe9XMRdX~JFel9|4xw$gI$KbX&y3(QAsBopIp4iTJ^)0?O7i^W# zFRevY8`WgtUlUBwzFxk{+JQ2@l-nF15wr#TkUXZ{b3l7-%y@`C7E1mV`1?P7LiIjJ zuw%%1tYC=lW=2**079HQVlpo0$5CSncQ3f!trBgo$(KFnde_jm!kcsCG5+TPp5*9* z+5P09`8%8o)!5%)?i^`O5eh7(K-s>iFvTaEt&;d1J{V4|w~@H^y&soX0ud#B8Oq z6~7gJ@C19;(>KKj{^CkbL->~X5LyDr_Q)~JC=^{otm0r3ao6S1l`7Ru6+Dq};Ft_! zwyb1#9?-7Mp^MzcwgZ$x9q48Bo07`f&0AJ%2cV<`qKejv*8nEPnKf#~y^#*GXbTi4 zu^QHRjBiAZrM%`jgAE^kE2tr;{1}-$J%CYL;m-yBST5b%8~*7^9wK-nGwHb?Jjc+83*}mmv^~Cr5cIJq1)LAu~*$FpZr;*ON z&eRa>I7o)5j0-rvsRnf{J*1ZBL(MKwD=-RngpRG4Yn^kQ3|{H~4*dW;jT6XY6z4>I zh9d`AgRIp@t5?ty?;w3;(Om?3_8r)FJ9-bL8sWeR0#ny(ci{JQ#v8Hh%Cj7|8bpZr zCYm>Eup!#iWr#%91J6xgHC6~epc!CK*ploF*T!Y_1PnMUT}3T*Dxx3oIW%H3Vl)zj9n6 z#hO!DgNhUdo7HNtE}ZdUV5~Kab)!o=0Z%+IT2$y&-hgq5UBnvgXXTy^$~3+Js)#Hhj}azJ z(JLLv4z8S1Fz)h(5+z5W`E3b4$aO@54|Xl6I1o>lAGI^QNDY^&C}f&~ME_6Zu?hn> z^a{bP98Vwi1LNLJ#=&x4c?l@{!>4=Z-irB$GCV!|1Q-F$3^f0piY>;|10leNm$Z6r zTMg+`8hH%)>pXfTcKHpSuD3a?CQO6EZK0szDLG)UtAgz{B+6UBpPEidiVt!!2~_NM zv%LmYo=YBsPk^#s@j>`iuT3Ajz0|>tU3<#pL0f&PCiVj&Iu%jWs!|EHzgSZ0x0HJXpQZxd% z3sFemk%au(rEh3Ybx!aJhZTTVLUKX-5=0za#}_4lSHg?{UP;qAv@gov(RF-~A0(~e zKv#}mPSSTBCzybdhhf}aV7LQ#uI1t@|6a6P*mFv?OS2=4qw|N4Sb%8I^Y?NI08mAE}?z(+^$5Fku&|er=}(S z!6+0wrdhu70@x7ms6E=ZbXk#IBj> zZPanK_bX3C+k=ks;;c~mPSh+7-jf45n2l^Ho#G)<8NSwhx811#?PVED^SR%%g813l zyiJ9=4Fi&+hGlr2$Q;erfZ=@f0iByLfMXx6nXGMa9_`D&?+vZ019}Vw%}7bWVagfF zQMw(ny(SVkD87hI&(0ipCG^3qAnE>PG^+kqpWUa6yGI{fas#M-w*W$J*#FLMerge) zz^}pb29n>YA&(VwUvwS6L`rktQ`)CdzEZaKBoJR)B?rVWD*&Krnt_qL7Z7*y-@NMv zl9tNIV|{EZG%D2NY1!oiu|Aw7KLFImGx8WDSB$SE%z?rc#R;4>WsamCxc&qhOheh~ zaiBww9{_bH7a*}T&|!}%P{bz{aQAK%a1RV#gQQ(Dy;Eb_r9g8%W1z-QKnHFoEU2RG z*_)L5fewBNfFxB65&G4T>`n8;UU0O0akS7UC8cHy0dV5kg7AV(eW+&eq~yZ9TUv-f;EegNUn*Ee$j>63E-XwzAn zeE4qi0i^Gc(#+qaW(6*vZ1Q>%5YYpIcQn0cUTxO}5dQXVM>sZG=j;V{fn&Z;2EaXS zzj?zN{9*tclgEK3r#CGEzvdB$?@2Dj8Q!>Uc?(OSWE_}h>}NUJTf5%kWjwFWc*q`1 zRZrcz!BJC-QdK!gWQ?*4_@`qDBog}vUcXPIPs zJ|Wp6A)YRjWPKMQqwxEqPj100BO{}*2mYklW(D;melt~(I|!LE<>Jt9%I{Lq1sU5> z2R}72Y~xcaEmjP^ZtSE-$Hdh7%APu8AYo)LC!A#MgFIFpZtia{90~UnH!Oa9{x&1} zHQnt+2hm*RY{yp-A-@dCJ(NAq&Bh2@ERu2Z=nTGVyivDrn$v=kN*7)3@%pCaiZXlo7gdt?4&nzlNmUi1?QNTvSH> zc&kNu&ij;%*PTBzX6VgFPr)L!G8-hHCL4B#(9pT5&? zVKF~5ZvFP!1$DJE%LBxdfu;;So0}<%!5Zb-Jb$SVPfDu1u30CPcoh!!v&MGLe;dsk z`x?UkIa+L`ts?D>Ud#2#k-^U4iQL9_ipC>!Z~24K_1mKb1^=4)e;!l!yxn>jWhT7ZXG<=+ z@k!zGbcR^`k$Us4KW}~+eY~7s(NXOq;479XN?FOeRAe8~6dGG5Hk=q6#ORxA3lAGp zeXv1qg|F?bF?`Qe6I~A1w&*Ke;aLS(+goz-?mqCIq6$5=-8frZ9J-^aU&Z@vU8-mQ z<<_PflP$#Yjqsi+fq~&%a6%(GV7cf>efLXAJ^IOQDC5%Kxq}J?Gi8oF>7tZ)%kz5` zhlMf;aNo(_vwuT5qpGT=O*^_hcC#Ipvb1|Ej#(#Fm|M2RDA?YKxEpcT^6srX#^5t6NT}eaD~C%Pi(Q{*=uH2 z^b^sZe7XzRPqn`3U8}2Q+h4p@e@OYTYag59JUuC+Z#a6%hm2N8DXoM*WPjDm`x-vX z%r4PyJ~y3dZQW%w<2u`3$504!A3E%_`TpVE-HA zrqcZ;!sT3Tp#F|rvzxbjEm3c#;4`gBFBa9k8X3n^QY->Ijek`*-#ruY)|>ob<8{7_ z>Pf6A4;%h3$H)HGp?=c&QE*Id=!z)i;j`r=8U2AD_uqF|-CO^yI|>gq zI@mh%d_`jT7lWgOciXQIlrg^KBz{&=HKLOlfb+i!ed27Y|v-gS?H89qqkI3*qKx!nCrLU<{;sfj;^ZAIR%m|4yQWfXIdY#-|yg?`cQX^TSh0a zE{QzFx#GSQwH!x#*AGdCA-eG5#l>(brJ|xF&DW4fz%SD`T|b#FO?G{F{bP+q;gORm zE#2dKbKNQJF{|N{-%a=X+~#75hZa+ZS{dhWrlm{paibi6jk_@?QPbZkgik5oT%I%s z$@{PSrB<}8zTa0(kA*)R7=zXi1hD_8{<@UIZ5D^GoeoMO^#JJQtJ|_(k`7_D(}XILvFt z=TW0XzuuSdy=_XRqN&1FcggS-TiNCHAC`{K)1O>RnI{a21$478@zzmogj18uf}n`L zsy?qsKCcFJlUe_?Sm^kbk-45N4MU~35Sp(t7SEMurTw^Ap0$2xS~}&ov!LmE_N!W> zBJyvt9ePlGo48TZ5lS~NB*11zlCRN8+TY|r_0u;QWB1$(umoPoxlyc4$qp~C`X=W4 zMz_nC{NE1>m>Q+p*-eh*Pmf!~@0A^MCA$VmFZlkO+86o8FOam3ZeVb4|NW&88}uK? z3HSDwWSH;cgBgDhTLs>?hQB{@65q-Uz6C=TN7`Jm$=?FpR2!aeZEyeDab9CmKY^=t zRAq=!!ESz}U5**&G(Fln*-EDcT@seCzho$|E$@4|LW}NUt={Q;5mhx}IREDiv4ZO+ zTQ`ctV|FLS+X}oz;GT(Jf}6FQ{;HImJtu5pc_hkkTbfdAn1sUfjA!p{5Am9CxpJTT zKlIq{#Pl%i>;<=P|Lw4!^I~q9RLcx_@ac5|(qKPKofUdDf+ULY0yA)BmbC3u%JW?B*GR$HA@t2 zgmdF`7`6+{NbpU{9%SJV&tT@-KDiHs3Iuz$KxiKvilp^0eC~5)xN+DnQS2iGb+$q8 z6m$kj?rB1Nh9tOe36^}kcnq<^BaYCS!qq!Lv|TsF#wkKOk>uc`MC|tzrdSM983fMw z#v!{?nDH^pA|ALJz|3*Pu#Zh(StQw3mxx$0=dxm$)7&`1?~718L?iL>B)D;Kvk4r6 zWrOqK+PAV&aM$DDLIjnuhg<@VNwGHNT40DspEx)JLEW}%E}3uuz+)vx-ekbcl)DEo zmCXFiJG7w;2MJTXSg#0`if|QgkswT+XAfiL$plFtu2{?(ay}NqfZ%$nGA2(ETE`G= zb!V_nr=jVT;|r)iv50T`)v!=S!>y;Kp2@RGZp9HM zQ<%EKROG5MbOwwE3;o;)QLF>VUU6auzKNZq@bM~Gudr1nuo^^zW0>Q-MR3p_a+A%arTSjYD=mgY~wpA&`SFVVD0&q;NN3CNKav88APR+^q80m}!P9_aKAsu?aO@>qjiBo6p}~L6 zxvgdaOUP+p%f`hca4vE>RuR%ilKJJVk2-%1JLKh=g7Z%^!`?)`y@iTE&Bqq8&Q2ip`J-fh|V5s+-{(D^!e@xJhyLFUb z7JC)z_L>zut+zw-e8e+iNrL*hfR?RuYyNHgkZdP zy=kyr93d&>`mW$lGuZ3DTFWCmKVW6okez98Ei>+mmS3JG&aMy#eH?j-{bT~GCSpWr zqv&bZjo?mk_+7*t%x?wh3bC+b&)_>dzOhk{q1w;|Ld`=btSYU?xS(u9J_>@Qc^zv` zP^=a^s(V%&7K(xkl1G@Id`nlT1zAa$Yx zD@FBJ3GIU;pY*awH#_0=7%t)3AYmU{vjNawKg70`r|BGCKwclj3Gg<4pUj5B%)U`I z{}gE}TNF%lnvwq9*vh5AI=DTCTjE6Pe+ccOeR0BmGQ*yv#maOJ5{NHhqeN&nJxxh7^ zykVhPY|l#)qe&ti>Uc%Sm!BV^sQc}~`gQW4#+w7A57AEWiG_;Uul2NGjq8g9&6#pI zSeWg2m4=If8s|i;wAkB(*(BWsfFjCpfYr<6C%{IQFQy&Oa-|RSQyVgl%@abO{O+f0 z1MR75fwG&I|NA6^d2h%?4qg0^t#Ci7gJi}eRhg*8%AA9^pCw6w}5CuV-KaLTu1IOx6*X59Dt?!fyGrX;KDEcn`h*hV5^2ac~&n8 zB|v=A$7&#Q6r>}>HV0D1Lf3{mR`l8n;l?SJmn_{Q$}4Ulx? zHz|x360%HS?IBlTuL;0!j> z`ghxALqKY=6CJwUusM7@#+AcM2tJ-6goZ~yJ@(-0Eg(Gy2tNw32DJHE?8NOsCL90i%$^H`I<9p4VhfJWz-oyQW&k(J+-Nd`Pnhy} zcLuP*W>t{dOL#Y6m*51hw*jr~p%Ly362|N?7);M0cE3Cg_8TDd7s5UZ{XX1sOu7fx zj7vX&>*)4LpI;XLbK!uQXB6Kzi`fo?Tl7D2P z6TEUYL@PfQ%E@Bdh+);b0(nM(i5^faw@3dL3KEoGLp7$gW1~}E0aLsD;chY_nyI-S zhpPY74u_Pc!@^tjSvq$*VIOH83E%_Ox%k!m#Ic^Drmpm`dwlE1ZPBJs>{VKJ)HME% z0-OITP2{r{gIo041eTZPCA~scY(!;B^8$ru34JdKtG=GR$XB>|Y#GoPe8-g4BTG}e zN+WFNg>K-Y{HvalV%D;C7vR1^tOzX-Zs{lZz4YMe;;6%is9=Y^JK@io8o%?LNX(k! z;S89qAz9{zBAU0bKI&et>4@MBD7(=8$b#Y#BM)DCmxT2C+A{%?G=$z!_$+a}+c#%x-(1 zyP+2iHIAWj|4PFtCh$H!9_1=6I2I(407Sq{gFyFRxq#Tk3+=;#e(L?q2&(@j!A-ad zVgV(?*OFDBgos+)p5uogHB%@`h=l|;wufynmkOJLZqy-wqa!Cr)BE5(g5s0NZe&w{ z4cCYv`!~{GWbyc8*giL25U$b~kD$g81fg~T=lPc4$;UJD(_2D$zC(_XW*_uG+e}$5 zvb2hi3-C_%x-(X!%)^OrnhS)p%VKiY_P{DuTx(*#4;0cR4jYo^kHhSuEDzqVi!ej> zFPv)djqPvJ*1yE+n7B?wIQD)Z)R@2;iO`z?oFflcMI`9qsN>&HbWk2MLw{gP$Fep8 zO~)e-#x{SBD#qvj{YA&>#P3C~il_LpJz z(yHK$jk;2=N|f+QNv;XZ2YT~0Cv3C83w5Y84m9h?!8G{jkAQhXi6T64h|MrXa&T9% zC2VO}wrn{p%r`@syJ*o3K~ za-sj&LdvlPf7!bsB~3{AsvZiY*)t+|0*6c&JfOsu?i@jQ43N4DVLjI``f;kFhsJxw z3AS;j+ZMl|${D0IIIbgqTZR;R%WyWlHHO=9m6jqDxbV}E#;97bjTjrme!h_mneg$v zrFk;wdxiQo`<+hwDkPAOGPYjEK`r3f;UzMTtS3jlZK<*7_k70!!PwmbG zb*ALLX)K!XBA#jTeQO{qQSVqC&KtNuc}RLD^4CR7`oA(li2*yi=thjxy?@Ag<|yBc zvB5Iu*J`OPx9D@7gu}=klSJ^Vx7hUoRn!iL6dkAkL$rlbAZB%P2 z`oCQd&9waYeENcQ>FlLyEjHu|I$7gRj%Z4r_{BPo zHvQ{+{ZiFheffneyL0cI`v70So$ShvF6CD3J%+BKII>6ecLaBiq(p2id|=jG*hR{7 zlFDk!LKak<&iLaEN41P*ajvFFU zYvWPvQlw^Kn_T9%J4@#_d|xqR6nY@wK1q_gAc+tiA%g1upje}&D@bv`@l zRCH_pTTq`atQ7up0^ z=`;4$r)M5!JU@WKx4evgbwt>nQ}VUsby#@SPd=(Zn_)|m9PwCL_J-Ndt*LfLCQk<} z50o|g-L?)0nECSjb@ca)pUg*-$g`?pO6k*4MTT}@4aIJw=s)qIOWR7Tg@ksUmzSI8 z1>ZY;yG>!mAbhNrvU^CBuaI;{y)i+`%h@k z^?i}+Y8QKD_fW5+3H%#zyO6cTPV4he;~7v5=GuIx;*m#P?<|fyQWm%0#&5QJJ?4h} zf0y_|C6W-*xf!Aq&I$W#;6SvL8vm_tKX*c~yF$Q@?UK)8D-w0~ONGWW`8NKViHWrj ze9~++JG}jI;*Hrm>ME&kGClmm$LXKOPH5`Z#EuQue)wIh6@J(IiqD7IS{FJ_H*k)V zPpM~w7n6{Q2D&)?z`1YVa&)~sn;GG`OCe5fFQ=aNO&<)DzK}mlJax|dxNOgGg4_$| zJ-J`cnMdAivwya|>fFue6~`;ymi0f(GElX?mtlhj{}eKgvUhhaizmhXNMEJ=H`&)( zuada;+$D`%St+<(BW17JlfEw9_f8U1dKGt^mzErb&F}DyxOHm;3%#Rj>3v8Gx^{fk zOL^PTql4eM?-UTtFPK}+WL@}o2jN?@yM})M{%M#Mk3pMGck`LMnbwpfIrJ&9x7>My zbv3;jT;G)B_mJiyg^2-J-(KK*y@a&~>byRi2JW1ES+2g!n_?~yESj`4`baRlP zaheE@ez@QxRm=I_v-3|@_urE4Uwk7Yu;*yJ#1pym8WBHE9XpU=Bc*k#W_QVY;e#iu zWAYmd=i(kzC4!T4cUBSZUY7a~t=*S8FkEbMqweh!Xy@-E5E3eO7lZeZk0?QcLuwINRv3sJRNiA#Q9qZ(Mf7+W=e5tyUr>_tGOzPbxRa04JN5+oNe`Mcw~XUdZ5*} z?&H}H=g*Fv{-c^2HziPUp7yE5-?AqDtiL?%k8|qzk6PDSGL=$qHzcB6)WjowQ>uu3 zsj@esvYqcr$BUf^G5vBPwewH>iqerZwFhx$Rc)6g#z=>pZGC=5Fzn&b z)-V&%!iw|9uI%NkHIN1@PJA(IJRL8y7V?}IbTNbS_+oME8)SQF^umw*@o|2K3-^V6 zFAyS|72H@vx7^DRP1|#*ioNCWokU&bZ~r{6RvhLWD7aeDwOA!3sdu&U-c#iX37M#i z*qvF6uRV=4_e_$dF|KoG5BU2RB=szLR*boE~A)v20E)D75N?4E)o%L826VUa@i8CRO=^ilH-kvNg zH2BQkB40MO*{no?m2S)y3pF*JT`+&@^rduW#~o#am4I1cX9rI>gq?AGt`Kb0@hOcYXm-r|?FE5}Ve^Y-X3&8jhM#42 z$^{&|oNRuJaAe|EHl1*FxFL88G3xB^tw*DYdZD>Bos!T|u}31&VK=u=cbcdb|2Y!n zrJEH$@H6vJ8WD-VR@#s=*3yf99;r$hQM;8J_Qv-yc~xlu8LWF;U?Kf9?LYxF`rxGc z(#r8a56fgGwbN-jflUL7=Vq@VzZJ=h>z;V}RNhP80L(gd>uP;-EEt}!UR!nVeYzCt zB1^yJsuOp^@ImxsI2tV~<18;Df__y4Vodj{)|}AZ8uI3d)70gR($)*2Ta9IRlB0i7 zcDFfOO|Nl&dDz_CpFpj&{4ky2+#&L5spdjwWlyN6p4c5NQL4ph%8efnji%1+*jYa) z`{m+AyJC^)o2AQ;=N4E?Po$JO81;5C`pr5-iS{o< zMpXCN;b{(TD0FuS@z3Hz{K7Y;>PD6msX9Y2oJ{ z+Qo$cvHWJ2bKwoDLFP>^Llduq4ZAWcY7OS|zV9>USYZU#uLPO@_*~!cPIR;)*X-4O zi-PC1MFt6+JHhFyYX|!H4@*ay)~jV^&}@PuGOi_^I(Yk8ns|83O>>ov@S=w0>eo<$ ziKX0XQkijAYIkSo9xuH29qNI;_dRVv!vXMYTI9^OZ2GfhWrXXvsh*-i`G3P7o_xzF zUhXnNJS$GCuWSuDr004jZ3eG-AksR3%Q+S4e=vc%{bT3@t(o|Hl1P2ALPc!$qOm$M zX8Pks%HbUKf@9+vBOi4n?14_P*(nMAb7n?W$iNySdEFWhkVzXGxl>m)joCAjgP(4a3|_t}O81 zH*AXP_kVG#Y+lbGd|`=In*;9jim z9F|V+#0HM;W95wr_`hOh^`K+0t)tELvE%-S?l%nOK}~AsTu!K6J-kfP(UwC^T%+JV zAC+@kgS@drMT_uY(R@-;>hO*Ahw-Od&GsIC_papb*N2b!!z~B-zp)P6Bu_jH{ZmtO z@`N~pwM*xDGsV;2=e!SUZ|DcTk;H|U-eK$PJB zO3?I?{VD%@>r*vZ_r5Pg%43=wpX$W6B9y5J@O#5k^>Xt`u)r|gHIN5&w1eJ8i zZM+tA<210fL#wUKFZhb_2NJxXrL_LPGhnL2P@_vJx% znfCgx*Wgk`%T$f-r%$M^8RYEyW8|oqgY60b^TNF?Y-~5%y1VP4T9e9IR;gn5x7Ep0 zJw8J8DhE4DSpBTJ=Ad`a9DT(5fARDdP*FW$|G2_Z0#ef5NOy-cNQrcJw{*)QDWTG> zAR(R7v7n@MN-muX3kWQ=`@7%w|Gxioo-^m}-aAjtGc%vry))0)3*AwGGOrAkOs1%1 zqZ9?9>YrlK8`e8Ge1B4%Y~x?=R&reCh4|`nBFknC!`!C~Ig0fG$~RQL1%E{Q&%JjF z@fR(Oqqixbg57}VM~q4ia->fDJKYxTP+beKcIaoOQRPGq@*1r-N-mo3b^bG)_&eoP z?$?iv2R6}<{L$g1oTFc=h}$^kQ8O-8I+V@xi5&kCQ9>dIYPa}FoPA#!l1nLSzxqvj zWtURHZV~>qhJmhYDBC;TOpD4{UbD1{SzbLQld|~66E=hNYb6BeKilQ0CIazvkFF_C zaPhCl40NeH$%}km_spMFn zW8oc59G8S8*2Hpfz0d`WuMSco-4*41=B}Mj z7gcJ1OSJo1Ii2gKs#qHG|23fuqf+o7;clWAUM#@DcN+*v{3oix@|- z`x~Xd{8gz;qX^mmKM>h&rj^?}#;qd<2}|`zcbD74+c@$9j+^sHmHvK@Z#<0W z9DVw~mb@q2)ly7PhJ^cP9^+k`>Fd^_jN{*J`xRUdZuLmQk`p<^IEz<}=Z%O;tNFsv z{%aD3@%M>69UNlrf=jBDCtilie+?J2KE6A)@>@2O<9GHlP--_I+Fdx)*G2xXC69{n z7wwFrJnD~rnXMEjXK$3-FVhJf?wJY#?!QDx!UB}jVTl|oMpt@DKVVq@8}I{vU&&dd zcb*C@5r{5rR3*OK$c;GIdmj2Gusja-q*vl1A~T|{C_;m+kuF4;53U;C%70>0a>A_h znm%Ny1QTY53ERemX-8k~%U%!mL*1?3$V#12>m!0sIEihqCm@r>V*d->+Gx{1M zIv`d4zF59<@#~t?)Tx-Wm7uegsI!%Tvz3T50Yx(w{<0z_%ncKEj0vO0gymtv%rIdq zm@u2@Yue~*K1^6ACd>+d`37(K27j3VZJ-Aqpj>@0AW6Lppoa89La zE&_7{?r9PFjIY8+SR{N|{qf6x}6?u;I zLK?`&F`_Vol0PN}2h*Vf6<^#=`G2f32zfe{cFHBcf#hb|! zvxUPXC3i?&qRlCBT+lzOt85KP4&Y_j#4-mlkd5n|78PlqNiQL6K#I~nwf3c~B@Gn|tSMk$iKr``FS=kOX z7CACDIfj-X#(wF*>Ik5IemIgbtF4wF+eD4l_nkM}8(Z^p^HY%FO&hiK%kJa{y(*J} zneYF45K4~>*el32FX#Aj}`kBuT3o z72jc<81GC}krF@gUVwNyhc={{;tqqJh3XB(=M-8YYe8YG?WWAqLnH3eDVx$_5={Mr zZei=E|A=pDnr5b3pZ8bCygV$ceP{o(6qQ*^OuIcyU&JdlsQaW3*v%BtPK9e=Y7{!sA?oXeNo=oG>%mHPona`zz4H{!!##{kK+8R*kjoLT8Et5=kEY(E35#@4V ziU<3Y?@K?{j+P2@mFjyLj?#3Syma_(k`_up9WX&nwElJE5yehzUzEQ-{8}P2Q*(i> zXrDIrLYwZVO6v1oOl;{_{I*)Smp(pEX@&rfA1;n6E2c`l#?b^!lKkUDcUVraAmH7<$Ec0vY zdueA484?WMLrh-=8oQ#I}`*|{lgXNF_ewJp7STgHcsFHaS` zW33S}eX}i4DEk1~6O(uP;QsePyo@jEPVuLEP?#2Hi6=5auP&o~-6}YwQ?vDSbIys* zY=C-im;oQXgwhcUV~fD&X{#{O-kCF6V>hi?fD)UaDdFi8*{~PJ@w1vhg9%Ifc0dv+(;&li?N=do~Oxz}e!SvWQ7Q@btZENdGgf$ubl@(mx$=i0%lg6jGxMF z5;slSHzrEPswnb{Wm%A!>z7Y#FVn@uDGAkXp6XP1#gCge z(({cxvP$}B_xO0DZWF$5hIsQPY zLjFKj0*lm@SzVmAiRwL5abY$y%T--iGQ@0XOsD@ zYhkg)#g-rp(jAc?)#k=j%&0ke3O1Ha(x2E8l~mNGUE`<0xUUP)o`6To%I-QUUwc{D zML)?3%3WK(BlY~rzzZBQBLFO4(Fv^xT*+REgzZ+yKV9ZfrY?QIY_ix<#nqjG=3>jj zQ=_GoJZ_23FW^$Fsg%cQvTcS}JD!0*pFFlE;(sNMmYnXx?67)J)DW8J7BKzdgcpIf z5I^%{m&xFJWSU#%l*ZG^U8`%bSLnFsm7%~RnRl?_M^sYrm*9!R3Bk`CHV=kDiP_iO z8Sm0X#SDWh&GKaQvfVi|n!fo8Ny8bBJjdSul@QQp}JSTUcv~$gvg+UatrR zt}J4VC$`jW&&U1i8XPL(*13qqwd*=??4Z_gqZ1|N?6xVR-Tn7{qa`N{{KQ8FT%_G+c@i*q ziK;5wv^C4D>8(=^H5qoR0O{JDzMoU_D4j*__TY$kZdUeDKG}Qm`x}(Dp#HOHg11h5 zH{5Y5%?RagDzm$_ru|Hv!m~niVV&r@MZqc6L(07&`;Ij(&SNu~Q^WC&V3XS=uPIzM zkwx9h7dZO5E;&-4)}S>0X@6&SepFWdsB*PI3vzXpHn1*RTZM4sOL=65n&!+N^77>z zadTPrxi{_wv|3-TDL1YCJ>?cN8~eL_YIs*6&84INR+6>vljC`Z*{VcX#_lM%Dz7tE z$m@swmmsQ2i8_e*RMa|&#;_N2FUDuKG4dt7Y>8BSL z=sU^Nm9Eq#kr$`i(d+#om7^<5C!W{M%?qI>My6R4v(i`mLM?_?S5BwqTCDtpP4CCa zl3g%n;}yzceG8frSM?mT_$Q0&D}G5Bm`$9>8!!v8SxnDK|EQEm%oH+=a{5+hRyy%! zmL)FbpmOaG6*IomMD}}w^go6BTY82Qtg_#sgdLmIx8gV-*#^~ZD^+b4;EZzD(VZg!8?#7upS z<{P=Sa)p~P4S2jR{A1c^apw4b_1YLTi#Aamn`Mbn6qv(^l3hNqVg;ybcJ00AEm_dV zE!htkC{(W{t0t|f)^N*}p}TpP+WNDhgKL=^-zy*`Bk*`*{`hXDP{j0XTQ`C&M9b** zz`aprdS2Hr5#*z|)!BPq;8P4G-e4{Niyq21K^)*d$cEpIh8BYU*Xo4RxEbv^h#D;@ zIliR!+gNyB`Hi}E-yU)5;z94L*LyCPAylUCrQiEIC8wzk#0)*SDIVfy>8Jx+7xk2tCacQ6+X z+Cd0UoqJFAZpa57x6EaTW}v7Mzg1_&%YAYSiWGOTyy;Q(gbdcLz08vXaW?IcFt%i$ zldn1?_|m~T;S5&1_1m5l{)h6oDF<@d?s+aGhrGGZVm4DW3;2;?t&1YdKbp2%PyU-_!t?<-oN174yI)a zZ^vV5BSCANJcD^Cl#8}pn?Np4YOl?p0T#U&rtnM2?VpI(5t_ZjbNwu0=kP@nb%E~h zs{*WCV*-+P`YL61zutMdMLYGs4GK50Ak{DwHJaCU9-E~8oOMjmFegx4*6jT3-u=9> z;3%GLfp*n7$vPl0_^D~yy4)ZK$W$wau*4wxwDw1x`SRAa_hPPx?z8egev^e~+{fjLjds&71zipL_Z{b+ zG0d-~<%jyB$L<`pw#CsJesY+;b!%l%3NrIM_v%yo-S%+%Ynk26*O1t0ogu{d#ff_oQ{((P?UScA(o?>GCR$CnLpEZ@Kpz2Wj3sEC3h!KRMmt>1J8o}z{-$o8 z>J_3J_n=R2C^@WqB^z}kg<`dI!}-aQMMS&_9UH4FZ>I}(e2duc%>sXW@Hpuj9NRRN zsaRBwJl|Z^FcsxIFAsW195Ph+w_Sel@{fE9+Omi>%ZL;J>T{DDW1mWZ%VwWG2 zF@_=w4>3z>A!`{WP3FOVqGeSRi4n$mA}Taj2Pr%h;vG#QQZ)4&0R!^>A0ykwoK)^U zvwJ2!)T|CZV+|X2uPRN#dzA^lZ>-Yvj2a=B6kPC*09iOtFdTkt+bnI5bz}PC{=t;m z)J%GQkS;w4mrM-4|Ihj{D5Q6@dc{wSJP1ayJ26^Zax%Fvf_-~4v)6** z_Ch8QX|bU2+oO?)j8=U17_^`m#%Y2SE#H1-ZQ5)pj7d*wUN!P+rJv2jC4Dvid~rA) z7wlcRlbcc-K?CNyUKZDgZlM73OilkRiJYPxsgZPC)wV+qgH%xGPkd6n(X*HszBpbl zfvY%@Mpd_m5R4(ChJ>9{xv`@?iK(?Zsjq8?i5L{jb!^G#J|XC=?G+J4`cgIwXn*GB+;1PkdSExO0u190`!W+`T2w`^MwAxHjV= zuvaM^H#0dmBLBI_Oe1`f^P%K@maI3iea|Yqgz$(;XMz9f32|AWT&ldBCp?hitFN;l z?FuMt@ToS#`{51JSYz!Ys$W#4A{W{<)o1gX{VJw4XV*=d$nF6OwcDL2{bl0SI{ zF?4#Zb$Qu4{k)5CCP;iaCW=Hl{{+{Hs0Iti^YzXr*JvDthiKYK1&bShK^l>NAI6+j z^UOhzJ~@B_dplqGV@zFEe0#0rrMniEb?R}PNYnn#jU?!es`{Qgh7BD~u5aXVZ7 z1%kdS(B7h}9yO_uYF@aUzKmgQ(nu_OLFRV%l$TJF3rJM8N2cXy2a8S7?-*Y+BhF_d zpWw+Qh94~juDJhmu#RjV3zvDlq37t*GdO}`t8z-*@#kAn6ewsaR($vABFNACS8P|~4|SQ}m78)q(F<040!>Gjjibjd0#<%sYMue- zK4n*b(F_lOpwe(136y9YMrNWs<6qUd9hsTAnkcp{4L*K4r?Bn2SG&@Xk!{5jq57+G zaQ}44?GB~OC=nuibKJ9rJyR9FEw!1@0(ZsN$gXtJO6KwJqt%&!8Y{Y0nA1(kjGcZN z`9j9!)~wS@jb7?`_*kJ(aQ4T|wukSSIW-T}tk+jwvASiGG4t2k)FgJSzD@ITZSfmB zPa%U*@5XnZ5+d)=!Mzp}mEmsm&?t(++pqSHmMb}C~j#yjHF2)1$y%P zQqM;`%I3?~Z;*x0UA|^wFZ0qnIvsjASu!;_!AV@*-`2qUy)u8~g&=8hcmIv51+Hby z(k9W^(JN_RPhlSE=-hV-Y-t+?Cmf~b6p>uI{xTpZeW{}!D8H<^&8Edm(1ZInbKS|_ z?v;_WPb3-v^k6b{Q;B%;#a#Ya7OR-o0y|~cNWatFKgEzMDRRT1CX*Q$26^_?4+c-)9OI!k%lP=TiI|RWXTJM87`J6ruuroKZwmwC&x? zr3&nqI2WCe&mkq;=wK;tz`qdS|I1&rolDkStFjUvlcASO|Nb%qjpl1#>bu~UQgdR0 ztnanUH=o1!v->AVWIDH2~lXGVEk5c4TcF>@I(w9(6d{kwL}i(phuN zafI)*fB0&o@tq;KE#6$gGb1QBR~M}fv(5*NB%qASOPdIZ=OP^gC_d4`?Ll3#So9KJ zj#S|nLErqJH!-COr_T@mOV2$MRY$aY_dnaWjXf5RG50F8Q~iv^`~G+Qv{S?b<+~re z%l}^L4NA_8-nLf-G59E@h{ufIDH=woIC^%xI>(oVn|{z36E-tTs?o8}4sX($g_Z_~ z&x?h;Q2A|6DqO1C`t>$RVJF#WgQR$${P>o<(u?8qZH;u^zE#TY0}q#=oH!E&2LmeL z&zZ|;>fB|Zoou95iY1CKBe?zIei&9_;9az8;J9i2PtpBxO~%lH-@|59x(=T zgOCNq6JTx=eTTRADbXJ(7C{`I&F8|aMg-z@RKs|-65{z(!lbq?9QdjTH#EF;y~Kd` zXan`@_fQ!$kgXxXN2m-p+!!`ieHnoWp_M6#M5i)uaXTk(?`jEGJHfA@ObI_g37S3 zLD68AlTJV6cl45o_a)x_EEOWz+xsh5m57cREqdh<^`?vUBjRb#&P37E+RAR@`j!y! zSz9YtpJsa+8HHQS$=71C`L3Jzlmv<(S+2p$G^*3WXj5**t0zs*4f9bC()Ww;;?=Lt zpY@>m1eqCmVOZ5cah^pK^t0)G`9lpG%8w2>J zXjA@G8*-P#9BGSS0rM$@RrdE5^+&ROtCPQb8)FHJyTl1cpRuZ#x-mM)BDxd(?$r$K zm4{$)AOfGAzJbqvK$-5KtZ*)DSu<$W&u^WYpByxulY}gk>C#Ec$J4IoxRI_&d1#C8CcI-3Vsf zgJEeKWkq3|sk&VHI>yq&i|1QbfJ?hV-E!#|c6YOe8xLZm7+Ps@X8@snw$3y6Cz9tP z75i$km+!ylDirFDJj%dTA!gr!XE<3ON-a2BKb0p=X>|HE{Kq5tgXMDRf3~hDAZb6O zHfyAs4!6fmY1|{IAf<)9iry|+>qdyG5F~*DA8f{n?BYX!koP?AZh+9`=Kz;t1>pQK z4ahw5r5^C50cV?QmaBUA3@;Dh)!RDN2kD12gvGON*Q@{{52(rE$X*PT z7&oHGU^(Ll^n7jn;odruEl><$|MDL$b~x{h(aV38(qp9N8LEX#kkrAkhM9D6sCUP; zm9*x8I^0!rh(y}8UX7j6b9Top_;;^gjHOKS7(*B`=FkVE17n^^!;vN5q;Q;5T z!vqsc@{LFyl=I2!h#z!?^Xo`xB5FvG;jiG*)i=IC%pmw6H^n_Mn0e<}x`h(E?Hq)n+`qyGPxeJjup?3{ zyp%y+3Q}@;(EB&2v6u8GC|sPv#D6WI)@{D_Ae_Reuv&&7x{LNqXw~OQZLkp&QWi3_ zg>haE%0l(92jN^#@`379x{ub!lh{jo$#vkC@u>_5R`F9ioYTRO0#GFJouS(x0myDU{54o= zimtZg-;&%S(SyR=J~{UDUUCf7bCcoQ!kGLb)8Shl2zznlJqaX`na)*gyVbTcgg8w4 zF4+!8_Qm2*4yYF$HbVo}kP4E8l=y^^6G_vbyMo6a?MWb$s^M+|DE~iTa z^KfpX^nxUZ@`1}4iXuS0rl+ac5zHx}7!a%eM{5y?m%OYN2=(G|hYP0%^Ko4(onU#> z3y$D5bxO_ktUe!C0vaTneUFHB#`e20&f5_9=0s{ zy%RHpekh_R6`IgS2V-e7FApGj2tApM2GOTnKX5=cGuSD~p^xGXdI`F8aqBQQK0(rQWGyNWkG~NBTFHovG>MM}fV1y?#LNrdTjve74 zZY4?*#&Rm=#olIq7C`u*-3+8XlcqhEvDQ87B)f{R)jh-c7&7@*_K}}*pWflw{Dlvz^Q%b7shZeHiYC{8W#?d>XclRIE=J5dIcNEd0rHX zBTMqQGla8Fy+3^kvPwLLJ_Rq@hN51>S%*=$;K=yLurJVCXM#vJgi)L9a%k>(dA-~= zb_Di*OEgq*N|t~<2ygi^4D4hl_lE^Rz=6U5!fc-keD>>cj};V2Gj#qA3~-&82cfWG z`&Xbyi#tY8*0n7bM3t$i96LhndVmfbNX9b}#L|?Dv+iJ2(q$kM1lYqY znFjS32HFv8Q@WBR$gNFnk;J@~1hAfM3kXJ`)gg~Y=fxT_Sjc#^rB}*_*Qt8WAolvnO0MJ4I)qE;oagos>ERog=4AAL0q-WvpBr4 zYiaO}szesC`Om5tXrqN2Ht)*3%XF;=s0bXeEdkc~70~TEUE6Eid`x1>cgHRVTvRJ} z_HRG5R*69zIx&gDp4UcegZX|1j5D^mFEWA00(h8#6t!o-2ovB>X#Uf!O1bm&r}Ls6 zC=#@PXan?%fN=ZiT01hBq!yfhn!bMM-phyvU_}GUf>CLE|E(1Orqlb+xY!XgKiyse zH%tMYS~8)jws)8x1J)d-YvXv9uacBIE!hwo^^v_S2)m_PdhTWag<=b$?s0@=dXpSb zYl6AW-G~mjU?TyP5QP{O)AoFTHu=a{0Kla7IiTH|5?rl$k-((+*yUpYtjT#Xj|_JA z33?Iys|W`vM#C2hMg{yPGXKdH1HFMte$fD`p#jxM0e)3rz*lr&sW%fvM-9}U98j-Axl^{@d2t`GQXS4Wl?uyn9t<751W;H&fhxdg8dUd6CR-l3x&_QO zRRAt9fqNDzaIFgVK*9&#f5&tH!&x%evJPAfF5iB`y?h1WtDY9;MIAEOQKtRiZb*)b z_butF`F}e7=V&rutVMNY1Dag{JY50%7ej!19*l?=ha1FQ^goZ4KL&JrPS-Mn0+U}H zk^t7GDtCg@9$UF`flA>3JbG+R0MUPh<^G>ymBs&pP;LJiYXn4yTbgpGC!hc@06)Ki z1F<#~(Csu`s{`0e3lW;uX}UV!sHFpBzh(kt69TdwNFG>@Hl@L#4Hh49cvlQ`06Psp zSs~sv%AG#}$IAkaZ+2e91@+RO>tOd_toZjATc8@8jnu4!kc2br|CvPyw4us>(*Fw* za{#d&FA8!JEZ>p>f;zqcssXd2m9yAs0}x|CpO`4Ns55Oowg6jw+-C=dWX_*s3zJD> z0apw_JP1Or&TfDvb;ARAF0Zi~a zLQSwP z4+g7ZYua!n^Im!u#7YIb4)FutL=`zUlC8EJ3jm|Hy&7;Sfky#Ai4gyMsP?~09U}8P zvtHuWkNXW5_gEd_iZUPBgUAZy#IboF>urGX@R}zT>K{aJs^;BZND54b7ji{V)bHEQ z574(~StJiHYEwNxUcc^p{6R&jkM#-AR_N_K52z^Re(N5Xj4vYdp#=zmxG~AHMue8VPM zfOJZv%$lTEBI!b#9Rbn5zll-Amc>7#6$Coz{_h~5feFbWyE4Pl;EjaiWm|BOQdcrm ztT^0Q2R_|4;mL+zcBVgNK-eAd!59#RC;R2tNaBlN02J-syms!~>B)e0e?skpijpoL zr2x2jy~7U1`X)m_={#7Z9R889Exm~kQks7V%G#f62gxNp$|XSCol#DN4;Eo`W%bMd&#>2Ogz=(x+hGF-ZiR&4LcEmZjv{a+it0c45-Ede5vGou;f&?^H-0BAQ!AKzxdFk=PJ=$Q4r>^up4Y z2GaTMF<0CB<-R$t1UX3;{^G_*9Lt1@Y6ir+{6(WTx4Lq5r5D?`BciwxXHB0jaRBi6 zuM-DY`~<&;@*KoH#6Y`!dQj0&BT1#ZwwU~Ko*g_Y+d%;KEJQ46BN1vPr39=y>ISZ=W)&uYHFg(( zs+`5>*n?OnZuYTzFmJnn$f-vWkaRt}+F{0(NHrM_&V{y)kYnPBY#Z4`st|U`o#KX& zJV;63s4*h^sslm4bteP>Y1+&|+0v;@ZDEtkF~A7+Gabt19hQd^L9m}n+YIZ#EP2w3ZxLhV@j?l*u?VXpX)GnL0`c7*z>sxXQ4)7!en zPmwZ^#qBnCwl-<8wq)o#tJ^1#-JWe6utu++7^HOL-FxUei_k3S%~m*s9T4{p41KGE zRP=s~xRe%>r9Ldik;T7dC+WgkPGbb2aE`~B+gA5e*@Hy3(r|b;+_sqz8qP%;*htBV zjo@^;8y|AxVG~8TcXewH^dihr1hR_^M+b^iOt1zDr41DDR1lCg`@so3=Ch&WEph5a zWNw9p)AQtUfDh;y`^p<6U7(eFA;_+5?-0L`EZr3l)2Sr|I!p*Nj>#urddNRQuqsqy z(;KW2tU?k-J8Gc-Kc1f8V`!t@S0?#gqI@R^R^4hdSB8g}ivbe{0JmVEMenWvLi3dS zB5dBFa6ZUxTdz7?qnP?KNwV=$$`vY~Jng z%|sSa$SqwgCfF+KcySk$wXxmtdXqpSChQFU_yOtiPmzxOV)(}PVP2syjqD1UHOCcM z#}xJe)aa>zI9rO1yA#%)Z~$_&ire67rWo1BdsxTWJ&hYIK9VJ$7m= zqAdg3NFVTDHF@w@1R@2>JC~;S-QprpkVz%?kgqQ|R|#Io;Y0+d=+Q@Q((W(6y$vIfpB zTqyCAEp-O}eYqfdz+$NXRK8#_i`Uz6jk=%wM(L~ZX!L&b^#zHfr~=jyI^(nMht^wH zqS3RloBqbeyxp@W_{#Z6!D%66WXDiBa&!0+Wh$$2Id6k#B_He65j^lJ)ciL2StmK8#_KC0rI8$lkxX)>7WTRkn@U8E#Q8IZ&dA-# zhf#C7ojBgo3oBb)l!!4ZvA*wW(QK|4!R0ISCh|kkoe{InvbIMq_VN&-&MKCgd$hHV zXfqg8zT4`ITtOkIPn_kP)KP3VEm`3V zI@w{L(H2IZ3to$nZ(s6rJ4Id!MD(!j@%$pM?~S48eWDm-)Xjpt*W?8@KsV!-s;DDK?hB9(GjN;tH^PCU|Lkt$_7Us46?5C|?*=JFFY$o?iI>daia=N5qeZfh#H5t)d96cy zpzGERHABzmM~{AlKZWNY;U40OqBrVsE&jZQqTlPqTGF`(#d<%|^EbkSqF*ZStPfFe za>kqFwfIXq79n$TW|_1RxA{o%+U)6B(0bH)+|mZU021$h7Jf@F8IOUtQm)zP+})#F7tXFEi)RbmN@krrQndLt=n8tAo%}kSy!`Gi z2Br^dR7+-!idMr8SnW@|{i|j7j{N9+Th6X5e=!$O{Td7Evg>tY#+|w8lziSPneSwN zY*;jnB;2~2EEf85EvIU3m+xdqkbanAWI@gD%+V9zPSf>IWhkZ}2m>f{B*x{NoZaS&pq*kJ@CPy7({EWGgo7LKC#yEhSA1Wdp$;PPZ+X zXMG}aSOJUlBOUXLm@O&#OMWMz&y#NHsQLKiH!%#zSpwIflXp4S#n(-}~^!)9` z)}BjmckdJBKwmf)b~bOR60%pzJy^Fh3Dpw0m~ekyfQ|hon^WtN8qPq2g))u;Z`&3dhh=j|5;#xo>4)i@MO+%zEG67)<4vv z&b2Q0{a2%w3^oRYfd@KTBmM6)6u-dNhR~UVH`Qw-CtQ?z*0KZ(7cP_JN&DhWDXo4E zvF2<7eW9tzIKoYlKoWJ4O@Rc#zY$R4AJtH;1r3 z$w0qen8cA0yCJ*O&7>otbmbLCrl+sJ<$#vY{*_z1d7g6p(^pnJOA%kgD+Mf9q*}Fq zpQGL588*zF+6k{fhQy~%XU2TqkMCHEuJP;F|Ee7wXwUP=h+1=Eb&oRu$u z+*`&U&yV$c%YS>-k=E+e5E?CoYaV+1Ae~uB|1)u6;Xaq0E3nR?rFt)2*rZGN5Njac zD9u5Jq516W3pak3ko(Y$NzHS!7`kjS?2*wVI%hsdYv->RN==8yaSfS%o;+lnm!W)& zu+rGda-TKs-zNQO`=)9s+2q8(b&I*;>$J{ee%>oc`I()q9yUGmF<4=>PukQCZ}&O1 z?I`)-7UNr2mtd_e@(>kGJ5W+BO`p&9dW5Z?`+6~?zA7_E?@X{+mkLdNBGy(rs*$PQ zCPy!%ul=cNB(>fLLYYdgeo;qQ4B2}L*#}e&Mu$u$ZdCKoA50_u6{+aIP(jC!8aepu zPZk!8P^sQ_qvc(-dw<5{psOcV4EN)=- zk5B~Zf>ZJ7DoOcmh@UvDy)g97?IU`m`aO1LdLLs3GQ|Bh?zBi$+2uzFZ^K zdE}mR>op)_71dZzLcDi>N&UJV|5JSf7KV63D^XydLwudOz2e&*!yv^(xxSlEaat3v zs9kgFGNk)?Dtp*vi-&!``?}@H%Bn_WIlPiY&!V1q#S@6hn>F!7QbV@nwwlYtdTcjmVdu7cqojn0?`g|W$E2>#-m%E_{PK6gARq6YSG658B1TWDEmCi_ zVS0CnwLx59I-_qRAwgX4FQ+z3JJ&N+Zg&`;KjI<{i~8H$A7NT|5G8+aJlywPT;VGn zJG7&w7dQPq+C+H_O+Wqpi?R2krI-s=Gsr@ZwAa08%^5!kfc9)jWK;B%yu#G?1zq4&eTy0-A~qvmA$}4^OUUT+A)&iap78NH2K-S&nIjgynm)aHVF@nct65|L^%q4VJHZH zW}Qg&*80X-I{w;_>25k~_1b%={bVy`!4gh1&u`^lHrR0b6) z0+k8!s}*$jG1T)Vy$GMcm8T*brtYNsAnM;gb=NK2$6q-2ygJ8>rY~s!U?6%bfLKWT zW-Er@O1b(5QTS!22m?1`kSD!hDDE<7$0VYf0p!9bURC%n&=X_S*WAxNxw-i7QqNc ziM~3X0IAkRk~)r4n)yjR)E89wmO#h3RoR8WB%!yd6sEeZC=_C&YjOVS|#lBZpmcIG2do0;nMKreYbgk4OaV` zdLz5=h3N?6ud1L?PA@sm;*~a;V`sUS*c17`OXwp+r)v|U>OZ1?v)KCeO-AKwLRfbU zF)hqT$!WVDpA=ckE8`o`;up>ejvX+`{8h3V2c#Bo2a?$0hki6`fR5?Z$n#e@r z;@dE-47IXXVFfzh=quP}qJO1Zj*K+j6(pXK>QFn?>%xOgzekjK5f|SCs`Vj(cZ;40 z{9+{Q=9IXlCI1vcO*8X0j(A_xQvI9R534sWDl-Q@&6q1mbgCb2u>6JPIabbtB2ygi zO$FYHAGrOPGSj&m7oRE&TCnw9>XA=h@-~!_-LR%x#t$=jO1H||FK8CS-#Z)7z-JfR zLnMw{VD=PxN_0aj+3HEyy?@Nu;&Ha2GOMIrsgn09px zhE~eDj{5183igMxjQ`@$ZxJ`O(zq`X>_1WZHhyv7({v`W`BU48$qXuGSz4Y7-@)2} zh!mz-1#!NNXc_jOT@uAsDG0=-AO7X_?C1A9!k=2rEb3Z^JTA;UMEj@Jd%b zp*<~Z+xn zi|t%&+qP}nPQLv9UscaDyR}<2J=HzEGt)iWaRJbO=+_~L)+;X0T5G09!8bS~ppDzK zE_RkTzide!c?Db(Jan!7I*NhZt(V+CFc)kgymQ5k!^&MT4bI;ccxCrXzV51&yA@qO zx1I|IyA$3Oe2}HDCA?#STw2+u*2WS4#m!B(6~A>c{`KQ;|g#G=eX&V^w2cXkb@fRN*<(u>DCt}auJfN?bjQKLHNq3oZ0IXhYAl^HJmxK7 z=XPyqYB2bfyrkUSK_pRbY1hy|Z*LqtuHJ+{K5Nv<+q5vhV^Q_s0R*#r)I@Jl`lrhB zZi$V3!m>)MZDD>RKskW~cEGGjRUO<(iH|LA!ar8wCO##eEWir+AdCFj+Zi zidAyC?6J2u@#4S=p7c(u$>u?ROt|hp?+(p$O?;~ zWx9E|tY0=bhSK;fV)JsV#ol;U@3djEn;F8HzKF9ip+VGo7&9ftCHHUw-uvSpSd2t_ zLWkaF0l@2zHw1$MY7hJGs~t%peW_E26z)RvTpYm<5=BN2-0*+%G!9RhTQ3yZ=TTkE z!Zw-4!NH|!^@XA=Cwy#^({TPK)CBshgqfsL@iWcPPVyI+*uIYV#&l^PNc4S+Ophj? zw(A~`p5W}H5-m3G%e{5ND;+MrkJ5YW*Nit|#5g|T!Mm&?%*|fy{d=7ZM6Q`(r1C4( z`i!Q((=6n7VOX0{@R^WbcCN+c&8v1=ryWNgg8W?6S;pe*HH8zjU>6Rh5gAR$s-LPM z<51Lb2$l)HKVo(%irSTjD~)~roFXYR{l9A}yH)WI2FCE)GP<<%Un z=5PrwM+NYo^_iUpEtB4=z3PPCc6=%<4~-Bi%p#t(;M(Df!iWW>h+ftmrsbQ;@}k{y z6x{_@IZp+;G}o_ot?d`4D=}9`Y0@!q_Cy4ny1*MkENbBZH<6^wE15vhHS>R(=;BZ8ntWtUKcv+jceLPF8)bjpq ziFYyIpAgK?yRnm+0Vy%TsH@EH79kUSDET7bqyFr03LcE{Rxi}uO^2*%wQV*LgsW?8 z@$8OE!0@wPcm}=2^i|#Lj%J!ZaxRzuvjx_0J^W(DK6yZoX)uaoYL5MFDlc)aU|)01 zYZ#Uj_H4n-GSFs#jxoq_pGzddMCW>E9Fj@#u`(?9Tx zRq5|3Ln}AGQ*Y;S>gV1+uDL=!;D`WwB=&tMuEz#EAyoU{3Xuhqos@ONQetvJH&Z8> z&Qa++OMog^ndIeVpE~2TCsSCRE>SyXEf}eI9I$ zTG)7x<6aiA1v)04o=sDS^TbhmQDJAUbE}w!QccQWUd!&)GTfe=(dGU&e~b=wtBriY zzsUY^95F-zO9y%ny1PE6d0S5&>z(+UbahN1&=AfAQeA~(c+5Z=wr7u{7Z?g=Z!Q@&LKP40f$(IPZ^Ip#Eduj!GDG98 zkR8^h7^+lqKFjJhK?BnTwSj`7xxBNOk3V-m7p)o6IW>q9rMtYl+v?#I;4jBIV+rp> zBH9@sHeEtAJDF`bZxS28Ieh_0w?(}Un~fRB-U0+|f5v_yllH%SzcHe;hke7{Vj_Qo z?}Zclpzk3de*^X`KAdrC)8SFlhz<6`z2c$v!a?GpcA--wgYHC2C7t%eVd87n5x^|h z4CA4iJ4aC(iIFWp{WC;~Lnu0kXUAQ{|Jt@jU0Mgus?(rAvtv%th!M{|(eF3Ok-n|* zn}x#@GYz0mkgm|8kXR|u*2gf4c}BhS=Khg;McArO5)eL63iUNc0!6HH=YBVOT*1CW&{Ws%D)r2`9uv@ z3p6Hf>kV@`nJqL%;-HBJsH1`~Fd>-}R3F4Gd=trvLjtW$BG^`|ukKZvdM9R5=#J$+ zejes`b@TSt^(Vm6Gx+7+qu^V0BtvFg?e;o*y4AdrA~uPl3EO?z;cqZzL2{_x>Yrod zZ!{!9a%@iqT0^?ojdSp}Eb?OotUI{bc|s%pOuc%aT<|x%IS{W_Cj;O4_j?0{lzx2B z)QI?LQ-QH={Bir3-u66J)zWpH?9@8Ou$5(mXOb`%tb;bfg)$Vt80(m)|{2;5n z2LqRP_ttk-O*L9B#S}q~+$=3w4I}Z5SPcl0W zzSvKaI}Xs+QScFZ9YkuisTqb#0w>wO^*L_y;U}B?e6P+S7(ShZc+b9UUJQ|OmXQd9 zUH#0x9SBTl5>fM?`0Jb3?NJ`nKv845xkb)F8DM5TYKzJV-eE_L;aZvY^w4JBdMrg6 zWRm|vxJ?3%KBw}G}x0;C5x7iywBMkWGfAg8q_g0;tI${!4g&7h}Slk%R= z9ilkuUXfejb@$%tvb{&D%$9F2NNCR;`8=5ukE*v%K^fp?wSj)JOcW=Tf(SX3%FX4N zl&s5Yi;}6`NRijjrc5C0E-4#VAFpE6RTOzx=#S{h=0EyNvsHriu+g?}(({CpJQ~1l9A{nnR);1ives z`;TpwmYIPTEIIcd&CW7V>vf1s3cy_P;UAlk@>qOOom5eUA{7SG7%cqQ*PvSP{>7!< zL_8ZUoe>qt~FjIY-PBllkCCAWI$Jc9O&X9Ynf8|hh*RG?8 zaqt#H4%k3tr0_>Fhg?9~czNi`mX!Ofh%7q>x$Y}^@UYJ5&2$#YC#>H~7H&E-7LxT* z^FTA84%v)_=6hT-S*4=<)muXI##jn=r6slEjt!^attL*|RVCnnsoClt;9h?n+YEHF z;alo;3>lsLwa56bHHb(Lv<`7OxC`+qJAs8yxP{LE{u(W((HL<?^Y#$&2%(4IZ~KSGTmpP5HUpi7{WM80et#q$?6g|Crv z_aSoq=YKfN`43ouyr5ZaaTL8K9AC6v^C#}Si(O~@C}~MxBK$uU87Lv1EcxjEHPj?d zJnJhK8RH!aJwf9ie2fGtETajFGS((2CW36FRLHtm;tp(P2A zyNIC(dLLmb%-Hs)cwxn;1}_R5i7xu$Ro}KBq7s@RME_D9U)vc6kvsdaxAFQ;f1e58 z>Ma;@`7s^5H~E&g<<{%Ra%Dm`TkZ5#KHu#$rMTG*AM>st9I;u=bVBpC_#z?VV-5yF zj=R_Nj|Ya@?DX~{-tNSU@N%|BE&IGxyCZ$PfJ6Q`6a#a{OhslgQzdgesopWyVSE=x|adlyYJ{j?8b4CNDd3nvdLLj$7 z-DW((AZfaegm5}K>8x(bws>Fq1@SA!4}0H;@f*}`cg|Gtty+>Hv*d5|_igaCpQmtd z$5^Z--R?>;wc$fW$=gF8B)@QNpf^N_69n|*1zL{HEJaH6Se@Rcnf9U`G>znMBUmSs z+XzQgVQUx0a=Rzc80_a2Q^0yjcdyT7bq4T$t;4AnHc(id^=uz(uPFPVSzbb@}>^|s4oV>5!JLP{(|aFu8ljERAYOI+iNZajUJKc6^O{xear|iV>WL! zo#Igz%y0T1U%Z2M?|e0ImD)<#8Fs_TZGxt;^~M$|-le%uBTGe!j2tTk#b_br^8r=o zhVe_qoMZM@<#A62P~#$ZWa&|%5_$DO7A_x2Q^^CpFvIJQoJOFNdz?hF6(8~SljyVC;V93 zhVR2NSlwwERyJ<^1A7WnW41=VO-9fDLXeLrtM3mNo5faIWHUEnOc%0p_wm_?3)Hc` z;YpFe0>V?S&!=2wZU|5Ws1%MtVTd;_w^e>&EBvc%%eIE$_s@a8){a06-gwiggFCJE zH5h?0C|sAkW>g{>CNa_7!Pkb_o1^vBi5i>&`MK=&FUZUVghH{?Y3S7!0Btn>THzyL zzgvf}$o;suSESh8^?IZ(Se~IVFUUq?;Z5RwVODR+-6w-KFT zPZ}`YvwzWx_2iC=I}y0d?=oFcQ*9~EiVK-;RQsT=gQv!_+GaZv=Pe}!Ak{7l+ELTd zaBTq26d5&5*BK-&S_xJK_sx@F+&xJ0-on~(7_}*tbO zlW44_U~&5GzDF~zQxE!|W$qQk3+}W-glsD{s2gnIk?HEVQ^M`f8z5DtTsRLKgW~iZ z0LAv`Ltd*fmDO$d98dKpqF=;L5)V+Z0SLGztrQ=Pe%)}7wBzAYajk+3k}YQ;ys$aF zpc-FcV5pE?CH~Mh6H)(g_Ut@JLvUMZgD11%NC>fD<-&5Avmu)!fI@CQa9W7(n`1(8 zL4BJ3jicOr9uN(;auWLxyG7xDlaGb@W-!aeep~)S7HDM`i}l^M8Svc+B;6|!w9#7N zfNqHi26G&2dXzG@mJISHcVc%v7tR-5f`T|6r(Gu#_aTTEh&-g5yN@N8B<>YZL1JSG zD4!Iix#m!cAfT+@ocf2qK&6KB3Ly6780X17u4cI#L>yY>H+0`l9V<^-fFjmPD1MYt zO#3Hl2{!v%Jgx*)=dU5ThcMElG1xs>{EVPawxKT!KTobP=(ui@@gHPgj;C*<>rT+} ze{}*kY3@XDbcA$yp-3LTz(IoI1VMrlf>=SIVh;|<+~W>{J5q%I5rYsbf)z?C37zT- z#qZ@?>NwN2)2!%-Iq7)5R#jEKw;ykC|CLy{zJ7kcjx^nBea`f}YR&Pq$>L!VYPc6q zWy2+_o>6dxUPQT;c)j6MoG9pJ4q97AM_TQ;OCu1$(Jje-A?u6=Q zNHMq&HP!=iK`|%-@kFf|Zl{TC%w-?_ofCf14f0Ok*S4Pg z>}4zfdEpr3Jes^lqSP&qWAA4MWO;W`bb&3jIwyEkt(!mB^$^(&1Y1aU1MIXP!QB)7{ zN2{3{`HL+)NT4eeK-I0x6j}r0sUELMq{M-=B&Bus$oyD^{}71w=PYX^WVO&Ixdy+v zXe;mn(a$@rX6w|zIl*XTsheo_8#!3*?3-!KR(@z0pO4G8`Jh|owKgcF=d~iVUu$UP zpdQMsOVV4Y1+%fnI}S-(Cdj4{<|;YByKsk3^hBsUcTSB=O6Wyq>0Pz=+4^;xtjHH^ zRJV-vue<2j1K~#=Iu^C$ts6A>JG0PHWCNTE64|F7wrD_hzJ9M9iN{zi&3b#yKnz1$shyZlnd|tF83#0)K`x^4*=Fi@);Jx_l zP_$bg0iMk*pJU>b0*eFGIKZbfy@+5`q_;@ayx$poTTG~?hf_3YDyTeKA#^K%Y1?NRnqybGMUDG7opl9OezYK7!&ynJ7>xkt^XvAk{TP|zi1*HBR7sjY?) zzxdoY9BL|LPqA7aS*fLreyGGht51tKh2_-I0K~a6gtnoeuvNnQ6QaqsA+Y_=fd1vw z-}GfUHjMaDK$&-CtdsPTmqqUxPSL@V@I-r`oD zkyd7B`iUYc_15D~5WMvTQ3Elwx}PX&YcmT35Urd)xwGqE-T)5!=gU{02XAb|2`v!m zeM{9yz01{t_m4C)XK#;;qr0RBhCLbQNss5Kq<3OdGwYJ{ReHPgcR4UNkfVc#=e|(G zQ3o6JJ%g@X``uHSy<kI)+nz`W+z6Z7|TuHa;CX36YlT+%zM3v&ej`qJWlx=~9MI&nd<)MSpJwXQnid~Wub@bxiX8}L=9RhQenhEI1=?JAvK zWi3J7X9`im^``#cL!2MgzTt zOEhj+zr4&{>@fP{(4meryzspsjmuK~h zT6#MIvJNvy*1nat9&b;e&!?JvQJozdKjk&SIw<^+EFqnpD=-&^zBAYhYW;FpZJ8`l z^-|)-ww}QSN9b`f#d6q<`5s*<^>QosdGISC{r+S3>!zZok%eQZ^8`BQMw!nc!8ait zwns&aHN>FD$Y}3Kt6AA`Zx@*C02#6VFpy=YiDKU0%l1+1ZkV z;Lr&tgJ1ClJ?84~6EZm8fM3;%?pPBw=5PVrhNAD9#@KFb#@wGL;%2^*xuvH_zq({mQ3xzqtR5U2>;y!1 z6sO;CDjbh0%kk-I*<3-!b{)avrqaA=0`nn^Gm_~<;e?IS-9@L#;XApq$a4ZQ#IvR4 z=t2SW1N$Snpt7>dHE4L2p~j-p$4(#Hh&aTjH%<=JW9HNx*$#{fmxYoYfg1s?A-~d4 zHL94)NZ&XRdsxG`yeaXJVwQ$e+7_dqFJA@oj!1a>7yY~7QK4O`>SjD2%1Ug)xEKx( z?rNalCwFUywUGqzJJZOWXW!ee74g-;_~_Y9vgzG`+qW-%JG6PziL$h1w|2Q zK`LmHgKkvyK{v|-%p{NaC?Vm@8J|JE$|nlO#nODfq#pv1b1Wifuc95c5d0ZZY)zi2mTR37ih%atuc}rfx=+fQLmq-4IVsU zG?Y=z1iAX|y!3Y~$cS%YhC5P&P5tNvvyNW8vyr#mhd~ggi)|?*Wt%sGrN))&f6p1l zQTQl2Xzg1%GwQHbkLX(X-2*0GS}8Ma7l{k?K;8uKmtJl$DJ2P6t+?jq?>E0Q;wR*OJ1;v^yq?2`jxsT_~NY77sj*NKz;%@oOhsT0nM@z&d8MU_)O-~pt zX$@ZSXT8419RQBvaZrQ`*GZ!#?6e(fhc)w(n?&l(OC0pX#viDK1_B8oppyQkx75NzIEf z%n~z$khSM8zf2%0=pR2+6XAZC(p^=H{z}>P8mY!z=+a%b(%r^lwhlrzxaeS|Uz4Fj zeN5DMj{aXgrT;)UFU8EDL?lX3xeri%WXw)5Icdd453Ug$m=CuhH5{>Fa(o6i-_$w1 z^1_Qb(Ofl3gp6;9TxN#|A!A!aAf*C}mUciaYx=M&_JmZazgHDD{$X<#kX;e8a%U_$ zI6X62fmR%j;wJq8)toJ8 zNMRSVrBr8sGjE2Xifl%sB}Qit^Gd$6D7ez>CrN7lVw#B5d$o@pc0qR0FMNPOwTGff zkNiZ_7b75ow(+Sy^fH@T9`v0R*K6#X+-6sfiP}Uy(n!!>r^JW=oKq(+^3(fI&^;|X zmf(*bS=2kwXK@(z$K-66fEl7yqo9&rI@BWz3`A)8_kE(sp9G}ckWIol&F*U?M(W)% zJjdSzymZ70Zs`KTSQyxwVisI)^R>Wymwpfb4vZ4y{580q8@gBdtno%&NM2z*#;+`% z<5o~J3-sze*HD8ViOo3f8Wu$V`8vF!i1LHNbC7HD(ZPzQ|IKe87#ABW43jp;5?v`6 zcHlul0d?1e*qugYPNfw(6PE7}Y7{l4nvStp@xykBUkNly^3+mZ1g2_6Khz~+zK(6& z1`Ski8bBGflBT5t`$(?z@?qwtxKEm92x+^6cA<>SI*Ktf?s3Wt1=9IRFQY|{`d5-d z@+-h5AuroIf5Naca7;=~?UIV#>nlHy~-enPU-Bq0uq zqP~>y!y`{3K8^5xP58wVAwmDEwcQt7w4 zuO(3~3=f}`Rb}>2LvBTF&6U6;efkmyF8KSNnRr8&(8DmCB5`dj){+8mI{^Sr{P zQpZiQ9bFp_|D&Tkvqa{QE<529?LeOxEPLo#=5y99eRzPtr%ra1w2mwU4`WGOIdN?4 zZya94sA*gUgR!?!zk^S|V2tA99O6rLwA2CjviQ;w2WWK4)E+m$h!%33EBNFpeO*Ru z?X@9oQdmFaUJelS3SnOyf{{v{y4vA3_QdZyG>Y zbOerFdcxL#kR4zHwre&*eMF0%;SaPy>{Or$2%Dvut{2>3-nDMQ!dk zECr`uQu-PuZWsw?x0uh;$rlVAQ8Cv{OA+?GaF-cTG1<&RCnQs)Uoj-Up(f~N`keKR z4n*S6vzJpLYge^@7aK`2-pnSIH|Wd*JT?=aK@^VQsoYM{tma6fvTlQG@7}di<)O2P z#tyVcI9PI2EsY=#uSWGkV_z3CiV38oEKx?de;ccAsbnb~G|F#TU%wMP3t&6Fihjde zpLf!DJ4%n1z2Y0K14F5bK8)1u-))*&1`qYihs}d0vEbi->XHNiIJ*qIzFVy? zOxU`Adh+eX@uN$a2#I4H&0WP?e8xQX04?$kcCrv;I|%Zd`=m z3B({Xhpl#D)G~T24;!h9>nVT$XfJH0m}h&jqz$>g5n6Rw@0DKKTT-cku2zR)7Z{@H zkj$ggMP(|c(|tc%0TIzRK(^{K=mTVTBC_vlymVcjNC&L36};`_T|2*7)2-?%RfD-{ zdg@ls@)*d@Ed`nVT~9aD3ZU$qOFh1YL2PMaYiL_svQbVQKa+kkEp0o&)tUAJT5=y&C63{QCN9II1Zvlz&py{1=lm><+ z7L>8miS$T!SS|BXhb;a_cN!M+D|CrLT`?KOyAOZ0Z~63YfY_=kPeI-x(t&u6A^pHH zh`%XcHLCZkJU}Yd;$9--deSBB`e&f!_2#8=<4p)(3A7G`aiL4@CDW~=Kx0CB1J~w= zxqbGFAeis^*d6=eAbVh@9p<@H0?mc9fZ22ml(P1Lw0G@oaRYDr)Om2@-gL7CPw!B# zdbu!p(QPu;S-xy!-VA`gln-L zfl!_d%E|*6mIux%**+1%oa4w>jqf28PNOmxwELd#5y(OC^? zAc#C;(?Aj-yl<^Q&)WGDP3u$jWrKGjLZhQoT0hDS$#iw!;ra-bVp93?AC6)rJ{_8%z!2dw{r(+?;@bPbSD!RqbBvx0i?WJWaNJg3Nq3st%7>-tiJ zcCOfM95R5rA9e?L6+=cnO zdts;X!icZBunK96jgIh=Cpu6IlS*>IH((uC&MD%zTGHpZ6o2eqwR)|kIY7TDb6?81 zgY2C)upIshE1924Ea8|w{HX-UCidsY6EOrsEzg~fU=aPG?TF&_5l++1>a^?UQ2SurTQi0qQrIb9rrqzb$(#k=U%IR*Vgf66qam z?WELNIXH{fVfzlKHvJI_04zlkhQJJOiP_(KVmWi?i3?Z=tl*AP*Q)hywZ)=9d>TKe zoO|qo8M784G6XOfW7Fp#Ux+v+_I7=MxX36z{r@Ua#O4fsO!1BHxnhbQYjMJ|x#k34 zqaM8#AJS(HYFj?jN)ta+Z?euJ(er!v)M`v@9GhwIA_rFR@s5-i>WHhCtQvo=!`Vif zI=!Yr&8n4D{-n|b>d@!kx*o7f45@mJA3ks&M>AZr!Tj${%2z*ks_0c&<3Hr>4Pho zm6DzZw1};clzjr4lYM53;*EDGe zoGr=X1!F|ecI|Yir<1my!{qS<$9-~>`8S*vl_hiG-@*!TvPA6^u@T_7;+6c=vU2&= z4Oe=#+M;Tw2p$OOk`-(c$OmhZL%%NX3vH&{Z7v~%6P~%_2w-osV%!Ybk!`yAqTdUk{*xLu>%tY^^Ao_xbFBoApWDGxUICj_lN3IUJvCwnujxXTq ztXj1%2lg&zEE93Va=oBsyQt7VdFFUPaRHMYOxSNV`u9M#wp0?#Oluq%ReCorI&pXO zGRprfu8XEok-8Z4sI%@|E3!C!4N8;mfEUO+TNCc`I$9GP7CGbv-)HySLDnoY$QlT2 zGbso^4z}Du`h0ur(#0m)eCeB?8m*Ur*$!b&y03tctjH$=9f~$byZ{dQ*(g?3sl&uX z(pC|q4(q(xizRV1j?)a?==xrdc}~;S0LHHPf?s3Jg3YELU7o3h@W9~zXo+|Vdq>fX zX}slKAWLa+t~HcQR(}T8h^cFEA=>JN4U&BP1Be{A$=IC)@Uv~#La*D&3L+kgOx5T&n)k-Ihg|IO0FQ^{i zAXh8WE!^=zv-ZDlbt z6Vn@(g5pu5e{?i!*@3xpkXufUi+rS10M=pcL95ljbzkrA!^7x(Yi+BBz7@Jrl;=8K zP=Z7tOG0@Ld3u9Qf8KsH8v5S=78l7X!|5*e4$8#xo7 z(aGh@s!U5K{IwE5tQ+)UZ!b2H{BbbthJ2^AwJ$b8@QuwN{1sH<{&PQFb!d7(!AEs5 zCI7Ctk|m%~%i|l>z$2irmX-6BSHt6r-TdxAWC_J(Uws!6$3h(5JPXVsqD!GV3|LGw zXIUT9xSDWrNam^MdsI|rsqfDtE;co#_$@Lz#lIEYkj+)uV`5>-;<%^1Y-@T3=3<(B zL1sD?*EukufslfUXEybfQnMpI0(0#M5ardJFp~n0m(Y=s7TU%L8Vc|s6dqTeAt>q9 zgv$Iiphm=rFFM3=vsY6x{b!85?h}M^)?VkgjF_78Y;kJ2AFR=4tkNJ_Zvtfh;8#43^vcucbPtn}ZUH#QiLIPW7*Zj^<+;)JJ|k%;5DQ)=P}$XRz4tr> z@haQ`PR`IuEWR}}>X_tbOl{`oUZus42sGGBm5CNK*iSB{V zbc~F`u^VI{Mh|caYlZ%#SuU}ke1qvUa@XAoVT0%D9IT9T^8UCM`n<(lf?kJ#issaQ z!UxR<`Tb&+6niH*vB#4V4n_i) zIMXTRKIs!owoLf?h1E~HmQJEl%fX zKM|()J_zuzIe7Ohj86duL)=UBREl4$%8k}>dTAg%+=T1o5+tqu3t79(LL)eCMk|cZ zJ=#ZR7*^5o`EU~~?a@g)nNRTBUwmL0CPSvQJ+<6D4(Y+^%A8xMk1V3W?~ktB$!(6kXo+s?HLwK zE|N(W*x&F|*eWgv;EqA$+=7&8{%{nGTe9%@^VH&U47nuyTXQ6m`_`?M@<|lDBpgN# zHHRUEQ`SoxB*UiHA{?O&Q*Qk6&B1?OimyD=$nkH$JT;&M@P>#|lJO{X2;#>^Ehnv# znOw?Qx#*b)o4Ev=iBAhDn0pZKONxO<4@QCQ-ITe{de|EbQc?;H2%B%v1$6wI=PySZ z%r4$xmF>0AjFbwWZ?HsJk&*V?$PJ`l!sj?OqY?Go$hWQ9S=q?jX;86z>0Fds^d_Er~e-6h{wmG4(lK$Wwi2~n$J1-`k z8uT|A3VPu$COkA;V5=M+;JB+WKL1fd2ZzED&HGW^-XYP3kSglV)X@4g&Nq%>!_K;9kibj5h&>J=ucs4&3XHsw9x>v>Z3&>wuI_+`53! zaxgD&n63Y)TJ={4>{TLwbvWReg!{zMO`y2C0>v$78Mcg*9Rsa{f!a+VCRO1L(IYXJ z;nX6)M>vPXp0A{v)ZSZ>qYO-6zPyFMY|le=@Dc0Nv%2Te-T%Cm`ho$P<}R38JzSZn ziuFwqF#I_5sOx{eaUd3U-tiU5$$H=L2Y8+reAykQ>fS?HTKm|Wh$ep~;2idcgO)E1 zU;Fr;N5JO}am-{nOjR{i%a>U1WAz)c(6_7}O|6#(VyiTm?y?yJ3SnoS;cI@xp)_@} z?b$pAH0?IBI)oaixu2Xd<$sDtYvFYMC&pwJQUyeMIpohk-HO`eE@k!+>I@o9>ydyuncyr9WnBL8 zy$oD3r(C_O+VIsCFwXFxvj{R?4W7Kp4+K9G?u4uu3fr3?j`6~oY|>u_o}5j?Kj6?y z;Ds9lj`IPM4i1wHi$;rqdn-+gQ4znRran|+>pU|!RPsFw`(fzyCKUVRXyv0^^U)k| zC=cT!P`*Fk{qTs={e80i0>+r07bU-4`r=)^SAs+E3g#mOL6CEG1Nt+>4?2Suc7<;W zW_dnwyT>4MdZuwy17B1=m#2yTd9;Z4C=~6e{m|o|=z;1pEa;Z$I$daXK@6?x21eDT zutzDHg4__J`L&m2>r5M?57N(yqTAE~s)4XdWS|Xw%JYPykbu7yl$?zmZ%a^_+*n>Z z4pk69{s|IYzd=9s;P*re7#8g^KaM{@O41KB2TGfK=@|Z8QZ(kTG{VUJN0Voya*cYD z`WRYEeR&WkhL*ckL;a10bQ_y1zsGA&4WhPtPqT+e0qOlN=ty z)7;e~NI(&csWf0BIi@Tnl`i@pDzvKl+L0irQ*9I1z)PWA!=%Ab5qFGiBGI~jLwv{I zd8Uv#{7`J~r!c{a+FCh3CT;83K;;RD^3-TXo3fuzEy^WRK7J1{8u9*_!KYSi>g);d zBW`_C);X9d2VRxLgsOGf@t|%}jk;isRIgQ1z-n2?AWFT;E6RZutx-SbPs6oDqfnZ( zLm|fdmmV>)For{8TvMs!wOF>i8VoR5rj*{^`4N-qfQ;~=G!K8-w%+%*!oij%vWgKI z;WIm;m6?-;LEH>Br897L%N)(9l?tAwR18}kn?TAlZtx6e81{2?Hc6``6=_D>`j>fS zP$wqeF~&ZepA=MB0<=df6Td&n=l{j87~@>iqX$nZeVV36OgaHFy!ICdK{7P@Y)v_U zpnk871jF0Gj^RN{!1D?88o~ZkB^$Cr1dIUGXx-+ZeW&3v2>*FiN29fSZ%55n@!G|s~VPXJm+h4SP_UH zH=qOtP$C5=@hF&A^q)uZpPwxPf=cAQ<83{$BjTJrnV0604zs zdmm#~xY&e|YX@Yy_;$b-ON^N^b zu0hx`PjnL345ik|_}Q1QL8O$YR{mzvvW?OqXKdGL=ygp2=KPtEr2I@sg7w7I{QNzp zn^Z^eYt>Tm$%yJbJn=I$@l$#1OKHr9+(aOyPET@`q3A+Q@yU|vJv#AIb&$mKwprljU4BBB?!aaBQ=8uLi>2v#|wspgHnh^`&7?7c$_5ZgJ1fowcKdVJy@ zPa&8r&(%Jd%wV5a+aSEGhO{G@f-W9Ly08yL%)sKrOxwU>1;!q+P+3JC`-@gylNyjL z6;qTa1rgir`^}jbB!wPwiE&>TT-F!7 zTWMqP3qvXxwx};SqVH}dqowbz#%wSsUt2{T--kp^ogR=Z9efzk7csNk(ic&aGmuy; ztfG$W6F^fD2SZcX2P0-+LYX-rOqOJjGKg+gR93_Mfl*bXNL`T#Ljwrj`YoV#0)I~O z^x9D-Z0mM}oxDH;@F)_l&aa_uR}SvFsnpJsr+)Yq%rBNFfF`$;hvK_}TO0OJ4)eLI)+*ese3An58PS(M zv#M<%tDdFqzW5KuvM;pS=$B<-A9iVtxPm&4M-)v3ycUs-!9p2~W&g5WaHFC@rLuZC zWd-bK8chW(tWGarsTAhCkHIn6Sf5W71`ZoC8~qmE9W%zIyToJ8JpJjqP?V06U(?^s&+kJtG6s44bKa1H?f7 zina#Qtd{6}m3B$LVzqnY4-+*5_7vrpOM!WpJG9Oc3+f&7t_(5t^f)^C!6B67orAT; zk%Yi2PJJQQLF`6N_UYI(3fI9j64!y*x`X-2#(k3>-&trIj)zZecFx70lkP`$pQ*-k*cEex34r<)Ff4ie~LQ|N7EN$k`k!D>4}9S;ypsFGzU7 zIxouFHOCvGPl6mub^$;#6{G~yZuB5*&?)_|7}8rJ-cxyWSZheM!HHgubHlIqDAU6N z0FAUVxI3ClgD&Kb?k8#ROA-0$$*$YA{sQ0)9cq#58jYe1*WS*c<$j0A`jm|}?k`xs zo_*~>o1I<>+u{njA@%l_=m^LwwD224awK%{>DI39FqwEZJBZ=_Ks{ET%!wb==hLK$ z#d=qt$Z}LO zM1e>}S6z9%51r>wYva);R$P%JR>YtURbIV=34pjqJ}hdrK|#u@&+}QKmItu$?Sugp zcp7#kUV#%Y2rUPh+3djvv3=&H?_?et;kXy*;UtePR$ks6b!u;}Rh1(;I9qzoH{n=4 zZ46jxvFsd1Pc*Rw2H&0^2#q@54fdlz|z6E&O&(I9X?7 zte@{EkpIS8FLB1Bh$#DcD9nM)U&?KAg)Z5AuMAOl5eA}mBH68`upvh||sB;&Lh@3|+K7daSkR!AXdD|HJYeBukP=a*`pgyE!pdXVE~p zRLnG!qtBz)9o%?NI3#7Y(pNMT@nv#%RHN2h)A5rhl)tu>1}*%ky|tMcauwI!uY7ew z?PVB!mACo-0AxU$zsTmfMYi8NWOKTsi-_GSlWmpBw#oq^Yg?D4cQBK-b;V;~l^fg zzoYkIu6&1d?HzqZ@3y0#=vQ~j!ta!QN%XF+i?_n2=&o+_x3cVZbz8nw6SUkErF3gX z-?de2itg&xUnb~DM?*Fkuigq*$Rct(x#)1w+Op{NTbXUUdUe~%Y}*wf%CW1D*frS| zDaNH;eTCmt?GA%O#+dK!F3p4uySv`Km5)oid(#_Qn9uHrD?Fdw687l3y282J-eGrj zE9UC%QZTqn!Qd_hgS%7=?&>ypn@G@8nGxL8tJgM`=Uovp&plng#yt0QyTbF_qvW|q z$#ajA=N>iBJ>B+;Jol)1?&-Ca=eZ|BIQm|Bo_(+EruWKjdavxJllS#lx1Fip*Aqxa z_u9Cf+qExz+jc(2?CZUIJ0D~AMI74BH=*_o1he2tZ+KKD*lfNX9~>;fdy997IopBl z%*K6#;d#{W=C}R)G*h4b* zkc_=gjx+bkk?MXKd%ui5EHxZfTHukca96H(*pY4@+{sWrqIkj)#S@Mwo^V9<1j4ve zBv3u!NUyzjvOJGS@2ff*1}7Cz{HQXaJK7Z{l(gX-RU6LHh#Ph=HAj_(bF3@e%;+6< ztlM6$?wDfwF~#&_is{Ex(~os4-XRjGrXTB7!1Fw&G@RpI;igmXu;bls*vXO|SMofr zfww#?tB;I1xrSrzPA|EmgE(tBpxlHU7Rz@$w4{_QsL z!(TL!6H9dBDO;kGaC+!h5zEz!f%_5^HPj}F^o6+BxLSn&Kzo8X0m0nK3ImsZ-u zpZH5t;!mHli9Z9k*?*;wFT86@^kU53fVRKfVK3`%SGrz%g3|@Azirve)))z{%jJ97 zy1{iNZu0JT z?fF)*=R3uo|CH?$cl$N=2Njt^ip+hA%>9bYVMXSMB6C!cIi|=QS7c5oGA9+8Q;N)KMdkrT=0Qc~Aw}k4 zMdpkm^N1qzs3LP#k$Fs!Ij6{+S7a_IG8Yw@#}%1BC^DB6nI{yPCl#4LDl$(gGEXZq z&nPm_Dl*S0GS4eAe^O*#P-I?IWL{Ea{;bHntjN5g$h@k^yr#(fMUnZdBJ(#z=5qK^MNAsp(1ltk@-lGxu(c`tjK(# z$oxZ*`Bahlry}#2BJ;T-^99P_bopdYvA8@b_vuc`y`qzoC7CbDV%seHRA<QRQqz`G1WN)AEv56E1L*Co9{Bn@e}24hUfrb7_D1S0^J5P1DUu=yH7x2HE;591X+ zFxA$ai`R@kaD^{5wMEHb6TbKp@)l+a-)suTYshD)3*hW?Q@lV@wEq?>5n# zi4pLvnUI?><$Y)me48lb4vhE`&4y1dhTMy}!xvjaP9hItH{u&6;0;*#IjK*l^8Tcqr9So!P|rfK8GkB=H#3ar5_9z1}-$*nM0sSj$)GN@HDh><2A z{*}*!QnhtVZGknIWeu`Sm+J6^KVyqm%X(DFG(=?j%wgr@LsUg4rlL&CdNW{}e>X}K zvQwl{!@S(eaz8Y*TWXi4z3wB1Lg?v6q?#NL0Df&UGwtcV>-5v3=#Id*+Je5{0)P!K%0}rG;dOJXeDxh*q!7r3Q}V0gwNzXrO37wvJm^;apevz5u@nS%~nR=qhF9TyMXx)o7iZW|(J`INR20iX&+LE;h_}(!8H(BJh?nIz32oFS` zdM=1Jh=_N3%fy33V)%eCt*D3e2WSZgf@hH6tG#Iv+nVrlq^v|G^T8s0i<8PXiQ_?0 zo3}tGMXE@Ih<`SaT!);LN@V8)v7=5hoNJk9Wxb^I46<@6Pbz?pV}0#7Q61rmI}Q_x z9zDrR`I1t~DhNJCOGyj;5-T)uGx##3@ia+y<)q?fNZ^;~<~+)Z@?WJ$(%&G~JVpEs zR6ubOek7I|ok>*qDW>N?;J2wD1^*_Ul6txcJrJ7(dLSh>xRpu?`w6+NrxbssMZIP% z>NQ<} zW|hB_RsOI;eKl>CA|EH@A=c032j3?5%ud z12pr}wR(mHv$SC!574xKDE7$a2eJRd?U{Zbb)R7sQJU7}0V)5PkcZg(2NY*_Y&p9E z-7o0fW*7QF_%wul5Qdk4Ikp^LfsPgQVYBD@QF{{LqnJi9QPc1M^QN_8API5c*D&Yg zv;6N??C2rvfY=AgUleG8fu!OA)==Ryp`R;h(nK1F?ew7i^@oTDJ;d~w zP$8+`vh=YJNj*tI55$fke^HPUhp2p#cAg>|E@UCL;USCD(SAFqo8v-1hS5Hfe6Nyx zhDZ*vk3D4VaB1=pGI=@~MgFNIUuy8=5IgH(R{Ic8YJd8D)MK#)nYZa1(4!Bm*rt;} zHD9yFbFM18`gIqvFTxHpPZON?5z*m znq{Ymj`*~vwmVZ$Vd z6aVvT!Re4Q_UNA}N#w}vKND!?K-<9!mR7++^Vvj!OyXt{N8fQKkRcFz@Qk%}XbEdc zYcd`r(NCXY4ht-$1sr6`K2wxt38fJGJ^70Q6{zquv^2*fWUBv&qEJiyo~4g}MCy?( z31Y{RzbHrvdhXOsq9|yFkwGE~A5j{UV%u1zYh6H{5W59*W-y&eHQmXYOOYKYWFhvI zM;JKehb*n?{ZQ5{E|TQmD#>N5g4ni?vgF$jSz47y{y4Eb_EDKUK_rLRj7I~t>1m=- zCe0xZvPelTJ5PvR{-|vdHSF;rr2kjsmk4=?z1TRrdM)Ufqu@T8T|y`s_KX*Z)Vq%| z%%@wyzsPhqJ1g@@6?s5x2>FWw73di6LP5HdsD5V^g<5I|OFv!FBP$VN^Fa@!#B#ku zYGJV=D`AA#?Pmj3;xthUNex8zSta>MksM;5K5MN+E!cz?#zvfS$rL++d5XWC;~Oat z8jzCoZOdu+A^aAQW6Ne1ewc;VvG5rdUdh6bu<#GdX!ubU{)&aq8gLlevE>sMevE!| zc8f`a=NS8a#y-#3Vc2&%9yh>J$CgXWY4{H;{2U8kV&PX<_z4!i!op9o@cS(MM;88s zg`Z;KuUPnL7XE>SpEckHzGKUA7XE^nyOPds9A6snPFjKv3wL%<{$>^qb>Qh8GCQK- zZn#fH!c5;l$6M#<$P!)c_G^wIjQ=p>r#s-$2QqfB@Knd&&(X1ohG#h7&D4%97Z`u0 z13&-6XJ3v2{4^NkPyFGY{jgaGkCOzO?+~>S-zdJ(wFUQ$UoLXr=*oQK$`Wh%l_gYr zPXiwQ17D%x-Ug&4xi6*RNQ0K<2PWT_g@0ZW?Q#1wM}H&eakP%f4>91#2|<^IhcRE; z$-+@Ae1L_cxv#QttkD}s+Re*o*vsrW&B6^V{5}h>G}>YQpRn}XjLsPTiiLL@@Qeqk zT^8PBbVvRVEPRha(ci$r_Zt-bl}!I(gQEZb@*6qK=??n4mKYN4(H!v%l24Wl;Uc}6 z2-Pv%Xo-2AT`F{3WWR4;;6h^!I07o&Jc$8wg&8)Eh2LMQ?a-y}sRo>cl*y(Ua2!(N zHQl&-tBO}9Gj=son{6yd{-veDc)oiDWy@vapUJYV($uo$8>=z>b4=e%1CH?$|5}Pd zqQG_R_ZS1s!xVqDL=&37S2AAB_}|HlALHyoPqF4$%R4nzuv?9Y$0-mRG>$v5p#bi| z=6a;zsAsSVPo@T&^Vh=_&J#qytD^b8yk_)Q-!tVBZ$S6!tN|_O;RAkJF?-s&O?^WN%@I`x0vn>@#|a>0E-c!f+!RNt_=B#;q$Jnj0dGL9$qYY~vJ6DK`ewzJ0^9NdyFEIn& zUoI+gucabiVSw=d?lqlOB$=s8*OVU2V9N+3$m$(JsCtsuIz-f<&6vbP%3UAr?1oxH^!ds}SQ95n<9Nw`yyrWoF z?|7XKHal5KQgu2Q@#>t4=Po2T({(syBb$3ROV6t_m!&_uBHCA|IcDkbgopH=LLE$% z-s9D2Z+(@iTdQw-LIGl%-hxZo^NusH== z-zGAiM$A-@d{->-jy%bc48k{}%e;eic%zjxy*UeWA23;%48!mMm!l;^h9lWp2i+3M z8*Iq67s#<`fPU&p1&XdZ96*y57ond)_GCKf_hByfGh_E-&58p*K&Q=$K{JdYw;G^< zqqo5(oXZV1;bGf|3I&>UG2g3tiY>z&`zbOzm$M+;U=1Q8crb4JI}Xxq01Z9?kN?5E zhX$Wn_Z00HY4F*{?xNiu4ZaNTbc0@$20z>Q6s7vc3Myu!=#g3XgS`oLq^!6uxCidd^u@B6~@k3P+-*To&51!?uZ&#SkXPEa`N zCA5R!by5#{WPNTq{j`efHYZky@oQ=?u`*%$Ra-{{xo2)>tvI2Rt706q* zF~36OoExA{Cz+3pG&q4xA((I~o5?Ppfiu^M zbmGc!oJxDbpPBG~lI}o~!<_HR?^xGsrZh;M>eJRzEO z793KcZM9ZNG&ePf3nQdCfCzLaI$AK5&8W(j9dt)Xt5zVU6R}qDf@_e%w;raC>p~+c zL()6Mwo2?$+yUg;NI7arNIx{VZ9A5AJDH89-5}MZcS!643fe~zKJYrIS;!1J3cH#? zuv0UOU7bm46H1r(xHKm(~Y{jFxx3K};L*g4tQ0pm^ zREBVqdv#Wd9Ii^pV)gEzORyt`>61F#ptoF5z zfteZAOp8Hwbi5^}7@b)VYt52p7{?4|?i}At1R?eC-o%BXNc;$N+h*XlBh?C{b&~)l zg}0&_M;XLisG!mI9DzG#m}ZUCw8ZhuLC1z#96!lg&>gg(xY(o)tYnkz4aCKir>|Y56AeI4iNe-5 zRfgW7)i?I3RT)|u@yU4m)msWj+*AS_8R3xTS+u_RA6l> z=47gcE^A}!MLkx{nzq31)|$4kanGV@<%Xqas8Bn3z_e1f1gga=>xI`!m291wwn+9N znpS;--Z!KJ>4Lh2afed zUWfJAZHk4Wz#C8yTH@_Gj_hsV;9@*Bjd5M#(cn!w^Ix)#+01Fu#c$Dv5xMv-V&u`Z zJ4hauD9B^0zK(P-6t!)fMmV>NkfzyieYtx6<=MVfHml=YUxh?-C447qeTp zR=Hpj5Po)O^w|t{jF|tsX`m%2W>);)NLx6;7Vc&Xr`p0xY~g;kuwCB_Ti9k^qx|gQ zEL%9l79R8~{86^>G+UV8(dGZ__J-TSNw%=v-r=^e9iKE?xQ8wLnJqlo7M@@W$JxU6 z^5@#Zc6;phx3YzY*}`pY;RsuJuq|w_AA5OXY+<{8yFGnu;jXr@z5L^CVY|FN|Bkls zP+QpUKlbt$*upp1!gl-YVY@wU?f?G$-@pI+_kaI>-@ln%V1DpU2%MMyDWna#>agDe zUp|kj@l{88DqZC@#qKEA;K5NNwWu<0g*&RIsHW0i6XmP+L{)lgoiTAy?%1K8O250h zq|oIi0iUOWa9vUEN|(3TQ&}1{Y*aL=yFd{RH@4q zRi7}zIU;^&xu>$GerRcB4Uu6ftjQb6HO?WRNR)qZmD?)#E2)|;K(V{1##Z7=x8Fnl z$a2J82X#~Et8^k>m4)TQ%3y+rNV%Qv*utvXm|?D}DtP$H=P!5Gx?O&6H4zG;VVAek z=dZ4D`Ds*zx7JOm!t!#j%jvH!BxcbVmelWZ34Wo_MJ#cuQO&4&4>79Hl3`7yr_$s1 z6qb7$+{H4wu)Ne;ROn-w6N8-qqa}Zjmssj9tbh{x{KduY5)x15 zjnHIvOX}O>rO`6d>8vR7`3wC-GmDr65R`aIsbpeNji=mCoDU~#Bo|cCf{=@SPIq;6 zxyR?HlCC;eSz$HU;;whOtNb2srL)S<3QB5DXl+R?WJRIImpiKpJxmtsmyl%20vatv zc7X+zen{j3Y|Gt9l2}qYPI|mR5%4@NCqam`4+iUEpWj^pR(sJ-f}c}?xXuM;F-A#U zF}I9Y8Ol02xFkhYwVPm09Ix2vtzvPNH5Kk^kK!lI8hH+hsUv0JfZOm#6dAER(6~w$cZ*?)P3JM)%5@ae_^-?f~a%-CN7|JC+ zOVUxg)b00H`H9n1yM+-{BOnQewWbXc8lcNZn|W2;rp7oki5!CF<=GkUQyaoW+IyLK;&=M0_<> zRo-g9jIb!FvMZrwDkK%)lUl0_D~r7q&Js^K>xjH|#a_E&Z(zmF36nF^Cos6uVpFn) zW~JuQP&#%Xqzf#a?)Lc#OWia&r^e+X;gXv2%o@MTTfw69Dt&<&nG8z^uR4@}Va?>WIWz#?gv8C3XPCDRHUWTk{ughIrQ|+EWQmRsE*kVWn zD5kL!s!3Uh=X(5$X+%oKEDH=d#Kz2twx}6-X&DpJL_EpO?{#_0)6<4d@K*XsohWv2 z&P0#9yf~m98kwCw!BI1PrMIr!U0iw{0lQ9ulfT+qZnu|32U5pa7DZ{X zKDWQ7%A!TYspVvmRx8{j&T0USu>s_%EVlF|vS>4E+||st(qJe^w@GGZrDZ5R)1-1T z4wt9JRuab@nw}aUvNU77U}R03o-s7N*j?!t4m>{H+NdU>_|OSuUSf=@PSpcK6Y_@U zWm#fU^JGTSk$Ds;VxbGl(I_I9_S|YzDvVqn3qF)FG}k-coddWJO((;p#p3|>N`Hz= zCd;ZO=vTVz+J~kTS9tuSQ7bwo6xR6MM8XXg46k z>knW89kG>^Dtyy-!EW3A&8Fk|PDVB^R zFk(C0eDi9EJaNH@>hPVT$}Dko*lb3b(Pq^76DN$!jy2~$GOw7M|6$HDPki*e*@67m z@ycZ)akKgS1v6^@d1G`(Gs+m&!I%lZ_vjtX=>6v}n6vj^{)njm-kfC&?C{a$H!#zE z!A8H1#&FDZ*5!{bUo#_!%r!@)dCt-K98o&UoU`AIK5_neBeT=pA6+xwG>2Uy(ZrsU zVCBgZ9mR_7m4GBBGBY*hKBfPUjzI#W#B!ksZzNDB_M9f_B?;SiUGT<^>_& zF_5%bidE}3hdJ7xvy_)wPzEW_Df$D0A3$#0D&L)1fWZ&n~U_MLvFUpK1j`ywE+l<8D zK9@h*Pp*`P>&GWZ9iF&MJnI5R68Gq6F5G|W{7Y|`pFCjp-hcA^pUm@SNAnXi&OB+J z7XPgVyI8#+z$?WVx*hj20PfGhUhH)D7-UhCj`0xsCW6K}3GSFNsn%&a4|WR^PWS2@~$ zV}$&E?0W~m{xX0Z#VWsr%2}@mtd&!MWev&4(Fo>WG~Lni8;)~Jm9>VXnrcKtd@D8n z_F(;dW8Z(Lm2OVC23@ItsA9$5G!bCqkNufuA7~V*hcbX zi2a_9aFC4&b<-?(7RAY;;LpL_QCeFXm!X^M%;!mm)x41tedN%;H99xKb(O%?g3#YI zeH8`HqU1&N#IB97{tntq<9fcQ8L3XpvyB@4rmp|Nj4GW<3uejSL9nuGqw+r6LI7zg z@IF%DTBA!N^Ka9+J(lP{i&9ylza^g1!c06Lpuk@^NC_G{_y357YEkrorkhEmO|&TZ zHbA9qG`TKI8AvbTXk#X35hpepXA5u#xqI?$CRRf_nXVsXOSr_h{ zosr{@86h^w*$!!XPGNd^TH45BG8M1(E(W?bJ15$imFsN01>sCj^EsWhh2=GFXI8c| zBQtk0S!Zihb*wWVcj$5BHoctcoe-avJ(Z}_%Dt7P;dp@!Wy@08S?z}Pr&i_ld0>yq z>GPCU+7_oyzvjf9Fn>Mnh-IZ^(;a#_H+PCzxie;X?8vMbc5}fQ2V2L!7`(>fmBz&5 zbvRx}Xij!(fTXHgoaplxj~)$oBgB4mA~$|e(vWaTlXU8aGfgN!PUN?YMvo>Xal)Fz z>8UL7CWR+iwpL)%8unOyxIgW!bNRHU3g$-)rjO5d+O|}jG04fun&7nUz&L$Xu!R`Y z2+x%$-=Fwu-cuLHMK4$ z)>$DeY@&oQ%-q;G*zl&eIuP@kN^lN$F?vzcewPVuM?^+Bou!pEPFH<>%t)uR(pz0o zDDN_)XORWx2zqOYr-j6|(nX!h0^JEa34t4df_oF`Xt73V&h*Nv8h<*oLi1Ntm3YeC zR@c7HvXZ-XOjG5Tv7U;ma$cZ->imIrsi3{h&hZbgb9rkBnGdDaJa9j!u)4Z%ap0OB zLGK(uMQgsYYER`tr{C)=@%Xih!YX2R4Q=_?-I2Xc_fqNgmsNY~oPjGmBZ0TEm^e!t zOCw0+#5kER#5y(DJFBjxAg88HblUdBG`n`P(16ii zQk;=++qks4klhF_tn{ZBO)H8?OB2n>HVp7yjQ4*{^^$P`O^L5|R~8dIxrV^^9Y_`= z&xy9}$p1GE80WmsoeIV4wbE*DO%z+(J|e!(BeeBw0d`+if3)7k!L%b{0(ZIbq{A+T4!0tk z_W(F8u-x-O1*72b0eF-Z%{TxPx`@=Y@p+T3a~BRx0LLluRMSpT8C2t~Ga#5yUcX7C zrNu@&bDUMx-m1b9vZ< z+@%t4wz6BgPOKCsy8%I_PSqqw;-YXArSaXn>x_nF#no`k0_`D<$XQ*By(io^CKcqV z9O10Nd)mtVarIzFVjT@6p|HQAu-@5dP;PoSZtPpE^TMIcSwzo(G`=0KsIuLDwD!}# z-k-*!$7Dm7T26{tYrmbT!Fdm|R)9O^ZkL-ZZAf9u%Y53eH(o6zmyCp&aDP3!arG$} zky>P#Syl;6OxqKj_LdW8IknVOtKk#4COw2s*WI{~2src&ca^&f*<3=J5j&jpmzHxh z&XRI3o^MDmhN+AboWxyEN=qh=G0|yiQ?MDNE;7`)lsd-Q=eSC5BpPf=&cx}?iP>ps z&b*A&wCriKh~trNA=R0kmXnr?!w&R2uvBByir93RH;~zUv@9pen_EOb!~1+MV;T(Gpl;<>A{)aXGJktkNkf&cH2)b1kShdcy7H<8R*mxm#<;7ofy*Y zENAy(;w-@tbR9sNYn`XqU#8rZByIu&7A%S@3;nEFsp~zQ?8U_@`vgs{waF^G+FjzV zhLZ&v?Y^DmSP$hs?B28zpWD4qwtLxHYzy0%IH-{Z(o_6ir$`{BB^mnMzv>p;D{@9! zRy@|7Dmh!AvsEzF7budnv-C_nw&|=Yukrn+p%C_pMmP(Li>niU&vuHsQ(!fk-6WTD zzyJUfXn*I>g*%W(gipqcg=*_0} z?#fyZSsqx=s_}^yo;pLP@|3{*%NIBr=A;#c3*B@O@RSg5p>3!!I7yAxQnEoRHPU2d zHnk}ij}uAdaPjZmNVIR|*#`H3^U~kG%E-xRd~Pvd55^l%z@3jc*!3W5XF5_A|BB7( zVVmph7_seuth$OitpvCFe#Z_`lN;3kFIOoe?W+`=YcO+bsjWWsG^uS3`|It%Q%{CY z=%~raPsaNM+BzGT=eqS~=}6R*IZadx>FA4yQ(S-k>qN9-#Adu^zhPkC;TG+SjGc9^ za&M_tLK+Nle>~oeGqqUKi-Y&m{gSM5IQIHmXJ%@riM^A(5hn~MHq(a`a6;ykL)rDW zV(ChIqgE_REpxHwCzhGJD!rFpJ*R+Vl4x$z96*a7^NDFB)Fr}C|p-@WV9^hRPp z>udj)s1R2!*NVK}-?AAMlK^{2!gVbZZ?Xg-*ulz5gIzj}?iM*=UaOJ9uu{0MhjHWX z$G&Nad%FBy3)_+YH3x5EuBeV10S@wNXgJPl*z*zW5t2mc1=*xjU7G{V=b*p7W(nxs z)A*i9)3p%i9I26IU1Fn~DoFq|+y(HJp{GCvr^d7W(g6D(*6x|F|HxdyIU&!Pm*ph2 z+QeL#79${b)-`H;qcy6Bo_A08qz%UvYMMrRY~Nzi?u(su9)FpWKAHmSd2z(J(NIBEG)p{R~>sO0K?-NZ%d`-!OoQR-py|xEDCerK5CrPwt7}u zkJP=W#^YK@Iu?%~*GFu3_J6hUFcN0Dr0U2TEY|tk_YFz{?i;vjs-a_EOsc7(h;$Yu zWMSimXJks`JsCO80fq-ITJY@5IRMqq4O zt!)DjA8v7G5%(mGu~9?SN~+y%Cw(-k@u^<8M?$6}_~;ox`jgFuH>h7a;B!_M{C1VzAJilqb!&O_vh8fcG=+jsD ze20@i-$9#Fz#Au)g7}nv8|$%&Mjzc|-_jH_wkc*@lPkrhn8TZ5j%bQGvMFXlQ_NAk zh63M?jZRCWbwe6jj_m}&^}8~<$%nTmetoB}90$3~@}@V)%hO__i`{${n3h#up;db; z_&kmz72Raqh+o;e$F`J~mB70g)r;f|;dk$BvaTBrTFIS&>i>tg^MKQ;#{T|8?@dL) zIyMv$oXX6oATSI%bSaAUahSpkOmixzAc_@r#oh&VRqVYt?5@49t_>9x8@eL6D(ZWa z{La0(zvt$eXW0F}em*Ms-jF9Z$xTj9&N+#zgDRaP6+Ll|D2g*;i_9-4%wf@6q@2>q z=BVRce~Xr;dzFqmb0D)iL{6$zh5zTLPwvS)*<=$ByOxGx8%+V<#gsFQv1mU}mkYYj7UUtDLqMZ5-1PcCyx{SVVFy^_F`=ueXzH zj2ffxoAYaJG>c}rPQK??=Ow6+&bey3q{*Emw_1`l} zD{9_$xY8jy_Okn1M;#->Q&NJE9NONeq`hbev=@#nMk(Z21k|S|i$F?En4uh-ebtOQ zvha;S;?0f4-aC40Lb*4FV)4=Sa~fJX3Xdn)|EYt?xIdsPOXKC9gccIMND~Hgln7;* z7^}*SZvc&?25psw$&xKDTeQ% z7W?W{^}kcibdIT9PaSb(P1_KSBfnH}aSba6jck_Tu-wyIU)hgMk9%@|b8&rTaZRK1 z7%j;mRm5>-(qqv`Thox)ZsI{^b%RqK%d1^m)yE0?)m9{n@G6(9fjKj&J1&TIW>Ol{(F;?q6eQmi5m9oytB9F`epF`C0Y zYiU(7+E3e!tBCQ9#dC~eqI$Lx)07nIeVp}XOd|dcyahbjtIFHYSZ6qi%GjvB3g`0Y zemmHTne=1kFY7Ihw+byN6|45tMG0+{<^8>?$~hHn-YaHicyC`?R$kmx)fmX!WrY#j z4;@p$`?Skz>&j{pZLTAQD}A~c^&l5!@apj-Zzrr2TiRl7cs3hvr*Ov9=AFJsRa0;R zXt@E^)mBxOEKriXHz_Ao`ew!1WVrRJ=9E>}H7>9Wze#%YX2KwJh*y3|ows@^LrV@# z5K=g+!R%Clc)wUxT;eTRP4nBJ0!j7!+n6mR3~bw8!tt=}jhCm_Q8hftcreuyLVYwE z)led<880#4K*!s0>ISH-cX$-Ear2O%T1vg%&H4~KFFqC?a#O3ksZgI_PxCU(NQYL( zHfeNh<$dYUk5pk~uy|Z8W!h@0l~XpdHFl_?o1)iryAx%pB$?PWb!K`zo@mOV4J-@2 zZ_jp=D~dcy)?c{SGF~eUk5A8u$2@6TIk$zDa1~J|R$gCR5-+WsqfQW_x;gnQnPic7 z?!+ufD3uLw*sRZ+n;PnBQWYcf{2n(4-a31O*OmG_#+!%LOEtJ3!7|-jC@HoX6cb^0 zGl#EPPGSg{%?_NI7}gOcU`jI#FDh#iZHU^nv=nAmHG1E?@&$}7vX87{yvuf5se~5} zGZjQRGEuk|uUoRxr)FxCKXo|NRA+v;&8D^@9Xk%M9b5DyeHEEGg`yo2ciRP-YMF(- zUMX&jTSv%?LQ447%+%mA>W5i$P5RYl!Z#*6&9&ZIt383r>RGbS(e6GO8KE*Qd!qeA zTBhlZS>7yHRP7D08QKEed!4XTh}Fcc8zwllz~wkCG$Y$sI$6gL=`PO?GlAO&58CyF zRWoL9Ci?THSk!#1_rW7KOJZx2U=otp;#MHi)Z9iwMu0Ap9OJOjQ09G)%2U~^Tk<0* zZy_pC8xjf0+NPfLt#efP&Io^LOVeSd(7b$vW-JXt$H~ea?w15J)Z+c4^c2YsHBxZ& zG@nk?hc#B6?>7W{_1ZcWEi@rWSG0UEyhNroE2igWjjyn$XO`R3Grh1dbjmMZrpn{( zD@*lE?e%b}I<1J+H8oV2L;XaJwye;`>cmJC8R>e#hO<=oBq8YTKrF*)oAS;mQ|DLa zTv0ZpFoH;aA`sXIxy1rG;LFI+TU>7#jh;5HXyU~9^a({%rxuR2cRps6d5zFe>@}%g zteh&|rWAfV+xI{x>tOF^YRcv}PBZ$mX=TmIFsiDoCZtx3T8~1Gvc}H0ZHE?+NO{^< za*+-M5q{uSzW9b0i3gKR8@+L%4$SPDm%3*H%St6Y+Tx+%;7@a|GrPb)zQq4~p$R3! z50V_KR=x=pwM`A4)YqV9##l9U%%+fpZ`$_bPdw60HX_UbYw;wBGX0r3bvg|dwe^iK z65K3DXm9hNr1{_k-=oo5iZ*WVrcKYbvzX-c^v^G& zz3VfSb6aCwZNzZ*j{tFmpG+6snAE+-mTU9}XW6%et#byAOjWy(;|nestuE4fhRThY zV~k4E5x6G^b22x{0+JOnadoO;V&0JQcHZM^>syNJOZ~_<9?eN*=FAtXsQk8mX?_rj zwoanCmg=dvu1-y()n<#C-MZXgq+OBCS7kI|S!y#nZHD)$+j}TP*-`cvmj1%hF1H?@ zB}*CU7MJQcR<<{Tnw7jK`p`fINaBo_(dq$}+d#)SnCLTPeR`nwx2hp4OU2J9SSi{T zu;ah73iCEm)w8wmn$*m$F*Y1?Ris6*n&RYveQ2)c32!|!2UqcUWvvp`WNwK%ZRYvM<6_&kOdy=>2l$Fd=Vqjslk|f)p%u~0El!mXeN!(31+|VNRqPF9z z9mc@2 z49U>TVRdo+yfTM@oo`2$4aySp6IuwG^|0)uGH-3ObwK_ z*lW9nln#BJ!C9hY^weFpjgTG-`b+C;)#V*9pmn zRY~_U8J1gIVRdq)Svr(vz8jr7X)QLpKab3#AUCevj_ihmeO#cWscWon&4k-G&WaoP zO4+$36P?IgB_0>Qarw3q|8fS-n=)~ykNTuhGq(%!w3cZqY+Zr_Oo9L`6J;!UM9nDbcro5I)rN*+I8e)yd8HWv)H3GA>L@Ptn1-V(VaF82Pp=2w?d7|G;q~0() z(U!@dMxu52S;p41EOSoH>{M0^Ymed$jAF~~$!wpj(fz*&;~}c{B0c^~%8E*3TICa{ zI?RYL?#a~=?#cd)%kCu6_8F;JbQwRsboX|zZen4TdwMs&)QT~t^XQ0zWkuY#5$HlA zMqS&@1_F(;FGyMHF1II@@~2bobl$X7Tc;Ji{$l8Fwl~WqI!mpqwllQV(!l_2td2L7 zm85LLS>@Ys*6Hh6+N`c=d+d{x)KZCIm~8Vh$Kg#Q&pRC2$@ZM4Q|Zu&cEp3k^AZzO zA>|+$!5>Ga;%T0%Tsfyjhdni6m(*u~_zj-$6@4mVAND3w!uYz!M0rx}jP&dIu?hB% z-1S@95Byd2E4jI;JKmPH7O*R-&+VX^;ZqW6+)yYzS0ng86Vhq7A!28?GPh0C)C7tk zKZK>%XH}|}d&1#!@P8NWBSS^|FxD3m>I3f9HQKi|(pyAZ>F2?O+W3bCCUg$t%X3Y4%V7tBYHK5&3CQOJ>1{YYsqDtd|#hcR5jicRSSdQ;bZHj%up)Q z&=H2-`pH3B8z)K2ZqX^=2QgEO@oaov*@FLaWGE|G2|%o^?Y+IwffJ{U89gzsw3zXt zc%o5EGM$|jnaZ0-lpZ3WIiIY*{N$%W=D||Vw4WT?A0s_4yRoe zYe?*QSwIzTJ zN3s@;HrFlocS7<1MQ{dfwi8F(z)3n3L0P#KF)r}t(NQSXZm*32HoO%u@imisK-pG~ z_9dVWb4fdbg;$l)x@Tgc_((04u=fZ}TFQ{npRjZ&`cm`1^3AjP)F&=%B+zJz49Vu< zg)sWe*NT2$qNCq$Zk3FzDq|tykUR2GXiHxi<@=PKAE5wlOs+}D5RY(wSn0?JwDnQ? zh56<6sRaBN?S4jn;3TU;y~VuEW!(DW!U0c=lO#^7WXsIHFM-obDvm$C$!1n=%p7;O zdgDM!THAyZXYYH}E~{0g!4TIcRjnU_Dp%c>;<`HRt))ZVl-gTR8armknIS({#lm31 zeE{+$l~}=4LhqGaWC`?d62@8mSd@X5C1bSBlD`Cgu5ArGX!&fV=+h>Sn^oeA;yPUm z-@+Zsj~^H>ud6kdCJiOkb>Yvxx-#-BFPuC*9yKG(P~mJnQG`qeRKMoMr;mxlVKn5Y znRumxu8CML>l3Ar9xAyi*=fh=@XC!aQA^1T)#+@DC9W+hw?HjvjC_^2(w2CgA)UY+ z3E{LEFQtS3HyX2q(lXv>rXDdfB@L6_VdB}0JF4+LnSZLJw^2SwRw*H=i+9kMd$kgv#4<)j}Xf@eQE|@ZT`iyC#izXM2 zjTRVShk4-SnP~+>hGb-?Bj)D~A38icZRnh| zq2*JH3cUYnm)4=`_(6}Mp~^F*W{$7)9BrGlCEs-Ct2I{#o%Un=#`_neh<=V^z!QPJ0ou^hz7h{MaMGa4K&>g`S9oS@WF#|9glQnx2t%2&6f zTe?a2pi8&(L7|TD?I6`!Rp;&9MdH!2m{;e``y`zt~Y8tz>&;$T(Ay;jgF)|R$f_FRT>xRGs?m}bY{|Ks~FL0 zCO7g6hlVUKuWD+jh@R1=PmVU^48qb^nd6q+gp>aiR<**Io}Rosjb$~#RXnaAi`6zY zR@bU|yLe96ILWf8Om<2crP&I!T3X#2smN*j8A+Be%LeWvxhdT|VR?~gXWH;-3LUv% z8yIByLnyM%MOb%(~h2^I}THl4)kmQkrN+`l=^m=ZUFK?IVphd}ay! zncH^C=RP56Wml2pI?2RctSkOcl5v?zM2O8@pR;o90|V(oEf4#1hgThJTg81c zSPA}GJ-b00&NYZZSQH(1Ae&FLTU$y+QMET!QPdu3?X6aAilS=oEx(#kyLKs6TD50w zNfD!{*whNKXGDyINPg)b-*=ZA@9w>O_r`sfyAppjwb;9;ol6t9Aj`_uvcuGFmpEQH zwfDuIrd915#&4>9ou*R)a?{m)Rt-#3-}C0mUw`6{oy^mX_q3QnRo&6bwK6rap7=EW zqA$YHu4hB#d{bZ!a%>l?VG}J9*f`%bv)lJd!je_ILhzdvQ$~rrmNp^%@YTJ@JhwpZ zJ!7708mnPHo(V6X!biVttgljaH`8G)Y{EyECbK5XXLk!!0wHf-NYAm&(p6XN;uxsX z)Iat{9e)Rgv!_1-SxA)vUncnk=$i*`TShzItZ>SZ6zU$Ray!cT^U^J+Rrj8xw_bgW z@7cruoI^Z@Z_G}Oy?H!j?>D(2hr-+O82O#gNIW;nasR&RW_xXem(KmsNn*l@L9e;i zZw+A35TVkn0nU(If#ntU&)ub0N&G|CT;ujrQ@qcNRy6%9^!@UiC)^4vU*#@T{2D@L z@@_<4x#4$0^WboL9n|{N7xDu0@$DK%>0>PfYlh0q2p|2hGNVa_c6o0};9FP8Rj8+M zT+V2qSqxRWQnjk8laFuE%r=dd=Gr^xpF>i{Hc2pnfM6C}%-A{u2pIV^5ZhOG;jTJ+ zpTm6J(jIv}wR~(~uj=wQEYv8{@RdQ%ysC&}+?;v-Djvtm% zP>=NyrcR5Jhm75_=eph}17~@{Akq8kK@=E}^i|hnUb6*_`&VpDvfl;0*Kp9GpBrqf ztCQ5vPv8nP&Yjj}j8Bek5;po63OWw6wBhf&;r{n}3~wtyW#YE=CPOgNJgAvY;%DC% zO(WYtLp!mT^Ra&h07?fETSH9c_Fi-ofm~(bYHxqVbn9BY2;Chf_S0z5D~{9rY&_DK zihX#mj_<W$Zck)V{?}*)H)SF+g?S?;jozytBl)o~A3UiG7G8KC%SWBDRRp zMbAHaT~;Ofsp5pb$e^&2zLz(1mW9cj%Z{g0kJCDCD5rQ``EtLBuPHe*MpY>BXP{O- zdJ|F*>$=-W@9=ti@?k>#vF7&3kDRfTe$-EsZ}qal?8fH0zQ<>gyTo#5smY3<&-X+n z%1@HMl-X9KZ^w<_GcKWZRul|Nl^LAK-PB)S1w6FO$jlCP(DDD!G(VMI&2Qe4BABNn z#_w5nc<;Nj+xOX3&ora?=C(@xZc$02yWCFTs&o2;-JQx6@; zI2q$0zbyIQTqz_BTHWQVQDpN?E6nXpmxT&C>csP-$_}3-o!^Rr50s63$$dw4%X`Pd z_hDk(6ISjH6G_l<&jaa4cpEK;^kG>o^KT)l%;&>LiVA36HGPrC5c4>DfZ#v?hxWT8 zRMX{5dXh-p6n;vq*=AhfPCX^k*XzlHFPbWmIV$CPvnkKt)Ur|;&LX89WZS+oU{I2h z@*7@L3l){uJ0DXj$;}yzw}R43IXw%FE6zUHOnu;^|05toHbBSOol(oQTz+J3jaiu=s_FWuyJ3l`HurKPwQIeDK-pnb)<9{#N21f*+7v(Yp!Rdthou5kRA(UU z6VLK@IVFBE)n6XRXPY>GA7XkH{Y-e##?-*=Yfs!0x{k}fweLG-UN7=^`RXmJpf8)C zUpbou4xy%3(>^^?j%~L06%t3La@M`{s>qS{ENNr$xnC%`YxXr;#krA~+V#9cG$@Vs zTxszJGrjMNmq#WtB^#n~!|qAXgzH2nJI~Z^bxG99T4`C|9Wh#=d#%uP*GoC)gHn-F zRih7mliYxESR-^PT4}YEyV~43lSs{4YGzU=fUpmr(RNgJiE@C}%Rzx_(?DcJ zoBn9@0dkloI+7PhnIbXt7nK^4wMG8_!w~C;rf%8x?M6qhkOkfdz8evy{Q2M73KJ@} z02wc$DnTh!BPy|NdupGIUIC2pSrk=&pIbQFw7#HMy8&ilTEw>ULa%DpW_^--ZPEJT z@$LO+=Jc@8pAVYOx3k8+&sDFEufA$}_ni&zqvwL!D0Ar2@$qcnpP|CKq#{hp0lF{v zYh*e{qxr87;#s&QknBCb#Pxb zS6jYy2Tc8#IJclq*%izF{x;hrzKCfJV$Q7IzK?L=#B&&2JmLh-u3zG}1$^5;D>Y_(pT zFLHM5O~l8~>@3|dSPwU-QrEN-_CQ%NS?$)#3<~(m|92k^rF4~UOTObb^~GKGv5uAb z&$!3B3m74XZ87w>54*bwj4CWTT|HeXE#E*9rcX+aQ01}pX-iaqh2Ile4!x0bQ_S4_ z*6#F^8==$KwWYV7KMr33$Gp^TI@MIvR92Zm%L&ncqCtW41pRiDV`6+PyPgT%U)4$1sCI`Y+pDlhT*;KqfUK31D zxT~g5<+m}N^z>ex552lzOsGN-Ce|+QNJocF%%%}-V>)YK^f|DpH0ZS*;rOR;Sh?2t z%Y3~XcMHY3!u`JVy}9mDKx1oFK+wA;to*wU+yTVYpOswwZnAoweJMF8TqT-@G&H$i z66f(U5n%O4_{QmFxsQay_~7sIbS*w#ylLPC1(lap`a_#nm~FN)w=-*pAN*=0-S z9uj}Y8*1QY63uu0?t96nz7cXo@zS68N>2Q-V$}@!_JL#;<=uS-cUhlylKY8QRXH*(1q6##{_{iCmL7obLeF6TLr5A6HRQ)J*^ z2QEszt{$MLMa|+p{5*?0Zbm2&7(+?MHZ;mZVdX=JQC?l^+GyU}yTyqF_ z)9$vIy>vIyDs8dZtmG|eEUVQ$LBzJ|`fzE;+IEFZLw#kCZ@i7gh@}GHAlPL0^9PQV zDQ<4IZ>@I{MW;^K?Qcr#!&-+G)#vldbY&vz=x3h1w(RAANWOZtYy4;asGN>oh}vwJ z`TMsye~Fu*oQ#er!-4eNNij>2-rwKGA4G7|Zx$Mdfqjey(zBHc2+I)QgT*K2C1Zjn zqC@?5z9w#X+B(*LEm2)2}U7X>dQ_EtZ-b@xC!T-n3?PO@n3DerAr!ww0o zT>iGIg^Th_v{|sGNfngPCuOP4)zuGA5jJqhv5*(mxoD|)WDs|(yFklmvP;=Eq1Kl4 z*r+w9pPBHo@(pjhGskEZOP*FytKr+^PLXex7<&WJ!pmI6@=S4i6UX%=O_(^7gpGUV zHBP@Z+WP6~g7K*a2Lm;T<|8h{tkaa#OY7+K@0ne$ChiG_jzIuBmpp&5u~(f(}8z%qb%fjADUGM9#;ta4pQ~(6OrhD_b!~KfOMWt z`4`iwJ4f*3T^Sbt-a*xQ_2rcD=Ofk6Oi)a_l?cYxqGk7CaD!#}Q zO~KD&E_v_h`wf9xQ_ULv&{6t(W9bQqH7AHP2i>%vk zcI~FubibER51*f-ipt*^?0y{n`EUOD+;`bAm+4qZmz~40l&IVvC#UEGYC(lZJ!e`j zy1JUG;bQXwXtXh+srz}1QeX~x$d$_7iAiNjTr)hP^9q}EQQl7Z?_kbUgq7NY9%CxJ zU5oaLNb`r9$MMn{M=?=@;}8MvfWtN8g*378>#W)<&m3G>8#?MTHNP~wmY+WNt(x7f z5dYnBde%fO)F37mYE-jM_JzM#J5feuCEsOsU|)*MywU>x(JQvcZggCxUqL6#(^@`-$~k%|eKdKK zG2CK_?`+8Uz|h$4ac3~N$tT`LdmG5es!+6@AZCO?xo8p7>oUHM^Ar~5&CQLJd0^ny zt|2z^KLt6EG)`5+FEYbQmCD*WOGw&AKWgFW^rly*Tz4P&M`yQyhdv*DNea!gHotn` zi+7FvVe;0pZFTwQv8g!49uSxAD31$r9ra1ZkuN}1ORl$;Uw53N?1AZ1h3estES%ZH zb`@=ym#tpqptX3bGR0^oUxVb3y7Btd$vu8%Ya+{>(@0?JsQ5MV-LiXb3G+P@%wO~6 z6OB~6Z`5$VI=44-bg>HEoG(m~=-<^)*bxvlOycxWc6W$rZq|~_M9l7qXE!Yt6xdZs z8#E(gJV5@ocR9*c=^Z5={OGcqVo6s1xF)T@K6vxwk|%Nemj=hpB2HUDrw*<`uHw#} zPIGHrZ+}!mxt9jtK%&h!!2S`R4qwxtTLg+z>%(S6*^MDrF*=LINXgLtSZ?FTH|16H zG#)#v^mm)Rsi^tLZpU-Xd-HpIh-dPVaO}0)qTg3RC8JIqDy0XeOiWh5^{qrA)mZJ9 zt5R;fOlJ`f7FGTh8QXGP+vJj~jBO4-d<31PQ%K0$h?}{K2M+6)2OSP~|GpXH4f476 zeE~x8zD`3d^LC`@@5@-nem*IWTnj^MKt*$8U(@u-+!YBJeQ3oY#62n?W0>mf?t-T#Id`J&bwqv*3Sh;sYqO#F3vx#1>H&g8H!=I&`a)O8zi_26RdrklaSqq^Z$%Ov&P@aEV+U#fb*pRC1VzKu3D z;8epGH-mw-(g%i|_CpWxnPyIMcS0m(;f)JvU#mFh0e@swumX@|oO^>kX2%6}tnY}o4{AkY!u<8ql}WqDI->W54zU-h1|?j++TGLb1f zSg3F3d_h{3wo>qBe?%*H543XHe`1AL*hh^4_0W*Y&gW z?rUZ*xsSA`_K){k!d=XTPC5Q|i9H#oI>l=3O^!uTV#Cq4mnJ`SBVNhpT1L&;HEp~c zx)_`+IgMU@%33}uVBKLMIoT&9&-8WBo4s;lVVk zuhmo@s;GRoTvH~fgB))~J0#th zRrE320UEv=8TBGPFHa|L^g(OIT;hKpjWpyFryt-0-iBNU1TpWf?rEg|{q-G`g81;H zhgw4c(}p@ny+hBJnQpdZIn`-hivLtPdBuC@>nX3*`wppgP3sfh35Cc_X|AdeWtKh? zbl@YV<{s;(~kk>WCQoD&|&Y8XqAZiLzx9Vf2}RA#79GK-HVvyRVLqP3q~ z-enp3itLqax&7oKii1k?Gcl6x$m!x#AB3}xq%23rO+T|@KYv4&@^iBLx$+(D`oU%& zr;J>-v&Y76>tl4U#hI{NEgI1ZA_X|iSEJe+2BJrPkPb7e-duxey`?9HWhz>%1{yMs zKQy^)Oy?dbSm%vq@QNkG=vqVtbFxIKe~#rXN71QiCEuQ2QrW6~;jZ!}8;w$CB(O~_uq@JRIJPAf8ebSvS=-<{_!DOs59)?rkUR80d>e{>Beq7;%#EK(r^5n zO=B4pTG?0DKpkeGB()iBT+gQcYz87WB4()TBNPP}6vy4F$Gu~|%{;1|QXo1q|0pq! zeB8sf8=Mx)(-q>`y!O-Tk_C;dx7Ux&b@;|R zu)j`sYW~sEKWVLMBMz{89>*b!FE^|*sV4niyAe?a=mD;wq;<7(ArB3`Ml-(NUJSXG z3{`%C^m!=MT%79=X8u*F*5f7ZT&fbwL**=eT0=8sHv?SXn50M4AJ*$-(Q}mfkdu{W zhA%q_+A2{mcmF(j=cMha`JX| z!p`2mY>^xq9^0)nP8Mr$GkCo1$Y##eB04}F`(VG62`e&&S(C4-d}?j;D9_f~(P_u{ ziJ~uEWWBO~Zd(+1D{}A0rzR8IRoiWb6e+e+VeKBLKRyb|%tQXx0^iu)DcGxh@0>BQ z+^!SXD(`MADQ~Rn0D9OX=o$DtemTRF<}|+A9>G5jFgq;GR07YZpq?AtLmCW}K0!(^ z=`>B!S z9akhtpRIsTa94-DhITKe3;w_M+LgE5X^Q)sv5kh7REOW0fY&wuB#m@i(O zGC=Iwh2Be8G|cHb@t=b|#2H-Jn6Z!kJXr?%YvRsp0lpPi5e7|Te)ildtUG0IBXWGw z^Hnve;w7V*GhD>Hxh1Qf&zJH`O(%7sRgPJL?+dcC9O^F@HB!OQT!L zTl|~vt=w6d`6A=7V$gj3$DCwPy}h}$*>mxtn;EH7lDmINVD;~V16i`K@a0>nd4hTd zRo18J1P%E&qXh-W3qzMU^84J6z za?#(zxlt@qH#m^=R4yL!DgDVu^?H9{sS4M2`X>`-_KP`K zZGGMh@ACU!53Y^5>vqE-LR!A`nh+$r#hk5jV*rHP{1q7)K5?2aGe2J|nR_uF=OnRh z-1jxH!*2U;)IHVHszXvhziz_MJY@4?fI_>U^)!%SUeSqYLUJo2inj$KC*~NBcjSK$ z{pWnKinlw(o{Ib3Iw9i)0v>n#21i^gK>i&GSz5^oc&z*>t{RS=+OOKA5Z)eLsXA?= z%5ukgOw*mayqLJ<{&M>`-RQ?%Ysp3}gR8WC4$nz;; z%CjS`&5g0RjRmmwH(K671`*$dW|>@ClTn zf4U?b~sYI0_KU zvdJ`qxLTv5fVoM*V2~T~uRPig#P0lu6r?yDVZ$U30w6AC5mo1(|J!VzMWoy~5fP0i#2{$ZW!QIe&Vs{p z7^onnu27_L36^;z2} zSQxo^xxZ6?26r(h5_QtdxNlr5370IoJB+vK0 z!n3W@1krOyV)4>sXFOk2QV;Kw!M&%pSzD%K3HunO?|oQCt@x+QSsJH90h;Wh@jc{b zA!ty5=DJp?ZT6OVscklveOWrXyEbKmGNWdsgFZ*i$OT13Ny!8yM2UDEuCfwtP}r_5 zC$JLUkWW}&E|tZ(P)Ec@6>cv(%iv_FBdViBd=IfKgliPAfi97NLv2=q7zM1mtH$rJ zf;B8A%64}d9C*0PO1MP<8|(7adi^fe7>lot(zS3}qU);obrCn%+G{{`r;dn=LT)by z%HcYxBVbXWJJB-*-hI+NCw{fmWl89L%6QoB4Vz-T zZPtOx_RUw{8Xx= zAu7=O@U3RGa%EmrVBjGnVn)6Wc~5^YuqRY5h@AqxyL`zKMoEDj?`rlrBvKbhd)(7! zX^y4wI($zJt%~AL2KO`v9J^vmu#23`ixG41YaujQr z2n9Q8nG6;s?|^$sf$Z;^V3qIbvc{TaMLEj_B}dT&9$HZ#d=JAYkTYFpzK55rVbM`3 zIQnp>#$OpZklQzD=+YSSVnl|H!;c{#b2h|7yr^f>V~H zn(WgieRSr1SS9!4^v-GP_(Zw{&A&jKWj%j)Sx7eL>~Yse(`er6(Ecp~8AV8xbHKB8 zX;R^fbo+F(YSJwk_T_`8w0` zqoI&n&U(&9g$;EXR*{&)oDuddQR*y^pMm_S!@zLCB5xZp{Tb-ld(*)9YJ|%tiV&)_ z*KFheG6yjtf3Al^I`E$VQgg4K?Ux6A=}#4J%O(F#qszxD9t&Lh1|=VB0dG?k1g)+o~8C^lsaDZ=?EZ zp`8rru_1!}UmzCQ5UO@I(^Bvl{KYdZz-)N{+!kd!F5U(!m

ye1k2KVb2ffy>>us zd5;%mquwj3^AxOnqBv(s!wrR~o(=hv5n@YwQn*cjX;ZjOcu!R4X(GL4+XAo2u})fI zo|CvQ<@B-S;N$cqxf**JDf?gGQg{&lb>25macsY}aN|8xgJ&a{42hEoG(_%~M!j#4 zD)zZ8&!a=61ne0nsVSVE=2-Oz+HkH0o4FHSJP(d14@UMIXa6{E5+yb99dauqf=tU& zz@1PxQ15kx%;Ca&pK1xfGb}S8sA%JTf!17u z9+sRWj`OvYp6lv@8OtmEsa;Bg^=FM)SsLgM57bmV5fXGQJMPT+q&2KNOov5b1}z-_ zt4iAHXGqQs{z5bgJ5L`rg`B*DQ-Vgs^3)Ve#8~ zbP(Hg`N{TE2p`yAe6P#*ngclLE+9dxqvmOh{PesUu5|OkBUj~xoLYR>MM+O-BC}Md zms(igmM9(NY8}A$dJ`rzDYM6^*~<3!F_@Whx+0AH`LMFO%%B|?T5Lp7 zM^^YWsZ!T$OYsEa<4!Ez%Xj^|F=hLZs4|bvXQt$`i8hDFEktq7Wqr5+ zjcQhMeg-C;M4@<2ih|JQ(N##-+gUd^@W^j&xU7q`iR|9(56*mEBRd(^7LejoW0hO= z=+owf{d0rN8$vVQZ=K;L&yJ3_Rx;OZUtqutH#>E`uN0#l3zl+nSyPz#IsI4l-DQX# z!Tzh0cX<1MzK9-ZWIUM;5hIw2&+#ab4?h06Y0#X{&&DTn`(kF zO~|5{ZpycFF=3gY25a;1+z(x-@NY4H=PF7iFx>AtV*2KsAX-dWwr^0W1}p4;*3eb& z230$Ge1>tfG0OfwsuKynm45zGGe*$)b?A$6tG7~p`c7+Gx*d$!c0g&i1C?WDPOZ14 zCd#IRK%eyf3~sbP0er2cuTUCa-4Mx3cv6qD@zl#J5;-+VWARkHS^00n08yA9I zg-MX=>w}}{ThzC7^Lh$@{$;MbcU2}ouanB{w4*dQ{&VKsy*E`qTU>sPmzPx`wGqnJ z;m@6ZAb>y#nY=&Klb2e#G0^7xb3?8rEiiOREZ+IIjfs2qa69!(HccbOr-@XCYy&>A zv^R0p@7B2lh7f_rPzH4AloVQ@hgPDIF%JIeW(73l)oMrtySbh{ud`LU#uT>*hr;;1tvq`Xbd;^cXNJYO@cpWDNKlsl>Wz7HQ(VOL_{LVm+k z@;u8#tM_|y0TDMuF!~Q`>sVLZ7?=0UIZCMW$e*Fcoe`-1L`$!B5Z|5&jxWx4G)^}2 zvRW6|q*Ir%HIng(s2wvHVNdo6X`;#I-h6X?UOijx3Vo_I}eQV)Xf93frTVPk_NmUS3C-nRLurtye0gpx8R$UWZl&cHTglAMIVHPkBv zeNHfmdJKQ|vqeEszZNIV0GmcNTM&HJWw5fh2$BgR+YdjJeAJ0~Eco>fOU%4*gl6d$ zp;-o({JCfUl%~-#U~`K=AsbZHi*CdjsuR(ygh}977_vGU>3`@?4ZUL(&KPJO_PY74 zVvXg?WCb>0V~YaY(l*0od%GVEZjk}>2NeLbolt1YS7*T^y$(HD)~yz~mrrrQFm*p7 znuQ=jfu=T6XELqHdE*vWFoy3pB1)x^1k{NWtb|WCV}ut8adUstNYP7U`@R&?hzi6B z^^7gS-?o0RZgUfCzCc_QVOjV5dIVC&@1Lt=BY*0@90_M2n=Env^12mQkeOH_CK;(P zj5-a?lpO>W3?d;%jBd(7ZX%6kfb5UgO!K_}9MBIn!ZgQ)dt+azy$w2!>^nxCX&jj%xfSNwgHC z5sVE??kMnpu>*abLErZSwV|F$<0J&Ie<$DrCcP>WI}k;-Ih+MvH3zZshFA= z7v+4KvLSRqvHu!DLvuwXN+kAP!U&U+mUa6=P>)jzqi<$p*5AI^I?$ zXhm{t|EX`@RzOatuAf{!OxF+3ZnjXpDNBKt<7msjU?Kdu`r>jQLl6;yDHP05--cx; zZWdM&PH_*iDcKN<6l$Ajb-br4v8sx2Dqq|4YwMKV$@`-7sLF@!Cr;pekp|NqlZ;HV zB#0(tTPzUSn&%|jE@{XwVnfrt8TI3bj;~}+ab-RkzSlCjLlVVV*R9@ROc;>l;Szal zd(5oRoB$+E?tdL>4Qlt2v91NdMhr&&B>S)x`82(d5s@DJ+en^P3V~nFlw__4LV(T~ z>aq2F^>r$B8B@8z;Axb;MOala0rrCs|8-_oRG>erKVwcBLWUF z)DekMQgXOl>ZQQIclu%K?FVe1LCCJ%Cmv|nh~FA1g&Ryht{A_0@56{KNWhAOH6W!| z5t^3vB-HV&XAmHGNZ~7%=4Z=g=L4Cb+^E8}Wm6fPGBxpg6nJ-e@hmZ-hJuyA>P4&u z)gR3xPactno1F-CZh-+`fa8^EYiuutJ-~rCqoRCdEeIS!U}V76Li=^JGe((Zokc?W z2Z`YoQLKU>EDS8@`~Y&!On1R-3PUq{Nh`}D=JGu#5zDaXUfVhxkpVn~Qnw^XBuH5h zPRx!&J6D2gq=XfJp_-OL*(uoRDd%jHC}h|ld9H(p#uU-gI1uYT7TTNegjn4h_!CFL zfLubc%g(KEC(tyI?@?lR_70U#D2!?BDSR6jUPUN0!|$J(yJPGV!0#}42GTHU=!pkx zMwy|xA0b43ZN@Q>7EsJjpna&tdDZL&-}Wt^STc_}=NIP#66TRZ^yET4vI$^2?=)w6 z(m1NUIfb}*Ij2rKXgnQ*h5qP;)dwx0T!j^9P)%WmuHK*)R>MXv^xnV*9DDL9K|JQPaeiNN2X>g!#C1$gpn6!yzMOt-kchh6aT87@;jB)&R&m70r~qE| zQRDfJv=y=XytK48ljcMB*r;kDqU*!J@|s!XanTyO*bMSnSn>*C;uMNESVUXmp4G$I|M<^a3q{c;lu4 z9Gh049rj>c7*3;d{s5JprkH}$8H=N{rFf5GKyi!06jZ|C+I*MtnEtw_P<4WI^h;bm z?uFSyFb7m(<2N!M85h7d$~jzd*d7Hjb%>ac!(I1sL8jo|x(!fs5wG_B_Cql}jPpii zvgaMkqx^GdEFq+eLcY%EAPSx6A&6%JChQI-?8&PcT6Fzv37Uf_KZm77fjNu^JmC~5 zD}o3r?#p#QXQWQS9~|e|RGf zv-vu6aOU^DMz|Co-TKK$#~$~bJCF`}ows3C%ti&kw_<$v5qyrf$ElkHwYg=N(JI z6Y8MaslFq~gdk9K&|(5^7oF!Piz%&pA;M(?3HG^*;ffwCYr8L}_wr+?N%J%hj(RAFkLwl4V;xYMQKv@@vZpXmSy25;liVL#oV073u zZ8$QTg$Tsd%|gO-2)uiFP#)sYKHnvycN+V701Y;~4*hUJL6!uCJA!2w(_k4vv`Ugw zGC|@P>X*iax?vnjKGtf4>y;ux5Ze#o6Yg-Du2`Zs3h{N(hC4#)!BaG#FfkmN0?)Q5 z?k#c;Q>=zl(1O`6z8Arrm5US$aHcN@SamvXF&`MBYB);9yEQ$~JbKVF9qbf}Ejtk&{ zG4dT`UH_8!2DM#_kjucWBvbm@y#b$pIp)g&ab@0{DK@aL+RVw2=M_|n<8;a$LKP0 zxdPn|?-)&_3b}K7s02|q8&2TrsXMCJ^wY8FzZSS7?on&ZpHTZUHCxA{<5Ocp?<4OV zY07#tHMhb8A9{|vgm)9Zr@W-bT>nxFuJOzPM_m#hp+djHLXIi1%uiF?RprBrG|?Iz z?5FXev?Qv#%PV9<;eHJ~L^LS~EX~5EMgVM0RC7jf?U6kApma+lHWawOjr0&BUgQ}} zHd0)ZeU|tOqEh_|Wd`xn1|zpn`*qcq+XAIS3}frZ+)L~iG1l>$pm*b;bYO}jLm;N2 z7R~k|jB{Qn7yotgDjP?{?Gf4nE-2;kof-f#G*=U* z+kqb9yHvzXJSA0f6UhfVA|a)}Gw)f(;yJc*+i6M6$I_PfvyqE=xaVOrcsNYyB9R|> z0a0#Il&<}(OR(R4g| zh*rvBSE%#BoKS{XHn5MJ1MIJ7#Z!?!nGtGu|4QgWRFHaQ@dW_%h(e?o0=s(s8&fhN zjt)$F;=)l7e>ryzb*8-3o{IC?+cmv!n-qNNfnw}F-1J68)h%^ubV%(jE%|4VI5F30 zBXJb!#CvecI-30{kSr++E)u?2a>f@yG)^DkQG95MWzn#L7Q4XNLGTi1Is~Y<#1%4h z)(*i5kMb8Pg|QDyB z3oO+)k&(E|Q3v$;K%rik;s!}GnJ^I#iaK#E;3n0_Zp8FMz;}DTf$zg8kr#4sPk1Y-6z<4MC};_TfdNSR z&DzhmqVXPY}UuryuoP4a>@sNgk9oL zCliMfW{UtIqb~;@p`vOJ0{?Oj$0;fPO$uTKLLVs+dNF*~%LAYST)#h`LSE3i zVLDkBUi?UB!6P^#7^Z9J;p}k*YicOZmC)esG?EOe|5w4L14=(dY+FPcble7(Jqnx? z9ZvZ#d?pzV))3!bj3-56N5fFeV?+us{MMPhI`J+F-T8K0n-!1XCK7G>2VKDO{CF|BwLN9r z5yHnwVD1Qo5h1eXq{3qZP!zTf<7WU8?Pj?r!1fv*AC5}tNd?nk)}_z3Q`OLv_~1|! z>#MxuYB(u5*dK&Sd2K5bi{lt>{symM2#&&qj-o#+6Y^X6!Z|SswZH{^dFsvy2RM6A zi~$+|Vz{WJi8o#OP+`l8Cvn-tg-?vg#o=Lf2WZU>yl6VmZ>>;6-ZMjUhA#VZSrcyC z)8_jK1AHo=n1J)2WfWOO#w>v8z5jw2^{h_wXvl>&eBr7jJfHX9vv3`&<6PVOV1|nX z5DQ-J0I)G}XuU^HEDQyZZtWhu1yT?=Q2RwG3Xv^aAZI$#)c`(Sa^+wE=7ekkjyD!L8QvSpnOVC>xOO+KpOAu^0`A9$_7QgE_cX*S+# z-~^oGsCJmP)p0e6Px00T@}NBiuUDbdCWYz$!nl~(5{B-9BoqYjc#lma^8>NND`c1< zR2W|lM6>jf2oI5VqzK3Z44E5>N54PW0;0agh5d&k);b4`rIGwmsI&U%G%za$VRtqk ze6~eUh=(PxKinID(fH2#vuq83;&G1~!MWTdvT4v&fTu!zExlyMXibuC5v}*Ip1j1T zdsl2Z$ly)m+3(72dd4RdoFd`q_u(^HQQcM>zpWv*SL9O7;f{-yJV2xY9l4hUDptph zoA((N_8sA>`k@Nsq$O2yQVMPM$+-#Y=rTgd>NwgKK)M+KgUK8<&vOsc{Az36XB)!@ z@+q<(^<7OStU^HV{hP+qV97yDYlq^j_-tAjT|kbM%n?#E?9Q=djqDLjnec4(qAGBW zl!Ox)Ft~n7~B&4O}yVJmu7}nS9K3};>E^yCS8;mUKYhY(C z&U5yxb9sRD2;)!-v;0SW(0wGcPegXt7(SGaJ;!5QIUb!7P@qBJ#EoVA8$Ef{u3cdR zJPj;}vG(>y|NJ)$bl#Zapz$=)O%y=DUV@Bhglfl(Ksqs@Wy?hlO}~*~ntPl~CPKR$ z#z^GZHZ3_SmxY^1#isllF#wAFwIZmXWsh5rkEp=nF2YY{Ay){DT8U1}5FED|a#QALhR!w`eW;{P6oQZfsx(353e_YIBHh}Q2rC}O zZ*xng6;b@Mqv)CB`qk_9Q#??+L2uP+f*&K4) zvPAzY85f@t3BFYSN8?!B%SkK^xz2uzeh#8rzV#pH9cU3=?(tKS**1U+)8nht7E2~r z9>lo^dH^67?fitRICKsAk32=$xfKEX1QB)O6g->VaeRNGhuqOch^bNm)7k(i1LrY1 zpTZBNKJ}-dvyBOW&@o=lZ^IpJgGDjmUwXK^sDu^vwn*I455x()rvKcB5#u;o2-31T zEk%%p({>)bIfmtg6Qi0c4&#H0?CnbdY$-3&shRASZXS7oP?p`K5Ovg%jWT2?be%T) z>@iQo!;Nq8aM1hCbMhL2FT`01)RBW*$3gY@i3>=b5E)F$imCr~%)79e6gm*~CGiQ_ z9EF`ja8JT)T_J%{`LN$<|AUxYZ}(w5sM;S`*WyN08!;Rhb=c*3Pt0-Jx|^~E3D zq6I(N&r-F5wj03XR@!q^2u~6#nErW~Ut(~@IYny-UjG7YqG41pBXt2M9bVBZX$FqyY z5$0OYOH!-ja!?anQE)cm5`ct4=Fs>nJfcC|AUTEGZarF=vMWGKvs6=Sn?MnR4pJ;bPvUI(d@v$Nwt z)E9k${}Qia0*rJ+?s@0xLphh|d^SQ*V&p$l!V-w@VBnk?C6SrDmSO&OKsNr30H&wb zbC9gwH95VRXej8i@oNGoF}=s}L((o>Kx_{N&is^!@Lz*Lf_S0r^YKHWOWFj#*%zJU z4#hP?QvL%Cr6d!Wh%w}OR+eNGr?79a@DN}0B5pj-yw5l3~2EhSs+^vpP0Lio6?dK zk@2MeTHN)?`TLY`%BLdXFRYFak+iT2xAX()$HS^3GYL40S&*AP!FASrUx%O&1`7p% zXffjAEU@;P)j%3Pw$QN>XIc;q)+8UNGEB1$r+L3%q#Gu7>~jLQd<|+y#dVtXBRC_T zj;NED5rj`!^$*eAhyx+i*=rVJ9?lELdCJ1N;rc5M0J{>QOF>Jv`FsR1zjN3b=@7~! z8y&)nVTT!jEd_q%CdwP`dR~AN3$tD9i^fMtXCwF&sg8at;xIR6L_{bpq;fi!g=LMY;PVwg?k4&s^K}WWZ1)i*BdEMbt?Qv?Qj} z*W!>(2iSf72+_6NRyYDYQIZEiC!7R|VtQ88eHk$RZxIRcpr73(WIvNBK%yC7>(`(O zdj3CE?;X%Y_63ZpsE94I*AHg$fVUvNIuD0Z+{98bWX~%WO*wP!-^8;vYIEhhrXI$S_=mS1$(T5t zMP<a;&)qsN$jRQPyvM2<^rcbIK!b&_MptVNmw z$Df>|peZuEnT!^%mg&ikIMaPw#-Y~7f;DQLF*}TiSm%k{gC&W((=}udUm2eEuxgcX z=D*NjgKwp%wQ7rbLaHe27`kYSGGaJ%yB@SEoiF2(E}0+PSz|f-tHgk0Fkf~O7;av~ zB{KU5BvvN;d)>C0H$w`_ouyWJ|d%ojC*(eLvgk;?88vp9awMJmXRc_pkm2s z{pUofSxAs_p>&g7cAAbz@yXh6K|;cc`0@xMWtpi^}9E4j4j~$z*xUEMJxSTwuY8mfLH5 zXJ5NKPKmuxls+`= zgjr6sryDSqWps$Cf=g3RJ*WcmR3V+p+=4v)v}}s-kYT!2>CVkI3Bhmv$#CX+Z1n?& zfzF_#E!*sCp_j;}!_Q8SL7V#IN{RhT0o3$`1-g;`c;h#mf4HPfpE;C_@QOhygtxr9 zueu6Q}FdICzCcOiU2s?U{hC6?Q29F_4Qc7BWEe;v^0T_lc# ziL{+#lQ4g_VmW?QjxsZu#XtV|FgSy5M?{X_@Vf+$w+FYbE7BlcUM=F3hXTb0*IZGe z4{576i4CziD#Zp-^%lw8f5kHQ=T7K1N%qP1{O~>>T8uY6HSW8u+bvJ1!Hx4IdsZukhU1iew3Tv*A6% z-^m8dOZZ!X_~=|ty2y^h9$qaH9IM3@!bzVMW+Lwg1!yWpTP5BOq<=3^1zN?uI=YFK z(Pz(zT#8cGsZH9>Jv9JgzS@RL%9$y>2z%_gYS>ZitC?%Zh}MlC9Jm#S|LNp_NX^u+ih|8c zXw-*HQg)x@lHRi?4~iGdv`0i<@ z9hKQ2VQEi+M?XvieU5^ORJyH%A5qIf~Z)LSzKi0CRxN)%WcY?!@e$5 zOpa%c4HcU$iT9B;;F$gt$dPEywLex8;g5G3yBca&lq2_Lz#yx!l%+l>kF_Iy|KkQb zAND=7PUR%a>@TIrGc8Bbnk4KX{Nm{|4>*g~L(ESbNyf~%R?l&3XibTv4`z%d(- zxq#Cwa2(ri{w4RM9<)f%yG*1T)#qT{r!n<@mxvct1bl)AU$jh7LNE0_zYE9r+v!V+ zPIUsCNjIGyOpyS`-&?Ny5QsZCW=UW7sx!EZ3k8*A`2HOa;@Zfpcor45r)YdV znQ}+BE={zGEA|h4t0AlVra2y@j2=_`M-BF-TRV*VTw}fA90P-Fp#*!QgTsHMJuFt9 z1VNC<+Kcew))Egr$YQhwDBaN1qk&W;sK#{m6hj{}5}y_rLQ53Wh#pCMysLa|Yhu^# zDva#hnu_y*KANLrZCu?3pBhbB$+1w+n>dSU_wU?*K9hj(!7EfQl&Mxai7+ApaGqZ> zKN4JHAl}%dkIs|<&*;me%mkoh#XH2g$s8X*wKw1y*uip5(F#IyI&ezrl5E)K2@#S` zC!T*zkD5#0;#2O-H5OIdTdUVAvrg&9(&6%W2eg>##x=95@Gv0h&G=-&S_jd{_8R*( zG}G2ka~!%3^Y1V%?IQ8FgP@ifZtDDI*{VToppyIKcYHqfp~u9*RX^nqNeVrZiLCye zjoRVoxG%+#lW|fXo0$l_>4LxJ_E8-#Sp2-k)qSrny9i%{%gm^bDzfC2UNOCI!Mjf*QqY9-!{p4W4H?^W$9t9a!g2?`&~F&AO`6&C(@yWuM(dRUF>i#AkD z9wB{+EdRY3mEJTb3Ie;TFpIw?FN>?;6Sx6o8JAhj$;{0ksrxU@^|hByuOWKOr`m}+ zA%99R^3xz+y=jeu%KH{;T5^s1M16}ZXiD4dD!X-6_qHB0Q+>iTenenT4Mxh=5;u(P zkl6aIp89oz`$T}Xbx^4@2M8W|`NUYP>Ca9HVMB3?X@D|hOkk%+GE!OEIjH>TtmzEx z_z}4+Xpygbwtmf-6@Hj@cCK~ zP&ZCdOqqaRXMmx^^W&ji%KP5C=QsWwmJflNSS!$U0k~a44ThkQ@OhPgpbEIbR?mi+ zQGo!#TKvqO+x<;*28@>N3*hRwPtZAr`NWND9A+?=Sj80{h0f-S7TsmER(79N^HRl2Mz)pz_KR# z+yfUrfvQl@8_o|P7|KhCv{T#7cA)hHOH{B1s1i_vF)7b=5=WXgfqzfIn)KXfea0~0 zC!S3ffq3(;-$y_wUOj38aP9})iVY>ps_*TiwD{mH!T3wTJOv`0Ao}-wgTQ=2vMAwP zJ>IendS?@<%6Lz^xxF>!KhUvrfi(48n~dCfInQ zJpj|Bl9ocEXbOq0>K)~hIF(2am(j49e^{i5@P#UEVjIf&sUr1! zNDo$EF|=`=+H-nAw7w%3|6jrX|0Y#2T3xKh8Y13pkh=lNOlIr#8N?r6#f}7nrqmYJ zj~lG%Sa;d(c4nS+KHe}Q7N z?0D`CEI9K=;?CazrGI$ihZFz~UPad!@ha|hmpmrz_5OCo?O8~+v0AeGE z{STfO)gFz`ST7sew|gG=Oe`lrrBEx-y9Oi+aPqk)eO{#Ae0_v)hnE>iKm#?+ayg|1 zcV{cOsSj?p0*}qZYpmRy2ChnS5!QVrXBEIc-$*?mhAi6D6AZvM0Hl$>k@||P87~05 zPyiY#!RY+ygER#YazE+Q119x<5v6=a z2%?5pB=|aU`Ip}_XB0jCGMQi37i_E-63vT9-hzsl1^of12* zkCiuY>&Cd2R(=cQpV`|1t!RLHETA}SX!yME*Oh>0eW}4JO#?^I#>blaju%z_tANYd zFL9-;G>+(TZHf~sbNc_bdIpp8|L$+#W{Ey&rP!EZ$lHQZZv~rqpYwZ16{FtqB!b-p zQ^Hlv6vBUg`Wm*DdWlguses{bAka-&O`}3ul_GN>g7OXX)wLb6$WS1L z2){*;=I?apOKD3)|HSy?SI?&|1JVa@D6|Afh7!GeweNL6GfU#1gJ7X|yV}kW;fLSw z%ZJZ-23B8ZwN}_unN5}7YPlyZiPu?7hTX)d*h2C)6Z~bMf3k^0V$$YfiXa=_Y)Iih zA`Nf}DxY{PCbWmoGnCIvfyCP;+%j$B=nYjh_5ns}<3GeiSF_#FhZ?ste#|0=TFEGfQvZi$nweYvK(L zDsU%r?YP|o1jxogz-I!4UTEW=o!BD=`RO`9Y`k@hA7N@(47J*^7sh+s)`PTE$y%Ul zloCwp-4Z@Ost=Glf|W?`-iw6ZWx9_fb4!IKQ{Eti0d>s4PR41c>_z|iP3#Jvj|XzI zNks`(MH}Q33wDRkmxC0N^y71hH65h|m~AT%Qo%rsMT-6qFA+gU8R}Is zUI!f;@BIJ`!mC6j4FJ-!k2$D3!Ga9La0wYi2hG_~8!F?H`rcnkvu_bRYX{Z-o#BIb zy+keo5N=de-vo33zBX9}+DZn%zGD+^0=KiaCsXp@AFWZZN_+Ca4dCM@y#@!E4slf~H`%@+HCE)f6~SA}p1(5mzR$v!fMZ8pl?k@PH!q#N6|5i@EIK>krfWaf z30a}I8bL)?5b+!easj>(z!i%M5|+vWj(Y?vV{T&d;f{8Rn?A`%X1~g?DcabZ23P-q z92c3j>+$s@8l>AtsElmFum%@>$#-xcH#LV)Z_kA|ECL-~+p5bjL{sDuf%p~ECXfNN zNHLs8Hj&PiRc!Jyb;H~ z2)ldID>LC}sW+PjABPdl&Kkq9KZ@+wn2)3z@EM8#)|VyjLEduFnUPVxvg0=qJ6X1; zK$4Phhn_MWigAjKEcWTW>0WMN9b?#86v%V|X(lwr zKzCkxS<2_B3{mjWPz73aQX2d#Zs#4$VoY8ix8ed3oXaw7Um@$WYZmKs;#%46-rZFc zoN+6V;`FWfEKgaKFxDlX1&iIif29EvUu+PX1#ySCye;9}QL118VWbcQo7ofkB2m+P zO>t2yZ~@$d7mqozfupi*%H06b5;u>Bte6Uor=JZKi5PwtKtCQLHL(D$GYL}|g8Yaf z4XR|3ck3B$m~|0nFSh}y>fFm)7w8)b4laqg$n2NGNt%T$Y%immN@GlN^3wgp z&%{T#P&THeDV#KhWv}xy813M3r;egw<9I5jec;V-dW?ThMU)l${NwIw?L zWNsDNTcz%{bx_X)di^>id=_meE4ymA$`G?Kr7c>Yv|>EXIlfX3yal2h;{D zd{_w7NZ2Hb66|Ydn4fOBrN&+qealdir}nxH%wM@7(56^};4EO-8+-n$?AgmZGM5_9 zYti6hBqusU^|5)X_x9XTeFSI<2AZd?6c=GYm`ziLJieR6cjeTq997@u@{iYy@4zn= z?Le(_h(D76`U(Vng{&iPn&|M(#l`ki@7)Ppjr_MYK?RYbw->w$NR2atUdXHyNv09Zw$3zx!edU*NOQ!93`XI1G$)}QZN&E`) zajCN`r9GImTe+}#4rFloeR{0exMIpf8rf~Yt89FnqsJh=4vN-8RtX{;WdFp6_+Eq; zaiL9X*xHSW`ZBLW5G9tXnz728H#QXLq|-Nu?ED!$Tk$4sTR=8~-SnVXk6GutEzD4& ztzbZg$TA|!V=AMLC6t*IciJgHyL**d@M=iqKn<3w0|R6E;{!>xAGRwt?@$^upND-a{rH2y-MB9&`0!T z91x||n7xl!6;Wr$;!^H7-eP5Q5p+iEqWt}`nM{m);o|s(sR@ME6{$TPtKzNVw|uab z>n*&sbGjM6IcgieP+1!+L3&>i6i7LjyaC>Q$if>FA4 zl6AEoq-L+oQ=Dov)s~%sD95^)pT;O2R}kRUD8sYIw8#)mA%t9%QEzy@^6#>RxX68l!YYzm6nwlO^@pqSp8_b|S-IU@zLfQt zWWmWV?h8UetC|=|WDv?>-4&Wr1PxN^Y2Hc~<%SwZ*)mS@X3Y2_q!c9~kEdvJ_}iXK zW5{BmswLD!z4_e~)6_C+^pnI?y(~`wxzr?HUyeNiW1USL{u_A6A~Kt#A3OzfCTz== zhrS$-{3~YlEcn4%Nj>Fxj?P5>h9EcSpR}Nd=hj2NV7C zf5^l#!qs#XHfIDjDTA{3fb=Y*Ov*;%O*qNEc~PvgrvH&g(`%?gFKnt)&wGV<4zRI! zeXwa6H1+PQEtXk1So+Ntn-M;l+-{3)3ZI;D<)jMzI7pQravZ0XhlDvP)5nbYPCm=WznwEB>Z;kiwPc0V zQj$bwZuhw_tSyiDbQ0IEXB62gUHA;iLJ7=@>q||_1oVts!gO<74k+LYzl+?_teJ#M z`ItP764MwqAU0=K+j8Q!JamBfV|UI>hHUq5^p-ol$>>Javmz9K9(5G1^(3u`hC|^< zDGt!Z@l!70`BR(1NgKsJU^m$eVO2qxGpL$!m`l$Rc1ekC?qo)zqBFy^Ody^Ii;g6G z;HTx|muyOH3;TyWig!E7Y75ICqw8d^>^PzQzEeaW3!f%*qco9q%;UCjUpuj=PCCS5 z+^&;)NK=<5M0DP5lIlv?%_kp`oLGYic>62t)Q8*7fL>i zB?LudINqyDrTS#SswedVSLIT?WGpw>i{w(XBCp~Lx_sb@ES%-e349n~TqoU)<2_!_ z!8XW09(E3IxpEu_Z8Vx_lG=6nnR2CePFNWVojE)82U${=Jc=WSaT2H2JIwbqOI>;b zs|tm>{Z$GFaw;cL+JM63$VIoE@D{V9Pf#FIm{{Ezz=$?coA*`YvV^oaY`QilW573O z93{w+JNU%~A^XVm1_iIl)Xz-9EIJOS)$pfXIk5p5lQqHfnf7C_{tJ0J3QZe-sn5xh z^}O56p@Zh`DBTW;y|a(*`1pjw{Pan94S{}B==SruG#Mqh2IVNQ@=bNRsPj2Wb5|+kWe9jh{;-F{7oT#`$oDs({ zwxnLeguMdt@Vp~To|Y`C9^QOSC@Jo}(FPZ(Vel{nX|pU^xtIo;8BfBbqIo?Ou+2U( z-%ER0F_V6$n)p#(`%TM+zMh1ajzKR?)b8xq?joUmoa);b+rm;4^&+<1>yD7=%dC$w zQQNY`Mcg=o;OIKe%-oMnD8Bey8j3&K)C2^ix6GU~lWON)_4xG_p@x(=8A+x$#m}ta zNE!)}sNbUTAjUadpb57;G5@zL!67FdefMeq@Bz;3u9|`{`B;+T+pKS|mQ1rn1Gh|HeRL2rB`h7Ct zOVc>~kL`wVhH&1ed=xc?zfTCdb3I#?J&Zw!Ap;g?TzCq?0WilSyu!g}GFD^9`-@XWZ497cUY$SF7n?#U6uh`bbH$@4sE_%6tpQ!Fz-v4A5N5q{{SFy#4NCvc7hj!#{cM!QI>IAQ&jQ-!G5%kpk* z6F(jC+nltyes=o}6r|g9Bj1#`m}lYcs??hZ96OGS8cSt3`K;ux7dR;+dK`T}NF#8F zbR)+`%1(WMBPE;^x;a-E_~?HueNIll&o{ELR_ar3#>qJb4Yx?a>$CiB3b7Asy>1In zeq-J+wagrS0F(krd0(T{f`v}@;E=W{iQx26;OH*+_TUZ5jhxu6%Kc>KHoP{6C(K|g zfVMY2u2Ey&&Yr(6Tsjeqj)uED9TBb+_*8!`;*>rj7%6XBAVzc6CVu9E(la09(C-jn z6@agCT5xiXR$n;|2Y%DZaKRh*bwk&MR;QtvXjtDIEi&m_EVm`QDi_^GPLrW*f!n?J zQgIyi+;WbBw@-Km1yZQDl(^#E`bf>Ea7G2GKb`OzeHu`fFjh2|VA^FB`HU5It9 z`MT0bZOq{hWSk{A;n(yrwD4c^!kQAaqu^Bqj;mdiYm4M>Pr$c4byAPR{&4kbf=N-P zoOayQGH>7)j-1*s!@q(;UzFc-(KluW(2DORy|G{AL`2`7vThVCnhSGQ|6~>6uL=1N zBWiCw&I)v!6jbDr7R-*iqA0!@(17+hSrHv6ob%UgUFx zzfH?#J{)6xjb6xU68YxjQ2olcG4f4F{yt6kEMb z?JyE+tt2c%>>QMVTBO)|Y;<9EpkYmympI8FLV6b^QD-g}U!TsnHqFr;Z_e|vH6^h^@6)nNPJx#2)I%~06M-tZz28KwD+}XvzoC2 zqCGiUSXDjHa=^>t40~B$W`B!TUs1o~>*-|g@7%ZuzayrRmlPprr|=2}(3!`@i#f@P z%`H-Fhg$bY?1&(5SP)ZNh|NEOtry&uhQOh%-Tz1&P%pSA^}sjWCFyZi)HvS!RZp_xOi78ekHR)qzNGYgS{xfBjXmhK z_uDs8(zR~se*3~zYYQEiKjxCX$2f7leIl?PN34U8gzM^;x!BRE%i8KyoMe*VlXOji zW-z7a=eDxcti*XC3iB8;tE}7E6xeCHLwag)Xi^Yqp)htQ99AifwNdU~hJ^jz+x7WL zZLZ459^l6hMPsgY zUua%|@7=8Wfs#Ln=#(bg7tXIO)OQ%kjbeRGT+Pumejc|p2(k16+dQ52alaq6e%;)?PE)KIr~^ zuz;9B=GUvlG5232oxPr9pcR?bUs3fKx-1Q|Q^r9^o4C(Lq7ZHVK$c0L7H@r{3x4Sjvn~_Ag}jneu6X-jH=3mA zb{%Y^boc3S%qOV@1z5RSB5zaTGFhl8agi(vg&4^MCS}G8x5R#z>G@}mI^+HFN?)3= z%_OARqp+#cGGHU8IBu^SS(q;*W^CZti3q(uWd1had}n<6?d1SzRWo!=sPCyIIe|0o z8QYxAiV=VJoLhYU-PCAGWR5VkpB=6ZRNg5;49bz4U;>05oA(DWCSI@ zJGoOh{RY<1ocXhv6lj9Tacwi&9Hf5M^i@M%;G_769AR{a<>@-w}7pPZ)y`PzH%>9@@+1eg#ILb zSGwObTlht$$k>cx(r3k6$q;$`?0U|qu=Zk!NuRMm-1|PR7hU1%vjj4p*W!F4evEs~ za8Wj_-(W5+vp`<#${uwJmyfPO@l{o3oMdQ%7uU-SbOBXs$)iMqp{R;D)o~}{qZB-P z+T7VOe!_Tww5mIL{Q!d|{?`uZfr`YuCta(J7p}NGjw5k1jJmt-Qf85DjU?UGS>JQ9 z72VY)W#U3jlRn)!#!=Qg&B&9mPk3xh6l^+HqA=~#14b?f-8fA;h1(SF_~pmhro>mh z?$NAw(N#`0oAXMYQT&vEMVz-0*P7#cbzA`_2`zvulAhrv6JGjz|N5tqIeJc)V<%KG z{80>$pGA(giX_~(U|en_Mv+J7$KOkjbg*l$PYtAU$S%r@%hT7nD7W{BYi+4Qv&GNUn>HPIq`O z{|g(ftg0P9!HS6md*`iGx9%kiGUc{J;e3?0eBuO4-Dbeyi3nC`&WvYIT8S@qJ&vf) zizAf9`vwQ{gS|M(wLOh-5svaWRe7Z4F;-drr(Nh>jjtK9(MjaCFkO{Q7N%PQ*HEqc z-?<_S{wPxi5QJ`4dEsSN;nekXuNgF*J?d`6~mY8xF(D-^O)Q_D}CZ*5s8&7uT4hajFGlB_2N0GMBR;|6p&jJW%FH$>iJffB(t(G%GnC*x+nl5q*Bv;4QNeSdSKO zi=XwnWeKZPdlZ*{L?xQ!b?3NO(|(+xnU-}unl*VVxa}Iwv;7=WoYH%kJo+wV+~cg| zpW`ftb7%Q`z2ks>9`Sbu{YTCdAf>MS$ow4RQx{k0aTfh|#-ustQ|0Y%n?JXq00%mr z4gFi;dJ#-eTKVnCH55OJaFbTM`cvF%RrR;>cohF#)I}P>J5P9+vECs?f+CMj@)F8( z#7^Nn)l~S{U;~OzU^X`pBirJ9NqfC3(L!v?|7qKO-=u6j;B44FZ@dTR?RdcWKW7>F zF5!H~x18s_#EZgvNG{En1a|JA-f7|IHr->M#O=*f{=2nHX5ZcMS^fFi zl92J%#>FMGCp=5`tpILt^TmA`#drEY zm%#=7pNa6b{?8%LI^Wkn_iew_pVTJ_iSvT!Ydi~^O7sib_^EmYZ7sUsALM9I(DvFJ zutQfYC_V`QeK)PvUj?Xq7BEBv>0(#frfdC4>U+E6yh1lw;ZSva(9F9Vz~%pLaqV{t z+Uop6o`uGT4GQuQg4V=4#*~hhqTMKJvxPWnSxD2|df+B8o-!%p5e@)XM$`CFmY=a- zT^vCj+52i>-m<}Hv0&HquA|C%c02B3n2j>g1Y(DJ0!i#la2w#u&;K57R^V^e`-_>~ zmG)|BU3R$d(`{hr^avBk(uNF%bbkbl_h;?z!V3&KQMYcSChanq`U}gW!lb^jzv8@N zXVIm7r+9fSljEOquKzN4lrM_0`MhZJg6S->HJYH8BFxKYM1;msPM+X$j$3FZw!w7nf!GleX*Bq zNHZ(#RQ>t>5C3~S^5FyZdE)hbuM-TcV$%Qp;DH~0R#5bM-;G3<*P6QYkWV|>b_KQE z>3eb{n}*(9ZbYwF zPnsHah7aeV22F8VKDDnCqCf2@xOWpDHP-xaBrk1y+hrH>`H&xB|1PLb3e62&+&TT3 zJ81g+0e=?{v!U_LW}PSBo}3dUyDV&;eDS}Rud|{JK#jg!+bauJkxN#w?#pIS@p{JA458Tg9S%#fmQPK2}OXl=TE4K&QHl}ZU7un_V zIyU5Eh$(8nnfLJ|(GIJM=#*crt>2$hzd!H#`}IS;eVX)N_e{Ed#kXI4K8Vyz|M_-D z>xYn?EqC2ax_2j>T6+5G{Q_4{0%eDvd&+F{-n~?3v>cI271tb139fz^na_8j?qrUVi%c_{+zQ>mKtqGUJbSAEn;7IC}e9`s**9e_h;yZM{Y?UVEn>JNW+H`Sh4w&`p(wi(aAUzYu94<@pPTtA?-t-Em{};W^Q$gTX9X zt13BkSL>%8EjwC*f_LUD^s?QXGV$ij)j!%!1zFcV+jdK5Q2X$KyZEx2+dq4L^$w;|tzSld3}t+1+;@JK8dRCMRQLXmB}<=kxhqTU zo7wFzMYG1fu4h6X6^*^PxHL(+>-56nfbVrkaG39prxjSz_*XaQ_*0!%o~zxW-Itx# zji_4x-vmn{G}zZ`2zgYd-T>`|kFSFa3{{Uabn> zxiKgHl~2l%FNzhoq1!cwZnYU-k96i-H)#;>JeoVp#PEL< z-xB-O!=*cpc-ps=?G1SuIAeDQfAv7o&R&BVr!Lp{|LH=l$;@pr2g@mW*6{u-TP|f5 z-{=}Yoshn>?ahmAZigEi=V_*eCZqWdxex!N?Pz;k=JGnBH8;Cx!E&mOAp5N)Y5bFZ zm3ekxx53}$rXl9LI5F-kB8&!AkF=@lKzjAFfuf_o9-nC2wQFZcNTFLx>ynN5r%l^O zJs)}hl^Aa$h~#p z&d`<}U!K2je{|;6HbZvEBmI)p)t;*sb$M+uWVqTn+q-2PIJNZ8uLVa8q65>sY@^!> z?%rD%%+75s_#Bc&rjK~qYku{(^Y^b@?wRjFu3H+X$69+f@WNLv5T@#+KMc zwyb1?y#L3#E1AaR&74shZ_vjIIGq{KtkqRJxr{+QQj)D`G=ub~`p!-+FP;LuHIRuP z2Dii>`CXm;KlSWRF7}rmQVV{@A0TBrxqSJm=gQFy`iNT&9A&Q$eX~-tc5<6|jXx%l zW40o6+*PQ=K-OYDi2ipQo}lADBq`md#9D|*|D(c|91JnYRuq;>LE?YoFM6Y#4YOwR zwy5EqTuHwkX{)U$(3^`nNQE^(i$hdcOGgI%yGpKKBptI+iy)Q_gCA2s~F8W1R&GU znIyf~ru5gDvY7=3kQ9vR93 zh0n*&FGb}@mwZrM@pfS8z`09j8k~HrBW?F|wqJK_`<|Tk%iHy(^QQ%?NO(>90LB5* zcsjC*F*Oxu%>5TvIKV%p^dVyDNW=-5qxOKusms|;>@5y5Nkg#JJ`>C4`T^gzc}6{4 zYl6w2dKRp_jhkD0Pc{YX7Kb?J#vQL(G;OhJFJjHCQR`MVGcM_yeLseoV^lZO-y282 zF}EVU%EDXq1gXt$VqPtpOAi^CEZ)QJ%Q2YD@oJ78u}1#6NxE+_dqdC~cN^2Rg;4+VYz)V#Bz}+o<1l|%e`hv9e9!Y^7cz|p(o-1_Nt4?;9jP`6skFG&t zjOYCK5HEs`FoFPe&7a7uYu^^Nm+_qa9^!8AF*`&PL|F)S9u8 z(!bQ>4zj=~WvMBKPI^sKpBzz-lgL?Wvxq^=g-QF>(AVl_jCc*QRC6vPVi3ACneh!Q ze|5xQ4sSZ2F|h{Y*?dT?f0HMU?IYE0aTw=s0UxMPrZ`OccSv*Ja@6De0AlMdM16l~ z4e2ROx%j4ltE2cp>a`^UoeEpoYeew44U0neEGG~T650ByBYctpaw6)_@txgW;jgJT$SCDO*)g< zIIuu=?8`q9Yy@~5R@sru$QPV3Rt38%$K~A?(`dc1jY!H(>|O-&`gVxz*aayk;;#PQ zA;UkQM>2T|pbwo%@#bdiFKfi&CKjOoAeb;f2)P2PY-%#2DF9ilsWSE)CV{~oQhCo9 zHA_rI=FoEXuK3LZ;yHOf$x;F$O~w6&&KcKnR|LZDckR*$n~6kj@Z8 z@&GY&m=r(4`>7M=m{rYK$sXbooyn|HuNDDyvijRGWUl&OnriSWvQ=|#Abb$Xn@m#- zjDyE5lpEmAkN{OIEm--(1X?m6mU&bTA_e~HhR_0;k^u-rW60wTpbvybQ%X0I=5)Q9 zC3?S(Ll2afe=^J>L|D2^5vE5v{EVi`AHpC$gAb4ahsm(&o9KLm9jvTyA_k0;a%k#9 zIztF0OYQb=}Tkr-7s1qJt&-Awqy*+`<$tzd}0 zZSMJRTyIx9jOuF6@isR@&&eBXz_(HU0qZZ0?WWtP&|d{D5Tg9#O3oj;;k zEqRH3m4IfF731gcOk$I+Lfio2(W_fIrMDePSAvyQ^BU5z_m`*qem#O>ul#$>5N5w^ zC)EPR=pE!Ac*a~bHwt*bhqmcal`XPg^EXGNGMVkv{O|E?)xEpbOKqV`gNU2voaP?l zP2Vc9-wXNfroy3f@;@4NkE-m-*o%68Kx+AwV8p&b_fW?y0(eg7RyY&-*Idjjl;T)A z60WZJDzycc>XQrIdrK-p-nkWyN>D$ski3j1NK+S{pppC-TU%bKD6vm{ zCiJk+nwlKun7VnGWMoL$qpLQ@*)Ha@L%|jvvey$GqBLwUp7Zuy)bnSWO?&C?&=&$-CGrJH|Mv z`ce0a-U;b&ruuYJ2B%nezCj*Qwhh@YWvx~bg!)-(qI8(9UP!L0-k>a(vX+8$qnVfg z6QWUct6}tV`mtf-=yFa6W>G{uedh2q{Zi8()Aa4BD4#NaCwZ9 z*UOO;xNy39TT;n;8!gp7;k8_1e2$xus;l4GLgm`NJF98MFr;reGR)ATqo$)*|H=)6 zV=o4}&qvqUXsYH>Y3@ET+acJpZPPGhWLfbL+jFjvruOcSx0@H6{yMU`o@895-CwS! zN|Un8R5VmFv>%=l#_P^&_s2WVYj;E}qAS`R*;*NxdGv**tYPfsGS6V*GL>$zJ=<8Z zY`)>p%+6_=;wAkd$;iht5IO6w`k5ugETr3YAS-=}wj-{?ezY>y=)CznBd1Aw7^_J) z?m!HDBDW*yN!ZM$(qX~TXWqv|Fk5tDRNqp)f71FxJ4e7BrjG_A5K8ak&53^ zj2!ZKKl2FNI+r=DyEW{aux{8m^=RoM%*x)g{RaX`E0WG#G$X6ylFnrwF;gYCzofeADy+@EK%Wv8vFs$d{=}cn0wy@J+s4-1u=ossaq>vhxL+-h_Z;%vSG>6nABVo-(UjD&ptj5HeXPw0b}EM*`|(&c~EX?J~WMR39Rfk^S(# zjzV%7Yn8i(>dbK8g^4S}my7v#hmD)ofa1s^kB1nu-b4LAA7G4oz7Ip+ODEnhM>h5M zT~>G3{Mv8TnxZ#}L@~(S7mTi5D9u|CQKjll-dW7mi#|XLM}Z zma4^)14^LRqE)&V6l>=5FIJ;ex|s^6`TSzVGM0TiWDpS_HtRgiTqKX5W-d)#G0#{a z51OV`mxmT3rg4k_4m01VDqQ|2h z((3i-AZYh|8YY?bY#JtM_NLbU@_QkTU6N`xUy)UH$xSyi`GjKmge<`{L!TkdLU!r>m+^^98 zHM-w;)%T`_|66bmqyGrFN6~)_-Q(zf=T+aL7XI(i6?czLqW=`S|3ddibWfuzzE}Md z`hN!Z7xe!M?r-S-9o)0%7vHfykN!Wv{S*Bc!2JvTe}j7w{bCVe;9VLoxB=)7L^lZB zD(DXmP~W{4{;J@HqQ6>z`aYlV*Fd)>xMAoQ-^AAUooa(y2mN)?tp{#>^fw4l-^v#L z%g}9zZXoMtnK9WVQo{3!`jX)32U2M7S?v| znWFc%W5T|;{JAIM3Sv*h|}1-fQWq6kQXC~Dv|uW(IQm1Y>IF+?K6v9Tzc_hfqcFd z-Ue(H@dz8SEiM_#zfeXh%v=A8h_p{fTChc=85EW$F7R2kRIp5ma;U4qywyY}GsXAJ z0yYWrfbSiKm6SR$=M{%NUc9h4Y@rxhfGdl~d`A?DSdZw6&YL020QHRt7j31WP=I0< z@`xN3)KIJ+T`bv^Hx4M`x8|TN#U-DKD=d_X6fP4n3M6%K{!fGRcgN*_99JMeG@Ae3 zyJn{Iw?aS7FD#N7&s(mFe}=7UCQ*GnD4<~3B$r}butiWZ!}5eN{f=nC?}ljFJJJxr zgtzGeHxsc{!-C>)P61^LWZB21mBjQ919kEii;$uE)<;%@w0eZ@aE|e|RnU7YP$kQj z2rN z8SUEBPBxL_o;@}h!(iM=iR-4um7E}j&EFvgpNW&zbT$7}R2w-Im6qDapmQ(=73P(d z*JpFYDCjT};6O$8YJ9v?o|3#!arNIiW_`M&A7RvVr-rhX&@ymln(| zEr>q^lMGB0xoS*aa4O_tZp5&H`0#%D=g3$dUS!REe(4R%k1ZXRA73)804AY=_)?l; z!Q7~^7jq*E=K98B!gPkvsfsZ@ZjLO--HR?>%-^_Uku)hbE%G1PRdJakd?%vQ`u_@rTDP_#q;$ptfw+W{h^GIR63MChX)>Ox$~UpFqAu z?TY*rav&8*;lj+p{1k4K(|bXo zlmf%SNSxi()Go##F+ACg6Br+aQ6*Ys-s)GRuBz0^H(jv=x0yCYUeP@^6U#*0M$jhZ z44x+&l{d1MM{=1hKnVXrUyMAlZ}?nT6SOpL-!c z_uPWH7mVDl^XHy}TzGQZ+B=tOI@ku-)TI)7M?_Nt*Hh3pCyNgysehxyx3_%hX*1Ju ze67+`eA%f<$um+@)bAg+f`3U)R%r!e63PKW&E2{eM#A=zUiqsIcXWweK|8y?Qv|WiO4>Td=2;|$KZj! zv{}B4%p6k%p`XW9ztpa?W~!7@QfDR0bVYjbZ{*+szQGwOX~{`4;e_nW6z1b%|1?S70<`ds9 zgpv{sEIY>++tt@^y2xcD_(rA8%uN>`wDZhTKFF^utWZzCX`%+95sFVogVZdj+f3O| zW+82sNKX)x)6>LfQ^4pGaDomD;#@q7@{ zQi72^>v}wyE4}lpc^(gpJrL@-7})e*p`KTQf)0jy_5`gDguvQrL6Wy_n+6`wu%NFD z&u2!^S;O4E3uRLdS+}YC~rW`pGa}Ga!Y4dEVx0 zyq=f6O2N6v*TkrI1t51UF&+spHV1_64DfssK=YvfM0&jkh=aOo3IdHEyu)GS4~$(H z-WLEqkJ%g_Dj0{2@x`7T;f>wErZ;haPya6wIoA2{_4*Bbl5+n|+`@Q2e4tPVq z_IgfvEge=iH|oU%iNj2h#4c~p9g^rGR}hDc~i z&?3Y0s1c;nt7p{c6*SVw3A)9z$X2H$R=IrD9yEeh8J<@$c@`wv__xV$xvT>VtoOEA zRfPX!pdj!zD)&0AhFK9!>{3R^ecJroGPTVbAvPN=i^1G01miFQSIZ(+q~6=~+pvo* zu`LHgV#L}OE6UhX8$`qjlIqMdoq~iA#f`4m)Ua3uJp$Vo?|jssMH~dLK0M_${o*{Y-j>tF zUK*l^?ZpAJMqHt6c{1ITm)lEot99tGkC%VHG3sPM^q$?IKr!t-rK0yth80?DvAqX< zZa=;#rm`e;n-ukp?oXc+=H1#qIDe-M$_`#^p*v`BSpN5M`CkmnKW=XvyJh)_4q&zP zD|C1H+_k&xcA!}Oqu-={lPB8`i(nAqdv9_~8dGL30f6GqSqr70OKXG9{el_<&Mo8& z?=YgCImD&d_d6Kld+{OhZ{ocC~W<}){lM^Rf z)7x&JC$J@cVe2fD%Xs@J7$XMDx~kr;KRMRF37zyfwO-k+VoTpr`7<}pwJvV0ESk(% zR7AIaK5ohb@3XU&RsnZcSVUx9ql=~P)k9mZ`v93Xa4RmolEN7<&@o!3pv@5fxE`;$VH z-h!ID+mlnBLT+_j1obU^n4mlZa8+!qXE0`-r{VQEhNAR#6tvuEI z%lulgSQf@3X&=+>go-6gnT&3DJt4QceSerVHc-#1^Z(SwKU$60`xXqb+A{Uv+2Yo7 z0Rr3f!t?51T-eLoOeWq39VM94s{8#9KEYE9#mPFc&8BDU!_66IL&Z~Gnve(|kwh(> zv*u0LvM%sYZIl^YvDIEdnb@-^n~d97=UPUEFi>7<;aK-)66lQWZ}n`#4QX!ll-MSe zd@x!H$B1HGZ|`oUIQ5qJ&yQs|=dY#f;DRxwq753wV&W6?u`FV+aH@Niz@KU3qxJ={ znF@)mP!MI!n;`L^&EQxNyE}qLR)#uoj|;IUB4Y0zmj7*B{?~pMi>)zi!Zpn%zZKpl zX;&1C43}3wgts=H*h6^h`GB~$NQe7a6qjTQWmz^YnQ+To5)-5-VTW=vlu}^#h?Rx4 zh7MaO-p>C1URtTbD#-2NS_L{OvmWJ|%%1=F-F(E?)h~ut3$DndOpv#sY@>;^DK2HK z`u8q(oJX{B_j)4Dy`KCrr6|lc3n|O*1TD&j%GM{N0KFVW_BrGX?4O}hb%_lI0T@jx zJ3_jrDT=(3i8_vN`Ep`C;V`f{8D}on2`_=sZ(*lHF8dOdU3H2Xxx$sFlcp-)cq4^p z-nn&YEA*ev?M}K@e%5iB!kwzp(H;l0$p~9o9QJy#SmxG8YhUja3N52f)^VuG_x*Z* zxc|vR`MXUHZH=YrnQWg`Wv5**x6G5%5hti~%tRH<_#E%Nd)Vw;o~^S`uH+oc@1)_n zqOrBoGk8rGFNnFy)*EcXZ%@Z&&s#%PzA)IupBT1qtD0NqIaRUf%=^IqbZ^|bqdJ9b zyLxf99fth))qcBs)||wR7BM@K-41TV2-|X(eb^}}cc*5xWjO4lmW;9^$cDxCINRF% zJs~JQ|Ae$Cz93sUB}xObl@niT4YB4{4rQ@z<&eyXt(@JJ-O7oh8;1V7V>1AQOy)wq z$1I1kFY>n+*Ful>+3iBHp@o)S;T)fI)tSOtF~PivD#{4z0&Kjvt6m!RdThzU;+(N~ zNe)d#YFVtc7jO|RV7*Z*cZ!$uxcN|Z5{@tOOLh!E@vEJr6~shiF$N{hx+IMiI zxieYVS&dbl^*Pzip0sVNsG|CqG12Ml$$xMD5@(_RFN`Gr>E}6K=l|*D|LNt< zr+3z2t}v}ah+l82I`(R@p_S7>i9&nC$?~hf+^)n9tkc@4)Lyw|_HGE(n)kji8Ux}A zMnQ)(;_|PBVQ2sd>la>x3!`#QCyPj{j?*VQAbC?cr#t*qt?hQvb;YSn?`>fZh%dBiCLKPT!PTb5m$BeQE#MBYXyv)^Ad&%)y-PA-2Jt&(dv|62=0 ze|9icpo*!~dGFA=)4*2-o}79P&4pQ(HlxtL4dv@yW?Bbiw%LVS)TLsd1$4{*T9=sf z?SXQ3Co5i}I`oF})~L?w7ss?K?&O!0l3wPj9-=!6IbjhsK{tO2>l(-tZrk5=>T6D> zz%CW4b zeJrz&VUF+p`R^}9U&0x+)3LK0i9Yw=pQT3DGaZeZtBow@`wF_> z>GNWGPoq>GD&@=hpOvE-RMr*=?qt^1u>8~32nC_Jt0 zhy#@!x0iA2O~t@!kF#BTGK=?{3X0eNZrg(5DA_CYR*ZQk=o03}O66W`TE~|un7o_t zU&~XRqlLuRAP#$u{LT=LL1tl>w|-IYLyI`pLA-eq7%Jze?+ZP89#sn)m`?F2P=%0{tGg?tt96EoM7=W9X%s1EY5AH;>5DWT{g*?*PzluX3hHOQ2Ml7EWYQ ztKlc-C~AV8Sp7+bNAm%-9qzW$)Uiey%wn9fT5Ui2wU zJwey%m$FX+JTc~?R_uJpS)1Rqwr|ynFm9*C?TRf^>dr0oge^R;=TnRQj7l|LMYA0` zs0y?8P)=BvxYN{ZOy{NDWM1-*HDV|!zj>B&?X#8J@^@MUxF6tbRkg59-o5?Ee-?M2Ju8uSC{=W;Q*a7={mH2tpamq3R~T3_l`!cb!Z+z zv@PddMSa1vjl8Vy_byXBzK2O~13It)i&0X^_xjxJhJR!z|8FY`kL};I+YS7=wvb2V z*LT=&r&<5xV9>Z!yc>H}i2Q}CVCgp`;VQ3$t_oC?5jsMXmeV9t6*Gw@t@@eX)(d1* z`8A+m^QV%Vw23plkyh|WgtfdY8!umGe-sL8=}_c zsXzlmRQp{j5MlfUsVz`}#zqZjVvALvl_7p|ut)_u8m%F)Tm?GGz-krfECXv*AW8<- zt3X#nxSLd*hpvRc5XqU|W#*4Y_u@^dpxGK>eD0r1%|bPcDS>;LjU( z+~Y9>)wuj?lVz!RE(dU}on@5xImdkSD{-%Ds#ms7kNmN}$VtOD1MA%I$Tj~8!loSg z#Q5Xd`=mgTbzF*I4Hn1~GS$e`^FivDJixzlV33)CM+HyFlg2)9!eu>1CWO7M(;3^Y zib$tN6%9$(J_ppl1xL>%rvJC>Wz7QT&Lb z=X!|I6$sJ6I;IjT@AD1?@Va1|P(}SvJkx-Z6YQYUe(~&hz~dixlXl|I)htp&m+ zGy1Je!WZKCA&@^dwN`|0#q%hDr=1i#E1q5`;MyUSYV?)Ah9X(QWy@#{^qvkp@)y1% z>qwq?KpGA_qctB=8%XNi0HgyYJ49ztQQJ$ZNbw$^tk6^?LyRD(M-R#O641BXc`Qbi z;MHb=UjpMve`e&n#?a*+P!+mvRm~@pl0N_*IYP2@62B5Jh6qVgNhta_NgwV?Pm=Tu zlWvupqUT8Z5|e&I6?`Clj>@x17hOO;kUm$^_nCC_f%N&3{-a$#nLqilp2)i;U5p+z zLTx3aiu^%IZXT+Bs9sh5y~j=RLy{Z=qzR$6mSNTiO>BiK3*fxNpW72Ad7hFy#)H7{ zh-UH(k)#(D=_P>QG~>%LQ$^jV==*?n(5|eaZ&UOiffi7W(v=bV71aNh9;3VpP zt2p}u*CZECn(!}*{U%_&+hjM3iE{p>I9CGK3wBPzBz~w5kYZr?w3=Vfq?~mW=MTX3 zo5}frRW_XzJrpLphSfFwNJo1jT@_PjVCY-jmRZ8oQ!$MOhLq}55@otuG2H?T3pJCP z!sL=8a*3ob7qK1#`dXVba>)Qr`X~-2J|x~kL-bpXTQZ$wT8!2w}!2F z6i=-HlcyulqifJ2LLO-=dSw5-7U*L&50axLS$5wnAkD6!$G~2x87ZE~7%TRDKw4(T zR^&J<_Deu|&5W%QzgCi$2=ZPaeZpisk)Hw5I!0bD$+E@o1k#6$yviaU1=0_U z{G>$=fOc6mOp{e3eMORurV#2B=0EQ#rgs$600<4YF(G}2q9;QrEzDl7pIhSZ0@7k8 z{53G@<^ zhm74fSv=nZ{qNf4me+iXy8)~~+SG9?ulp^=7+@M&$DzEQuy|5{o>RxIyxy@G3xR2Q z9f!8@i{z0r#4A95&*YI~D<7BoRgtCpC2*ZIIb~#$Hdj9sQVhjs5Q|tvy{p-;bk>_%YXClyVwDBlLRY^T0qcIN{?yhGaxP}Lt z3Ox>_*ZdWt^^;<8?*-0NF5G^(nQO%hsxS8K$}{4zrmQH@z#i`sMOT-_Jqc znHA*`V1KE;U+K}DAF#N00q3_4+&l+ASW*4}_OJ%dQIPwh#T^Np{T;Y@4x&TMC=-D_ z*CC3vOjA(?SW%V$`&t*BsA9vdC|iO3ONS`dVp2sJZ$g2i|cn7(&abf3lOZ30w`0 zx#(Kegd?^`j2D3E^(Hh&$dh65d<68P{)tiU#TNHpz}dK|Gq;~6E39}uAWlqES_r!9 zSv=!`p5c%-;ofU;F9OarF5F59X{3o_93VWsTA)WBvjmHRl%sIlA;RmqvD052gYZDc zXcv1;Gmj@-_}dNYegHY!#fdet++}Yk_ZUx!6C7Zy3xD3;KttjPO>7T@E+(;B;^-{7 z%6sc2zX(9aGBNFb*qzd91_xc&3h3jSqP7MVIaHE20O=h~HWEc_wR7CAnxubZ zr+I?M`*fL98y3*q$q7CY=ozrSsZlrNY_RO**f~OXrQ62Zgh#g>>HR zFP*oNq_cURbl!eJI$L&1=iTGd*=l?toNYeoY>$!7jw#aFd8c&VTPB@d8>O@RQ|Y|_ zn{+;?_oZ+?>>!;z1EjMzNjm%Pl+H(wNvC8pI72&x7+*`bs&QVrp~hv0gd1T9eTH^u zWQf8U+M%g2M!L<7BI&lmc&#yB8yQcv?v8bgDy{I~xnn&!*ar`6p@I7HIzsT67I-ex zv9W9-^C4{XJ|rdwcz7~WZ}N2XnTJx3w?G0?({nr>Tbk4@cB(wi>Da+M&iPi5V-M+v z&<%O|NFD+FsdKBc(ZPeex6;*HC{vvx@-tRwFxjl$`%V4sXoUo%it1fv zQXjQbRpuTstG8H?lMm?!DcH4U^?spwkg`Ei1n_q&8j(s+hh%90Tn^ba(wroGVDen! z%Cq0(xxwU-vRYU?Uq~JSEEGJMmKI-2iYU%it?l|9w%WgrqatGU9yepE>ixkCD>hGP z=cwF6!s#+kI$aB-)9oSY^l0~$aC-KTPOlj0L=TltpZ${Mim#+|T9tf7BT9 z{2M5Nkw`_tb>i6|Qrx-I1ZfdOjT29iLU$na5yahs*gz7e$euDB(9vczMVTroGXR~X zDaJmFoGQtSfb@V#UeVShr%CcNKzhX_9}uzINb+p){6c{51NnemfMU7TWH|-ov-VV! zkoi(bHIQ1rEs~Ylp~wp*xgC&tXtE&^^gOEyx=1%mV>r-9x78)127;(ZWIc#TX(q`N z{2FK%8Z~&K$ZBX*ZxK|zH!4;>Y#VJBo`>znuOPsf`!E%+NDS2*TU&J<{RPk%KS#>saD4x?M;8T zH`}3-wR)VHfY#@Y(laK@GgP!l&3VM)44cR~SA0h}YqU2x@4OW`|F{J?zqlC)&l$*y zY^(g(WP+a1u6K4X6VAL8>D;|jI{8PWbMIf$DXjgiaF(=@&V5%(=l*HZS$dar9$GG) zM>a@j#Xjk*{82iO)jTYm)t#mDWPj;AJwiIqBuVGl+oZF0g>;^KQ#vnvB%O7qrE_Mf z)a5tv5rfdKzlRgpW~%-;Q`@vn<}oWhIUI9CvlscO}}1g{x0&hbr<`lbmTI z8+8Sbv=nOXl|1*Ebiqy2I4$V{cuw#{9XBcGBt>LoyGc>CHdtv(fw-iyc+z&;m^BDsNW2H zhG19YL-+ntiKzh0&^&5P?mkG41cH4YJnk0Mr!4AF@sx?Jg2z)Pb)F&aLv$ZulDEKP zyGgE=7%MjjJi%gDTJ?5s*E5~4G=xznJ!16Jr^tW(&SK1x z$0{DFu1M*5$rKsd@S4uJ)Qzm(aJ~^)qhWV(Jr;b`8nyx73r6B~T|GSp-PmK$2nfox zW>BCQ0Ru8O03a_28}jLu&p`PMkimYr^k;q%a3)6voXPr*W?kvb`m|tG`dhpX(#wQ&9PuL>83!P>2MjBGRE1Tp zqB{k5L!&8L4rPW1!rs|(Mh_OOY7ZznO7Iz;S5)tc9)QtfZ|J5AD0Z-LO}Nse4k!y#PEc5?Cw}SRxd9Ri+&_ zPcazJYpTbyRH+q~P$gI-q-LYA2~{>rrR6FiFzWv6w5owqi@KvBA2>}se`*db0iasl z(Y6sa=sgeiy{b#XniFMsx&YginpM=GVwH8tSSJD7bj|v-$tvqo4YHO73pHPvDP7fN z@E5w2LjsQ-?v7;`_?Y7c+xWA)BnaiOG6HuS!Q!1FDJnd0kFm0+ z$D^*M2L5i;f;22ISq@z!J6chlDo@4b}?{WITB& z8hAjG1+W*$p9q%C-YQ3&lzA{;Ag1(pabYM9qSwwT{0_1CKEY<^= zPfF%{K-BfXn4+06H_E7)1Lz$+F*lyqRT-%(viE7&xJSN@5***dY{j4L>nYxS@!)#P z*{geg;FW=+d%>6_)NJQBWbb?3prGaV4d8Y#XW*d(o;;Ig#xPvY3BH&zY za*sZ*8I`6rC8KvEFzhs$CY;A4k*T&~`T`h!urrOe@?2jrT?B^EK041+tV}iy(w)KE z0_bh~=;Bo5=0Ungc>4n>PA7rnmO;AxdXs=OoyBewq#Ln!9+2*4vD*ddCg*(|NKdoa z9fNec^S%S59cFCPx|bfYJ0LxxTUJYq>moY^c)H3aDM@0mCPRoPI1`Fd?ZZZd1hzJA zfHu}=i7@F@8*3{`e}J%Ppj<6lV32sXZ-NK^jR0tjfd4p8^{~kh4cF|7zlruga-xTK z#pQsn5(!P?T`?ViO+YcSc~_hRzAIO?E{g$JP}yEmaOyc?E3aKB53T?FFv8 z;5Su7kt%;#6_Fd|KU~F{Fn_Ef+Mn{DuJXL;|E0?7S84y*DtoTh{tHz;HvQh<&rE-n z;O8dl9$Q0RzVaGRfHA)o{=5sV)>~82wg7xclbm|2k#04cy1_c<-rpcjC@AK=$Lx~P z02#|H35}G5X28|%DlK89m72QeCzAIL0Qz8^8j@QD>k9Es1=0+iM0ssgdPYtxx3Nmk zYB5{}|Do$HBrx9C1x45=TkPqo*Kz_!8h4HnuY9U2X;5IGe7 zyni)>@B)P;OQ#vY?KH^4EXHDU9HR{x(Y@JKQlP{`T4{YF%2aV{f`-{4qE8^7ei>*X8AK4a! z)nWW`skLQpE>JyC<{Iy^7(IQh^PUFo02O%2D;gXIUiJ>W((G=pdh1>(UV`td>+3b| zE{GSrw689p_oWT_Ea$gpka*| zTOyL9rnIw^F%=P(W_(zOGFV=fuyU$pZ7DX3i0)4j0GiSzsYcc9#+YvCNKMV~kV*ZCJ%@kZa zu;u_=PK{)Nixo;HD3c3+-osYuTrR2kfG!o36X*5vMv>b}@>(EmFv-#+`fn_}U{Pq8 zk(-0x8ld~)ZNZ}91^djL-EB@Pg8>^2f8HO3g1`O`c9J>+h&_=H#!7o}?!oMd6TtMN zP;aoXSExNP0DzEz!aB4l%AS}2z~zE65Dx?4gdlDeL{)78a*mNZ5+I;Ttd6Rv!ICPrHktyZWvq^C=Bx)mSD2B^ z+VunrQxU6TZ}5^qP!%FKo`5Mb-TlFLOfVPtp9G7X2j3X0+t$J0&u-NIL%|}?%KugH zo=(1nvqDV&+=@7u*X_E1kML(+O7l0Ogjiw*53gDEa ze-A)2Ah*&iNIfH|rvbPMC<6rbH>-g(lN+RC0i9|l?fKIrx0mGEK$>qStF(Jbauom` z0rFEOi|p_!1$AA16OeXW>2O-UC88@=; z1`mlPYh-az@1L!aI}Z^vsfiL8+a0X<$PGH+E||>q6N`4@^%n52`E!V3*09p zn=OA9K(`2Z`vt0pO@?T==E8KyFpwammbWk!NjNP`MWyS7>ApeM!gRziYhjuiZ!Ju3 zh_@D|neo=b^u1g8!t{!v9#22`^ImB+8C;lN2XL+?RbpYf1mZj?;`KNC!N*V%M!Y2f z7p9wlYr837lvVR&VR{JYhjnWH3)4S=WDL{#m(wsRxiEcj2w9j;fg-30J8B?z7;GjEvj0W-UR4*_`Arc zYGK+LfCiv;lXxweE=)zc=>e1&O(hFc){Jc}TEuf(n4XCDUzole@3Ju6eyO!p{=&4= z2y0?t4J6p8Q`9fp5 zFcmDf0C}OwvPiIyg{k0J3DjroiI9b9A%wR8b+_Pn(ByC_nABVTy*9U~F>_&hLxQz1 z6-8+-Oy88#Z~O>rVfy|5!`pX&S5bU#@80C*-WzH{NoXOI(0f8jXn_C;5J>2uNJ}U| zdg#435vhVf5kyewh|(0Kh=6nysZs<~q)L@0-#KUM-Yh@;w=d6gC$r~$=ggV9({{I! zHZgsqE~@(EY3wyIeGii3_z=RbNI;LuLpCuT4$>X)J0MVVg`%*DX(xa#!|$G?^iB{w zePZeh_Ge2JoaCwhr`f0`rdJ`#sPKgUPlcvUOh0LsaboHQSyuQtR;%1$6Vt*VEsMy; z7j_fVIsnB>*k)q-znXb2%rrSMZP8p!OtIp*wl&K*G5rN(x6!~YXyA_jkBwwaGi_pe z5o|4u=jXg8rsF|A6@HE^FAeL&)CGcNfS5TH!X~D9K=2hJ1rf2CRAM|9Q<9o%lgjiK zUX#ix-+N6ekAa&PSfTK9w7^KTN#!{Js{&9H!Hx*(lSB=GvsP58OOUV`>ba&ZPIGE6WINQi&;d?P{SWl~L2|CzYu$)ueLK zbgxNe?v^mcfuExv+G3ehRs?Yk0huEd&L@@40P7&}aVi7Yq;d)f1_3-mYS$-~GeIyH zkVS~jMO2?ut^w&5sd|xu*`)FiKtEYweNwpu1a|;_Dk&Kzm02Kj3$zmO63Nl0gQ&MD zaFSc`=^$QYm{gJiuSq2pDYXFChb`m~sl53cC}3q-(ZszWH#-gxZr;L0ab_QT{n=Vz zZbkd<{dYcld^X_DshIwSfvh91k%1(9J5-PsnA*K{B1D2hgbgWh&3k zV4MImE}$uY;0c0@zlr*psRG0Q1nh;xugQZFnMM$P4+J?Owt{U0rD&3*OqP_Y0N0h2 zT1lcJWnyQzTLaWZ!WaPirHYhH@KiF`!3I1}!OmT0+8GEs=9JK6OUbPU zY_r5C$ptB1a=4mz6yURx641-5gdI zw!G=r22Xxk(da@dJ~!Keq^tF*NIDlrhwn0NGMU;J*eBrmE)x&f(Q!3qM79))}4i9i1~=ST5pFe|Naclx~R?%W|myC8+kn^{E4> zUO&_y1k%C+F@I1nJJeqVpgIC(Rgj(epH6VQcD#Ml84Xf_tIS{&u6+xm!eDSwx(8NT z_P)<7gOP4Aa0w{-7~`q-%*(*7Al)kvrd>DiG(f)ym>IZ`)uJrJOlNyuK3Rs#wRl>; zT_hu{C)UgX=kxgxLd)3s?&!&+qKZ7^n)&yl_@E3G=vTmnNsq6_|evp{yrIb>b zYM!-eJ#kcqiz;Sm+-!q?xXlLta0dkb;pT#2M&WuS%QMfx`StmUHBYn|jKd|G!gwl} zWpEFjA$80e9dJxV7YC-v5OvMgAkWS&Vu%#XF6x;$kPKxP@n%s#Dx}fHH*`~UE$ARD z*n`$kNyp%T4o{f5?#b&LxGT$&6K>)r zqRB2I%ns_JirG_LR5J(R1(mEPL6&TrH=rMYpCbfUri0}Ix2J`qi~x9?pm4Mep(R1E z2#_U+mRBfyv=WtV24uHDDHmD);ptA4Qvh9;aIhDLt#UjC{FPS(?@`|z1%jZC(Ed9L z`zbJ^utzA75(RLypm5dfm1`|Qn$l53AC1oAl9I#Tmo^OWX;#kef|ApNIPU}gk>GG- z8ao{T(sMGj&C(iMG--h0XwlBY&cd7KJqYz!>ZGpSvyz>z%>+Y~h)#N@{)1)~`Xrmj zG=z{XW$1W?|IYAKzy@{F6U=e;u6lDiVDDMN>yZ>-q;){pX;H#R^d!HB-NDQsfN)Wg zG@QRg^#Nd6I%iC0bFVnRVf4a4tt08UZEYKdQt3HMS(${=b`YjpXG?}K&S6t>#sEIO zvn5lw9>w_x@U@osxqa*KJkKm zXpM|YVHZH(dBN<}ur#E;1kiOaI1|CxE1G`;XH&`x093>a&PgzKp=J$$>UzQX zROt2qb@74=DtH7yV@GN_>g~Rl)7ur@rPD#Kck}dWyJv9}l3E)Y|Ha6E)oB@E3vg0&VoCSa{wc|7) z4z59&+W`M2*_wSx1gBu2GXPzbFl!JU*aJQfK>W8%ZHfv$!zrtDPzv<_DT1TrY`Rm{ z%<6zQNU_QNRZdw#odEA;$N8Q(?fQarBH**^;<`?pPRRKL@Xzh^43xFOaR~6ABqvI7 zhA7Tmz+YMPnDj*eMs(2Vtrzwq!QG$*b<>L=1A8o~#dsVIfZ6_aY?k>Uq}$OSSmU}` zI^QT&LNys_0T5PYBL&`-aSKTJJr0eC2I^ULOtJF1dT%H0kqr#>%*sJ#MuJ)ek(^CJ_QixJm5F2oc?McRh5$EhTCayPd;r~ zFu>G@AN5mB?}^R-?jb9ju!x6JyQIp8Qt{A^cqnxe-tKK4N`1eldMK6n+C!;70Cp9A zj(zxO+ZQ-sLAvFk)F&W#DLDE=smL^Qfid|~u}e`XJ(Nny!U2htsQyqY!Oa0mk}y7$ z%FYJi$VDvnyh^n$_Dq56nHZ)!PGt4Po~0mNEs%_hJ>LNIy@1W$7+PEG83@-`0KH{p z&|(i;EodcH3viu=&of83LwbpM=1BK23?Y$f8ZrhE@vf;2z5d0!rV@ZO0DeQ^=a?bS zYO!}sAvg?~lKiHl4B=CSuz5T-7ax0xAxiXbd`2Je<|cMEK0LQZw!u*cq~NF3R^ z4mR>e!BXS|K9>l4>>Ul>E)k}az5C^2Z|&6(OgW~AbJ#m)O7+n=w8ECXPsSB|71(-POno(FzC zjt%7t!hSvbLs-_;`}M{39Md(muMqUxLxM$8&>xS(o378KU;sY&WxBRY!9bd#xDH7{ z8qIiI7o=bm-OQPPbg=S|2~+;Dm6U%R-9l5yKa|)Uf#{gOfpF( zxs#a^Ct6-7vK*SX5Snb*u+C&brF}i@FBszjxeoyhJOK=c0H}Ewm=vE2`Hz2SeguV5 znAg0g;4b{1MLlnqEN8iNBQ$VcJxBAZK?alB$Ugk5SMZNtpA4^sE{8K2@r<+kn_9+ND4DJVZNR{X^3y| zc?c%%@V!m!XR@GtxOZ;+IZX(ZSs1a%9oZ8Ye{MMd6~{K?995 zP!NPC)g6PuW>BA1ILl@${X5Q8uoeSqE-gC6+=CC07m11WO71E|n?Yc#eh+7ygP|xH$9ihx8KFv&@ZdW z%@Q~UdgnY4FCH}u=p<}iBziY~;Wd|`;yf&oc~Gow!QAS?ClR#qjbUa~c9K5~eG^*? zDbZpL>a)O=rI@^mnw+VH(ID4LO&b$xVPimzXw=Vg=hPkjz+Rqz=FW^1JppQhb{k{t z`1mLQ_*m?Z1B0ACh-g+&vT|UC7Qf>152I5+y!a;82Czs`5Cv)F<0Pzh;c>Aa_;naDo_p29?l1!r+lv3W4K6=->#fXAK#T?&G`wji(jV ziCz4*i-!v96HZu>bzIB z!*~^=QfQV4Gb0W2a<;z*x;{i9F6zllbln3Nm`g;_kSs6b*j+k25y)C)QMx*F58Ci4 z$iF^}3^(U&R?QtB)^03GVaB0-gAv~ z3T8_s!)8n2GVV{3d68{S=emFmIM!=*aE@JweILXI7rdj&IJcLi^Q;u0I* zUcbDO9sTU#4UVMR{c_aWLdt3@5HC-5dXa;>JVQM zx6C=7WZutXXjQs_U*V?bXM~T?cojp0PxCy=Vqt28-@NYr$-8K0^f4iQ+1KHlx`j0^ zwhzpoW1jNAmjX(qHk|2Lf2QfZ_IsIjkksRY3e4D6QV^P!=KqbJ{^*fbrhh-^7WoC5 zI1_oJMZJk7Wg!L1L#I3`Jk|H&5M(Ip6^a#c9Rn2`Ud^|G3%ZFV1QYT%NIVYnpPI41 z5kAcfs3I!*RG*hqVmxZ~4BMIc8dd?qiz*$}aNi47kW&Wb#ruJjh>uZt!1c|O1iaNY zmS;jR-zav`QWKLQ_{hE4qx>h-OuGL)BXUzayuZS}pOGKGG28eVOxsNi6PSGoMGqm& zF4i|9w2)3JbFzie2PHD0Typq>|Gm7~emEDW8SnR9bjodv6liN*>0y=kCi7e0i$E%3 z7<0+EF01%17S(Kb5EGu=1iHUbF83xV(7QYEs!IUkugf3p>sW!1nQpnzfl8x;|3+hk z`B=n2m}t3y*uX-sf>T@OR$jdIaRY8Zl(lelcd;tw$v|+>QzS_b702pJ{(kECsoTcN?Rldfnsg1gtBx#7{xn0IwQ@g0ml!1pSsw40SS zvHGFr&0zHYjj|0AQ$33(ZNR@DsFzKF5mNBz&NlhGRA(`O+;T5aJ_FHCn^zv7T60qj#e+n^C+U$>DKsVpYUm!%u%DE4&}*(kN(-oD2IX zq1qVflL3*B{&pk2F32U(@%iAO*zAFy&Pg^9NkiSlqKdyo|9wgmq9*P_Si@KbzPGPt zPkV@np~b&PP=4mp2+i<*02agyGz0K{z$Vh;9G%Y!WO>`5zNP`3=g|bvfQiY8Urb*h z&IMJN@rO=_-~SpJasw(em~*mzW-rz94J-{5>R78|TgLQ(eV|CM!jc~%-Z=&#!mZKA z6}1xVMLYXr%=2l6dq8C>D7)AQ-#mmX`fejSFS9og829CPXzk7nK}C-^VxAP#yt23E z0N73fn{(3OO*Dt*KCrI|qvXKe95IJ>^^BW|T&vL{t}Q=FT+Ao6ak9T#L>>th?fsGVp9prJW^U-wqGE%P;%T;Ro8qG8qeST*>0b*z0pu6D7sS zwKCCTi~lP^OZ}ahJt@?d^f#e|(`sEh2X=BN9C$Fqpt38i2f5e)Zu+wzSa&`HDlg=B zn|&z()R4Cfk{b7}bT`zRTU3T-V`E&4z0+XW4FhP3k3U%*zHsZ#V(TS-Tha>9bA{76 z%Na1q34RBWEanE)oqCREQvm9}sh93I&uve34ZYXjlg82zX}vD(`=fT6jSaVu%Tw7ME<&gRttPw=WHW1x`H;XNhN{fm{!v+}keE`iE=rg7gDYc)}1U zuJFSa!l15jElR(d2Bpg!ze(Z(b`a+onU1$H{4fjU44Ls94-Yb5v4jPi#b;O4bGb(+ zki1+bqEvuXNlHqBr;+LR`fC;;mlF8hF2;#TFw-RECXR~&kJq7YM0%urBzXdT*(yjh0j-B-tch3_5oA;14iSTTH zHeyZTQ=83z?|IzGd*L0=UE?okgHf$ghwr;oin z*BV8q?_vu=Xg9vVxyTE)<6qD5-V)c+2%?bw%Yux7V1(`jmX6J_)B(zVS6_~n9>~cc z-HxMmcsATu{xg!e2)+7t6;pBS`2B}8iY5Q}>&M=_VR`=gd-mbJ7VlyRDf!!53KOcu zhbSGrdRldI4WcBactlaN4$A+K?ItI@S{$7w8d?t^#H-N%}C>bEK=Wsf`=UoDf zVWmN{xlokJ5uvo_&PjD=3Sy%8ONtVq%q{bN<_;>9 zbg7ghcP*kr9Xk{=IJW>{W=4FIgk$Zk0Ah-KRVSR=idR`l0Fp=XTa^WJn;jW3gBFK5 z{{k8s3w8j%dS2$N{>PDA6wrewc618wAqcS*eP#WggS*p@4{g zzZ?xP4-2pnD}&1FEaJ$~Q9T>p)0`&_J>E{!O?uB24;^VN&`y6L=_v`H#Sg z@GDn_12+C|Jafc{UHt&*H>WzauT2xFvTsIzx$xK9Ki|@C-}a>+&sB-~y%yw13tmec zJ}9@pKiA;&)ogWx&9G)N6W-k#_a`K zViI3vl!hhL!WIXb3n(7y z{tiQm%LN#$`-*kz@!v+p3&Xe@Q;IDK8slc{L!Lh(b~#Ta?~# z5&Y8a{43t*;6kwRU)ofxGkSYlQta|YkJ?l;4^V2&Ojwn`>_G}pS|$^}S~Ru+XOktY z93LTucE^ie(A5cSOQ@6VzA7&CQZ(>n7qwf1pmdnEt(c-#h2Bu-UX1x(O-P4}#y<$J z+Ez2i8!!`6Q-5G4%&9t8(>#9#2DZnmP)tfqCmS$*|k1fsyg1a@B?c)}(T-^a{haPWJ@;}?Ji zonERGu8qgv1Qub31Vxs#m)pqvX_xN02^Z*~x`yren9WkR3Kd896|Eb-mpJqq0eMiF zQnoVGXo#vfZ0C-Q&wRZspm-9|C~~~tCd)xPK?$fg+7_aiqNbFAFvo!RKqAlkfnW0w zMG@$gl;o~1QuECBMo9F3q4pmTp`O3^a`KIjlIBt5c3XZp|y9a=2jM=Z}>NY zRBS=@j`cOW{-mt<3&h{1b1NF8M#Qe{1vGPKXs#foQVSnMC?*ZCb1Nxd1`ziIppE(^ zJG6R%g5OYdO#zh73U0Xj08m=GeL0}=|GG9;80QKU_d<2B%8Hzhx?PaZv+MIgk z;N?jJ%A85<_>ZOhVdOM@fe4b;x}}z?RjiOUqpv(p*x_v1dMQDj6+B46Vw4h-w0}s_%n!u3%RyJ0I{9rg@pJUS1tp9jypq8FV7}Pn2h*<0=4tox9n}@UP_IEN) z?FV`6ZiyQ#J16od-O{(h&RT_ewcmk3ArKY0g;`1ZFEgsM2 ztsyNJk~TXlh$+>FT@kI!3T)44{oJPf@dNsWf=@t(R_Xi4mQ}Ar0xn_)Gc6A!eY0U4 z=;hJscu?cz>w8KOT~UVm-(d0i-}jf^1n{__hcsPUkPD3BaKhoH5O1O!;`pA6@p8)c zQGCq-oHk&Q2+WqV1q<%l=A+744g{&g# z=28em6s{hc+oE_{!lLQ;RN{E&dw*Ih#C5d#v)$31DaU!ICEDGcMY?<3ve-jR@K3-8 z=W02S2HPX(rYJefx8%6>E{m7L{x=6XbApXWW(a>wX~^$5U5*9nn*<7rkwCh5eJnpf z2ok-Ev4Z(Jk-QPdctUx>=F5i2O2UvBQs;tL&Q4b1t=kk|`@{eoCRlG%63uT4jODj2 zK{VIAlqvsS@Z*rR%%NjYG*3WBSDxzj;v9k{IHd-TNL?O2hFBZ1?#)2bKFQ$N>_dkF+JNmy{WOyGV=fkFQK(IuB4D;PkuI6mZNJww+D}QrXb%XK?jcmw?td zYYo7mrO@E7A(#1lp z3|pSJg&805ZB&H>yQ{=39aE-+c6WY&jZwEcX2xdiALX>spHI9}5?QgqIUG%Y#B#a} zKM5(ojNqNjiDGU-W_ARk9R>c_(dRPcbUt~RoY-4f7{laZ!1pjCwKcNdSwFcA4%}CF zl1@wx=*R^#89kcriCk}lh*Y$NZsRnNjJ;qnFe2+T z#N_3aKJnP=%vq=5mv_08cBI> zONYJUnkDwq-YGL9t{(@V6`SY|)H&4;7B-p=jzJ^P$Go7{>(5;FrK(m0J0@-#mL6KHnX%Ki~ZsKi((hWe7~wc>%#J=JQ(Ihu=wjTgB69ll}-KtXj7E z>0eJ~-#fv9DpXUExLG_Ggf9lIeWY%3|7}5}eQRa5z1wN> z!Fh!l9?^g6Ecv6zlJT`E60_pRczwF$2FMlc_8Y5&YggKUjk-W^9Ff@R6gM;4It19aknGx>1`8tv;hZ`s=+M+FiJN{C_ zIJA-jUc?t~J^`R|GH}NaoONp-!NmqK*KJB7{B;rGhH62*38|ey zb#8Ood&8rfzK~T|)=Y{aSQDkVd00eV1yz^xT&j}U{8NU#r6oROv0N?#sb?+iXFw|%J!wo z_Q$_#ga0LrT321Rx0O)%aL^Jl_*Z^-Xi^6n;D%q6lpz?;SibOZ9@r}Y|3F$)`@zz$ z$&AOa4RTf##1@AXq<4F*(SjRhXFxM);p+#+@h_RT#jJ|^rlN|ZNWQX z+u8oxKl?mhK25pHZNvi3F;K>9gP_ZLk}a3I*^JS=#UV4-Yq? zhiX(`lE0yMZbunL!3P=#R*7GX$ju!gI%!^@iFQO0Z0b>sLD>+XjDXapN|XKe7211D z)r%in;;QL%vQ5j22z!I1q-@uE-LxzOch5k4%V-SLDX8}(_v}#?s$|OdhnQ>@v>Chk zJg1)fLw(*T5I@e)GCDVJ&Hl(-p?|BJ1Ia3Q3uCTW!7W;)~XVLKhcf30mtd zti#=FO9)kbcrelh8tC>e(Y@hHzn$K>ZTZ}2EcAn&!vtq4p-E$4v{KQvhzjo`3k-+^zj+B2P%3^7_!)7Ap zmXY$x?Y4uJLLpi!t+4?Q*b|;K0>P+W3ZGM6sAuM%fxYKnuo35OGJ`hC`{lc7I?BPR zQY)3#KdW=x;Cl|xYE%SAs~{R-aC$WqGOQ&EdQ=O}d`6#+ezFVt2gfbexB@xS13pV6 z?H!A|f!~5@XI9EhOrz6>m1-^_ldd}iQvcEWi|nJ&ppg^2rw)jjb6HGu+7CpKS!I+w z-B@=0mkW{gKo9Q6gwNHV%1v+>e@3|2tv^?hh zmpeI5q^0Kl2@NPn_-Q+I>?UT=;m>#gu%H!!J;(zQl1hMAdj$}GNeiC{-&Xmd`7K}3 zIsYWH%6wMuBN#dz=)8hxuKEyPenl_TVs-VWRhnyrAYzLp9S;M=DgRqq47ul#prfI# zLc0OBysaqVkrv(t ziGX8Cgu-zn@wD>*8N|5nrWFY{qdLXq@2L@V#0O(bd z(j~U#v|eICT4J|8PXnBIU+Vr~H$0y69S;lGp_hyFX{uW08ag^3%LqzHP7A2L;$|`vG5EM7g{(njb_u?9Cq!XQIe>DUGpOa&b$2Y$z#CCNt9tiVoWir2MHK`%lMZDf22))15gjlxb%SIDjDnjc=`wSr`u#s{(s)+W zZK0E@<`Kxn4px(jlebM_o+6?3a#On0;7F!;4fH3@=A@+Fvunf-$}%rFcn(HII105U znE)0+XaxQg7B^+c*DD@7Y@?jeH|#&Q-SbMv;OmFM7G9zcsL z@NerfnMigE;?&FcSQSd9pFe{|3Fk&?Qn6RljuKVKhao?1q;nRIe*n%&KJM4Fcf+g& za+FzWrsY9vdQnUW;}4T<9ILeE~(GfK=s*)e^}b5X}6X7{OxqTEh-RD!YFvxUKq z{NWz&a2cl^_w$){DX&ZLL(wq1bqJTdQv#UdZPMP?Sy-p-#qF~8Y4LN0ZdsoxqNE*K zkJ5JA+(*q6vxF{{zv#x>KC(_=Wh9#3hd@2F#Z6Hg>#Cl*R4xhccY~CjFVDfc^TLv4 z4*zo^&{r&DdcL#STlYW}{OvCa7T<+9;;4uztu%2@fzD@>+|H%P4wstw!?92C3OuB} zj=RVB@woAv+^tdABUn-wTbjPTB_7J2KNLGsOJvicH#Y&ZTo zIdhu$U|86Ve%&nT=XmfG7V`BplBas4VhO~0Y`6F_e{47Vay)aI`{-TR4Sszu{6<(g zAB`0*c{eyf2p6EvSCqhH^EslJK19VDZSHv5qLUa~d6;8lYcr(G73@TqY?v9amZmz5 zorYfdMjmFqRqbL)_FP9fH>iTXL^lyYwH{LyT1!PJ7NPdx>o7a-EQy@j3R%Nl-q1t5 zS{aY5lWDgYOQ=gj;3jAqAKTN2K3e4~etFW-GyZ^V#UT=^6qTyS?x)FXH~j#AgbOh3 zpZXvPSz|8vlflx@8KQ^hum(k#&EA-$28tQPd-4EX1olC9cZ-*zXgt02#W0|n(X;7qm+6OKoI+_61wo|xshlA!9 z4zVVSSY!G%>KTYKOw+&@c!dfJpn~{=oh|0z_sjO+T;!Ua zn5|6c?OwRZkOHyr*Y%&(tUz$5f?-3rgb~p7ts2gCR!FCHyIN=q#|5eQJZed(nvT#2 z>gYLfTq_Fk37WUCjS&N;bG2mN1{fMOXKa9XgHDxD^J_uIBR`EbeJSPJKxVyZpB8&a z^+S*yX+%|*oy%wZS9^WbQB@Ni?`SYY>%Q(7Y$Zg0=$BdgUYEC>c6FKe@=x_T8lNnM z9}RH${>A}BHeZrkWX#b9?bW@~ytdLbHLns4RoO<%$4g&bWg+OJ<9cylhC`jyxh~tu ze&xo^hyGOsGO#&0rA6*j7Gvlo+H=~(=`-pJ>v8305s{7DtE7kL9yRHWsc1Zbt>`G* zln0Zfao$rB^IrR^IPOl#F%<>^H{nO7vCJ=SLqQ}rTKEBlg`hjIYJtb?wf4dThlY%) z+}nJj%v%mrU1^{5bz+Q@WRYhitLJ^XnA^k0^9=fg=(VH}Mj5B=b>X8&163*jw6Hql z^{qQG`6ZyGB3;Or3$0-G>gW*pewZUZfOw(MBbS^vhkmRGo!q`-vz)}oRqWvRTJvWd zna}6gt!-RQ<%IoV^;P}3`zn-ILKJxg9#Knyy(MDBK1*i@$u)^*Q)di094T?{xp+dD zdY5J*RzLIJhVag)#=tvqQlD{})DgqUN-q%LV z9vg6e-q@clA4O;x&!1f>1au*N-`BuNrY!Ywg+0qFo(t$bhEu0fo+5t4e;XKm$2&a+ zdqXUGX*m2ssgH@a%UIa6>xf5Q6|7ZZ?~Gnxz2$gplAUL#euYdZu|cto3a?o}Fcizd zlxV0qMYu0sD5nrgx%%ti2k=m+S$-3Xt;msVvYMh1o(uCx3UpQ-dh@~|HUaDXD6#1O zk{miIgfjieyHg1M@9_)HY1|(8z&rjghWcO3^Z>^4rTFp{17(_<=M2qbFQ4oDJLf%J}Ml2pQr%eJQ zdv;_iKj$a!#1qMChCWqiz){z4kCaQ2)q*YgBTGsyxEN*^<=Gs+NS%M>7W5I%q_eNT zaD|f?9HaTr(=p6UNm`6+EwdWACpP(!6+At9Xk-P72GVni_e3din~>p(cLzV%ai1O5 z1LuXwij-M+x@D5&6$Rgl<9TlKBOe^@ZU=tpT3oW9i z+ljpdppjjslF7U13ePD)QxO!~rA9WZjX(AHcLXD!J1wFzZX8)%p))P($m+mOw*FQV zl(u<qPMIPd+X6U2y&WHN?a?9)Z{|cWqF>#L3tHniJLl&%By+Y<+9fuv z(ZYD;g6ixT@2Zs%h0zF*i+L112RHdwMmYaqPHB^2)o7QrXxG>^u4w<%8`E_=bXeHf zSf-`4>UOXt6GAK=42a^TB3C_CLoVf!kbqTyrS}+5E|B4I+zoJezq2T(fVfSwq&zON z9sBUsl1WMVOOQlKbu1OgOqW^uL(hCMMHF%e#Rs;SWQ!;|AU#V4P`-sSAxj(k#XYR? zia4j$W0?Y8;d@44Sdtt~e3MPn5Mz?g=48L@aN~g2eu&uMnQ^OqL13VI{QiV!W9S97 z{S4^)$xyJhuR*tJAV*wnL=E;v6|&PO-q^jh<>Se~k;LfjOHCI|?i;bkL%eIp>u^?yy*Hr`~WYEpH0; zv3b_?xcObwe~4-fY(2{FBBC97*h4zZwI4~Fu(Kd^TY)CaZjG79}gCbvSG|RL_jA^-}_Ry8Z zGa#C0O1&)eeZpUd=A^EdX&m8!YdhmG9Afik%4N8FcMF&Xy#JRj7JEMK*zZMqmPk>O z7VPc`F%zptn&dUm%(71ax|3Y%w8V?Ot#G%5r_)D#eh! zh%Wh^Cw7xF@{zeUSGB%t8u!iEC1Bym&?|4Ni{?VC@;B;V`rSH->27a=W3}~~3=EbF z|A>5d%Wd%V(A2VM<~MAb;*^Mi4>nA{u}xE5by$sd55HZ*wuV^KWdh;v+E0#V+~m)b zZ)MB>JbKU-g(eNEof6`ySmst<{y7I{RjcXF*=Z0aCR{*d;Bi~1DoG;Q{ zZs?ZX>A8%Zo`Qa#K?yWhs>WYpj@nU-CKQA?W5|!)-RRHWBN1N)vM&OdJIPRG?aMDz zLywH3%%nF=ffq&0y>ev?T*r65KUZ}tBM?TrS9mCjqc3rrMa2KK?j(Vv_+H+^qVGWF zxI#N!P38{aJsUFaJ8-kL10Bp@k@v)n%Q}6y+_8dnuQ*`Pe<~Cc!I*VZ7B@!WR|+hq zmY&TG&dJP>5=L#TwNgN0hs!M_cy(D)X$es;W$N24m?e!Jov|mmOn8Wj4<%nhMut(0 zzeI;otooAnK7AwG$UEM-Ihv@rUX!uHOf*Um#gLP8EhZ=Gi&2ntmdlE|9`22k!b~Vg zpt8a>TUCgg3^tLMF3bCoCMT+PKceM_rJe6ty=~+=LpQGJPq?k(a)@nLzq_!S^K`gB%ubH>x}_{`?Jpz!^fR@3F^hqpOFhx! z*_Dz|+u2noJ9XC&RDWle>$VMSM4)1$OSi=!KP1EioXM#6Qbf;!j4#miGY0+;B;*hj z4vq`yKSaebDLp0*hy_&O6;QeEA4(E(37VW7-6(-{AtrYC^5MR;LJjJuy0*YZTS*me zHqmySTDL+RD|+fB>yu*j!yJ-CE&0chcRU`rJXeR`FqQ7(76tqf@o%j-yM`*HJE1Xk zNmKb%hI`$kk{NJxt3~i>ojm>-`7tw*;9BvH(}`ynl8sZ^Xovuw^#V4T|Ju4xpp4hA zB*xOKhNtzDaz*l6^#_)C$#;tNV?|0J*K6}w;btXc*QS}WVL18AN8%;U=qgAXY%oJ)tig70{zG<_g>Cd&eK7k$1$jR)4rn z-Xd0hFs2=LBA$_M9`?xuQ0|I+jjGS-rhM~M$(+O4h9~aaz7_jsZ|zQe22j%~k_dGv zCVOoWJxjcjCeM*Qvn9(@d}oY|P$B7${}%LnNRI#~{L8ofLLGC7IU0>b&C@AYaPjCZ z;*sK2h8s+L3imiWoJ%Xc^U%1QZc5|xcg{}y6+s}XhEXNJQJgr6FPOXuOAsRj5&D(N4w&9$GC+j8Ye;inYtMDK3${e`t=Ewh~Bkvc!@lVF5`rci7 z#o7JZ2D+9Qy~W)g{w3=c$fB+pM|g0qc&dXL3@W#GDlEu%vyn%rIUsyuDcqM%O^|u5 z7(8=G>`#ka?aZBZh&WUKTcx{_p80zoJ*?_`67?nW9v8}KKtAKqg^eyL=DC$iSV5^u zDTXnm7!P7G3v;dX){PYrfoHl5#Nn4~*OZlCw-(uKI|xAvepgnXf*itj$vg#FgG?@? z4H1fL!_@BDcdzIz3hEy6p&pynJz;9}q$!|SirXj7-}2VcKaLQEJ%MJH_govKuf)x0 zJ-QjsFJUrEWQD{xq1uZ>{i3p5G5RsGR0s4_%Lx%*R&I{pt6b~4a(<13Lpa`073}zo zf}3MiqKKE{8HEQ|20`_(XxTWI=Kfw8crAIr(}b9_PGlJN*w21_}$4LgYB|2y|v05&- zsY6_+lR*illNq|s-ap9oo{l)RN}#|{3BOX2c=V5EOGkW5%jQfDH>HjmZuI zYA!Kg<3gz)-_~!Hsa@0gGsF<)_)}Ic?laT^M*~~=r+{@VBBAn)L6Ns`Clfwt4OFUH zirC5A^d}Ymi#LD3eK@Q#3RK77729v-XwZT4F=|qzV6$SdPXx4E*E>{f<*KYp`7L2o!4X!ECq)OZTqQ1 zNtKvGi`!&Fivv_4C2al&0`u_ExHUhPTd>`OO@XyJm58)wiO7G%uvcnkC$Lxk)G}hF z?kZ|vrtXSpSSG5&K?j1sgcc5Zo&iK;Blhw*mKm_vc#v6f=rhpx(3!&0bXsBG7!f=g%UDuZB;1w=oRJZ|QW1iKk5UmQb&n(w z0x|ue!gvmS)j+A4!uV_vg3Yc}5rPJ~&@OHG>dT=_mgwJ@dzoiJBJ%jBsE{54HSn^6 z1MspsObD_(#qhEV|ASXCHfoDV*!f}8c_efoRo(~)U1LD1nimW6d-WF!m)jg!E45nm zu$OB}^e%48aF*rRDp#f3St~Q-AkNHKs7K>i%+QlUw_nnUxqukBY#p_g3m6;VP{}TVYS|Xu$b4w3?*eV`H!i{{$u*TvIiSkVIph^ zbfG(6;W+GeW$e}~?URK%*&@yCp_T@~%Kk_}WSX&@`TkcKe*$El6|gcFoB1uqtWuE& zRJIh6hZ;*v$Qh?Jor{779Cjl%>#u?7$->t_x=>7Ac-sP;|Cq|xYOF#W_^$jGMKiPY zg1^PQuU4kWIaI00c|UFFBFF#0zll0@aaRRY@E5jw%zuN-s91yvILQ2ra9hkxEp6r_ zz?u_9btk3;s3d@RU2V7%BN}B&0&qwq?(guhr^D`x|A6;hY z{YnM)(0F2r?r7py@xlh(kC6vj)F}(+`jSC4C!z*}{?K0G!cXYb ztT3K)5AwCP;G*A~4-D0}dERz~GAdsUI>16idPFp26h8A)L`5SCW@5I$8?JhQeC* zmRwo0HIcj1Vd<@P&nif*by2cMBFQ)Ol6F35d{|AT>u&`W`ir~w;63lQS~42N{V0;5%+4NiB!u&CY1 zo=5}@U^sQiBztIIBqwZWf3SZ-@5%$bPcf-Nx0q@nxzi0$nIk+?5`C*hYd9j2D>r~YHD$Fx+f}gYtrD?pvV6~kB55` zqsGVT(Wk|)pu@-NQliGMK#y009k+oUhuZJsqQN1;CxIG1^Z*=+xt*SfjMD)Q(}wP| zhhRk507Ec?@1;X9T|+QM0%1civism=&LQQ_rt@>6`y+cRO=a@S7>e-QwCIZJuvD}F zG!8&Y$lVnLO%}So+RCs@*N{w6J~5$tvMRR>O>QYoE^buNA`qu!*s!T!9FsK?V3jQBA1Wb$F0?GkNDw(swci{mzlCn|RN}j784`gZV*< zp3i8CD(Ia1M~;^^JdH*{G`1?L1w74+IWR;(54A{>&tEE*V|}qBF^%q>OWcdOsk<%> zFB6VEns%U!j3F(>EaB)6OWf}JENPS`E;0XG`iiH6kASspA2}ynN%`rax**X9XY_F3 zZbr`NcOO4ap!Dt`b94ZA!hhp^^d&&F?KwdpJe@#I-S<2NXn+99(=!f=t_ClVtW=G_ z#+YdXG4fYx*~QwM-JOH8hDy?Zzq#5ZHX&X+Toq>$fN3&XHNgA2^DhLr3C3P zMux>S;roly^xZC)*iI0>DGU51�ms7h+sX!*^@O-v-PZ>ss!%^z))&fykn`AHyXR zykGOerC&eT)sHK^28u>d0VnoW)eV761lxkS4`qTQ54;~4Y`5@OmI~BVkt=|8sWlt? z1!n;o)vF_hDEP7Cekoh=Z}(kHGRhH9vQNvXzeGpv$Ho!)fz+w^tTvgZmq~Z?f$j2x z9Z?JM@6Wi36z~o`BX%K3sp-S9IapCzt&(a`bNT?^F$_7AJ2Bt-lM%_PrI~ya-8Z~& z87fa2nL7%J`XuoYEn%Jsj~Q|b?;Y@4(ILh8s#qES`8);20Lz)fK2gSirYjH*IR03< z+sGbNQ)i=`kooKhPssjjo-{AFwqbw7ukc1E=RTy22E$%lxfTWG+R^f)j|E1*27w2y zZ3pZpS7bA8uab%OAAV+8lW^TC$Jmlz2#kg<#O6pbF<)a%4TTw7VkmvdNh_BS{--2M z^Ixv_-zV=841dE_zuZ7m8ujg+R#__ApPDLAx_m-mc_hMXF^c`M!-qP$7d-p%-I8lF zq7MFo8;k)KEQ}uJlIcSxUpQwNNhXJCSy5B}0gNzv?B9~{+-2D+i;oN;3{f8YZZ>VE zV~e(8$uBL6pOW!-CP$uA_)Z?#X!lQdS#hz|mEX-#s(v>|{vQCaKu^D`fP~?v8>0%U zgaycOD2*-16PA>p@hj!6WEaOo5r^fYQAN=cd;s6`i(v!s#iA>|Fu%Zx4TshwJTMW)(hnZEzQRg9~!A;aFXP%3jJ55`mwcCKem>txQsJGM`*DW zma$w6^)AL-7kshXp{#w{5;%oaO5T#;P};Z3rsF9ZUJ-8|zM{LhsBjlU=&MCmOh$&%86vW;SvgWR0y#JuA={)@kRle z6Z(OcnX10kFKqs+&z`Xwd{froP{@Lwg_S`eQX@(S7v?EX5jFUn7Q5;O{wQqz=PwkB zhJL}?4P5wl-2i?7QT(YI9a6-*{06Nqvh_B@N6@|C0jq(|;qd5dC)>0cW9!ozP5(l_sF{MNwYSj_6IS zyJ%w6p5e0XNXla);3w!E3Wh0dhov@@_6pN_2WNo9ymRWKuzyizr=I`2GV8^Y7Fo=$%uw337`G&# zn71Wmiv2^GVM?&fwuZ4X`! z3e}hXB7ROZEN?P>MxE9B;p#HUs8ru}uu`Ff_h1D-kI4rstN-Gb;9E&slu(xBl;Kg@ zxdgXlE*}_$;%8UIpBfu{S0ZCqZ}}pqxcjrtG|76IVQf&TwHAv?(KC@E3?_znvU^@x zQH3ch!!$2x+I*Rlav?`DA6HneIbeuHdB+G9K>(mx1ak#ar_ElA^{_6Ox_0c{x<{8r|u0?!r$WLMXYD8(g=PGQ5>E z2Bj$?hMJ`;F$7}t*zj+ZWDWlg{P&rY=ok2`B=5CL!AyE;DZ7S&()p!$j?Ct@J@ofl zDo2`2?!!`|VSME5{Zw`EaQTO<=x-Xn%bmQU7pBFfIf<;_UhaHGf#QtH_<4!Y(#oD} zG7gkhFKwz%N04Fn**K>V_UJih9^>sjbhuXOw6m$42s%R0Vu_< zF9*Klk@=OS;U}Iyg^72i#kO71q_U>^dUGMX7iDeOxGe7h@_ed-sEOt}fPvZ7$hLHk zxB-sSn5xR11tz<{buz`hvNC=OOsq~O2cRXJcW zWLgJ}uclTgohJBsi657fMnf)VsTbPR%HA0KUq-PDPbRbtN68DHSsmPG2Ku@^oG} z_*gX-P6)kqejt!1SLB@z1|Sa&XzQf#DAs6EWs*^$^h@{!q6)h0??Z)q;p&L4(5Ukz z5C70s4@zI6p1oX8XlJbm)C@JL((6ZLJFO$Koz@YVnxTfitEpB~{GF9vKe|feb6?9< zBD)&I^-{^@7$@fRA@OU$a~PEVQi*3o6Ud0BI2p*5&G+RR%v_8U|2*M#jUJ_W;TMQn za6WUY5?d$x= zelKQSxLr?x(i0gY#GYUTkB~(Sm2DMzE&=&QIL{IcVAMImHD`~os~afI1HV8FNp<6p zZS(9A@n314SHwUyU~CV=n4!fy*c2L3iXY#iv{intO|?Cx+%-C|sdnMVv^Htb9NSaI z9ZZ9wB${J;%DSWIk}dgo%F_fLs*dcqAM*bUuf*wW0nZc8>GbHPPa)jVz;Q?ber2&^ zWo7YcnFlCMudH>CG!{Xr_xHtQzv(mQ)3L0;rp~9!rDKQYoLU&^K64g9^75f)_SnKX zNHT3K7;pi`96K}v+Dija`lPaD)SSd_H#uGGc7wN>WW20aL)?D*;^hJ&M;oCb(^cuJ z$z)U&ZRpGD=db3+a=_OgFXiwzL|cYd6(psK$@=@Cw|DV7O-PQ`*#7}AtqQM_Sy?NE zAwgx+L0uPy!@u=a>{=;GcU8eIunKFXBdf4h8tVSi&Wfy6|0@fbSHu{*QczW;P2CzI ztBPAgW8W8|MlYNKKyeQOV;wr%15b4yz|_Wa+q zg^*h~Z2tnZ?ybga(9L}OdwoX9mE5vFGz(RoM(K0-1!8clIy*A*IdM)B}p+3G>* zx2R_Z*AsxB@%t^(?oNeL|ELUwjCZQ=gVsA$rDe^f0>j#72MpqMItKhZFfqU@%k zC><1Kom#T0KhVJ|sSz+33|tsx*R!GYM3iL+{<@y+L?cVj)`U$gjLP*u{!mk{CR8Xj zt8?W)iuu4Qm_HP)ZdVIXTCuv<{Grk`+b*I*bv1f)i*<|_eH68vq^_tg?)^v1Pgxhq z`qm@nf<9`Y8ZOuN;e&{s>y;v9-?8eltKBY^+qU;sOw|SgYiM^X(XVHIZt2(MfWD(` zWHoBY$iCo_1q4JGM$Z~{jSi&~Yw#%mj?rz_O;_^>1N@^5V`UAy5ex>@_Ekc!8?wT3qM&-raD0G`va;0RD#G0byHfbf-7cW^+bv8n};VxcB zAP%T$s?9sqNt8q-__wI0NXr&MZNkiK$Tav9h5 zMANFa1ySm*r3DY%%G3w$uE{#X%J}8q(zWcC3s73E7SGg`d=6I`zggT~@rmBu@`pcWs6mztF^e|WL%Y_HO(<1(wsD(I^ZiZG4yS1Qlpwj zzi8Dwe#>KN9^>cnwqELe!v#Rqw=j&-t3iWE|(RYH*I;NA6zc(Q?(u=>0m=8==rWHSUOrzJ5G{EM$|SF=(22K)k13-&O<_4y1VZIWS( zt8dpfQM$UmHb>OjCfibxZIe$0jmqCbKYg^mUE4(I&HC1nYT*hmSliqk%iCrTXq!O| z>{5WzN)341yllVCeOYXCH-Q0js|I%EhtjSMxEWz$fPD!j%99(|wM~?6Y+%U**)~}w z$hPVDTeQve)l!qz0Y7V?I^fFIL3Q|QO9$L|H6K*h)s{e1BOes&J(;Z<`}#)C)<$F_ zXKN$>*vNgL?k$Y9J1&LNk7Id`v=tN2jkvY;If(bg@+#_ip-((Ze$18KinY6Ep!5;^ z0#OAiJdO%8$C*aHIParosF@!%d&IRhjPj46RKqg=q7H(*;PxFK8>>+^@C~|1Z^{aL%W_9rBfPO z=CHD-XjAzNM*CXU$OhlfAVW&ziB!d)-+x zzvsN<2gB^_sTP}B_Csm@cph8fXZo_=*l*blBkfy$!^jVwHt|YJ3#kRAW8%GsLnzIU z(|UcwFiBhY2HS9{kInp{$_FIDtZ-SpT@6L)x_GZyXUM5N;Q1QF$KrWUh>>VZaO=3T z$C^^LbcWJb@C!s0r0{)In5Btn1U1nV8g*Xr@U@!Q=|O2M`~oo~HJv7q;k`7jT7pCA z+f6cLI4;4Zee1OZ=dLFeXdUL(CTa<;GtY^D!H{$3o7m+XN`G(SHJ=VSh;cmzv9l>p zDB5Bc$JK*6zjH-pn%d1_QCbszfsa{g179`alcA@!6V~NTUq4AtF?wdn|xV)=)>=ImUGMRXem$!c2W8YQ-E491>2kQ5n4KoMhYjWFv&6uN^2(Y zZ0wg# zu9@B96-rw*SgAA@E^LoZ)%A@D| zd{DDUU9Ru=CEN}crW=O4xw1zs`20Wiz68vXqdK^x*+c8~wY#>l4LFOz8{fOq-1d0Q z?2Ojd9y7ye)?ORqwnl2r$g9gzOS5Cc8fzfPoMQV2*?UVGRTV0n8By35Fbo zAF#RdC&cFX34#3Yy{hW2uI|<~8sk-VzHcOTb#-+euU@_TVd?3!qCYP^o6C1LJ@qY& zjVSdUz6DEbvx=0)KCDi7Xl?!tHX%^OYYf6@69OlEckSUf@Z;&6JH8A*?u2IkU{=6l zLD|t2+R-)f{=c5}+tFD1RrueGtspSIVpi=AYRb3o+1^nlaxlHGAE{mB6Va(LmZ z9_7^EJ8xfJb3){!P)R67@0Ci?H%O)E-M4eq@0t^de#KFY5yf~C(YG*)oAEX$YELDi zw(p(~Bky?$%VHwj3?ZHatJ<5-{BnzFAtVem%q3 z?aI4i_Pen3UG8@+a-OO#8t2RnT=K>NDV+xd`IoNoL#kN%!)x4fBd#_4pEa+PBE>6! zdOh)4KY|HM&$?D)x;OoweK3F5`T;GLCS?5!r84Ztz)$9{^#fWg{rt6xm_r3xZV%u9 zEwYd*(Ek0e-9Re^Azq+OBG7)=7ihx=71@peTI>;Z{HX_E(hfQuzs2r2mcIR<09w58 z1zIk6<3L+F*c#BHFir*9H~iWQv?!tDK)WF_ievkx@7NxaW5XVav0&!H4Vz*W!au{jlGIGx9+ksCW0pP;a_}P!qSJarFV;#HpKxp zBiH+FdMtg`^=?^*+~qDg1#Ew@Gi?k+{$d>Y zL1*Rxy-)kLhNZ7~w!*{P;+TsBLUwF-E)w5-FKie07oithFK6t1O8buK0+!w{+uta8 zz&{84`YoltqbJ4EUp?D{U&#zZSiiBs&j3O_=LSD{GL~L`Lx8S_i#QIl!E_+8z z$H4$g58dE?J=^pqSd3TR;0J|R`mP(?iy<8h`0N8|l>1ZrNk#Dc*bR>0_t{T&34X(W z>Jt2({ij0kd!eG-AGI5reU2{9*!CPL&T#8=7Tr3Xn@HUIZsAF$-j$gyyv$MAc*H2mJWO<6)my8DhB z9qF#Kge2YNYX%#6J#4)PZuC37vGl1}E&o3UM-z)K9l;{O0e zGB1UzHyVmaMq%-96D|LZ@&<>+$I>st|K^t(!jI(NC;V3A7lvb+G$(=XPY_1d-V|bI z-z46>6K)A<00)p?h_{a4_`KicatLxNIh9pO(`Jc zOx+J}@{=EV3?78Jhx;8|l*{tqYPRV^P=8FR?+8D!G@;i& z=PzFe@4ps`mr`Oz7r1-{SgMyGOU1=PFIgfMDj`~alk$ce?KfcQhv9!Swue4OH_`XZ z=0hp*w(p=c=QD8ijg%tIQIN)mMZ^D-@JXPkZ~|uYYsDqE zxZV7^(3xCT!7pD=mt2tlj{p~QX{US6;ITB7)?_JL=M;&TbK3lMT9-q-CN0M!PaBs2 z?4P6nj82+Qa{_?Kz1ZLqo^RPn_$%|8HK_mqquM#a(#GTJe<=_9}< z>{IHWZ`a4t>ty}^CztV}6l2d->hHGeW9dsXuG1cftN(iwWADlM?Kdp_E4}{K&niQ9 z&XSF0$OmO`A;}k9A`@|SlfV!_&uoA#aH;9H1+esT(=9q-=M29dx{`q68%$-#D|_&A z(b%0zqba*lEPVz1Z^kC5!J80;{2^TZiP|8$;1%NeFPMIN8B6~G+xbJ$&TSugEn_D< zEBrmU{)MSXZj`S5gJ|lUtY4E@`n&MI`Foe)Fu{}!Nu+1c5>7Qi9-2BBaIWNcw z@h^lw@=Lx8fu~z!YrY)DigJ^!`MYrLN~wDTO8F~cA$a22tgnXOmF368+QeRw zo9>!o>}yI#9JL&lUbG-O@?6{P5c=`!@C&$gFz*KI!)mrhGSnBIlJA9Xg!_abmUpAC zFS@|zU~S}Q`>`9RK$c?VbqcLWHBKYRz2 ze+sT1To8-;fhW^Zv&c?)9=XGge^B)8Hw%6{97|7Gg!TOtAKT_H$fm#iPH6h6aI1gO z;~%?75d_!;_$2;azvxF8VCf-j8(YD)w=IgcYwv=#Z-=Yb!v9_LtZmBA-*8iyzu}N* z`BT1cz|ybTO>Dkhyyqq2J)0f|KI7-glMY*irF}U!pTRawEp3d()4hoh7B6Z`&||r5kP*me+Az9ipYVo|*YO-bu{eu; z`I<9@ypp6Oym0p#&dmun{3>zDA$!CAHCz;Twat6V-NNrD*GSeDAo^tBW-q_l>HRb9 z-ec)2Zx+WCUMM|Zv$fKD-LN)$T`nMJC3(O@n0R%*$La&`|ncYAc)H#(TB-J%{)<*$~-0NnLe&oeGod>kRJMw<>gry(Mi+TE$WFtTKw@#lO z^6R0zO?yuKmryjlR5-J^TM@IJqbT8S$*me#=b;#&wtIQ)(YbP{MRHO!B*m;l^4SIYq1r4 zbovJTSj1Zck$c|`yn1L1*5;!Hu@bu;p;lle=J6*x=gdEVmwpazKO|rJQf?Z3n4PdY z^oK+_d{n$?ZPA(CGwh9xrDwwbW^4s_@#e4657@n%if@9wt~_;{JhAxMmfRbk9wLk~eyw=n-xmF_HhdkEQENy2>dF^)DL8cPL3xqTJ9Vt=S#I*7%$)15Yk4q0gfg#@<`<+Xh&ARQBPy^4$8DTNr!D zw?3BsSg(K1XAxk23B@Ot6@XFp?T0Q_kK1uByIRV=FeYkp~Y^Ox~_ZsvhU+x zv>!ibz<`@apw_mE80(-6=e6M( ztjunECmc`bzdXDdO3t&C<4buGYZENN_ZU8jmDvm?A6@^(l;zChN7l;u!O}0)`WY^sDLHiohlCHVuov%7VreEvtec?y&`X_gb>$iOB9K8ODynY|z z(>3?}&8v=NOXVtC{{hT33iajle}%bF*WB|BdHr#;ky&%k-SYXb^Y?#R-hXhAp8x9) z+|IARc@G|j1eI#pE*!u4r{vlqzUpD^}{`kG$Jz~?{ z-xA-v!ly7AH9b!|?ajZ!t8c%GU;W=AUVYAW^_5pSO_g0ueHz6Z^lrGC!3?K!Tz!cVPvE+maa~>Qx_YMTiis=CjvKxwBCdEu;!|Ds z&UD?|%4RUL@A_B2zwY#Y+U`A;{?3wL?_cfe{j2eywREqB^$`T?MF0ndA(Sr>*vb`Z|1%F;zISg#}50g@lL)TVvTpM<7>=jFlqDp=y#OXoX7-Ndj7JjHL=!F0k_%o zJX_zN{eN!t?1K2tnr!_rHX!7z_rpBRVA|&O7bTaS7hZ3_5KC`c_UrydqWe$77haSV zn!*{(bG`m|?^POe)FoJYpSv+QNh&4yaTJOlSQdyHiJZ`@kvh2GKGD#BDh)b96D$qi z3g_Cp+AHIIc}HYl{% zyW#QgDUUl^Xe|9t`S>UK<7{vXJb2n|PJM@N$I>fr6ZPM%zV73p{}^zzOKUz6`qcnm z!*lM#AN%25QdILAG9jWDT~ zhORt|3f2}+PHc&796KwsB?J$wJ%w%Dh)=HD4iDgu_1mbW$QgD6us=@~wN8jIEISi^ zZiELSSa#xoUGvJb#^Bv2t)-?0&I+Fil=_xX-^m*{;(dJIDQZWYZk#IKwiX-QbZO|S zEtxHwLYvn=^UTba*X=qBt88A&qFb=VEl$s3FtpR)Z4v$`-aUP--4b4&A^XDElk8V- zR9}6jduqn$WoOyFUW=D!>vi~}Pd*F^gk9hf z)qBLN$DBEOJ?~BbNgB`%>=Gb4=!PCqf9NCyoQLTx5$|po8E{SO=; z?c9j-Ec?BGV+eZ;JdLvrfwIKC3I{qa1=jQc)3fA6V>kH%&gvboN0o$$WpgLln*x{O zfU`${gOZbnwXY2e&^m~q#aHRNuxmSC&tFwMdEhL$^3NV%#gnhvf}8mUxh_Ql>E}3m zi+A+K(Gc%D-Zga0z}QXB?t4iH+Dq~6AzwbfgYorD^98|j#xgo`vPW+^Z{UN;4!F?6 zf)}kZwy17a+@m=+#9%u&ZwwuH5@Uxhvr&59y{Ymrn8K*t#iD!H@J32{A@6jV<4+jB zoTyuzwxJZ4u%hqvmxaXB)icz(j9K~+C2ZEb$C^EF^(VP7%hF3=74U+w!{R55X<7cn zDz^%7T`TeRZ4!QE!E*{_KlG0?dJId5QcD)9})edq*(#vXFxc z$Ig1n2?z@>4+&s^IeZ0gTUmI2| z8~F(T$XPY}gnuI-!1GSt0yzK4Cm(pyrqHRdr~Wu3&VdMHZweua#n_u=XW;j}p{K!^ z-Vy>#5|I$}){wgUaPAm;8B+-|H`rqdQHlU}q&NKD_XQ`p( zKlijOcGX{m9Aqt__JbiEMPtps)F2HJ@`toJ#(EzPJxPbEkHCjrz}R0YEiv{{<%)3E zQEj91IlUj}G~%F-kA*I$v-#s8^>ZPP;;uYvfR^U-5=+27eL(((eQg(@j5XHJ^2FCs#CKG9juhBQB zIsSp($QyUP^&jmUE~4@4F1T{tdQjUJ_DxubJg{HfO3umFfq&VPU6(eOrZam%_x0;D zwCi)VYrX!Hwd-x#^+npXUSGc+(yo;V@$`2dYwucbe^R?XyUDda{&TeJr)t-iXxF!C z*Jo(s*{9vt->>&yTW%KBuA4pIti5My{rk3dopWD$#;dQtey#T}thN90Cik0-C#7BM zYrX$^`=i>mzP{4bRsIcY_x1XE`}%lq)UNgM%xTv;yj-AN>+7Yz zf1`G-x2Nw9eZKVh*W3Rc?OGqN-o8HHmulC0wQC)JZPBiEc;2L4U)AKgU%QTJ*Lr{2 z-Ji{_ZwWQN|2*x!j=%KvYIi)P6~2F`c0H(FH^VQ_)~@yT|4qBTTD#Wwi#~pRJbHb- zKh5@+zMm4>by~aD$D{8*{k(66uk`iP`=ej$?dkaD>Du)dwQC)}e@(mA=jT4{T7UnT zcKucDdbROSUc1)u&+D~oy+8VRb$q15t6pE9zjo(G?|--ZtIwZ4Kh5A(r@!>|)Aw() z{h(j#_+E#H)0*6G1~1Lvtr`8e9iKLvua)8xeLN3p*E)WwH92pZ z&2O{!>*Lq^qrYEoPam(|f4#mwfBJnLzIA%B*?jNPuA9*l&E~7w{?*4jt6ev1U+<58 zel**k&EQ+Fuj9)D+I2H}vf2JF^Vy6)Xcs@}*W=o?PCw}M zwq9S~4?4ZnjDK#%zv%d0AD<4N`uU~Lx89!@Y1hs6Lo;~R$JgwA$N!H19sfK2cl_`8 z-|@fWf5-oh{~iB3{&)QE_}}rr;5&&_XNNT;_S9vL!*1}@3x zinYU+EEH={M?B$v+*6MascDt%)^gc&SM=*w#+zigF6nmL#Nrw8!BLJ`J4U(04qQLAiKTyLvc zxqQxA#@@la7znbi``D^n6nizSikT|#0cA2~7RuMbC=uG>=X%BrV|QX-9DYX_gWZ-Z z@nWaYFbeZkD`mmEM8Q=!G1=S#uQ@hf%jGQq88WMZw@?!s;OBDHFe{aOu4?g`FgI|U z-&`=QQrUurDki@POPfm@&|LsAIUM|*T@ur%3>Sw(TM_P{gUM2QF;$^yfp6E8z-F}j z3V1P%-78vH)jXUw%Q#a8OtYwrYs6O{E5dBZpScqLa#prt;HYR;m#dapz;Tv%50=u{ zQL0|5Lg(>Ut!h>c4dhf1pdDk#MS+`T*a~JghX7G3i?U*^U{-Q&FkXVe$Ys%1iRMHs z1i`Rj75E)K2e`+JeCkC(O)ue3^GR{Hlq;BZ+PlykUhumxlmc{c3HCCdZa#_pCd^P# z00y6;OJon%%MyN9w0ENNIL$qLpTuzo;2|?z<(PwSQDg49nK&=N3aN4#uuV$r11Ow_ z6|?enBX1TLtVMU3m0EBLpkZjd!VBPsL0C@~9M)?b)@$I~0reZ1l$GKoWvEiEmCL1y zI7%;W)n zl^_U*Q)pqoS*@lPOkSLvd{R=QLW#RrO2{~Oa2bMZMNIX9b_x{8-@Y`(~` zIbA?kvpBqy<#jb}m8r%l(2uFP_*L;){_GTVsBR|Uz*vw2nW>c0W~Np#Ctz@DtvKxx z*ajJ1I#GcE0sI2m1SO7;Qr3 z6TEOXF;T6}SJRao;g?zSmYP|$0`67I(1huGb9XA2uT}i-O`3VrG8;85YczNPui|-) zS*hpJ=7BQ6a6svJ`cSd7ls7XA0TuK%VVF)8)| zZAZh5rONdvLHntAYHqMCw)@^03Vk%Z4rq6^@IEZ;gTggowfJ?i?wUTe_ywWRo5B$+ zUZWQOAQZYIe6pwbV|}5YhBtePf7BPcGkk)l_|d-5(eNo)yjCs#5(|Z|+1xiac9ezJ zgx1}??qiX?^vhbe|EJZ+&ZXk!Oatofg>{xh{OcX>Sf+ zeOhF1_@dJv2={NH_k^Fhc^#Ato#wg{_pXJjec>6p*Jpf>zApOSMUfZw9XQx`QRHsu z#MVc`=bjdMIDGzTk(=S`;w}5&Gj`g($oC$(|KUd>_eOT`rY_yQZg2SfO|c);!{?p$ z2^`4vMQSR7G{|0xvuL}dHI-f-9hB1a+THiIBoaGC;DoU zvB;Tsg`d9V_Fsfg^g!%~BB99Cokzpl&WJqevB*MX;b{2c)9<7<9$oj|$ijVC7P*I@ zmjJi#@Ev^{BYW;TT08o@zTBgI=WGqH_q6)sQ$inyIe5mFqeuBfY|wy2tokXgO|=F9 z`3z6-_rt!$|IK`7^K)xMkN)sZ=<=H*@2!Vpr-v^+{V^Xn{jas5Ux-?@qmTK(Yj8U* zK>P}mtK=&FHIoO9tN7kf=;)o{^EO59^tt({y|SmO#Ser+kt^ZU@lGQgb{~B>JmM*T zl*%vi4Cx~{?N9L(-(iDg0HAGBi@(_yf}`*}Pwzjy245P*^35*5g!ZYXr2jeJCDaJOx|N>+r|!Y;@8U<~_wkcXV*-=12K>Tpj%5wJ@ITjZlHB`p@m*2cQC1?H9u$?Tu`YR3i&~ zH@NN|U1KkltNcq;K8odA)bck0cB_Za^344&`d}xV<>}L1p^zVl|7}E$;54=P9~lr- zUgY%2NC4LQ4Zy4qrS)SQRl2(P=h(%wJ-~FS?_|CNPw7({%&~jR+8qf3NLTq6sr+ou z?)YXn^wXaneGBZUu;<<{!oK9=Jtx4Ry!-Dz5nnykQ~RCR$OcdGyG{-Lw0`GfkqZZW zntB*kd}kyVdH&OVP|h!Q_uh?@meN;c1 zp5-~3PHoVhYkcoGDHOTmN0Ix0cDgIFz-idA&Fl8V^esfLh!lQxS7f_9>fFqMBtZhu z->OY|;~DtT<39l|Ec76rRonfjtoPy3Qv;ON=Q)*r!$N&0JSvYR*IT}0pVuzD^CCo% z;oVq%x?28w>-;+PuN#rTgKpg)9^1mn=&i(n;O81-1lFzFyY72@kgg~HoRI1zp7(ru zeJFBzc*0X3Sl6F%rjKYGJc8D)6RYTI;LGdeYPgW~`(f+8B=ULS@YZ{9(8GOlD%!*2 z0SMdG?|)`cd&qCuJ`w`z`RKzyees+A)9o4r&>np!MaE`et;3!U5RF4EouL;0#Ge3r z!2j6!4nqvL(6`|r5I^2`eAymkz}Q`{{x|#8J|MQ!Q~nr?ZbM}3s1LAyh||pvL>3;4 z9F2eC3g8*WB6**^^P&?%kr#z4p7J+g1K)?EGx9+A>8E@=vO99K50(98L^5Z49{vd2zcd*5~fOul!P?||;q!q4!$=mjT+BDY5Ftlj&*$bE~nZ$66KCj1O! zlGY%IuRFMI9}r1Di#^>BRXw4O^#{ZITRztB#;N=fEc1K%mLpqV6uIYlzYK5myzE~8 z*?gFVe(FO({ht51|Hm-LQ<2w19_%{>-gfxXhmU?NJg_BlzmN3F!G)~>&EvfEK{Niu zoLLt%-C;vh5O}!GtDo99%+-$%+K0ajgT8ew6npWuvkP1(^|Kr76DNp_ccG(~+j7wW zH0x@G5GQZNg##a9p}Y3_VAAJ@U{jvxss3%JdV8C-Ej-|w+&}XNi9c=zDNj<1UlH;} zNY2UHN^J!y0$8M0IvzmSzxw1*U^OLj%Y{I|w2aX?we5F+{@telu#&HZ`Z$+IU~6Q~3T zfL&|*v5>D^q3PPTxl+O73g}J1q68h&XQ}0{?~|>#w%6O>L|P1Ac-n(}Wdh#d>d$BG z{+!(ci5ak~0(210;p>{5x18X6hP=+d_&-iWN%a-L3Ae{*HI#%kdP8G`9l3}Eg9V9@oR*GD8})C%mor#FbGZQf(!`l(UFSSZ$v^x?zNewW2!B54hv zDP>}BekK}IO?%?;;fz_eDy8K_a?ps!>oao(Gvc?@QhAoo6-}~RO3q9e{uVJtwQQ!V zMwG$ZlU8(xakZJskSSbZUtvdlc5i;){0?}BvENvPJMr0M%)q*PgS!gtj2K47v{Jb| zHkhg|8fbsfU<~vQcuOjishHI&yf!&vC?-FKZSrG82V=uC(ILZPhLJ9nmkl%GL=Y1 zVdkR)FiE^O)oN~`7@tn|8!)HCXlA=mNeNTdRMASz(}2aC57|>E%nB3GVmcll5#=UK z`VONYYDX3GN~kq}a}b|N&+JVXXsP$_nl;=uI%*Jno1 zIL?@vJP@as4jb{Qqyb=+H1n`9(W<5Q%&!?@qjj-i7R6-b z^~o6I8-^^Dn#_lHB03*B0puX=@@Ty7AOktzCaW@ptK!=Att`(-P$x%%7ic7Sg+^Lg zqJipCstg-y565Ckr(;nERT=eEz9#0s0p=Zr`GT5ds{(UYDx)zq?ZL_TZX+0Z4T(2< z_nvEFTibg5xb>p3`C9sriI&{8q6K~NHS24F;wJ_GVR7W%(J|zptHR9QI;)flRo^VdnXTtvc)|H{HZHti=eC`E_J$2wjVP?NVxpf&dk+MDb_`d{az2%YwJ1P828=?X zhgTu+@a&PAeQ9Emc5V{Z*6aJ zMSZ);Heq9{Y(Op%{IZuw+>)zgHz=RMY4#K<4SAN(Tg7KFy_I~H)muqlU`fo0FRM~B zcZ#c>th!VN*tfFiYk^A+>zTB0Z3vrr5!38mqI1Zn$bji7m_UFXoHODQ`sa2SbGX0* z=>8Dr+qOhBa+Rn|x6cPTO)Z$PSc|2KMYG4Ul~mfu^nlZYYK znN=ufb9p#2jmjddsUcXbv0(N=rzU*+0Ru9~K?q(k4m{b!^b|npcw#C(Dam_-T;@1Z z@&YrUIsnjqNxZasEDTZ=csY4aaW^-k3K)|?$0{cGt>Z-OSVK+<&Lwh5vc0F;W|nX& z(2vG&&~_Zps;I%6;_wtO0WqVqV-X29?tX+|JOz~AI1afn%@aJB_+$*`GEG3kI!EJ8 zHk394ID-Qn?Wm!k9W@lZqlSWa)KKdb5|Km`hNP7QaReWOhQ|L0Dx5cI&XxU$|4saCrTk znKqYlRnu_;Hmq%;H*}-sx+!*72dHu&n=5AGC{`&n5=8B2bTiuMW~|Z8ey@yV zmTy0gOuz>{3_gK{B!L1kycr!Vqz)VT67Z+l6rLpUY@=BkWU~{-wfm=M#JTnFfc%euMnEfdg1TWJ}_Y_{70Eb>QtF<(~+?WS0#;kTKagg9?3!>qEu}bviGVH3u9n)Bxf`9{F@dOWW z@Adku8i{z7jVj!nztFo=!JEwzC6&%hz_8|1=|kFxhYZ6VUm_8>8*$8&#db+*DSd7R z-AH3o_h(_tuhNXv9dtBbD&@V(6+?(vXJ!qLYqERdVgo@eIP?HWvjV)%9lL~$C#Q_* zP zwm$(!!PfNd5Y{qL+I5WpP(ZK0(O^1nrYcX)wn^Pjw+}du6*+x>fQcooQHb z@1r3nQ#_3An2`UN3_(Uu|!+9aa4q@2f1_wB8xvD{utaeY^iI}Y??b?o& z!V-p2fDAy6RcmMf5yO51br0o=SZj%o%(SZgh1(Gr{W3Rc4yT`#ReDAo?2+bR-nD%ky3(e_# z0vZiozWC%^I?we`IY2JyyuIjiMm$@_9#2!Bx=%y^E~0Z;C3U^}f1A?9S{Rnf32}u4 zHb&k;RR==H2uC{VDN95(40e2CuQ7d1e0KM~>1&ONtK$=Uxs1<1k`Xo*#T10eycxPF zR0}Q~4g^)Ie5_mg&}Z&&d^+E4>@f_SgjuPZLe17(R6tyU>xk`8|IjJo)n7`m){_fzFe!?pRjC5d(8%QRQ z#ig56DAlZTjT4sBGa`l?TS`~0QenR8w$6-6X_ehUE_~7`?k2XIG%viHL5f&1ifE{$ z?NN~^r#ki+EWKFDrF&ZXtJ)#-_!#Rtv)C1KA%hHL6N#J?fv=GqyA@M!FJp#({lit7 zdZakhHVaB9!`Ae{%Mqx@J5=@q%Hn*JYO__Vni;^%TsqsS1cbEBNGF$R372x#qL_qg z_XQpfxD#n68NyVhl3Mmt2(+vU*miLPEx@*&t2UB4vk7lSV$u{lAJe=iJnh57#|ty` zyjNk>!&4FMCtD+WGF3YqFEneAlCFSaxJ~n3F0=sfaS_R=ookYp-f?1?6 zv?9`{p)#e=15S_{LVD~DJ8C$F+#cd~WwKLgr$RiZfiTfzpSsv;B?u~$HfimX`zZ9{ z`h-nH##+f^y}1|yEIr+9WL7D=PLm;XV={ORQ*M( zIs#oW?nvF+MJ=j3-LOGEDq{2coIVA#C6A};sGUP40ryX<6?3=Lga}dUw=cARU1a~d zgbB$R$-iXj6}EUT7}7?hkZ!oAF^fx+MN<{vD5D9rH2XtZi8c%ixd*{k$0+cL;dU1t zbY!i7am~YVICFz^Rt4r3-Bwqw<0dsa&!K_xn~D(NI9Ax6DVT`ivAe^F@1cFNCypoY ztaBt!mgmU6WW=D~bUs_;=Lw@TM5Tk(GMvvSIlJ26S42H9I#XKQF(>iJm$z)>GPNn*}8D3)#9uyNaSnWwLQ2Ei+K zW<>DaKY)>0j_ZN;r&I9XwK3>wK?@lYxmw}Hk1fg#wOA=FIacVM7y|k+0~fYym@e3n77Pgnr5!;u+67Nr zbgi%Rvv~fHWdJWIUAee&8;H|FscIn+WMr`xfMu1uT3~Ysmk*f6c|flnsYeFmv1G0g z8x*M{QpF53j2~&MOnGMF4ti9#g5$xk`sZ1DGwiiEtov${TjTzshExSZ2b=I)aFh`O zQRfv!BQEwlEsQ9E#X|jL8K%2z%r66ZluDc3p#WDyAuaUIHX#`3FxILzLrvgi(~n9* z9b2iJE!V6iK#mE;A!}tsyszL^v(Xus)5xEiFNl)|_-=w=9m?rE;re1*?bEJnjC!v4 zIJk8E6|e|L)Pt(~?)y=NU2yao?U-HVrNpHJv(R)eQ%JUrX$zQ_Fdm$62jO(vZA^?$ zO;05z#`kr7z0q1`mP|pC2BvBRY*8#wMk3n+rFGMrL930un2)#@r3hD|Xs*H>-;|VX*E+Ol$ zy(4PDw(zG7<&mL`p^2)*p>Wa>6+#}DL<5uTn&RPLmP@0Yul2O?AyNKbF%q&g)PigJ z2c&&!3!+J*zf)P77O;MmSZ~{c zSL$-1ndMAsnK_D3M#L26GtF9NJ|B1jbZ*5S<@X85h#Uo$u24=@OqLPw$2Uy6P-b$- zsG84tqLc-xfPuFyiu|Si-n*T08$^(&YZdhDD$IK$Sal7>a9e2L@40_XDce=1X+{2d zDl5@1#Y{YWgWcQCiR_sGJ;Tw*`qn~_p$;3?kek*=!Ghg(*k z$K2|3m+HK$e6EjoKVnUaVYv#{t26kG(VdLsgn>s1=N&3$-K86A*hN+5D_|vlp31D1%q!p25+&|@JX5G@mF@qwwnYsAq8{AL?0yDaYi|niSn-) z|LW&o1N>{y8?YiMsOK?e*R61)Mi3J^=w?DOsts;<-WSI~MLKfLm7U#;#H%1Rm#XPh zG0QaTOO2RXZ8`EB#Ysc|;z+KtZoGr4;F@L_lAXG8P)?n+z+ zve1F~P5X<-eS!?_@W3Gf!H|(ODAJHm^y4mC6p>+WrB(zSSt>Wzb2UOY0I5EHU1)o$ zxl6SSCR=yf?5H0QL<5t#&{ddtmQH24d;r@0@+`oy9P$YRm^BshYx8WujV>h zj^(5XSDUHfV#zYhQWoGZ#|8O}J4;EKC@`0e)y>o`+`VZV43W;nn zp+aUE()~-99XlaG+p`ky;z`xQc{D0FNR=3!La@>N>N!<#w1HgKWUWwGwlTw1`O{OvyR;*jY!tkbPMJH{lXkzcoigfj-Pc$R8p&vFw?kM$N&zS8gPfKNFb0l z>Ns?CE{e1OG-7wPH#aI@j;lq)_8e``w3*2G1YEV+MRX1lXtrFETf<{ioKKwlOwz)w zlEtfLCewJ8k7bF}sO^`HX3T}owq8)s$u#=)*x?JhuH7Q$E}tvptX6EMMveYa=IFNw zp7Kj6w6rGvu=^B&2vALiKDLietm)}~EQ6CzI>bG}=@6sj_@ze#T9Ng_LGVUqVMxHh;jLJ?=o)P3c zJRwdR#DRkr8r0Su?@q4HSiVTtBg%7rO6!3dV+y<47G0DUD5(_4a-j@hoFx%@moH7i$%yxVb zao2<4M!9t~(Wj!_YeQ^s$U9o76K$bRtc5!LEz}ukq0Zo{YC`HQ^kBG!IwLLA8D*{v zsbkUBBMI8vQ*RysgWUFv#L&PW8ji)FhNRzM4d8CJqT2rWN^U2HLz1Nth3 zM4>3HF5*1Vs^0=x?!=|v!VD}G`Yo)AR}i;&k}v@)*4z%-n`#Qy6c|)40hK2P?<^oF z^a`~BF+*H3X&~YhrH1bD!uBEqplQAEffzB69LSXnp4qsi=<*Y>_Dx@4f>N0CfcY-q zDuEH1zLs5r0-YueimQ$?iCP7=iq(jk?L6#VJFXwn4$TJgz4^G7^SFB`s2~0PJvnyZ z7Cj|w;@gRXroOL0qaU>`9yq^1Lkuu38CJcXlksOAh)+$#U1@B(y|H0pNx$o>R2FGV zxE+DlrlLa&OpidWOXg;1!{OvVmR98Bm4zsM#(J0sYCWKEG%h16M-@L8vI65fZCK>d zYP{b%4}k4e&3jW?ji^d_m@?w0aA0Gc2m(m0rz$xZ5>TVJBph9Ai;SMl=MC#S|FCwI*FE(WiF$R4tv5>w-9F}&b*<0dv(^x{D~CPJoFzA*vR8O547CZ+2tl94-xW3SdF_^73_Wl?QMp0Xc6 zNtcKo*3*O;+3Lin_8!Qi$!t($&A0)4VRFh~`An|UXd6TYBIQ;fvqXewa+B?TAQUZF zbD4RmJzS@Dc3=|*1NORRi+ebxHJV}+4 z6JS@39kxnQR;SUrp}Z(U&#Z2U39=a6&y%iH0Vwh^1qu<8mZ=*4d5$8|*2Pxn5?HW9 z3(`w~}8#V3tj z$nac34paKi90KJzRwG28c>{Mj|%_g*DHyv6e*O{wq zWiIjL0ELT1$;I_x_=VKrP7w;l+O8TzMhhdl#vWmVn59PK&Qo$!q1Aft65+8J(JXX? z3ST23shFV_Tw8odb2jQt`Y}2xIW!RnRAtmKkRZls)PoK%geKB4+ZdwCY_5VH;X|0u zSuLqCJ4{EKi?2$ca!+oO9^DRs)__BXV`IHb7*(T))5rqFLZ}O`I1cOC*|CLWBY{Cs zhg9L%KI!M$^bk-SsCseY8ln`Th}W_et`)k$goP4 z&^HQ$=bNspTe-kc85xuktZT`@Rus4`FgQXFQ&p;+X#j6Wd}z$*{b}e_*r*9|DbO#v zonyQ(me7;JD2i6iIh`2K#MCvwdrqRgG;HMpys2IizU$S+5+KiFs$go42MuI?ja&}~ zY}bQMg+n4{x@y+IUa%!2UCJ%HtzGhE z+s;m5#2Y?asFwr{+DOW52VrR`I(!E*Hd-)DN1Ubz^4yt-$5R$z8oV*tgJL{%iabyl zm9Cg*&m(MjJa+%VqmC-TPJ{8uVH2F8#3yO;!2r<5{@P0 zAVeIxZjV$DBWem=%ZFeMfEx_f9CT|ZPr)VSqHQrQc*<25VcdtH%T1dkPQmy6_Z*(FCsf5xz7EQV!JoDy^ z>D?~BJl|rg<;W8w(j%#VnCUkDOu%nDan03ynKd7Xo3~0!Y357rV9uj1=z$yOU~sv! zx0SE7K$i4E(O=4EWWcL=A9!q>!kIWoO-U#Nk13w7c1n_-<;p#oCLC|{jFC>2Q)wU( zR?Rs=rpj3f=O$uptw<|gXeAL)$3w&{kxtHlmLrOE!U-Z8HZ41;Q){Avk)3QjIb}>I z5A3?e*p--L0QeO%T?af4BvA_r_o%_Nl#$G-4OAA;QxpVEPpB3o_BM*P(Ni#UgVbAI zcCUjoTf$A!>X*3?JVz{vb^2YAVG;-DjJVwW7+C;u6PNLjX_`z6GMLHLjTSg?+drsW z!o_lX>vs|F@(IJ#8+rAF06LO*&~C{9{9^zRvXQceE^BCGT8cCzLmU$le+tHJOw#%p zL}|>ui4D0lp>sM;WnL&?>cZ*W9Je(Dz%nVwYx!m?Yxlf zISwdc9(wagb>#gn8%&RN2! z87^8WnujerWeo|snprCx(-W(kOh=6%n@e}FkLVML9UT@tCG>x?Qvy#-s7O&s=WAI` zmE@#R;#K>mca85e444%offBh~;nFlZ^%%Po`{Euh&WW%i**2N_Qw}$smr)hEp4CDc zzwd4CStJxky^TP`d2Gke;-o+|J~KlNcurcfVpEb2^Qml8V8+Ksj&G~rj+Z+epU$`4 zv4M)MUF~|5kg@~MZKwT??ojf+W8fp6`yDqGZ73cY3Yx2soKFZ-d~fkoY_~9?hIpDN zZ#bwLNoa76(=Y%wA=ExsbJ=1k{!=QBj zJ&f88qH8N+(i7M3C9ryFOqxCVhr%cQm)ux zF5Og;a(McxLmK(uG|==oUN$HlcG7!$yAaExAwpU)xauOVO$+W1y-iSb(y|(0haG@A zIG6kiyH)p>`cqB`G*E4>H^rTgS=2F!axy-94UB7FA~_eIGJtnG5I2&E>*J0jtHec4 z8UB@R8j`ZTnET^oo{I1;#Qw}UP|U$uh61fBPUVjTk&-*HuQgT&i*c$_W&R zm=KjsIt{fN_CJKh$7d#h$KRhYCZ?yL*W-z)_@ooBESpa)R1K50XxhSzeYR-2S@?aO zym05o7$ht(7>^}$h3Lox==Ef5jXnPTuyFLpjW@e6pbMG*iy5a$T z`o{+P7$kOFg0$NkKbEKqmx-v+^8QwQ`}&;zlC*W$NrP2fD$LY1 zJ3T+I>L5G4GFs6VxwrDJ_^fkSmCA^2$Y9*B5Z0#v5ex&9RG)zPw8bEWk$&ODDG{B~qqcdr; zWHQL9z%lyqT57E{nXErh>DgrMDLbA?t|oajm)VLmVp5T+z}UGlE@KG)Xq6%mAb?Abl~@igEpb z5gTnowc;x`P%?|I)Tyg^wivy|<4`lG|-@1M<8 zoQPK3xvrNd7C097gD~W)8YP;A!C3C#TmF7vaB^_YqEtEm0`yDCm#RFQ5>J_xvW#15 zx%44mm~s~5UMsD7eETXY)F_Z0$tsc}+#B4j0@4S3geZw8L|n>cFi`Ajcr|s;k+Fdh zBe1rZPb}^v+S0bp0FFIAvoy1J3CV2RLbdx5dr6^-BArr^r`BpuloI9s?r#?82+^g%-Zq2-4#6b2Gr@i9mHq@P1jtM)?P`g`0h0+ep+X`trl>*cn zaN7%O3ea{=+UO2PVdGdBtxi_YvL%FS{SOiUdbvYxom%4Y>=#xaO5I$ zS;GLcaGKZWFapyo8Zzym@V!gvMauX^Lgy*el#WkLj?YdSGyBFdN9n=2)kM#>sb2>P z3Ml$>^O#dH%m8ILZrHT#MHi9JHPDURA-S<5`h`t2biM1ZhiVt$@sh((o$;CA zFy9PL(GsueAMLbu}X|Ps7`NZ>oM8 zsf;p!(Rvoj7?c|hw9Cf-9MO<=83-Z30F{s%I61%7b{X4E#SiO{I^pw}nmnSBZ zx(9nbuW)|uWN5~Rqzlj9V-<{LGqqZY&h0>_9feI&vk4B``(Dit;Mq$YNe;Hg&9*BA z;7J(j%qpQiLK+RiQ7RHVN}OY&FLhPq)?S^s$CO(lF>NeWa%k+xEpk`uRrM~0M^o8t zzwj?R*?bk?5$RzVUNu$c=o8^|DU(`mC{k+RlH!Df!4sxVPAPM(TdB+hh|F>24UbnwAC=IYs27WYmZa$zG1~Rh>FGlyYM24E&y=lV|o@Cgb8Eo zWK1AJ&5Zxi;)>oTax>&h3xPysr^5LG8f3j;m`+bndGfvFCPS=fAj^PRDvG_#Fi5{~ zW1cppF@MNnRTGyNg+D;VY8+8N@mPVjBH9dDVU=-WL z)*ETT6+EJCDVZIMGCo@MEv=v3>a#wP7od;taqbq^9(!mx@RN`%j3+}U(9d6=PGE}v({9P~%bRiOLTAc0=I zW%~@BHWtRP;zUvWSK7|#79+6?tZp-oxsj!6*K7v3p<+im=$IP+!6(LTM=6b9dc4WY z2BoO2vvEtmZJ5U0Lgq4QR@1BF$8GtWd!!X}j}@t7c{1l=Lq%%+v6V$`5Z0=~lAo1o zR-ptSf>9MIseQUrfa_NPPNrOQ%WeKwq%DXJqA!#?2As86s#R0P405jJRT5reCNxSx zCResOa_ME`zJ|%Dg2ej;Rbw)yNQDHwkAa*^1tUf0lY{GE@3b9!(ZQjeoGNv4-0}%V zrwFOgV-_HbCX{B18M}o`fh(;@yBl3*?rBXeWrsc;pSrG70fXv-8Eb0vc1(lqhz#f| z;nd@J-$*-!L78agShifVma6gqYG6tf6T$Ml18qU-)pn}Sm_rk~9mO;gS!H)9jzpXb zF&Z%&TBirxp$JxJ92G;#wp=NdQwvDMVv<`#7UE#7caU_tv#d*Prk<987OPL+(JARb zanv2As8QmT7(bUdJmYdD<_xZhUpe84(n4Xg#XZT=CfC_^&N&up7CFxph%Rz0mt_Di zVW-ytK{Qw)eI>TrA=Pc00EpgElDNE?s#^Uq;M`sO%&G!@6ak-y50X&t(wDY9HR*~I zsIIZsEg(S7NB2j&PB_^)=-T6uS;efIm8uz-o~v659=B!e>IBopL=de8)EKnmYDZm! z5~q+_rIT#U3ff7zGSaq7Ls9TBvp{=<{QufZ&xYX>;s@to{S&+P#VH1R%ibL;3~*%_ zi@=pLKBNr8_~G!{VwH{0?KY-o;#1@R>xfQ9Dzzf;6s2-JH!~9yYCIaCa#ezZw~c;x zIBDo57BX6jmWK|&>BA|d4$0i>O!rzDJ!%$X(-cVL~TK;_1Aty-1DI*le z2g!5O=S8!a&RcW?*im_g^{Sv)k6TW8W+{XP;C@&ww>y|klX2#gyT@fr+XT7!Y1Dw; z_tIHvN{u?JSM5ksWZm0%t2PT{oS85FW1;LHsRIW>yRXQ^PngWc*duql0%Xz`&?Cz(AEp7$|3I z2K5@a6u}OViW2vxVk8=)x$KUQM?W!sq_L!Z6`zYD7EMkVcAUNy2D0-?kB22ItZI5i zh!7E=c5I2?5T~WGZ1N5sL&AhdvodeRS993tA4J&;ASfc!J7c+IA_YfgkJdT%N+l$? zC#~2}Fu4^Uk|c7|SnKUyI2b63FG5)tDNG zUgOlHx=o}B05Y>;XH3x0oIiG<-7|lPN2`)Nv%f7t+TP!3zP}wCVv;hh)H}=9t;i(@ z8#io9ta}WR6UM8de_68=)z#5{avvkLKrfR|Lwxxi^WmXZzOs2E)X6kg-4p8EjEGgL*WA^KT&$-%2E`ie5IyQt^KvL;L zH7+?|GMy7|MP$ux951_$hVXi3c_nFPQ1+$v^Eot)T+=u%`bsUH{CL(CT09M<#UpGaGKXOy z(|M%V&M(&T`Lb2H07ZfG$ldV#KV(pgI;kSswHWiuz=Odn?6g3RG+hKG&i4pv-%GYe%(DV?-pF_{3KM^VWL3$?`R zXmm)av%{DZIvonS5~ZLkPQDwtmp#WWMid4yOc8nLFQi!wCbtkfyNfGJ`stIU2Q4hj|{SG^e>d)iiza9EHW zE>|98%XV&q8NeTH96|n}&pWl~ACP`xSqw%>9{IUyrs_<~6d+B&^%S`o@M@;9Qz6Hc zF^`hnM;SCjQD2hK9|mWdI}@Z(9S0xm94ZXe#Hu5Qy9p(cc~2s5)LGfGOcBVeQ7Wcp z1Vma80;&8`YPo9ANE>Pt2O8WP>{Q{eSxyZbUYD=mCR5@Ky)-1US$9S*Dp9b>Dua+% z1t6hMzfU8s=hkQy~+jck_7FZWG2K!}%8dU{l$DVrPETB)AMK?z4L3=fkyIr!r zJ*?f~LW8SGEmMVqEz=SgKmr2W5dzH!xT%!?S$9kX2~(se6ZkQSA8{^BVHU=rw#{d{ zYVO0y1acfLm#Q}HBF-nYcT7+ZM{!b{2H%WR=*>Z0OwyLA>kzkYUAYL)-+(H}K62DH z*;$zo$JY{+Cr4f4NmNx+%asS@Y%3kM6D+&SnNWoUMOw@;WI1x#TsklzOUH30t$f2>m`vvg3KQAJWE-ra=x}|4r>~hH-hnBxm8UmyBhh{IiS!| z+TstjU#L_n73RB64KDNbZOIg=GfN~H*><&DxG8^**Se~@QrDvv z_2h+a1&kt@T5BOKpH(v}%c?7oTJESkq@!f_8A(#cDU75v2ALu2K97NNA(*IF;v;tA z{hrO`^M*SEz{nU^LmEO0#awl<*-kp9p~G)0b$Sq?LIjp9ZwMc{U`B37Bgd@<_hOBb{i0X6 zRXW7K@(pSZHS!s3aBrl+z0vkP4bw{6y}-D(vG}wT*0v{cc~s$4xh!T0>XG*_Dbf*` zIwQfPvw~wtOEGA58Vpwz7^_;voSp%b zWJ+RI=zJ1!f4KETwx>^Mzd-Vx1QruSnPUxuq^g!HUJVi5ICNL=X+ZvY z^kHI!d317a8z&B@D~hk$%J^kpmP7b$YpL6_`4TZpW0_J7V0vd@L{P_F#9#f;U{W0? zyp{3~%x`0M?AxbW?_M=^VC%$17exoQ4qrNW>5i?J6s%g&yn^D5=hASASx>GwJTi32 z(7@J97PelJok>iydx zAAbk2&coCBSzZ=^hFGYSYGn~PxxH8nJmr`wQ6zN@Iy)B)qoei$&G9?WWU28x!!9Fl z7wxF{X(MqfO|0Dj5}d*K*fQT!GOZXv;bVuD@UdLT*(k&y;RTJ-%W=7&w9+)V7d9uh z-Qmr!hEIeMdXNqTRkXO8!s4b$vUmfeB80uOWGzYu($@BMRB=P^lvC@#E08qchK$S# zdk@y2if4ius}|z=24gi;%VbRQbZ$k-)Gni!F;z>LAg^oN9iUfFeU~raej_JPiyD)y z)iB2~Dej03c10U+Pd|1*#F8Y}muxGJM58kP^(ZsaHPo8qYlWgT6ZZOr_-4I8IzvvN zpO!lvAL16_N=$&(nO{4cckc@OhWJxRd3a+OHr3Ar#mXNDij}X)iCDH=LVYg6cQ0>Z zz}g&WDcCRq)Lc1=AFzu}6?(ym1v z;9LL3;ij6Tw--roI~Nkv_QW_IQnMf7_Com-L7Gvm@r>GJZo1!CbR;9O;ROss!G$9x z4aWAxu5vED%y>i!^pJA!8)i5q!43)V2Pg;05tRe?x6^hw*d@jTSt!oKo$B$E5?{`w zW$=)0=5gndnyA_#uv=hbPbaOIl350R81rzp!@=FiD%hKhqt_?0F1>#E zgt}AF2(zo|VyR-eVu`VoCWvhAMt_W*iS!9fy%Q&3g@U`u7C7f)8RtvJStFAAU3n}U zK}2IvDA0j{IFt&jwv+piL3vyoM8Zwyb0)gAX7Geb)nUjKPOSGA1CK$guqrvC3zRt1 z4!7Q;(@1%reWd@CPj^Ivw;>5{rMg+k=1WT$iw^$H6h%XZZ_9L|`nluob>IKc7BRQ2 z@1-n`JxukJtBaZgZaR6j(TIf?fx^ldODk8ZI=P$N{zC4!&bBco9iC`;rNy;wY^l~P zNr6j4Rb8$EiHoGKLC1H@V^!9zptTh50DIB8=ln4ZD=oOrM}_Nr!&vYgFpqUTUDzt- zfX10w4X=4&saY{^5fn8HK0}O{ZLA1KNT8YF^qetE9%6c$&jcJh!jkH7)6^5k#x*py z$NCC{b2FF_bi`mw!qTFbcM%T_bhUxGHmm7WG28BT=ywu4OA8@Ioa#i(2mDt?yI@pZ z8;Bt@xdrG?bO+-m&7A=Y(6CA2UkG=rz`Y|_3^yZuj_D9G6^+Q5eEaM7H=s=`BSAbOJ6)R z%2tEZh$7(TPdiov_1<$ZCp$ z+*Lzzf3#>*H!VFQY{|RBE;L~>F;_M*nIn{qB2%@j97bb94u%16R>Z;Din+10ujp^X zu~7HXY{|0_`s&Hr#Z;n))yk+NnlIIgnHF4Lu_@Cu(`H(;OY>$6@ETDzph3Iu>XdDs)fD|BdjV*K z$cRn;Mk&&KWT~*!$QLwfv~8_4TCS1wA$E_=h`-cbUJ?5qH#M=XAkR}gB+B($kXTK*>>^P9Xr|VgfYF>R~l)I zPfZ%L@nn3CxgCmwFf<*$z*zzJkHeGh{apq9e#KCv+s&>*NP5v-2~(aRi!Ek}Xv^AV zg(8cV(?ksENjAx6Qd2V)wcoU-wx zvLa>rkQVapyhXwJCP->y&%i;Rm!?tNLmnHE5`?$C28x};SUy#l&!o=hKxS~s5{?#F zxHjbF4I(OaCU{lD4!hxG*LX59K`_$5`yw!Kf}$7gh?Uym$YZ_fnf{GehQ@<(n!3#oM=yI=Oiy3G8|W`4nt6<$y3dV-f>KyGIfnc zCkkVS;RLr=5=^#|3qblpH|HAqjbTDb#rD%$92W$1mdZkpwb6EDF|^IA6Sjvz^O#1~ ztrV5k68^Z|O*bTx0QGjDXxj}F8T&e~sfN+%qP)Y7UgP2leZ$y{D}F!}sjfpAju!b{ z9Hec^KkTFs4Ar0%^aEwsEriqK66r(JAVS4SEa%#fHmdub^PR7JrTAroe&ZE zRN-GD!}OdG0Rc4qvv9jmrXybL5ZOhQq}4pUjv_E3y=W(<1zk$G(P7xEk#ecbMbA9S z;sBD}iCKPg+TQ?pPTK!Y3yk3)qS!!Cyt70#K1f>CxD>iiTs@tb5H`f9mGEXY;z=u` z{qi0!Y$|tcDSXVJA-v$w9+ z-R_u``JB5vblwU%=OEYbwCjND#g&cia2%!z(0qmQB%GWU~shy6ro!HZuj?m9-qD{3yGaH2w3KRzjCthelusjT3ZAs;ukr2Nvp?q&5 z()Jv@cgRp+ErUp%2}d1rkg&5Hb$MUO5K8R{Qj@zoltIbxK?A)VJ_z>dei_OESPt_r z5uXLd$-9g^O?Qtc_Q7F_S_sL*8RaG}`wh^rlbv?hXyE>=8)7%`e;&5|pO3hVt~Ji4 zhhp(yl-yYv_?kF(MRACn`hEf9wigI`YmfLybh;zF=_lb$zYyNo>fZ??xy$g#)|o+x z&#c3%5sSq?%-o3K1Zf#`MQRDKDxF=zbkr%8+39Ia;IV({G6oM^nQ=ozVr``9Xyl*K zMh0A|lIXsQFK}#Kw^SN53uS9rPqflN%v*>f0Fvu}oTa1`-yLf`Sk~lv$zUM8p2)_L z7DxLc^DwYNW)U`uhm;7^3`CU~&>YNwx7SitDLxII!i?%~IS2<{!7R*6CGe3%(RK;! zMR|e}jxvabatEbEf5l>{9W77$*@(17-(>_JSSvO~^2yL3k$!rX=V)lfvTC6HluItd zD%7G7mg2-Ysa6^V+K<6NqL{+~juj#C>OdNZgnK?$$XRH_hR1NpmD(QnH*u-$iy>tE zrH=XYAq-n;;n`Dy-mt?aPtGbu7It#fwgsRfdTE_mg>n&t%TP8=E))`mj|(PG`U6WV zGq!f-e>0pBGD{>%qdQ7)A8YoyO3cTh*v7_mFIxvKiP{6WWn05K0S zK!TZEHcJulD|XJ@j;2&$wg;OjNseheLx!|hx8y!IX!J+f5|DfpYqGgf+n^MnM|Cl0 zmjVe=-$xszY#reTaufTqj>Frawna0kCjl4=$^ifi^SC9Dx2lx#Y63#s5p8M=q)QbE z%300MpnAw$=9tJvC#m9c*O@0*Sl*tb?)jOu#}MI){y%x=0UuS7Kk%iA4Me0VsDOxy z3fWD!Ab~6pLWxOGRP?!QHn5t_#@$T-d%KSP>p7Iu`Zp9Su)E#N6(1dSYlWPM7(+z2al_cD@Q+ zy+oJUYGw(~S;1Li*C!S5yLysy9Qs$cHH!XNZpnYzzY7Y#9LNv)@535OY|ktS zer%gIRi6zc&i3>Z#L~AvNlJXQuB63g_=mC@U5pkL`(o|sUBt9eHxPchf?Pd{` zn?&l$lH#KDWv*DZw!(HrO9KW{n0Z?wl*=7SB@?OsS>sr}=W3Q9mKnx!&%Ct7Q=XDF zWW8rtQ(Y4_`aCM45~WEAAV^1guL2^{1*A)t-g^lp5D^H{rFW3tr1vg_7OHe5=@a{MzmrIeW~J#g=~$=RM}^PS>@S~ z(bpG$qqr?{Y(^!omk8V#2u32c-}uYwviBnaL1s%%uWWqIzp!r@-IGwdK3m>WH`Qkf z3ODGUd2#Zghm=8;CUimLO z^dEg6DQRqDZ4?K7##Myw8Nr@An%fe9D=-^->qP$N4>zC8eQ8gC(KkC=%w<+TSitJy zOV90OX7`UG-5oWc1^+s5a8jXnb;?tJX+$0+)^F+U{%Lz-qnl9}qb-xZCFk6>KxLMQ zwn5lA_V8qy(4_8|ZvkUJUwlI73>5*c1l`=;|4sL#qJ=t|2TtpLv{kjYQm`%Fx9+&4 zUEbY|6bGr*dV7t^srR;Spg{o?C|9a&pCprowpQlS_cNAOscLIYw2Kw(4)fTyneFi= zrR<8#w%$GN>g(?Wt)C}`sR7m0>T5*q<2&LfTaSL`~x8e{F}Z{NChP`GUF zR0g^8-W$`aRaCZ1=F4S)-;ZTS1c1#*5S*KW&!U!j+7sv}Dp7MqsSE z(JZ}-L;Xe=d$F5yiW;fN=)izc|30rDC`;VjIf3pMh8(gQm|Uu~)&dw;nqZF(4>sqD zt^)9QTCAHGmR0c-NLOuF@oL@(q!cu@>Pl@;w-WQx><9QnUW83>?Mvl&=RVVF4|<`` zofTK@>isK^+in`fE%ryPQK)ganr%XQN&nF$Vdi(uik&PoCYtHU+}6mozhZ|2F* zF2CK9Z5gHO`{k|0BrD7MWhP+;qfVtTq_zWsPxR|5HlTRCUt6XiYZA^{@Y>3Gr(R*% z-iCf4ecM^NB;E}3W|)-nAEa_p7k4&WyQQ@ur)ACIMpX%2(S`fL5yZVyL$Q;0Ux?%0 zv#0fwzbd}^49k{~`p7f2#ZY!8At^mrB*prolJn-@3U#Z9IFrWEaQ|wjeYRCAW3}3W zwCZ?44<&LdOH-W1a0@K53hWcKyrZi^b-9| z4jjsRCw1T;xGfZ$Ev@glN^(LXsr!lYI0sAcHR_I8N}-f1+{*;r)h zQKaWx@Re2Lp)W?k|MyIMay}V<+HbX;Z#>%yWb6DMzeqnC_2;#-u76p08y-G=wv;c& zi9rvV6Ppz*Nx%CsP&otIPHw24IF;qL98JcaDEz?%MFp-14 zHgkkDbtjwBKSB*JA9d;OuUCCg^?L!BFK#J6@g02C-oO{MPdX*^mojl)sI@h2c!7pn zC(TSb_z=OG?J9roD5BsXzd~07vYs4q_Hmt9*IUDd^0ad*$DDe`N2yKEj`)>;Ih6Lt z1h6&`1Fv|01Lr*Z^nDNM2{Yrdd`)=fJ~+&c%cu|6-r{^VrWt@f;0Q{8(xd7UsjM_h zpO;KLlkWMCOIf_9%vK>?%knyO@+keqG*P2>_Ilxnr;Sab45#c;bT;9X3>fgf{=uASjF|F=t1QG4yv*3-sck~&J3X9&}a1}lQR-7v0y=LD49(^p+& zo)_^`IU3R!n#PUg`Rte@KvaEbySHN<2@`{2C^;Id{+TCDNrh zQcrA0o)=Oxy@ZPMCCFR;L9Lz_bpG7+CjqI}@{b@}jt>>@Ti)CR5HNi6ZqXYRXE0Q# z9D>PzB1bXS^4sl5{Oyj;u8J6|gPMIzSr(X!T8S&4C>qk0Dm`&$a7(sjT*|Z=ot94> zI!e7ay{i4W-FR9oRybTcpI5e~u!ih^c|lwi4ZD-u+#}wyF)hTc&tRO)rkBL znyT0F>NOdwNyQ(;^>a^`xU+gbTq5Je0aeM4?O}g!ap9NxS(!b&omG`pJk&ftsNe)| z9!p2AH5u-sZLTAC`wH{P&pw-c)pB`eD>iWLIqk{)lv<=JUYIbT(Zez0I;FN~#`tS3 zwWmJV-+X&hDL3#Sxy!U0^TVMa0okHK6rNUwG7y6_Hwr5>(K%t*IZb?-a-&C5{$WB; zQ@ZZ%ebx=v&Y=1>Ph*DngWXrA5YbBBy`;VH^;%KS8K;M@lz-(H{cO0F5d-CS zZ%$i_&n|HnBdm?NR-1`_R_Qo((Nfd|yEpX3~G@5 z#FA=ezj87mBitZ-%-f(HOn}7T3+KfkwEa?5itBI<*l*?@HT)`Drh`t%`7}ml|N-F+B+4DR99=V!x zm&68R|MM*}_@wbw^Ulf5`j7p>IFrOzhf~{jzIMZ}5qa{F$vb4_Olis~(teN2MdX9a zzl^+|N?*P*McTfXqN+65$j}7no_Gp&NVU9+xvGzjJ4v0A8ZM^oJ6NVV-^<rSwprv#Yie~e^t z8SM&MYxfE2=w6!gi6kgT=bQ@cIls@>*FEijqR=6iAmQlh>Y&LRBK>Cfn*pl$V)L;n zy_K`eJ*gKyKqjAxY)dMd@HHAPf=A^8$vIzqvtvrk%3@6eCavNqT;lHRZ-bc^7Ns7gz3a(Qqqm7#IXqh)yuYo@Py-rS(taG+==gMC zx`hG1gW=5jJ%W7a2KLzeblP60ALIu;u-Tj66&a$pePcN@68Dum0jZhnya$zUR@3$N}Dj6D4u0MpU$ZQZ<;O8`Q|GYP2?N1gQs_wZ+v)kS!J5K{uSLMY*K;| z8YS3hZJn~Z)&vBgA35>y?R++pUj=Y-({%E#CL9e_hMpU0EJe@g`NErcROv8lwK^nb z2Yu6T3iS7XA9^}Q4J9{F24?U^@xlp;hU=0W{g6Q;ET1(q(xo1R49ocj_f7C4awfd9 zf?RlI42UGJk~WSWJ3F`=yf2ovd(4g{K;6p{W8E(J^n5$$;`P%fiq<=6Cb^A918hpl zu9}rox^$ptMe&!Q^Q*vGk6z=^BU63ff%&iKfCmqW>e4TjYtDhIe?(tWKJ9CI5W*zJ znoagWP~-6u%wCBl;obhFcWN>dAG4ZgW6n4IQ#fV&j7DpCfMl|WZtEXgea^j2If+q^ z=6~Pn%CJ4XxST8J3U2?{KilP$EBs31$*I@o_n|uYo0nUoAOAgEpIo@DHDyuH-{P4X zP&<*4EaZ#Xjz91ocsxrMbWdboz-s3Yj~&wFH-TZwU;gj~f{a%_G~Q6jP&bYz?PI;g zH`}Tite0vdRcGhwtL}rHlF&pk(~G-0Ti^aLVfdasWl z!GGY3Z$jdwUOo_%S=y7%%S*7x*?@9gGUxF9c`$PmQ#{k57z0g zF2{I^8u7;UMg90Jn^o;urN2&%s7u}m2b9;mN8y-h)j(b0saN}beOD1FqE#YQGB2bi z;RL+(l0`7T^5A`6@;I!U3#oTKUqs}L66g0DTW(`PN0l2rzE8%CB@eU;x@IN>hTk7v z>@F3W=Q|dsd-gj^O6yEq^FTrxiUf;w>@e*XdPQMf<)*>+fx3}7wPwA30adD3n*tk+ zW*k|QR^C@R=r>Dct1p^tR+_78Fz{s^tCt)GBC1zQg)N~bHEknjpwvUbrZ1-b{g!((2U^gVj*-I3GQYc79DoR*xC#nw|f zP}P~RT0_bI@=3I+2dy9F09{T(DgL^xxYLOQ3c9HE|I{zMqfRVk_Qc8RYhqFs4}4x^ z+q1i%zoL=VtTREC&gn+SLrp4zTuOWq;1FqiE#XTP&CZnCZBr>ki&=cD3!Jv4SNguMD}E`7S#)-4Cwe^hFVnFl^@ zTIZ+(Ux<@`Z4|%z)iETk!c7^|C;HyYbpds;V#935Vlw2HS4>k-U6uOGT#!lB4qqXt z*zus)Q_A=~|5%@h>E?*NRduUw-xKm7c4;HKO~LwN%lY+>oQM@bLqa!mlajCc&b2Pz zV?%m~Mu%%Eb2{mq3o768L__M;c+~6B4IcrLLR9l>>8EK|CqC1 z{FkQvcNseD%<+gGH8tc`e{#4xmDn=ftNe>%+e-V21)}?XH@tg83uy3wbNcWAr?9Yz zPbGWE*iJ{eTcIZ9S^r|RCDh^ao%9WjS^S1}_!-gcJ4@bCC6}O>ltQ4CKd^hh0l^@b zGH`Y;QoB-PX(M3I@@dNz#E_R7Xb= zibuVt(s_V4ZGTzs8S!ZueWIXZPx~$KtnsF1j!w_(^Rj{}Zn?lho^5AuD4*$&zI}y? zs7bD7xc5rq`!7T^v1{^hC@t&sPW{2~?kTmz=69AfWt;BpfrQ!VT1_8f_kgmCOx60E zZ^y40^7XH3VY3`7ZNKxh*X&1soaDfNI2ydld(>nda`UtJ@sOOyt*}#o-njE_Ux7Lz z%K_qCua|34H>&~?AShc@Fh$NJ`6yXNO$)ZPGarMRBBO+Bb%<7CC{?~v$kp;5I1!YB zfoW`1Wn;Ru-yP*LW5VPzo{wu~h5Y~(v`H0w%reeQuKM#XOFElwmj2(hR|0$zi-~Gr zt=a&r7OM^M!_-D+-Sr=On`*>q{#h+HK0Wu(Ic&t_8S_a0avz+Cna4L3r{bt$T~eAw zHUhS!&q!sO;k!0($`w#dsf79pmGd+I)W@kB(aV*`RBFyv^}Phm2*cH{RKJA6Xp{J4_oBesfD)f3!x&%9r?TA*B4eQjd17-n3%MhC}p zftvVA^#nA2x3tn3sS28u+v4%GtKL1tQ+&FHeWW%q&z9(qF2}5GrYEW%=Db%B*Ns4$ zNm($~=kGlh5Cl)NgiSlm5u3?eg7a zo$QYYj7=S7hjQ0*+=!ONi- zuCc{dMI*R02oH__*X z!&0IEswqG1XD6(0Pds=<_p|wak@1;-mj-o}EcvzRegC`7muAPC!v2_%W*{rn5EVf- z#E3n4*OAlQ8X}Qf%e3_TbJwlFx8)RPn>JIpXpR|N|LaLLoyIC$j;E?Y$8LXy@L<>f z5h_&7aMsGq>`TXt3P+(0>fUX@v!#8{UuINkPl9r#L!vjNYrDSn2vMZexq6mQpT~I= zJxWpsFv@h@5#%xzX;0RO zA}(E%NjER$F}*h;ul`_74Li;BpZgxNw~v$UsoXZY)3QqAtBi3rjQNr zUJd3n^R|Ug!)g#76t}y415Eg)Trn!Gd9vlaFeWkW#<@N(~R?+?t$tc;!WgO0r#Fzh2_XK`ehm zT!_00Rp1bYdp+?W3@?cp6c##k=1^Do)wAQ?o?C<&OOJ21j8zV}`m=ZQpvMIW;iZs@ zR+8>hioPsFjSUacYh+7))luJ|Lw4FlbaPJFii5k!Wu(;nh{C*X&#fP=-HSkNg_#p0 zvo_EK8kh!>Zsup^>tT>*$cR5^#0$Z`W>Lp5Pddf@%I#zs_Dks!^E{s%$;!W_>+R=2 z((dnhAVco`o!Lm^Wl5?&LfcK);~w(9Tk+0;#}Mh!8_3wn9qGPbguxHkj%MR+%7=NK zm8D?AnzP?0Ed7BCJcvq8ggq^U;J84BtOlghK9*<7u68RgE=KS6drb-)afh&xr0om5 z?7O-d0ODR^i(;@0J24Q$U`P-ICFwuUY?5s87z`QafQ9dZ07hvw2Bc;WkmT-u{f}!x z(a@N)ost>1Q1mVkske)sVFVk~(fdxDcU6O4bf&Z7%;o%8pJ_@UL+5pnD<-Xg5zGj} z)ypyOG+h^+d1!}$6$%&P2;&@XNB?tbS! zYM2|z#hC4aGwfSCe?(<<@SYU*`( zkV?kRgp!c6XMDsbt_*8W*Z1FdS`7~_u4&cPf&6(tySpNcQ@1X6-inLWtUgAH0Jn5= zTs3Rt{luBUJ>Hmj+EX9aEnF{Wc9s~|%j}t3?$7SNw?gSP_pfeACSof=&n|fL78=5E ze-mV<9x6H)^a*V;O+EZT4+;@CMvC7^1mT`=Y}f_y3jT&oP-D6Kr6LDIk4r8sG&0)} zcYCSZI(T!sxgM$&2@!PT9=3S%DxI#8paQb*Av^w{i|y|s&^^|(8x6YwuLaev@m5Z% zp$~KSy$f~M=stO>hg`u*(e$luR!*(oFm@6|aNTCk{`@MO`7$mmhIOA|Z%>ogXG+rJ zmj!uH^z>F!KpDutOFX#-)OHu*F6RFpJo(*%bHyo!7dY4>-&jSIKi1GRB_H7r84V|y zXsQZiT&Z%2bn_2P2dye!+1Vf2^uXLv*a`Y0(+eJ0*XZ3Qa&a_Rq#wDoA5Ag=KQ)&V z7jq@1LEgqHkWB2N_g-f2*SL@ziS~?MG4!?h+nql`VSCb9v0RUK=4nGk^^iaA?)Tw| z!2j<}1Gf8VU)%BDGxe^0(0K`B>&7zm64F!-x_!39{U2r*2KVc+-8`cx&B>FSIlOi# zDzVX%Tf=DvVeRmaDlw&KRD?U9L@VjKy9>9-v{byEoH+Z<$`fR^^QmVl8l@PJ*85Eh z{30?aT|OTW8^p>}Lnr1z;_V=UlM8V5OnhYYFY@psYO%B`EmyXNddt)-KJMf$m$*Lc za&<)tys{1U|0=50)dtEUv1tyl4z}?<+D6!T+NHkk>23qjVm!Q1lEAuf&@}~KwY%??$D=F;}+cG);!;h5%8&14x&Vpoz*WJ&7Qv_6cFZagji8#!?}I_8$7emmioVco;) zsPI1ykyVqqiPJ)6$9b$!qs}TBU(0JWEmwTF96cuPTfJ!7!Vn@&%-iqvNxaxE#1A6I zU=4??)giWop7pi)ete2Fk#ZbKyogA8^mkW~*v&zh(j=KZ6ZK4gSsP>{%M zNE+|E5y-b^r8VY<$MjkTd~aJ9I*(uUBfZV#n=g3x$?)F55lb?02rt5mqYW>!jhR>4 zn?R=Bc%aLif=G^jmwC0q$Ga$<-86m_kCh(*j0@N;1OwS%Tmdzf7-1+OP$m>9 z0;sXU&_O4y{9eHJfrw%B6<{q187Kf|fTBj-qmeg4U{Y8XHDV0S3WyiPzJU%=)7xR> z0GfiGImj0P^FeedFqi{IY==nz$Yvsk_^}_M43lVbU@#d>(*jctkj+8b@ngB6dE;nV z0jvo$ZxT%e3>JVH2x0}H=Dlb=Ku;9XKnQCDHJ?P&0=qMjVnSF-=-MD!iaMAIhO)o} z0ebR~#Qa!BsO%V833w+C%d^JJ03fNzNg=EP6c>)<6TsF0AmPXwL97q72aaw5-aUh@ z*$!<51kKSm_VxoWfGBDLSQv$yanbXG~Np1hkvph z{TQ$of+PpZL?VNsR6?D}$SpvPHD&^^mV)dM06&413U+29XMi$E$OdYeETk9EYzQ3y z6%z!@z%H#ZW`MN_BoVNi55@zHpr*I=3qy_r%*W7p!+yeq0NgD6xM0iFxu5(Jk%s{D z5%d;7HVhddfPDmI7(f>SyT2fZ1hIb5ykWE~Kh_$W*N4^t21~*wKVb|3vJuD~LF{X& z`Op8K;WLp7{8&lo+D~*AHQw+LTTB(8Cl=Wvgw=qq4WK)K!F({39p*j&@)a4+j}?H* z_M%Iv?}TA_Huy?_kX$66AeIjRiA3@VVfCOr6KFAf?IhTmEk+7}lY-%T(U-tGMi>r` zj;FqR43o9N>;Q0IkT^?B8UPoCT;s<|K_Qc92H>3#46ld*^ya$t6aheuqJsgbN%T2& z_rEYge(*~ep#Yd47QqkZfJF#_b)as8=mY?M;yl#d#l4!RRN*_+ zSSR=n4Y*a9|D!!RJQ3xDK4pyuVuRqz02y`B#jsw!R4hrT?5nH%hbZ<*e6?b906d-_ z6Pw6jgAS>$q;o3BC7;w_GkjNj3tcE|5h(K<4e#c1S z*UKGLSs=rE8ojaF1GVxfRKMBJO26FS7a!4w*YM1U){sYOb7f379j|x{%9$T#v@m#JG8&P%{s|i z*P%8WK$ipZ2GNdqIe&cy=sFS`mE~EuE&|9KKpR0PZChWZak`EaNBxfzL3V!9Fk0&W zLyV!wKtb@ouuDq};y=Kaysl||HObY@09!SUx;Q?ZM3ca%1YVD!*`P}QG3Efkyzl=) zxV6nyyE6sp0nOUy9w4@CZM)Nc4M#tREdvp~=;HsF6p!k3-^G*$Rs{@4$q9=iPvd0ae`G9v6upV2C*#9B@m01{<>mHH< z7lM=(#Ii$iV`v;d_$drxfvEw2r1hP=Knf5Bb3W*$tsevQ(#B5~S_4Dh0nF2o`vTw~ zsM}BUQ=scn4~NV*B(1>8N{trS3QGKc!^5DvE6)A_Ow0yj3t)hwwE%0`NMrv0VudY+ z8X9kd(FZULp{sy0h(CR6yC1!unWFyb;%f84ANhlruHG@<(ZKP6{`aTeoYRc}LVI>7 zioMON+648Lj?e$6GEM`YM^Nk+Vtysl3D?SAQf_Y;lxvM6K?Kh_R<$$*?- z7wC*Z3Q?O)qP?i^Uc=1oFl<@vryhW{P$U<1@I^@l{Q`l`zg6XJv5^o4SP#^@I^6qg zVtjLaWh1XWBMK+fzaYhh`?Q`GuX}tR#B|-A<>8LniZWJayolbBiO5Le663AbP9&NdoZN}k9f&{T&TnIo| zzrPdVLmdYLJ6S@FV2&s6E4v zL|6dQu1Q`wM&*NkXs&3v5A{Se|0C{R@FxyJ?6T{bw#g1WpAJk6l&!)yM&HHH7a9D#^H6f4J?1w1r-Nh`f%~MPXd$$aRgdp-H$!Kz9~z>&DKzQHfK0G#=hjn8~5M+D`rD*e|hZ;KROv+BS86|Hh;F8qGh z2zm&AqR~ERbw2j!bXN=iv2B1?%hX$zCyTFjV?iMe$BD-&Z~K}{Ys3w>v1T)idJB9< ze{?z#nn*0Lj$^v|z?`RZ`F!R0e&JRU5i1D$(>{97hZ64yAyZQIuke%SH=^fVQga_7 zjzIuTUtOgOYsOCo;*B3NmHL$R=8??AFir`1S#WE&k@cc_Jf+l28ci z)#<~$);uY<1gt{g+A7bLIiOqdBn{Brz>0aW5on-tgsGhJoOpOcBr|32cJn{+a8D7h zw6M{{Rs3e0IgN`)D-+(&*4TJT|KHZX6u$IWf)@%Dj!qZC1-m!a6ph7SP*H;I3h5NZ z9(Pwx1;^nD$E|RyVB{+vl(f=_d0`@%IprNkcx9}w6u9osOe}Wg<<$dnqCrwPFmKwjaw@_@_Hq06Nx>5$;{ zR9j-iw8>I7@5a_R3rll&(xk74!MW!lQ|X`!aDbfzcYPLBZgHuZ*q6@+8sDItp{&7s$wc3U?;W+9PJWUtF3zUY%o>#rA81D*tlsxyM_H(cXZkpk!Ws}Y&Yd`w1LI5+{B+6 zwcyaH;O5t6=&Tq_Al~eJ(;FADLmlxg=6FG5I-oC{y)~YlST(p(>sgnkH-ngOGFFs1 z*u-;)cv=^Ol1^N6XsnFIy~LP4Y+>nH=7=z6=~?&_q)CPiE~ML5x%*6t6NfVh?j7sF z^Z3^pyzBqO13S;2wS$@MawVzBF&6hro&j7*Hoco5x3jw>(4HdD^F zjkNcdg@Je^zi?!y5zC;6J)EG#q7;KxnXhgJFXLV-p^0O`N07LiR*!^D zobcXdm)FY8xh;eY%UlS)dwIn^7}$e%rP3nJ5!Oi`R8LFJJ_7H!STE*0y`9H*;m3#> z7F^ntMs*Tajroo^QPu|i=jsc@CK*Y~4VqO>PLW;G&NaFkW{z zT$<@0#6+MeUir21CwGChcs^sV62mBa4)r9>6GH+M0y`XAKcdZJ&+?L1(wfz#HZFdt zJpf^)c2Svlryy1xg@f>b51Kw5aKl?9?<~N7LKSaR&Gu{q)w>+6I|eoUzbkf=Ju}xd z{DnvS^y!3Tno67WxK9^xw~6}@B$-}zvTLPl<)Jxa>xO|NHx`tE=aW~f=0{23uUffT zX85ZV1Jyh_DY+A*;?-;Rs}e=YtSV0&0)}4;^iUaH>Dru(f!joAjqSxH@TlR!ReAivpjm+#IXrDIXc@jy1=lT*&eoQr zNTrBXGA=~_<$KoD*bmFseQgm=7EQq&&FdP=&h+2yHGLoVJuL9VTwmU5uF=Q|LEn45 z+pu$pPjdjw)_1~v^8H@K_|Z+r$yZ(8%DuYj2Kxv5eeOd8=+`rzV`F_m3RMMIs-Kha zESdE0;HVa({CT#@R|O|*xzPn$c_LO9o#lEBhk1>B^^W+0HTZ|?0WD37kH=k<7yaF$ zir!99Ldr#il1(g|2D6yv3qA-6Rtf*kU&ll*A9ji#phF6NXf{9BSz zv0Zp#yE9th&`1;g7+Ry1(Rp$V>D;np8CIg=F96Q(6RMUa?MkZiX-i@ zp3(gJyf0U$b4E|ANd2tpq><^eP`izD=_eJWVWxuCQCwbGqN!LGUU>}AQ8=$fg zS_Y&5-8n;_xzkX8pNTQ^#O_5n??!4YnNu|;#-20r+hK2qhIjB@Oa*s%J!@6fNfbB zdeVZI^Y4&-*!kWE`Za@0c`^3gw(%2sY1ly#c!)#k1+&w>h@e(RMx?Xl8^o>9Wwl&@ zMb6HbdyX9DkzZ#GnnAidGZX2IZQs`Pz52A>b8}ly%idm+u5~a{7=`ZYnQPrH=#S;Cdp1Iwww6SrAE-{M6UJ@xg72z;}kE%ID|Kvy)FDKVz# zi-376D~*G?;kdeK&G}>dD&oHd+v<6UPwcZFMSOfoc!&ePGY!O3yfQT`3RX(crvV7R zvkEyGNYD+k_7KiUVoaNkO37 z)24Siqg8PQ)f0vyfTj@VkeoHY`ojRAQvB_6`a77$-~9`6xa>taynBV`cb1Wq_<~-`1Suzr63UCFvWS)EWV<(`Htv17-G$9X{a6m}tdPlx z61^AMuEjm?KbL$R_Bk@-iCiX+v*#TIu-KKPTE~vY@8vXZNV)`eHxvi096ShD(EyWgOFTWD!`t1aud+UB1x#~e+`cvyoP`vT7y6Z~^ln6o`+I!_wuv8ZSSv0H zCC>Dv0@_%q9tT6-+>YHPO=AF-BfrrJA&O|tCS zPK~+hyUv|5xJ1A4g`^6KJc6ctQ+~ahS?4~)G_0fYJD2GUouJmeuGsD9HSsZS0IEm; zQFwbm_Re^@{~eo@qIPrE8OAC8L1c1qkzPl8fxp{*iNk{Z?GEi%&%EXP1}+}CJUXpf zq+pMJ$76UD1yywVm%F{7bBroL)5wYQifU4PG4@YKcS3T4Q- zYrNZ)o!{`AdX@QtQ*6I1(#+W)eUvtOCg)YWsovCZ+Tu)R;!^P$sTmomPMNM`m~(pa zbCz;lI<~&Phs%4|hsIwK-#FvKQ|I~*rW?7~K4oOqAK`;i(HuPI_nx2uW;MyMr(ESP zr_e(xRs{prD$mtWg9}zi8-{FSsh;9${X5RWuc~Kpq0)K;wA(cIUH-kfVx6a}EL^S_ z)3A$cfTqZ1+CVHb(mD1H9D3S$T#|puR|@~(aB}P@{5*PiFLf?w-h-ACO{PY$$L;I* zmCVh#){aqYCG|sL|8lC-vfrvj7uomalN@UE9AL3hbF=Eyaw7ci`aI1Ivz^iIzpTsd zWB^~`StH9qmL~gBdp_^2mtWLg={)6qQf~4*F~w@pT>+K`Fz1&@j>baDr3I}+a!-R) z8`Ad)+l5c3*KVk6XFt(@@iAh8uPJkW>!C9@#q47Xa8D>~tZ0D~3gP-h%qtjA%??Vb zlxH2<(NzI;j45V-Ew^CGzl---4UH~`-Mme=sI31oTF2NsiEDig&n)eP^BmsKRSSe< zSOMbS(I6UMe#}5nP>lzsnrtt($^+PaVzr;}j0BqWZe`un6#cZVu_%5+>7uSkR!+k% zzv$e0VDGsbx4GTeo<>O5VdG{?VgEt%E^F;fu?a4!;)4=R!V5pkT`Fl46e z1mCx_|L&+vfVU?iQzp-Xn4+MSTdKj-^4h@JVf@?2Y>LrT+e@MjV~qxyl8RRYdBx@}|KhmfQ`_xk( zdgPnwYcesp)Q}}?EB94{Z(36HYgw8)dC0JC$@HepKCr%DdB;$VJ-PnhwnNTpK5*_G z%L*N3PF}}$@Ptuo+4{*rq%;1e{CGKLGb)H=Oi zsXnKI93fkzcX{j^M+wPfqEEf>X?i-RA79Pf!Lv;)tf=z+2xJ`*xw13RMp7fF2 zYUj=aZyZ`#$yCn{+!}XUB~pblO9>lXm;Y9bf%7ni+O8gtjr*)w&T)0M`?_Kx&IeX9 zY4SWFE1LfhW{YPyV8(@illO(tnQcz8=6e^d?8J>7h96}}rv63=w_ z{3B@6E7tR*`%3S*sPyczNTQyzVWq6$tb0Q(163C%wHn0T4k~)tz%xb}d?BxNuAMT= z539(a(B&*1$-cN**bYcw&Y#|UqP{A3NLu#&W6pcV!p%|fNLCzqzDxPrv!|P_`GuJ+ zPA$XQgb%r$vBZOj9wA1Fo&?vbTn8e$z4;@zqqsU=*}&p#!jA7kzi(yvT~Fu^J$%d*pEz5sk$l%TI?S6M%EytH`~yO4vHFy48M~T(!fW)C>xQ=hVGQF`-(MZB2fRv9 zv#oXJ%cuQ0((|_Amc}P@=81o|TrrntwWzNePe;?dSP4~|zp;L@nA}cEq+@8*Tb)rW zV)3lXued??>h|~F{|qwE#vd4@Z6754CVTj3c)}>$;ma@e zhmU?=f1hdY*<&8*c$xp^@>)t~7gRV9(pI@5P5F;Cgg!_uqn0#^*R?4tUh?H;6O#R% zXS~Z*^|*J&+$WW+c-J5Q*byz}a+!iZWDGv=M_o{EYmAaYyDrS{=XkW++_j>cKYVyr zYp=(tP^qmsRWa%)ZROSW%$cy=h3m`ez-lja$kv=!7IkAFY%w;xLU30#4ST8V8 zFtIW5qQl6W+ydm(UXJb(jct`KTpNEDZQrG~V#0H)*%D-u9Ez`p*dX?nv&qw4tKY0e z>9uzlL8}hWa8x{7Vh3qnRz&xT3uYzw(6MibL#RuaWhPrM2gIebsW@iX9C(Kp8C6vMW?&0@$; z$EqY038L^d_tWyrabA95Ya@KM8;cayW<{%_!V}=>Up9)?ENjr=4qw7U&Ax`L{@#!8 zxn2gWTWh_FN0bp))rb_0;C5F`t#^3p$0k7HTTJ@jLE*-oONzDa0xR0iHJ`Qw#i?CY z#5g*b#abeZCtiyY^WbLO_)_WF1`fv4B~$Hq9|Tx$03KwI3zMuT>%Y$0eY3+&XmTk( zlCjxgU+-h?tGB(#*%26NlpcdyGZ)`s+pL*Wn?KMFHlR})HY`YwVu>1SAR2p+J7kzq z|6Z=eZr;w0ZQT|1DSV<|k!aM0vl^50G+=ROeVT4(y{SDUKx5D>l_zISXAI6naMd^* zn3VEE=AM2Dknp3`$NUQ$k$PcHg&>=jU*FhhicKvGNQXUZ-r3y(t%KzLAC|5>EQ#*> zS5|7~u35R@PFYIjTbc`GW@ebS+k#tWR+jsQB4kpoxly9IP;Z%)CAO-mP>2g@Qd-fX z5{QwJvA8hk2)}v1&+iYO=Q7+mbMD-8KId}|cjg9F9bLNOpU3xeuaqC3h?xB1@XT)T zmFo*;zO8|jI5xLk{BnQk2fdF5&t1cgKY5>}KlIWvcuB~zuwlimciPv3FZHaS1^*W4 zwRJ7-@WI&Mv_RepDG9$6(Qo-Y!5h2H4XFOlC{(b;j%4*inbef{huBWa@j zuUnJ%yht<2P}{!gYoakRxlVuQgJlCHclCFk`*zs={yXBUNH$meM`6-_z$vL>XMx5+ zbn}H^(qg~s&(@Z#x^nZQ>8>53!DGC(_sW4kh$@s*yGEC>#rwz4Le}!de;jx9|EQVl zT4R&;q`__bNrQvY)l-@1PxLn9CzyJ5d~EC6*fqTIV^;Oa#1#53#JK|BlU+3{-(UT` zLi|VhZ_)|r^gFF98(-95UoaC^y~A96_F_lb<4aL5pU%RpwN1Vc#$EdEmb7`R>`wWq zv}@~?nG?sKB^k{mW1}8wc`k)sOHqRGcgXv6GPSaAdz^`R6#i?-yyDbTJYK8d`S zsf`Zdr_xS~M?Ne-yOTSz zkAGU*JKR3GQ_Yj}((BLE!$-C4Uu{3(Bz^nmpN9G8%1#{&u5Nm^ZiDT|n-7oM-VuI~ zPfYJ{OWAR5(e+J+8&<5XTla$B^;Gj%iuIG+n!IKFf34P~JTW5ClplH8Ce)#2e=fD2 z%Wg4m+UfMQzZM^U&~&KK`R<*!m@C^}760kI5Lq7KR!aF*a->_?!P03B4yht1#}C+y z9F~_h)}Q|}WuCRgS6eor&@nx(8!NblW#2RI-*Pe?tmxnMGvV&0y43RQ;wuxyLvyzV z%vlNg{jxTXFR+iK0+Hfw`;oq5R7~2*_@cwxa^0UQtJLeDs?3s_kH?bv1J9_`S7py~pM7bjfN*)}&mo8MaIaYC8Q#*Z7_`D@v8K`K#0Z52dYHXI$@V4J2NF*B*v2Mop^hq z;oFpId^Th^LcbjG^v;u-x|bgk9y#t$eellAlHtgB6I+|A9(DIe zjP~o1d!_UG^u4pWp>Q+&&kNNDd*h!yI8Hocm4e74-fY^eF1%RT{cat*+#^6Q1HcV9 z)vLeS9l(CIvgBfVISwi&1pL}BppTatZNB;`Hr8CCZs9*tS|$Y)K0cS&F{we=ezev_H{45*Bp7)@Sx>WWqt>~(R1fb z)Z2@%rt33#U;QF0v%6=k(!Z?cNf2~BJOn~&rY4a zd-m$Kd;Q=|%tix4`XB$y1LMexr^HPjbC!#;p&g<2C+&VC zE=b=#F?^ZN-T@wE8v4)WlueuLoP%$fpzZ>7m|`z5fC=*gotUc2z(_9LN0w+I5M~;w zER0l#ri10yN^`#4N@==Rh-Y%dlM;13SP_t&TkK;-5D$-5D(EIM`l2p^Q5Q;2+M^eG z4KU25Ujj(E^2sqty&mjCPseEUB&m|kwxZOnGslQO<)W?uxa-Q~TyX&(l?{01q6&Zy z{%(XFQi?a|W?$2$Pq2`}56mGfp=D#uzeEG@>EuCzzVrk$KGSi>#1C1q{M|;C)q5vh zALt9pM7lwrewo)?HXUuXkZ}N{-vZbqU=@>K+(ppr3e5&W^+W3^QymB!T09D_+>mQ> z8)(6${3cgYj7unMAeE3Ar2xkp)XOiPB6#p!RfN+rf)z=XQ30ZM%ciyngm(5SSP7uY z0w~T3Zj8AcG@*{wLjQmx2UG`*U_#aX+ABP#Jw^VL-B1{Lj)L^dg$FP&zWTVl%j#OuHX0D&=c-cU9$w0$8^Wg#1E>Me^ zK^02~;oFx=5&F~};0C79O1YK4FPD%#et*V!O0`x%*Y4^WZ(1vjm9`Lp)LfMJph{rIte|7Wy&?ug70{{mjV8Zhxv+{#R_?oOOtv=7I1r>vKM|-wkDr%x-U9 zI_h49ja?c)j0`+Anqi->GPIEQW<d@6EX<}j>ymsIMJ=7tp?OcN{CA(f*W^m?W~Xxr92v#fEi zNU}IJh%LK2rEz!4fHd&k-z{|0xFpsH#_m&Fewr48^a$n=uc5v>rX%Pq^l)s>V+h>OY6FDjNScRKF*o>!n(aZ0Uy(<=6OIhJ=7n zI9@X!vfP@=qJ3ck3 zFU|p8=E{9>a3;qGr^6Rn(M^z3V(1+Co@Uaqb$ZYjUblC}m~u#Ys5 z8u9PwA$H=lnDy2)JAR@*>{{At>E_%XeOLit<-c8}FMX^Rng_TtV|U}CnX2w~ljf7d zqxi7jPh5tO^Ujlr)_bEo_C~#8dmw618F$jy!LOhkMP zkjRU6v>Qm@>2o!ukM(=fe^}qkEZ;I|SZwNkXPRtD)8hMDj;c$i^tr}Tb$v=9vwuJ?aTLW9~@D@DQpMYM5-EQ$_1hF7vqsX~ulr%`-BiLkNWP%;k9#C!sVq&c_d%@SOD#-tDWTBl?tUX)C4Mb16h%B@?l{as2eVpxZ#=0We3Ok^`V~IabQW z{5Bif^7vt8b2!a}oeE?~aryM-YdB6@)8DhcQqckMP6duHiw%2AFI}%v1RqvrY#OJ- z4=J@OWUx|i#n>#}#Tn*!T5xSak83K;)Z?y@F03h5j!4Nbi{mu9;_vW+jNT&1vTP;oX!oOz&L8nV%xNT*?5BdJT4?-|>n#$S`5 z&sQIR&+V%K5-WkUh1#&6T-(m?Q`e^s`Gb-DuFtC13$rVebRq}0SLYFyIv0g+H!F_t zwJs8l->FDue((n)Ru}brXXR4EeqM>F1bQ}eGd%e2*7#-Tb=@uTJ7KB#Q?;U}s9S(t zu1dd;l}mZkYaF#@Y+Dn-C;)Ulgx>XHs;vi-5^}XujR`v@ecez8~irD*b1-1 z=UOV^%$(T-VMOK3l91vbGEHl|Q>{zo%udf|Az#SH5gSi^j&B*IzL~eorLgFr>F+*FH|@@9sEGe@{*2k`H-%~(NR$n9QXkaZ zJho#UJ3g#Sb=GWMM0b{H#mu*Bg=T4noshF8GNtJ&#D_55h4AKEfV)l6jAGsrzky#+ z39aKqEt7`s$2&#wBQiG*2n|=N)cGwTP1S{*u0xeTm30v(`@6H5h#TXLTgh*>31Lds zGR0xP7yh?UJYzN9rIWmgJHKeC7IsPi=2T*T>+h~5T=!FH-m95UJS%iX1^x>RE0=xF z@aTG^PT7qMWm3GrIOdbu*~3hV545n9Ti|LzXsTWMAC}Zcd^0U~N%01;kjAUTzGDk~ zlZyC7eU3TS_^o$bGW6>Xz4@s1**zQ^q05w}7040F%W3(3FcDgcTYxj4c*MawVd1|; ze)ni`^fb-7YJ@-1CDszDBXwD$0596tq*ed~Uo#ObAnNVnzUDL!rp$3PHI3}2 zg88G;izg7rLe6`GCzw*@vU0MHw^<(=ZdvqQw^rUdJB2({E8IN!I~)0T(vUO%80hH7 z$pg=X0J-Y}+edrG29Nu1A4`T=kdbG)?W&O$IW1G3PgngX^go8NZ6tqCV@3TGgsPTIod@4QX-%ym>XpXPI8?x$j6zR@gFun@`KOZ_B~)XUttfE_O{97}z5}qvFO3 zh3g0YYKX`BcjL@Rl*en7TF#;EjOjz|g!~zUH2fP8_o7};dfr8Sb`TJ%_HZW6t z6g{)XB=-X`EtG)p?(lwTS_m|+hnZ53E!WPWKKZ+O*(;0tJ+91TrG+kUR>z22JpZvO zg1%+ui}b&<6Gd;=_;>X8KU1BeZRm_wJ@zsaZI9YKj_Lcz`C~S?_>bYKYnv{9Hy_A; zBh93^?mqdskF0cFB(1ri{AytAS|Onp7{hi0nwd8ikDSR3`T}l9vnWopOBc`P79`=X zUJdmEM#Ao&+y^9b?h8*aIA+w4gMq-h`;sffp4cGi9U^@*Ix}bkuZN-T2nVMCr@--`JXvO3?FHuBjoO)x4t6+GAzW9(z5DIiIWt#K7g=SHBYF(Fei;8G(clPlR=Q z!jg{&UMBwNk1$4T&59W`0DE}=T*)A;p}y`Ssx%D0y&zK5mLCxtanT=`bl=dlj7OnA9Q;}>U(KgycdxxHo`&THe;1513|nZt0ac%;OuyuCG;#wRTg(2 zQ1hB{3pAJkxA5d|yk5&SU>fShw12tF)I&06Sb_!oLAI#@-eco0Up?jP+YY>VqDkh1 z+6E2O>XmGvKJ91bO#3B?=KI@K8Y+=*K5Q2d68k{ttw|T-ZmhFONtFdB~^u09tYT zf4DJnvMl4=c_upugj|X5Yu?B+B4Yc=I+YvG#pxiMVxVM>{Z?c!sF$=cC&{9RiK>)5*|aGX z4P4lCtF2V>ev7e6pP|xJUlnQtHsu%-iX~$^Ea#xDc-uZcTZJ1Me|e(rnH3NA&pPB~ z2|E1pNUdaobXeJ^K}dbhch*3GMqQ>F+_V+_p+xFcH79igypDeoS~E7&r!H|NuON(u zye8?`{SYwGQ@&rEPqha3l{8S{xY^APsA2=!`qlZ!eE{>?$EgheIhdgZDp1PRP@Qd0 zkEJUsL5ldk@W8^zSg{>wx@p&ATX54l_J~FxX7NIS z-Rnv58ta_nV;HJ-+FN!ok-GheR9ypQeYZB$8Z@l%4S|EU`=8@{fH_MzArQFwBP^Me z?2P>s(iC6|V$Z6^iLs-PfYS`$%X|XTkYL3l;N1$6=Qa% ztyx`;+zXuEgh{_DF{U<5qu?O5>Aj*{@@n3Qd$z+rM6+n!Rej`I0mY9P+Tv6gM2ywa zdV?hfUYeF$;$A;-K*ci}T=utTO9phmB1f6*VyLoWP}d)2$8M3TywWac%?zii$pKTnQIp^C)`s-!lJbR5 zQ#60jp7Gu5NxX-l>M#R#Df=M@dPkHMXy|%h>R_mfC7P%op5r=8307c^`VmFp@Ow|? zF-GVdri;RW7ziNc-UsvJNS*ay3O?g%tq8 zP&u~D0Tl{~vc-MSc~4bu>4EtG6SoKrwzxkI>!KLstWyb#4Y}6f<9%VCKES?Pfo-`G z(d~|r-M}*MBW`j7q?S=5!dc3-ZXY{PQLlkovdw^C4}NLNN2T4$0QYGU!fxe@;b1_C z=>`q@n(4u0A|aukpJ9MEf1cyYs}I(mGU1`JI&U1(xq2qWLw?g9l_n;KMS=y&THxsC^ z#2n-Sc7`5)lINgYOl;1kOl zlsDkg^AMy50w;d}szVI4>Oq>y>#tPZfChJMk{i-y5{&7k60fE#tRAoG*l+9_p39q8 z^GWtfiiUV0YG$-b1F={kNnz*`GjoKM096kk5NoW`V(4DND%=?xcIZBncK?<7>e0;q z%wOLkO|`h>!|;e% zUwdUNk+5ivbs&3WEY=6OQ+0VXFAr5E3CwvYT*q?}Q)|C#pw^giYW4s}B5sWs(Cq$X z55H#8Z%Aswv*ieXkOPIHZ7T^8eCjhldqRZGk=pMud<%jBFZ41JyUh>+^z1iH|JLLY z*71U}d7W734FKwMK?b84v0aofJ}MAcNc@ED@$V zbw=G#wTTgW1q&M3D;*ec)Wcdz1fT8?b&s3zYDD&YJ!+?5T`{OyJtD zbN=9QB1L2VlDR+FsezjGy`lV{L(rd)@>SamRhbOf$Vut7-H;#b1}x%AKQt2M%dszR zO5kBI=Kx@#iTlk9c8BzR$s57`fl$~W1^|jER4rn;_O%NQtbtj z*$;qDmv;irB~0@&-ZyU28Xl|8K?zAj>CY|Wy$cI_S|UNlZ4Szp81CTWHF#QK$dt{}vOg%+Bp6P!tBR9~QALtO8I&VEE$_h_P4N5mC71UmW$6flVhf$|QYnkGN5`Na^-q`;-yvNoxk^ zsL6%>dH1jaaMmOMTV`;Jcs5}$l_i6orS>Swpi%n(8xF$1gwnF}2q>QS4}P<5B|tHx znYz|~#c4t2qQO0%ctq!a*ACR}#Pu-6mN@4YiDU~SXJ$to%SJK&d2-IQ}FX`-tX@+{DJ)xPo4ZELoHKvl~%TRvU!w7m!8@<5bW@B-S zd2W<&Ml$lGCe;o0a~XrZJafR$AF0{{Gqs$g(yagqe!!A1 z@C6s1=6h1C>o-qTwkB%L+wfI9I>YOCIwSVd!h;S?)QWFYr>-^|D9!&kTlfHZw-BCL zk`1r%7wkyNBSe?WHNUfoqD&%OgAiAduhM0xmMrfI-2|Rw6r0!6q8Bz-;>=tDSU{TT zAD4Y$Y5F{R|DpDBiTCJ!w(-eG+2hwbwtIlXaZS(Fd9lU&ClK}+k;@59`ux`W2nhW< zm<|jfy|Gpd#}wxj>(ew=hH-5$A|d1%yK?x^8XQ>^CB72(bDM+mEQ7LWdxYs*FKWoX zmXOeo20B0Y(CmmJS)rj)o@oqGmeB48(`;MN^$Y!&4{$N=15^8-%wuHFJ;1!n10YaO zx#SNWw=2#0*H@Y~c<2}%+>y4~tl}3v*`6cRxoW5!^thpPWhA#b+F_c%PY^{3wcbEP zT)6lYqvs8N?g^z!;U42QrZRp zf7)1;gYqc!#XU=c>hvP6ffTJqr-2SP2C|@|RhBqyGmL9_+(=BIy~iSTEhj7JqDP37 zW$6t)nxQLXDlMqjyaSJOc|`f*`)QeTICpXz1LeNA3!;38*ux;!UfD;4Efz0SOWwW4 z%S;)eZU?3K?`LGLU%W2v01TQkxR)h$VH~$2$z;fWw!2~DRHzT2*%VUCW^!{RF3Q`r zP)R5o!h}B(_Gv!F7w~V1{rXyDgL}6Ax8gKIoTYWr$r3bj zb#2L)&1_pOp|0mB)w%ds=b3}1QB%)Aay_f48ipEuue2hb&=bY?v|;HPDX zH-A&t@z6iQ-tS?k#YyLF?eXh*pH2h@047aEXYWeGYfpFqA9NdpLz>O6X@7Sze6uZP zVi-YQo)AW;E=hdmAK>s^Ozzovf8@$(NoR9vv5I591v?`Btq5kk=#X=WqU0e2F?xP> zCZ%8SZ8T#YFZB&>)77|(T$&A!?VYi~%B;Ty_pB1oCaOCfZol?ZnAQZbxctRUD0It9 zw8D`0opFW6F{pJtCauzhfpu@$cZkK=Q)LK)#u?pM1De@DCRige|7`@RgL>mL5~|-g zDdFhRJgcdg)Km7HnXN?02A)UnS;h-bl@5`x%mlMk1NGZ$#-sSZ$gvM`V8U0Eld?CS z!Cry|(iksBzO5(Hm(MkeH0f)8FW50Myi}PvlG|aSQhlE3YuYCcQLL7-HWMD1@R)Fn zBFT7-4|8X5z8ZAhesw4cvGyKs3*TY-6 zHoD%BkWvmx+4f-7n%@co#>}$496kJ|Uw2~c+ELZbuPBnf9VnF%&)EwmbKvz%-Uc%K z-6(oAp!i`m!4ACm3$c*DMPb<#OYsJNqOx&2TRtbAAVzyeU6&ZUKTI<4cgxu{VTK0a z>JO3vA_od_>6Ozi zD^APEVGCQzB=VTU>}dvKMI>ZOg5zH_dnw}PjI{Ms#f!Q-n6y`Y0!Uj9h5mlcvy{W zYbU|7o$Y@_N3FnF(G@q4X~eU6xTDw$_}WC@zY93v@<14@$q_A_BQ{^kezKs!HS8v- zX@&}MU1a@6&OAi**8I|C+jvOeHwN}HYzRl#&3d#YvnOHp?fQb}CYqr-MVm*hLB03R zgk5RIU*H5U;5ec|_{OdhxAqqaI(^A>MH`gMRcqDm2Hue!EbPG5uBk9MZgF)LGDoti zDTiJt!A?Q6G>@=>$L(BpDR7IF0&mytC5a7bHh;V`ebQD>qoSdGeQWdSG3V@62D64a z294vA14NU~W$uSGP}-kwBx<76KqE(6aP2V;lz)e3+)vVhL&=72f&s5eJ1cp^)M$Yw zZ29DD3geD(KGzq>_>uNAk|AHNP&qQhSH*K#lK3OP6+sM_OPO`=-fmGeTIv>B;oSa+ z-dW-(DeDLfvHEtaooS9=vR~*ao1;Eu6rbk90)dgh27o*$zg+u!IYUmI0#Xg|CO}>~ zQF87U1)C)~cve?zXpyz>E>M%cctCq$FYvkGFn;bvluQvv!!PC4XV-?K877w_de<^2 zIhp+(5X*5IjG zZKJ-x>h~s|dja=b1bl(y{4rgcZ<^WYyqcjZ=mc^TzKGf{K)UMw2XUFy+9-XR8OE{h=>gsj9TH`;@Xe^H7JEiO+zWa}egvsjc3uHgD!l_^7od(Jog zbDbq#()QvFQ7nCyE?#O+qeyPNhn?4;8w_-Q)>mp(+ni)Dq0_Txx}?NVb!ng-XkI}L z+ANK=^jIu<*P{`;s8xhzaMe5BL=#nu!Phu%U?Fbt4}u0oeP(Nz&_6^A-`K53bEzhC z%O#FK%>Kp@#i5UZe;BFDJQWs1k@%?wXDY}Pav;K8W1>hZv1O=V?)VGQ0%@Ev&pq}& zpX<|Np$oJ1(7>yZb`Z%>S+y_dHc_8w`KkZu>DFtM?@O`8h}au6Ib%^Jah~|U0WF`u zi_tBgn|(Funtz1fHRC&EYW^bBwfUqNo%_vH-b0{ zjYsiJ6Sh=&B1pfH-32Ag_YI8*`FSd9o=LV+V9F5D_e*p9S%RRBTM%V@MRU-ELg9_L z4lxGZ(%7?`k?h$GO~|J$4EUS5g>{S>*I9MOjGKH3L)>OOXU=;y8f$}L_XX-T3Wrp8 zL{7J!?RoiPv3jb;Up?EFHp5}77Vpb#ZOfZ~=w!F4r>5#|b6wi(rEWT{O#D4EHHlX_ zeRdO$rhi6$I#Tmj`3g-f>l06?B`7j+-lMp3me3H3y0F@~;rdV{?cx$y?rOq~K7-H_ z(6amX)+VM4oPJ3$k;xi&)3hdwPMfu2;6uIRZk2&f9F|T(Yk*E!Uvfe|rjgVq$d;H- zGY?W-%F{ESeC%s@p3(7dDY|2jgzk6>eO8p9JNA~L=L3yp`yX8&y@dHDx=BKH0j!Xu0b%pf&}4YNHT!a7}%mB5()I zP*huIMHc#7$aXx+*?FCTvHI^p1nmaPpLMHfDgm1Uj(6Q5a>| z>Os*hrF36<+#ryRq*mcBtT$AZV`%e868Z6Yj}yo1`%)<`*z}D*YKp*r{;D<#%s&hq zEx|3B3v4J!?RvFzYp?2cd`?N9{O4&IX0=Pp^>(e#Q(t!}%@$I>vqWJbueYPYNLkD= z!t64|iRqpWo4{+yoIBSOi;MT+``C9gSwpvKJe;vsIQ3OFvOuqlu|za@Qbv{U zQy%DZ@9+*M1)3$G5YNdc_|HhO%(RD31==d2DGH4`-y z+o-N`Ul$A?p`Fq|SR7AB^p0nW)mp*EOkp~& z-R|L^BrE~F&uP-Om9_9e917ikt%qgY2QmDUWsrU+WuJ~U;}*4kj9v;U)NhH(=Z;?! z4C*|~!O%p3CFqR#$ONo%*oG`*qZ7`-0Dq@RHC}^j@VD;~Bs8>0I^kSk?+&L);aApJ z?baU0i+R*t%2kt#GJESfGB+vK|51Nljj2@=^>(Ii!xv({vDsym?v_Ws6kv-(N0up!URJ`?CRSDOp|5Of!y2W}UjYWPbwyG=1ov%t&9dGVtkWvFL@N*Kke;7p;wZpbm>spaTxaK;V zF9ZlEv=c{h1Uiq7cB0!LdO6z86Kuhtg~9DtL*rP{J}0@)-URG`&=S(6OfZNKscpCW zNqEu3Y=+abu;&eXsl1LDHSFB;?m$u>SG1)S?1&-t%_|}j6z(*8GCkts+5ocf2qxhi z+i$lM`$>{uu$EK|p4&$XT%Vw53xbom5cC;9X;`afM#*=*`74BQXGH$P|uen%llla=-*AIydzZMh(! zW+{YkgQYm<*~-Rt)+k)N8t^neG00tlG|bqA=@MbQK=9_!Tgp+VDRrk86*-#Lbs&?ZUN*JXn)TchpME#Xk5B% zBn{>elZQapuARDGRfcv?*&vJkLXEp+hj&#B#oK$5p)*ZL^3JLACXhs!Ew>n3z+u&m z%v)fC`ul+0kk-84Zk`DdV-I@kM!u6l*8%Uv3FoMg^-p$tvQoof<(3JpG4L|+lryrp z-DY6QAc63w;b|3!l%aMZ7f+p}mh@$&=3u^2LrCnN8OghY)O9n%q8pbmzi(87o}cSj zXr~#6ogsQtoQF`@`VDFHY>QcDdtg*ohqvwtS^o2PWx#rc(YpdveF|qaBQA+ zXXDn12tnI>0+wT-s%T%=ZL(lXRut-s+&fl{ig3T%dZKJ8*RU>;y^+X>NZIOR^wdSz zix)uTP28HF=a!Sy|An32tZ4Yz9aPrSm7c2ZsDQz_pBQ(=#|JtiWEHL|zqPIluzv4p zJMzp$SqV)0pNX<^;GsZYYW}Sn)7V@jNa&ccBa5Om6zAFr1235fTU55K6C(_&=jz65-uwZv!%4Ki1A=5Zn0sw_><)?CL!(UeMvgq} z7dYov0D}VRCh;R{MPxgLV@*~})NE9&v?I?}YnG?)vtt*{SOgv8b4qiu z#y@X(*weEY_KlKM*}~Vlec0T=FB9`sYvnP2Y6E56e-)?gLUWbZFAJb2@Snr5YH4-} z$9?Z_Q-nQ_ZMGs~-`23|PlbG1B1>^Dq}q{%!T{OswAin{7DlHB>o+ReZD5lAyO~w4 z!8AldsnCm_5}z<3ZtzF0nS3?F8gIL|OtGoGIoYnb08}sS=|r}V_1c7w$~Pupbum7p zD<&Kv;J{z+TR%l$MS3=GlAZX1`s;~}DV);ee4H4JfsruZVo4CExwt%GLiZioY2h|r zz?O6z&GIn*Og(!pPrO69m^OQ7?9DVmiFPpm?W6uJUG*Ap974y_UlM5oLdVyZLPJ!#&EBfAeB5=81P%hll21rN>#EQ}os?f^$uO z_eRS4mwjm5S!*T^o@70{V~$^~*p6XGusWVt04rpO`<-VV7bkFc!CZ z+eC}w$dunsn#CBrpj5>~7HdPew$f5nByW5pNXRU*EzT1qYAQ6IcRsSGq%!a7mg+LV z2P6Sc%^xXulm@bV>$XmC1y4gV1xEv@SCw5!kB7&emBjX>yBYUpHw_$1mSuX`kCft~ z%nwm51S6Yc;-1>!S7CK=@{4w4X=6t327>d1s2s=;P@AaLLDBW(oo(qxvLg-q+|(86 zkH}>d@T4YKL{bg)F`I2e^B2;umJ)tn#BIcWOY7#8!aI|nUcr1WZQqOZ{R~CF_O>fyIN&%Xzi-$3BFpdVd|y{UO5miaCuT2uF?9(@D&MMS34Et zC~amn?Ajy^b(GRsh+SKy>%YC~skaHuo0)!F+D98b!cq?l@mi#?E@a1|l^$&@RBpT7 z9JZkgo_&rvGsjX34`=8zzD6Mo)W@i^;VHKEjZ;p`xR1h2@OZ>|{{3&-y|m@v^3 z2)T#OaaJ7+1#6uiGl7%w;BvuWF>H_10$|=-2cx5~rq8{vS(C-02ZEA zv0I)~rftc}0;QlYJ~R+&l}-r0#+y@{1@tR8o$iyhc4YB&w1EC3Ao#9MKwwVhk+D*= z`^ob%Tnql`alRIb)0NH`?~SBvB_y0HKJPzDD}E4bsYvUG{qc30Ecfm;4X^Fekzs)W z&od7=j>2?&6fSzz?td|QDG^bd5J-+S5)mLrT>gT_V5zMSQp?;H1WPce}_{ldkrY{fMP zShI5=OK$z+{p4o*U*kgq9fCZas%d>$_7|}Xsd$lQzi_?%T!kM2vP!Gt?(Uve-xkYC za(eLAk?w86p)w4f>rU!R{#4v^aC7Bn z!EyD9q*R&e8=BP?;W2tFVIr^+Vv(WItjN(fAqkb-bcm53{|hm(nX8ylIjyuWE{5)niM`k`s&NR@B^--t*xCj=&zjG zC`I>nHcFBfif9%`pj+3Lq_ zW}@tLcVr}gto)!9+)C0V_5f zHn>m@L-kd&^aIQXmA8qNpj3^pUnlLHYOB2?x;M%Q^rb_ZWxPhcu8#2Cfg-DyGNPU#8Pc+eNGCsSB-oEPNG4mI#`jjhTc3B zSsSq>fx5L@>jWQNB4#FTE%8|V*=wyI(it&#hgBDPVXI<@WS^Ofnd=HD3q?l`%AtdQ z)?>fEus6S5JX9CD(M^%&5#?OgH?>V&vHg$p$u5J?0&wZh(Au8IIxw$yJHW8B_4Ppo0|pHK-Od+Vik9cDFmUs~65i_F#3h9+Z=q46&LEx6K6m zI*pYym&DF&mFDzD4vT$|x~p@*GEBD`-HsgJ8$a(J+-(K7B6#$)AX=}(VXbD(+6pfZ z*c=J%&f70*epVRR%w*fauEzJC?5zuqH^I(@cOy#CZTw`J_UhC*sH~z!KPk)ey!3Yc zWTW690w&w^M_$7=2ql6mYn@-P#y$SA)y<3?^kk`_E0gqE3t_c8oP^=4S_{2HPP3vO z+fh6*R6P(4ma0m~VGt61T_Kplrw~cc~C08eJ?I zip0epgnq56g?>$dGS9=B5ZXS3Qj`PQy^-xPiL$kM{^|eA5e`2}{pUZiPWBWD*-!kR zaCKLU`S1~Ivhx!x@qr6a1C||Cy8m6DzC~aefhSNSJqd`yE{Ff+Rft}I>tAnFPuKsO7slj!f zAjRx*5@%%z?nuntnFgqQT3m3tSt%aNpfBZd78r4xsVMRv-f3&r!flTiZiO|z>QzqC#YhH^LDC|cH zAXCw?4YVkn|9_*oLhn29KRawcpO9#wgsi56KoXke;aLX)p!T`m28(Uuk02X~jV@_s zARmr6N*8)zKouxF&L_uhe_}DVK4GH1Wsg#iYeP8BSJ_iN8O)60l;S{tv1%F~^ISl`=3&~stOib&^EL=Xn_=7D9;>J3hj}b+eJ;Ff z#m&dRGAjrE6>L#H^iT}-cSl3TvfUesdVq!)=-7F^*5@YIAQo_##CmpWxXS?z?w0jG z4RIo?PX>`$HulcSd?*`0mB4ppoV^Q&;{wzf(@<}`zG(J>E&FOptEWJgnO=?Q&JMOF&o<`>29>ie zt%d3ZuA>uMEH+xTKJSaPB#YWDTc6W!SV2A3LOniLV7_s`L50N+B#IAgurlkY^X#9gbyV8p>f+~6~|x? z>+EQr*c0uXfu~HBmxb=svRP=?=+abg!e<*ah?e=1_u(Fe{g=QLyseTM*^s$4TLe>^ z@X*#&+#=kH?y+kxnSr*tInqVZP?aLgS<$r5UNr={p#I+4nTJv#1aQ)F9L5M72uOP6 zA&elY6sy?k2@2Xkz$m=ZkNk`oWQWL4`EV4fLql1D?p#$5iSRmoe{`>kfxFfzkk#Px zL6-MexL`}|?=`K{uwB&x3s|;?$6WoEhxU4d<-?^8Cg>VhK;6>)_^kElHQPNk+2s-=e0N>mQ#_=f)R zubwy9!ebZu(yY)pKiN=$|0_)>7M%C9D3n)QqQTX&JICbb92F^R{K)s&_&RCOEK2{5&n-C|U`l0XReKb8f2dXV$zmwaK93<6-=TQQY zE5*k{8P70ku%7vYy@w$Hz2?`4e#Fcp$WZa74XXTh~-zz1$y%)d=JLO6R1@1qm-&$Co z?q#vHRGRBtgIC`6%OK64qF;J$#_bZ2vcV1CxcMdUuC#lya0hAcaGA>tiFFk z!=Sjgl$@x8NA&8N{WD=FaQ}T1@DwCIL4b>8lrP1~6|KW!d2e4t`!7?O3t+B*>a3N& zo>eO~M5=TWbwikpbvBP3P`jMl8VMCos9UiA$I+DsB(Z(}dM#GIvNF>$#U(Y(C9^aY zq0P)tNzJq*C|hiKWn!i%!nf62a>J!kq0Ou`X;)m}RVtt*Web%HCWB;_#Gt_l!tcJ{ zA7j&Sx!il^-ZST%&*z-+{~5h-D{XC+b9^j(&4TX#??TjO=62aAvlQTyev({!WOCc6Nj@*Y(!VPH1lz~74X@N%N|c! z*$yW8`Ztl#y`d$%txPioRwS&d{52QZO090YBDY561N%0z<4BgrdZxSC#5r)=trS}z ze^31lmIG}C;_%e?4F~`|4usU6`TtZq=%*kawMpc%W!!H^2v<{4)7&3a5ELxS0i(OR&QsZr^|1g zbKv?Tx->`HYRZ5ygBi%Q`qgvnKRdef5In0pEKE=G_vQSopR54OUs51p??rd~1-gv< z2aftI_p5Qhm>>(E)`)FTk9txAU}9>*&rs`J1Wpp5_7i`chBYxxDJaSSAyQvcs_B7l z6o%>~5VC4?(2{cSb$WLF+W?F+#WXiZ5ZZ6b^S>ZS*@r3QIdCz^RI1Zy2g$O%-5G*o z`-r~};B>BVK~yTUz~e<@t-qji-(AWu)8eQ#Vf zYCZ4tQCOw1e!afmQsx@Wou@S|vp0F6dt3@7dP<&8LqdB!OojCz9QHSSzA8jF6IQ>v zoM4a5JpDBZx=?dVat6(9J#39lKTtmkv}o#}{6uGhT~cd1e* zEYDcgpG|1jCfnf4UTJ3G^io0oKWn(f1a9?CM*Rz|$O`tI`)(B2D{2fQpWje>xU%IK{7V^Aq6<3}16$x% znl8T=$N&uu)V?^W!Ys_=at1oGpi|=DMLA9|nc=EDC}6k0P_-_U6zd$AmcN81d-uF0 z0*GU6G2v@dI{*9)Aq;7~0>Bfv$Lul!zCSu7K>pBxVg6-T$h*uv70- zDGb_&;_oY!<~i`PwFkKlG-s5#baOq!q>{_X2CiLWY??@nXj`rl-<&w*PZY}{cBn2|pwJ7&MlD7%T zd1%o;rt}NwmHoGfv4hy6pjQ*G9*G-SndhO^tmXL*+*QccE=NNe1k*kiqr7n8H91y7KxV{37`P4FZCkckHldLzEnFaLSh ze?FN@u4QnLyTSvVM!Z93v%htH0JfpwI{j*U6p1+`XR6J2Vi|hC&6AZsD`x^^Pk4=^U?lH z+$&+t%?#Q?itTIu)dXk5QP?l0j8J-y z12OZp>vuSn!GAw3j$cRl9LHe(<1E?;r)vWCgjvs1zdHm+{!#*3>u!#P;q4e3G4Zu<@=CKL^Uv z*7$F!I;#;z%FEQELy&I)JqUon(?BSh7&V{bIF_T^KwCU{11B`SVfa1;S+C=w?Afc| zq*_qQkGHdmu&>Zxe)m)`Z#MXz*a2UPiS`aaVsll(jl@|a8_brMY3mmP6X)4FYwN8{ zJu|r8-f$klJQ12ooBo+f!TpSWR!WuIqU9jm!4>*;QW`?6=Sts<#&*3*@1$rB`I@|Y z?!Sl0N)%`ZIK^iPdFAH_d9el3Z!%%EloC-wZAFjSGx+VPPwF6?r~c%809S_txLV8* z|EnI@3GcQroW7=W;`$^M1kGMGoDLa1B6a(~v7ZwJ$1>m7pT7pT+Lfg_fJ3(2#3c^) zSWlaxjV*ZukvpeHrUCJx7o3IS`*5=*RLi*iAz*j zMGA5nR)@J`%g#zp$Yx;qse;weagb+F&Pe!oV%h_tq-+i58rth?eRUDfVqczrK4B=@ z-M$Pdu@p3k)^KyE`(&fn7EMkprFr2HFFE%8CiAi9(RVDcOtDoq}(~r0fmg zJXIw)p!)tTR)P4lisYznPkjhDLnjQ(&ZO73Z~aQiS34S{cZ1_WJWET3N*>MI7lor9 zhqbA7r$Iat=0X=%StrZ{-xWDwGm)YuU=n<@LH_=kLIaEe1XYMXaY_DdYBdhKaS>eo zy&8{qpWM7lm}FyE4IKUO62jNYr3?vw@?#!h^cDspqb}Q&X%Ej48>`>_Mdo;vG8F&% z{cLho8VSYqp2L=)L7x+;@9k|K;3SOYQ2+WWG_^VfUcBxsG`~S#4oqGP%H~!du&3?* zr`v5ZRt_9|zz0jSr-SxSbE&aj49sSC^}AqrkERKGh>y?%nKR_JKWwWzGZtkw(`byY zE$-@YB7D#y0XPHd@C>+7LmUB`G8_xsrS<|=s}355Y_Fgi3kdz}PX+3iikIH-*38fe z8%}ddr6VsFDH6NNWdPgJ%Key*$TI5Ep^r1cE(wY!BUV50 z?h=n%faP<_g+r}&wJB44KM3rQ(MRtW@>o>+uU7iyWr|UMz@M7;(Fu6y`mp|AOy%;R zK51kjwq3C?oQ#Zu$Hh$PnOM+eN;>==;}~!eI5kd1SbhqB4!pU6D=zHhsUY#-)iEeoVX`FUj>WO!q5UpC@B?>ji0D4enIeI>wx(Lqt zZU_z4&-wL%3%yZtcfVdpx@I+U!F##Elz%*|pM75m%$g05F!tJ51gxiD8#_WiLTcQq zpD9)WQWz;MOuuj0M5Lf9!&w(xP2Y9^4K{;En*%#b*)0TDg_+IKSA{u)|Qu_-MH%5+Is;Y*2ZW=WJJ{ zLKs=UYWQ<}g}Zp)UvNZBP}LL;A+t?z?0Uv^pbImn0)3Ge_cwB|HrgwnK#Tv+a~YZm zm&MfodFY^DjyTlrr?Ln%A69`$t6B@NJ{B;0={YN)3mq}G#j7~*r82mjZ`u2QEWG!oFDPbaODIosR zaIpPn$&Hm9bb?V)=lH6N1ZMqvz<%4c84!B?$Q0TMN77kD%y(193l&bD!+Z#C&Isl% z)vn&WPH~Dt+hU(jeRbO_X7EX&NgK_s1jOlL&-J2I)s5hmJ_qmH`4{qHfId}1)?V(% zo#b6CiVtPmQ>_G0Jg%aCCn_s7B?OwfwV>x9D*x)o&;fux4nb?;*;=dBSPrVIN8ux9*vcKXUWG4N!kL zIvA*B$6dk%(MyfPe{lHSO9`FGbyk%zLdor^SnodR`d-lE;5{7rUx(+KjVI{r0vxu} zjqEXO4gk(l60~xa!H;tHeHF{W4arOxY6uimv8w*&j6L~a$FdNnCV?B{$LP#h^FN^H zJ%Jj31N3|xMqG1U8CnX+ui{niN;^((5WUE$wfTb&Xpmu-Zw7o}iBKK*7rf#yR`~yR zdv#W@7IYKNq8{1C7(JS$*n~O#C>ZYq9vaq^1SamxoN-KQhaaILHk9> z@)b7XbWLt(MTpXXxDCD=MkT7u8x`dBHlN)_U z79pE*Rjh6OFgMu4Ms$uRT?#My%#Zh{Or_?dKnz$ise-OP;)z0G{kl<8xaCUxB(vG^ z&ptyi^Wo*J{G|88oOcoilj=P*qu4g#th#$xLS6gJpP;~x#nv1AFPx~lW} zqz*gPGi;?yFRnz-o%qsOBNIP zugMVXzrA+27BYWG+dCD0pGtBGq|KFAyC7Z_tO=-`B~@Re26WNm;XjA@qd`nlB;SU8 zY5cWQVG2Llw@ha>^q_XRAvbx351?i>=et3mXdn51&5PREhq&@FkSpYkrMQjx7u%uo zGbHy5QN;LWTV!eNwD;Gj7NhS+Avb<`+FVE0dG+~3sPZ=x&CodxdAZvrWRE0GL(a(^ zTgs^>{ro%z&ngb)ZPw4wKI?TLWy{-*;cm@|iOr*#w2G7JN~Y_5WegPBWP#ttoGu}8 zp@2k*%rW8I$nAB=vSvfH9q)h2z2kyg*DG)MQ|e@nv~`@HUOrjWMRigN^dgo0Ik-Q; z2!!o=n{77NLFQwv9&? zjMca~iq=V>q_gNnsuw7R`Ahu( z+f|>_Yc7&&Oe&Z&m|1A2=5-Wmb3(q2$656+4%G6P=N2`itcJhD+;A zDrtX>e3LsG{zvU7ihh~#1CLq!E5S{m81OnaA8DH97{JmkX}|Hy7IjvQY=@<(qb>Hl zGvg6)XmXl=t)%2k^SrwHo6yIV<)`f7#fN>qehA-)BcU zH+i_f(5F><6yk@`FR4o*=*g37nqDaLcS>y_*F+g0sJ_LryV7ey&wm3fefP8#lxfY; z&Gw>8YE}cj0%NMiZGk7go45epkLrU9;2fuF9U-OC|8u2o)z?DDf`l#Fmw&;}H2S_R z81D=J8C)k_8MKXDQ)vjdQ2xi8`TO2`(YMJjnaxI@;y(uw&7}CSBKiyN-#!BTV48M4 z*Sku2MO1;gc}ckjqVHc8mZ;%{FHo}RhLY-3#Hu!s_T;>fw}cX_%TQxeCOm#Noz7}T z_4|w#kXluLmVmI}$_bEzQtV|guJ(D6-h`sKE~}q|IQ-`u%K7MtKak0M2}|cNG%e4L zM}M&_#f9^;?BV~KJIxtHoVB&eFQow6mNqMBoq=$t!bh0-ZSu!#u%=@*Oe&SY&<7J2 zNnhP+Ih8i!slCH;#cnIH6Ec6S=MV@XYsipc0Idby3itOJh(6GC$Bn{0@7Q;hI)?^c zOO~=ldvrd9(kz^mD}?rtbeA6(E{~<&kP7*&ib|0Nhk{#KvU39 zjrZ8HIB$y$j+CjdG#YYvH2NtW7B_fs3ld(9BMhqFSB8BvInAs# z$)b{)ETk*pJ#(H87_)(&B_Y;C>Gk)!D z5~NETf`mENp2NTC;mA8wbaAs8%_zN4-l`s20e473bkpHPvyilDG2lm$xX&W#Lei>K-uYIi1lk7?^^-3_`j-G>@2o!3ilMnvl6hH9>hc7tnDT~Im zY6lZxT(`YIdvh{rH6`jP_U9mcD`UU{iF%47*&8&StrAE2|4u(NqW1r$jpz0nDclkS zlDVt&mv!F#PWHSTI!~;RHFBg^d=DtV$;-76ND#_C>}yS8|(ok^QE z))Ib5a||fddFZ$vHmDqBPmM5kz&~Rp;`h3S{)YIbqJB|AC2{H`Axe-kkaA-#;?*oV zWrtcQX;s^>a%iP`2yXJtZeI6kymAX|fo#`${X*$9Q6bOzvic|-qUp*AVVa8N{_xRM z=0&=E?9XSEtvBNNdQ-?2%rdP_{Bms8_<2=<7VAws3(VyXU`l)2CY+=C75cp3Vpj^} zdr_>FP>^T;kSE9ds}B)8bNv2M2+D5iNP=pxT{JE4YosktmQhwd#nwA{?C7{%U1+$F zxZ7B`U*yH#gQNLmDJ!AyRkZK3kittA;C1JJEB3I3WqVm~=z?4OT5fMeRbUoL|B)5} zFFM;nX3{gzmq*-4bGU8YXeyi& z!zVjZf|{!z{KqFaGa_URDjF`JJ-Dcp!f3yLx{ciU0h{#8M&k9sKnEF6MZ8zkKVk@_ z#289+izn#zH1fo$-u!+@_T=iRIdDN z`cy<++mCB1&`J>rtJ$`$z7V?FeN7{T!adzjSX0)1I5vYaYjosIsj68*X5wSJR4k~< zlcu*t*67@uZ9(ijp;Wg&<8)dG0C64gXC*--xbiT&E7W=(?_8T8JKg&V#ilQDuZOh|liLK!N&-vrN zlnuE(hOM+|BR?k{4GB7#d9{3fQ^rR4Q%qTVCUr5>>x)2!Hn%HN5lRVNn?lLHqENtV zs|T4hy*)*S7>#rE zr+X~`pt+#}uh(AvrBoCxXt$0$VNB(nvh~OvIXZ=+ZgUK{)@;;&>#Wcyjv%({a#{_Z z-rDQfgILO&W`JQ+|Nb)-*)p21n8lWap>pID3JiTmvA5~DPlM~7=oi%A>Y&iy8J>k` z`-y{h81b|-^5v9MwZ;z_)DzAC7ON&ss}1U( zFOEurKirKDf~VwK4hLE1CT_PE`0UsHI-ubhtcDGfM)~{LzKeL(mx4X)CE>!`K1KB} zCk*KVUj8cD+2#f95`rTMU}RcoTA?8pUVWIY57T?s37xjBtH!pY-)f-fi-VlaL@R0D z<05q+eb)wf)zg(Fw!BN1&yN)PY(aVo*hi0c_X#a;w4}^OHlcmm3qjIC#ubt$Fiuc8suHez%${8OMCjk<&CMnB`)m{_Zm=e2A|6MKY}lFqrK+ynI9;9AmNh_RLkmDckn`E} z7C7)EJK7mu6jKeDpvP*f-{mwL{aEV_J~ehYGy;Y-x%*4-Ly}S zNXPDp=iyrNVtypQh+y}WrUg9tFk(+xJ$CN)C1@!FG~UT)5dgj#GQ~ScO7rscTc<@*V4c1$N2jQ_Tj?5 zk&;W))nC=Pf|M=Ty$*2A-RSp%(eb0GFD=9t`zGsx(CnW?Hl;M}ft@G^u`w5# z$9oUQLW=GGpV9l|!%FfZAf}u_BKt!)5YyW1^p-h=JU*H~1y1{&2YJR`8GE~8bo|=< zwie-g8b_rxcFjADNze~DnHm!`GY(Jv#$%3Hn} zF8!*=LQ-H0yg7*-oppG0{Qj~xEyVGgKu`zQsMC@!4-wfLpyQsjQ@)5>ZfwtHz4f@? z(R<=RT+4~rALFkh*!iVtl)w~rv@1OAu(<$Fni9oItJ{lm=dVtUKMHn4cUT7U%*+&_6f zSnQ;@n0V1mfErMIbOIk=z;8Ii4f)H@R8Qkvd!zm3d}z7+!mZra&G3=k&7 z={{23vF*?5mh&=CKYRmidNl91FYNmr+Y*L(E!J#;e}Be)UrU)&8#GaZ#^hPrdY2ff ztl}8)>-E9H9y9OZF(~PGdLg5EB^RGl5WPh&6FBW76ktINf&LB{-!@RDP%{-aEzD&(CgfB6qJfJ`{h9&K zt`D7Xpq#Z~7@XjrhuMF!rDJ6lDC={&=|is^?L5xw-WOn7C-#031YPgr+8}XHqstr< z&gyCk^H&}nv@8(6oN#j!M(!t4%;A|9q<5_5aA$^fFn7_&@i0f=hlCClnrzXp6rfVP ztv3>9jD-Jmkes2ln?fmx{q7+52g6GdSnj9)j)(dWn;6z}Q8Gg?CZI`qw?9ncV>Gz{ z8dp|?1Oj^%bI{Sy+<9A7$Zl`=R0Q36i;cR9j@uwj7M3}94Nrk74Q&6S`1aH+3}ke z={VYOfwRE}o&uqq-7D#Ygnr2E;k+a=YS@AM8b! zCx;pfNdKmmPlW=BOHrZRKGbA0w5Mq)X{&zj2#IZ5mPqOmzPe!;1c4qo!Nw!+%wZp) z$$r|zezNQSq483k*`IUzcG-)DI|5~I=MoQQx^EQyU49~veQNU_m`pI(4KH+~O zyg8g)!@UIOcpT2RsgU(D<% znbQw+#|z%ys1OS*<4C!Hi(95CtEwQm$#RST9ZvGTN^J%~FqWS$GL;&A$R^?4o7+hY z;4%-+?(N*=d?wv@q)_|K&t$ow|7CHtDaYqi&oB;yQiT9UU_)I!Ccd8LQTN5@M>MpIz+|}XxE~1M9`LD`P zm_b4ROgGzzS$ALA0>ylKIWnD-yOR5lvmD5VRA`9mUN+!Gq17_xyDzBpsb!!T;DLZO z1=H#|mDSsM)vGYwH>XhR?TzfPk>mg^S%`gsu?ZDge&f8$BeZ{1KQ8tXM090A!>h1| z=TSnR*0|c!GZnp;A?c>jG{D`p#GY`LJK%g3%0y4nzzhnhSx#M^pEv%UmV{;|yfgLR zGi1Mf+fQQG)2zPEs|@Oj_OivciVKOmWCD``#dkb2^|rDdT8+K=psFIkP4>5);S7l5 z6ga&|gP#aqExkIn5Z-BF)WjqV9sBvXSaqeUqD*isuHu^&{4S|-LUAZ zgTQz&!~f{QYDsG{qnI#J6~QoMNk}Ak!+uX%k#6e5jUE{IMA`O_I1@(6f*Ebq#!QMy`jw$%%iuj|t5A zn+(pB{!i`o40%Pi#2H>@VV-e?YVs!-9ZZ`&a-H}Pc)iF0w2?If|6*KKN*ys}=(jKr z-4Et({V~=a6TRFWxfnjwkR>!7T02|}t^D1K<0Jd`WW9z8>E);DZjZ`bx6v%=Y8ZO( z78}i=I=8cYzQOxhXP-lxl<9rvs18iSCV^ytTPnljOSUHF!l~b2~645sTHrn!LdqbA~k_4*kUXp*cd)VWlM@$@S@jZH5 zkbc2PDP)7nqRuHydDZyrpkUhj{&CffXe*(&Kxo-8J>tS_HsEu2uDK2L6 z#5~^*o9PmAwnx^advqjqM=R>K1|Q=w_!qMAHJx%779Q7243oyJjwM)(>F6;SE#PN1 z&lv)SExWg~n77eIl$dl+`uw`)r-g|mvQ552DRtKW)!(#pR|oG^gkD+-lK^2lktvFz zknh5}JE>pt?T;RhA*omU=irJmjf3Z4K;J0sqO_4foOR7#Y5hLSqURi%}^#tN@CLCp=+ z!?2~I#Eg%LO}q2_-;#SdAfeR#8T6#Gx%0488%60J8F^D=Ffn6=wSlxq^^Bo26L*qD zPDcD!#zm4XO{d16GNpH-_{UkFTDa48P?wrvO9o{Vy?_-gr-9505kLefAj2skA&NrX zK{+rvlY2s1(3xEBUg^a8;KH&irFMWU+rTI{#OSUr@}7<#-dw=~s3dJC@VrP5r!E18WxzRLe;)uQ zRL|c`sbdtsa-;J2U%4W{VN-u|b73uaVf8FxS%`ybbD5e}7fi|)wTckb<`kjaXW36vvJ%SAR+4=0j7B63^EX4`nZ=<&z%GC8Quc8rtBqA0va*oeoE?b$ zU0Cs`SoO53g6AsBE$SPF_Y|B*Pf>}fkJCF$i6zxc_+$s)SslTRLJ~~U19s?fi0J32 zEWhlPsUfm0Ui8hHw7bo)T^Z`8d>^GtF{5umd}Mf6gc_+d+|``-?UQ;zW3BWkWt%gR zISnio-&I7JDp2-coq;45{gdqcf=(%`IR3SaiKmzu!rM%u^!4zr;(V&S&aq7X`cPh` z0@NNsn*BzNl6(1!JQO%mlrG&2czyI4RzegIY+RGv zTmPeh?~0HdB^OWYV_jH2F09`aw0<|`6M9rsZwJBF5m|)(P1o-03=xR>W-7&FX^6Wb z@RpnG>ON;t1dg&%Am1nHQ9)!3tB}{Od0Ky;$llS?EgRS1WDannT(Y|j)OzwN#zu36 zMffXik^)rNMWwBaA>PHX13~L|Q1sMMb;1lXhd$|R-CsZ$m7Ms|fd7!_1OX3b7Lra~ zL$JxuF1yuKOb>tz7YEgGdumzGtB3jPzv`G&>l$*YNRf-r9^YFoPw_CUE)m(6h^FFn zCT521ZDp(ku7i*^$VyXc`Hz>IkaK1bAcs^;>E~^ak~aEp3A+ zQE^Xt=te39Q?^r?5=DJ~c2vG^9fyF;0jcm`HY1(mNtb}$;Q+lON-7aqMRm=(01Sm& z1y1_s+3Y|ixh452^rUaFT7b&)9NwNx*fsb|LSJB?flBULb^M0>}TYY&9bCDvLqtH>R`pf`H`)r^w75W6@#>l((TIVDC#S_QN(1Y zGJ1z@8BXVBM&H#&f7}}6@gs|OdoUxXk#D|TdBcUfJ6t_6^S&m>h4uh8?qIuM+2};i zd{!he4A~|7mBT5+#u$qCZGEaEL7*@Viky)9 zYROF)djmEB;+Us+zD&Igx#Z@U5hbG&WQI>g^xlO`&3+e9i&iZyjZg+fQB84Fu&y_^ z8O08o-_^Wwp;@+dYJqyD7|WgCTBKiFE;D~hF=@o;VVZZaZs7qsUc@#%Ki zlSo<87G&Ok`;P}Q!%W%TVfp`41ntVyN(}vVuqYN(%AM&#E6+w9$RgbytiP`bDE&{Q zIoW_#mcOHYIQs3pirQQ!)*J9>0b4CPX$SREwq$qvWJ8M3>D%CB4v0{AOokz4TlCz6 z0o-6KF}qfqXmnq5*@af>K&#A_Tpz^8459$ce<#IPt#O5BcUy=eyOMgxe>5B~W=CRP z7a2AKQkelz%_!v^^amY=n+}G27uw})d_;c$_b>&oJ8DJ}EtG_}u_KhX+(0_EEUo_r zyz3r}JfL2HKbZBhRWHoY%FZZV#hg*um!rxI2*xB`q+Tt?yO4gbgO}@ISZ~JL+$P%2jX@5|a*BE2hEW~xx{YS6$3^MX8Dt9c11Rkj ze5`}SbYhfvZ0GMe<~wR?X2{G|-~VaNdidCh#+@TNnB@`XE_J_F)R}b0l#|Q0xR>XT zw@N9LHH^6O1Mb6DYhX^iP~KEkaik^{zIqFGCbk8zMqOynvrV42vhNMjtWQTJdWbSg z46Y>xADo^W6`=HrqE_7>6Y*CN>d0%bG8weYWw@c`IU8fmQB~v z_0EFyffVy_p(>+Noqj>8x;ilB;z~{c=9Iu&Yc3X%@I}c@DH2*{Hg~`pD+oAiwqQ(jE9BkBxGK1;OgH zTY3H=RzADk)Z{z&WmzT>$_sAF;{x_g)8yL@G+Pd;PE_)vVbjON1ZUJuow>}O7y0OD z6RQ4cTX})Hb;9?-(eyn37^{?v@P-a?IEEaM0H{NMW&skUPn3RIlpf_K6Yb{r88fi2 z_$l}Nm^xr*`L9&4skIJ<87^E_w&Y+IHq2d;C>F?C)U!EMNroLZ4>?@;!>?ta%U{fhBob$EXzTsU%+x<{S%%OT+`?PhF;;TPHWyv`8L|MeiR{5msTj~NI1It-pp zbL1{Xrq-s28=3NkmJf;NT={+X2h;Csj7v2pF5JxQ{3uBP=6D7kXeLtcLK3bmB~l4e zmZ$w_V$~}_nV>gd7RTK{Au&*0Dy`{$$Cs!QuPxK^Q^J`y&S=MXK0cG)(gY_;)eXR#pcuG_AabH;91(y zrxA!I79QTJ%vylGG?)^yYWS)Px2gl%T4YExlWc6u+%;(Lt!xE4^PI@}BPfnj{hLb~Y%XnZ6?7I(joDLl$4oDf0?x z6Gti~Zc68C{uzG}k5bE<_;MT4nep%2ippMSPhJ>e!XKh!NA~%SrgkR&XMAPMrUZwy z@4l568)T&}g1>gKA~D^>1-}2bpzjGY_ZMw$pMuvv+o2yX5%1`~02eCCzPa?1+C){U zNF8CDUXs3!)0~L{ChG4_2%gkzD5<{af(NB^R1EL8rldV>=Jl;U4>dOM{VT6MBV?pd z8U1CED3HvdjTVVFI6n0` zJV?jv|Jo=|`mm6m391Ec!0zO`0l)2jWjbaFC>iwjpe-l}R88{7>t}$S?2PfoY&+}9 zw+gbJ!HAO=DrkEL%kE1TZ|4W>^&Pb`W0BhEkBXfRrQ@j>GuES)bSk(O-Ih|NNqwfY zIx37`gphyoJsG;!p$y^%<}${%`jrNClm8UimrY8Q5_9?*_3xP(y*Byhw|tM^LArWw z3^;P>-b5oj)jFB>IOSw}ry}styis|zC+Dfxm|~zd!5zXzTlv)cjfUd%B7yPVlOwSu zc=r-~W8NqNIZAT1RVRb+7~d$&gA)06>jOeM28mnK;a=a0vQhjma7Nf&>7i(T#$F*d z!U<3HHX}7Mw23tZovLPAN<;{-NA;o*>Dr_jN;>3?4lIQWrYal%p)Y{DH3d(dV@47$#C{muFO;R6_C~^c6*+u1ne+!q=gV0`>rAjzj*1Wb#Xa|GtWLe|Yq<=ukp+N^9EYekee@ zRBbD|@M4G~Fj?fSTq{uQ%@`hPsgxsuYbx;B^o#mVn=X{Xzz{Tj3s9NBH#OD-9N*2d zZ&`{*8~tCq^*$@~vEX$TKEOl$T~1v$Q5`p)m_~mpa&jV_3lqGC9*6z20kH8DPnRKS zA@JQdN)2ZAaz$34V`Gu}*P*VSz3_~N6Y=ATOxCk?*m7+Hi#3_iD-!L>5OcIWCT0*tn}U0TI{LJSXQlQV$xTu!J{xfh!}cTg^k7sfkr zdQ+T)=KEOukq*xbV|2slcHQ(4M{SPIZ?P4!p?@YX(o@S3uMEV-w+scX0uE%qIV1Ic zp}Ox_cPKy#0(4W0vF=9ftCPK=o`rCgrcScCf0^iVWHGj}uf=*7Og|>XrqSaupc2kL z@~-r%FuGbdZK6qzy#^O@YH_Z}&nKEdI7`#Qt%LbH*BG?siBt9@G~~yboGcBRn58P} zw7B!Q7=Mg9CU(H*2eU3aqY$4B6oPD}QG+f#YmiN0y8(fP9isP7Ap)lI;Gp88E`pvhHCN3!;)JGl4>&pDwOkFM)s zOe-Gw^Xo)MGH-nWxsSIhkTY5xQ%g{%oL?cH^vEn8p|Q5h8c{AGoKbmNH9>ug68O7e zG)1+uPOGIBkLX(o9m$3}EHYN6@4z{mY_HQ&nw-UxZ5u$3sztI!R@x(SpTz1WL0yiD zsN+vN?;@7Yd08C2Qy<2$77dualcwp;)sq88Uj}ik6@@sCwa;KRAwNMGUB?$rUm=zr zZFCk(DQAmEl-Nk{XKPN$NMfXI$GE0uQ^$DfgYB|3YV;LyK-kYpascMd$|C-Fs&9fU zt+z5CT=Xa-2lR{Zl>d?GvNIiEs)@PaE+`8&bd0Zi?F{~i+CV4o=7aXbwz9Nk|J)@9 zobV2z7|9f%Ef4-{j6IV0vcF@zAr2)=t4MN}r4gR8$N_adB#t%8`Z^)sOL2#gA8i7r z)`AbOp2J2*)a ztLC(nj8KX(;Nwn0$2b*_1#Rx~$N`2m>p4vJ*H8}A#PT*lB&xhg5E=H=5=8d%!ZEQ3 zn6LFIFkg{h2#3j^4C64P-BE#tMkZ_Y0YQ|c4zH8<$s_9I3avA#wwHt~luhjz_nQXf zH$E4PZ+!8c72*+Z*PV4@%B=7@apAh#1a{DZ`vmr}1$U?qU@+gtWv~)qk0hg;OGc6d z!D<-~COfCpCfy{kn+Dkgwq)UT0^8($D2EvDxRpa>AIc`TjJ}DJrL|Pfm-&}~^&&RR zj;a$cm=jqiwgRht~=>o(bFYP0^EW9W(U_1vx93$Mo&vj<#u2Ij`t#=R5Vj5S;39%XENE%1}u z=L?t2rrq4K{z1&zoV)3w7B4j>rORL48@zk*{mEZx!|zp0LxpeB(Ce#eto(PzcFq8m zy~9(p^Edf7|3%FUgju)qBv(;mT%nlTGo?$NKYrG!Mg4b$BDQBvm-@-^Y4Y^`i~q7_ zN@jPdyAFngoa9!YSh!AdtZZ(VdO&to)k0|-pc;t2>m<@>aB1puaOv!x0V?*}%#&RC zL-Ps+uJ>>KUmEZuyhO`&5+~p3U26R3bh&nw*SxTk+~_3GoAEX9)tsTTs*LKkflULl z0grRh=TsRF9t=-;RUd{XJiEY{35o(!W1I z_&t#;r-05pDnV!Aa?qLhzoDJ}Z)khKr8D(sRg(}H8VdnKGj9Py3zz(@kN*vRMWXdS z$@QVls!*{0o9M?8At7JYqGtSy=ym^` z&)0a?(ofPdaZXO?Rs}WmFL?_8@e8EoIpHMDsm=mjK5o*bkVSznrGw7q?FF4VHGs|n ze$J4mSOCfS=Y!7rg#UFWo4<}%%`vTz$X>5Qzd!=s1`p`!4tuZT#a=V+Qq(L4jUUJc zbSG-{roZTR2Kw!5^>5ZRFxj4}Q)xuU&H=V_7rL^H^fsv}aHe?wi@0+p_jqMX2$EO# zU$mevFpcYcH1Qui>z7iuE5pvMY}yb(6qVE8C$R%&iq*G?=SH}-qJfFsU*~{I2&h#J z{RZ!IBa$#C-N4?jnp7_obYvY-P zlpectBftKys%wvjYJ2;q3zE=9R4#MWkuENwayQ{PDn%tphB+lk%1k7=%`Ot9OcxQ! zpd=BM823%NRAgMLNn$2qMibMR!OS*$?{_)BzutfLXU|&CTI*TQ<@-Eq&)#dLG-a}k zEvj}W7>*cZ@}8Mjb?!ZsV1fHmsD65*W|>+OTdO*|&tI}2e>+2c(0+XIPSg)Q(9v;I zD{*_AB75X$PFfU?20CKKTM+F3r9MzO?teGxrz2o6Y*DsMa1;=45kKz;p|7&bvG`~3 zrfgylpw46l>e;n(kuUdHA6lmYN7eSDQ6A0HKo$`nC$@+16pB4>H??W>uZ@wh%tZX^f_+!#AQ%jiR%vrQw+! zRpqQ7?If1s-t0Iv0s#r)n?TdM|% zsG@|jM4QAUAWQjzRc06Dg9&xks9vUG+5YSX1!Tv|C8hm_=#rK%4sC$zT-H%=%&&RX z^oB05GtREerV6dg4U3RHPnVR=?nVsw#3IY8P@-giS4Iz*5mDmZRn~KcI-ogLn@cYM z9YBu>30S&A0x=hHMYi%|#w@EErum#)!ih$1jh!T-%h2NFT)UVqqQ&Xo7iO8#Q~xZ{ zn>pXe+yU=>+!PV>kaF1}+bAKVYzg|8g!f|=X=X~2*~RocPK~2H#xK)y%o7CI%?1r5 z7O*5>&{iVQPu0>M!Y&6*B;H1~l%9cUB8fGsrET7l`YzXx0n|AA9(8AEKcguEcV;Y! zb43-|Q_lDjbSIEgKp=98@405{g;;rj$W&FE#8!{9l5D%N%8o`!pj@UE0!w8PS{x{?eY)O{yakZh0_FtD{O4`89avIhn&5Eje zLfja8aWtW=4c8?1B{vO+8~h&cqNE2?E3R9h$4`04dj6g(npStm zkJisAoSxdy3_NbKi|h&?V>S)5V6Mb$dKHPTKGyaS27Am!iIso-RJBdM=a~d$c<-pnm5M#{y5nevX74gVa#K~5*lwr@OJR-m92OXt1 zxFS1amXwM^B+fnLuR(Jbf9H|#6^HwEoeTaK`UJ>{trd4yQlz$q6ti}W`3Q;tAb^d% zc~lnB%oSDtB~=`Y1n4|{vzxh#a2n`toKUCL&jTXF7hqAR$;W?7<%U-1D}YKYvLvx5 z$TyH`?_WSp!}_DaobaZx_VKM%dhI>r-Eb%qyk(#jS11tyF_E<;4|_QMLI1UngMsG8 zGchmZlG2h=2AdyJ;Bldg8*R4(-i*F^qe!PiMh!!AsFeEqOb;bH7_=f<#l7{JV;_Ab zG30>`$&$VvCJD%h#)k_S)g9a#`>qT(M)=*PDN#?E8y*hShW56(kgB{sZz>lKxaI%G<}T8+WH^hsuSC}HN-qdHYNxD z--dG~<65ijCZInG8E^+T+Tl*aIYeFzL_Ra-U5LYjTqODt{efVJT9VZO8W?tLU5U2cAl6i^ceIf!5)rM~8<(sh5wy{161?R!6^;Fy z;K1H?eHE!5+x(8fnoz>08^uyJbL8%6f;iqZsb&26By@OQt*!|QheiU z(wU&@;TZ5$7D@f})V4T9I^4EATM&w<>QQhmSQP#HTPg*u&H<2QK|Y^_AiA;0XLT2| zr+|>?lxl}WL7e#gS%t4XxN_Qy{^>=kt)q4!~TY#_EY8&VOi8 znzUw1RYOBnX_Da4|Bzcycty38rNy3i*6$O*ZW+16_j`0P2quC=!4>c!HONb1&)P3z z2aNy#z?673&(jH%WCSHk{mG@!)ld`4vaR9f&h-qozW{avE2CrsIX?gLSy)EdR ziUdLuTR-EHGT6b?0f*W~u)ON$B3Q$`Y=Ja-Nhwb~rm4E2j0HTVZ%JnagaTLQG*;_T z8@V>jdev;fLZ$!Wn?NZ^6-@E)=as3e>>9R@B`@Sfzu5!a3rsfYULfeYys6s3tZgn@ zbVj6r%x$V#L0m(Er;V)GMP~=^3A!=0&WIq-EtJ-&z@YeWT_0sDc8cG;&WNLDxTG?s z1}lW5bx5Uiifnl)`~kbLu{uYfPc7|_2KH30)-25wJa-3UZgwaGdP?Myh!tz>w6j^R zhVjsvY(Y-L;?AkP9+$#(d)+{9uT-)Hx7A)-T@%nx04wg^#wB^2v#?^T4girjk{9r7 z{!F#F(~z>TGs0d+DGcq*t0IOy=sZU)ZLy@anoXa=qVcewSV9opJcX9hzk|js-y4*|e#L z^xagXC%kElXu6<~Ww*qgD2t{dtwd#aNSeTvTq3Hu!!v(c#SJ6{8d#zI)*v*nFZR;o zbgkmpk@3A`^bf1Jj~vB9GU7r-^3{npO=FOQYPJKR=W3)bvs>9r30j?uH(FsfZivk3#yn zc~)qCMnbPvjb=8+ifI}X$7*ELI)SXtVDqxEj*V>wR&n=&;(IARi`~g1&$tqg(1k(; zTv5tv!dGNBwCPh3ZG4G4VOYNn1pRBhO=E6$TG`ke8!EDdvapcxdj(gbN?V0DiI8bw<$&4Vyh~Xcc$X0tjle zLLqA$$iL5~am;sC3*?CtN`>mR%En5I z8^?x^D7nL*T|vh2b)h@{DS#{S0ZoXXwphh^LP~|iQ}1^vyAwWUawWERFZQy}DOjOy zfX$6@tFmd2SP8w6AJyHV?(mn<3Rg$|06)}07 z&`Un6W)-J#mn(52EpR6{CpC^iQXQ)}HTuO~)^DJ56(X43cVjBDRE@Z;Y0T0}6)fRo zz@iRbYQqet3l*|y7yBDCXJD;t8A_v$ikJx&WZcF|JUJY`94sIoHf08}6oMS$mRX5M z^{Jz6>`NBv02E~trk5+jK{3cdGLJfH z&%9^>%hpjx&BzOa8p6JH>ea_)NS=sW@-5?WJ7 zr)XgOfy;o}Zr~ubKjv@P-hY&y5L8T7H}mjb(rM?n%}RXEkK55Z6>s6eT$vqJ1Ew{0 zjw3ibI`*>MTFJ1|Zz_L*-db^+$qtXI z<{BQG4Wo{F_%>w{2ma`kkDUNNn3pV|nibhHPt<=S-2#ft-~Fx(Rd4@uUe=4^k(oxM7uGQF|edl{%bpRG$<0(%)(rM zdwx*fyG)>}Gx`AB4FI^SQAf`R=L4l51vkLDD77ltQT^|f{<0ERCUQIaa~4c|N}!$a zRql+Phz15?8E?U;Rmhfo)8%&Xu-6;tdI|1UTbeR?4-`A?D9Tpix(IHEcyNBFoe=0f z>OaHs0yl;_X`tMFK~N5JVRqD@4Je|_3(ARH0a|#(Td-y~ftwZU*MnPzOZAs#OM^8Ui-rfXNIhCjs{BloDLqC_kg$ zDFk6moopGW{W{8@DFmW0{kEX9jtaVcoxtr-p+}HO4bTeAS}#h;O8l0RU_rN=`n?eR1P1XI7=)|8 zI%ok5;ue?^y$%?}4`2|kInjTE4oJW`!hmzURpt86LWe8xQ0iy~G4wQk`6~u=_W(X~ z8n>@Nfj%E{fRRRX-o2acE1kAb&5ruHoH|-0Xv{2ZPyj#na_hMs@sOU}>-TJvp-v{Z z!_xz(r3R?wXY}t!GrWry9_U$W*`WU?o(g!{HO}oI0}H{TC({-NVKs9Pz%~I~32Cgy zV}0+I19KVor;b)IfzjG8?5vx<{BSuaN@%L@x;h*H0d#7p1=625L>;ZQ1V)T*u@VpT zH)RS36*^;Qev~W(^-DqhZcuOAm?>-kV@@Q^)vGn!9Z`a^M?e^6{3`<`rE|0kKy@vk zqpborfVW7%TSLsG88FaDeb6=VnaD^mPMj9_p`KvDsn-RB08t`69JYf_Ocr`XGZaDH z15h*r2nW;wAAf>^b)X<mkD0_r0$qGN&gIjDo5fH!)XQV=b6 zot1bPAO(RiKZr*1=!^z+r$IaL;F3_L=z(+sHyEx5#1sWU3?zQm-sjiZ(YA6>Z>ktX zt6Kvan1BYeji8S|01Xg^sAC0y8WF(uwsufFH%=XZE)jsPHUM1&fZQ}Y@go2ic1obw z925&cf5N%`=9mMZ-Uj4OVA)wW-T8br0Zc&y6wl3vIKNXa1s*^L9w3(j51@Nwr-Li- z09x!uz$*{{9S8tnDLlpNfJKNwN0uD5&N|tm3q3W%Ad!m_uceNDC~nNO6fO)JtWyF7 zAf9~y-eO6Z7c^)W0>TXi2q{VogmfP;KR73(QD4x2GY|CB4@y1kw*hj768O3M_epZ@ zX!U1p`Pv7~IeoM^PuCAm-%?zCe=+@WZ{MmHCr-Flm9Gmp;kVayZ)=Cw`1rD~%V$$& z)GeGdEXnMH4JH_~rgbu6WuBCrVOqrBP*N6LM*epANdMultHA4bsp*y1QtRTohSI0I z5}$n^eVksiWx-~fYfgDJRM)-E0fQy`e2#17jlNx<=e2G8d!npBaQm<2_casKD?TQE zJ(b12?3@$oEY3;}^}JIDHa>b%_bhLt&MB1`?W7~VYqU?5(SNP`IJm!e+2h?u_MiDa zO?3@kamqw9%lmm{b-^=}ZYG zby@pOg>KZi?&w%Dk(U9@kjaK5{Q#H{^ z_Vz!RMTG4R`iGqjj?VDA6xp}!Tzct~d$oouCqry{?yid9EwjI7O}pABSj(#@I3t?O zr-q+#^ZRjmWaZ!P`%g}N9sRn`S^P7d-&yBplxFf%@}|Y%sHGma#OwPu)ekX;9{%}_ z6jW`oRcYpM@gXCTO?7qN$lyRp-nwsxRut9n&zw0M_~fZM`_4{@@Bqu_o{sjPtM8sU zGxh1+ZL^7&omKX&^JDu>JLq1dUk7fG9_PJ18trO*<HPVBo~}P1(-Y?*F}eHExaM2w+Ikv zn|7OSd}f|sZ?rx6+C;N$H?}#@$kqGxSs$0S>`%sL*q>f~y7A(@Ny(CDze~A&XTCp9 zj~FyQ76HCgE4|U&sd`uQJc+Yr+Vb&$f7Gq>r2QJ#($}{X9avCw*to1Xn53=!{4qH4 z_~?&EC2rdetZ8v*@sB<@1$Tw*_BPt3<M?A&S>|_&BlsoSS-Eyh*Y~OeMQ1-F5MS zo}a{w7{Q|8Qty@H?~8Th9O*jrs- zv#ByFtl&z>&ttk-%%jI`2ZTFgQoVy8IkI21zP?~`TanZ4Y1U@DGH)yE;`qWZ0**f# z{E;Ss9tKPvROiL8@>=!I{&TkEwZV450PT6DI4grt^Oudy4c!yJmu_3e^>d$GktT3x znHMkizug-1&}OT!;nn(Y%buRDpzo?5-M>6kcrv7#b~fr-+&|~5OnUxa?6i4ptrla; zbf?KTtfSUjuaqXQR3o&w3NC)npE>@qi?n%QCbIpD|C$~B_rspfJC_&n#{)}SnzG2} zQ|SR4W@UkOnBTK!%=eogF8J~7g&oP)-3zfzc6d?Q@{i#yC|I2t zVdSoH$73wq>6WHo65a&hdEhF545X1dda zlQXt6qtK*3w6=V!i`v`B;qa#sZW*Jm)Qd!3=YH^#oI>tvXKCB4Ikje8VWmm*Vy9cz zluz#2Xu|%xXf3b%4!x82PmY;N{7^Y!8?CpuYNtxp8@54diW!Sq z|1kKK{dUohh}E}@eQgg6P7QXyYa4)cHO374-~L;-;p1i7vp@8=9rW~OYlc!NKK6=N z-`)sIyr5c;&2ZB{oNGv~Q`8+Zl@GYQk1PE2ccicFEsw+3>J3zF7C%f#b=t1XA)l&A{zNpHAF4*fznq zv@Jt9RN@y~k0U>_jXa-iH6MDa5*fWR;C^{! z_MxOf{piALzlL?IjXU?|KvS>3J{-FW-7I~(eV(75ZOh}S_Mp<;_}9HTTLvsLLhI8r zMzI5a46N^4-$R>3m&%t~eI7?|p&FVuCMHSCqUNt~|2P;W8H^(9T2Gu@cf(G;xNTzl zA8w^L_OB1W6S@3e`v+FYnMLd?Wg#ck4fU2f>lU5JU%cF6ztel7H92kc`k|-jqrqL6 z-rLP8UMD>^_n%t2a@hl|Cx7`f_w^*jxZEFcXMp55*D(|g>b(N)mba#yF=_6hD zKUSYVbJ#Co??|`(Uk})QB2m+m)BCX2r51+@bPTGh_Xt9DzwId>nC+iAr@gc9`&Yu-^Too0zs|PZJIJvg`&}3R z$ThPk3}1Qsgo&@g%g8b%tFW8XvV}46?b)_Wtt^WeS$Af=oZq2$V(K#L_AdQZn6a#z z`9jwMHvWnd|O^CH9Xi;cKfT@aTDX!CCz6ow^b1yhcTo-H=lUYdEblu z{7A&!ypv@bej9!;4A<=K?Q}NH-nzf)KI`~Vi9RQza`T3*z3012tBywez26vmx@)86 zo!@E(>8bZuUXyri-ee%o3SSfF{-7rR;VipPJn%dq>8~8l$+R%`3zhYz^{4xC+*i*c z$H04vFUXX&WtGOiRCT_tJG(99cGg7bE-7M@_xfhvdGR&5GS5CO^h9YCYrRu|l7L+K z$Fsg1i~OT|!++fLel}(E_+YR;C9TkWkMQ8Ji1Sa@YV6gXRS)p^czErK)zuXxZoFR$ z*T~ymseJ!BplWFP;nbeHq0JkP9Xh9B)~@67OB8-LO~;6CkjlBW=VIEO7-r`}=^b;o zk~i&<`PemirpDc!eFDaZhpfPm{x{=!)5(V(hB|!y>wOMUyQs%TSWuG6ek%~SZqa8J zmb<@xbddIBjIds2?(MPr+2XR$U=?9r^+vb#|El|D9rv=y8l`u4|F!9F)xDU)+ie>? z4{rQ%qFR=D-H+badHfgUbm;nkpj`=f`|{2iuCGtJ^ERM5>mG?`{EoAt)6lJW?{QPY}l!kj_s%!6QSKM)p{QTkxCFVr;*9J`topc^o8_ly;hXr@#a zDt}S^Ptqgam$00nzbCW*Ef_e*zS|}%;^h9ukw;rc&3@S88+c%s01u*r^^LWWNyFCT zj<4r0S$^Q_!2G4jbi)tM0T!(F^9ep{bvPwSPXHriIk9XcsI-L{d^7yS6c z04G3xP=2lwQsZxRk{{PpOs>+i`)r#_!IN!8<$gc=KZuO99i_euA*OFhwD>gLqH zaV6>F!QR!&wP>l252V~a^)YDChPUd8S*J>sXDzb8>4;BB`}`e^Qj7f`?s6wDHg6en zJ!-iz^{t!jh=A04TA025^S0ED5AN-J6s=qlF>*KHgU6BBdAG9O-aWPUbM`tk17Qwi zKE1#40OeWot zQLyd&9e;_>m#;ltI%D4FJU0hYe&cOVPRG}f@{>Kt?%9Jwq1*V$cVe#)gPJC$Vv}zNyyPWsu55joWOgt7x_w`r zb%Pe-GO?>6HFB#9?=(C6RZ#8Z9nWJit-sdgTzDg}zzGIgnhzfDzje!1*7Nx7*-p{K z>yWQ&U9RUm&KgZ^DbBxdOO~744bif5N)yPqQoYZuOVs&HO`#n5J374+_^=YXxu8Xh@MyH+dczQ`K=b^WKI$=<|Tq zth*E&LKnuQbw)x#*;enj%w*DBUp7B8^clK;sEB{B)|b3-`{VluhprGeJKPU7{>4AB z#+CErdPCWt1%4J`c`lTIpB?n`C-OEPsSjWG!I`d6H+8n#@=qJqf;vM(hZ8PJyM)Iq z%FVR3DNiPY40|BcE918M!kl#;L1qfqLu)s_S;xA3-JmHTdqoVb4Y~D)=_3b{XJO9r zJFYE5%=tf(A06tos)=lSB)xfQi|?^#R}y7|zloLyf8LPyUO2cR_?bj+<>-}sd@OF+ zPr~ut$BfDhVoeDbdVH1fWu51)u~Prije2YQ<)+?Cm(YK^@#z_h&2`_eKF!)m9D`K;7#B(Ftf--c~rUTtAFD>weA&@k4u; zI{yG?j!GSEEnBeRwrkPgplNb;@mres(X9aPs%>9E#yuUqxnuCd{q$rk^5cVvyQg2w zyjp%h+pD5Dp=g6j3#J)o(V9bEar^UE8T97vgsRUr4{ZPax!ugRe*4*m`n~+% zuLCw>fuH4vtG;`(1}^x^_d4FXwy4VDN#2QI0C_H=#K_pFHpaPxYdOCT8qkrrPY?ci zl4v&lWct&~jTV)iD~hm%yu&CX%=OlDXkwh6R^+d&Keaffj;`0QtslFf^`KUIB+q@Y zuJT3cx-gc>!G;}><#74J6z7(@o{z#+y;{ePZjhz8*Uox*4*B*R6MJ1o97d-dYxR9{d>o`k0l$8d(1Y9uia|<7$)?x8{9FdlmAF~gn9o?_LcI{UTE^< z`BZ4DAk6!!_r%F8|ExG9^yJQ3%9`y(?|zJbU%w(Qtt2?4xZ3|x&F`lbA^G~Nf5IV$ zo}E%Db3=GpCwX6Tniqcj(xvk`=Biz;04g4PBEmu*v&CCGjjFd!W_-H!uuO7ATV@<$ z>ttLU5aXu1^hj^t>TA~<`+c+4ZR4DcJLwnN+VM4gy>L3+th~Blon3hMWD4uF@JUhq zKjRxogd+oodNuk)S(WJ(&sGQE<)hQrufJL7UqZ9^BrJ(DH=iIdZkaive)!j+_RCUJ ztL6+9(S4nv;>%Jca7~noTMGze)8-j#z976^YHHgYxmcub(;QjExteTx-U_2HLZFB) z*sY5p%;juuHl-#*JCiv<49W0pqBKzr@c`tuA359gvHNNw+so2IouQ;e>GGsujzM#V zO>@w7aU1?QPrf2i%CT+^D!NdKKTs3(#bYK(($!9Kq3%%1M|-EQS35`^kjmLpiGn7SI*3I6Fc|vN^FnJ@N@O>!|6k%*BN59$Q zY_f3q5IrmzPhQFx0p}`y#5W~L{T=aDNz$at(g43!mXrKolGHG9m~}oG`lpN7q)*$| zMI0=^H6`9wB#5#|w9*7+E+u}*lMfzlx=!rVr`=u(U2~Qn)Th-r$EGeNkL`mJH|6l~ zgGy+Wle|R@F>sQZo=rB@8VahCaGYWr+;HP&t+`utrA>30mITZZ4%KgXuaBAN(<`bE=Ds+~)U6#_Vn@v{^Sy}-RwZY%?8;*40*WGYaKAGQx ztB6KSh9mVca8_mQQu23mn%2-}-62aLQQKyU<`9?$XKglaS|h>Zu>v(w|79rJ|1ecR!MV)7UGU(Xs^BJl%*zq}9EiCjmxaHB7LVW;-Ef#eY-kUZn>0gR z1-RA_@yFcEDCd(|D~Bj&lNp6WQCMii7_NZ!lMqNBJD()I>lDibVoQeK%&`J}`|tW1 zT(e;hn`VvyKgmyS=p;X-g!My<)`Z z4skRk!ti9)Hx2=A%|rKS4iSa94C7{w5X^H3=FVL$t0l0Le1QpCwiGwWz`T=%;bTyu z)U;LtZ*q8t^8k$m|D@mGn_L!|iGx-@fp_cRaP{2KiWws2K8#W|ckik*q;y&8syoC~ z5pm7|hx%E@0RkH;JO2cK;3R_uJ&+1Qw{7-#D`_Ks|BnITQlgK-dV9FG170M$p(e5b zsNjb{-=z?DDcOjRXE@6b=wnGHVpAtM^dC__X_S0f8U%>+G3yMBoQ&TB^R~kKfz2#N z@L^z32!Jk%ri2kWh9^oL0nG-S?$;`e$5McyIl}Mq@C#nal=GR;viG<}(j;;Vi%cax?w;X9FJMe z;Sa6OS#GCKBPU7C^=a|Wu?0(Ex^ryBKD<|VNT7hCIzzS#QB-$`ts+ta_Omt(-q2IUhQ-p)B1g*t|N z{o8{m0mXL_+4{6AOUYp5znWQ*$)?Lvp-aG|9HG29*vPPIW-E`FMkE72*Q%ZaN&x!N z-=zR~BEi8`IzyI=5VtwI5_wqF!TBD^(7|L@XL9}1}~N-?!waz8hl$A8cT_%uR>cs3=@xL>%cB8_dj%9hrcZ+J{c-hY8Gs(XlW%%9%$Cm zBoWJXp+#&~Wb36`{qkoAB{%2N-i5p z_=&5!p{k2V7@O1J(7F=NoyWA3btSN87l2jhYd-$GhoPH`r@0Wtl6y2032T|8K0E6X zp4G!Rn!UvnFNiyit}S3#o8&<`x%jt*KG6GDUxXX4vx%Rv7@_z`YVXqa&EgMTVBaqCUwqbp$7jwXiQ9aM z%FLaqn7a)$_2cK{hWyAQlBBzs**s)i6FvG}nz0D6HA03xc6s0mDYVulFlJta&16g! zZi*9QA=8|hBSS1NQJYd4ZZX?F!dm{GY?1~QxW8qFHP-4xIS^_x?i$Wy-} zi}Hdh;f@8z(L4)u25w)7+8QIwjcBewsFs2~%EYF_6LVqCrI)m_9`&D4o9+eyZxQ0X z7}4^P5Im9AVMZCoc+pIJHYA?^9*=XAr34`?a>YkT_b&nbU{od^m9@+k?t_XSO#?=5 zub5S}fg%q}Y86l$M?6Rqm2aIQzv9m@boP1++yIohc|HAL|xs zNct7f^C`3nFkQIe->a}=3tjyrJagnd?06S4d=I<-#MR1Qkv~x}gIsx}&WUQ;;$w(* zE@va3L#--dSbL5s=-^-97|#fua1rNEewl;QXX5XYFO+?_Z}{aAeG6o@U^7FKmx!mt$GJOwpkgW(swIK#T|Scw z=ZDXi%oZLVGrzttGC%v)*(vk^;o=!61bAFj8;)wEC#voS5RcWzgYSb8@%D?HN55Q+tq$5RBPrNhN4a(S1ZwQiWDXgm;UP{k!Ye-A+j1gzmc2j|r8(l-@tB7Z z(zY4Rot~|8f$rzx$+_fvXWl`Z&|J~5PhYw`gNo8TyErGi$;FZ&MLs}3Mnokpg$-^H z++W!dH=zbsawu|Y{)o)03)%xB;9mmaLBtWe3m+b8(`up77bQbO$J^x<*VMD{+39!b zG9s8ANTR}fkE6>ADAE0U&^sQthE4a2QsxiQi7k_IS|yA+=%?WhDOi2*PfkELuy*1` zJ``RPh#eZ!TF8guYDQ#!U3g9|{PUm>zUtH2A4+_3)KgG+lDHtA7Lht4^B7a|gS~$o z&LNJkSc?{}iTM97jVs-OJ>*Mk326(iwoM zi55oaOf@F|BzBVFcFvy(nOd`|ljJ&UaBIclV2TCu51Hw+Z0i@CTv6n^%ygcIBkmF` z2kz+wtWQ{IjI86yW;wd?w7xw)u=|+O6s!_-BnQ5Rw&AyPVZM4G`=5EBIK4wjDuT*%1AjlsG7K& zxB+_Ey}axO%W-OEtS?>URz$>Sz4PR=A8t);1|b!<2u%%?gYO!I(gEVgRo#?|R2fiHr5GMCYk@JK*ze_h8Ap>)AsE^GFlr!H#xWn!)ArpK6 zjuK3^hWRdkTkWNiGwpM3mVKGAugDt-cntXV_QJ`q_t8Sjls=P^}| zjc~GVZNPUq$%scz2NSiLY4N3;iDT{ZSp{s`cJC=zY%CV;hWszmI%88H{(OAO7Pxhh z3%gdU@p7S{mB?*&SAs_%MpmvV9V+!^V zND0R-xAbQ6Y?ebR!nEEYv&Jc?;uHa@;0GCr2{?F=lVODP%_R(x_}X?U zB@@OST)T*m_IxIi$CPABITg+1(xHS=IA>#d2M6Tkn(y(}V{WpHHd?|@p?8Y$u;q8T z@l6C*F+xFPT|@LccgX;UJBYMR%Op%6Ns8%pRI!3XI4p@tpQYomj`&xDbn#rgB@D*x z{sm{uvY^adsOJE{VbC1XVSem^OlD>nT8oh0jCV-L`%j|P(I@bzA#*o8Dvt~m<>L2T zpjwct5D69h8GpWzn4yA@eM5tBfawWeInM3IY^WMW?*c9OZxC=EOA<=)m0Cw~2<_-N zB{3KG123F_oC~k3CZ%$o4kaM0`|pj>q;m)G;v)7Ur0lQ+E(J~uL8rRQv{K}CY zYG#CA4a7F=1!=A56YxEmEY;0u*fbAYlZea~yTER9zQ1lRXP}kmlBq={xDUW=sH5)V zq}+(lT#PV*hrP@udg8%u^7AV}6)|ulesdpoK2Od*_zr>hdO{I*12L~I@@77PmRZ7x z0#JQYe(rZ*`jp#dIVy~Zr)9W6k9#cX96QMJh$O{ZO2?xeai%6}-Y&X7mnH$|vRsU$ zm@qq_M^SPW6Xp+!0y?9DFhDvrhcD~_O*GUIUjUvn{^tjL#P3|94*sYB>zJ?Gawa2I8@z;^QdGPjgl^7SAxi z$X>Bss1Wf2j=T?IfM+5^O;qS3`G9OLtsud{>G-cB?b5MhkjxT1*t+I|8y66^(#Fd9 zV5tI@7PFsyCbi~Vbb`D(B3;zqf?-VWF1*|Yss~XC%`C^Kn7g|0Z>M~4qIWBBCo=0)yS&c;6XPz9I9(I#58PWD57{!V~B00AztnKxj1uDK7a|D;ezO4Ub6oq7~`V z+JmuOa-Wd;5zO!-=R}^|^st0+0C5zuqB`?A1|K;foU5!kj=uSn5(GTV&`8u)xEi-` zlaFnpIqs0BsHV%bzDo%!Q;EV;ZkX$s(g02b$BOHJkdluK)dC4l%}#zwpQYS|QM8sS zFJQk#W(teQu{TDr&3wu-39wD(TzutN8jFZK%jNKkH2ClaJTh@oYx{cy2FW6d``iG7 zIO1m=@c>P9fzu1l$}2fhazZ7ac}P~qz?Vu`CvQ)AgQOITjJ`7>BU@pG3sI&KBIx-D zR>yOBYn&rq{^2Fat_bH);mc-D@lb-i91f{0A(Tw=Uks>8HvcAB1bkSMOPDV*oWyl$%3BUotlfp zGq}3%5R^ZZFaa@3E3R`)XUIe%$UJ`9w2N85_`6Wvqlk2Q!9K{;O{@eUU``GV!QBM# zvXkfd(}%hrNJb;yCp|Ah!1jPF8N?eA_6%*8}JS2a=m^ zYS{EA?MbgW2EP`v@^?c5`J0*B>k9rnVi>+^$ z@^<6WrrEc}MR*t&JKUI2?6AZ2}-eV&9UlDhiEitWNDs!#z(>~xr*i-=V$VSdMPxa7lsAh z&LxhW@WIsp{$RHJ6YZ#Q6D}1}9r48}*k*vu*r>9b+Pf09u)tq3tf86~Z z%gX*g`HT(x$bnJfk|Xbi&u zyG?99S!_0sCxDDcOpCAIJ(pm9)0K^@jNn&X@R-@wHGfyX_~ZSz>0(W^Dg9ngW&UMa zYA$Y{f~7qSKoHx|?P%K>UYY6Rk5`9@eqA89=B*Kp6quopS?kHGhOcwLO4wmk-rjYY zU-k?Y5Q+64%xRFhMNziDjHU4&Y94=y?Z`rszJ+E&D~BWDST!(r;@e!`?kz=X*Ni;%mV`eU^pZmI)686P__p*`z0e6ddx z@1D0BYv`T5)4wK#(VNi$9#nQL2S-8PJ0Kn}8pdTj288|ZV#sIV^FrABg8m5A{p0@t D_Jtfw literal 0 HcmV?d00001 diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb new file mode 100644 index 0000000000000000000000000000000000000000..151b7084060db383ff474d2d46cf09ebdfed7632 GIT binary patch literal 221032 zcmafZcR1S*^ltm@P!vVgXip6`9U+=buU_y{`%|NrB~ zM8*Cmo;Cj7jk5=hz#F#?(to-3JiGrQ)7eTwL_!T=@D^`3T&m@tnlEM``dvE{uI<@23MFXpUYV@Renuq%63 zIWfi=C$kJ_@4PY1Jzfm+WIMiU(pfF58DiNKPrN_!AqX##kSfb$JSov80*eA(yQNHU;HHPyF(kR$}Wb! zId1h%^v3-gH^}U5-rM{S$`-DnS?gZJxDD;2}My zeXy0*tMtPnbEWAkM9=aV27FC`V2iGy+A$zr$=8Ya^Rr6?mXM6gJ_l&OF@B?*$}Oa* z1x-B2&-5WUd_O~OIiHKBM>fSx{E2LB@Z5h@YONE;>%$@xg*BQ2DV2a#0i549OtWJrFq1M zIG1mSI_AuL$8Yc|_NWHUEI4#Jt6vx%%CuC}-M;40yjEc^O~UXS^VX ze{i1fT_iWF`aEBz1j3XvIINzOi>K$8&ghhK=Pf2Hwq2QF-w>$%w6Tyjw6klN#8ab@N*%rd};cEj6~gjmRdn_yu& zgwZ9H>e(k|;dl^b$-bqs$D_8kO)X0Qas2hiY|Hk1kS<`}-p|^^>oQ&D#})TNX z_EL5(<(pnpKWZOtKkIXG?Rlb+HIyTqmZTFlEF>|2n3m{9On9=3qkM)4RsH_>n>mSA zoRzviA1;onQzj+P-!D+St{XiyVAU83Y7=W{So)EaR{A?LDb;$|zE+??(J`dfGjPHKbn)-@FkSJ z%ValW>Yj`j?Bv|M?*#cQs8;uI%s^1vTQKqAEbW{VyS8j*s=1bpCftBYdq*(QZpS#& z+9`IvoJi2n`by=#FO&9^`LLr4x3*WEcwSj^EC?-@wH9#uoaM@Lbdn}>#mS{|74QHu zGLPiXoVnLg7zP@ie3bd4uCbsDZg%;x%u4Wp%i&l4yANevW|v825rWLNJI}Nc4eu>C z6@Dq|)xXaz6BE4doeatpu0Ije?h~|f+#%D3#fH>2!1Dx`ZFd4PwanXkCIRc03au=o zu*L625nOVa`{v*J445;YclQ8LPDsGpjmEW2TmZvFMcaBl z`H8d$Wh1tCBs zkzFt7j5k*jM1TWiw=|l1-?h736O- zj!mdU1qcS?%Nn|XYSmUp9`4Iu^EMVF+@vcEch*03IwiZE)k9IkF?ta5w&JKUk>&j) z=CHLY?-f{IkjD1R@ZQoPAGCn9;0$h^2PyV}WnuQ*qmPuJej!{62kO!B+KsI`lIi04 zzc-rm)_5qvMJ}M(>pXwR*=(!e;m}!3g5Y+$iE&#*r^~eG1pGLgGo*Z=ikm3ADT0}7F>Mr@E><% z;;j*{Ieu&)AX|=ruq#YL)fkeBRmx>`LuA~n(Y7P_f_66E|D=tsCGemL`ut3zy7RHP z^J=L+ExeKScyj*092Fps$3m=Dz$g{gibS^+=hs~yjai;vWu{GK=_NxO?6TXQo))j2_9XV-H}hW50AH5;4mQowRg7J7H2WU0$PHX)~yyl~23_h(c${E);&_T)hRd6XaIw*2$gcFET$N^A6YkOV}d-wGvpT({mU2 zilL4hKe-)~kRm?@7jqkzS#a&jQ*>M~+>_l&d!s>l0Q=?O7@=N6CJEiYzKCZ=T%$Xy z&kLE$V<{M6C$pf2nFCZC*JkS~J@ESX#jI5r;KxPdmEd%rp$H4=cS{R$q{n(xjwvO7 zqv7-?UI2L>ke8C#iZm-#IbXL*Vnyx3nzlR!&^jR%+<2ooIsY8rEB|<&05f!t8zWnM zw0v{tK`yJCCn4w?eAo#*s90a=X**Obk(;G1NLUFwh*e8FCP@gw%;JjZuRxjT>y_}b zF3et_pTaZfX-$Q?&Q(~eN0$Dqm8^)&`6<0*XneW36>C9WUg$%9T9ftr0Oy7B0_1sL{B63l!?E|j0v*Nz z&O-_A==OqLxyVF}@a54k(n(PUe^S)W8t7mR@^rOLzcz)t!@m0sJed8M-Bkgs@h}Um z^H?slP$s(tJxw4tli8l?my!xypFHF0`OYf&DfGH`DXIsPbauTrf4Jym1to-7SN-V3 zUpRM@h>qFO*JeLB(m0?Z;H!q>reotlfd|NjaXt0sxrv2J?an5V!bIJJV@C)*2jqIS z&#x`y@+-V;ZV#T2>S)o2A8PXQ67oxscC=CU<4*^tc!1g$lEY*t1adE;~gif_RGj z3>P`@Hk};G3n&Z!qXB&ti+nh)`&9Sbd~fDZzgrU%( z!5_ZxA#Xg0{a#PEu`;~`+fB@QyaR3o{aKSH>-xoG}L-ziZ~YLoB1`d+T4 zhfr(|1~2*REQgf|QSdA_zGMRJtrX4A7XWMKH}VHQ3~rM@Z?D;Tw<6JH4<4%{g{&}3 zIpIEarJ-uP5px0H8B}z;V90XiS(?fZCluI8;~gwH)6?ZxAG++c9nfYh!tK|m*L3`; znc>8yUH7_cNde`Ut`iEEWKQxD-1$6NRn`vrwVJm<|0-mAtZIS+;$3^H4xQD#ohh75 zucmXQEC)=WHXQShC6`qFR_ur;U zCnYU_2jWhU3Jj3>aX>)(^9`J~6SJ!ogO~`1l&JW6rQwl+QyJwrXm68#K&tG#>hrwQ zJD29Zs?_e4IS%HQ&pA__b6yVpA-}Q;6=!NR9?!;KMeo%L??01a@3`0kIF?BsPJT6R zkJndJDE!;5Pb_uQJ{Dzy-Db3b^yH!7?F=u5q=aXC2$P$Z5Y*fGlUSBdk&b2T z`45sBx+~U4jyW(FE&{EDAg0S?_`uDf<8MtP{I|eTm2e?} z4c_UvE@~5Op2@DvtQJhL(EzfbAc!e5+214)*ih&n4n)0GLnN8(66)!~2z9o|36uS) zzBnAlq<_a*U<>3{wlsSni1a#i$bqtY=D_S7IuaUek*wyG;M9yuPV+jrvcNTs6Bo=r z3TUSW1=ehWb?Qe$-ncaHnH=jicPG~wKzvPhG0k-Nv4zZwLX+(*)|!NN1(Su=rVNna z;P>arC;x%1O=bBczg&{yyQlIIVsV(U+u%kvB(mS9t7i2o$fpbMJPzQ-ezzZQXI{gJ zeT4mq#_Z~4geG6)>vi;Bxc{1E9t+Cy&G!-s3=>2G6~9&^;ldyF)^KSby+l7?5b-4Z zV|Ng0@QX>Ye3UTuDILf?j70m!Lfy z40>LO@fa7l>YLI-GY;e6!dsy*8i)1+P!^_kRz_rT1)~tCuu+T3&d!8jE*7sITk@R&&&a1!DGg8s;7g;einE!XD5HI0%6f|`O9 zq&kK!8f^70EPlZx@-SZU(LbXfy^|S;T)s;#vsR4I#>l{4p(FN=a4;8X6dM-W8wliB zkTF8{r~y7b?jSC!qycYT|zO#zR?!;1i1%-x-F!w9I#vC`uLZ3x$rKKP(tU_o34Qpe%S zNs@kJk8aKD4k1Af=~O1LIG~TMnuBDVF>>w0)c!;E+#yVbWM230t97$PLfoHX5!Tzd z6pmq^t2^XfFLDS_`w{%wU%7m!VR5?e>p7bt4=%)4MkJViqYAc)Xo`}o6j{DZ!yI3P zhg=8Z8}c#^(D6deDp^YTSyCzWssztTfjvU@cLHTMUhbaat3j%{>L&qkd12g#94nn8 z`b$u80xf$K;l9FKM`SU~Kn+as2zSGVCx=UmfCx$X?M8wmxd;04H>>5ptoR!z`iU;KCsFQMX_RIVb<^&<-VY$fo5Q)H6FVD=8l#h|_fXHPH1l2z6`ta*5V^ z@W=fvX%DUio6qL?XB_|}!MdV4`M^w+l`bymb*+=(2*&g}GamveZS3)y6odoCda<(p z7Ul$=d?7e+#ZLyNX6Fcp#|0@t_s_TRnaBdT8X+?VpRuvB%q$I<8}(uh(rtu4D#KZ6 z<^z4S_>dx^wWqe05IPLjb`4QnE3nx5C6fX5IUmJ|J+x)H;If)mOjNs0?&IHj^_XY7 zK)LL?gKvG;u2KvCR$v4(C`}DmdZm8}(I*#7K7ZM?6}0OjfLSmi8BdN`4>g=nWb391 zWHp-coqk=Xc$tY&Rv6-r!Duvl+kPEn)6cn^)aTZ1H2 zu#0xX{?=!=k+V4$V5iowxb)NHuXgiP1WfprG>>YpU7uYB#wRHTUc&8-SNVlXr1ma1 zZ)XMrvD0qDmoOYB67^S_^(i)w-BZd^e|YB!?~KM``dO<|BO&1+f0hidC#svAoj9dn z8zy^_?-NS#2xJFNtuLO_<0IfN~=c;n~aZ{dzrbwp8l8SRa<$abc5e1lPS2^dzM zkhSYaeeLkN-%lXe2ZUr2>r~B$8De{=eXc^x3SnC6#3!Ffgb6832pW*D2A-zB=7Q>3 z$a#Y_swWG1V*M>Veu#*g{qn#dk`6qzAoH)Rt7mdH@d=sTUvCq(CT{T=N9g zua|*o(eemlkr7<4UBA|n8+wSr;$D_LNlXFQ#XqME4fztILY988WN{J_XAVO>I`Z`l z_sQ3#*>LcSs}B>7KRPX%m$mJjqw=P{=K2BWgi6T}uyhU~)(^bB@;tNvts0|lr*`QV z7**Vlmvco=kRo-@MFeTD85)gcRt92%g>880iF3mh}=7XWZ1VD z*4{3SJ=siTe0wn~JRTHkj6M%GKO@XW66Bw$Ge-Y`JUyYgiaZ86#$-!{xSRf1Jntsl ze^Sy239(%n0#-et2Mm}cWjV%Q)Tu&Gyqr|!&q6*<7Mcn@1Z@y?CaCV;%0p>fILm;K zd3lW331SkeI2q-65q-N}EDfeh7Y&K^TQYUTtO8qYSsr?qcYx+O&P1&ROcpfLd#{?q zyvFJ8DO!vgJ|5eyEYF4&8l49erC=+C&Vtlq!U`4Zt-D!1sqzmjlbft}N<_#Yj2iQr zSF`T57qIRBs9g1m#g>*S%~PUcFKh?+wy+*2xiJI6@2pq!bg3`L#Vr75o?{nv-GITp zEIrjFKX%QXXr6oR9zjYwV97YYM8_LQF*Qt>NFjM(T-3PDXM&L22qqqqwIyx;F`FbS zdn`hsFPM$PU{DI@?od(00hXKGv@u zPwLbGyt=5~i5HH{`&+sY()#c#^ZLUhQs{L3bUjDBA?$lVFKB{{4Y=Zk<1{#lM=x64 z0l(<=QnKwBf$#Xx`{J#r34>Q?X72clm-4Wb*=4&(*!6a%k2UstbGArt@Gmv=tt*Q{ zddm3IzIcmtyp4-2(yh>NxBc~g4@&d(W!?7rMfI}BRv=LDEXy@6@Wl!=@97M1LrUO! z*SW6HPr?Fj{Q&-pJ_ett?;2Zlrn$jYD<0!@%uCO!Qa?V_*=<{&TB&d^+ zoPsc@a&LYm3dnq7nv}Jdlut!{8l;Q1K)&mO<^UJ4vdHP;f~`Q%kFSK9L@mOU$w_;j zx#b#!WBZqY7VLWK<@i->m}yWLlTd%(0777^G!{8Q-X{~O^bx{;#@e`;e(=t`TI2aR z-=2&WHrhZ`WaO$A7>6{MJ(71TfA_bLeI-w%zp2Aonr*wCcD=9Vv>5-5D|5iEIL5Rm zH3Q_*No=9OV7$RMGCyl{MgkanojBp>-K14*I0}dSq4Q41=$GM|Y*}3r=ZKVq+D&-+ z!uhUOsO!Amf>^dM?J|)idcA>wlgddbh-W)YCHFa4h#H)WVojp)89n!qS6#~H-3PZa zB$IT=5E|xvf6ki59(kVS2UN`w@_8P~9tUM`+ZK3&lB#NANJb$7I<(%i@rxOtc33va ztffJJnsE0xecpT!_~?m!@6EC&oo0Gbi6-L>(LTgW8{UJWmnUAz#r3dS%FRnW_juiX zTHMHbt4$8Zs<>bbvLQ~k;e!kCwat@G7PaUd3hV9Q14y~>uTx~0%?=`Ono!bioTNNo zAwoQGX$Tw4Wv6rzSx=$Ajd+=#Oon~MIB-`zE@(HV{u&u~eWvKRxBjR~5Z(Zc3G6CE zKRyOc2t-68BrV{Q)ELwAuKX+nbuAALUBKWVH~Mg|7eO%$Vr4&b8a<~1WVYZQvwx?c zIiBK)yEt@mXlJI!a~^&20ind>F(bX8_)riO#5w}P+ffhHiplZ#s#Zf0&l`{u7}Y1( zyyu5+4!eUeNWQ#C0OBdG^~u1e7;gpbIamkbtc#%{)-HXkE6-z|F#8ZMPjude*6^5f z+w_g9R%a3n#%?bPc4+_|MR8q*1p>y;X+SPHfx0%Jm2LVX`Q}9FEMBN@dwk$%C~&Yr z5m}<9u!XwiEWAA>KY_PxWj|%InTNcmLmqZX$_>ov@AK^I==bwX^#+&DJ3EBZ9A|F@ zZBlsamiO-GC*(1}Xd^N%xycBO?mvLR`uid|5Gl8kdimshdeE_-7=e&#hRTDeEbfWm ze)0@UQ=AEXkOD+!@{V&%%NOSlq^X6lz+eApD4j@nrKLIZvw4O=oJlh+CI4-Txc9!w zi}3&cbbRu@p|?Xe~nRr+-$6=xVJv3EVpLaq+5xt zIi2AYMQ*y0in5kZF1H$e-UBA4TOS$AZ0H#I>VU;39A&&JS|59l`+GHZ!tDs!xiOof zq(gPN&ph4))BN$bSO3IqT&1TSPWHIpRlQxQAZ#Qvvg}#@-Py27+xwNp)02&t6K}$t z-@W>nUaF%t#Z($;U!&ABtev?&4{)JLgX&FaPgK9vB+w>lVY-8en?~Yo^-+f zmX`hcq=Bt<_%|NT5RJb6T?zdmyRz)`O?!`on~(2!CB(%}JU_hy-;EFO&1@3hQ}2Ap zlbb2w|Ei;K_IXYd*+bM&{A_)BY~pj(D6YuXkf(G7Ec6xAZrKm~DSZ5mxBuKXKBa6* zS^k=8{kTMjp{9vD(~3ptl=;C|O2%qZ)990_6Xu81&&|k8qbc;GUGCogL}e1~T$ub? zU-!&tuC$P^(t_C-_c zF{wwX-Ew;QlxtB~>Hud{(x(~!*>A-L5=Z(&b%IiHP1UCFzh=FmD@@@OC3kWZRx9Ij zyR3vveKmJ;QNB`pN?nzx89S}TxPNy=ibl&RYspTWCi)&Dra^e!{1j+j#P~ks<6q zrsjqBVoSqSwZ|W?oFyrEX~)#dn4(LPgB;X(dYy&-sC$wfG8N~{-q3V6BfA^?V%3Ii z?QTHw$>u`^X_gsL{mSsR*8$UCx+11W74Jsh`E)`h71*y))uUpzfSLh_)neL{^-#D^nCsyne0!_an6uBTOpG~dyi?)<-kvMo^}b# zD!Yt#^~2}B8`>NPv;_X$^~bfsfHF_?48{z zC^6B9z7rkkw$$#bJl8V)jH=Yh_p>!Eb4EGElWIoUIf}^W^O+BuZ(UsrhvoQr?~%t( z4@+#Ck8JMmji0Vb(mr}J&h15ERP?Q2NkXE)oHq%~-DhPtBRpLh>gw9$o=Ar((wCKK z{=8t%Yg%;^D!#z%M6#VMzEe4>;uagt;ZUbo|2l?5p!8ctw~|VSRGY7ktGlf1WpnS4Q#0!kHc@_Le5qycXHU1cJ=P&`{u>sH#~ z0Fwsfx#Y9PCrYn|oo94ea-VTei5Gseq)nsgFDmunsRceRD2|=oHG9A){qz@w=dJcF zOb&OB`Rk~|7(M!apBEo&gR4H463iTyN76SAb%uWllUFANYV*rKn>b7k>^O=UFtiqx z^+?B0%zUOWHJc%aR5Mc;-KUoUqi(l%Dh20B&I3d9=)ea&F8`@ko8uf$kAnbM9;=kHq` z*dL`=!Nw633tbto5oRVsc=Y4;|3VbQ%gLhNPdlq~S2Q@hyE`(tU<~OU9b!<5u6Jih zQckR*O<=sWwMxRoKH(bTitW?#r!W-D@B98NQv7>KN~)}h{>X3@GAHwyZU|t_kw(BY zvSn+=yl}e8NG`3(Xh(AWYc~adhI(4zeT#b1mOQ5Tu`-*CnxF0;NB9QK7-zPRT{UVb z@AQHkHa=2}bmgKI<*WUm{$_4%Y;1hS8WC`xHy;i;n+{bN#SDwPouxXb}KGttd z{F9;0{fh1sO=_6&Gb$5TCZjd+nC_h!+l+FL?F^DQE5!my^MZ#=PYkD>6NU9(xpHwC zS&>W3Ix+~}Z<)QGWHf(L??tqlHrO_quZx}_{abs_u$MaBXc;>PcZYxnQ zSSvpfP|pk3Qz{u23LlBe#k?KR?x~h=|K0(yI-UNcSDkID|FvWA0af$K8OL7#u|JOPvpWkrY)i^m< z|5O=5^24ySo*_~p`<;rzeJSOZK8qOX-xF;igR?C54C_(GM>IAuS)%VvMn*pEo>@8A zQk_4?R~)PHeoTHXnqLG}Ff^n|rFc`KcdrKYb@k9OJ)_(5lU|OmC>6iwPddOTrDNVv zT!gkmejxDNr~4^YqF}*1J?7ySz=yBm;X04}1^b{j#}%2IV#|V%CyU{w>(fxJZ!JQD zZ$<2GXp!^Ml4b`q9Q{&KJGZ$qZGs9+J*J~`U(sS=n!527>#2S7UDL<3xHH(d$N4{< zKN!NMfjQaiu~!xfdH;PX{rz@>t#=r{P#qh1WRjU`oOILq#_KSY`vSRLCz{oA%B1)^-` zbpG{?+S2S;x#mFp?FuS8z)!&xG~M2RwvKc%M&jJbT5zUsSNRgvQp$a5kL5bMHH*8) zL$EZX!Tl9NM(4>PTD3>o_j~uUL@vobwhAdFVA){w zq%_yf@D9O;)ehDjXZqYTUFFkNqE*WgcV0qs$KqBAxr5iY{P5Ptko%(gbaR4_EwD@^ zBI7DHC(f9yjMytccW_27x3TUND8laj@V;o9nTqANe#2h8!(suP{1FLnx(goA5ilr0?Me6Uj zbK~f!Pgzn+Rd0(W&C);U8GIK1*;gChK_ccmP82GoFcW~Xz*@l5XTt|BwVVt>rD+mM)H8DG9vuJaIlbNhvgf zn}f8_oB>$42GuG5Y|6Y7FS*XeG@4IFlOQtv0YM`&lY;AbVF+sduR2q+(m2c!8u$Eb z+V@l!9J5huSH#AS&A~GBALTTrvSck=kFw}{Uxr0^%{_Bp_~jmHnY{&GP9_f))ur62 z<$N5xQDR?4W=+?j-iuJS6=Y)4XEz#nCB>#xVK|6ESEkD^FdX{^wd%aDzVrU%eZl;l zJ_}dbh5>T+U>~i>ey+!)#Zs_G@){mrbpeSe+jOtN1O-`wmzO)}MS9jxoOt zAUSkAc+&E~edl{~b@UePa@%k|avPPwr01K}G#V#sVo%#SAm3ThpF~S1qN%C3p2=Z#P2ZAT6kSFP50nkvrxtNAqi_ zN0GDU@6W8Hec_!~!X;#%bTy0+WX&?~UAG>*hyJe1@jx}~?(hdyt2=FF2RMxB8yCv( zpT8b9{AsFxr3G-FHIJF|n+E09M$iZObw8I+gknsvgO(NI$z;teey(LoMlHW3=U)T` zrMCl@ZVY$r8Lr*8^pu(y;B>Gw%V9F!b-5>bgWlvKnq|(ov4Y>-`$8?;XV0SFTFA(R zi$8=A5+J*@$=fhu*bDX^rA?i^7?tAhyC*P2K$<|cpJ8{vm z8xhT;7I#cA4QhFhGGDEeXRO<9*_{0B`V^%n-O0KWU>KM{|0M{Wi1c)o$DhixcpghN zn_u}?{6?zhJ^JSAW^7>p%`)*FrclT_Az6m?iRHBS_?V0-%HT1?&bfyNPBkvMQB7??)}HM#uwyLQ91S% zgZ1;(x1FL@D@y-PMm|2ZXW9{b|ng`f^sfW z4Vz>`FYX?uDf`h9{366nc`jlpZk;{sbZ3akN=xe-6YTQ!lf3nsl-DvnM-y*Hw+?I9 zo9ptjIhx+nioGivGA{q(<563$97;1O&a2UJ(Z6nIrCdJ~%oW?p#XB}e5hr>R7$#dJY75^vqx}xre{jDzQb;YLAmv>j9N3UJRKR?ZwnLG-)1J*uQ=qd zLXPKw%rsAm$SL~UAL>;rY^f+PJsOLOPQTc0xw>{tA_2dd&T~IQ=dCj9dQm8LoKK{9 zH3q7-8#$2u{m80*%R-LQ@>hWG(ml5HvG$7zTd&wa`Ie@{V5@-DP=N10H+N3f#M}UFhlTz(Q)XU_ zdlZJT{=dMYgT@MNmq!xX4s?xgx2*~O6m$yMpTOH+yZ0stIldjM>~`p<(02)&q*K?G zZ^j!cYft9?^vrxuFa@DO2rK>Wuun3M2oIa0uy5>R-CdS`rDlPx#bh4#F23LSn@8ZP zLk(~rev72F3tkFTIF;9BCiP1(Nm7N`RpG(r zr#*+4debg_N)NY7G<@|>a)#axhQrHmk#M$FZdI4dYcU==ID9`|L)m_D`EV~&-~S~Y z{iZdeQva)rW^ISL^LL}qt%X+@M$?@_9B%2OTyqMcO=MSZq!fUA0g|Kyxf45CgW26=?5Hm4bpF?1+H2)_5q0? zwL4)yIa$1MBiyUsg4#6PGi%bTu23@pq=UL3N00{7uG^ z_I5}a6To4$q!p~hpY|pCh+QNL=m@`DbI-{3u$TXfvI%~hXmB=a-Lzs^y5}xp=@gQ2 zJv<(L>hXhcx#cl0VfB5Q%ad*opOW?BH6~CydJL~O>+s0YD}#Gy!n*Q(h7-!!!!pj= zVw}_ZG^Q!oB5zxnAJ*Vv6J->YsG}WVu{7IAec}yCc1Hcv`k6?-8194aq@%cCSHe{`F<8XARe5G{)0Rj{^79J!(S4h7} z4}%{h{}f=>KVhSeIu2^hAnhO{xz{m9`9MDPItV~}q{8}kx*&GM%*>(O76HzgstOc7 z`?hI`1A2Vf((T{!PynP;ya|}P>(LbODg#Jqv66Mu1PpKVLA9D6=?w>?1bss z_9f7Po4TvK~egOyiTL*2dj{Z`HZ}Ib|w2Qn#!2{YG92!0tp;%|!kx2LQ1svn8YN zsyLB1>w!gi{2{{KDkc4{F-g$c|1{?;t#bSZyB>52-a}+n@5b#S{Fny2cli4vny!`} z)^~h)eMo97a0wlTP<}tY56cbjyZ{Mqz%EDSuv!C0IX(tq^Xh>;~f6;&Ok+SGVP@1i5?_ChC7-n@bI zCRjuc)U)~`-TC1Wl8>b~xa_0GwlUtqf{uCnTM|-CNH27d_2VVfD%Z$v9GZGJlRFGZ z0aDQ8%2b}wt|=!uuUq|9!_;}fq-}F*tzISK6byZqFM_eJc;$zcN_n1GJ;NXPz5ir0 zd`5eoR#Z0dyvg;b)8OOQ!2KEPLnv;ot=5EUc6p%vT?Xj2VL^m-7=MiJ)2`TA^}b0F z&bl-9`m&B0pnI)!qrO7+@AB?J(i*XQ@uXt(B#5F9u#GxOtmMjzm~;vDso&z(sj~7f zdZ_U(h0*W%hl8atgn4<^Vb%t-t0|0$mB*>zw}h&ixr{6?gOv=iO5~`{E?z!vo^j9T zJf*55V`ADpB$CQ^FHfsf^R;=9#n9qO%`CcXubu>H&3(^NSSq_M9dt+au4n-JLSw4+ z78}LY)%9L~=73_@i?gq_R__`sh+o;wo_>}$;GqhrD!E<@oIeg7zi!Eo-lSpay)~qz z=C)1F+4s)6B+Bb) zrg-k(MsaLvKxa7d*WnZu;&s%^$7l`ZV-koK!LYQLysUA^cw;Kx3U32T0f(4b<}6SD>g>7~J2 z8-^~#g{&cRmDP2;MY8(SYF1sdhc;(j*Nj6(ZA5$);zRcJpJzFGRcq>aLvPL80YNXk(FMPvX^=*_jTd*B#! zS0q3Q+Z8Fo8OpF0e-Dt2=87a_zqjXGv(p68PZo;MtjMHdn#`DVFtlCdpAnhpUy%VE z9dX3CX0GFFQj~`9?FU_Vhgh|+@EBZCB}dZ2Jk1{tn5CI9^i#i0a@s#m-viGpf>h2l8VRY2Q^-*8%Yb2TO+@RdRttk5{c42 zhCIdDrovLt2QTsL-B~F(u1J^`)}R}pLctsNCv7m`X{bl)@@KT)J=81gz&(^Q7DY+~ znfUdZ7EhOo_*dcjnw0Qpi1h^)aF2+RCpNz*5~{IFtBL*e2Tw|n{0z|w3`qq!O(&&#;DZX{YY`fKH6XsYL3r zUFbdNk{SZO#CrTo$iJq24;Fdp+bvQ->)#j)Q6c6!)%4fsmU`MDwnjxGBOHlPy9TT& z5FxHisA_jbdc6z;cUREL+>8V&VPAK9aru0rSxLJDcT2HfY>>ht(Un9T!(&fF|7!ww z1C)rdk7+MtA|cAyJCV(7K0c&~$W5Ro*36X<>7{k-#esuH!g+A?e+aaSISYWb0Yicw z79NXJ?r#2ariV@A1e2~6kOH-^rlcZ$DQ7&5x7MQ5e3(hW*_#2}9pPxD zfD8Kpk$UVzoe{~zOpAtBJRKs5;CryogUOsY>h1wrykU0*O&2K3JP72Y!ivQ!pwMPC=5Lsdc1B5_HL6_3{}hms$GCJ3mU}_ zXs3Vrh7*&rYHYA}6Vx_)X%!1M^@xGQx~PAdOYQ**(4OLWwot`2`UiMsCc+e`h=}CJ zzh1NcwkM)JoN;K zhnNQ%z}DMSZr)IC6Cyn|;5qKP#rWiF>($wbRU zLjQ5lrwS5YgZ|TlFBPn?CiRrz@+8Hv)|w13d`VH3`Y6Wk?`!qPV3Y&foNk*By3B7I$y#1g<#Vq!4u z#o|54D{N@D*FSS6{#}5rJAeyE+I>acm4YUX6k!jQ>dt!5CAX$ciikiPe2hi>Lk1wW z7plkJpM&-y7RT`tp%Bsry*WBqPYIFdJpNmH*h-?nFbHwP5NunNT%o+gH&FjvsWT?u zs2lLlizJA{&_PZ_LQp3198kOm?1riDrfFk!h@q&L3%&|#P^@^UZla3 zcehjHpR9$ELb*GLt58m4o9CaXGVD&gYgYgGWcs%l0WLVb#l%hc(@-g5PhKiSdPyG0 z$V9@_iMHqUl88EwxD&Yh#Hy^s!8k5m3hjnhTtSE)aw4mWomU+v{U$c5Zh83i$E4)VdXDsYQ z=>OZ|#A0!w-Lpj33v?n@0p}hP9w4Iqc^_-CAxH&AMxPSc*Y@WTV?7uP zjI=gsupIi__55-`1Ryc@kAZ?>;2b0tTosT@%(ex#37t#4_T^sRd@1-9jI^hCpda!U z42?31d*@Dx*8;((e$UB_Gms&DWBi=6AzS+L9?ztF7|4*nvFOCd^rZ#KyD9_{&l?p? z7r`VjGsZH3LDK$u2I^+6^&AuIr}u!kjAwVtK!P;KhqzIA!vnZ|G52JjajH27KeVnT2ZwNMQm*UI@G$b3gYhrRk zr@ITLE9PK>q}$McJ>SxiX5&q}!t#bnw+~F$#PG(aZeMWP*pbc%*MNIN<1o6O-++5T z~lH2^PrPZGkCY|HaJ55LN$0U~m!c*#DNw6=4Yr zDzSv>Ks!ZVfxR{gq(AsK{rBi+`~>GJ0-&53&yoH^@(LUY%aH&cJ_C8+ie$SU*i7Z$ z0`%U&-T_bD;I70Tuy$dO!=8c6VL&CCi5$4VR<`zKun7hBTId0540Z_{z=3msOg%vk z{n{Ua5=Vb8;1JaRSqV1mHBce}cN`1=B5Fk5QlZ1$lk7)xBRly0!vUKwXe8MF1srkL z-heY+?H%B?dOMtgU-t+M1_(bdEc(X>tXWt-WN2H!0|qw^@H~&9YYf=1hd~FR^btv- z00|iGEC9{hHDur-R=Wt0zk_W9FfPQah#(5<756GAMC)=2+Wx9GatTyavh{o?fj<`0K^GkbMq!h2i&&8 zx}*QAkUFq?7j_I#p8?MYGRGVK)Em&^+kWy7i5{S36z-lGV4zwH0p_5vgTHb4UE3?KnT1&|;CL5p^BfFT%G4`cv3T=R>66+-nd zvlxI6zW(a}Dn$KXg**~KB@SP?qXBvd*J=PP+V%rr!v)6g>+NdiBT_RN@U$;w9StZZ z_U8hMA#jh+=|*-+13Z#!PXQ_=VC+FUo**@YGHoV4HlN<$)6L<$?fE9&k5|U;%N>DgVg@RQoe^j{bfiDGp#WfMc{TT7lju zL~qc9_)t&Bz%omF0`UH$zaId14XYD)OLYaO6LCwW2HOgbb{IFW_M_);PgVaRY5Rxd z2?P)zA==mf`hZan|IA73`T@{I>~9Zzguu0etQNqy!2@{St}TKEDt|v<{RHX$Ip|z# zO8+S8FP1=MERi`NfwsV~76mq$`SSwlG#EFKl(Vo)2++2$2aLJr{w2{< z&I^b^G{6N%HUkV`)}uWgh{XE0`~&hl9IoN6fY}qoLttYRZt1y{u*%5+G>$bpu+`MR z>0izrKeuGKdfIE%D+{{Npa5&v((^rfxuf>?3EJkJXV96HFa3?x3#KtOAT2gs1u zD1f66{`#OPpCIyqE|H3KBL={Vw|4=UMX=x&1!w~|rvC`(0;-%~qMrvQO!3Eu@QNo` z2@vEy*rws$tqpw*XQ~Yu^ci~KW)yK(HgJav<^Xt*0GkICj=^yPL-H@= z03>o)J}}&x$xjJ@n|AGl01{ujG1y8B8~rb>?tv0eIA>rX$e$L-?ZWs1migeG-%mn7 z_kW%Xn=tagp#xZX0EYHOI;iU?L_UOnEkFe%D#4m15P#GDT)cNM>7Y{s9ANCJ!KMR# z?J&5B|FvbBe{EUwUt6{Z@DE^oQJ`&sfDa@P^*ofWDqxBWW(*{bKH@zm0LQo102Igi z?*dfOFzFybD;PJV|ByVlOb>r>9|+4Hz8PG*H4~kBfxV{w_+T&o3q9atI-L8=(%+5Ja|9=O_>fztymNDlrU78C{1X)q8p^iKdBb-|PY3XxzRL3x5%DfMqwssfL3 z*QUXyD}O;y4oxrgK!dSEbZ2^|fZ1vB5)F|o%kOoe!wEQ zczM3Ge7iOR)KK}?fk<7$tvp|Np}7+SCooQ3frNOw2Uwo=7yRF>1Opq)%3W}Z$KMS& zZw~YL0@~&e0!9vEkABJw+#@@+1NJG`Ai&gw|25DX3=7^zJzs@^`s7AF6#&cR?Faya zV7oqmsOo>6{n&i3R+7WL$-oU;<$2%FCJH}XDL5_33rGXEICElWx6z{45F1c6%_u2iOY& zv-2Ggz1o})#_y{jIn{38;!mo8op+V*x~TAHbSd!iZD({rC+o)OUr@g!C7ytthr@^8 zBE6@&?>xW0s)skhg}-;?F_=x$I$bRNtp|JLiey4Ms3aduyq@0OHqWowL^zDr|AB<1 zNOFcoa)FTk?XiLSb%A;3MZ_U;J#C%aOs0RaE~7rt7V+?+4Vg0HRq?N^onmE;O?g96 zAy-dJ8~X3sL4CK5->>J1__!b{44M!~V1#N+WwOE}$Juu7|AbG^wVO??Af20C&qP&4m&L=DQr-_XgyiV*lxHw`+5aH`N^I8ig zQ|Uy%64oc>-h0j7`;)4Bo*uvDAV2%nAUhD-SyD6B1iK&c&O^x#$u(PY$%` z)>pDght@|_-hOT0@@FG-*GN+GT7 zU2jJ0F2B-MaJ{C++%&lAs~ zfi#Ri#tP9?@m7n7x4FxW4%iLu4Qds@`i`quk9}UwW+V_(@^1a7jVw|{792)Jn9;1$ zBDvS(@Ks*1u?K&|^y28?P&yL7@xDmBv?*hIhlbEO4~Z^{gY$N|k^4*S@DV8s1T=@6 zT%Ar70~Bnt^Rw60>5&QE0(w@ZBDzwU!ak$I+g|rIa?Gw*k_~f$|9vZFsZxA#=cGzN z&3_)5)e@P7pSJBYl+2WnLaRRDfHD#e{iuhX>QhB!R{08|9c(OlvzwBSCv(GS1xGr% z(jHcM$1guHh{0=YGneLTL^s+t%#GKG5PDV()6!k6g5=P+$ZK4>-28Rf?j>zh+V8G> z;f3hRSAvxU&>$HcdyrwlL)R|OH!m~4 zEoiRzC8LZSqyzGq*skIiA6@^SLFTkIpjxxJt_Gv62*Lc1vsv=@u@QeL>p;q!YtLDAlaGJIa;4alP=U7Hl z;MmN6()DN_O{v}P)3c#mgYEo`Q}hNNzM3LLxpFTxep@8Nk_vS>E!L3|_{=9x4sPGC?z6_+la!KG=9cHA3`A|R+ zSXnebB9ZjOAn;|xCKFFS+rsH%BGN_-w&=p*8(aEMDPKzLR!d<|hBPnA&8nKk%V^>r z4+;;Le2rqECR0=27?#kqYdePJPqJk1RaPyqqp?y>1I~AJV;Fi1v7h+4glc{FC-6!i zJ4!o6;jWBm7l&dpLR;X=3%FruCr3oijP>674u_eO!&T2=Kou6 zPenYU{7hU;+}iq)*VZ?{RWg{US{h6q z2SFxXfxg8I|FrK^iRXlz_C;f%G;RGLfqB=GYURm^t30Q=*IS&T`ZycZt*={OcqXUA zhp8fL?zj#JQ>u9^l}6}8?B`P3us>g{Si801i#d|UKJWF~ft*^zwt*ZDR6`qRYt6~9ZHyP0P=^}L7N&#n|*D`=bM=G+zSo84b9*T!>Lnhj%F z4OeW_*{s)R;%RgVZL=J9#0&m-oF&Uc=5<$<*x(N8WBW|I+#vZE3TkJR%v24MoeCkl=< z*QH2S#P<6_c0?FlExwY@6R)$$)Z5~q$h?$|76E4)A2-FysH($zi@!S+bL?0+!#5(Q zV}~+(;x*>uJ5Qh-#wUqqZbsDMkeLZn&G)!P;0F^!d|%?O!1cM8B3O*vOrqSwa7~K!s+2S#yx<-F zft-w#&535v`Gf=#iKvyCqzpOb2~*ia%ymM0UB zMBJ{!7mpUbi;bm?P+?W48K0cB)(zQ_g+(nKJZYPl+!?HqxMTe zN`UojK>d}W*OmPlE34q9r7K;j)9|Z9dy6z!afb*wt=&KyfOxygQP}J_ z;#?hko+l$)ge-RDpY*rfh2545tXm^-A1Y5>lk9IrP>*edjXLG_`1CYO^WV)7Jc*sk zei=tQw;M7t{({ohD?QpPZBGnodE^i^H6Z6cIh7h)@J2Si*VGu?Dnd6jq8zh3Z`HM4 zD*C!lEFzz{`hw=fZ~}29gM)+I9$(hjuU#&^aFK~t;JWKVgJDIcxXs)!vnsb#;)TQ= z^HOqpUHXBJMP-`5ay|c*0Aq?_BhOQ2@p$8l21nwmsHWeky3Gd7+>7pK(e^m5`j>DR zg5ffopWAU=gk}~{-dk3ioEs5;(`YD@;pU?@F&~t^kXRO-d?k?T{3HL z`cA+*+TOXzKEKZN(RI(pZUQgQ?&!gEvcF%7FVf3Q(iX`v`O^%VZ(`1j_+8IX5@W;C zKNKP-K+-#N(bmKeLl9BsgOmA~-w&ksmCb4!8izf#26G{PoYV}LV3ng(z zR#vch%J~@+@z3S{U0PC(98sl1>_s&Omrq-85nNtbkxPdt@iAr+PaWc8s27|iPQvrK zoACo9@r~+swZ{74oM~3g1a{5!57sC}HJr2&MI04>dq4jqxLzTNF})T-t35J&F=%3z zVAxdz@4VN@TS9a1i;&J9rxl-di=MNk(a3rG#-9Ht(OSFUHkmhm9%j1Z8IQ8+u*oHl zh3=zMaIt=q_rhC&zYLQnKIj^4c{^MtB}Mg>e?o#>RXJ4yJpRUO_uE1s%U?|%y>T|) zHHiP3t#?KgqsVNAtr8~v{4HgARf9YRNi9v+jd&@JiCmE~`SI}G1lj2u7q$E<#_O;m zMSTnY+7E$V-*5d6TTpc3#2y77N$jwal&qQJ<_kEel&K&lxk0a--?KFPo2+1>f2F|W zs%ZXC=S2*qa%JUP_P14R43z9t?7u46*o{WQv}Wb@YKyH)7ssIYE9@5@%onK_Bra}# zZBGZ+PrY`nV|*D6-ex=O8Gnb(cannh4!jiXn-oK{Y2;tPtq&uauQ;9<4DIaM7C!jh zIuVJn>i@XxJ94ou3ee05t>kv0h3sq3!r9s^mD6gh`gBt{Wh|1v;V>>*+3nb8;RyHe znw!+s@;G7V>W+>ogmY94o)2K)RrzSMc@#`edRyKA?Z*`G3i*9}_bKHAy3^5Ry4IB- zy46qq|LRxf#^S_p__K2(laE_Yg1rryY)i)&EsC$F6tlliZZ5|@9%^2oq;zLw_YLvZ zeCqfnFnA}F0R85MMy+uCgIw>E9Ip0B5$Q-%o>|_u`;upSqj(I{tvf#9(NjB}CI4Sl z6%|(5Yu6fu)MZ6OA|E%LCz7!1E5)28jT74pX>Z5iAHlT24L@9)$b2Pm`7&S_5H_NGl>yuKR+d1PxdFO zMZ`5d*zq~<+b`PnqgJoAyT9Q<9MLrvZ3y_&9b7FRFa%K5a5QRy?vWg&e zPesK?t6}H#v$r~^AXIum#WZkkpu>s=#hr%HMO$auEvnFduIoJqoD}hL?kf@Yy(2T9 z-c+hw)|po~_C|Eqdleb@yroaWickuawmW&hKF)w2HxV58(KuP^9`|=z;%P>nmOFQN zsx}4{cvrveI6G8Sh4XE)ujw`+X{Gk(%i9{x#)Mm#dn#_m8>O*R}Lg z;1MU83-3K9Y+J7rM_V5G6Mrn#2PU;Ckzl_Gio5-0mm)AjPhDb@6DmDyzTfU+5}k-- zL;Bw5tpB>azpmSPN4Hp@VVnQ#SANs&)(5_IY1Ut1ZiGm~{uqD%xGqr*{pkDjQ(S+W z>?FJF0?ybzh%n09A?IAGYEA#Bc)8T&GLS<#*iE{|S$&Rwk{=0$TsI-Ho8eNni#ZLy zWbd7b>Y10S-hGY0+Ax`4h8K>7bY{TFcbm|&$OAtglbK*O5$>LFrbEJmBKc{t^n?kj zp48K%_nysV+rMz!I5J9J@hZy&*%R8z2G<7izsvQlEYOrE$U90-=M2NvI&ezUVvuFl zdaCZNx82bA$R`;y&Xu86Qd_kcA#0~*Zq^bvzQ5j=KTU0#SO+a2IPorVA4y3j9YC7D zUEbeV)3&N!BE8ju)+4z*+%>-Vv?^P)lQ?SIIcV#m;nl>!;M;fe zDvI#?AHK&#u3NMw=!XVD0g<%UzZyl8*$N*@drqwP2dm_C?oqSeO7<3#sGhi89QuIMx~GW*mnVL= zkm~%G=WN`%31ckG#_zcHCwiD-TZ;UpE5z+Isl*b9!08U{B?+r}ws)C( zPl9A`-tS&BOM0JXO;tNmBXrZkqZ_1^JjKF=eGL9(JUv@O$oYwKlzOw#J2+|mIIRKe zcX$ortw#IPW|fA*qu^&ccIU_WSj?}Ry2AIgpMLB^)<%4l!>0~st6B7SuD2i>P)d7y zUj1oLtX6gcDV1*8&sZnb?tAkEwkuw>;?AwMaswRKtBI<~;XKh_uG;<|4lj{Rge7i5B9GRC6HJkN3FY-O&B2tY^OK zDp1`bDuT192eB^nYx00_jY>V4TSHH^&D9x>{8tHr!RPB{eGR0iykqWRV~icKM|7@5D&jNax$z^Ev7J z9Jwp>M7)=}4V%69%~Qn2h>@RF#0(~49E?AE-yY}NIdavCyO?WN^^oOEaXG5#!C#aP zKnU{h`ILehV>PGqYghF>rU&QIi|z%4yr{-3afjY@e^(wEFMNe%%tn5^U2|x;w}|?) z(>mvcxi!K!O9W;-Tg|ca<;H>UKV910EIMu7!qDj$cS*|w#dO{fwS0fjs}8MmI7%Se zw2?@7kZAE#~(@ZXb z$fg#>KlX{EIW>8@T6zRN4Be;FkbwKdi{{?>RC&IT?7p~QmoT2|)w&09jZ2ANI;prJ zJgVFbSw`khTXs<|?jd)tVpA-3uDwd@%8(4-$x}r676J@HfxfPftt?FDohI%JxAB}( zuH4mm+TD{n9nMc|GXla2o%1I-_5?`qUiu4A$?P8gka^c*xD8n!A$TuhOhU38zI%Fe zQ`>jE7~>X1m<-a>Q4n9bqZ|A5Is(iS!9FK?Q=SK>Y)2uSgfIeQ&NNFQnekVA@(d0u z7s6DP-Wl^iC=EnvS{UYcyd!MC85X-}c3#D*Ch-{en-%YeRK#v-qLeDme4AR%Lb#1J zaZ91$%?Ivt?s_Mm*)>z4tz^XR5PLMZjWUQPYRCvP$L--uPi|U_o+?e%-ps^D=RH zx0H+@-P{FbZYP&1o9>E}?!(Tf>UVtIILB0j>$>M(yUC+Wq2zfO$jkvE}c2m3! zWYnlsC_BY^ksnq}PF#PMuTHa4*Y*B{=Fijl^3D**NljI~3qI-RpqvU}Rl}|N+ET4W z>VEE@CYM^n$ZB#=c#VfdhN*HkBRMi&7on(UwPRm@`*B+hsr9oE_83cmyFgoDS{q&y zG2I9Hh?XENB4wjH)^sknwXbl6sygBK~d zE)dIhRd+YOH;Cc}zmqRwd%W^2MLmf7I>Bc&GA^pv$^ga9%|j8H^V((Hk2!eP$r8qr zEJ0VFC}waXLHg3H?FLr5WpPt~Tc^CV*DusMu&Vj@noHRdX-^wNzFQ_$O@O6eU1CgO zQmDs}mv>#h#Js%K&lW8lJHodD(hT;+Yc%i|U6|fqIO$cI!~@#Ccg1TR60~yfmm5d+ z{`ppts(9vkYDcZXqHb+a9Z!(cXSm_!&D3<+tw_3+FDKlP&0+1=( zDXWUs^*mSB!nyw6ntk?XU-<4tneM0a4qH<8F(sfX4#zM^1FjNKZU+I}Hqv!ui8m4E z%4dtLsD@JpBnGWAr_f?K;kKwwKWs`=w#)9J{ZDI^x>?(z#JyVL1X|dgpQ?|N>8#Ix4Mx+; z7vATei=Jl>V4Fp3X(ID}%4Iucbd#v+O~_c2)@0n(h zcJG^hm2ZN9riA(QW4yCzC>#1%Sf)oR`_OaAJ{k7112KoN7dwuf*x0Q>M7odM;O!l; z$UZ^YddGgJXUpbvl-gam+k5CN%iw>W97ApN6jKWKo1M5U(!+8&8N`ggiLS;^A5Cv} zO@2}~X}%W3Q4zkx6i1bAXz~u!Zm!W8@q6iFPwUcF+mU|^soJZ!vZ|=xk@ndaoVwBG zy09`so}?8iXSfsys%|tvKDI@qT5xNPbn96$R1)yyHG0Kf}Y`x_P2S&pL%yLOaV%hGz%&7dlSc z$MM}C`_qoXCXb8CpFF-Y@2~4{Vq5$?{cl^e^1m4Qx1{HyMl3&v*+WW|^%mYbhpkV< zZYZ{_D{j+REho3nQKk>!buqqIS4hg|Kq2el5wdLzwaj%w_~iHHll|q~CHCGtYYXRN zFSYz?@9&GzfoUUpN*dmV;HOuMqiXCIb0dxK3&VsWqre}+Fipf7XTp9x<@F`8cDV%J zLXhL52AnPAmq8>q?m4;Cm)z*-P@(C*@s5G>u3lWdAP*cw< zCU_N%5|PDyi)G=zjCqaalMh)m>fE6T>?#aI z#_>R4sGOBL_TL}y4K6jQB5UdjQxnn%rf)&;YujOa+NSc3{~4dRu>I zHG4HmU1~{%Dtl!NwU5SD+qW5S#rGAof*l?@9a$#)SqqPYabE*o!*NmH68+>yZ&G=( z#rUDRu{%~6D`pg0{;gh$@0NR(Bkr4opLZ&UG^=FNN9h@XA}iJVypm8})O%-@GUl1v zyv;T?wEW(7;bnsUHSo_g!5ia(0PT@ml-|`c+B7|EeF$G2C5>O%4V07DP3yiWoeSb2 zS~{r6Psz%0?~&(Dmdj7Bu<1z2FpjG;rg~1KNzHXYPspIYPPjFrp^8?8l3i5qgRQQ* zd200I&&)OM0U8;$EON7lOrX4J&FQDl%0C-4SgvX3(Ej>dMr_R?Pl@Ml&7Dq?U#JJ8 z5;FSrvPiix;CocSTQJ$MguTvCJnFyUFy~bWJnM*zv9gm2=WyY$ucK$i6eg@R>Y=<> zBg>XRbGuMSTB%PtP|18x!XaWl%zpFxKHb>EF{}eZH}kI0y4*wJn_5sDv`{wk$(3PQ zOqUo9YB$B3HBtV?VoNQ=t`3rK?8-a4A=q0_-Q@EhU3QSTN%-xf2x-EpR#!H~#spDU zc9CYQeU+J_CttUKg2A6^$P8h#UsGH-LIM2?IHCdq~%juQ- zF5^~Om9F#X;B|r1E79F%ud+<1)UnFZcPwsll@(4`L@JXIdFeE4&)(5_>p!WUBD*9y zJ&QFfc^wwLI=>g_F%dL4Fpi}V zV=o`LUlwUx#treSSVmLbmwe--Lzyj-cgR^_WSC|VELG8c+K`I#Ii2ZRVltQC)(xNT zlvkjNkKAAB*+)KePIQ;zC0KIV!PL@R?OT(U=ff?stWD{_4KfVeF55m1Fw9F@`{sm( zJM4G8+tzf(+ud)dNJedk+8|cg#`z4cr1*{4w3E9duCxSt9V|K9%R1UxVMBX6y(|>(gNJ z7k{OGkWFrCmF8%$sn1--Z&bvz4cC3O*_7wbJVGeztQtYQ|a78uBOr;fj*inBr;sbQwxY0%xMWICYmF2NK-qdmiWl+9AhVnEm z)<)>W4GHAc-iMO#P^*thpBR1}RM+Miu}CuG5aL{*T8Rpjg^%+r(7DhZ}kFgy8Qn#Zqnbq{}?DhP(w;uZCU4FwMCC;% zsprIIe7`}18!b4G>L(tP(re0b)r0pnC&@H0#PltdJ}ZW`$+4Kd<+Sd`iHs0kf>}P5 zh*u{N`7IE~O0^)N^ef^;B$33PX@Oq^A(rM6y%M(jXGHuYt$+-cBP_18lb2oa`qNUk z8G_3Lkv|F*#Elo-S-ra^F*mfsbvSz}*DF4_Dny#9Jp8skftSv%A!CJB05TDfZ0FEY|bwKa-Y&+3~al1vnr5IWC)QPW;vLZ^I*(&AMdIOMyC zK6~cOgpFW?f8egphNCy8pnMkN8^_PxJFdI?}2m4&0|jZ5_Q)jYzyK^M%M^ z&fhX#Kd>XKQIqg2e{By|4@FiRCAl`rrdwM!8Qv8#%uq+nDAOpw~8o`W~F$ zm8|OWwP;MM)AFBaHd(MHFp*9C{jZ0Y+1$@;uIZ*kGm(N#0=VS7Nj zy^Pj!_vhYt;_~tA?Rdx)G-|(qtJ*w<5gp)4w#nHLmC9 z-`;l4eOx2IU0m`xjCAob{q%6)*kXwi53b$%ICG>WiW;{5 zqyMaS&bbFon0L{X5ctsNZsegbk;`j^9$JTBH=XnQ5UN(-<_EoY4V{XP(`uB9mi{%D z*Nr-2?Bg*da&z6swqNyXCwV(T0(xd)xc56Bg&{IQya7Ld!=m~9K3j{P7g~Ziny`|( zH`d9^SxDSM^0qqa+f0lp>Fi=>$?gX|mjTo36lci`6V-(KRP!8Z908ow2Qqq-vTODH zy7+Mz!Nt4qUsJKt{Jp;fl9^68Z_PU9n``uK2u|X!Z}|o}TnKo!R}HCh@oH!JsMM**#^|h)c zbSw7UsVUS%qW0SNMEi3TSIpbd3lHppq+@C1!5W)C+6h{#9_FLrw8)zK@pc{VSwHtb zCFn;Ko%+I^v^idjjd~|>J%(XDmVU4{tas=jv>)Rx7kzyY9sga?rrDUnGR7??*9-Ge zkr{q~|B3PVqq|XsGlnqKsNg0jJo5UD$!Epj6yv%}$kD9M^`?OGGC)ErsvNLZSI>56+&A5I<@NNCLjP64{T8>rjk+ksR zWmllldg)Cfk_s`R%Xtw8iZ0R}S^45;)^Osbu!4f^K&? zFUD>rSAlhmYD4;)+B+jh$};kW4odEr}VBAEl1n#h-P}n;v0uq_6U7w4cgVXgPs!=Rpmu; z(@^Y3tPH9{6a6NoHtmY!octY?P4lwK7zH1uIs1yMN;jr5_rF9F_k>fZ(dEe7lkkE? z=@jpF5md_3X_6gpxkcDVwK^Bl6hC|ZyoPV$O@v2Lt{ZE)vN%o7bPJWy z$&`lL8IX^Z5`KuMiyb zw(>{U`Q4bH`VZHpEkA^>&1ysLt=%7|i##HG*y7puZuwNVPnTVYf>#}QZ%L|*J#b2u zJu*zTeC{bN4H~L`8Q_?$Qg!``;ryINz}ME^KXo-tcPqw|jJ|pGbs&Q$gvm7F*l19K zgDRdZvOcOPD+(R5I+U|Ws8LZOA8w>iKhq}GQT;~!>ln8R_05qDv}KW?6kXjdL>hO> znykCuj1W)h8~%qD@06^{aTAPBGnUS(!ySJLZ=&|aNT<(`f`Sz2oImeP7`Pc~=(u?Q z$)~p?FkKyT@yItcJ&4gKnXz@$FzY^pwDq|WI2G&Ru=eN@=(Y3<1hMVhLR5z_Zg`)iTrcZ1#d`(?v+kXl+=bli}5F%oIso96s!{AELyD%R1rV>M;#P5aC2PZn>W z%r)fuYv1PY#B|q{1DU^t)?-DOCMPvW6CQDTQ{T&!x;2rx`{(`1!|iL#wk-J*)pP9> zuTCoP^EQdS)(|n5aHS;h zFq%RhU6whjNQTD!cITh^xK;{RGOaOj2Orb>!WpAKZd|;pqomihD(6wdZNAiOK6W*7 z@)dyOM>?skK;K|E!Z>Pw@LQk|UJ(aOr@Q?b7` zT4|uVV=2WS-RVKL^7v`-g$3&~%baeyg5+HVM^QFC8WeN2E!lL`U;g`gM5viJaMAs}JAun{?$rr?H=-#n0!xYYtsZSBSnoHJQejGsO5K z(B;8*>%{2k^J-CS;pvS}smy9ZLxcb9$y@s#BE9SVXHV3ct9D3c!SS$uWYHSg(qf9W zGWnft3Ege3vsxf~Z`$A!+5h=mrmktrw)EwzLP=^8O|`pt%HH4)uO&v~aI{Z&eq1%8 zOckQfcX1r_FDK4S$-5OO-Ad;^?lE(moS=?Py;zY;cy+_0obtNQ;MNIki@AC48{|;q zXm{GanxWLi`&9SGQv3CV73cXw^L%tDp22PZu5WrzWC{8auXNVoexfpdV#3%~S4o_c z(kz(~*#lB;eql?l^R!~eB$GFJYb)Zf63z7FBGti3s(ep#H*muZ>)hXTDuz-Zu=6;E z-`yMG&z{@1vciQ75jP{d<0^?VEQfbV*{z&kA8rbrT{ft%Kcz=4)hP2Hn~+JDE=8tl zCf%o6Hk=vqfWFE^0X@6;L`#-88LIS|lgfDQ`YX;azhp zIAF!A4=6)0dXK+=(LC!C{b+n$_@czOc5ooir;GO0HQ_1@s4lc^9hY{tZn(X$l?LyTl8$HG zi2tI$Nu%gsBb!v#tca9Ld1E*Bmg{Kn^L4AIcaZM*8?E%KefQ($7+0DGw8e;*)nf$W z%%X9@M*|@}ZX3Ke;--6}3LWCKE-bSOvVAkuizrw#JhId0$d# zL%(RpdI%?oERMKL)RNUKnS#IiC1@3wku;>Rao#6dmw5bnM-iLlVc_<=ZOlHgMhzy_ zESy`oz@td~Oy4?>4VGFX!{1>~OV8wJCkm}%za{Il4xv~Ky~V<774ea*tWa%K<<4Tp zl8dCM6{GQq?LDia^P_O4YX8k?FK@)WP^N-T%~YN27Sh|d;9(|yuX-RqeMiO@QhLhE zWHSSo^2$nHdE^EwNeWwu>i?<`meT$j9a#9mPQTWDBVVsu|Py=l_FHcEzTJ_Qh1cDCruMb5K#&EK^tFE0>&@90i1Lqp4zV6jd0$=0m^dS2`!rnS4uI33F#ob+k6C}9%E(A-01qkjCTm!*f5*&gA zhur`H5&c zB-DiyY9g+b`{H^F2)>g^uPzzmW?8?Kq+&T(&LMIXuZpX_z3VHg@Gf01TQ1 zRXK95Ds}tZN}p`iDRiyNo|h|uE_p9*)A(agn&U4 zQr_8=mN}ETMErAtxcSdiCJ)FVP_$2&)qDnd{_m-()X(;NKHH zR`JB!;G4v;9*#1$7z!~1c7fFclh$~08Q#Q>;`upg7Sp09L$(|XbrJRAZLO)xO2vG# zHIH+-7G|oG0bafHAEA$B$Ak>!ng;xb*InC9G`>`M^CL5OqfEAZUozuGg_bC;wW6~; zlG0}%{^(cJ1~xb+?)d3I=cUJq!hj<$zFXgSTqxu@X>f7gORX6-b{jbjnC&7 zLu#krOv+}$!#_E<# z(_dx2C?1eE+iM(2#0wDTVx#Q%6#L>m(`d86-PZ;x3>1?o@SP%FWUphhF~$l*A07qk z;{}q$h*KtH25t?er`LZp&&cB0VXrkC)Z82gT?5y4Cm*S#^JIdE6J}?GsApVpe``Kv z2!F;=E9f6<8CG8vecm|rqAoXnhfLaWD@i;^iJmKc^5 z_p8$D>6~`;sSOikTmQ5TQT8?yvWd#LS1aV;?O)J2Il=|hkEo>uIc8T4z8-Gk zKsKUqJ^uPvd-W{4;S}9zb8MI?U`7lDK1w^r62@%n@_+9;?e2o2f zogCU9G6RuhZwMV#ReuGO!O04lfwy6WX+{E-oDNd2i=^T$Py+%4vH#OUjJTYfDL+Ot zHWTbgr+PdF3d`u8=$r_YI7uhaZwS=#SAA+xziDnh=|v8{8Kg_lDb?#(+NAq#u(h_l zau`Bq@aHyZN+0NYDC3^ADwO|1joO<_ZV3778uc+q!r*4wt!nuuz)_zI~l`M^3u0a4RX{%ux-0$$O zoAl1QO6NVMQ4pvh(fQ}^_v`dD>>bFS@l*Obox*50src25TAP=FLpm0`->-XniPj&i zxBQGO;4<3>KU!fIqSAA+1=6a6+uU7NbXpQ?r#7;DYUeMsWXS$re30%M_RA3(JM#NO z$8(x;Y3MI?nb-FYVK`h%M)UZzUn^|8K-(Ypb|Rl>y}(Av$fr)W@t9mw^hB<~*4JpH z5fHum%fZ6Fbeq8KheFP7p{DrFn*g#iVfCDzqRQj1?Q9iX8btBQ^pBVL!M?d4i7jOH zFYyulDwp^tEqYh@tHMK2>K5j;cnj!1K6Ci%wF(}PE4}nmqb+#}C?ogOv+Qghw|*z! z+GkW|SxA!xW>w^QI z)A4w&_a<mKb?>FKkUzaB~%8GrwKCS z(6gjwU6Wg+bjIqFpz)<|U}&ih{aXoQYb1`(pWzFy)<_rg^x|&PZ;4+Svy;y3bb-9QYZ>ORu|y z&E_6%Q0<~Jw^6pE57m5unWTGz$T(w&>(Vv)$y>No*_W}Pz;^}HfMp}W=Ry$;>mRiS zHS1J~7^MB65R&hpthTniw#}RF5YD zi`lm_(=mc12V_^edy=GV>mlRCS+Q@0$WLs@kBbV6IQ!IdM9l&-Jm&umPAd}38oWlD z!0qj1@a^`fc0NX1RPXE;uO0Eex3jk^eU|kebIfJ8FCou=j2_>f+K!rHEen+CZ{wpm zIg*RD4t*iYEYb?e&MZhhRAL5tF+TmiEEY;5SMsn6aZ)&i%&eHcT+fcy%*rmX>kKHC zi@58E?#*)p{d2s5N2Ir*&G9e#%q2R$(S>9w$Xw*m_Ha8o`Wrt?T8fDTCdrBMOlO-} zQd8DY?`#-Yng7-m#lO_uP97W_^C_XKVdqWdlKUy2?!+YN0Zx5o&Bdyk=&Tzcc!)7w zH~EfsOtc-Kt0U~ccOd0|kbS@LO6l!e4evcF@a`;Z+lY=dKDAJ9 z>dJF3Tv3e3c_I6L?D%iCBR3}Zq3#=llr3$o^XweV3$40w^DwR}PrL~ZP5T16WO7P@ z(Ci8^e}xKXySNNIY_0nZUbdIj7NG-vUDs==0crw=J8bQVA0L1j_5#8qNTjZmxSCKr zcqrK@z(@}1s?d6*Iiqm28IhO$;m2D|mV>Ljdv#m+pkt|n<8_jk0W&+=J^+XJ_WanQ z6_I`#XBf~bD7TtT-Ayy*X*bS2VCnsF^4?+4 zYmeHF@*D&;v#*toyA<)3}Ze%`Z62+e{`U-en(DpJrDMMOnGap1 zzUHaNA*cL$f1Z6IqCHtrkvEf_y$BTzrph{r`YZW89fl_4owpsNwvG9xyJUp^K0PHB z6s&uwKIi)@E7WTmuNT8eRsg@#UB?>FeBJ2d;6HkaMj>Njp7E5@Pe`sX* z`Taa&8Sa+?X{EFOD@La2u&X_JA@rf|{mc9ie3iT9ek(le*mW`Kb!TE9j7gU165LiuYJlPEEN+$;!ph0 zYQl`53f(&;Xf{7p0GiM@AP8dhzJ!wQU{W(VNXVjxUz1yqMvx^H`NNT2+XPVCY-EsI zfo>ZZrG}FeZ}g@D4)-TfTd?2T*9l_LE{r47D~vb(^_l00Lkzocw37HQMURWU5EW02 zcGi0jky%MVFS>dSFV^%|by_>8q6L2ot9KdTA7)~nF~V_#Tr$%oh-PHouhOn484>YM za2j!I`?c?aUYD!5LPJVZb=iiKi_I=pLcf&y|Mki@ugdP&*=pV#=ccbz_%B9gyJlEO zE{EvGJUD;5ajv;>ey;zk%An~-QK@(Gi5hU#pGWMTNUJo;BBqo8C$5r->G@eZzxifVj2dxX7cq`H_Do%(d>K@ByGW5RL z@JkswD<9{we+KU5#9Kqy?oO8unK;++=J5wkOkIcOpF_QV9K=Nf4RLmVdJHKL*$}(g zAiHnNiLSAZxzwbEG*drgi)(gk*@rwziWRy__UuZyvzDyfi)~9v&YOPsk@H#2EO0M+ z<%zKT{dG&!IG&g7N(=&}Wao7CLXq7^Cyj|a8B1ZyS?tjk?yMlA+sD68)x99``F*MV z8p`K$jyxsKca@`zWu9ZkDL+AHJ4fwOV`#MnLmoqp#Vdx^GB4*`mmT!;kMqzHF*&)# z&)`yFy!J{jgWh(lCl-KnR82{VsE>pgwZtG>SNl*EisbLv<6B>7sALnQgxF$V z+AHkI?wMs}%G7|fs^NIYC7!jZA5*?A*K3|r#(vb=itp`Zt!EbCjK6Xix){0eD@nVU zF389(7!&mlvU6h8&oEpl*)2zk9pSK||55$Bl{FnDaJL}%(Tl_m{MKbL)*k|JA}Y6) z4AB_MGsyam)*SV)+nE*pMJ(gD5KB~0v&-jyyX1)iHr~}KR+#*MMGp)>92JWpd|V^- zX%X-3O|@wpH8V)14H8xV?PSGT(_!5o^BP%vt@sO&OEcr9_cLEHSn27KQy1A5k{Ht* z^d({{(AiLATBthjtgp>2toXw{RIuK<+Ik+?OVaqrRpU^$%;52(aE0o?M-`pN-KSL~ zY@FDu)xdP1%GtM70=;#8&*u!4YBlLIBsqMwh36e-4e3N35=p8isKKp3X-`T~MpAeb9VS&|g#b z5+CJxSi1Xg5J|qsLLI@XLeWQ)K%YmyMe#*VM(f1(v9ZYOHZB8tFbfhj#a1SU9W%6u zK_Ve`8*eSKJzmXem4?wm%&B>X-fiG)s6iYdf)(}e!fGJ_8{`lwOU@c{nxMwzO1P$W z73xwrDTHgobc5HDyaq$kHD`GhCx~JJ>lmXY42ZrMU94DAv<4xtMDvglq^21fvqD!z zZ$wcG3kdI4P&!wUX>G2 zmO+U|vC&;Q{kWkBvEI0a)I-$lTUVFEgP-rwE5CaicPTnS(=rm>*9^{5E(u#55aQ$)G6WXj&+@Xo}Na5;aVMFk$6b zbQP5NFkA=&#MF|yCL?&mn&^=57BhOa+u>SD!1=Ya4mep!h#qh`Q$ngH~?QpqjrB2jnl|9CbLtJBjkCImGl(hJ^LrsL z)>1g?)r31lEvzmq6eR9el|g!Acy9P(*rp$2H{c_|G5!eJ80H)r@w4??D^;IRi^9zy(w0!B z_r#VM=gfkreq>qrpJn53usKjI&@)hO(V5T~u^UhWZ?w}3=qExUOIUw_=Yboq!Rso2 zfr5BV43dO?BzHLH6g9L9N5;xhgwF<=je$Wn_9u}L3`;o=${Ni7xnTqP_YN9h?nKCQ zqo^Q$7FHfHFFF8w1to~E34ej;Ig2vm4s9vLECc5ly^V>6(3D6WeGYXv%pFbQSqNX$ zPHaZBo5cj!W>#ica9A_M!ID;x@D8tr;7-7j?ff_O4}tJrND<_fr37r*27-j_hkb(h zSW!$!lS_+S&I0C=7Lp)rqY?@gT;u&h@m3>BR`xc zto{u%3M`4Z- zLWuAN{|1&Nrw8@9=sAhUX~+V)A`3Od!}1?B)P6(K5>=483C|EKDDlg(wuL3bIlISc z=EQIc7`^COa3hGSG?+T9G@L%nJ2VP_?uP1vx*YyPqKF}k6mo;kMeT=Uh$4$?irKcu zlm5IKtPra|J19TK%?m6!lox0#D0u`fXjCWyfS4P!H6jM@`PF>^OY1W@DY2IkvhNg-Vim8c?^@JNh<45ShSA){Ta7S{^Ttn)Iw}5dhhIY^N8i=0u zjD)Bqt%r~YdJR<*eiODIj^8MVg_BK43-$4N;hls~hdV+V!)zfw8(15l@Yb*%A~rb> zR>2K%<;CY1aCt@(h*5$n^W0n8BDX z*lt)~5iu922^fr+94M^{#CvFu&(`<^aSn+9peLbJp(LTZVcis8|2jd&##Ktr_$W7C zML5^Gb$#gT)F?9z^N&M78R?egTuhVk_pmd$8ZAPcJG+9btUhJ{=$cVgX>4%e+?DTG`N?Hdg5>HI_X#)r?GEhitmAb{wucGlBuGLphXS0TZ&%=r^r-4J`rs@0c;c;%Kp=RcFG+k zc!(K_`wNc!_tJOso<4H*RGTa~N(C6T&tMp;nSPl(e@QIg8f9trkeH54ex{HHQ!BTw zQqxcOAHh{4*J7@ZS9OqS*AJ0M2I#FC?6szS@B$&sq?V|I52p=&z=2NOi1ACdraA{Z zESe|5pBrhJN>j+ z!JRANxhV;nVKwT5<`tIJ2B8R0SX-{FpYXqLne;9Fc0SyP*0EeRM98mMsQ zTD)F4JNcE_ zXHwM>W(5Xe$gMnc5?*Q9F-0fVXZ*6B2)&+EagJEvJ8`?^Qwa#ybjMmHzVCkvU+rS6 z@wcIZqAP?Z9T3jpIpxXd-(_Om0mrbUL6KvTr`}Dg67*Mt)5Eoq$bz0gsRTyMfXtp2 z#ya_@zRh+4T2L352_+coX!s=-z~&v|?H4>mwBHY#%Exj-n8O688mv{c1s`TT;VwK? z2ZKjm*hoPeX%Fx}2S|p9MgV5sjL#kr!TsoA9V!8Fn&XgUGq8naasMIg9ehD}E+EPA zU-C70o#iyB~-sR~c`nn(U6G%zLwCWm5sx|@AtK)?xwiDR45Qt??K*Ga&2C^?AONY5oY;6uObs2pSX)j@e!|zrW`cQ4 zxFf5AS;%{n?LnpBBH>y*i`f#xb07UiP6`UN?SP*T-47=*G5R~p9hWfs{ zq%0pakc8rP?0`;w8V!K*XPIDuTN*wX^fpD;vii)LzmkQ;BRd9E8E(T0b``ObZ%Aw) zacg`Z25M$$pu`U(Ou{dy4^6QCyjEs1`96L_8u$pVL-dj`?bZeNpMq~ir_O|DKqod2 zG(9e$KhesMe*hmJGoK==)WxTo)A1kl07GS%h;EUALFX6|(X{}# zrO*@ydmhH5NVnS`Jb~uChZ`COB8<_dyq~{U`@B)fBVdxHh%CSe_#(QN;k4~a2wmQ; zJgK#tuz;n6VnekaXp%V<)?KtaUi-ry7Y7@+dcj)pV-5e?+|J{Ps~tVvei@Km&mnw zXsLYT%jQ*j_6O<2HGK46vV%+2B4{v%w`&OLHY7M&<5O$nn~qU)=#C+HVL+9$Dl z;9{Uh#~T;9t>Rjq+X(efDj1HRd{{K~;+7GKQlN2IkZFtv$LL9j=mbS6>w6QCs@Hjy z*>1k9TNv;z{(dj$MFZPfgNSgrh)KVG7r#S(i z)@a&gL5s|3kBLS;4&bzjf&Vr3KbEn%-W~gZDU$vTdry|Jj^4Fkt{`M9#Z506(-jb^ znBljdHXaJ@=c{GJrv(d`Tf3eaM3^`K>xUBuWMk&nE1*GNf;rE{p{^U7nu*axF?Ig2 z^<&VRKxKdH*m}YxCKw@Lsz1ELGq!%5_2{-RhzF#sH6bH!F%U#$VdgkhiEREoz9shW zsB@&H@-`BH{<$?JBw68!eATIPUF5k4Q?|DS0cyKncD;b5FjQ=~!uA&mOb^^obC9*o z2!5zU3tkpJ^1gHiO9))GYo5yIrRp4AcfXyWS75RkvO&Ed@u5AA)j1No6r7MztK7f% zI059oZdWmnkt|iKTz2GxqT0?OYVz}oxa%4+i6TOZXO`>$m=8d;%9D0;!5!0|bIuK< z;HM8xa^@xBAuFm(ycq2U+4T&6s9@o?b8uJe_QvXmNJbqySAhaFM7OYWU_CV*plKwa zEg1!YaVW9$#^Pfc5NZXuw7_}j?KmV306q8dk=Z>PEwB~#BY`;&2Q8-_gYJZ#O~#2H z%xpVc+a2J#`gX46KQ}?InNAG9hUx@QNNj*`0ZWe5$ZWzE-PAgxoIHkZV7~HP2N;Db z=SoP+!n&9fdVhlSahQC4xAa@!3a}J{2aONfev-nH%{&`0|PhN zo)p2=hK`l0Xo60!SbPvGfQLfSgW;D#>qd!Lw?T$oC=`J;UFaRhJf0+)Q^#j zm=Bo=^K6+pyXS0rM7PZ5nMP}bSI(%=_Mz2NO4NaUHbuY)hY1;YwvOcRTZeCS_IU-e#es*LY*ZG9;MRf+A13|l@~LWp4sXa8GmV3HH= zMvm)pbLfFw?RrR61<;|*i_fie&N@smBv`9vBl)@~ zWQPeefZ`~cDPRae;yAr?PO+qr9?z)@MTCTEYIg4s~UNTe5EY zniFCHA8(%>I;#_^4?O}-OdnQEYoW{C2pxUuB!NZs2R&DV<&?AIBVJx?9`CQ%-DLjR zxRm+qR6G3@Cze>%ow=evctSM{X~2Z&85<2bi5wf74*94+Y;W^Bxokby zCC~IzEep}fQR$)0Pr^^D&K3Q3{K$J+m@;p5s407LbC4Y9Jy#=?vm)4;6r3E=9iaX) z46ucJ1Q@op4+GVl))`OO12@~p4RZ<55iAp4hH|GZ19ciYu$C7}E8_)!-O_|7ObUv{ zo5xx-7W{YAK!4oGeKec*b?0tKWjbG+r+eqtdX1LO2UOQFBro{yhiGNrbYwF)m#Lv` zsVnEn-7%cYm%VT=<=5@4s3?un#D9Z(?EnNuBG!(i6P`*d?-@}8grRH+uzRd~>~<8` zcyYkV+5Wtcf zenTz3$UDoC`$bZB-rpkf4-%&jNDBt`J#3$?{tOvrq-k*g3!6AskH)mFs|KDtM~(N~ z)u8sfGYzJ?hnlM+*Q20EN>-B6hP41-J-Y48>~zO*rDt%$&wqx6qzacBU85RTa>VhT~AMtfT^=^^8&jp^J z@Fw~n2STq1w-A)>M=o<;0~a1C#vcHYQ(q+g$Bma?{4fObUUb=DKo_5XQQ(4s7Zvqd z9Mmv8CfE`(0$47-fEJLUOkY>8C;W5Yxfl4w@9;J*{KrlN8IoA^-!A<#<*Uy`V5B+M ziPesiy-kt)c<5OFy}*QSL0y#=E_6C*;z&X3Qo$WnZd2;)r0Zj0+LXy4hI1Wd%+-X~ zjGfFF&?c8KTsYaK#w~3SY~cQPuNegvmpB(vr+19VOq_Flpo4k?ppOaySK7!=6V&d1 z0mQ3m?M&Nj2$Bhjd$1N(a3p5v3Nh-#P-2Pqcj`wQzODQPXwMV&gBDHkP=Cc(H;+MNFwUo7IxQCZ9W%*Mo^2|IXJ#n!G{{SQvDrh;e=RT#%SBnFO z_er)8OAf)}qA2n8&IPyTL>5mqw*v)@H*89gfCvAhfZ}k#mcO%1TLM)7q$&Ke@v^7p zcE$Ws8xZ(ZdEtK)Vt3X%dk?O=-SuRuxdGMPLK#CLtxtJ~=G6v#qGh+xVXei@{)Y8c zEpxk8uA6CQ-$#rJDyxW)%4q3J?M|T0 z6OmyKuE393WGZYz4|sa1zQ#_JbF#vw{1h0TQ~9ZqrBg z*U4(@;_`^!PCyPmY8N>A^#xoFUKP@(<-e#kV@ulGI^~1w+|f(C$ave>zRPsk(Rtb2 zsc)9tAeGr+?T8f_Z4|EcxY$vL$$xtlI(c@e1y7GGkS*SPE>oi|19y2uyzaQrO?o(x zmG!SbN#(*&rfNl?-QICy7xRwgMK4p4Q7>5PuKhV^XB6g~U{+>n!Kj7v*P8ixZ77*2 zY@qEbIbcIyhg`b6rZYq(n!->ul9bO)l)zq$wAWU6^uBFowCotRx% zU0%9y%BuTC2$m&7)NmikRLJ_sI7my#sYvxn=19d!#7P^-8ps(rWEE&W^L^J^$P`Q! z%n*zf%&&>5iKt1c39pH*`CgNMF1U%?4es~=u(IfW({0$z-u=0owHvQnx*MyTqg%h* zr@JSL6DP8&=<@$Q2ZiP?`OV7&_Jo(}tm>S+tQE`^Y%c$QF`)skKs5qZ>{h&1WLDBv zq*j<#3|8n?c!aOiPzaZGTRaf!(bm)ejkMUnZ$|JNLB|Als9@qeKGnf|{ly8K^Yrhv9}{$Jr8byJJPy#m%JAn`6Ytu-Uv>9na}{<|9zq9w_iRG0g~xUpmihG+F3WLTbK2KLSj%O zd*|ofjDx0Y!bugYsI~69R5y!A_~S!%Xy}g5tPj7%?A>A0HPcJW-^9xwIsdeEK*{l`P-`v20_pa&eLc4q+i^vR6Gv zv8KLBf#<75X*H`bAK#7OdXf986r^FL=W$y+1V_BHdgv$?1|(wfelgIN%S?2EkL{Xr&xj&FXmBZ34L5@fwkV5_@kb1hN^+fo*_rv-UXghR0__O9= zbH%|Nad?`mH6)jFj+t}mfKYa+Xg_6M)4b2*2fqOW#tP6T_;Kzvs+Dcy&q`P4bk zqq^N2|Jd%|*0OJ{uGM}_d+t2&4x~KV>n5$NpXvHBe|gfhy2R%RX=a5>eOdOhMQUo_ zDT_Tle)M0n#S8TU$s)hY`nO#Vr!C6}Xzhh67L2Srmz)RsU-}&nr7fRPe0h@JEWflx ze$DMp;|`+yf`7St6DVonmOOv8djn77?wl@x2T%{(uj(+Dj&pt6{Z%GER-Mu9t8)jA z4Jnj&>pa4<4gO}q)nCn>K5Sz0yiH!j4LAO=f^5axy+L%PcUq+6b+mE^`KRO|#qrAN z3CQDjkY+mUS0;*^AMu_Rm7ZF;U2+8)RpCMY@R59het`mk#{H`+TYscOhiM4NS_;98 zXYjtM*>KK)DQhd#h&PkEOuiAe7c18un?+xoY13J0J*R|TXl0g~NyKqe%KeR9X?d(Ux5t-^&?c8nI z-MCJ{7OBe;JGMqo1pY=P$stAsq0}9`!)o+jsHfoc?RtBSN!>np60YC(`?pPOLliB( z?+<4g?A{C();wUIRaOsOw%qFZBbSgl6`fJ173@*==&js14qS;I3}Q*3bCW`o`n+1So8yxfyd!SuOYRG$?$s(K7~KZ`(r{aciD#R;;0ctT|D>pLPdjRz zrU(tq<<&BC{nM7cyRCkdrUoS0e1q4oopnQ-zD3-d>>P{y%iT6i0hkUrcsjZsPi7jr zq`Xft?eLdNJ5S*SiU3k~OXt!9&{yM&Ue~ILZ${q^pIoJL!y~xc61)Gp=(;&%9`tax#Xv_bh91fhYR#Q39qC8Y zrHWNrI?<+}Yl;%vU!Iew%|VZ-&G6FB)M21OXw>2}YxJr`P5zQ@{@HEN%iB`_cE3BG z={w1uhsk3mn$Pd&B=)X9Vou(^_uHEP6Y@NySHfa=7gT(XgGYR?5(O-J-ly{ndTjiI zq`j?NVH{i^dMLd!@t3W7(4PaEaOWv+uI2wh#ulC1PylAQue@4xtK30nAA?1YWsJ-p zg9Q4SZrfKv+Mn3>fyY{&j}-8?ZlEkh;U^Q~L3q+*U7p1fX!kPn$!PEP05}XUD1RC{ zPJZY-2{jHe%!n4F(4WV)dm77zE9Mdp!*dX{C(#-Ya}-4P3U2OoPs7LK!jIJ>$X_u` zJD2W{3P~V%r0n`ALSe475;$;j?W-FS!fymh@Ev@x`OTeonmR1-Y4F++e4a^R4lk;( znA6RgNxFPw69&#Rrd%Zpe<{uB##G(81WB^aKm8-k25BV??IzzZ&VcOC?U9X$Nc+qA zQD)@K^{3}Dkb&(V@!Tb5`;S9KAIV3Niglqi`IotGHqSeUE>v^7r;)F&L~g4u;h(mu zFYgErQn#bMv-isRjXFk=MNobti;VY@+Pj@3z5YAr->)&+pN5hTJ9&x{+)~3StWNVj;lZjg~fgATY&l| z3k9R{CM#a~O%HUNwPI;`IC=QuN%!fTaY!qFJye?iiuydh;_MM_os%4zvU>%*mS}vk zp5p8rxEP;h3SLS_sv{4sT7QhOmQ+TWS%S`z)!}XK6^{tgrNQK2d&3K2fIBbi-Essc zYjfwiKR*`ge&RlHB*#^BxXhxx96Fjv9ez4wQC4pQW9Q`dC0q4?ozWh~mObIqy=-7h z+*5@e@MvKiym1w=s75~kW0WQM*cpkvX`l)bP)wP>R}-Sd&dVC**&cT~?<}y@9t+L? z9vp`tlIuh@#e~Nrh-5;Ua6^t3RNX6VZMRG$r z5oX@-3geYx$6b*IZqrvB%@Q5k`53rTvYIIW7#$MMgoQ{JxM29yqVD%C>&n9dK3|I+s%w z=zJ#a{c6qY_wPr%j_)U=?s&g)^^o^7;F^}j4FTmz<(W~cC$%u-@M*n+nF~c!cYCWrjGL%?wDuZETQfr zo@B{tcbQYxg>N5ZrWTCP9~N?6-DvQLSH`s9CKmF%e~e4Lm~{0s8*Dn2|M{xix!N6{ zEQ+DWb_BJIQvCa3|Hr*uQSZU|<|qw=%;?4HtzWwT_Jd-p;_gWd?^lK)3YhM)`dz;h%(0wPKb-q;Q&yB$MqJB% zsIkhy6R$Gpl41I_vFiM)$wZU;!ZJ+fc2k7%Ua}~;D{bx7UEMdlf;odO3*9Dyd^aN1 z^as>a*zX-3J4h($%iS!Ns|c3k9G2r2mR(iFAwor%2Hx<(&;IwDa<@|K!d5|_j?fil zyLx@kTC7)0ML$31MF#C&HV3wT_$Yyq9kjXYpitM*W3zBJRGtFzx10yCwsrG35jg)f z>akcN&@9P1|IJh*@zn_K6wDCfZT=W_!}4>s$>sb=gxBqgo@t1_S#w)ScnL@4#NS)`Gs1h2&Ve`-*F8)#%X*`B($l{kJ6f*%&1{JCT8X# z{ir5+V9iKJyNv550cpqiv+wt&rnxUH>PnntU-$RiHDA!5Z^2*DPdrir1U*X6o%@@4%O2xUm&=v;1o>SU$5;+&*XqEZB4dc9{3Q z(K;n5JJfLl;Sm(EUPh;${7I#EjsJjZ8IQO;jg5UNb`)IWCKUdL8Zoiu#ZG2PZFdh! zUP)HpiLJi--WVHQ;0@K{c~)_Be0iBq6+z$a)kn70XXK8+-@sS`Zl?T}Wb!{5G96NK zFL%06svY4nH_M)VK1nR(^EUf61*kKsU{8VAww!11Cn*uFfG4xk=*Kq^{-d=nH&pp4 z{WM1Fw-K+;m%nV5O5z1{;_T5E^{Ddo?5C3$?j(R$YU#r&@RYaE{AXO~-ssdhg1_aU zpbt8A6H?eq49y;VSD+dG9Yh_hZ}%xY734XGo33-^4*r`H`n-J$r{^l)TbK72BgHcR zUu)`ftKKY}zO3ZA)m!Wd%jx&M#CtW3ws2{uEy5W+a(8e+jvxB<>_2)3Fvprao7e>w zo!8bV1-W)y$Yz2^y09E9hO1pAF{x(&P&mTV$E!3BC^R+juwE)WQ{K~Q7=EV0rqWGj zEx=6X{mGBL$@VAjogu?YRGIZSmyDJ?xpuFf?w2d-vOJY-bvZ>;K9~qZ^HOA=p z+sQvai>O^{#Pwd?r?}v<7OK(hQ6x@5b^3}AubWZ#Uvfso>0RX#J91k~7t#p1Un2ep zb$YUz{`{QY78K6_*rOzy<3>X?XWdeUFZQ``ums4RiIn~Lo;=FG{GCYTuslewhiKGI zdc(6uH?S&5lRf5tqU z<=}9s%gp_w4ng=m*MwN8S{#eeV0zZ)L|^4>-j(_xS%+aSM%LJda9(>Sy_&jjl;Xdg z{nALWzXd2kDnv5}8lzVdJ~{B{m)g29k!KkDc4=(QJKC1e{Y}|VR(t!9>iCDo7{Hh- z+E7R#Odnfyf2EV!Q8*R3p6*0 zZ}mf6emF-;+27AkvSO|3kJZxX#y0HUFZC%JEWjs4YyJ)!#{AtLc9Wb~llO=5Gi%+Z zR)P3!#TGRhk|C(o^{8A~M}pJF{IAXWm1(LT{%*3i3A~^VpU;SgI1ejt)bFyMFZq!A z*|g%c)tX_fE%2kcyHJNqG{i&bmzA?w6rtD2|~VV3+xjczr%<-ybo( zO0$t14MxOE8_!=^f6XOY9Y0sb#!ORtj!lQ|jrSa+_)Rzj zNR71fBN)QmmMyVOqcB(|cbaXXr1%bFma)~ohZB1MaJ^udE`dP}>B;VIL3 z)lF&hTkD&l;!Z5bY;U057v2XHg7u03&4f9Zhv%36z}2WZW&)^$UeKPYX=57v`)1hJ zH@RiLiXF|@sS{Gk02!*Dw@i4WR|jWdX%;|yhE$l~2Mg48ns?gofyDP;U~4ojU#|H! zs3(t5`F@Xw1A1Ws_rkge5*^C}2I31e5srpI1f24Fh6!WV{;Oj`s13y$(3lym{KcA`igcZQ&u>3x`&zlWFwj(;% z192>LS6M1~$mLQNLEr&$kF+N6_+U2^r9Y9B0Fwj9F89htrGq7?g<^<_oVc9DR5s=H z)t}Sof|G0a_l*oNjGYB-_qaRF2dVU3N`y2(<|uTdE*{Ca^LbVa>}@`4velB?LEc{2 zYEBMkeBc;3`vp{Z8+cF}b~C5NtjB~99a=U3MP!9MP|oOuB1k?ng6);z@(5HN!l_%< z^{y5yDaFsoR~PRQXzzs71)eGJt~>5t{1EtBz;p)7EaibJ}C_fCz49-*KM`H_rmSgBFo`+@NaUg&p$boI_Z=i?!_KC%mYD)c?c zV#RLj4gMU7dUAa?B&4{9skk7fxZtfgl>9ZF{wp+>BEzWp+)3dpZr$-808$rU*eDpa zp1J2iAD<)qa%gO*4>L{v%VxLvH{7=LXBLI5Fyn98c30)2-gmS9uKWWSPM^i^oD}Rb zN8Q1nMeYdw8Csah9bh>YhR%GBO><;#J_qmbi~K)4U1OMJJ<}fBJGPA-+qP}nwy|T| zwz*^5Gds3z>+9$J@%`xPJE@bTQ|Fv?C09~+`VE>yzF3@w$Oq`yjvsxQLk-!S1c@-> zEi#6J0Z&kNNBbDc?|)hnl!m`hI{u-YWS}(fCo2iSA$aCC4x}f0v6qpDkAi!pnW9`b+5YRmg~POCX?$^86*<)fTFML~0ws zTI-|Lg^+}8h}AVgtWrXY7+JG}t7royRO4L|+*qAb$PB6*lTB!?IivnE(G+9S1Ok*P zVq~kdYH?%zs;L6f7~vS=#&by0ht$&f{B>pPSmc004$%o0dikdRRa(Xe>hmi48-R)$ zL3(hpv^aH4p`+=54kalQiHPGeiAfTdP_Yyxrmc|2twiEU0AvAR3E&lq;IU?j zEvW(k?|(oY06+nNK$n`QF9Y3eiQq4ZoEG@HlCM15nD`02lqxBQ0 z=X2-SY8ue{=jqbi(z`!yf2DwbF; z_FLPcOJu_-1KpIgh5z9tI_q)#?o6D^d~d%WI6z$Yn=@j1-ZSOLq-4BH@)*aCoyLxZ z(uX1KG;T^6aec)-#mUl*E5K}OZg{KRQ~L?#Pc5YoYnWP?WolDw`PLQt=PtsP>RBx( zZWCRs~125+*m73KFN!(VMH{U)baDRQMDjq8TCV%#! zKW4`zi}?CW%D`^~&9Jn4bYs!H8b#L*jl&lM((|T_#&d}f1l7uDS$S0?3KrT{f89+S zXms0j+G@`j%bx+K zc5Ba@>InIa54qnpesLE+iL(R@@)c>VBFQkA9`6JXI`TlWK|yS?${9xP@{)kI%q+OfrozG}M`lhbgrpdD4$4MiVbZWR+1z{AUVnvl_4p(B_#VtBWxk z=$4wGWcEAv67~XHNDk^izP3CDL4`QDf4_yTSM?9`3ClK{N?VN7Uj^z6Io{glw{B4? zf;y?Ua+kA#a*DThZEWFB4`m-M?N6h>6;hwZ!d@>-Qt!sX9^#6vROcGonf6j+_EHv> z((Q)Q?WX7E678myX*!^?#QrVKG~UtJc(w#~W84}W@he+;$XnrzDrQa)017sT>0ZuO znG~q)#$4Tpx;WXM(Bl+})d(Fg8GKO9dlS>NhTj?0Nj_HXztxD7b`C$?6O=kKGe2RX zobQVN>ZT~s59>s>#J5IfZ#zIU}1=c>OhQTyZ2UFx#vKT1Dn5K|?6F-*0FFDM_0s$QNJ zX?aW0!;T>GB8>g|OrkJT7IhGfa;%K^6v0HRdu81q{}ERdJF9Nlh|E;wDl&PCNtBgl zluF&9Tq{mCSzZu@CsQj{F&dxhB%=~Li^M9?Hch2pquhdMav_Ueuw|51f6sf5YkI`+ z8R-~?wkw#ZN;fCgGGkNAR{psjNU8r}P|vP0J(l{}VPHl?)HB2X;Qu?tL*CIdKh2$(d`6pTW^^<`|NdF;^dQOiINz{r^|H0uAS`#yIe(6at5u zlgPig&D0d!ge#0TOEPg2{!((rrflRl^zg4AE3z`!)C-`-W+{G8p`heT~$HqS&>;C&Cj(IMNQuqfAXp#J}GNwU> z+}o^ql6NeWrfwwnJy;nPzwxD=j{Cw!u3lP8P%nrz5MPcC!`M>aKp$6po4VQ0d`(tM)%PMVs-)wyF9px6Eh8X_g?p zM$Ng*mGL%2V18k6n8(cWlkN6BAvbP+R0o$t{4>?to5F7+H1!j-LD@GlO%5SD=C?B_b~`({78id;T9-MZ5GsA_nuS*f_H!vH~kx4M6| zn)O%OTj`64P0orJ%)A!n4h+6LIEHgSn?C<4?HP8D*E*2rf>8;)n2W_feFc$W1iY|H zSbV&y0i7G)8LV0^f0!5j!}kyKsg@^SB0}xW!5&JuuCa`#z?5Lj=TLr56 z5v2f(8ARu|w*!AV95%6YF#pMJN~OO&-|bZN)CcfOLX$2>vRwKG-oQldBU6hMTG-gu zy83v~q&)F>mEB4%!yb?23x9105ebtwJ*oow#CPn5@1Mc?yx|UMN2V_M9FI^z6 z|ClU$@_oqX-Z68sY!~)H9u!wv}0O7J9-084wADvN?_+rk7WZMj{Xlfv0hWq-oCW2sON{nN1mw0a2p(vk>qBf^AqfNID!tSXUKMWs;^8RSa%(Pl{v_Ay9IgAU*>>b_^ODufjLyXB< zfKM&e?pf~BNrjiR3e;Hl^$f|CN)aRO)TrlGD(9HU_j78)8Ea~$KA=Bah&o+c9Q;A7 z%HZ1wjdrypXr)J~e_%)D)@zp)BC4^GCpt`%LaAF@UD*3cZy2B#?KDoVB9 zxC+J%L1)NdMFs6ruPlf+T($n?FU+$jgW0VjADWMjI5_0r%H3U3G@rj};Nb`rySJ=p zxSoYUMObOSIn>0!N42YVn~-1C$ z_2L!{z$Lz`M9z|Ga;EGzO(3eK>uxI=7G}`5Wzfe-VaVNZe8I~Vd`~vJGoew{M+?p? zQB$gkf{#C`D(pwXNPQOuDaENMXlc*nU%I%e+ZDh}^i~AHWT_}L6cnmZ7X?w*sF*BY zQ|$=9?84E=}YIt#hg>l*PlG+o~tO=auL8L!+_q)CG;$qLxUqg6(1OWJ>ry zFit)a5u9j#91zVV&Qj>ZNO-< z|8oyM1vxWAs>gD}FmdmlrED@ilc(lcKzqzA3fj(6ojYlUf!I{)?<;48 zgTPSfkAJ7eTvrDlq^K|$VnU17Eerb7sq*_Q8HRjEp?`^jIvu?!wSNkQI$c*1+&Qbx z)LCEH*_`ItokQKKQrcA7nTym_fOKfkOtHI!ZsHb# zC4=FYkZ?LYj1C7KKP3a|mlDZQhDa7e~LGBBm9$c@wyMFC_<3 zx_p^ol;*q7Aq6^+^#i!M%wMmnUxR3jCMITIa7TSB+d(^ix5;bpk zd$`-$PUWOj%2oUzVbAw4_e}#v)=b!kxB+CS5cPQokBFtf(Y`YST=E%o96g@4lUB@Y zbxv#SwBuuhK`7gV_X*gyJtZl7zzl|aoM;#3qGtuub=@a75Oz+ezyV>J#3HNS z?4IZB)zcOQ?{#d5bHo%aK@TBM^pq+T|JXp+uZzFq9lqQ zBCB+CkmTWEe(mZw@^EQbP+wj!OMT!`_sf74S&6T8L(3xUGo`aM!shb8Dst2 zz<5a9p4`zWa2rpvne(AbXj_)g)h}!}@}a~cG-P=V+X{v6DGFX+97EO49)cO-aJK`R%x?Fkd+&a*Wg(UNy$j$aY zv0w`lpb`z@Z(aRIm4PA`(?I_XDqjBTgngDWQGZ&NSR8-M)WEi$PkdF4cOU%zP_kth z*+bUNHyy@c&ZL%v6^O#vhvmVi$$NVp^97AKyu)K-C6k4Ycm#OqhZnwMNpROx_1RlW z&bYv=_-ZK~e;moKEt63aB_7#Hs%H!ia*oY@Gj*`fsH#pYA7j4$QpUq>4EjCL#rO=Fx zR${-3>XvZKe2OZBt}V~eAMa}-&~;*OjMoaDi^14ey z%8vBWIjyO1?B9Z|XnW&u&2z{VWJQxhzx88R#0l7iA?*``RpvN5W{~lbvH68k!t`P< zoZ}^1*F4E4gAFYubLBy-fQxZ#L#y{doPFHYV7CST4qJARPq)H)U@wQoK zj*<;nir%z}Bk$)?JW<6eh>uPZ3tSIUre&LXNO5wW>2h*eS=Ohj=zS_D4@Vch@E!cT zut}!q_`X>E6Jh?gJZQiBPU7NV8-NTXfsUYOh|6#Ag>lqk?HGno@}~ou8qQ(E;ZMP+ch|HQn7+DVyOWa5IoMt4HgzYo#4=d6@hPIVT;Cr%#;_lG7qSr(;ReKXS%816 zeSv#ikBvwW7(w2WW?2mE5omftXhSg~GTLbtB~ZA1A>n*^ANhA45j1SJ0zc0G_f#jC-6x9+*XWH~*gA)h?-avv3&UpfwrhOw$ z@Y=Xp-df5!NoOd1B|Nxcr0n1NNmNU3la6l?OHQbpki?n)+DQEe@(c|{(Wqhi?WZ0u zj?N~6iNEH$%dZ_|6K6B8Xz5{6Tdl+0YPEDfhVaayhT4o9aBtS4oQ1D>5hoK@&6J-h zXSGO@1RE_1R6~-lp0iXc?zRWu^ezF)v?)W#X&znrwD&L(Rfq|0GH2&)Y_=F&_&^Ef zX$+^B=jlv|Uikmxe_ynQgkB^9Lqa8x1;(=Xii~Lv${xsmY^p#-Q zDQKCbWBjboy7}7!Gv3!OzA<@5oo3Ea2dL8YPweg060%c{vWH1mx=QUT)l*Ho1&3WF zh2gLu%%MsT^A8Ul;Ob#imZ2zZ^SMe;W~g5Rh`H z{U|Io?IdkAyyqEbN=D@>VLF<2lqNc|r@6XAYJR0Lnn_xMyqabuwr@1NhgY*<1_zdg zz%bT)U*$<8gnWn!EHB6^X59r<76>l3{QIdEbpF+Xl(wlrUDazPH+rtG$vt-N|7U9= zk2~D>>17(-fO{;!c|0rKU z?WbKQc3J<~cJRCx1ex7wVR0K!w|n2Jcccd5iZu4Mob6K{AEGs?LLq!_-}w(g4G%vJ z-SvuO*s?z1e8ctl`qDRj;&}R^I)iCHOv^jb z1Ym)wayO)`G@oPWr5dm;cnM`Mo85lp+a_r180u0_eoyk0GgMw_JoEp9X}r`F`3c!% zXgy}Qaie|Zcm#cuwCl;k_xx_>9t-*@2DyJ{W7k);7rJi^)_<|v3{EfWk%ey9<^Bqag*z>WXAa~PvMi~ZIlT$lALbn~UO%Cuy)e?jY0*`2 zDp*T360EJoa`54Em>g?d4xt1oF9!dKO0l8m zXx)GdUep%8p0pq8ji3tWMIH%9N;tc?#{trJ5mVFr`v7^MTT35mn4U|a-VReeC-S;- z4yAKnxY$llyYroLg{Uj1kayD#`by>w3EveVlNp{)5U|yHSGO!i5yui5m;81Y(A}E4 zV;7*AG+S6aZLdr|IT;QwW!EQaDj)O;ibLWilw!H?O6F_6uWp$*uF& znV;ompv30>3x#RIEpQOmuYMOrWtfFDPZ+r~SDaCAtxUY^7c z;+!OGDgpD;q}0ctVpcIn^oO;;O$ZY)7fV~SwVmatRNTgVzzJmdD@uFrEGWTQ*t<%} z2z;3_La_}}VI^~8OliYWV;}oeW4nyPBrl>>ha-28R;`+UZKm+t;inE{e&~1#aOaU< z4JchIu=mDD))kypM@u?p``j(^t}$DQ)LMRO)Q*LMACS*RX)_JZk`s3p%pDJZ@2*w9 zbgMSq%cd3QIo&6%%eF~uqreTK#tgPGGMzEAp%9b|?hfcm3-VTc;3w&_B z6Gt*1%@F6-ztHUGSXX*?l9vu)BDwKMB4=u)kZ_#t0zt8nx?l9(?aww|i zV)ofoHZ3h8iiuo=LJ!A!r zS4U4Gljzpm^ixVI^YV&Wno3Z6nA4QE*kE1ASj_7ReUo`53=^g7(ZCeM5zuZCy6CBE zsi2m$=A$r`pV*KoAwNpDHAB+d`WXCdaejSo;44g4d8NPs(S^6_@oAV9gi2o+L+Sow z5@M5tBD6=$fEz^AERg2;`F#bdJn}rgMBG5?H+2Jj#+kz!<8Xd7B+qhTgv`~k;Naf% zu{~4+Zo|#$n)Kh*JTKcB6!&9fB_9A~F=ZK&cR3gL!Nu`5nDqhnt#)f z^G(T>1TTCg`Zi^8u2)(2P}RORpbc%(_CE4!*hNFGafW~|q(nZBBwE9Zu!Ub>MAa4& zHB?HhqU(eka-qc@NGP^SNZ+|G@L+oA8cl^iwC3w7o_@3+_l_%|OO|Xo+zJdbzeY~d zZVIhc1R|rOePJ!P>9CcEAWn+AdSP!o~rn-p*muladSJ zCeB=+k(#>v`FdN_?H3WZNP2}iNTz)m+phS6@}NvN^c*_3>ne8+(PxEBEd|^wNB$y0 zS1EnukIuhr>j8G)EyvxaU+u89)62o{m@)*7F&iPi+53}DL^u>`;ui^C%lC=i zF`cL_IIFU{`b=z&^#O(WnuY#E*xu3o>{PltRiX-0~n?DpJUTKR)*#j*UDB=C7jI zp`>cgF~Fn4VtS*NE%NG*cu>7PEQeblL%RM-GI<7LK+<=fJ@zZD{8kbgN`o<^sDPo? z`bEs{VO9XLR<6Y)(IWImWv;riu)1X^|JwT3anRYwz5Bip5-w-#%`;refm^*>sV+fB=+)cROYC+8AP5~SYmWS zay|N8TYe*y+Ta6RQKW^n3lM(ic&xaG-4T3BTri`!^@5ASLSN&7eg{Na72Z^axj zzF7Kb`&hT-OhmYY0P1%iBVXa;eg+^t+GOR&Ja4q0CUL@3za`Hl@NWq@KQdY$|AfY8 zr+$W8sY5x+N8}XhjzvxSQ!(>%=^?$w`1qqB>%shYT>*JIjnthpS_~UKDp9n}GC?)X ziLl>GPW{f-9eoae&dx^B#5qm>CiH}v(wSQ&*P$y9U9FO!Es#K23XtA=YCrjo)0qAo zy^x*29lVeMmbdXC7py+*^Z9JkH$Qt!(wvn72@Zbh;d^#J5}z^1zm`a^A04Sb=cLUa zStYxTe9rK_e>rw4y!)Kxdg-T$I}wKScjFN`CVcKQxp=}T12u{ay!Vf&Q}{5JE`Mx2{X9w7;-RBp$8N{`D!v;rnz30!8A5`_XEJ9dH|z&MEy0UKK?rexO-(7_?3k z8ITQV)pi);>OVH=%S(gRqfj88as^3c^_gd+BEGoO?sY5~S%}A_@Wdt#!`C|$8P~h; zA0k2J!Nla0b>by0g{(W76r7yaogN#uN@4Uf`8DKE=^u`D865xjHLYw_8|C$w5|j^c z_@zNuq!&r!{BY?V3_Oa53`YgSs5U0ab|N1h4SM5_n+mfbVN9J?-lwic0Dp4(q$GbJ zZ(X7$&>!SYveuU%?(1G~$B-$cNn{48#flWtAEH-MK$&&mq+FGxn$_O}yiBa;=bgVc z;Rv(lPU3-ypp~B_kXDVTT#SpIZTF6-eo7aB8*P5=)8SBTBpd#d=uJqEMQTVJ+o}t; zB87RzMdLFkscfc=7`uagcZ_}67JQKbrKxD{w9d;c2j!x?wgYuMi^L3`yhcn<(fZ}^ za%2_oDBfjK3*G(^>KyrOZV2`wx%K5quk;Sf7!=OC3F?up_fFGeQj6LSNe#NP6M}gm9Ze#0lnH zi@FgVff(R#>6}dRR+xw-X;-5a9zh`JufSN0AH>niHWd}&uxg}9^VL*~$|!{#$}=Xc zJZ`XD`6v$_l#b5{5ksR7VZ92Q9=nU+^W0u^Sh}s`Vp5%r_#G)l6k`y-Ft$mcQH)23 zTaLPbGO_1MF~%e;v%ucx4>!K)u(|1ZR2^4hfRQ{)eV1n0=jobu^xOeEx#*w%VXX;t z$R?6ovw{H=t*0k!tlzkrMJ z0rL<{X%DJ=_MD|h|IL`gcxv)4*f~EOHTvYvmg*#3%z<8r#~ixN0R4mxw#*6wkoQSs zxzX{j%Fo*lmR*j+#EM9GXYnmv(T^H58>`r!{QzpU2CLS#!HSY@{qe(QknOc&I2R7y z<{(Ei_-F{e$>Z|u;E<=qeaNh#Ho3-854mooR9x4!CB z?!LSbC??Jf-C3@zjFO7T6E{_D=Wyk@6zIivtM$Y_nvLweR?myt)AvVK<~p`MZ#8&D zEz|NTZFgIBy=&~^fZuDxSg`chskNNH+J6F1+pZq*RPlKzPUIX_XQ{v`G&=}h3o6}& z9Zmar*HS*}k+PkR+yiPkfAh+}7^$zAnMwYD9M+&~!3=9&Pgp!Pf$d5z%OI17Z&!F1 zRV@)Uu~h=wr$-9UE_M$tD@YA;Um^G?RCb}7$5r`RFLLLA`#4f_^5`7!ot^6e>n1g5 z2i(Y#i97Z|i_aJGA=F$?#&yuW&=CQk6eg zkJfJYMqm=H2Kknwrdv|kbMFnzFoEC<56EkUH6ByU=6LbJjEEZRfc}hA@vPt^E7}M~ zp^*d24LY+9afr?!N&Bb*GdxrU^XR|^{L^F)T$|!db!7tIAW@H|8zpY>!?8VJBls9m zBdnNh9&M`5VCl=J&;-=g8mbe-)wa`gt}HX|bq64gy@M-XgpwP|~&Hf2cX;ye}sXl_E#t6Yz za(#Dye66&HSxH9J*lOkdYMa{{%$qts2&vU0joTdw@t$)_BT(SvrxVLu+t0iSONgoU8m2#*)C`?s%gRD-pxc~rs* zv3Sk6!`V&`O~>$`7Ek_9Ia|hU(Vek@qL_MF4<$t4*;Arbb19Ps>qdaUKRO$AQIR9Psed*;Dub%&MugSjq-y_u>S`t#*)z^aClYfLR{~Xt zvc&nuj;@I1zAEEEq2dKTHY%tFKBF7IxhWL`Wm*q9R&abBwo}Sh1NY32_iY+|9;;Kq z5bp!UC$$15M=iq~zJCNe5MIr-{jH-M#}TMi*Nx7eTH=$?;UH+jT%+5cyrV=evYnK9e;s#-DxC?vhFmx(@ z0!^%=?q2bVzd@<;)+%TKGoY91>(>>h&WZW0zN0kkx2vYbx=Z8k{Rz1_pBrZ7fcpg3lG z1=`UY?DOBCt*dhS?s2B0uXd9@yv3_};m-uOc<7_sMm&*%?(w&l0w>rSx?Af;KGB*I zB|V_0Jvr;^Mwg&XnkBIzSMjX{DS)KUm$b46u)r|xD!{}(Y0xX+ORIs?bR#XQB?>ij zzZCo-+1fC_oTn@;xbiy?Z0s0YKQy6cBAr0dv+)^**(-sb&r5(*4n?B$SJaN-^jD8^QpH)!>Vr9@j0tYY``ju7WDTGh{ zwB=>9ZX#Pr7HV0=q0DX+cBo7Wz#dA4zd5o3Z=jDfw4>`>5^KohihmQP&!HAOeFo)c1FMeutxq*1$a08pC0h6!6$8*G8Q zK!n;tEu~}F!zyE(5A0YpOV>f3a%0nIYJ17T;>w*VOVg%hcy*OX?)e$h9)&qD+2q$U zx-n8iL))`0^N$r_i`{daQN|mfO20fam(@Un*oHO8i`DF%7I@BSO+Vz@Hk%o@@CSvD z(+bX#OJKitO$&3DHq2R6_9Gv}PdN!au`s|J1)sTJd+ejwY-^FO9j(s;$w^cAz=}wp z(LL+|hwlY0@FcuDM>n!l1vL--8lWIIhHm`SR-6v^`J^y2=`C_jH}bP~qdoUk-gHX! znZOOZjDBEEcS$!gZTH%D*Dl}J+nS*l*D;LQ4_Y&ftUWIT7^rRrZIWeyTiOgdaw-51 zF6-^s^S&R{oMS=s9G%#pX)y(EntOLc!mD7^l6JH_HB4x>O@dVvqj=o4L$ftT_znwS z_^z4wTkNx$_z^&is{U;}HiP^^IrCo_*uFfiA^xPhnnv)$lX+)uX=dksl~p}sm|NJs zREX2^4^4eG3-@yRz-b0(RLWQY!X6-&nx;1|6=u<#n}l7#otuhu&~+y1kXk{1w9MU* z0GYxepKt^#bRsjRDu{Yd2ct-h)6=n>C6uSoP}geczRAHiU7LBw?qUWVHa=Ydzceig zSrJ=76-R9!aNV!Ra&3@v^#9yaQ;5AW>le5HWBH-Okp{ z1<#_i2jVo9WOMT}{i83070ygw8;6aZJMx{ipA{zqPa&{XZMx^!!OC(&9yVAR&x0hZ zX=(3qPO8i9p8(=6iB0STr-TN7&8AEf3#@<^9>DjknT{oRCNiUdg4_seZR=QbWX+>G z)!yX~g=%EycH3d$oDKZg(9A|aD9f+9MQ%EB24OI9-fkvnzK*QbN-#UK01Nr*T%}qEX3r{~ctuQF_ z2grBtKg+xom4>weZON;`I5!hIZ1E(k{loy{2)^9w0>kqpzJ?@i2e{IJ>6rr3Eqf@6~i{=~GEM zAPB=QfAPfR=B30)b|HuSx^oAAh_S6($PJR1o@T(w6;fha%UXkf096^&tyh6l^>nNc zqKusS?w7LT)O0Knef%M@M zL-8%5BtAmLB460h!`RR_kSE0y9oFKWdi><3qa^ZT2Y<9mkT=p178I;qfBx=J7c*aS zNXdPfefoJ!8k|lE2Qvu=_)Rn-$!z;nb}aGexK$koq@TytPgBvGF+xJp(Wmpw9zp3x z9Kw%|Y}KDfho|*j{bPfkP)AdO?+PACY7ZMITIWP#yze)$U^@E)lPspGL4N=0lpy5J z2tc%<>OuZd7pn44ESx`Y*0lG!WfQ6wJkbGTd53>JeSH6TvP2#+GbyzwUHH*Uyo<$h zQi`q_$bHS%|GOtC7396oCRN&^Nejt{=*n|0V4VBV-8AW73)OK>GbQM)T!Wnly{&sP zWdbCXVdBRla?FVuX$_szLY32WOa=eZ!#YPrb4HD?E1R3B>$H8U?Ek&vh`w8pLR%@) zoU6tn39-ifTUN$d=S!cXTLE5Y9Lbncw!B9CI^+xX-GV%|0kkeUkU14L_K8kN!D&&( zZok_BTAUg)qj0)A8!y<_0b6VVd#H+&Bkq!66F3z2&zQOys7Yq;(jqquOVN5SrKjKY zOSt`U7HrzJ1CB}O1$h!}X6F2??)}`$;LVDuQ;>PS4P9{cB!WwNoF+XB7@>0=NgjK1 z2f`t4*9&}s=P}wUqKk5D1#nsr1D00J7F;RzD)c%LFTwM#1~I&W&mHwCNkp|B@I5GG zPBPxO7Vw!((Rt@M1lJY241#c=476Y{_*73iLtOQz^~4*)Ljx6soB(ojk)Q7 zrAEbjcqtnmt?i}{rifa%zRpl7g$F9g6lSYW?YoS$aDHYF`pvWO(p#N;Gbof815b0b zY*r99L-bPQOea-d_GN)*dq_^Lr$TM19E^%h%&Mz6TX*qVLU0u6 z<)^G{{CJcU(fc9JulF-{;T^ZkTE;bdQkh}*Wvw>ftV;@TAPf@I_5<-oE zz1$+93L;t|9HV@r8k&4n-aMYE_pUB&EOgq+vwOlm(H>&}IZBV?Hd77Hatplp)DjI) zO{+4F1E{TSbA}f~KB(Jyz0W6tqqHqwmqh=KrVL$Y~Rkq zLoV&kz~m;?WqK~M=zO%b#?017&F$)n?K-E687%ov{z!tAX&yutu zED!~z@}2wZ`k*f27YicTYcG&2&1E%s7(_gA%@DBDq7fYddTo0enH7pDJDmt7Bt~ta z)MY+I^5p7QFU1^#UcBI+15q5{x;)emyqqrqKc+_p=uQIc7K#fk&K%f;t!YRZ-l4lL zsXR|Qy?&(8Hj$vUt2CrIqLw#an>yGX&0wEW<;nF0?g`R}>ap@Nj70%)H>NAeL6Dt) zOBh9IL7OYnbd_ve)loIv~rJQ!}yO5C%H6I7EZpj!uYTEyLVa*{G`MLwlv-Cpyh%U zEjh2Ft!3@_1F=mFh_caJiNH_Al;vUHI|p`ImZ=4cnii-@@>p)RF{C>W(#OY!qWHT< zaBh`}WuVjrxG*GJOsPg{Y;ToyQO)l_ol63Y~i(nXMJmRQ9x6>~~zw{KkKJLa%>9r!V}w4XHwJGmJcR zDf~Fj$AB59$vE#_8Sa{mcnJg58xk*Kvo@c8P_azcIcWMw^H-x|K(YLVRqtS5Gjs50lDSAt`u77mz?h<@h{d=MR$ zsu;T0w8d{*;QVD@{kcZ@JDpn{DDI{a(rfUup{R(2`Wv2|a9a)&8P9ds`0E#V{Aea8 zVAh>=j3NDj`@3-VfsZ?OGFnUVRk^kHd9;@1IWp!!kO1i?*jk9Bd$*!U@)Dw51R~Vn zGK3|M+|ZH@iebXtU$(JKSlPntxeoFrvO=^FJ$%VUZZU;!KH;BcV_FPFnsNcRw)~5N z2Qhp3;72vrwpmSojh#z@YMeoojdR9WGRHPB5vS9K1^{8R+^JEdD=qubxFJ?d2a)NL zvC=h!o{-e-co0w~O;050Oohl(l|GHKoQc0nre;Gez^l2xTiAH)HN$oSD0GLYrBWb2 zz4|OfWa>GHaR^NQuxgVqW;kK-sUcsLE36~@arJ)}h9a}U;CtRUb&@dA(ve35${vKrEd$ELySJdtqmhH>w#CqxN`-1&h zNB^h93NG5IYzG>N7cKr{@GJ2KUP)||AyXo$KL;b1k;DXg_h@Ww^3d?}=!Yd^%X$|v zhins00SEF}{-;dR0TG*eSaBd2D8|9y`>%hd&NYI*lw*h{Jy7$IQeQ~Y=8izS*24yj zMP5xFc9h|Yc3{#azLpRs@eJ_KKjeblMmu{)V=~2U$VZ-(2=94HBQ*D%FLDadbJ`Om zWyub4RpA=Pc;!J~we-wXNImBWve8{06Wt~EwrR7<4P=ix6{prlA?(g0BIPZ~zLU~K z;U-pDniu!q(W*IiK;MStxMeqQ8LFF|^3jS8mJ!S_Y!!-xvC=J@Z+8mj9m-z;&ox9d zC=@%&_XKo~=z?e8BAGBqr1DBhEbWbH939dk?aENJyoVan*^t|z%hvz%Ey-p~Fh8O- zQG&U|-yby~cb|c9=6?s9&;* zZ2Os{{K1ZVepS?zzp1ehHGuS_{D-!DGDNr`zaXHv2Zw=&b&@-9({AQz^nk81Pl{o! z+YfN5p0eu0T*%%4&yvZ04NB(vQ~n3Z;)l$ZB5atPR?Wzu&~PCV-ucb+!DK{-+O< z;+LViQI3yh8+kko$wR0-(ud@cswU#krf?@qwtdgYBjbpFmSb~AsPT>K$hU@XRDDFy z^zE6vSPI%wYIi}z$LHp*mVB1a&}Y;LVJJau9VJq2V3c{gCD6jF<22PR-WXvvoq87? zzpf(66wVBRh1Ug)w+Vf0G1PCo{m8BwzoC(2ZLghcN)+|2C4L{KJuS>7Nwrke=I7Mp4~?NQ_o_{Bx|TZPNTx#7%Bb} z%9V-W&w&p5%50@GBmXn|LhC0_i4g}AKrhjk8584SKG$BfsA zUNGJtdd+x$==EMI_|bTA=ndm-qBlQ9utIj}F;rwZ_c;=(A^&^|noo?Z}(gJl&3pKX#5_Qczir6Z&^kwX4aL8gC z7TU_+KZQ0M@UN{^znrO%#!s&T*@xJp79uw*_&DJfBXV>7AJ9)0Y%Zub*Pv7Dl6bPT z=dWNq!$&xD)wWZ@(6Kh<b5yb>N*2wY*zv_{3850s180$yorvX6TExz303SIhGsuVagUS@ zfIqY;;p3cUXj@4bQcfW9TU(EdDXE%a`dTRS8}R2gM95AZ>+Zdr8{5YkhYmNL5R{nl@;diZKrMhM_F2&Wd~QpP1_X`;6@^ z)Vq7m0r=KQslWk#JOViAeh2W_P8rm5_!^+RFY_Ckv1L0=d|}T~U-2}1&Z1pT&snj{ z={fuws?~FD(z)%7TIzv+ZNo07=fv{$F=G%r%|hh+yPTdgtRoVx0JPqMLwe5MWLyG~ zALHXQQnpb-sR>Tc*$EpgiIl7O_|>LVo#6DGUF)SGB@CsFn`r5gc0#J2(~nbiKHz0+ zj!Kqxg41(y!wygh8-vqwqM2RLS2+FrzH8ol7u3M~WYP<(x6^K?db{m*s<+Q>r+NqN zcB*$N9r+P0=l41ral>yhYDXS+s)w|*gQ%V=WgRP9@z=^4e4Oas2e=BQ)? zCpy*p;3X+k!Y$zJu(C6%m)|!PetyHZb)E}S4b0_}|J}fRpKlp>f{*7Ebab~fFxUJA zTOVn&Og4d#f%)ba#=tBNw5-Lj2If&X^(<9m04)ig+U*R?EU?5mcKQMs?4&dXW|6+e zPw&qJFyBrY)N}YN{*iBPR~F0F$+pGv+_6}m|9gwYc**x|9w3h{#)CP&=wdvjgkY=@ z@X%3d9>Fqxh%35mpc8-oXo~65MwjDRB(;DQU8xY)ve+4;D;LLQnJlmfqubxODwK)Z zlxGao5uRRu4hPU_^#@Y)nPQrJhTYe63gV)>)URpyCrz&$#BI0H1&j@XrrT!Wwr9`6 zCi=%cWYs5=`I4WepWxXZ-M_&N1C1O}OO2n4Q_SC?jvm4zP`1e#d_3thWm=SdYuXD3 zpE66$!KXY#bMVzT?+iX=>zad)zqcqWPKD)zf33-RXYlo1iOH)qV!K#~eEGaH_>Qjt zJRHzO3l154JPZAl^|c)EI#N1QLfWa$;5%_g2rs|!xgQ_LZA!MO&ft?Bq#@-BBJbIH z{5B=k;H%Yv3kax@xM>zgB_q)qd~L%up%NAZCwZEgorvY3ve;Sk+5%~W*tXMx4viV2 zl=BhGgJrQ(f5aG&Q^8pr%u{<8j5YTz>}09-E`*=`w#S-NQuxw5)lSW@)2(!w)xee0eH4YWcaLt81(#*bs6X@I4mCS+B7dV}zfgdW>yv^pz*GoW7Di zq_5Nu?kk;x`%0_ez7qQ;pa1X}3*%p#7Ti~|b04c3q8nO}d@Z=IEXgLspY)@<1Mf@D z(%`<54z9A7uIN;J%ywY2ubk~G#ahZ-2k2cpbE~h!^)=RN+F79@%)Y`OcT{C40KC*JQ%U*jjG(^qiKhKO*4{fliYjU!zq7kx zXE&RWWRvVBgk;l5U{fgxgd~K}LJkrzc6#r5+KU!O9bXoKB9>pK5=0|HQr34EXLODtC=XINV{BS4i zaFyJ31220^=H7E^z|UR!)NuB@%Bg|5WVETlbhL76=$elGf943$kN!>S(aNcz#=9s# zX)E*?#d)-HYAC>O9t$XHr5;^nYDl3qZ8*g!Z_;58Od{YRZBFIXFq20AIGB7-hqH!B z&Ya4r0dGdKmw)Ksn5*Nk*w@Dp;vBC_c?SIe&QcR^tX z17`2X=%zGezq#IKf<5bAT~^7xq#YTK$Q_>d6+U-seE%9 zhC9e`m7-eITb%B73*6zD${K%7e+kf3%WyM_V4;Ps===|Xk7&G_)|zDzIoGfR&G4Ad zGB(Q*G6-mXLlN$J;#aaTucqm_p4iLJfFGx|n3OH%sN0aSU{%fI)(cGzqGepDNq9qH z)KyIhoJ~zUXPyw_Eh)jVbWZw9QAA1zqLccJ5hBHjSYZyJicG1=&Cwi8i>{PV(>#2> z(X<_%@ZTI&U`A#4vVeA!RJOU~JSFTV zKl3U5qqS(9y(zOXQ;F06u8Yr|%{!=i(*J=RWL`&AkbVcU+nffQe<6F!qsUMCe~^=- z@C!jY4cipRh??O?0fhsNqwvW>x`_h?QA3g3!hxcw0r2a`f#Rro2-M&}Nz}VYqbjY} zP@j&9g*Us>fdYf0o`RW!N6fOQWW)qTCfhzYC#W7{1y32+)IgDIbV!j^>=XvL+lsMoo7b;f1F zOEMv}b`zOV3R+s)bNbW}(wdg;nctb9Z3!(7lx#F53wafBH%voGg@0wJo=mqYdk!t# z4?WusIiwHG?3w4-+Y%U;87@PV5Q_SnN5SpTZuiM;0@6m&@-s7!4ZhOjG>{zwDQ!!R zx?)7ZL2D86U{^(Cj^H@|1=Zr(pa4f1POKg$Mttlc?FrU~H2sj|23)cC!2&hKAq7E# zh87+Ye4X-0X8ptkdPP(-4GD3RQ34~L3!}Nx!EiW8DWJH{Z2h+3fF<9&_%iiH6`p5w z#}-tr!q;e2%>0d`uIf=D+InZuWp90)noJb5k2JRP{rduc^hKL~P^c|Z@+2SfIlhn*ui6q97Kxu_Z0 zgrTiw2s<9=B&^zv4h6(dE;h>hc_AqWp)Bhb`_=@POeFMZh;9q-`xjTa;xan2IYswI zqOQfo;gXu6O)!k6eLQD3`54k zU>bjjH>j#XLQ-#v`W{w~EvbT!qeEsOM>og>2FU8kjXHAyg!|Q|NDc+ye58NyM z2ei|gte#}VmsQ4h!hq49yW%`Oe;Q)?V1y`V^(&R?Cd<%q*Wd`negiNMYE4EsDbao$ zp*&NiIHE~+jFB60WaYA|X{T%=&!6K6Wz4dwX&+rmo^RubaAB3ST0vg_lN?M}@F46# zBVJzEuMzb&Kk1uVB}%)nY2C^DZsiCCUbsiRt>qaZ8YE!7VC$@sn79MtqjWtR)Hw_B zJ%19Du)46RUnrtMGLLK{f=F8zD>>U%VG<3zyk5OQ7ra3V8j&reJ{jb(_A^?JHOOb} zceEU6Fq^fbXr0ht4vXK?GPl7F7F!dXhHfCW%_IyBBVLDSr;Hm$egttl<<_v)PY~}X zyp7!JNwk;HLdLd>kT#0gg{V;kuTkXJ5N{HuMzwx{c%5e7EH9V!``;9imBIzwKsTXT zsa&d#lzUb>1Gxsd(pg(G7FfK-OX_rL0kZpg^Bf z&1RK}<+uR}>R&{+BbK1JPZb(2Cehv28YN&y16oyPH(0-dhU7R}Gh}CDU=rpNNhCLx z%U_jRUUt4*{+ejXklj))e;u^^$!;Z=ztKqBnwP)kV@TVESHETp(iZXJ*ZeHq*<`on zwXgZ`R?@fQrLXzu-z2xk)K+Z%5poB}oz1V)8a%rrP^RY*QGWS)tvSD8ky0 z+I8bqUtt&3OSGzOyc&tE3dA+Ie%1jnSjPrepxw*{W{6v0(CHP*r?Hze?W#6udY)ps zzkt2qX+7Q~m-}j)F@r{kCV6t(UfTt-Xp)~vHeG|7wAfDmpD^rO-m0{31z8m~+#NP) z-Cx?@_mf4wDBfz;v z0^i`vyZn$(%}C25tcv%aaUlCZI=!ew-b8FS6Hc(GXILcsjXVco{%f{Uul$4n8Yr3! z=8CCQhCn$CMH^x$L*77@WSVh@vS6hzA~^~3;ZuStCgO#OCY{Zw;ms@cYb^&%{7%qh zf(ci6U#075aDBfSRs0jQOgYN695NXRmY9+HFFk=aZYQF)UgU*T@v|spQ*$rGl{|ZQIbKq3qb`S=My}HFk5~hr`#Dg&8uCE}_u&fP#V1Tf4Ua<& zuUn<(1qnZdVCD28;Ph#2!-+xluxg|2mD*WcNlZw zhI>Un2B42%b+xxjv`BEk?=;N6$E(J44Qg5|pC&33-R_$GpHM{8DBP6`^E-tk*T!!W z)R&r(Mbl^`U8|(yrhIw8E%NA2Uya*-bIT)iH@*g<}BL^30`hT z6v4iR4%R({E%!-autq_g#Uh@0=03$D-TjEXNWNfBs*0aU_cD!w3i-^dbsQG^U=huO zoPah4+Tx$$6p{OfDGFSuI1qCDGL!HlEn;#H!aCcC3VGQ@#((l4a$lvky}wE1-ezs7 zp-pHWK(?PkIkD384ozmc$L0NRrM9p>X@6h`8+5I*L4rZ)L+&&pgN8f+9C=Z1jyyof zycSc5b1y>v`9-}g$cFyl9*TLwgjOB+(%oHFCf^RD%aBuF@=dP8qnnxBO|sN4>F{n< z4o{umr}&fdCfJCFMDRBO{_Kwl{x%bmJob{|_FvS+3HGtv(2h{^$k|yrR)BUq*J^%C z2PG1=)}=J_5P7&#`7F(txz9m)p$dFa{K}W);7!wQ!+r6{Ib<8B1g+I^^5P@p`Ts~= zhjVRIB}&#Z4+;~aFap%7&OhCiWjNmL_H%@seNGFRj`vE97OI zvg>ie#?AQDq${6thVUu3|5TjvH*=_9AD>$M#HW^j@u^iLXV@l(Pemj7)NV4L+Rx@w zhfRFC?-M?C{Dn`&7_!x7oiRoS*sV0^6nyn30U94v@a->jPMS!I>Voh7f%tv|iANpl zNW2zF;`dSOFnG0k;+>0zsAI+nsI>x^G`t=~|+ z7o0)1)|E9#JPR@4`fWw1&0W37(2RF-n#Xe^5%$7$Ag-YH)I0&Ay&oL{ZY@)UyLsI; zu%5Y|tkd^kvNZd*CpjzY6%4IUQDbf1gg-_Q0W+w53@+T9NipUm8ea;xaEms-Vj+1e zWVOwxGEw+u&8=7@509qXv=73zVv+nT`7hkPmw%HO4E-MHlg-aS{~AN>!30S9Y(E zQS%4jqEMNv`)m=e5M*c0&+wUmU22^Xfr>CW8_=@e?0gushR&Ne6yfK5(PlGPiJ>~LP9dnyWz=Qu&Ijq9#NXNRnj##|!8EZ1P=?(U(W2b3URy0DuCKBz!zd|i zM`*rmu_}Y2QrfTA$4*=;X&J!x=(a;N^R#r}a@t0Hq=;7hEWzHL5(GRKLsz}9_7;-O zVV$TpqtEg$QECWX#2CmXbCbEG_wWL`OUiF}2cBUYs^AHjMeQ=9U2yQLRFl)F9k&aCD9nFllkDUMWzMHN;dY^rgUne4 zqz{AaHmlE&K0M`B^o^I!k?excWWrjyTx$w-K+cT=DFMf#x+oAZZwK{{c8wPpxi(o) znQM+uu1#gG9|e&$6-NoM6a8`^f%rj`{Ywv!SVeaok za)kWx)4#bQ+DFPCKbuqYYhMd9bC7wR$t2oGL3Rt<)0AcV+FMZc))*SvM-Qdk&Dg`R zeGGsIGd^K$?}6+w{{nsNw2dg%ILL93i-bLOqgJm7%N4&x9YwOOH@R&ek9hlI2+zGt z;X0^t+ul+V+tjDbZ9iUAM2Dgs8?|*xRG`P8&sHA=M9(S!fYgMTFjleR3J4Ee`AWns)7r!;w^8`(hVH zJyqE2zJ_1Hs2LW!A=>XpIPEb-bdDYQns(t9zgA_S;$YR$iVD^T3CGZKu1oSOuW8rq zoAanjBY+ZJnVp9S)>)v=YhjU@e zvQw3nMr_tE{bq63AXJ&7P0S&0quS`!{i<5?uMM`q)8ujTFxX%?ed-<_p%(#f(?t&| zd~EY(3?-Q7AJ5|1(VRvOp4cmYC&7<~g-^nX?Nocx&)NsaNOQD`V-awKmg*A==Pjcv zZZ4xPUpRjmH;UC~Nq%k>H;U&l$1ivpjl!({P3{(M+=5XmnYvryqHSByo&6?}e(}yN zST}6GikbfXEm${fqZN7K(!E+Q` z>{mcvVveR`;S13BGtZboHYbQE{0pYAzq&S&!pwKGx>} z`6)h@vgHaszRKPHtnB=oaKvS?ou%q1Tz!ayrSy zfODOnrO|+1lOk>;Z^ITv+xSs9A3w%2`vd{JKL^!bIN%w*I9YDs7sgpWW(yn#) zyiVdSO5e5Kq&EP)&X1(7gN%gvqf(RTntpg2pua$i%C7ad@PaF#!FP(7*DW7@0}WZOg_$VWrcgz6Z;^n4%{feB zOBV`ui57a@TiH>t7ij+O-ulj$dJ(!eyJQrhdz+}&^&)g{=Tn64xs^reo>y6f?(KtK z*Nf1-qh16HU{}z>eqN6pT-bn-)HnwB$SWeb-|}24LXT$gBqv?ipoks?&+@gYMPlN?4nb!_U=OuB>vmf8bj?CP4fv>>+H^@EHu-8ZVBABZq^4YAVy-O- zl1ofDD+!UU)Ha2XmpB)Zy>&BQ+zEplYeUMrBph8UAe6L@5?Ve{H^bKrvYVCMA5RMB zZv5=$Y>l_~oNhDSt2xtpQ#W(Iwt`oWJI&;#SgsE05y+Cxvb#^A!MEgr>u>PPbm9OR z^}GNCt?4$cq&Kp%Eunkk2cn1U;H4fNQzqkGbR0-g@dkdDz%L*ED&FL`sQ4hqqSp38 zlfyr3K(?s(xXX^uzWh~uVrS8gynFMztlrLcXFw9H-f=*)oBhrVz;P$bclc+MS*!^R zWQ`3+XlN#24Sr_vSC_FI!ZP$0wNWsRD_K8*e}p;D`tMn@lI16YAp?WI>Ih*y%TI9H z;1CAx>q|7aQcP?N>Rw zQ>pL^g})k`hT|MAN`024-omo{#qCAb6sAGOR)%(Lgy^rf&&RPhA4kYz8#soEKOZfu z@mK5SLtmS1+=!f2Wl4WIEZZybL_!r95c8= zCh~Du6kj2hv2~tBJ>tP}Kn&;38q?dH(+^s0^cad=@#$!pJ=Z(QH4J6kYKWxSKkCgEFs)=vS{T~jP-lQ)>5-~>$$yfbWv;gaa zS>tu`waf4)vpYd6*asSJqUloklA=ymiB`IEd79B(6qRV$@KiNsQyfL-)as=0GhwBP5zRq<)`k)E9UO1*Oopj@y%L(#v;Lzr z%0K>|_FGZU1`x#tW%!_xqGv^avEUsY^$-SaR(bC0yB#9E$9>pt~$9s_+{Rl6QW2txb zijlWA578Z4FOPgPuFVwE$I3V37PcdOoP0CR>rZk#zZpjrV^E+LqKD^Yi zwW5`I-`bq)5n9;x^>DJdUPAPZW!uCO(#B0k#xZm^+)sM=a;z*J6v zgRr0Z2Jl@kW<=0(krZDu^)F*d=f`{%?O6!j%F(7s(05$0M0Rw8- z<^vs2!$BVyfExM$YUl%~;fxO|0W}Q#zyOr30ovOOfQEg*lNudUrr_gU90-t9kEWw- zG|dd9jZGv5v|>O_ewTo9jv9b+ZdL-y@d1?M11QJ2yAn{&s!Bk48lb|70Q3*%j4V4#%P5!p1pqXJ0X3Vkn*kLJ*{uUAcyhM^sK5tMfe)a9wLX9fGIkq) zT4;cN=?g$}cJl&=jwvevXr%-s)e8V9pP-bsOdv6!AKflyl(us2VL+|_G61!9?=b+i z_5sw|2Tyz0DZ2q^w*(~BI{@g} zieh6$62;_WcZ~>~{lDSB=4L~zKtOPW}2ha>3Kr?>w0W@RS0RzzE8lWpr z0?;AO8Cj%!4?y2bKvMk~0NGnnq9^*27;u;YJ=yUf1De(7pblu({Ra&|vwQ%}@&Pof z>|iCJS^rc5dPW1ZB_DtuIEb8)Maob*C^!%xsqT9aFEFQ5qS;pg=o$l>^OFQL_kaOt z?%7H}bA15K^#L?jIaCQ~?wo@Lp!pi0$3_CsFPt;7NckIp{+58G`YHf5`jK*Z?$LuF zG<5>dg0e#lXkm{-I-rH)4jF(J`T$z!18CuMK7bZRA2I+f(EzQ@0H8+>@h=o~Oqopw z1qT8o)sNEAcKQ+}S{iZ)Pu|u5&@$yC2DJR50cd%Rj|@P|eE==@0kk~+qe?)_w^Rap zK?C$OPaTerkTbGKsZ9q32mFl1>JU2GQs};+bmdC`RLnKB>NyE$^`wtqido7pxGwp-Y?<}+llm2JPyCha!1y+%bS-OjfCVf#AU);&(*8*H0Hcjl!#*fy~t zY2Req5?ard?qu6*n@N0&ZJ!xP25+-%&=C^fVcWIv`!3t2y+*e0v2Fduqn;6;ZHsP`!MAK% z2;1-2_E)+wFFne(GdGa-d$!FjAn_R6PNXTM^aoisOuav{Z5=aZe4K6D|4P~uY`YqM ze`4FEKahBmZC9M4EKafQpEgQ%nr-*P_6*zZ9Zm*k+4iY#NPCWLHzkmGo^5}D?FF`7 z_6&&^*|sO{*?wl*Z>E#@3)|MD&RF^@+deUy#NQ;|pD2q&tBGp^>EY3foS> zg}utQ*E^H=JKKJLlf-LmTLiz?+4crn)D5<6PWR5Gf3R(@=SaK>+W`AP8W08sZa=Ku zB@gtuOCG4*C2zf-WcN7!2|<|1CIb4PHls$26$4|e&*5i-II5U|9{Ivr@FcQ{g`8mS z7f3RH+mkG8@s!!Xx~&ca<8Tu5`L-I*;ED#h@DR>yZ>xww?mvyY<3TYPS~7%fz;OzA z4k77LvL6)B#T!D`Yfu8fTf@C1CZc!&c;Hp^kPA<|*x^I&S;o!eL%PFxUs1pl@fqrt z4i8C(qcTa94qNP}l+qy{KNUUfdRBM%usg!I_j*`&_{kQE@C=2+pUD1U=`i;UiPGWP zKS-1g@vO0EuhPd!# zj~xziH#P2khUgC85ES8Ykd5_ovL7NHeoQ@gh;;bt7o?RA@tCb>sB4DqaH#uJ!{Jcf zVcWkb;CT=Z=ac2PKdiPGWi>13ceOe2TGTwm!9hq`vL7ZL zUdSaA>2ULxBua;PfLS!$g(sNoaJYM^;c&R_uv0EYc>aUKwPZhBI&@Q-;nHC)wX5OM zAs#0djc|?A9gc92SbXq?Hcw?6_#8>wxZX zr2DdQ|2I;1I5*5BMtau3;SRDNDII1sCUfcV?bD={4)LJ2Xp{?2YT4l^cZG4gG)i|^ zmqx)+o@;RUIN6Vq4(C(f9wi;F*+kaTAs(9+mAMA%4$Is@#@$7k?(irLNM)WDUtnG% z`!eY;D4Vp>p+Zq*(jlIa7maqktvej;u5T>HN9ztBTuBk0g>cx2>_kMEhopUsG96#q1qZCoYx${@Ni=1*A?;^kd zFJ2q7!CSYcN#w`srL|VK5(W`Gk+cs01TS6JeXT8BO_ZE2QMaCpNmF=jvi_1x_YAyC z;rwkj-ubzT-5Z>L?ZHbjpFd5dcBa3m5RyOZ14)L-Bx=xY7p3jqcpLKV{}qW{IN$9A zy!-uJ_;)CM_pY1|_+e!}Ju>j_gY)=kdwlKK~3_3SyW)hFY9in6bSN^1xz#|FR3&K2x z;vPwq&oJt}sfb7F;E|4MKH81sBz{*_*qJ7+(-BpODRCw|i|O zj+;oV&!7F!id{_2W)XzyQ=9Vpuqs^HLC|ASk-r_3N&YJK7xh|Ho1IQJ}kw3o75-obJti`dxGK8ej1m*VjrHof#`wLi-i726%! zSFknq`?SBp*4x<{aTXOMLiSy(&VC5TJ%ez>eu}9a>CZvsh7^Ex=!9U&ac=rE(q9Eg@Yn`&P~uJA~NZ zWeaHiRcw>sul~VD?0aBQ<;OEGuH|dT&*Q`Rh+PZ(Io6+JEh-3`>|lHHS4+4t$YZ;v zq>f?rF%r9_o>W9f+)j40(=80f7p2>In#Ee-!Q4jW^(#XBHART&^fz&nGN=dj3c54? z@4x>lx*hH*#A_6&GihU%5Ldu>txT#%i_c72jkR=k8$yH9I1qNeru3!(V&~(W4u2KV zdkL>PNk060LdZX5h5Ee@RiJx7I`4ykMr)d1;@WR3?FHk z1{#@e``(8t%RTx*-f}^@7%XzJNz2z{@s^e@*hmNMDf*8X{If~y`A#d?Y${m&iPdYa z@Yw%fHJ1x2wn4|hW>UQ%(2hB#0a~R4!ln_QOpvxEhV9W~|4%i&wrWkUty z--!)cE^$UKjvuO5ZOD%n^c_ZqttKW;sNM!1{o()ET|#dIuBvUo_5aoeuzAJM3Dv7^ z$6Y}E!i+W$jr}U_)6(p>xDUQBngl*h~%LpU*ZvQV_d9gM{H{dliED`e4jDYA;R zqUk}cXuFI`Z-I?3u8*%?mgztGFvHdB+jop`r2nI}h8EcN;@n+HUe}Z0#VsufXv(<& z*au_I`05QP;`slu^@ZMmWJMSaNCxj}KrOJ9M#Wvg?mOLM2;t%t}E#DfF1HLy-@w^In=hV0f1wXy1UJ$(o;NY*KPz zoV1HH>@J+RtC>BeH?w#U#M|i>Y~Q%*H3DtwPg;%q`KE7;fF~X`@_mJN9l+540NK8w zd8ui5fwuf7AC`W0_v#KGce7`6sGmsW%?oCb^`f7&dVrx%#llm6YRd1?dHuNR6$0&k z`gg$vSL|Fk{E9-yeI1H?Sk?d=x zy!yzUa_WEXcw@C8O?EsjR4hAQx#l&7OUZJJ>_=Ctnmu=0!SY<1AuDF}{G0#^r6DOf*G8&($6GSW1i(k(cx)na0m zVI>_t_nH;)4xOX59BUalLc5p#U2wsze+L{MqtMUvUt{%P!L85mtT?gZK|0b5JE4e( zGeZ13R(g#wyh2;=j8AgcG3nlQ=Cr&*(Vb}_b!Ke!y6t*KYv`eKZt5!>?1Q#rZ1t*o z;Y?*!eOk4uupOFDRbd}AzMOk=g?LtTRL5|1@{G?oBR!s14)65wcwRBanvpcFnl4ic z<*ZgGd#a2z>F{>_B}F7teEHbwwGC}1{k!0TYkLkH7LlsQ+3K|o&suFG&C|6N@g$wQ z-c{SsF7-|Bfu) zPN#ntQZnv$`cZQpQ+>&B^xVBRYSNYr+Hyl%GRRQ%B|{>!)1N0dfB52)g!K7vKlmN$ z|L18g8&iEQgEp1^UFRi8*OhbfqU3@E{(K`s>m$!kOipqqwk&*<`>wKijd0!Exi{$$* zztB4A-vuwY%AZ}(u%Du?mqjuEl*u%&8EK%ManYyindiS%;a<~#mIf`{yGPINoGd!$ zrgl=k->IRUPH4}Pkx5Jbm604;&(GD+N^~*m9u2KT7pH#BtCZsYxUSZC^=%DZixTRe z*GE-v?%jU&X`*@BeOaE-z_Gi={!!H@fR#U2P5_ndh9>}5|0)xJY(~_Jdki396Qz6e zXYDeVqXVbI)en1Vy+`L)M^zuRp*>IkE~Mm91{>H-8dbf=b@=6f9%aUAD=%$*q%FMu z_w^C;=NjvyKr<8M=OfRW=M=Go&b>!fzlDW%J^j1j1&y-w7ws|^(XH$! z6u31~rYSYjKzsfd?J~dUvp%ZvHku&Mf(|k_-5?{|uNtxnG8}-5QKR=`T%~Zax}732 z$YQgWNn0ZmXq(f&>xKsGjs`4|H~Z*BQ3HPU8EAbL^GG&gxFVkV6&svapAn#a4vyi1 zyY^^Y^VJmE@vF}@XRQ8@^A0QNNU)=cB7UUvl#$iD4YZfwat4V44DtHXqe@#ouNb`mTOl4DAzgGeTzvN1|GL$o z9Og5t{LB+nzsk=%K@IeUzZ+voP(wwI_5~srTS)v)8GJmV`l1%ve}B_j$y9wUV5U|T zdr64JntcPq9$N6y-`%P<=&j11f5eS`kgjs!UB#Sx>0W&IZlxhJ;=?mahguIgpaqLX zd@EWHZKJ?n!>i9&(C*Ul?9(Qw_)kU(af-Bon*DEvJ+#r6eWn>>@T+mcFY+N{s2+ zg-ewdsGfAB8gf(-v*?^Zta^unb{YM<;04vw^@>(KD)oc+C~$MAOw-0l1MLMJ%T3>D z@gaR$Syc;P{n5yFmp5qJT&=R4E|HU@mnTW8)zbZ1DzBC*bLl0TG}EAG5kY2;cC@MTqN?wfsd1V=~b=f@Y9RWsEH&kK3BvCbe=b~`lt!* zA^La01eXxez52vvuh3>|p4jvd)psIw&lECms5xn5IDxj??{^IaWunH` z>7|@n4h&o6z(CXXbqwL9lw`#3KGTgzhnL?Y6tR%bH;2f4@{N3;eS!X6NXdo5zOMU* zRG+qO*Z$XCT=j*rcAKCtl(qYW|7oEd{~}$+6!Kg)r20?>ZIf$NR;)!LejwTRCT)~v zf4^Z5?U3sBiKPQcm_X_!*R(o$QBG@AbF)x$ayFi|oofo|Z{4OLkIuUW%N+U`IY9dz z{k!0gO5vK$=VI40*R9ClWRVcsLyRLl26K@d&cWDD-W)|f`T@g{$1y;X+y); zAmSm-!ok&N7HCVZYsGy{|A{__ZWP-LuKr`!jO%1U{quG6><-6ZONv#*J!oShR^Q)!Bj4wuxbjorSB7|2Omk$%V(Ustb=}`od$YLb5gql;FAL z<8*7+0$U${JFxn-tM!M^ZpL(B%7vpXa^{N8rP(8&4Bi`9{oV=M_J35HJ>sL1g&0ZN zg_?b`VGr#ix_twE@iC^p5GzUBQL}Gt*h9PVk18WPjo}T+{xj14Ra(8rLHom9_9-+D z{7c$TORN990ImPcOnqfk98K3PPH+kC?(P;mxVt+9m!QGjH8=zh?(QzZGr-^)2yVe0 z?hMcSt#yC&sp_h8_TF`>nC@X(DmWt}1Hx-u32fl4ZzYg@th2RRm8&wv#r4(hddlB^ z^ftwwJrN7fh0}lfpk=2Ahi+@k2dpdL5;1U%$b>a(aVFjNs z5W@}p`GBbS&z)}8^yb6Ok5te~&-b1eeL{SW1w1SGMC4>+%Y<&5u_BgWGz~tH}693$6P2wtKBT@uQY;r;|-( z&|Xu+1o`UlO9iWSfrG1l$foT1g!-62oek}6WzTG=N3dgF?ebIQsg0YpszSusOU0Y` z^_YXho6>X7@q>5%t4uQE*os~dukM%R(B?QCs>#kQB$rI6_LqtTZNO`_`KXWl;9A~E z(c$*Ux+PlmU9IhH6mK1jjrb92fQ|N+)%?s!b6N5;28<#rt zrf!}q0;|$JkFoMmGWxX1URY+I^-0TV9^j9f=jxWnNcm5=V%RMji`OlWUDJnJkx!QT|BU?OMpDFYZ^IYrK}0kFD>(Ui zFQCeGnr_?Z4$(B5Ld#itYap^qcrFsR(o6NdHy-w95uG$Hz|fA!hTv;J*-JaFaASy`#80~zskUY>mxIxanifN{gm|t&X#UJ#4OQtS$M5sk_uV3#RVrqNpWKD`zxJTPB9zqb(_|-1NO23H|@_}eXPx6^Gna@O_}W8$Ll8hng|il zO)n*udF6_?t(lnLUYVlrf_u(b(Qy-d=jPh7LX8UN=1S5qu1^Bg>1X);6&+r?=H{fV z7@`jza2A=uv@BJ#VH(GuV@gZn>=j(&kqtj_S2z8EZonCDYDs=!&iKgkFUD##K_l5* zjFn?FMRtDf(zv?WOy-}>Ygxy~CIM2Z{rt`>=B8cnw@0p3dfbGMTX@Na7#D_3+4%(F zHvwF&uFb#lSL(?Wcl4sgV!yq1MK@_*1lu8xNM1cJV_#+sv3(qUKEy7%#~djdXUDLF zSE3<*_~v{zZLFX4344m}<8?=q$CSrU)yVSAI<9HBh*W-KI9^SKDbcvUBC<3)P8Z5Q zV2kA7KU@t73;wlFe_`xWN)t7zpkt;h7l@B1pqiYMdMkawgDlLyyU&q1YFbSlahHAL z`k3RHHbz6p?GZT(WMs~hfg`*BnW}L3D@zskMUJ_;;KSS+=s!(_{}xj*_0Tc}aO^zL z@TOlw8zZDr)PFu_?pNDX4-<~(Y+@HwZE|QkI=ndL9krf*yR_2UIAA!I&rPKa_eyH0 zk7O%FulSn9(okgFCQAiy(sIw6MAXN={Pml`N&MhWx*kFB7&zcj^pC}UDHL$-)U{i+Qio8m zDUulS-hgV+ijs}~_=2=-K1dVl|0br?q71K9K$d9w3$%*}Pp~?J{;WVmS7-iFTm%U| z`b4Mx;lU+;DPHlzi>-715V+K^gw(xj1Uqy##6pFff{1<>KsaX-gMeXO^4GvV;#lZJ zN=+c2UT0WtzIAYu0V2UDvLFxnwJT%g=&Ay^7NgdpVv+`qqh>Hc&HDn@P>z@ZmA+Ds zP+&{|ueAy;1>hInOE~zJ_jW(niQ3i^5Nj>yHckg{OdOVda=UUy9fB#!@%{l>zUh^I z&E*-Af2FDsp@;E5eQ4FCx~JgH7`k@bK~VGY7HcHS5yVFpW?w#MMO7$YyD{9ZblJJH z#bzap$aP#>vpd*cE5vK=`ln#ypcJrmO{+elP3ilJUyVdqt+Q%!H$ZmMZ{mk36I=%$ z;*Jxu6w?2Q6?5Mq9tR`z3k8vvd#6=W9xf-i4lP6viJ)=K6UcPO)Lh{=wUnsiFj7Y< z!8qbrwD;M%&8mI43}KaFdF=(lmSA8>YYc}yJX`1nUjMH;ok`+L_HQ~Kte^jG&vjtv zyIu|uBFVy90|M|l^PrXT|3;V76S>OvR7F$|)W`k}xT(`EQ~2ccHvTz%08aedQ+=~g zh@J@+Ot9Azz9d`_*@iz(;W*62Yt5|;bg{&A)#`gtD2j2f~XP2^pzAn5{G zAyM6m40w`<=Q5S_!lZMEN1wr%; zR;+6$1Q!YrAO`C2BfT?59}>J3&9jFFwM!gu+MCe3pX4b%j)3q4g&k!)lZM}GL5fi* zFc}L<9_7f@%uFQ-Aqk^E2|x)$0G>itZWNS_Iz4ka zND>cX&a2C3h^~_yhD_ak(DMbOE#vhmp2?uwqV?ZxkK)ZJi zLL;ZKsk923wO+I#9C=6+U7{2sDaI3BXhRYKPsI>&MvDopNb#0{1e)XQnzuW* z2G#%Upxk|&FAb=a3t*fU%G9Wqq#?Xvr0tW(^2B=b9nqrr%l3U>FSIN6Vi3zGiFV*? za(_BX7xRVW0AUS4YQ6(cX+W&{()!#&)zzLm4@FYgLJaDy5pW{PB|J<75)x#Hgfc*h z9N%&WGF3Db#a&%^;Aw$rxzKT7$0x35MMgd5vQ>$Gea7zy$Ldzq^!BhYL^23`TJ9*s znk9~C4hH)3t`1PD6WqUO7fU#_RaztVMk+_KK^WgqG_Ik+`;?1NgdmLU{+`H&ey@QL zMC5OPNOI;Z>$abE(!}BX^7ISCZl^3IcAo5po$|BIl?s<6I1LDFVnRfFjst9B>m(yL zHua!ciIvuwhda8h(?i<5w&#edqZ@V96HY3sTNzcb1T`NJ{zFijt; zQ;!0^`8BYgVmv`x4FjWBRnmb5G$!3n`R|}Hos#@PZLxz^lRQ;U%0wAD#h6(MgxS80 z!~-q3woe1el6yZ&QoH3AxAPY&OA@O%Tsn6wM|sd&1s4=i1ARcHQ6@>?Bb-a8`O8Ph zt|>L2pJv;)qg(DWu-msXBvqjx$Rs6_won96S&%T08?{O~*wbvMEzChAyPKNeW;&@J zW=UACK<1d>Ceid9$QHS3H@wkgm(IM>JI*%TUtx}oeIkSz-1doqf8Ds#*6_I!eA#|I znE_@ibQ`6o5Pn-m+xqa(DU0lyBa};L(L)gyVf)g*5p(_@a}3drB}Bz`&&^1^zm3

#t7!ubF#e%_jZPF4%MwKh8@Wo1r1ni19>ik` zo%>sC?Mw$q1(AafavPrVdT*DlgqYkXbM$0#_@}CfZ&mRnFTd(heANvf>ZEgS? z#FY@JhcTbE9z=Tqb^T%w3aDbD{#FMj)Rcg7rghMCL9v9WhZyA9Z4%uFp+7Ua);MA&ka0*>7)<#t2uPT>?X z7=^tdFA$b1KE1bq2NXT5v>QeM>f9!iUIv4rElY5_1UIk;fdKv>H#kVYhJcz$r;8zx zth%&}!EG4p@?1~-ovp*{p>T`hw#F;Ci z!QVBQ_AL|hsoc|uQBn?N(VmGWU7_galD!Aq(ZL0!4LY4{GBuvccN)$NGLY>w$>*T9 zS?@db7Iv3lxGHDd4_d|=Dg>==UDRvnGiNtu+WacctwT^Lz$`pN1QAsJ&qK+NzeN4 z|0+Hq_SU-~-B}fe&2eB`{M>l7Q3{`Rj)E-y6D>!F;+M~L9W?vT9RXITNbBZvI22kE zK)Q>rpb8#qkN<{;&s5ZA>6eY@*g}3_IB@me0fCy9MI+*SGM26A*hSFy9cXG=k(7c! zQ(#3&IK`L$Dd5Ua9!DVvXap@6A(5&ga4&ke1zkL-jEQ(JS$*^c8J2{iAmLs?{DD9v<2P`1gQP~{@Sj@- zWN|VatXt8>wkxJwdi)=O6qdUPLX{3s^fq+y1i(2Qibl2aQIzj%c!bOWCHe@OnVVYX z7;yDl5@fNwP8(!#HXN*E(Z-qOALQb{KG1SwQF3(D!YXpU`6)v;_GGwT2E%IaU-zI;rmNw=|VUWVb_*alu!41TpVG7yov{m4Ni2t3EIo z#Rm%)&A{3@_{rf@e%Budmm+MG4q4m_2m7~h15&vSZ@iBYE+vSUp#b?hhywsWE*iiq z0qInx`4UsmCqZ?M5g<#K5~Y&a3e?ZqT_`~IZNwZOB)|ehd&9$b;*SHy9EryPh^>&8 zWoRh{!Ybh`X)1kqwwk1#l>eLR=N@RfNu49&hF^gkP3^0J9H8kES3Mua#+1u64n-}V zBrz4GzY0>@gDz&`2`&g^1XjTP(QQNouQD=)XlH@)NzEhTd2;axwObqNlzIXzl_>9t zWD30T`)_b57cmS4v3Efn8}Q@zikOHx;?+l2|IL<{k+?31S?!4UE(g-mH{k>HI28(_ zjAVCmt2~{$?dKzv5-$oAI(6TCg^M5#YQgUXfuz8Sg(%7YTPQLG$>YyIH>BYtL9Rb) zLe&byApOcby^W|OGV7-UIn2$eQ}BgVtnNiKFA74TtW+vH;{Hq7Dpg8O;J_p(mK9&c zDmIcUU#Lb5(xvP!N&<7dYEn-iMOU{OnXb_{fATVjdm zl%w^@7ErXKsXi#UwSl=ztb26{2bjNcYL8^Aa(?`73EwSh3oLipog&zJ(yoGVo^akR z&$~r^w=D0L z2S)`YS`Jb@QofV_cz5XscfJmRZSFgyay>XjrOV(HalR|oeOFBM9+V3X>h1%(8@;;+ zSiR%E>kF`auP1v26f&{A!=%5%FuucRzQcIFTY`76oOiJQ6ujGw(CTquK7A0QS##$+ zRvu_Ob;JfWoCyX!`}RxnJV%n#A%phW(f$;~qkt+T4`rC3qCWAXeLkF`?1;*DCIwKX zJeve5c2IV5e^VlZfNTDSm@E*NW!|sXr8Sixgq%_$Llh&?&!2H7+*^WWC zJM^7tT0_qdwg5L}Z9Y(6ha0$lhz@d?C07rzY7<@{wrX?2L*)cxP5tXa1{aB_VklYU zU_c203tNDKcD2`(X-Vfm8~Hd8+&bs_5$r(^uB(G7OTd&jhJ)@AH|ridMuk0RAcmVy z4x=<5KxMInO2|Sws*^G;^b~oS7-8GSA~BD1b{v025ZDhzNPd}onHNmDA__)>K1?hZ zBkX|s$Q6OI?urtD;tmq!aPWW+_D}(PNPtIxQY=vd=kWKaQqcZyJX=YPR0oKM=kjl& zB07jf792wbQrMIP7N=WN-7(12`m60~bQUao;tH7vRLFzT(!fb!0+Tix$`$Uht#;2i zXH*M(>hV`l7#w=3QleiSUMEg3-*K!1U_YVaX$2&0IN||L2A>2+&}^4 z$jnv+S3RU7g8(=T%x5Wqb7$u+izyc~1a*A}=F@n^*bw}Pg{N9F<0*m7{Ss=18e}qrixKT7Y+Dre{8iG^~R@2PYv$_b8))(IG>(qNJeDm7`+tGsB}zs-SEmdnZ^uJmFU5OVy~xQ>@hhi!%Rb`{sWY!jRL|VW}Cb@i74~M zia=vcOAAjFnREKcbu6`F+h3MlSs`-@dV@*BBeOF#T-WrDj85S2S~1HWi@WTZ+Q(UM zf_=3L>y7jU^}tfDf{d6?Q|#CgX7QI;X3>blOQ$wL1%g=SS*6tBO)A&!%8YI|D%X(8 zc5aXbmuaoJzOJ9D*K)1;XeLf=I2&t>9F+yD*S3^y-2QwG5uA4wX+?D|_3rq}PwmMt zj-Ne~yw;H+I6u5r&a$WE&hA+e)2?p#U2r~Bqkb8|f^=$iVT5N;;-?A|su>c^#Z8GU zTMPf*q>2JfeOQLPIQ!^GOCKI#bU$s2B_j)tQwU+Urvj^%y>R}h*>DSihBBz0q{W2Z zGJ@k;FS{F6DqI@Bqj@=l4CIuCp|G3AF7GHLLYssIBk5b+-|CX+ zqt-~-`Ty!S3#jtUWS0ZNeM>#769dK((W>Ki{zW$*sz;VQP+xeVT0bK1l{^e0Ad<{d zBU4wEc%}<6%mvv03|NqPt4R|EedWvCIQ_Dx-LO-~o_}a~SS|5Ps*zN3cX0_TY)fK} zZH8UkkU7D$B8`aJm4`rl*TQBh23H?6>c{+pDT@UoBQ_yzvRojzSrfgA`>J(zST@!q zM~fs+DCS0}nxSumN0J-mIZ5pkkLHuX+INe4=Bot98kubcQmK-(2V7q5 zAy3Hhf>QMd2VX>|ke51Ae&6pW^;h*az+sJ3=m@W_PDcg_OP#&nt7;et#uy4k7eaF! z0Sjr-R1GAq+0~`$CrW8Q-`$l1Qx*wW@UxWQI}PYTaFRprMvl#lCz^BZ z{B&a&)QcZFMk;v-`FN2OOdr0f{9{v@3iNi0fq(_0=yUs@T_T1~{(sOfE_*a{#0^VW zdOoP+N_EZ|7uQ-yMh-4QjL&KRh2Oj3QL1<>cNXe_Q`tl1wKIl}ggQB)B-m1&&NwXl zTT3_-37n)-su;Lm6~ll0gYuGJghHP|w+TSA(CsP7qcfgUPN_YF_xOp|oA#xwfEL+| z(%*a&&FKW57KiLowZjylh7&sJa`#1a)ZZ&agb(2dwEq#Vm!~Uqc#EYQ9^>W#TIc|p z(>46!u0hM}B>u@usOiPTOHksAqkSomUi1K0JlWit#7?AWgZRg9Jzpqvq3q^+7&0%^ zp|A63c@Qw?qWR$jm24heOZXp_&&i6>E{X)9O!sRce*|=e@tR(62VU*LkqG|-l}=gy zp|%5y5YqvmXA^=OKtIqR7(?^Dg`Kefv4hwLJzvvd4t9fI8-276v|l<9G{WPHvc=_+ z-xm(T!$HMb21U&!Ko5hPtNMd5347q2E5^mT?Cl5jN0d6hF2%Mcf?dGB(4c^jL-ZKq2wLFZ6iVRU|NO!K5sCsm9t4DnBtgGN4v`s>G-LO?~JaBvibreQm290AHSMAaO|CW9E7#2IagQsMNxYIeo?Oh@~NY zTsux(JBJ$Uj2$>`YWOiT0mYnOciU3q9?f&#Kn?-&%%%sx zZ%x2`2}-%J3~A(_;09W_9rC%E_%3fbehjTqk%9H_lq`nf8G#qLpY4C4O3b_{4)MW> z!TYeTTp!6wOhEz3%bAI(0eJH=9g#-GXdeFq`B6&p8cz4kOC4*4;7ChN0Z(5z@raH? zJ`$c5bFxg(ukg%%&}SnFRvppV+lni1Z*p&L4fo;tghhC&bG-E7b;`w?B}^G<<)4iy zeIAbHKbs2*VP@UI(qj0BrW0OaW^E)F?;glJEw{gO<3YZ9FMN3mRe$DU&M$0EZG^kc zY=h=1WqntG;mX8zV28;)<)+v}!#B}Z$q(xb!iMlKS8ykEr z`QPbv@tG_m3fkJU-@cgU)*SQKnrbkjw{J>%9X{IpfCr{mCqUgvDET!&)I%ri$XG8_ z=x5=Oys=5;#M?PuSY}OrGKlsYF0%X6y|mSI7>jo9XGLyYHq%6Kj}{psb{N}~mFgs# z?RVT(Gb}bYJ8R3$S{*^L|A8nTS<-4H+UkN;Ea?fW3sVmdby$Z%Uk#r=6Q$kzW7v;~ zC29|j;;}b>T&`90&P^8S@5Y}_$`vGqQ04>dZ*&u?Np3V))Qkg<81>iV%a2JToCt+) zP7~M+*e;c9cq%dR>0~Y%3Eg4K5!^p1BQPfQdqQO9WrQhwFOX{mLe6GOk&KGr|3y)9KkWl>B!)1%EL*p=YwD{sfF;bm;A3ra z^RmmGHh4wcA};D@t2O@eW3PrA>t*0>MrK|hzoG`V2QAg}LOi8Z>enPk7EkO1ik;gu zTwiwp>zTWN{On23Oyp^UX;aDiUL~BtX8chFnzw8nnr1^jcCuCYX;+x^2qgu}f1>FaRw zZP3Q2ucY61>mj;1eZ*p~Z~bq1|MG1d$C1MS;&gU|tu48sC+;JsbMDbk8$}v3bK}~# z++an5Szd{<|B5?HJDN`LVRm2gwiAh8G*Mn~iw1bo0y7RZ&fTfF^;+xN?%SiYZmE~q zj47cpr7+;;U=mZ4g)_s%=fLqbs;Vl1F=9?lHXKLy^S%s@7gk+lzzAhw#UvV3p0s48 zONOPS*5WD}XOol77e<7YDWQf4MIZ&`&8I6A(`q+ebyM44I5tT$k5fX$)#_@5x0k=z zR#lw7J6caNh8(>dE(BT54cu2qSQHuw&j9fLG_vU}1van<>pWP57OQw4Z-#66O^!g z0EIygW6C9Yh4C&7l}^G|oZ(MT#3siR%ooH8`K|4*3vq@Ot}19cg?Ps} zyPGF7#eOpnT*5R>XIE&uc!^QTc-eh!P+6B&YlMtZ)vA%cJiz1X7-0>?&5{)9B98zGh0 zohs%v-FGtA8klYaLp+O@zQ!_~`ENM$97T*FT0J#CF48!fjusD4;iNSBzDBLBWaf6Ve|8)gZ2q+#5y^Kl3^nD8ehY(Nned|CM!JmM+ebc{}I>fkE z=I{BN+&^h8nh=o?>b5z9;NB6A$mvp7eSwu<4}OOSrt(x@?^zI}glPIl8!=-a4T5J{ zsql7A$4u;@5k}loO}5z(XqeOU4-#S2r{&mg1QANE4y6wd@HMG3K2rA&cp>0e%G52< z_RrE|GU?OzNAF-(c`F5T?_*3luH$sK@t$aXjt!rpOGhF!DD}l#1lWZfr=UE282Hi8 zKh=~m9bzW%7S?!1JmaeTA@~bN6Iw?}#|yIG-xb(!EzhzG7TbYQDfYxG6rS(nl0af> zjqR-=?1xVw2SAsJuy2p(M{xM*4fzwT+w)Wi!!c78KZf&LrGtgHTZT|0(;7|bF=HoF zO@Mqb>!cOt*1!7|ir16EN0L}iW4b$9vWdTWR!0>W*14Ssedf(U>GIi}3HLY-km1D& zF&UP-Q`i>A0^k&tBoH>gUA@c{4SRCfgTBa3fZVQ|E+!jSNp!Erd z;b#~*I){vB@d!Zs`SWj1dr6q2wkd9(@=YZremTllgV+8YZs46uGPt|$qr5}HjK$9u zRJq09$=I!v_b0?)=oiMswfqxVLSdKETgp{tJ?Wv|;nb{U1ojn;NQrTcz4fw8FYMc6 zv)>7zT~fSU`Pe4LO%?RxOEnsG$vnNnm0WLefc?P=wZ3wb4P`ykHSe`C8@t6&E%13% z`r6cdYc}Q8Fo0QSQRhCoKaFO)mVfk)yuC&a+vk`7wt8pvM_np@CjqS==>9byZws%k znpEBUHMGP|$_`I9KX%Mwt{Al6VOB6^w7LX_McxV=a)wsJsX>uCCgqd27^7=l*qe(@ zfIyaV^2Dc}Dv7iC^5~LXIn~%rEvStMj4XB(C23I}%LEJ|{I96H(cGB~WOpxohMnPD zA{^;_d(~LbU!`pDvA~WGhG1O#|kmY+FK;0gVR!y4n?~p zTooyEEJgB`hw%~@SgC%J_&yr|C@U)pR)X#5=Q{_>DOAC>S#dicsK6z~gkWQE{Vi7fBaH)BI{;(Mr-^Yf12 zebo!7cx;h)8#1mS^0YKB*eK+|DHN|qR|rE@052lFshBSTk8{AphqXZSU)T;h=B$%d zVJ#n>gQz9`bt8srC7EO+dLcbICPo{Ce3I(pUYUdbLQzVf7Sofu4J?ab7u@pEwi|Dz zH%7x+Zp^I3TdXI6JpMQKCjyL!RPKGp2;AnZHqi>f0(6sZ^)&DA_A)(A$jscm_aex-kybA+zkQ z$?ZjAPlnLZ!{l-ZkhP%o^Zu0c6l=EvNyxui`+MH$B`#w>-)DY-_4*k80PS)=P99*$ znzWHQ=KSfs=S0Ny0MQU5&*HD`tM-dpqvhaPp@fSvmtz{8-t&GPjb{Znk^Yj5n;YJ3_bUW2k9ddpc6~AA~KYtqY@(wRibM1Z>c?C)X z?xC#kb#b{hn-ZP52A%c0TN&?-?PHPH<)??AW&PcmVp>)XdRCb9cr;#Kj^HMJ8tYHc zIL|4{qF-!Zk@4#$yslNRwKSXpZ7YqZ`UOpDXKa$og(2r<^$pvvG$Vh-Z9=g<{R#GE z0o-kRs0WN3gp$j?L3Z>Go~tsqqJZfpyA!xaHp;$GX|Ud_$9PBB9e+0LRJf5= z@v|+h=}I3-Xv4_~J)$XmYhm@zGJb2Sbp3KooN61Kot5UFeL#pj{J^jMP!He@Vd zyLoEn;`&V$|7rHGk2vR$(#sFS;c*OH75c3wB&$s}==>)+sMd#|X6TJ98$Dn2{EyT@ z6}6ZqYJF`~bK8UveyW%UwcEQJd-=Ve^1tv)6ugmf3`Fs;E5lU@I_gzn^xsTVGa=S- zkbZ^l!dB_z|Kbnf)+%;~V0_0LRPY;Gd_Sc2`2!1P<9&tD366%tnxIkts0iUqB}LPl zV*>Zg47{5gnl3yb1VYFF>gQ*g>4Cb-!Q9!hv(f?qr%Fp-ZJzM%Y3!!Q{yWG=xIjUk z107jghE|^hdCWK=pk0yK&yq0dH2a`zfS?x~-pkoyaU9_VfL3b7-HD?lDR;qp2jwUn zzq{b_^Ty8fMt>W+bN|bk(MLX{{M0+Bv|m7$EzZ0Cw=$OBOK5cj9Ta6gYgCWwQDvuBni9n1?X}*t4#dxkpbLg0uY*e^J9KQ zLF%hi91qWZ)@N z>TWLw@41gF@?-71`SYut23JKm*6_74zUf143iDfP!)|XbDrZy3=pT$dGv|=ca{=8c z*4CvM4<*HbiKk|X<9Lpy-vtlT3tBkUUya{#t*iqicA{FE=F1F!?vq_4C53Cvt7R-& zJhnVI*l)H71+3d+IXtz5*x9u>F}ib8uG~6IX!16Fz+;pIYUtGrt|@HZ#_5KSe6I~Q zgHClR)aW_gG(?FDN8NeLsOIupeHE7Q!B6_)kX+*Qgm8qRy=L5u(DRhCW z)^`<60B?n->`p%sv&W&B%Mm&_lcA}0!yR_K)qxiX5DwoH)R*@~*lh6(kZ^rbk3bTU z*GWV@io>j?spECD|7BOClg(Nc_wg+ibfm06{9Z(zQ316v(4%1f)H0h0{WP-FQ;qfO z+TmB!W`*zSAqC^+tyF{6Q_G+7tkYG;?IOOp)^(bO!B!OC_)I$Z^sq(f&FBlkwhIY> zPJq}DY1hHD#oAYAX@&jY8SdQGdWP!7UmkA$c$aDcc*9wS7dRPV8;I6^%|sn`L*nUT zraY;Dj)tFV@kW5V~ z0;Lkbpj!zyo-3o&wWdb2bH_gMa7)V$UPS^zPd6VE)o}`0f^aG&Q)PcRt&L)$-_N!o zDiitT#}cNtC4XCeCXE&6HCh^7!s!-Gq0?+$@Y(zl=-B7soOb{VpoXYP<1*uKql`v& zpjN-Av?@N*P3`~cT+7AY#H=ALsu^K>mhT|gHnoyjuAYBnQrbeaRtRf#6r}QS0!$0> zfi(xPS9}p`1|94Uw>In(FcObWRX%MgI|#JpY4EDQANOqM`k5y=)Qv-rTmwM$7xsRp zm2;Js9qnvX$8imHVl~q0vYu)l;08}CQBYLJjOw_n75Ff+=Fo*N#k{p<2Cs{lW(H(5-%mJh>s z16*I5$9S8*eSHC(H+*Gdopo~->C1Nzf?G$Tz9|WLGIZk1Mk{!2u;3{P@#z9g?xIx? zrqzM+s2!1EWh-jjSumAyxYbf&nk5rlVJMMJKiB^$$+qMSZC(YO0%Fr*mT=o#k>3WC58lWz{Kiny++0Kwn` zApE=Nymlt)*$@WJKRVG;d8ijn(Bch|&OS&8dhUQ(@o@GtSC|w5!1J(}ss^ToJkd#) zuRw6Mh!usg&h`6!kKtXBNH;xnfNw>h=^Y`HOmM1t@$}&$UQ=U+(EHGLgh@8hk5Ykj z6QYt+H_tK3NC-+4>fYCpN(h4nF-CbcbN)6)Haa{J=o{^^H75AGBIo&$I0nTn7~cBh z+{3NCUknSeUS$GY?Z0xkiPxmFGW&uc;yQ5wZqB7{YJTzcF!@i}e4ra?;ai!!Nq0U# zD6cF?jocHjxs+Rlul>3(`$&rd60Iox@sbnhZGcb$^M$`noxMjRs3$%yiCzK$-qVt| ztsL+rWhgR4pI-ppf@Sfzu!wyGvagmRGGyfAZa)8Inyb%r=3bubLU7B?cGPH@J0hx+ zC1KW`qSEG3-aSnC+WgklVu0F$nX{bk8~rVT<22oIoiW3e-+M$CdZE;fAO&% z4V{d4K&6D^r`^DC?Ih=q{}S$(T@Hk8Ofv2*$>PC#gY^0KYwoiqxrvZq28HDBW)1J* z5)MQ|-lm2E$PKaZkq>@IsGX7DBpD`O7ge&3AdO9Y9Y5cw^9h}6i!7oYjRuBTBi@w1 zqDRR4-$WU$v47gCw7$QayyVgFJZYeJ4++%HPs?i$$#xmb(GY9Ga{$rsMa#@B&)&Y{{t09elO`yCzE?Z4pR3^g9cPlIM8v=2ON1>%dtbclfoZ0ID z(w0-Y$=bh#K7C=sB{}I2sg0c{M6~4HQ1Sa&9yQ_tS1f`=o)dd;Lflh-o0!f_=l7^j z?ip3d8WCA05OvI>OC4M*X%ugmw!S88g=B~x?nWG`7mPi?x0XM%y}Yn6)EjoY<9Ea_ zp>Z|U?cx0%SDw@U!thsJCdcz{_ydz+tpFe8U{hkI%OV4uCAmG^+V@M%YmS-mzF$+s zVLardMFMb+GrUde^#PmE91!NJ4}RXeGT0Nm=C5zqA>UHEvDjRaIM}#0GU3bT2H>R0 z6L7D^%r#H;yjDU?ZC}FA_3V?Dkjlpu{ku!$uC1Qm(y<9l;a6NszkPBImeZ^s?pAv^ zmmB;0$X|b<$!suV2WgB`sh0*ESXR7vI*%7e?YGu_O?H}L?Yd^Odd5jPCUhSe6+=3X z81rl|d0e*8tb*36w^)zTtde`KsrRb!#9$sin!%nkxLcF|S8U`|ulc?N3M{Dua?eGpgN$!#otI z@r%vj4(*a1j|h_;ge4p;n7wv1#4?8~wdJt(xWMt|TF}O5JGQb2+BBQvPYJYZm=}1_tw++4bbKJSSJa~tVcfRBCQ&W@oE;EW=2(n$V)_7PrD_`O=OoY zQ*ABmBUTz_^Tvt;JUSF~Ek;&;>(x z>=5Min1LhtoX70^IdhL$0Sn3X1?TK4{ZG$ZH!{*s_1)SOO3MoU%W zW?w@ybc)JrxCz{D8fcV{vt2I2s*H~=_TA{hg}uZVJJ=h5{#W_Uy1{Kyu{)8x;mg89?`50*Gog?4&#YHPoz~4RLITI-U zAz*&ehS^`KT9hr|trs|J7s9xrshlV25_i&nn6DcFIFXl*D~DcQPi1Sx52uwnZFr>8 zN%!<1eWmHd?Y1f``Me`Sra=-JQ?lsQlk+`r={8NOmj0+wWB_g-zUnAxDYTG4=s5t)Y8VVpc6ul+k#bL;PQL>ZO9k;&YxaY>a}3PfKe(A$=A9Rss1;GZC}wx)s{76yWu&~5EbR89NpzYiyHtMd2m-x5VhLhd& zOjgFmK(5#ViGyRzc&>tltr{31z`o2NEk0|=eahD*(G7ncVjoK-F9RB1_!WvGrV^}G zT51l?*k(@`qqgbVLMw%bal=k4v!$HWt<3A|uAz4(@vC5;Z<6nwlSwSMA(P;;Axj$0 zsJGy4vG=v_8J?y(^Y4Aq!E4{4W%^yU>G*rzV#C_|PoxRQy15!8Q-_U-^CXgYZn@bt!zN-?EvI85-s`iW;l!^@4;Jx&T^7M@3#*O_&^h16hZm;(&bD|;l?~i;% zMG>KuA?^svii8#RYH;nXK~Fkge`zk$R+PIyITGy|Cd8V;-K?C@7eOo0i-mU|@FKWN z>R(EZ-4$cpwSjR4m>xOe=aEOhJ$}*RKys%}-F3b)w+~7QfrG`@TU#`XJBOYSltv`_ zsU3V2-~X3gW30dF>eHOodBWOvSitgZX4nZvWD~LEZlfj_zzB(8NqTX6B+Bt@y<@s7 z5J~NaqKAh>TM79YXB3L<73SZ)OYvtLiu*vBX}8=$YjHyW>nNqx_CrSl#WstzO0h~{ zVeycZ;Ls%mw7gBeDT7-#%z9alr6|=Gqb5AA3@m@j;vIc}5+dmtB;(>|O_TDb{4a!* zEfMH-OD)V+ia2I$tFhTM5Iy46tJe~q=8QF)yM?kn+RV*^lhuNC|8?n258Z%DljKUTzbcq4$k|?}mO+!8xGsv|ul!fBl#>)AX%J(xvGiF=4*0 z%+#HyO-ZKJAGHQAJPs!?=*#$ z6w?z%2+uT?SOSHST-mSej*5v)gg&&E+USmxm`nQ@+UdoA<=-)J9o+@JJE7=^XSCtB zbe(D!TEodAx@}kNq3K+7N+scg9|ox;|191W_g|BEmwG7y@0Jox9r>N6J{CIJ`!jWW zIi`zK)Z3dL=-Zv}3%z@|?mUEc4(2W=Aws6=t10ha-C9R=TxIZVstcdg;1!7wcKmiN z^rVkVqW{{((X!v=JxJy+TG1Rx#L9RAGGeM{qDLhicqZZ=@RTTiU8cIA<=yhS+K z@Uyl}=$p<%kt_aCPk~HfdwCFkPFt$tEhGv4%o^z5LrgA2o?60#l$1X19!BwL8G{=a z9}~Fyy_-UAeBX--%E(3Wx#c4wQRAz48U})| zzK@FJHcrn^t^PsJWJWI~Zv;(gY*(##-~Q&{FNXXhl||9tK+l{ntyS@qm^rsT3tPi) zUg3(~xawG7ip@r7SGEpcV0y;->`&MH?La3^kjG-{2dSKcQ5;(D+Ovx7RUIweYxLu) z&@*LpZ{X@Z+#sD%SB>2TisgQxgfrI;VUn09+Fz1Q$rhY#^ZNU=uB$Vop_cE}aR;j- zw4+#Mg7r}i{|~4@SHC0C?i&z0h~1iVAa)W9^U&JjJB#=aDr8%8z;D z7Yv7H_V})>qfhd2EAj+8x``!OIAI#uZ=`0k$vsE4fz-$S0X zDtsno;J+ZgXGdTnxam?t9oPJBGX2C+_W9xq)Z$w!2RrCZ7ZXV5e4HvCfPV_Xay{%< zYO@UnM7(Ds!tXGnVH`U7_O-eR;pN?k97*Kg{>Vy<93vxPcPldJaq`gA#r<3OqPD+8 zYW$YN6lOGmkC_vCxkxMDs7Q~ObCv0{x z^o00P*V+*5s;E;#A9)1Z!dg!aP`qwh%QpKDx%fi4imLu?Q4c~(ySNX5SwD`| zLz=ZzX80r5U@!<>FAo5EmALw@2i}E&Cygn#`L5$v0UM>Sv|@xxEol3{h>nq5kC#v> zmZhGLuUQ+`c2gDp@k_uzOaS*hFpY2xQRrOZ;d-wUH^{}s`K=of=328u*IGBGSjxlK z=-tb54J|Q7rUr|a8d{sUnpxEGo$&D8v!UBfL)@T1dEnf?Knu@r0B9>lW>a9 zIa;pdQ?!%hW-=hQ!g+El5hvr2+=gQ5l)ADrM@j?PnIomKY^IUYTsH4WiDzFtVQBtj zjBC<&g!i^;ROytK?%oVq$zC2Q39^?*N^9B6BPCJx@<>UNO*K+dWG|1DRN2cTrM>Ls zkkVr1X?cJW_hG zxAS^SV}jN8z3)&UU&Xc`eu}W#bWBg%esqK4^VJ|;_?P0%Fo+i`@XMpdvT(>BKh~R< z6LjVe}n07YHg{TT40Mld=miGI5nDLU~e3}zi&k~O|7?)=!FM?ZqkT1-YAPPHMM2E zY)&KZLmNqL%~7_Z=3TH!(?+H}5)F;P&%>rYDmBG85CHiYWl!@7g<9H^+Xr&mIku*z zrM>vTKu$Z?z<$~(_NkG^NXDOLe5|p8@h>qx&fr&R)6T3N$Z6;9{~-SLgh8BME`(Q> z_69Mz#vF8pY3EsxAf^sCjgbb&$O<1HS^yyFLQyYME%F{z=rCoQo(Yn?tb{&&9L4v1qN?ek3VJx~X3ZbEt zXEpQv8(m=Mh}W%rZ&H7=WWLf9+nFQbAl|+6KkMe*OAo5r7ne2~j*sq{G*QQWbH4+J zF}+i*zGitc`u=x$e$OdU9`7>Ln7E9fUHm37_leG^L{T&TM6Z-lS#GtF0&g!Pm~us< zWh&yUP!2UbD-d7x>AtMBd%uPpLYuKDYq<=wDm=y_@PJ4b2VFCc-nH;fduAj==32S7 zrfBAx=*YE=%JpnT#3#k%GS~E8kds^HvK{0yZAzfHUsu;dZcBVRvSE)Q-3EcuEkq!e zRn$8LE<YQl7sM=^g;HU20Pw7zCYr z^^Z7@A?5CueGogpNb%A&UF(|OuAf=&hV?5^@8nb}-@2+7J_ThxLaXG#|8>jHqCKkp z1<)$}Q{14rp4O9jSJrZIlIoFq)cAzC8QkTpM@_RwI*Z=8N5nbi|JzoGkqz?rtz8^4 z@=CNVb*k8#2iaTu7H(78e#*uXbdYHe%^67Zz2~8;IIw6SZ*HXo#2;MFzFP~-WU8Po z7*8^T4l~uZF1nUkNo|?S&A~D&%a*yCJMwKPf)^7XTZpuoRX)x$Z+&J}CRMjSGlZR< zM+Dk2u;pqD150|SO7cEHX-jFu{bg6gFY5_0mT3w~7}mV!`1@zt+B&%7Mj={! z+PXSYDfV1}yuN`{iuD|PH#C(2-E#-#Hnx%hJ@zo-Hzf~bYj)2-{Qd1^K!4;X#Ba_R z$N~L0X6R{KGG##jyFM^mvj?)p51$HoTmON4jJT8&ri*l?gz4DDb*)mx$t)$gY zlw+jC^R~G8^K9B4l2pp`u|%^EE9Ke4_LhPMly)dnq9+gJ@kh36uJF!H`-~G6=|Iyy z&ln{Ae0%QRr8bp5e-TCgQtnRkqM;+Sw9CAk<&3W}x}<$|NIFw4UQN3)c@U{RfsQrp z>luSct;~tOSu4~&{|n@+s|S(7mOUU}+dGI9%2e!I4yQd)tOLNhw_v80_Aci~Ay-oD zDu03YJ#)EN-59WL1rYgl%|NtjgZ}6 zfPu8{n5%cgcFd~MZv0F#wqX99_LEdwW8Mf9_Gd-L4K)0;n`$&kVu$k!<#OoHD?oAU zaXzM|0dJXwhL(^OSUea8_}#TEv+v<|*RoXKW2}ZplqJ7edyL0tL9Rl%oWbw0WrZ;* zr+Y{n-b2RoSEm3|bKYPw+ddm|1m##GW+vol79@_tjnKf7yCYGEtU5YCuFpVHRw8eG zNd5|o(%w~HfzI>5VHUwPl$3Vl)q76F>)bAz$lf(}0OPH`LDyn?*NGbf2dMrg^sBw= zmW5oc0#fyk4aBipFC^_xm9kiK{Q`|^3k{1Qm-7-pmy{1Qm-CZ94>gI@ya-Hg*k z%*~sBq-$&Yq|lC6zJt>z?NiB$-{9%f{v@;FH+cGV=(3QTcn{aLJ{^-6LF6}h`gDq0 zOm~HgCOX$%0+HX~>62b{DMWsQr%y(iWf1udo<3cUP~PIkN1yheUbC%gT8UL!xJ zlii_+*T~Q5WOp3FYvkv2vODE1vo0aKZT52O60$ot9BN%cb{EGbWGDGAAv@WB3E5pE zhgz4A-NU+sU>18WYUA3RMBZ4heBUM~ITv!Wd@m=bZF9)g_`RH*)a$$ielI5{?Q>oN zzn7EK?p~iOHykVC+C*4u*oHqV)=Op>dos;pE zUGAK2R=GbyoI3(Fws-UMYzQaN0DHG&U*SDlggV_f@I#ckIlu1Fw?d>n)$3bP&2nk1 zZzWYr-Lp{gzLoa_?|KAXRNpEzVf%i!4X3Z|~-a@SNf< z{GLutI9P|e(6T*^2cVgG9^N4nSoRWqd-{8czP(g0F$)d5Z$Fn$M#s-y0VwY`mY~zO zh#$bLvRbz_wA`qt3Q&R@e6*JveHhWkB+NN;>%5^XKB;TDF@$)G3vdT>>&i4(3*?%_ zR(lJ`j4@)aq21)hVP{Tij>pJ%AIOp#*KJ8_H9Er3Twz8;4?`R-khTHgZOQegpN1N6hK3~d}^x1Huxbbn36?*13O z=~63F=PnppkL(4|_6nenMji&8yOO7=Oq}2BNCE zDTNp|^FmZbi^4FN7s_D}6|FStPF}S@-~*Y+dw(fIi_NQkj0VnO>Yi8Qm^6XK{UOVU z;4x~|L7E6P9uLPfBTxM7V59Ra#Me3`BgjU~g7cy%S2r4zgH zBRNpoMo9hsR(lv!RT}Nh*#?ep^QAyfMn68-aCby^Kd6S7o{8RaP^6gVTzF6|u~#P- zu~Da4xCl)12CH1&g?l|%a&f)Y7h(uoh4&K5S#C(+6T{6Rc!*;N9%2r`hcS8#sd`A= z(qE8ZNXR1KUGr~4Y#LUzo zt*?cC5GOH<`WsrIua!QJ7PhrFG+%;#aXr6bS_g7#{pvc%KeU6KsF&HOnV;YCwbY~e zv$TAF%hyKlF~a%)moG(E-DBNR1)8t9UYEa1mtlYEi`V7elwpVJYpbU*N0p|Xq}hYI za(M)s3R#H$1qYo6t%4bS4M%qp#^?NIAHtHi)xHE>PVZjRwidJgPG~R4mxcG-$^&Lp1#idHQ-_%#AGSXm!Y2;X>r!Y!C6x2FL_0SiLwE62LTqG#|Iy(95GZM+tw4Yerf8B@P&E^Oxx0FVVqY z;*8OL{t|OW+59D&{I#2IXv=(kb=nFpTf@+X`115voWwjm$Tql41ocs;bpBQEHH&W8jZOR`_ zqR2?}WQaNs;7>)5#L>NeD@aM{GK#Y<;jitr(ZXNqxzQGXsf)(g{G~ehOLg#<`oI`J zf2sG6w)tys^7q|fw#?BwZ3X9{LreFK(|h71=I>_cvV9Zu*fAD=g%18E3V$X~UY2ZJs(gc>1=~p5Ak;#nXHTPYawp&DDSR^R!T}Ki1}HiIb;UPM&5vd0ML1 z7;E#i+~(=TSQ5f3kLLHkbsoTziat4(zdgV`$?tLk*X2Db^{H#ZIN_;V#5jwmZr8`z zJau#M)Xl+Dw=(1XJazkKtj$xV$x~bu+v7@|wt|bNusyEPPvRt|xCz_iI(_Xpi>LJt zo;IlVxF8PlM!nxUt37UVw#T)4^KCYN_v=~XZ2q=7+v6%Hf2*DRZPPoBv-#U;x5t~~ zCk*Si;BqB#!R%(uS6w z69$C$N2#xUuT2oXbI(n%_|AR2(B?bW!FR5M@7(i+e!g?>pJ4Od-{kwp9P<67PFuk% zYm@J%^?5jnxj2%1Kda{!T6{m};QM*Sw{Z4?a8_|_KI9kmCX~n5f_zHvNIAC+yq>jreWpoZQ#iVx zghQJ@U^x)pN{h(rz|@Jt>!7+5EnWv{lWblGId~o9;B`=qNq$}j{a9%8I@IJfs3CcM zL#M6aM~0HuxAixXM@(Wb^7@XxZ=%KPc?YlWI(U6g@j5aY^85Nk%2m)Jd>`mb{al{Y z1Gn2;eyHb7w7IL^w@xm<(lh;Bey2Y)$>#D0 zCzoG1x%|?}<&XN-Nj8^1+gxT%CTV0R+6PhR0bHu+TpZokI)k8*jVJNxStZuXQ5Pl) zm!n^tY;ieyWs%M0Xa|?09bAq+ROIJ!^peRom*Y$>A1mVc^oveg!7tV3`1Grui<6iJ zOE^CLuE!NwT>jzU@=wS3bjLA1{pB2=e$$ux`TJYHIoak*OP7j z0t{<>T3$Vl{Fh&m78PepGj;t$0sAZ2_p5Z*e%--OU9!e8OPMHYXBk594rD|GNz z=-{vL{1iWbg|8IZ{7p9bTbo9IrIbNi!R;gHuaq(7;Us2YYx*l?ja*vbmy~_wjNev3 z{uV=;ue@=`U(dY8(|(=;jb>A9o`MXAUsBp|@Z>QZJXJF4OtE>YVpx93GgC+iuRQvV zDeV8IsQyo)PvPkP1fF<)(KEO%Zx`WdO6pYMX=>f67Ee>JO|^NN>fmXrgQuzPX?~uj z{y4?vX@<$u_9XhkAqH&)4KHFwJgSLWuc4OOYXk44dId%ctW@F>jG^-6ZF{BN?JP>l6k-Eidk4+6n zdu(LX-eGgr%ve3m=B$OYJ=S+}*1*YGOJn{to3qw-dyJY+a>zn-^Xc?|rz`(gqGNG% z@7sXunpYJF??I_&^AAoJ&K9hhZgI9CVTR4w0taUc9Gor4p5fes01a6m`Xnbe$xd!M z8Ba{NxydlBzCLA!__k0*XF}9@05>YS!wkM}&=KWd(gg_bTf)uK|I83>mK~X4akH#X zvCYjg2RF+c+$@_|?B{0Lq!~6hD@<-4O<{fNYS32jl7XyGJ&Z`4!~{mMKJ_$ypJCOT zUe0=xX-x5RlVyB1!{#R2S#P>Ix#{lYCdW8G!{(-+U2pP=Ndm7ndQ34_K@JZ*e(rp?o4lc#-g|%_K+PJ=xiJ7aH&Rc`7oZX4yPVbMiFK$*TbpgrR`A)GY-{t3eK?8vr!U*u0%O)}i<^bQjq1A>Ir{F!&NevT@a(iX zTViyXZF6>?vklI1ayHk=*>WR!w$0fpyA6Ieo8*v%=o>ibJb*J5eFaB%!?N%_cfC7{ ztH7mh?Jk%jobBm4$Kq_ytvNPldmNnYad5ULXs(~LJ(cFzob5F^D?f*IYmGr$!MUSY zx7Hh{a1wK7FzePvW6KN_oZM_PCeHCc2eIqZ zpL0k8uQs|YH{#&|+^A>`CvLvglfSPNB3!o@Ks+EnU$i3)2l+ci(?eVmG1vacwyQ$` zREH7}<9cWc#KZD~NHzHM`9~z}06xJx%CxTg>qC54u*WLn9y}u0WMUr`Yz0gw^N$Jk z{Z@!QF4&s~5qmiRS>~n%`c0XdD7i?Kx#S4O+3tuq*MZsRZ4!|kFwt5b+rv>}% zKM-FM>^HRgvS6q33Eh7L+qxkDX9T++^XU9n1nY&rp8u*~YZd_TnqZf$M(kO^7N8;J zzb@DhS%xUuWj(KJN zC+gbh$y^d_j0+imD%h^yBla`F?xEe!1-s=Fh+hbH$Ct?BOTqqD2FWf9_6)IK36{@9 z^REc@z7G)lwP24%L;Oat-w}INuv=F^ye8N@{t)!7U_Y1#@jJm*KqJckUa(76LcFfZ z`#G}sL9l<)&-hWWk?42xZwPi4Z|qNk{iPSgp9OpISBN(Sn@+pG2=*3h)GfiLNt6UI%}3L^Fd z@F&$M5K|DTmWBt-0Hzk@Xk$nqWLa|*tGR04tD zT^knq?+B}x8y2Bvk?#CYaS~Yv7}o{hht-zL8-@EdESiOPRc!#V4lmEk)g$S{L$+H6 zhljScfASe_8C?4wP9mo=X(aH&mB9&3Au5CI&mg5T$h92lBSNlQ21kU>wSNN{VHtem zQ79r`Wzx@qAE68;eFae&+;=j^BIqb!4uYfwavqQQ57AEgYwj+Q%08T|e{ zVwFLzSxFxq^0{SjbZ7ElA)wG566y))Y~ILKT-P8rNUiCATj3$fD2hj1m97#tt^k^P8syk&586+;^z`40_p2b%H9U|a&=%HY$N z5vvSx)l>R}kRr?AgwWddbG`|d!FuQgCq!lf<5~>-1Z8j?+V%ux@PVU1D}!8vlwKHe z#xhtKI>CO}RcIN!fDWlJat{rz0KQNetk{a*oe+aMs!gFX$OUKV6GOP-Obkv8{m6c* zG0`$Oa2FJjKht0f;3q1ByMBPE4A#UjH&Gen>aO%jAtNkL5l)>K)LsSNrZUkBx=|v%2StkaILi^iJWRYdCK^7E|S7`8A;ER;ODO({bgKPUkR0g?;2NFh8(dBP7R%F|AaBs zGI(b(6p>44Fbepo%HZcM5UUJcz$9X-GRRef>C-~~vJ6fO4Vh~hoMstZh+<8P{D=lS z0zXX|oE(8zWiV$iVwFLzJxre-!o`PTaC+#Y_Cv$zmcfISFwu>S1;%v(`02{vPRxU* zD}&#C0Z|OPHV@FW8R4?vCiQJ=!A+kyu4wdJeStIWI~BO#=6YSeJJIJ77oeT&gu%`; z5q*Q(vt)wKm!UCVDD7!@S=T(C=aEkt%}r~4+AM+{_o!}$)+d{58eI)A?dp>&eG+qky&iua&s1IXs*iWy!zz*gR~(xi><|{*>PN>=()a<>v?}#!c}p9p624ycM$FJ zGEpl@CRah zNe*XG@SH5kVMvH!=1^R<<_fwAAza!N9ZIGrhj6LiEgW5*Q&kPVb3lA?%^#QZEjCoH z*y6eykSh5MqCLg+#zQU~(W9MKT>l-2)s_(5;1i0aVX?U3Hv|kLpwZ7OG;`@>acoVI z>C_ZAYq7#wyja}ATw+@%&(KcJtVWZ@n}vopGi>52CWwrI9DW1xTI0nokgMN@yhRev ztZhB#WC1(3LH4CQA5vTuLh(zA-9)?&(ft^U+Oi%**H5^x;?^Y1T|L&&W>w|VI@j}a zA*uyq6_D2~Sup0U*%JQR?7%TA%>{R}9SiPen+q|w*5p^3)$%qLZFaD71Ko?8K~beK z(z*`zhZrI^Dt079S+(V=JRf2;S(CYUmUW}%ggk*1o^`EwqYB33Mrm$p=TzT}c<;1{ za3|+Plv%~MK;c}+&8c+-@ztgPIVXw*Rjkj6d}5`=`kcCNuC!R6Q(rlf?kFUl)8G_K zHvu;1G**+N*$|s7;d<1q@bBluN!uNOOPteGW~XD?8`|2rp}a%J;37ktTdln0lQSH0 z7>gAv`OK}Q9$ve*SDUd7|vv{o9$of*yg;;Mlv zH?yvkr1AuavC?qfMfWkY9vhCkduu~mpq3I&0#OT;;g3-}7pR=y9%yI_6`;5?L`5GC6Ax98W z(ddC1za%nq4IKpDrX_WGo4C&MX<)tcml#^?(opJ+Ze0y+X|<2{(%hG+ki!=3vue@O zTB_}q^3+_zx5GfjlGt;rNhb=lq=6K^18&1IwNSDiMYT{eGZ&&Pl=SAu8Cv9hA;+!4 z-xsP1&m8WPF~+00|G{0mFLLD?`fR}8Cu59zbZ=ei_EtPZ)gT^4C0ZRrY)ERB zRdd#aUt9|kj@M(&nOm1NXVfxw+9$Z&*mD_|8{keFzsx{Gjf%o!9f!H;5`J+Jc zcj!kvYwE>AuC@#o*3^F$R92e=Giw_BLh)JHTGKEB39Ee%gKHXfrML}N*EF8C*6L5z z#9mx$^(SkZ|FqVs32R!KOVBSPqcyFrtYw2h{%aDI=YeLsrVaZOY3Iw=ne9A4bG_dL zs-)s|Y|-cl*Cb2-(yBgO&$XfF*O_%Zz5w(YAnjr03 zq0{{?u4J8Ro-d(eSf`q2n>r9x`<;Rcv|cr*0F-gPG$;3JG?fi1Su{GU4Jz3r#;O6~ zcT|d=8>`J)k0NbFW!e}f%fO6Bk|2kB*0XrOp^9v*UUNNP)nZXM);7D`l?$PWZo8g? z5bSJJ9ndSNo|{x92tc0qi|FMK)v=pH_(QefLfzOLs#a#-0VkWQ$(A%?d~>A9|5xLn zsCAIW*CXv_Rki00gIGs;w_j1*%`wuic0o6_MO}PHjC)&DUlNbLA#Q8fj17D!x;1>r z2J@ll*6=wStcRjo!~G9Mm8>3$ZVlhQ!G0*ZHN5Tys~vBxsYb)jhevZTUbKPTF|&x? zgoDn5R>6#3j-&f=bURxk!XdgEqCi`tP;-yH)v$LA~$mB znN-(ZwYF{I7&Egc1u^d@<6aJc-oh`QVP%eky3dp2<^ zFw8o3)o%{b^$m)!tC5s^I;!z*)kIfxho~BED~Nkkzx^Sa)*f}0qi{VBsCxbm>cj&I zJ8+JnJ*Z;c*$`E1gQFE(qb3}3)PzHh znsCTj6QH=?stJdznvjov=}^Q@C|qA6qeH6paiv1x;ZUwrFy2cuw8Q3vt_H^4!(p6I zs)lpeYB+t+=nh8(ZKj8Vw1-v0;g1<{N5c4HMy=2z;X5~*ML*&w`VmLbk2s2c#98zs z;RTzmq93t}K5vGh9f`)5Evgv;O`>^NUg8Sc>)7#*}&d>{lZfn;G^g5Tuv*lp*grvk-5k* z_fIBT(!);FkMA6KRE}`{A^<~mVNldz_CzA$sVA7YPI5iu9G1=|eT7zBMSaeIJJ#N$pOloPz zw;+WkXXo1{7jpHe=P~gUdh<(^p7QxL*?TfgE}2G?Ic;h3gE8{lfoXj!*3r!NWZTS2 zE}ZmKZbUPE2GLCEF*H-Nzp!0EGY_drBUAY{T%dunOKbxhxmwV3z9tPk#XaynKk^G@ zo(2tRU~L2qOlu(qn98@k8t@^T{04S#xtwQVAq@oc3(ua~Qoo{F(ZK2`p_O>wgLzE) zd4D_UUalbX^yLJh3eoWMTA`>ktVxo_yNFpMAkNv?!)7#sL9_O+e&#?tew5zT( zE^2*GHAZ~M;z2g>B-faDCXXV}h!Y^SzGwRqI4RNwKF38Co<2PZe3;)R@%S?2Qi<`M znn(By`?-McG}jt_l(!_h(NF@i*?DA!Vo5cdjzxz3(7qp6}h$l+R!~m+Sjr9pvP`m8xdwC1h8OYCM-wdVXm`#t$RTi%=Xz3+c-*7s@p zPV1?P?+fBbYVKdr)_h+ku?)9Ro{_%Gy>{`5YFDmC__`M4CMHszuN>vM;waA#7yRYgo2xqc7J)~nS7WY3 zD5c+!WiC>zGP-BCy%M3Ex%yXDBDkC@UIUyfUd!uu{AH^sY36AWx8S7ug7hDuifD`e z#n)cv+jUW1Qw%3mjDpTZn!!B;F4=F)t=Vxcgv7O{g-m|ch+QJ)$tLEQS22!rX_R&38;; z{$(eATw%gl{u2uGU`KXC3Ufb~(LAm&%XsZiD9p3$6rWU>Mbp_EDa>Gu6~2=SlgRj| z&1=U%;Cn`4K1*Szq%fBU^EC*CIY;}?D@^_2d<{ZjN~Q8O2!%=EHJ(zK-RwzDD@<$@ zUwlxQgX{@jR+yu_-v1~}6)rtHqcCeIzhd%34qsK6Z!l>4UQ?KvypLxUCW^1Mysj{1 z8nOpdm@2G4Zz{}A-lMk^X7)13Z!63R)}?a_a~4Cg?;V9X!ux(+VLoFy-&L54#J{I7 z%P=way{|AoVX*OipfG`~!yhWl26jvzDa@C|Ur?BKymuEB<`3TAj}^v^7U=s#VfwQZ zxuh^xSx-Jym=T;4eWoynSWiAzm;=0bUnop74lZ9ROcthCzRL8VUJ-Qo-G>@uBcWp4bJ}QsyLh9DDEFG&VPc=^uprw}m zI8L^U;W+6T&$-GnPHR1_^El~hP?PgGcRSAGc3>Xh@eD-%Wju>enY^9?%x%hgI$=Io z&T}2d@}2{5>;gTHp;}k){03j4qURPSazSvup*SWRX1i`+GIgw(lr#cmI@VlDItJD7 zSiC$qyoo8~(kMPQh9vtdKTmJQh8in%EK)aN_n`&LIqDkWga`o zkzW9-;Q2+4tAlxrk>d!)OHCC7S<1sN{sev^nev-WrQ{fRU2G8-_?w7>kucDBNJxri#*LyW z4;FirOL=+|Qs*JzA_iidp!*1#x>6o~3MR0#L|=^I(I>~X{Dz_^E6A~w#02ttw@IG9 z62WiH1kRU~4@r6WZKA;S5^+O{%}*`{?v>p6#n!+_M90|G`U{xsaR;o-MqlXKcOG1K zrdQXsA!Rg8ANtr0O&iw|BQ5@>uhEC~#e@K-|Ni^$+|0M~G%d0fM*jRGh{}f)ujkkQ zQq%T9>`*yVN8SGhVrr%b9R&9*n>%zsrlDmd(B7Q<2AHAtf&A~>q2197tVmGV$lu(x z`hd4J?fwMGi+^+1>1Qy0O+3oYx-_kdrvCID>-FC-1Bx}{Gwk^14gj@=kF|%&zNE&w zu~q()?>HT)MRfxi%b!*$huJA>9CUp4sY-qm4&U1Dn6oYBT z1{Zqhq4ySg?_fg5bYn{By<w4a&i-Vk`>IDO$yo7$b#rjMakQ;GVTi5^|y@$sQ_J)6@c zr$lsOwdwn(B|nMt_LDfi31*y9^eNuVD9gMmUMhD9A~X!Y?42HHY|AoL81wCUd5?y#tB}P z+?Q6RI{Ubctkf~QN}YXfb>5_Atf&&5&lKHnRdQce%}1hBv{h>5BguxZRX!4&qMa%P zR*JrsHWyNIDA{RE*%Z2bl`8yas90if^Z(urjFZ;4iWM@=JRnXa+n#JJ|HYBYBS#`bC`!( z2E6C8$t?Og>0__8=|jcgEoJ<0Grspak8cteBta>EBblocpSlRr?f1hQ`~HR!+Bd9tB!jjkTrC>Y%S>hO0;sW~A-wj9i}b$Yl@m?v%Nd znLed5jb=t)hSZKA-lcUO%`Ci19B1N7bWKU-7);?G;bz^Iw7pTNb3NJ{iJD=;SH+t6IA6#EX|3^M`&fmFJSU1G}hpUFLMuOww3g;P}yQ>g%^?)|7bx;$A3Y58&CeC29Ag(3gfjHI~Wd6VVlg6}XYH zvzsOVk;$jf1{*yZyFPWt5YhZ>*Sz-RBL4>R_a;BR1Wcd0VuV31b36tBeSW82*odwq|ijtb))L2^qJ7V;OU~` zR50UEXu3^FKMqQv^5dW$17#yQP>xpZV>Z@2rlgas*AUgi z#UyL^pyM&Lj{%_jD*`J`bewDta9=I)(1sY#nfA z^uq4wRWOS@1nKyC8J#xRWONE`yhYVMc|2;r#xmJr)7=c^%sHM<5G{J)kQp4FjEE#! zfj%{12osIkIi1T!UB;CU){Jwe@>X_D*C1dP?$tZO(hP7#Wh|=oRZYdc_z=XL4MtHr+@V{V1^7^m*%o z>yr+0AzRfnNp!ToSZ1$6DT@*P5u*64PdYQlZcT3GAbZ6LORrGAR%)SuMO5WP15!^LOXl+v{g}%Tql0*oB8>px0 z+pzNA<{^-kC)O8VYpfuGr>slblPI(#evuTD$ORH6@~h3 zSJ7uKwe%`8`aX2Z{2(1r(TlqKKSFD6Pp(f_H#=pirf48NL7KZZ>EKDB@!OLuq9XR? zWo!{bvnc)`lTV?0KTWPbv#r(}EtAO=&46i7I|0_U?W*u=SPP#dTqvqBuN{nCQTG_i zn`uy}FMg3ELNttPl#xsb%C*BoAS+L-N)6zHyKha>N~F*RB!^;(eEp7E7y!?xHA#z+ zLTBzst`e)8wNPpxWbfEPuf&njiERo zyH6uc^{EHqUHPNo->>|~<6Wi5e?a-q#=EML{|Dv26z^(4{)5VYBi_}9{D+kPe!Qz2 z`421q(|FfF@*h$D*YU1s+TA~<(FVRgbxpi$e@XZsD|LqsalN6}wm#A5owO*OA+Cna z;ZLtie992lwEXaA(8cK;td3k;n!%q@+^2#+-esfx`aJq?yX4Fg)vJ9h)AK5POT4QH zrC&v-M;|bE#JkpDGS{o=H+RXo$yJi@Iy$|XTA#Wn-gP@OXL>_jeEx@4U*T9?>y5;x z!6<#Shs6u%W+6RJVt4)yu_5%b+Z6ipvjZ1^l%^2q4KRd|P{2TbQ zX!P(OwH22WO9VZeMsbmPoQqD?=s7f*o7aO}bh1Xzsr-q9qGH;eB!&0nN{Kh9N$4w=l*(hL97I9E88?p%$Y@j&gyxt2u2 z|DBde;IHFk=`Yq~=}(B0rN3O0r9X7AEd3RlEd3kt%@)m5_cC=^%%h=5R1DJ#sv@~R zDDPfH$)+f-#9m0Fkme)O+!5ET@O(+wt2+MGJs@4m2U1Cmj)010E;?~3RWO(0T%r?~ zR{k4tY&PHEM6}GEs5NPH5>iCtRDRVpIu0qyYdV!*4QC!=bvzKWcDFA-V^xi$(89sd`7kkYWh}=dBf*Q<|U7|^jN8ICq8c_1#hsZ@VBaiGOos?!E;{wfT01klfOmFq0=5A z^!D({Q>BdQW^0-BgV9uJqNRndCH+}NGV(fUrjD>n@~qxp;3jYZ8}J*L^j0P2n_knT=x>myP3* zY8>;prE$#XvT;nIiHpt>*_~BI@0*PIG=$!%zHyQ)$!n&GxALG-k~Z;1bdk2L9{hGr zZ?qDs`;y!57RZuGh|kybCtNI`4OSawaC^XW zQf-OM=#BUQkDVm^*tU9Sa$A!9i!pBZH)9{l<*ci^F77?cj7<2JkRc2CuSddEZgp+^H3r5iGVR9rA{}@ zmcQzVQN3-AhA*qPt*qV~sNR<&0k@M26qI_yTJUy|0|e@15zXiQNsg$`zhX7Y$q`kq z^qCZWhFOqeG?{A*?s;QIsqHF{f{a%)bbQ|F3cblZ3v#HXAct8Ca=5i1zp)nN$Qi0# ziIO`iN{C)h5JDeGxb%%0qq$Kw{RG{qiDp6 zueOglg|P%)6yu;aj-s?sSsTcVto??p6>J;Z9|Zc$nl`mj-XV%q*ASUt=S-UvSXml{ zYz}V}iOZT^ir3f_=5q|fI&_T%DDU9zh%d+H^7nsp##gMzU`q!IKD3b0Qk&6A%UhE2 zb|qio%cZr-I>gauLCR%e%=sNhr7~OOF^%PUq_G1jnfd2m4*2C*&N5x1yP+kW4(g2# zam}4|p+`y0ai1KUqb4Er$yR6i+l*z-(Ls>x_2|Q9b+D$*obyWphrPvRu5Sp`ybfY5 z?VxMt9v6ah(=BkP^BiZH=@VMaK`-K+$8BCQ-C~(Td`GCOKX`dWG8>r2GKZfMdU>Il zG6!8d>27M~yriNtb$*abiqO*oX?%k zi^zWFt>p7^mZm%w89 z^1)nqiiT0i1#7}nCag0>w+T<>ur?&uOL%IBg^|ZDJdMJ3QyeG%8%nea%SO_C_$zoi zg^eXz3Qh|52n!{|UwC4}0!f?H9F@rWhkZpzdQNE%4XaLh$-t@Fhlk}P(E!&Zb^mx zrMUKTR-}GWoqGBu^p+fz@{rzTk>eaSsZ<?O(XfTEPFGT;#<;$xnPIYY-Eget{EgVf_MXe=~=0$2p0p;N~k&{!Y%N8+bd z{sUt&p*-Z8Ntto#t;P}%xWY>L3Ri3_&j3zd9*`kJK#Np zpB7`34~tlP66orZ<1}^=$W0R!d5#uw*XO^iF=D?4`hgg+RI1Tup8?$5d6NXwIT*|6 zP|+2*H_us(wLpyg0E#+{m=R5>fQ|)R)mSwIHgH%HjaWYe=!q}aX)FdvtQCzOI}zyl zQY$r@cGbbf+-&B4}3*&DGcmz~@Y@BaX}haI?lD zjom@ulO&4W{uAh{5r^qiEY=53Pn1)~XTcZHvP1oO=n3>D;DwXn1m!#jP8wcvvc`r2 zstHa#gQw68eDo@fjY2>dAibPM27@Xt1scxtAJrI190z2sfyy*!1YyCGiC2i{o};mK zzzv|hJA*%QS5><AK5IeaF?Z_US{&2=+zcexc`h-wXu% z@6UTaMxITax`6nn@WK4V7LA=Yar2+Thw-+*YV5I9KaszH14uY@6pw~APNPRkA4>@Z zcgEZsI-Orflg|byua8mn6R75bebL%OXYq>|%E|z0;$vwUW{oIeC+c9Znah`8%<2Ya z{HJW@_hKd_F5$ng*BGA;!W@IdstRZ=AB`r)*CBYP8DET-z~ z%=f$k*BSp7tkqVg2g#uw*$Qz7K)B%gq-T0E(`Yd-!2A=e7bbI>yKEw~wOEvL9~cHf zDGdB}KC6)Y+VguLMS@T|g(b5dq{3Q`2O!l0plJ@<4%zqSX9`F^G)D&l{_F$vp`~du93eQqfoCDg%%ZhUs_*0W3dZ6T-*V_G~ zINmUG(x$W&kL0A%m(Nq2e87vQ^eiG~vqfO0iqf~v)|lwOb$~ZCI0`PR@BT|;qWks$ z)HkIu1{P`GtsM(3qj!CvVowG%(~K?Q%KDhCD)u@+Tg=$DJb59!j^2AJMiGKf0s7gU zwt$=HepmwxC-@PdXYSZ}edwLz`mD1mw#%2XRK8|x0e8`R?p3kF07dzlu~)Z+@ILyJ zqe`_ZfNHtn@3Hy{9jy1htl&<7y1C&{Qf-vp=!z0P8qh>H98PIZ)-xVd@G?Ma+%TE= zp$Yn)M{=O&M*y90!}J;O(D{1mI|{x7=ubCX%mvlH*Sq|rVBL=~Z$AU}t8@>-H|is( zk!C?~gx{z0o+RzldtoKQ%YjhSLSlXiE~s!=uVx3{7Fdj*S*|T;!SJiz^+%Qba6n_+ z$mj4$erYztZRxyH7$@X!z zCZ)6o+`}rx*7qrW4%ODdOQkdx_+)=GF9L33>w8V5vI5XLe={#DRzuIOHd~@f;TWJ( z?$`qEZ#(c%#r^}(BX{h|Lm_;W?a?~buf0-XU7N}}&IrzA+r#mSlLvS~lOx9&!AY=b zvlOQW@J1#_jx&O@)K-6u;`9U_XL95i@)`vdy4%+Fk>bn*zA%YCf^*VV?ttR#1b*7W z@tB|_`;u*?q5VBDUs<&GB;K{Tjw_;nYAk(ITeB%RFKtmz6sI8Y@~J=V6_Uuj${VRR z2dPtPOJ4oHr>ZILHGU`B?_gkKQd`TbD=j^$dga`pWGn){CbhLJ1gDAD*Ao=y2=KEe zXPTSS)2q)M#d!eyL+a0!mtYU`dc9Y%Go*ptmnNC=62z%q`M*`fG9Xn;V=XViS?pDD zlH#-j9-Aha@)E>-Uinuk;zW=V(pcL@@pS{AE|3IqrDbceaMU-#s<&UT+tw8T% zjp9+7f<4PVNLQNBb8PcJWh>%3`}b>=*zF*lv=TkaRj?1(Bj>3yy9?$ElRejN5>M08 zG|@gPQHk|U$5@thpRP|O(a-ViJ|(dTNM+M`N>rQ>$H^Cp(-ipE7LFwPg||i*DCGF% z1}bSN2&2-O16QTx(7dLj`w6Ac0zg|nRY=v3V7GI$8LQZ*zwr6fcyuprEKN#a* zdb)4-Z;N;tWtL;)bQPs2=rukQMX}d8sy|ok4qy&VhV4;jBFX{Ba;Itvb3k90{*%)4 z%=s^lIX|lej)8eI8Ftbf{ONdgRYiH5o@U$RqbT-A$McJd9SUaIWY|e_P}G@smx|I9 z^ghW%ahqu}N;zl8KUI`Tps)ChPM(U@bnf`kSpS0lTQX7H#-xnW*qQf(it-OV#~JWx z6t{gTqx5qAbXP^m4SIf#bkN^;@p2+Ew65Z^fJI$p1AFBxtdx|?}xbN z+>IqNcLg$*KF|=EAlg|gEKfr3J3pX@i8LaC7YZ~N66fij(m&2E-nxWq0;=bRL+Sp9 z!+RD~r@LdkE1=$PxS0#WGk9y`m8uf}Eizya(@6DUK2&4)@$s{d^BfT^KpolF% z>K*jC90~Sx?#G-Q->5x*}c!>2Y$33gQLt zF*g*^kr7$X_&G%d`?mMU(?q;46LQMAk=5bZws?kVDEkY;C0 zMo~e`>@t5-W&M`^Ko*D3Su>%=2wmUXJRZvreqXd@EeUCK2^6U zViZVaG9{y^AjbJrH~L*;kh*31oT7p~&gaS=BmZE|{*A-sIdP)nr0F`l0HQD=u){_td;lZ_-c^0W%kUG;&gNATNLLE@H?Lh z^JI^4onNKc@4?KJC3*HIn#^_ec&g$RLYy*LJPSc_Ho0I4|Qb8ET&ZXbOs;x{ma`f2F2(3E3GZs#?g9Bn({IoBCvFPqq0M_boMuOo0 zqD|06k4uncGB_-&PuJbAkVH41z)?CW<8b{38S&%^bGo+X zWo#h)LrHF9k{jP)AP{d?wyB)WKc%1px{s70dvpjso zNDN!bDaf^}4fH9BP_3s&Lg^7Oo)@Zywvyi`Z<+5A>XUbTf^a786wahG!kPR~I8!oT zAZKb(;Y@2RoawQ`nK4B;GuH@b)ba+XI4XH|XStmz}1byI}1VYP5Jo)FHayTaN0Q8-%yFOjpgfN-|e z5YBer%jE3HE}WfZg|n-*aCQ$B&Yso6*?UAd`~MKm5Bv%_2eS(2P#NJIZY7)}Lxgj5 zrf`mJ70&Ss!uj!qaDGbn8#yQP3g=`w;hbtMoYO;ub7r1!&hCa&Ew7Vb6RtOZBU~RI zc$M4$PWn{Kn~_uDRLh%%*B5R!K1H}WRlHm(UTzUD@XOvcLs+A&^j<* zdH!2RjZr{w4$p`xg_VyGyDpE5&{#DDlp{{HBq`9+J6{vNDok=ZCdUy4(1u6%lbrD; zN2EoC#sYLI#?E|oyv8VCDRJruE#6Ui_TY6#X^e_!JUA_@?r6^fUX&FWW))) zefJJ5Uw{52M8<5{s3C}Pd}~JOmo#~{DdHXtYYtK3frvem8)jN}i7nbOER#aB+9KI<~ zR__6V+g>&Pc~tKTEKOzgUNJbTdN=bw>GfC$_>j{xqDnzj??FBmr5J;N5M-CfBuPP3 z?@!#>L2@c4#}Nf^o|n!pIh{?8NGp3zvwE-aSuq-;fDy#$?ylZz{CO>nQE|@CW$GuY z_ZAPTt=hj4M@CfD`v>PuWK3DTfARq(rC-vRPh?b|tK>uv6;A%~!YMFIIEBJ~C#P^B z;S?z&oTAl)Q|!E;6#rc~CGHES1BS z7FCB11+itEfT*vIe8bp{+>AZMPdkXX;=~k-Nb>|}{eL!c_8~V}sS0HgSLyZU4OXw@ zjCLV1n?Q8Ig8&+B$0~v(6a-L=z~cmF5Q(+AhnbhxL})!Tnnc<>oDZZELVFtsKkbIw zZ?8q`KS0w=cy1mOj@jM_v6lhbXu`ix?A$ctNA*38!TAaW{s{ONYXXuoaQ6%@DUSfZ zvP#L2_8ln0iq)mX0a8t$N5OL0k%8_HM2%oYX$b?UkO6ZN$d>c7Er3ti)QQQpSWV#d z@)#vEk-z&H@SJ8Sni~`;#)Oz-3yR(+s>%q;s!!AxiUtoD`y@{OY&z#E*$^$>C0xMx!+d4f{-L#D7E*LAkFLum7j_)k>lCA-EV z?$gmk#~lpp12J1b$iu+R2s3 z$gii<{x?Ev7>L~H?N}0Pz?9>!(w2O415(G79JFHhi7pg+jhw>uuai@xI~?EB;Si82 zUm-ZYFBj2uft?^b@9pL+RiUR%)avtVaZ$eqt441y@~zaC6Z5v4>DM$VbM8H2HvXs) zGiA8R95PTb-wsgBEA;TvN^bvIP!(!pX7S7}n!kOAZI5UO|XI6r6=4=+u+|$DO_OWp0`Q9RDVWe=rFDsm-wS=>*wQ!aX z63&Xb!dbafIIGVHXU!AgJe?tQdGUG|IWK)~lk+;KaNhJ6&f8+bdDmDtiPOj_(1wny z`V?qO2ljjlv|l3vI~*2H$IHU$^h7u@UU$gp93-5tqlD9?j&Qp66i(0a!s)d^II(Ah z)8~nB`ug7`r++Tt3@9O-_$tErrm1j7^bpR-al#q>op8o%7S8xf!kKtSIFsMprMJX> zPjxty(}^;FI;ocG8%~YSaUIr&KN&-*MvAqXKb@RQHAdVV^rw?*sm2S#(?5p7r}9VW zPyTddF4b%?j|B{@i}20-I9_^-W z+%T=L&Kf%2YAmWT?05fyktZV<6Nm5$78d5Uo@y|zi#?%q#mT^eg~V*F=PHWu;*JP< z@iZOOD_BJEBi3WVRIt?2H5w}gtR{Zid{RFcSDff9gP@dMgmnvVgMdy3hvlZd`+}9W zW3@s|J{12(5xPX6bX=lfHQ#SFCWOt$za=I*l+$^Lg0=oap$K>{{v9%5SIY|G1_5)> zU1{H!XqH^d|1?6px{wQ7)!t(cXEgdT-{Cz`K-%n(NX%vDNasnM>|SklhHYG|pwiR9 z`&D9FMGjmfX%+vXG|XY2po&1d=BMivLBn`x%AkUD4i{Ihpxn4x&099e&k9xgx=^KB z@K#@k^_7>6MnJv$W&~thK>Pa{r>xMJma*3{joC8hL6JB!cA1Jg%DDbVjb)w8OU$B2 zMmU?y!&YkIjek>kF%-La6(DO=0ZaLeQH-tOt?NOW-dN*P`4oCkv9)GHf1k?p(Q{>O zG@6_Ih@&^xQj@{*5-KE8{vu{sDy|F>{Dx$cn@lNC;*WjQt0DJr>pHmnhg)Yu3EqouUK($mVYQNzv}TlkrHtzj7L zNj{!)c_ob%8Anpr@wPGDSjG}R_m*sDV?--5u{tj6tSyb=D!Bsxe-hrYB$SoaM~FPl5i(8@-F;Tp${z`48mn z7^!%gmcIGX*dFVgrD@v(IVbQp#JAJyly0r@j7&cHPe>Tf|F}Z2=9QATh*9UPXAJVm ze=5zJ^XUxSuEUh(Gqk;cgv}-%{>KD_kEctsoy3~T}ss9{Ol~^UOptb$)tXRQfGl9R+82k`7e+* zjkCZke@g!y>GxfX5uO)~a1_9ziLQ%A_zpq{z4=M&D`s>DQOEJ?UoloRig=uDb)|;5o-S@a6|IzV25edqHT)heHpL>WSP;EcO7C?+10hnp zVXARX(#mh3zOjJXfbtuxXWWgj2?&@?0>+SlNu3gq?i>9Qd9<~eQVu6Aynp9Dj zlX&1=;@&zZH5g&=ZkVadx^&RnFn!04=geuld#fNlGqVplx+fN15fpBFPy}^)0MJqV zGyzQK0(pofJG*Fva=BOwOp%AmVLSfu1|8d7bqZ!gq`7En-5j z?c@0p>>(uW8;dI3P=(U5sL~khz=kiR zDxI;g3#WGLR^@zK@aP*lY4Fp6JXPt22|gQmcs6y#j zRJlW{G}%lQ^qb9I9I8+`F+H4ggmXtY{$ra`Q?gM`a?Kio>t{A#KmV#j& z=K6xMoL?x2Q#;^P1Dx{CYZBeow=xp?XuJ1_v3Vq<6zEmHP$_YmoS5w-bphS0({9=8 zv^K!|SvZ{H$_^vh4zJ6@6?+Pp3r%*tHwMwK=mrpdy%y1)!&VTEn4~6elt|`R*dK#y zYOi}RskAE~{AnfC6M0^OUTjP6)eP%n?IQ?2#f&_+5}DjT6q(H8<*F|`gO(k5o?=FE zN;sQW$62yRXk`IaHbgMn+WYvI!>dUg6YW=P4XC3#wt#bcb)gkH0<@ukM!92eCOFJ1 z%{VTaoVEbaQg>_t=kxlxglu=(K0t@f*!GDnnONQ1%jRI>?tuN)dnUT2t7YYA(J63| zUo=U3E-Wi)u+HA41vmHax}z9p^1`qU0-Uy7yffNZu}So@si3lFknKEtl8?sTBC(=C zN>K~+qG$V>jG~i#-a4y=p!yX2_Kl|=9wQcWP{R$Zw_kR}7u5diHuda^kyzgF1cc8g zK^;81;<$C3bwR)mAiS4nSDZ8qV=4m96B2Ljisk@C=~%jAcT#0xHd5uXePc;vmI{D{ zQ#iVy14g9nx}Azt*vqyXcFK*gg>AR&V!{+%^Rb=UpTFptPwdnu{mHkdN@-xB{?dRya9$jmWi*)^)AL7~_E1_at`VN^brDGkec#SVE!Pp9VQ|buO zdIjd|sDhH!_9FPI0VUUCc^A=aGEhF!I;wP)m7u*q93LpAjWfF>z5AEXboY;pjup*7 z2nH*xq>;k6LfRcnAhr<41(Xqq*UAB}Vn|bPPRH)XvO=^rfI1l>{;iGL%V3JF+w@-> ztDTIVg*03`-csESJAxI1tp-1aA}rRcKEh{lQ44kXkoxq3*ln98vwUw<5AME0SVeZCJu`}~Frs4c&B9yA1p84!2U>j;9DQk0Io)ltswAYWwx zS0;+DK=(8T`ZdqnowG|oTLJ0dMmN;~+MRFk)>t3{;(?4XQWChqk!b>+cJ4Cn0@l z)k<2Gds@Euq$EPr%mYT((Z52B*up zY`sQrpjO>&la{swJp>QE{D-4c+qP)O5YI6K0YP*;-}a++3K?Dw{q`d4IDXn%%D@iN zSW<3j{V)>{QMldoJS~RAYfVJ5y2S($9Tq6lJ(hMXBWyV^Xx9m4*Pv7Ak2m z>g3mJQ%Ei`>=e+O36B_Gis(bhV{6m}o|5{G+Kip0BCtbr3jDN-q73Q$u&t6_?=WXK zATH@^LzD7z8G{!rcn$UTM>zW$cwdv#ztexU7*TAiX;?q3 zS1pU7VQ!iKZl$@G;VdxcbV@k2&9|Ikp=7jm&&h>_(jCh5!B4v-N=Kj}wkKFejz#DU zLhipY%$s1^g|g+beaOq%3P77pSS*SDi-qT)LJKTjg&JNz$1Y^VUo^Zy4r+Lgtdz6T zBM~slapA7ac@>1!!%urm3jXu|v6G}hs)6rcNrPuB7AxVj@8Mog{DidwzYo%5Qm@Ke zkM%?)w2^Xe=@lKcI(+M~o_LsrvnKS40zz6568vHYnsQm&0j{&s2(5~reeQfs?6L^4 z+(GYdZ?Xl+Ubl1B6od}t6((;cCbK4?*p@ZPerVYv(|oZ4`=YzOPAO3@^bH_=f z;@={g)?$t>Si_V$W=Bojax~h4iv0lsj*%|sNf!y-c8sAX>aQaBo&oXS-S{0xv2BQ& z2+UE@z;BBJNK+8WJaPoqVC(?`f&u3=C<=Y*I1jy^AfP0Wa)iDR4djPzK!cq}P!tUj z+Qt;k=$20KwShErI|o0*FbHUv6%N|miUw$B-{vS$1k3@v#H5H0A3W$glt($|wz-_` z0Ce09zccSZ6k31``Z#MYh5?GuHx+4%kg>e<+GX-&N?C}rOxsuDif-g70TjqzVnxE! z6rz<##T!D(n0Hc2AxJ1=NFh%qapOzI6_>$O>$ZE2?|pUF9E47lRBso( zi5@oc$kJpZr>zV=y@4n=(Zfb=bPHG{f~y$NzuL$zs&V!MCC~=+u9a0vRvY>6U}g1= z0{*Rq!zr%SMvhvp*jvCnY_h`=liJ7+(1o(0F%j zWg|D7)Hw;ti2!>%=tGe4TZC}G}n0Bt=HcY$Ma2uva2f7W@W81vQE4@% z?EveLnZj3z9)@Yi6?v0Dy9)f4A5nLG^BwEj99 z4CpufZW1L&CJ)23BqH}j=o|b#x>04ArgP~m5&;>YcIFyJ%7$Tj#z$w=ZVCY@W1t>} zsc6QZF-$35WMLFyWK28^(_K&L&dYvjnBK49HcXd(FWbWU8lN#t5B*PTD|y58t2izU z(}-Gb!!*Sp55trioN1W;Ue&`eT?>yRQ%$#FdIx>Nk*}uPF#U)+?E(E7AgnchT3>3N z!xB9V)9V;_i82822$M28(QTOaSu7df0$pYmq72im2RNGu|6ZWSi80+|BvUXn3%4Ke z|8~tyH5OQ)78izT=h|+=l#0?cOm~Xuw?-|uVfvt|hhh4ns)u13Sk1#QyHM6>P8^-O9ER}G_-QHMdl;ra4MuzfECRyQ zy!S9nOVhxKfZc=yzfaz%q;xDsWh1bAoKGo@%DG=9F)By>b={j>y;DM%e z!>FuVl(Pv4m;}4WsgXG0x^A;4$Dg zCdFb@wthsP7ssq$-+nn4RJf9eqLO>FuQkZw52RIg>f&yP- z9p|(~@_P^<>oS_t-jFlw`a-BwfIp&};=wm^04c=Np_{D*a|h}7jBbcaI4BReU+`k( z89NE+ya9h^^NIEd0t+vZDYtImPMKERX3AP7kCY3Z(O7OU^V2(PowVYSuu8ck)-4qQ zRX5<|m-H>yX9m3@-xDT-l2eZt>8}1^FwTGp(cg78wjmn)fQHoI^>&fy-xrC?^t?#c z^{aRQt<)@N=!)b^|DyFW)VNBj{7EMWuF>fNiAVA9DG2!+SfYvF5eFsc{EllN56gzR z5&>zET5v;ylB1DH8Og67k(45U%bJu@LB+k) zM$P?ImChOg+h*b;-g?yB5{z$jH}5py%O)jNXOEf-S}7@i15Pw4;hjBdZaWQ|P{ z0~U7({o4MnF~1)60rxbfcLX*Jzq~;ybygY|nZzB9)>%$K(M`MwLfTlLima3k%(jP) z0N>1|*hCr==zJHa19sxL8Wv<&t^2jJzj&&#m5{Q}NMwnbh>#>D(4&f+#v3li8_~Fa zVXARa(J}|sOH=_Gl2dl+&;(Uc?;x2E>QMhM)C+$P(K_9qI!@x%q5hVgp_c=z!85&R2!@~~lupsNZUwhBfd)GeddNVebfw_^KLGy<=#~LX1!wb* zn}DS3&%Kba^B1((lmo=Qc+yndzfBOIqaccc1HV?VJVGXJ+4^3LfS91Z!o&)XR|~0V zP~linhpAQxtMVPNVvCW2~t6 z+TNXLRYo^ecsOmg!J%z7IJ5%-hc*`&FGlwxnUj_d-apR3b=XfsIrA>V1L)RmF1qdF z9mVNW?L2G@Mq%$Sd5LDUrlN(1_wg|l;{!UNcUj&5;r?NPH$f^VNC9DcU?zK)=d_T_ z8ny*vn0Ixa14vYFnwz}$i%HQjlLQ_{*?S)(ZPJiY>V1+*i90p|6K%-*6lIT#7t?y5 zrrPC>(*%~n2;+T*N|QUTlO*q9h<=4mm^q%3pR8Z+2ed0IY&Gu!oHh};u+_W^@@B$A z_lUd;^G?D;H;KH9a{5>>4@xKlakcp1wX*gbHpe)CpO%I0Op8*Il&|=VOp-DX@KA%o zf~sPj=G~A-Z{{oy0uq4CCp6N$IquzrulRu4MZh*7KNzSeMY)dg?!ZGjGIjybT@wyS z!s*UmX6Eb-@Q>~UW}gQ#M{jqCvtkIyfcYe(g`vNQ9K>M*c=zY6hDb^=z-0^y3vMFQh(ATFm!?cVfi2U+Ptx;WE$O?7o`w1! zB+J<6ZQ*wiy9#2~GhhXWep zhUvwb-XD3T$qHTsXt^7v$7j5CZE_Y^VN?qT03CJ1^a@CChgSTQT2fyJbk_~j3yHj4 znjXj*jf(sO9WQQU!t~IQx1Y8vwI+pU29(_mclZKnr`2Zvz!?ppyab@KZg@Nm{28_F zlemoC6i{n7oDS2rcd&Ntg3^2-prLNKbq2uMwdFAio&#u!0m~7{wvXn9+*<$iDuunk zkDHtp?z#)t3bf}eCzan#;E&o^hDupO`L!xOisOYU@o#J4NI8YIa?3c&PnEj(1 zeWaX{TJ{QxQv-M-D@Rs$S*;|j8NulZe_RrdsPigXx`~Q26Zpa;oH~8MsiEm@CwVnZMQlpo&f)7k;7SY z(fk%eam^mMfV0jtjs&zv4{GmO1)l65%0TQ8?cNI}rb4YEm`y*&_De?-e-?Y5L7Ztl zz#7`#GWZHj{l3OZ&by>NLDM35s{~dOvb> z{1d&bF$gUU67#!73*mQ;LH$9FMevZ0o;hQ|yT1b->YU$?v+01ox4>%oBsg`Pfylyk z;K!^SxqP}#>7;V@nZnp_z#m#UJ;Xxl=r+s(MQj^?)tD30X#jrq0q-<6vnTglepHCz z|J_4YWUxfNYRBoJ)YdWPL#cFV$9O1p1WotJJe2xfC-+0Cg0CJ*o$^*=KLfjspLT>E zZQDW%7NQ#urDmh2z+WNYy}>aaO7(xCF=Fy`P$pvx4JiVZ52Y@}+$n?=0P=;28V{xR z_SPj_7f>S;riW7H*&tfEL}jP9B)Il{j4^NaJc7Z-N5MaV;&dQGR^9CBNOtBzgswIa z%gvtK{gBvxKtCBU??SQF&7Sr1IqL=gO`wmg3~{qZ-Yuwa+%2H{G=T-_u4ULjXO_-} zojJ(apJD`V+rTa2DL!yiC;hbv~l9BmVDP# zy9-=^lkl5ig2}vV%Dk=OAWZ_#{74GFbda6Cos(Yv&al^xe}L`aPG{IV$4-7U1S!0A zOo7B*{Oon;^3HLtGu@%dzC2bw7VPv_QnN?A;YkvTYP6E>8gw~_B*F*7N;2pA%^xuj9V@13n1Xg*Pgdp1V`O!p)zsKI?h?D>feT;tct`l@i;u4ATu6^r*7aq6^zjHU_bwMXBZYUFNbz28f&9Ujtiy_@i^r=Wq;Sd+D?VhL#!_A3 z8#ieztg8n{+`;$n`sp2fcjTnE@r&=jFJw)#>#WTuvg&p<4u^S25PoyqG-~At)kaLZxsMh~fE8k*dnTa@;@Z&3}9jxu@Q7dihNI1~~^F>`fY9;d) z=-$o1iLGR)TIoIzmKXvG6K5SYXroqqu_7mhYnzD3EoFp7K0=?1T)P@wDK*x)MeXf> z!hql;6Vu-D3@-H)80zhvdURvzu8zGM-Ou5U(cRQt9eekKA|QbR=L2OWp!j+GQZ zhv4iz>A^4V*wszl>#_F|CW_-kH}#n!dv9U!IIeb66OBDiOy*(|u@4rrcpAFDV~-a$ zK^nTfV;>^c<6;7`4;52ryH~LYpKw2f?k1G#j^P+TtuM92SOLvCb{kM5g!VEJo*7qs z7+sB~e-nu<1#S7GA_Dkm5T=>*>27@cr9PCUndveYV#2C!IQD}iZJX7%G+|0io0r`MeH#y=~Kyo>gQ64N@hJaR}_vm3M z2M^9)wL%dv0{EOBpO%#%`UxV;d^+s94y;4TDB!`g^TDWGehI8+pHo%P`_MdT_vNd) zaJGO#d5WIUtEZ(BBq=q|waFkwgHWQUr6$BJ3wu`nMIS|~54=@R&%~waZ4c!W_H#x} zkPiSpgg8r0!`&Xq&pcOq)(L>-yJ1?O*bDNmqc{`Upl5{lx?$>|_AmI*Gzz{5=&Bp0 z1&qBM|L_lIe^J^m0KGHxQ*d=2iOKB^!D)Lj7Szj(O%|-ZHm76z0xkgP3lkPbu)Q&_ znvF@}bpbW%WeAsW8=hmOiro`XKeuo)eeE6i=8s&$Qvl6!!*oi;URHb3h%>t3&DR6k zWeDf1-JHtWx-yFMGw^FBXQP`FqvcDdO5hc6M{k28QuYwmT?>j;#H_vPKD31>B#Jlf z+b3xsX)~e%2(^1#>zj-Qdj|ddCRHpkz+)|f6epAZp{+`6BJc#0^Ou{GPtS;9TvY8w z;CoEYcGEzym(~wWS7}`Ue%GqBNKhCk_9}WPZT`HaZ`;Kh^(1bY*&FJUh9f`e5S-P3 z_yUmzogcOj(JN%%}1 zvDRD&&bNA?(aydFzRVDzICOu(zEUr8Se3?p;6Ekd(7gluHoX?-^8UhY;E$7}B{;kE z8jaQc1qbZd)P1aS=)ju&q~56{XL~6$9C+bARyl%mR$qg{6P#MWo0yzKq6f5&W%l3o zeS;OH7vRBGF@kba-%y#eA1QDq;Dt%Fp}TAL2m03yRTtk0e19Lafa&g<{jq+!j4GH* zfUdb=y1Qn7rPu#m#eO9eFjAl(d3VjuY@K^65gCE!>TA_P3>7}Mc^FB&h*KJP)xMrX zx8kI;O~oQL6>-`E@0KJjF{T9C?8vd;j0Qf<%8?^S4%^RJnM`Xn@NL$#Bq!1~cZEvp z4Dc&S(h@^V0o#pOmDY3MAChqB?wY;0t?UK)A_blS>ypg<%;KZtVD>L<%c?54FrX49 z>?hzVwy)@PT^$5B>t|>wj*AK7-(Js__$!Tnz~cH@av{F?V{d7@Wye}@DzNXYxM_n6 zgNW?4a%5JMpu!+ptZ$J1+6 z%|6w~` zi2b+icrQPl6-5Fyj6@0yux`go#j>)`Z^u*7G6$W9iE8~y*pe@(Drz6|uqF4=4(|j6 zPs2~sDTcBoAIt=68A3N22=^7Rv?Y&X&CZViI%~jcJ6_t7Gc}#@2Ln9qNFhSlk<39S z{-THprM6&oAD;V1Qc7*d6Wvg7G-WOyCUQ=Xev&={m1QiI!qOKah=>8|9PN$bDXYOWaW{ZMJ;{GX>**8 zN2<+n@y4LfY>ta`qc;C8Hpg3_vxL)Wc8vXW;Fpez)E3Td>Cgd3bObuhWo(W=_{zOG zzJZFt*c?AXg=uV#Hy-5P9RK|*_vU!-K^~jqL`r^h{L4Y^&2e#VOYMu3B9?ve9|xKH z;*>LEU!01WJN_7yWMBN%AnU%kGtS%>r$gb!zBrv>HuuF}2#?wq=k!E@u`iyIJjTBG z&<%1!syjpu#82Bs?L-uiu`ho3rld>*oM2GQeeo&boc(}+4M4ULddxiE=iP*#cnbsp zr-58HP*H&9zIcgdSb6|@Z^9draJuuMzOd{uPiGixCZP7kul&W?c?3iPDK^;9Uqm+c z#m6Q{N?pK>42rogp0JIxE(nb?MDt7Z&$2H*V<}@(fG@OiEc@ak(GIr&-({+3?2C_X zgZv}(nHl@DyVut!p0O|frym)Z&Unle@rF!eU;Lf}Sat+gkM}Ip{~+1e7yt1wVz)-j zE@tdIZv4J&!eWFB12!SvGsEV-_}4WNvIy8lOMK5nGJBn?fRLjgT(k(0Bx7H^$W&SSWaAk7;z0qNJ*CiIh%Z|;k?0I)z$zZ->+E5Pm=xOHEAD}4Md zFt4FT{HO1YrJMIdo+pO0?C2*v3-BBU$J`e`hE5kna7jSrh8j)X*cX4Di^gH>~!> zeI}`W@mGM}yJ592-t14tXjJ6shhdT*X2NP;+y~hg!V3W^?uOOAc<17r(Gbe(0czrg z)xP-ITuQaxfCji>wJ(0}s1iO6P=Xs)`{H}wtJoU>?J;0E0vY?_(e0Ip3&3xfoR{vp z3)e<<-y3>_XSijkH1@^Ab27=vOyAkGa*TcP=`A^{N}Ml&S08TC$JiGiQItte zd*D5+9AjU+>KP?xEbtjgIBH*f$#%tA3w%csj@lO=@LDa+&jJ5+xLJH^Up$RBm;2&R z0lhR~V_*EzFzWv(#q{48xwY(z7yME+=}6$kOpYvBwJ*N%Th%hZ0^Z^qYw4?f@r^rG zE%pOGJPAkbi+6v(*!N=*`YrHfNzzjL;!$22TS1)tz<)|2N9~J09xq#ib{qI(lXKq9 z>8sIMVZm{Xz^pgIQw|S^WA1(NuoIjm(l|nI)~hhWvkE-fYG1ra1349HEx_#kIkvGc z-tYlu+8D4BMpy=4p{cPio^S=&S`ZF?N>VLB?Tc4w&7`Wof%(wNP869}`{I8rl$EO4 zMq(K`(n2H!RZ*#Z@l$gZJ3p9}O!oQrR<_y~&-Rt9Xss2PJxsRP7k}v{j&#HfQ^c_# z%`u5$U)+OO$5G{>N`Dhb$3}jVEtS677x!^$vccW}^P$O(iZeOSv=!OaC~w1b;Wx_Q zWOs93YIMg!BoPX{z$j~DRQuxR3o1F)fj1lFnU+k@*cZP?OYxo{^fO52zWCXXAWuN> z>`|UMGxx=h_hxK0pxqYOx-b5$EMsSYU$=5B`{ETAarPXzKH9?3V6gsIAKN1Hqv0%i z*ZkudVh5OyF?WF1+h7NcfkKl=shm_SY6mz49mQUZ(6t6)*#Z7%3cddU&`AU4;S^i# z0Dlj=E*k#ZKp$Hf)*WDJpwg{@z|iG#pEv86q&vWGXu}0au`x+@fYol+6WYz%{9Nv4 z(E~-sZWfiFqwW~@ZWdY0|7kaC-As+OMVw`H!fy%bJ&0}%7`s`Ir%L!I3(UI{$Jov4 z@kC>PnmDnQ47Ho}WWL5Iz((WfDk>FYH|y+ajgi7xOr&`ADH`oD{<%!!t@ZeK0dCh)kfMRdLJe~3&L+EJ*OMre!Yh{{|oG$iHEyW+t-|4 zoa={4Giba43-M|r?F8Kbi2zh;yr*Q>^rF0=nmh)kfONsf>wiFuG4V(S+4TTB=c8!oh%Y zx?#1E*83)Bg$XVNsQg5u*%}*Zm1}ZVmf+@q+PY(_jkI@|W&|7uXt)U*8)+$aFe&_7 zK#NS_#ztEEUMlu3KnL8y)kfOn7Ye=%=(-zL8)?x#8l#(I{52qbl2NiH-JHtW)-z0U zG6BzRa>}_mF~(r(qKY=BV3AekF!QP0tNS|B*aj2|u1P#bA0$8ko3EFTVh%w)5o)JEF5i=5Gr z%NGG!?uOMyT8U#y!vla$B*}%^NIUzZYKC`!KQTloj@n4eb4oRI=M;?QQ>+}dkv0m; zWnqxy1zu!|H7&J~Hsx<74U*cxn zlR4Kg6ga1v1*|sGLWZhlk_}L9 zH>@_&u3lAe89>zxSd5J3Mp_4lN}(O_?o+K=sExEV7)fdpXAJP^Q$2@nb0h7m8k{vD z&Kls`lcc3K(h6Wq5uCHYf3tFojWq9VOs4e@@Q>ECjE%H?J(Zk*X)rgYS<_M*X?b2K zP6^n0hPV9j2MZr#8|mhADUmpphnQY@|&(4QMWcmrgUZv}~kRqT75 z^FGr(R>4;^&Yqe$v6T$93VyzXGYasbX9)ia^f=RXJS}IWd=3*aJ}^W1Dt;03FIL3M zV1v|~p;o(;KbesDj70H&a&TG^4?f7*1W%4w5yv4UQ!08=-5rGszgYcJA}s3kRz`bM zAK(dZbCTA~YCmcZJ?p&}!H4kE3Iw?iU#=Pgk~SbH$dc9%P|xhfXb7T8k$e7gcGpdQAt0{zKokg#fgXGqfngsjZs)ZR3{*nO75!gk5v@-JAgy?QssM|*>lbnjCj6c~IXA7^ce0)ubKSu$Bp!{CB%*XCoMEEfsisV^|6y5PIgNv=0%nsH_D zeJXFb-T@-h`rP1f8rAv5h6O-;iGRmvws?IZg&O7ZLB-8L@3Bb6WDh;YxIZ44Q=r|n z=`2b!Y54_=j-LVJoP~y(<-;`17Nf8f=qbj1hVqR-OR?$mJoGlk z7a4%*1=>44`MnG2YE!bgZV(+J}{A75_(!!DaC`3t*Z-;imI@iLrD;{+Hk zTTI#_2@ErQg@_LnT-s3+t5qfDS`GSoi^n8a za%}Ews3em2gLIhW6(oyS6I|P|^d~d-O_1)}xiz`5V__yU_e*nNi*u~p0fpd`2Dfxf z!4Pjxa#4^<&9TcCa(l;vELZ_aZUE9Np4>$dY6bUj?44og+&w|+>&Y$Teva?pX-Mt~ zAbse`O}{R9n4{@YrBz!B(n=4Ru2}GUj$Tow=DR@J>me7UYLgv}CY!2V0_nPkT!dxM zaEyO!mK}&1W}Iu286yXO=2*1~Qx?g2K`QJa({l)3;HWd*By$R^XOlD4vJ%=PYelfKhYhx@gMgEo0?I%Y95BQ(6|*b)XI3&8N@T)W}god@ZrqjOV37rzap z-5%{2{|Eo=Xgtk||3SKJlcVS%hFAaU0w_;`&G4y@auS9F$2jYKWvILqo)h%K>G2eE zZmNq(R_YIW<4?^J%u1$qgBE3-8-`%ubpoxoFP(8pa6{*fO-dIt7UU_u#Ry9~=c5*e zF6B#*zxI_9Fz7Z)>EX=1#T2s_^xrEYhOP8Y_Bb?4!X6}rb z48uONa|?N*v&%nbH4B4O@-sX4p~L8gna-_`%_GF>ft2jYE#$e*Sw{_Zg5>TX^|o_o zT0r5;onyX*;L$)&wsM;NFZA!6brE_R3qV_G(>Dm6Z(|4VcfRx{Fxx@fW0zcj_Y=bV z<;UtLL;fr%ckJ9rwu#9Nis0~oYe&qvAs7o?_RoD7H+UHH1neDZN-Pbgn!b#Bt`f#d z0lg}j65D_&)tAv@;&QJccuqi*5QpZT2+rv~+$PWZfGKNCi7P?h>?=_i<)%aM-he#3 zhxr>APT5S0rM-B+BKUMb^hmz{3)*9gt}=DG4^qXzxjz9DI!~#%dFhPDI85}xwFBET zYAg+gDn3jqs=_cVD>vpLE^{;msiRGnMPAG30^c$GXJhH_U>XdDNj6g@-=@h_<2P^? zcDx3=cFYIY3g6NKrek&pZ{uk7iQX*l*a`YC^K9Ge4_`7o(J210?l8v%knYb*r)QsH zT?jrBcxZvi_|kl(V&|vB_!9iP;8TH1cjzh4Q5H;f=6erDIWSaZTGJbh*8>Y7Y;m*( zLswf`G&L{4hk4<%ik~nG91ik?`QFW7vMg#+)nu6u@){o&%_p0Ng8vE3`h%f%f_~WM z5tqTUu_!nwLp7}ZS3!U5%Og+5GOa&}@+KNdZP6{Uu;XH1n2#)Yp#wCpvgO+LIcs`+ z&V%p)TmFKnvE@tQ4ps6MOs<&|N|awtq8c7l(ey{>SB^-X9C>hkEnqS+>P>C+6A2Rx=;!wG73Y zHW=7Z7RBeG-erVl#wQ@nx5&nJ<~ASd@p$Gvxc(N@?YkQdu5F^iOEYjCEXEI^7X5^@ z#v;#iP=nq5>AF>g;*z3mB z))kogY&yA38Rm_t(s0p;SU^gL7_S>s5jPA)g*Vw0`$PLG^rx`~oBE%{=`}SS6|<=` zqBEsssdJTHQ&bB?w%0`^ZR&FYLs7;3CB~}l$%^-SY+y6}WU5_Q6 zzT*e+ROsRd4&}}?q}x&qus{BCs7#AwH+k`IRsw!|?rw*ghCH+J?^w>tX~H`nA^i%- zZ!LoUR9G#czMJ896!$Agf7;~r%&f^HpNt3j8b}Xq@(&)_<1Q?9s37Q*ZK*}&F{lQ; z2~{xn2Vj{uZ@fNywbW9&+{~*93v%Amga#x?nR$Bcawwlo_Zf!F)=bL9_Q&WQ^gN?wl05Bkf?e1vG8`p%0Er{<{-dJA7U`gGf_&W12~qbFzsZTd5z z^C;X*?H#eGmGKd1bMQaL$b)4^b4g8oYt8Kw*%E8%(Y0%tXLQNiEZGwHQUNC6v&%e_ zux!uB7PDMao_bN_g_3Mtc(Vl3BA0uleIeuf%d2`n%cJF<2~)nXn|rxu!sG|p|J#JQ zcc(*@MxH^-xqR~V>ITcbCd{LMYw~O#vQc%p*M!+A*r_(!baIIxzO!*XTwz7ZgrVL-| zEq;QQ*4|5+ey3vVFFcER<+K&ndl;+OVP5ZHSVr!74ne)&oODK61+J@5sOJ3aaum~3n^2;h-)Bq0QyafWISKN_@&)-hl-32 zDA>|aL>TXZ{yuq{GJ62eF^J3&uwb8|^3t7Jh-8_E%!3Rf;{*B+GE@}FJO_G@hs?7I zBJ&2ke$Y^DS>!p8uGqS1a*=>z5H3fA8!MFxS!wAfo@l^@6!4S|7=)G-5&1wbveFhI zTfoAx`W<-rKzM5{1thU-i4ex0lzC#(@CJuu;pl; zhir>R0j+bI>aGU;dp|jA*dVV27&}aLe+T`vpB&z_iA)JNiC9J2^bzRJRX%b&?tqI$ zWn1xB`+!APd3?a?Y=CUz-c>S{)CHxzIhDvqDphDH?m~(hI&ziiJwy$sKUJ{kRCLw{ zD;gQ987PBkKwry1{1`Eq95vX#(nGM+O=QMwZ+)*_$t9~ibCtaF6x#Y{gYwUMw=KDcj(m^i=3t?a^P}BT}J5S2-xZ`f6J~r#Dl6;ChG3 z0!lgj8(VDoaw3JP|6|ery-RxFc3bTkxb0=Sd9V{%-5re2KzaTB{b2556d0lJA=zQ2 zal%gYdGy(qHZUaHVXth?C&qut7CrC-cy5D@@wIdTS=V4yU4F~FGiYRdy@Yb(d$xnUCpe3q;Ti~We zU;FZqJ~aIpi>P_X-^t>OahwG+6oWG;FS*G}o6)n;jc9~TA7}+*)_Nr; z^zY~&ccjt!E3IIawP_n+ReRLonDeLO`gUJWi-i{%-kX7v8J_d0kc!TpAL2F}{}j^t z%v-Cp60E962^sB@=n~GYgR2k~xbC+00*|eg&jR)M7e}-1@AT}n{}=!;Q|`bie``|Y zy7Y1urH_$mo%L>~_D`ahHZj<@3qRDVzPc`L)3Ht-t>w9wBwFj0@doXu-`j>TzO~M5 z7n@HNjDgCb6OO@I<2ahL&RnzP<;$ZSSp{Ed29A2e8)*GESse1c;0DF$iVr(Sjzxbs zqYZuBl_fP^*^*e@DFDV(u|ESV66|LvlMJKeL?r;7_JtbDxL+xzgReGq^{vR^SP!mtG;3Bqii7z4@ z(#qYwNz=;F?S4RoavH-5Y2BB9lU|KHGn#MJj6mLkh>rUj>)q~vZX0yAKfm$5BR4*W zxl-!3$VTfb@$?gIU5~#>Yh8KKF;{uV-se6g z9Im6}*yMC7Zq%-7amcRis8;0Qp;4hF7H8C_gLl}FX7og_4so#OYfseGT(lv*hW7Nl zZ;R_DE0}pT&#U_cW0W@{c3GwH!r0P@je4pe8ugby>ly0NhIHln^+LfXH(0f&Xe5r) z?BALqd0|ZMNshuxrSi8NiYFLWvN(93!+7!rIo4%zs?d&+XB}#KFGIDnIBHy?OMZz) z)*gNBK7JJ|(GiS=_bd)M(25vIl>5;Uhbs5QMV}xtry8vvV>8>tKZoyZ5t!Ft4|gK zRSDT>v2+v`Mx_y*s$|Eu_{~bS7@jfHea=XA#x+%J@Vg)Sos&qqw6$N}9ZCtTx0(!Fa z+Gzl*5i2k3NCO0y+CA+Ie~tv7=g;|k@^hhr{9J4$KbMEd&y}h8`QGTkiOn&<4pAYd<;ZRX!e(o@&!fn8=D&L!~b4bN! zxOUSVLMpkz>!!toRE{rZ-k%MrRu+T9O}hxGUI}2qSd8qDcB8J*dsgZ*>XMu7)Z@tz z5IVGY=uqE&Zw@LwvTBcA3rgpGzw1-uYM3@+}TryIFIDr%9vLCeSZajS=Is2kNe4y__(ff>t0jNeb8U{ z$&om_fpglIrkrSWY@W@&a^$u}va>zpup^90px3Z?JP$6!-!C7?K}}Ju-kPUvW#kr* zt;q8T+g85www3+fwz9+9R;J8{L99W68(3%&Z(G?qhxfmM{?j5EFMHd{?wJlX3MAt; zl859e=WQ$95ZHc5awe>okw4mG(^lr+cc{vgSsbKbU``gvQ9<}qz$ z?{}uU&wk`tVZL%qTM3lh|(3Ab-n6}aYJ^?$z=ni^si^ua! z%F9+LD)eb{E&!c(gR^umc(E0`d1n2dGV51H&Wdjcc5NpxylF20vPC>}&k=(Xg17!Z zNXRJ?o{kV58vegXh!zR2H*#2?sn9>KL{J0smcs z%+;ZND~N>fZMKAo9vvqBXB|e14xfJ`i*a+0gx@_9e*e!B3U1@ zX;jl&l5aSh-jaCtrne++sOc>gUxS`q4QYaON=OJfG8hON; zN1}VASWno^`|mCqQpwnZViH?-rfU+6oh*|GeBv>Q%uhTfk@bnkB-%6qyd8z_!M`KN z6OTzu<$cnVz+SN^Mu8_DlX$e5&!9kZ?KH_gCb1QojR4ii336ew6r+S0J3J=Q{EVUA zCrb^G8`&%ic6dypbv31>bOCvwRglqtho4DISO{e%fIiFSk!<~Ucubum5V27^}XJmCtPQ3&fQ!UzUisVBQCSH+SZfzFKP|IF4TkjO-8VAxYi|o^_KhK35z;EN9M)DU~9#TTfJ)UkoI>t~9$l^d%Ui#T$ z>9ohwt#c2UQu2XZ=4VTf(tG^6b?WOt)C0Yh%_G@L@9}i&gDQrSjH%!mY!&CZ8L3?S z^kCltM+}+2+WhjL=C74J|9B&WY@wja&pq?k0to#L$Ws=3e?Wgx9F9@}BU96*askyq+bL_kYUo=@ ztkr;&U+sGad8c{Zj`n_+@8@r1=)~_!cj(A1NptAPvnO-taHEzrbmTs#Idp!8qik$O zu{-eZh?33ydg%22jPVb!=PinnTgZCo?3oM1-z4od$v#78EN1VwK{c|2oR2I8DPiib zo}u&0O?Yo)sSI+G&GOl=o}pvBZfGg(LGEi6Wc2>kZ|Ed}&lm&xG@D1V_5Rf}bXo^F zlw@21p0!qSDvEDlMojvMpKja_?6JLGZ&+$kauYp@Z(&A^y9f(5GNA3V?(=^WlUQ@3 zubs_rqpxz&Zd)zbYe*>H@PH?jH@8rjp}gKTVTSToJzFT;&QpuMLiv^)!NXAQDEvFR zd57|{0cr-&UsxogpLZy~y{(}d@l~_$k!&T;5bscaS(Kq(Bl#GTGaj-T%8x*!ji$`U zAib~)w?g^vUq+`hcl3Ux^6a-1@CoJlB8`Zs1bU7Awg@wnUv%FT(Hf+#ej?0Jet8G8 z4kJLHxZhOLsJ725lwZ8XEM@`dD{VQN#|-6LwlK@u1^OXBIc6w78>}Md8t4!GF`!)24`VAWiiXVcJS^1+xyzL0@kvX}o#B%T~5H9J-kOpdYj4Xdcs6Zcf(Env8p( z|Klgew3P;(m6j8QPRo7BSB_~bWp0{sDuQ0;kgpumRysi~c7*Xd=v^$HbhZR27e$q9 z{-rp}fBu&4(jZT)&84A74$soiCx>Tg7?{JeG&C;(_$W#}&60=a@GK1(c=P-ou>V*T zV{8u3(!f3KMmUs+{mmr%EDc5B2~S5xqYTK^$TCR|QaR*V8b)LGpHG$)kUQBd-yQNS z4HwbIB4sGZ?^^{K6At+;4VC8r`#I>VY#zxr;gDx($X*$)Bayqnv)3xl^Uztjcw*7( zV}`?$b~+2MgxdSk8?wg7C{hxoD!W~^4E_W*bl@j*KsP6^0^a0LKtL7J49C%S5Ka#u z&|N1d(;pl`~X>9UI=_9_bFq^jVFq?MLbt|3sa*ymd~ zl&Eo@qjr4{)Bv&z>r&&WcS}gkRI!!`9I=$%;iykvYjXDLAh%(rchkuoo7x@1Tgt_v zqgJO1~MNg+YSOfqo5z8M?X$G%_Qi^;}$*4Lr>;Z z(Le@a(c_-Ur5)#n0fMgSK^L6GAv>Qb5gjawp3VyP%7RQgnG!kTxOa6_!B;suE@#T? zPyO-^TLH-jm=gKDU*3^3A^9;=UZ3*GYgT04-w^Pw!N*gNk1L;!{hg%mWV-`5yrk*a z;#f1QY%#cbCNUj)kh@kMrcLtD$aJbP9VE?@k7O4caSmEh6qhN@ANkG0%i!kw;BOy-itD7{7rTD1EvdCOKOc!a#=k_av(Z+Y=O z8j-hx>;n88k#vn(A~z0>RgF3#;a%8wjk*H<1M{enB;aS{eMRKPlDC;i7(w3V0zM~i z3jy21->=bGzz9UCHTqm2cmRH7jlK}0DmyZFNP=G#kU96S2(6A}aHt&9S;{8k@HsZ@ z*9DmNEyU(!njn}U6Thqw(^Zn*g`c_E2y*jLVUU~869e7cfaBusogg>2HwBt04agNG zXuf+I`b}vJ@S3GtoW>lT8}38Ra5^71mH(+yLsS%q+Brvu(Y%~}bv(K&?Q z*Q!l8-WkWdbqE)99%J6RgiAUDm^X=VdFO}lA8XblT+O+6HSqNbCpnKi1>AtjH*uaI z+>r1q&UH?Qs@a%uQ|E(7;F}O`<{Z)oa8ts~o$C-X*KAI>g>!i-;MRm+b(Ve^JZ%WK zbgrVD*9oUM?@&$$!mXSGD5n$Q*PN>;rwifM&Lx!dCgC>D5|q=6a9dTZQ!ZS*O{M#s zHV2G;QGB*Bsw+tE3_Z;@E{Nt0oyq2^Ld-G&rGziY8X@qnn!(w5$MeItwauQrchPHhBu6DGj<{mKIq3XmF zY~!w5@e-I4&On3AaL4OblF{D0Uzc90Ze>}PmHRR{>Q>1Fo;I25)?ACCI@|oU_Imhh z%UDqEb>OI5r>f>}bUHw9xzhZNWxti?PbLihGvsg52RxbglP8~Z`5Cs?8l+XJ!%hGa zH0j7G_E#q}$i#e{BqrcLi=Q8j=!c}XaPWs5&uxxkPgzhGE}P+Jtu89|QXr7s$yvaI z3@7pp)~Awj#xR^McOu&huqYi;biW8Rt9sv&&THaLL9K0XO+KWuVV91>TJmxdM+)! z%ZIFHMP~`pSS|mGY%w0QG2e95IA`fU)|gMBJLRg&Ji@z-4kU8|RmI+68xLd~4?SlU zc3#@_3sP3IPP2U|rsohw^4B!@@6sX1a&oQvl2m2?IlI|rG1DSxfLrG*cgkz!Z%zF^ zlU&>>=<%Ud>^mg2bka1rd(dk)V6o98^(D*=g{DbF5V@PkR_D`EpHIQ-?&b11Bt7yN zDms)7+0^sC%@RVn!?|Ry@TGJ)o!d}(A2>D>&4eb74li~BOL<Mw!!S0c09$k^wY!SkNf@t+47moOEKJ zmjOe9m~-j{tA)kfby=TGg|b%&zkk81p60@gd`+VZ>f{s6qW zjdix7vgF3jc>#2ODfNgCNjI|?`fMW(Zdl&WNh@}28{a4-$K#8(l+R0oK0;a|;*w7n zg}jyIP)WrT#9ugFl<74|x!X0!T~AV$2?HlafF<{<7U) z^C@T!vzD=uTa6Ac^Vpdm`s8L?t5B}1?gj}x!QtdbS{jtq!EAQI<@Bl<=&lX&HiJxo zZoX*$o)J=7++#`kKsrd$_lzxqnVx|9&KCAW)Y7#`K%Ow*S}ow5vH-sq@U5229iGBe z!`yEc>bTv)GW&V7HAf5DdNd7~Xl~s7_#X{ya*l#(88UDp&oh{M;r6ZR5NI zUEPs{KAL5y=*ES` z+lVjeq}!XkGvprq@6UGt|MS=P=x2{c@R|Gzc~YFiG504Qq(1GHi<-kQsiQ-S0 z5DjNwV7LOv-uRXNpv5%hbNHB&m^6%-;_&z!@OU>GDs$skXR;=@5f?XZnfw=P!nfcX zr?AoB11W(0JRD*(7VwHAt(#evHXG&VbBpp@wqAl!h1OjOq3c23pKR9#R_f zMHYw35VIF6rYj~Nyb^cJ?O{BRX;vP7>8&lItBf&?@4}Ui>5d5WB^21gP)!CzTr*wF zV%L0pIj%*@y}t%{J}(baVzX=33dO$Coa}^V%DsChf|3w+r@PM{Lp2Sj>aKRk5IQv{ zdObOI17K%lGFmfE_FOvM;poJigdNVr$-s*@9?-n+fPN}DSAL1EE>8kJH_OcobAq7c zJiV`R4?CRvW_kBgaW?4#Dkh02_SCl?GKd4+ouu`xmxc*ijN^VP5^$Pm*ri9Ojb z6+MZ-cQEjE=34sfNJpRk*M0N}9S^%K*)lBK4YcHN*m28ng39@%9N;WsP|hk?*;+;r z&g?8(4fsgH(N6dKz-LXk!LhLbt7FS3$}9+7SDY|Sp*X)e%mhfP6X?!~i_nk0fkCz` zKgTXLagL|d3SOmF)TQo0T-UPF{2MGa=@r10*WBP}OJUwB`6b%DJQZ+N@+YAf&Py^m zkx?d}oWRmVLkA)Ti%$tJd=u^I{LE_4lq@&E8B>{oU`!nuA4~Wt!kBdkRRWZA6sEqE z=^~GRRO^EIZ<*@Wy5(bua%qkSP8OlFIZwBVo&x-KBQQY1 z>1;!A^^tKBJv1UFu|K=zBYuWJPke1+UuAL5)xSDan>cgg+k;8JP0sotxc{C7Fn$RY zpwykWdX2s@W!9!_5TbmXH&k1hu9UM>J*C=aNfzJ59lsBR2m?H!1^Xgz+sIdMn|n>X=bhHaw>x?1zP_!vXA%Qfh>*>RuU_L->U(s#B(#kw+MKlseA7hHAQ z?6*U=eewvqXEtb9b-Xnkk}Ev~LrlO~E*C%Y+X^u=b0|(Sm-c{K-ME8^JnJ1xn#|@D zuH0pV(PW)+-Lbm9=}07Ag?@)l z&zwAF{T)svT<71bBCDg5Mn3Bg)i2G~<;K%<;!OU~UN3aUrkAP@M@<;Pw z3C_M4^2t-?i&4x&bd)@G$z2-7RIc$Ke|48b-u)EfrmefnS*jq^N}m4RT@L5Kw}AiT z$Gh|!R-%oPXY9O7zhMo+p5&Ro+~rL6yfAoX9lXmS-*ph+*?->UeY+X-8|Iw6OMhY} zhH&y+;!~V)s{nsWe0%4pQQ-OPJmBumzF5w56tV#;oDUqEvt&pRVxUKPfE!V<&rRs{nn`O9B~`_^5iJvgxU zA=pSsK1F{>X3*r*JMYOvUlZ^d86nPtN1^gr>7C{SI&@RX=h&Me&Wl)HlFu)b*_0o| zNWO4OT(Y&8S(7h5xW}dy*XvSLC6|zAa|!e775vy`vlB76yLuUA>%C;)HWg z?ml8d&jiB#lE~|#fI#;UNna)P6clV1I%M4pj+pt(ALH!6>eOz>>a0ab z>QruWc8Hw@p3od08>(Q3d<7pUHK_1(%xN78I02WN8|v7pA{!|5Vkbj& z?^I(7QOxKF80)#F&PBLe`|2xG-oph}%;2C!lu>;+isZ-O`A=yj_7 z7wh;b*6&VrPG+^L(5dQPy9%A^=6z^Yp;LXYDs-yksY0j9o+@-|5dF}qLZ`-76+)=? z2srj1b*{jU4ebr%=-#<<6TpLJBOFfZT(t<`vX{R!ROf1aq;FyXR`19v{M-zow|e@wtW2kV0@G`^s6ib}O$lK*at*c&BvrAl_6q7d3o|CdHM+4ry^mh6y$y& za8rSa4|G3~bWLT5nJ5x#RU%QNKb7X0R+VsaRh~~HC4E?xcXmcsB|J}v)2k6)QjPFz zfwu}AT9ax08ca9VB)+I%`2LXViImrqAm6+S5^Rtl0^NMK$dyCTd~+*MQWxJq!eYx0 zh?W;xzSczi2%)Zef|yW?DLH}!4L`02;TMu>xK=LepH)(JZ=id1PlP+Xt0qAf^fN z<{Q%NZxEBWjRdS%m0WR8iC!#-TePYYPo=%vQ1~tB$75}nk~_$KO<;}RB=8)uvsVRv zDq=eKhL}Mj_ov=W|CIEKq(2X);LZXw4HQg}dtq8hVr(pOZiEFzkFqz;!ky}D^nJl{SB@@?0LGu-!KuKK>CCd|O zrmx>7oFYE3cjfn+-^KE)rX4Jj-&mHn9YLVNmZ_0 zQqbC=luJaA`>v$zM13c3fSLHilBvJIS%wkjsaGzZnHA*DG?8h%q%TX#6Gsz-B}mdh z!34Q)Od$TO;7>?;S1<mPw%rayv9)1w()d651TNE)k26JYz z%)0aC^%ON~L1&0Ad3-hKFCkCu7e1Nys((qi0Bcz`qzW9t+}gENZMcYCxvsT^nC`Yb zUEHZTU`bek1>G11>?9wuk%5{;P%M z%_EEH2gZurpjU`VHso2ialxj`r94MO?{)Zx^WO`Cdj&xkV}}t@pj)Yt;d~k0(D$^u zl_scm8gF*#t-2*h98*9~(se=jN%nnZDxln>k*iyo5a8Nm?pCfJ@(iYos6e30>zyJy zQFgb)WjcW6t&naNn}Vl&yG&@UY~0fuHcP_(MG3yhpaL!0%$F&`&ZrRKXrOlHrm$ z_ZL8>*ktk4-fImwZnU`lx$+@TP93s!MI_oo?!`tp>tdMn$hA!F8cwSZd~U)yoJBGM z&OGn_eN$ zw*Z@6c)y-us5i9>cjp_W-V_(kT^kWcuUN@86b^f@c*&L<%T2Fb!kaGz*xc<|a85+| zy|sixsfOw;5<>R21QP+zD*WM5sDhV56}%LxaL-Gj z3L~7hLX}O0Y7C)5C!}N+k$8g&-OvhY^f@Xtbrwpg(jQ=G4^gOU#{f~NTD<^Ep=#X% zY=x?MDOAl%p=x6SJPK9I9AGO{(^TlM*Qrpi0G7-m5{Dx(m~aggbbqAoDnBAqtpI?b z?fK2E)Y|v7LUoSW3e|b!QK*iWLUp_psuLOLQK-&*k3#iKg+i-Qp?{=g7Lk|<84M;| zvjiQ03-FgU6lxdevJ`4p$z?0l&P$ z9mh(VI$#pO(E6g#z@b5+(4dY%mO_Kx4YCy)ZQ=2LP54dZI;uTqr4Ov<)zT5AH5VB)gahb=si=RTjQwEQYo25Bz{MQzS9b6^hzoejOaaeY*m1v zdqtsf#WRXR<0CU#3XLzF(N<`@mqO#c6dKu8P!sw*)dxIzWZ)ib5a!s1=&L*j8xr4v#{Uy%d`4rO@QFUJ6a_mC;scimA|; z-c;ykDVaqi9;ZUbwL%(wfC`m4fl{V+02msTg$jM#Bt#UNRxZR+Xj+R9TcK%Q3QhA; zXj;Dzk3!S_@hCLIRA^yID%3iJC9{acH$(WAXox7J(H)Sw&mnqBoq3lE6`W6nW}Vdv z&E9P*H2acAq1j#v&Gu4gw(}*ALbE>%u@(B%RA{0s9oMB~7LoXz3O&~fY4lwxR1|ST z>Sv3&^#}N=6NYJZJ$l(H}aV8{db)Tv9vjjzG7m(pLalMms_FCfdUGLUM)Q%U{u zduCWX5a2Qi46~;umVo@;c6y8Nofc;5$gW)@*?h@X(&S2OryyGVWyGM9C&jj{o z;r)X;{35*1&>^Y63h!}@+|$B4^EkjW!aMgYia0C0e+MDkIpN(&-t)q{ z{Y@}j5Z(!gfxRfaEAj%oB)or-_p0Yfqbl%G%%`=K<1GT_P=K*Sg3m*W~0{ILzX;9P_OW>gBiFPnI$P)NkNnFIwp};8c z57Gkn4+mBYTmuUnqy_SUWzyg%KCu*mgQH{Y*k`aM@M{G^{B;UE0RF*R;Li{>SPQ&% z5Lhjcj}McEM0K~L$CC2(@2Lk)``NrB&hf0!0nvOL(eK<*A6 zrUmi=bkaLfe_I0IiGJMHp8_*KKoA^5jD#aI3haScE(3o z0^4%WSo{DAECc=#THt3l0BV78Sms7(fqc-O^lsE&mcVzT7uW*dwFFMA2}1l%3cLvZ zceTL3mjToQ$4vvb7RblmNh729+*<^Wj83qf;gOcW-#dX2pA|eI+rd9l3mght8L0&} z840Ww$UP28qoO8R0!Kyfv;~f`1QuxuLVPz0{2u(Hw7`M00BV6BwFamKazjDV=%|yH zz|qmK+9PGOB`_3CG&=rU3Y-r9(OO`hufVPa{<#ZSEs$F;lEy@F?}Z2)6J6Q1!!ee? zr|*Ff9|WF|+~6Oh1)eSgtQL3#PQ(~3kQ+FX-isPx34AYlwmnkbvjmQYTJOcbMuD}# z|DG1uKPRwS;HwLO)dINrN+g`mK%N_MDGRYSdyDdVlMM@zA;ZTIg}A|y#V)+Hb23=0N>W(9_v)h z4S_LZ`xq)i%!X^+V_ozd_gHV@^CRV^w2l>BkP}h_zE;N+Q6g*zu&tiF6qU>e?i+uHoosU-J^#9W`my-c@xz+=plt=#-`U?O*Wm-xbfCV!WrCM6vX zl>uQF@^&geh2?hm4Pa9#cP$j})J!VB5&1hcmvVweST*ikl6yL0PNuS)YCL8zW;!36 z#5gCj#zlT+Iki}06cfs=5z!O!@}N0qztu`j$fuuS6kczr3HkXT$n8AR0&oG@gR5Nf9j-TAd2$6R zwabVI;fI!%$ zmzV7PRCSQMX@ERH-XhPXH_P+t9|%`42)7U(jp1pfLGI^^i08MlT-`+QpVGkmmYQpb zAo58A^NUEX34%B$9Q=ZoYqlUr3v~0yOxJQj@EFkqK?Ip84}lDF^JvXLfnEHdT7rOq zZhrF8by0Hi#K;6e1W6j`ek`qWovq@|!Ge?dKtGFs9UIC{0zR$Jn}gX&3v%;VLDX_N zMWu?eJbT7fSMunfs(o=iI8k>0GuJT zgR(1QOfRM%Ny=l^g4|~%<&kB(jm^Ux@`=aR#m*S&Y#atf>tKXnEisWAtuJ8}KEgw< z#~JHxDK%vy);atQ*<*BRsnlFtzIgFsMC-k;DYXvWnt!~pysT0W045mYjlyuB%VFNA zm8G@O%Awu@Sgp1D6^B{`Xv8?9O|nCs*h-PZ#~Ve8JJe-dya1t5dxwhKrpuDQ5kDJk z(A9;uNr5k<&>pCAt)2)PelfbQcBtyR4H?prO8*&ie>MIt>`;$(X?#5!e=^okkso$; zD3^Y=>zMLptLA3j(nA_i=6xAn358?dV$wvlgL|` ziEw#PE|c^))D>>Ly!&K6`G?g4|E4e8*E{7TXKDlE`A61ISzwH^~uV7S8uakfyQ`^dc zZ(0N@#-kf6fa6;;UznYb*t$8*ilyYx{H3yE8M>XO5k|9&G>1mzownbhqIdH~?-)*X8tY!~tl;QbYWEH6s51w_fGf-O52+-ZYIyY^``xp?NX7^6@+# z@0Y=vH^t^%7XLr>>O$XMUFh4Z)@724=LvgXnx*8nOF0$q-;I$c0yynR(>~_80=W!T z-)!3V?R>;G$Ys`Kpfqh#T9|`lgnxmufN_~1=Mo$n{>`8-;T)l!5on5x;sgy zx6gMO3I-&(A2cKP>#9u4VM_JR#aFa-VfpRCh@EH^_Ji(6DJ&@2SS^?BRooa%bB_7o zTAj@zo>)6i>pWhkf!iO`)5dqq z$+cQC^E5=m%-qnfkW?VAp^9dI$*F$B zg+9ZuL)3>e?z0`z)_%XnVbfSXXO^$#}+PtD(}yD(nx;4mtA~YS29` z?N?hGu|4y7%?=#@dOj#;&IhYU=m{XvoB-7k-IJtS3n{q?>opprS6G*NNO5dJt; zLFn;(W=oCB=igFar)*n5sp#9J^wx1oAvAg~gH?a*07@lJ_#UNhf7a6%;e|?Aw z=&EPI_A0D3?4UQ8x7_vDkl3LG{AR&YpH)<9?Op!~X)*XBf4;+&CZOMAb4Bjb8ZHb7 zlhSBN?0rl0=|{pJLB+Cnl4I1h-M{6zOi`t3!#swkDY#@oe`kfqW17y&@<*m7{3>ZP zaP~CwN7(s^ZC}vTWUA>H#q-$J4+i=B20s-{JJtJ~2x|ETdNQ?r1AUpsHz>suT1O1> zuhEl&<~+@8mWyXk&x^70G&S=Sv-319WTbO4XI`q4rIYDbQe}{T3lTf2kl8}TvzxACU-U-nG`+F8(7*S_=0#?2#Es-Sa0aZd!sbXmUdXa| z8LsvuZ=8w8tiftz>MF;%Cl#LSAS?$V6k>6EFF8~V$jM+T)52DU*v?i7l?(fn5YFN` z@UIrq1OFy|ol}}*2!B$@oV5!hk{*X#*YEfb3}UAhHe2K))7s;&APApj@;0@3?-%B` zlMgynz!!mUYSzf)C35+fZRl^PfCYi3q34#HOH-QYd3!iM?f&u-mtUa28Kf98gr7;#);cQ+%(eHpRG56z6!3t1QI~tAp!8=m^*2uQ zb8CetKJ|b@RRBvZQ-Mmh0>tw4NKhRtWGB`V`O!Kx`3*fupjK1w}a!0|b*SFUVYppE9qcEO<5PaKT z7h;2oo84K{G8Z1=Q54vRxBRCqViPU?XQnBK%}G+K4X{0L`G;1-j<@);3x86Cctfth z!q2=yD_5WuTJcsIqgozv-R73R!dr`bt-xmEu>jGdcs->q;G)JY|7Icfj;|iz-wwNu zC}F6AY50lFRl?*?GWp|2Hd5-3oBos0$P)h_C!_7UT~ru91-=l{vYX3A9=i-;cUk(3 z%wc%upaJ|MILgR9;gDX^<9YV?<$?Y+dQ!shd=%WAi~5)=a~U2mmcOK-z8>g53ldws zq~SU2OElQ<$a@x?_Q;$Cd8T;(G$juxX?PB)GE3%ZUMv{{g&`=98vo&@f5zP<|9c23 zE1?cSEx)AH^Rh~8&Cr9erPRNBWSf0G zvdz98nI}Sx=Rxle2l$8hn@jz>ch%pFeYJOGUNzC))c{j&`IA|2^{y4u$2I&4z^@Q` zu9VpjjnEK{84N^b3V6PPjmt7e)xea8VDQ8Me|sY~JO0Bdh4IYcQu;BYp;@DfRu*GGlj8VYiGM=FNsMo)@zcglGNyX98jm zrY(>&!P{nmx?mXFG6JW;e6_UMB+Q_yGyh)r!kH5cb-SOxZ4jFc|KZFjw($!(ux6U! z*)8G!W_X^p9M!N9-ISV$y!)`O|I#VrQ4}njYme9b)~@7qjP0=ai)*bccB3x1#m7xhYQQ!BV6sA4FV|Pw=OtsI?eO*GrS1O4VZnawn!kZ`E^Fxd zKI(%l=1LQnYD%3kXX)I8X5#Vvn+bXShy-6d~wy^qKQ3S&dXi) zwrKjx=~=YCM`c^|q37vZ^rNfkTeN0RYtdnHd|P=#4ZrF?rx2U3ys722XI^Xj0G{H; zIi>U-^F|p@-RlY7#aH~tf?&%VerN3wo9djfJ@Dblbm%)a~U>3%V9# zp4X=evHU;L4u9eI-7Ee!P3%+rhci1(XH$7|g6C;(afycNdd1&-h%J)n=OM?*NsEa< zH%v5@V0FBfab_8})1ms~_q8kjQ!KH=@E=YQB5)=JPQ=wTZ-J^hxzN9yhpcnALCgs zr4r4xzqrl1sG_y@?=_a{DN@g^dyVP6JU6Ow`Bg8|iP*eKsq_8)_1j<3o@zH*x7#+p zsnm!4{l`FfC9l=Wn%6^~`poOLL*EXC%6g(WD}9r)nO{sj^{x{?_J z&__?_zUgwaz_8#7N-YNS?MrE%e*(L%lGy`QET?=d`2PU*k2L(mp7-Z3RU1phy)-um zvsO+M8F@to zkXUyWuk7L9YVqM)E9=Ry3{UR@6U2Mj1Wq4+BYhY(y^1od`YhA#}PDa@8>_g+^%BA4-7l}@6MWccFnu9`pWg68mlOn5AeD{rT0YUq^pMO|PY;F99Gdmm4Rn=@fp3azxi-l?O5Id==;W>FR ztqVU%>xPln4TjpUpMT8ssA_sKlkcPcEIG|bh214CvoG6AT$Ux?dd8kRFuT546~7#1 z6*kLCvdbz{%}a94@vtw-iI8||cYxK1@gE?lQT_afN1tk*;c+>e&+r)eu{qWY&sAzF z_)ewzKgcKc^J-=Ttu=3s$IWVij9&r0y_(rwkFtAQ$LrE-%vE8Nq5i_}vQ+;$f!L?` z52qCN+WKm`xl6r;Hon)#zsE{eH$1JJ+k6t7+wLQt+`6-m|D66-bx#IsczORk+msAQO6N`e2d>@ef;MKVz=TyoH=DSY~4kv3%K~~qUODB z^Aek>hF4_8uw6XF_zVoJ7`C5WDwk#erOM1pRH_v6Of;osv8554T*G&6&HdVA?L>T9 z-t-hJVM!PYuFerhm-Wv}RgA zSDV2xb9qhCW^l}0UYiU7D6THl5KkB7n~v_c4EkPlR%$Jz4mht%KWLXuY>rxHMe^Fh zQIPLv1v zo0$F2``-j7wqGqjWAHp~goEY`G;KmVXwE=0gi&Eh=-cVY8+YEnZ;Ab)mj7};vpGf_ zu=USr{@-kVVvXAAKBdp;p84E-N-vM)bG!8o*Cv(NJpp;#2j!uCvWi>K5I`nK$yeJP zhuQ4lw389X;It46Dg1#$HN}||)BC8wS^u#~?6umyo@(xr&-B>bTGt$#-7q$z>cBrZ<6i?} zOVu&Q=9%;#bDyyub2oy++ycxO&iMBqu^sD}YUHyV?9&L8-vhSc8UL|K?3y}0jbM*W z-3a#Bbo^tDO@1Xj?u`Eg{G^U&0xsk0RF_`vGXXbPZaUR9CSa(Y_8;T}>iP$>_M*Yjr`X^?u6~lfYfPb>7MOU#4fCBwn!^0@La=3YiohtS=Thtpl9BJXCY>J zvDu-n<9Enu|22cy2lx-C2oZRI0z;Av6_ez@)r^wOt!B(KVY@>$08`3of1i@rHs0C8 zDUjwLnPe`of5OM8f7;*Q`!FfZ1JV-K1Jd}G=$-h}{+`92B#&oN#@F%I-3ha7gK6SA z^*QZtmc%|z^4aPKvy8&n%u&x!38(yLT4Kl6^NC^YnbsVe)=c~Gxz9`+Jv^@zXM_>PSf!J&f{Is>!1@+W-UC_G%>~&$7sa@D$ zEPjl>_To^OVYgtqS^)7TSQoM*2Yv45nmZQ8wNy7B&P zuUUqtX3q~qboLlBcMSBu?MG~mhGuEGpLpN)8?i$#82xvc3q}qAEx}vL)VY~0h1lT@ z{oNsAb1ADh@m8OX{9*E8DToT^BiD{JZac9n8~R0^afi17_yOqs4b7R5 zg?Qb9W0nrLlzNEYr33wMoe}#2|KSuN0_RfTON|T_)yPYrs!py#ZyTx#&~wwsA+|35 z!i_x>%YVA7M#15QXdTTpD@2|g#%J>g|sB0Vk zqLCR4J;nt8Rv-U>bwT5Q57PUaj}OgAKa8;+@`XC(;P>h* zGZTV^oA_;GYUJ6lOY95QfKph4jg3tYZ8p4-+{u`Dd+R)%>^#I)PBxpdo7Y3W;P3PV z+g`=Bn+~7>nA#_sn$-eh3r;1$ZR$xl_kY;?62K^{YvFIn^05j@KtQFDO_zxp|16{fZAHCg4WvBnrK^VTlZRR1#O>g6>#hC zQ_hgc#8MB#K;Cl;2p$KwZ616gAgjT~}&L^y|f|rrOaHzV0<)5kLk3sUd$+wBZ*uStn zPRKeRvd*zp{h-(2A>sZ>lO26n)GY9M-xq`f5n4r~R>k!57}1dzoO7bfy0jInPH2;Q zNnED02Dyc%vj(|EeD``BGTYo@kvdDx6&6ea3dC1-JRPyFO@ua`$Eaj8i@h1!1XR@n z(3@HQA}v2cZ#d71s=m#sY8W{hmj64DXO*^L9y-quuC9lki^b$k?^rXA4zWJ&=j;*0 z!7aB5g3=%ge+ye3J_sGx!1{CbBj6@N5@1OX(z096lsd$>a^?CTQ4XXKS1Ea-=VMWKuipEw}Z4`wc!}t3ett%R# zzkqqS_I|mK5qBJjJG8-? z{{^3DVWeZWFwYcWr2Gkn-wot&1hN;iN)~99AoSEm8|ifl!ykC@CPI3Y5Fem~xLTO( zM(`{sQru`@Z^BHho&T<*gZJp5mH6HLX}SFH=aw#neaVzFr0Bhv9FLCL!s z9_~0mi^a5#BlP_yMsoPzxIId>zq_|=${4OZ0-4yR=pMc)dMn=)-LXZO-u)X%$QViV zR~$t-(HKV&{T4>CVaF(9Xn;~XhA6f2&L5!dITvu7yHXTZ96O54gZyK9d{`%0_}C=Dp0leTNNgRPF!U%y2t*p z2Ji>ahxc2F7NH)Ve-_^idl&438V{foEt-%501y>kUMU9y&_2!<2Cw%7RBut#ic*l8MR_ysKZ zcPRLETfvi?SwS2REBKmLFcS-&_5(q<-d51d3*taoL97f5UevN&5He92=_xRtxRFiLl+R*$Lk-#ZNLYCzy2PeJug}JNfG+@wKo1r z!Z29$o3P+#z)&Zj56!(~^(Q0r?DNy?^-vebYGJ{Yb%L-Ca(#^rOg~_N(2eJtn-|9J zg2}iJpc7uQQXxX`Io~`P{D1+)KBz{ay9D8T39IAx$oabCckL-A$FFpk$?-esF6Q{1 z6%mBjUZfQ*)GBJY!0OJJaRGN{nD=x#%zHZPiM#h+cDPCyyAO=`6cp{+X!Y(Qbn69t z0dUKF${P5w1HgA)z!v%QCZEPkEOO*dus+~BnXs;QguVoSIamd$umUT52cG_Vfi+?P zYi1DxSmv73L}BJSQE0S93?THZb;gK+cWCuFM=oIA-E)9B9hpbnD|(}>IG5wDSYqPU^Vd(`YinAT&=Qm zB=1!T!paw|GxCY5hbA?0qWcEYNalJ`n6#d?y%>_1H-Hidmb?E^NvMDv^Ix=@BnWMQ zzZ|Rthc$XVGhyz8Im>#{>J9kfdfgk~KZRxW0|`A5vZC(o^-lgHTfhSg_uv5!EZ!qs zz{A*&Zo^9}MWHifwW$$0(Qk@8SSF19KIAV4=&2#A^An*SYyQdKyBXSF1>kN!!)QD8 zuYgH)6`EAkEp$~kF`=;hUx1PBg73#VXbbDK77+Ra_{+ii@Ql%V^6kyp=x43Hj^3P~ z!P5c1!JA`X8d!YOd_njZeBaSwWf}-oTA+cS`PpfZ8PNUN0J*WlNX*C_WhM_N$36;_fZu{&*$~>sqn=RvKEm34R}eti*mtWmF*Eh@2Zl>Ww&e z`rI;jyoo(7n|^}?g!%&(UrK%>%+$eF ztF-xX!0Ly%F~G;erH#n}_9}OP5ot4))eefPaxdsu--Lzqa;tUb{u*G*2D39o6&ogK zehYZrsZgY^)yh#3IZ)Ew;)bb;=ndkotpT^mKLAV5sm(Wud$xnSUnd%e3KvyKTkRc&z}Sho*P5g zu)w%Dh`ct?DQs0D^bGjRImoIU`^|F%VL3oDens<2nvsamZ?rMoeD|-^7Nm;!Gt$F< zrK=EZx(*@Zc?mP(B12<0jvYcj{wZBXql0NT1R1m8;wIe?WvPz03*C@p=7^=;kY!gp z#X+X>aV>V^B*;B>F?_6ngsxv&@qy5XjNLHei6t-ll_acz?~-3y6$6BB#JaH-tb0ZWt2=cM)V&3sZi2t<;?%E6 zdMN+0k{?40>m}L(mOuNulJGcukFm9Y(3i9-a<;H`u43(sJp^{fpW)%zfYmHQs2noe z8N%4=cBmboEi8XX%a70^YyM2-rVH_gviHg7?c}9y_qB4=kzVE)Pt^GAX8IPs?d zT#`YpxpSw_yayhavPbXq|H24_+6?N7TUI;sdGl(a2St1t+_VLX9u3y)+0e)LpP^aL z)q0Q6>ozbkg%5^3UcO(A&Yv}qMC>5k12Fj~=@zxYJ?Y&bSlpA+PV!#4^MSMr{{pQ2 zkIz_{@GmwP;>npb!)_6`%i^=C+vNZNUf;k-S0H*Umb>f$7%tdjKYzx`>JXZPe+O7q z7f*8&x62d&&e_On>LWE_zO#YweeivcttNz?k2PUQLReW)(-wHx@r-o=BJ@ieEk?-X zb1{zNP5}Q9{<6mSMBV&AJl7F)y_rqT4=ldsaY=X^zSlit)1d+SH)Ab1chX+v+_#Y~ zlVM6F;(F4#8J_;m&B!NzE(mWwZB@Ts3v0S()!*1g)3<&IKmG&> z|KeTEdd=9?m00LouolKdARYedF|#l^ish!k^Sp?moUjtJ`~rCOIq>bq?3hQGe0e5h z_rcF3&t7*}5S|lfeq9pIyz%i&ru?6Iqwg@*f+gR0PZBPN@0+j|ELwj)eso}c#mb&< z3c~YZIn2!?5jGQ*he<6k6D{~tm^|UD(CCwp{2FicY8o2dBMe_6-bOSBEPXA$<}wOI z;-?rJuPtnZPJq80tOZwb&acQ1SiNJTyI`$D+Ux6S_KP(2<3?>Jbd@cqzwEB8j|e#h!^ zuq7n!OQTE%%vubqA0BRAZ}r|IG&^S9a%zM8vjEz&-s&$vXerMxpThmaZ-P2p=wAu5 z$x7&v?APM8xRuic;z^qN>sEft4M9@I5)o^oINJm^IeUaYF9dyTA3T(=w=M&O_VPYl z!sXWQE);~<06N8%AEEDB^H2T-63kx#JhIb3Fot!DMZWkHh&)J-tF+Q;ohJaa9R70t z8e@#$I<%3N1E|qhp)eD3`C5Qx;CrQNTmJyvj`d(kQqSh$P|sK3>1({67+EKnYwkOe zuou3+3xD;PM;M!v5=hM06O08+*Q!S7hn?ne6V)s0S@{P%ZtTt-co~o=?6MU{sEbSI z(VrTM|EKKvloekK#Ty}0kF7XDI~|KZs}-MItU}(+kZVSqjTO~^Wkdz|HBkY6DZU{7 z3Rsdd><<~U+At*Z4;lEvSz*nDFN2OWQWhSC;!nb#gu01DUP1XQG3EgVdY2@iy!{vw z$3I2;SEBU~q1i%sg%ecW##E$aY18#rVYzR^&+i(`2`e#+uuBr2fbXX<`?pE<){&6?0Q`J6VOT|mW-#x? zw@AW2;9E*UIm|3vd^d=vGq06$05Uyk5MPFpn0w}^+x1 zjL+}y*j)A>SHbh`k59(u7vT9Gydn60w#YZUTB`CmN&`G1J- zLe1ED0G`+43wj^J7@3TnJD~jATVV~nOxu3~((xsy+4~oe@<0C0ma-Q?Y0Z9RDS5v1 zrp;waPizjVjuwqRVye!b^ye0%_^|Jesn{C!${&l{U- zU->D;%kLT8lzloE>U$h-qbB7qafza^`|tSlhwC?AvKtob|BK?&lkijqCO>_8;rh+B z#ZSlK=%e|8$e!s18(*$9|GFn`3cRfUz~){Yr6~+f}W5A=R$vP*+5SU zO!IZ)6J9%x5qjr0>rdWkcvU%nS~hLOR6Xt7X|vbqPr|e&yoC4`d^@hRQ<+v5!6$kn z@tA3u4SL#yX?17mY59T|-|U-x!voOA+gR`GwcaE23*An=zk&CDe-NKg&|>dD+NwW! zr+u;npJ+=p)6So+KP{W~#TtC#y+3`k{-g-r%dt;aRzu5w`7!O&9a^6d8t68W_>(|F zga)prH1NWAwg_H)k8k$!s~~5%kJj;}3|t zHHbH;^R>;COlvhdD;qaV7P9LZS--YWu(mtjAtQ(9FIEC^cO=O3 zrBLDD{sa|npuKwbHA12ITIB4-H^PYX`>YB)LLcq1%<lrrMU#+FXoo+X5{@c2OIRORl}2)zHprXbTG2rC0&; zv-Y8(gs*MRp6vtZdymlUYqSOtdhsTw?$2i3KOGyK-Ntqbz4)H%>@)U2ktZIpZkHf* zuemaiB=H#h=mqf8n;4@;B}cpgwS$?M{RNOBAHetfPg)AnqH5=_ z#WH9%^BSBc59`N8`k49VqWQhEU^t*Ng%fv6kD!Ucmzj@tv{*!HE|3+M002S7~ z|3jLuS*vU-R@N3tLLvP0Kt|_6 zV);ZEc(GRKoQVh+Q>;}=0b@_cfi4tfg}0l#P^&rbECGK^0O&YH`#BzRkLI~gX1PH} znm}@AVwQ>X#B(OnDx;%4x!BO8Ofu+Gaz#4C=x8i{DvV0e2YK3ft-qlBjbr2b0JRb5gas4>ylP}x?Yq5X6S$`#fcPl#yr8;E~u5IWFRy3 zCa_(c{&OeXTuI8z%G9tdO#lVE*z`DOgxCaxGPhV8Izs2+ED9$MNf~D{H$z-J0(-(a3c@0NDG9=2Y~PbxJP~U;CrwR)aISgzoiOVT$v4+dHTsI< z%}B2r*r<&>hv{MEAfg_tdPh4uA<1d&Ou0Fv0 z`K0YrhXal1_`pi0@TD>pYiniowdS%Kr`g%`bj+APf>u0(Q575G8AiH4Q!-7LMfUTq z%`(&FY+VSLhcIWHh+lIn8CA?PFO`CMqANE#+BSgsItOx@d2FGvKfIM9^AubwvT+uV zvJmeAF8WGx4eP$tyh6+9WC?g_vU%*7`7Cn>w6@OX{H)wOC5-Ja!lj6{FSZVuWjJR( zSuZ%*=PH_vui(tF($43qbV_1%R9n|pfFa0Dm-A#m!4i}JOU)X=GBf_LghwY4L0B#^ za$8|-KpTFIb&YB%wO4Kxq3`&!u7L1}dMkhTS`~)#jM`6wefbN5Pg5T><)_iC^)wX= z(a}qDksGWu(?J+AuhLbj)n?-5MAb}r#Z{t4Cu{U-0E&oPt1nA{kPEfV3_=htuoBTV zB5PosbzFS5R6AGJu(|$Z)AIBen^tm5ra?Oha7ojuE1N;{Oly5@s8OuN%;K|CSC22$*J=60Q-|X;#+`Vl zAS94K(!L2o(m0W%uPIt8I=XlwpY1NABG9c97wuq=UCG_V$O{^{2p1w|=KS?y2FT=q zON`w#G5;@83u&{ik~N(?Rz#I-i_u=VRCJg)LAXq`&KpbEDso&QTIedctSFrY$$@voR5f^dU)vXzW(gbxiM2satJB?vbg zp2&K+MbxQI7m&AFMlA?mwP8~bZWGNED+vD~nyo**#;;jY=!|_`)HV5C;@JX<*4-l2 z<@exF6`lNV7g4jmLqs$1P6NWU>HmhP>+#`QI1z0TVogySWD-J% zo{Wmesa7&MjZ?{FvtavzQ9;WeWe{tFHJ9{9lfh&vH{Gn3&M?ZOGtBbnOirvbIko7$ zAVe{Xi(SnMGf$*!oq`N*rDYmPCySFswr+4K9L>Yb#4y}UIU~#}^T>2Y-Y6?|jHWbt z61U;T7#W&wg=sP{hg*rc&PH9H+1wguHm$~U3-M$-K}|5voY^w(-wM-Ao>Q&b|7m6$ zbFz~u@dcydnQzRY59@RzZBDV-b5o5b<1}gjP1hO0jFU}BIb)Qj!QoV%$t{$bW*co* zIwNtmZo|&ulsDH*&hs3N!~$;d&Nu6jF3wI0?NXf>TV`%hY+iB;I1eh(jhIrqc~NFG zM;CJQ;w)>6#IUk!`sLi5Tx4b%iycj`bGYesu3aap&<&%?bT(`iGOp@0ma5xqE-x|L z=}S2yUS?e&T=DSe*3oim9T{vaihvrkT~muK(v&*8ie0Z;JzkrAc%GS+H5jcdpKcH} zTA6f{)j~qxO1rJIN_TUt=0MYe3aall4}E!msNQ zExMi_FiN=AG!{?LZY#Fwrg=MQNihz(W0Zx9hO8Rh2D?JH(au@GJThBU5vxTNwVEX{ zyIIm{6qOemjrh3T#7OAMNRlceDP67TLd~GtXoU1Q+Yg)4n-3Q`n`ak08Woq=&ATre zO^D44+0ei?(lLdIF`U;EMd?iz>uM(-5 zdo@v`uOVvmwN7gEmq?|m~{AhgBrZUpa$<0=Rv;Wi3YFlSBU;v zY}RaUFsREnn$+c+4C?aDqSb`GMWlx5t?9JouR3eXxAmtjAH^%3PEX0?s*vuLrizMU zRG5Zwt!22bFpc0U#z?EuHOeTYN1OGhlblptV{j%-w9dx1Z6_Pswry{0+qP}n)*E|c z+qShgU)>+KZdK1gpPuQdnm^ss=R8jfR+ap^VCk`aMy8b->;2TgW+f!nPgMZ+C@4kB zpF+*9#tPBqQ!1T5JSmZB3zwFgCPfV2fhc`5ZB(3PS;OC`^u}f9**=+?Fd4SXQh(CP zjgiMoisug71Z zUPxppi%Fkps)~YJhBq&|FGyT9SBuGt-d;_?^+^9oOmkPin9ym`e6MTxpjCrC}M9Rd2f zvZIYeS#AoDDv0S^$7sFygQV*c!(~y)NE7ecxp2JOH+#Grr@hj7%qXw1xi{{-{i(vg z{Yl^SHD5D%j<3sM$0T(XRb6`&Rg?IET=cLXC6?mmgnjZam8J5w#KI>!Eu!OmTa!J#%~R<7UQD( z2M6ql@BuLpFEg}NxtaP?AITvlzt&Wpd``UDPIQxW{h8RdmAk^OfwRc2g`=pCdj3i3 zkuFNn;1<>j`P-^c_l?~vxZ=HUV|R5+7`Lk}N(^Qfey;r;(e0E7e^}%%dp0{&Z-#Bs zek}_Q^3M4m;eFc^xCpx}HqvWG8{SQt^Uy(`!ZpX$3v`Aa=iHnKcMTbZXW&35m!&(lRy zy&lo4to+2T({VYMnR(`}(+9*cgr5~QUb|3}rTu?tvw-=uwC4$pCqGV9+LrL zp6doAyvA(_xh{p#YJC#1Hh4kF`VZohJv)RVThtw&tL;@i3w3$BGbm$ zmpFZMX8hk{ntnYsM%2nketb04*rxW^Ba01|QGWY8Qof=lkOA^EW|5*mVU*}9%$Zc< z!^5Bp8|ar*RS;>jaU#is?%4bYArT@JK$SqimafT!1gVjJLxyQVuY&{x<~Aa?6uaAU zpvpc?*~FDXOTh@u32-c77r(6r@#;%cW-ypCo*+!+>MD39Q%m4`iO$%dk+Qph$E7kh zQ2ly`j#aaPYb84dR{$@=5AWySD@I0wo-vTvRUfZDVI#9s-SWAQN;f8pj55%F^7ek9>!-$ zatp-HCQY1_t0eRNp`^{mAv{@yPVYZ&(-1<_aLw^*-a~E8oR$;0_lw@@Ek~m?o@zLP zKRgR?M_pW=DQ2mDeU7isu^@PVsi)^3H#gcO4+7w;Op2#kgatBsE5&a5_$|bO#t}cE zM(Zyz!AOC}X9@}?RZx9f=S6T>;gZc=fMth(alUG59F`e)z}|rU=N0`(%iX9lv$F!@ zC_{n^qcW;4Mn@u!+aTix{dBuL|bOEmF#Z;wu7swe;9@_ca?NQmvdF2j&Srp=@Z1{|2m z7Sim>5;}|l^x=4J83u`QEe2jc_h-b zxz#l4W~OeyWR$eL3gW~c#&ls0rchA6%`fU4J#JG4uc6BeQA5Sr7a~J|vvUkYfTBS8 zc`@Ki1Dabgrn1x(_Ntt~__SH!qgMhdlsF)JjZG#{x3R4yTM&rO5G3|ECa@h;6heja zn_p1?#z;azw8+umMl~k*aRD$;bA-8H=${egQcQ}mzlla~-72G%7UBJxS#hILG9;G$ zXt%MWA+(pm`;w$9>dz6{M(t<0ifJ$|2`EfWa#xt_?hg({Q z9Krr_d~_`k@IoEgNwl&1i$PsVOo7~9_-NgRl=3#ptyszPs)Z%u(HS5Fsw8s);I!GZ=gBE0-& z$RyQZiL=GviUwtrPFQYPOqTFS5rk{tp|V7li_QKuJ&con#}!YA<{LYE6$B}}=YwAx zK~LThx?z$5UVt{oST5zt&C8o61JX9wPu!#b`6R6r+*9?%eYy|=!wMeRz`J2m z8VC@N8csjW;G#czNzHFwo+u}tEaChzdN_%zUq!O41(}PSKcA~$1smcUHLBdEfZ;%o z(Q5d=b`rT%Y5J5){lj-;7~)pj))~R)0a;KqR$XG95a?4O0F=9-wD+#Ugc!wOugtQS zt)RbjYOC^-HIds{lDz~hPwx3-9)<3U+^n^7s&{Ui&v}vmR+|rj>B4=}%8m~Ms;zuy zfCf99J}JA5S{ud>WW_K%oXbK_du$R`1`D0Zo^;zDY^ObyD;H4-a`-3*B# zFV|F}z?ox{eogm40#9xJf^HzBM73dMg!VB%DG78C6TNolL4VP3T=v>>0dH+$f%Ozz z)x`uu&bg>CQ;|o{i}Vyri&FT98Dz>hV5te)hE-r(kl8>?GnFto=@l{2OLCz&-KF%QD5SZ$l}$9MZkthN%?oN4pahg!%JOt*Ycb(|w&}nP zkPve4oU+O``f@oH)nydJX`wOH= zZEY2v^>ZE~#gdFLN=E7`Ltb#Pb}YN`*|DB;W6gLuxy24Usi_Q=I&6>IIMRCs{m7tB z+*fsVsl?meJ+ASY?i_zzDmuBzvHsVQ@aGip$I;x^$BWU^J$WJ#i8K|3{{3x`k0)n_ zuNhuxes(pl9hFrHbHAg~vqWxpSw0HKCshYePu#zF_3OkF++=l{$)g0Rj!h^(r)0d3 zgS~-ZZ*&=FTAg1`>TfCZ`uCbdziz+QL+Yg>}kL!KG&N+_{jQOh}->N z(mO>X7G#D#PI+H>Vb~5rjjcB+c%PLubf1=39YX#k$y34nhr`aV>d_Ng@&(S7Aok2 zcFK_-v{4=WaT?pCmq>$K7K;xp=CT%XAGy}I0%F@-2sdv3r<~=Rg`&z#z>`ELAF$G^ zYWh8Ep@Y_IOVfQ9MMPYI6$Qqz*m1=tvbG4#AWGmH-P%2OTUj)a4Cq&RT8J{diK1)L44{~PP^JxyadZDOgD%x%@|5d~AdBF2C? zNcPSyy*}LA#-SlZicdTKMjdBycFm^a5zd5E$!Q>avRWtn!+08x8K-Yw0KtU%ZIXSL z%`1^CfpGs2QXsA%DG$EebDE*$J<2)LoP6A9;kt@ zU(aV=;Oicd1^wTdoBp(aKdY0IIQ=5KbpEO7x|_7RU?}}xKlRJa(rY{^eS8Af)3fBz zd!MYJ_fDX_hr1AruFchje??>$<$kpWU>3i&#&+Da%rge(2XIlB1I*4$(c6hZT(p1fb(urCg;< zs=ZyK1H18LgmGL4$m5%}WPZV05xJ~Smz;aogcGr$JB%P~GpvtkeG%$^YW|yK;70p5 zf++;(0so%yfo(-l98f=pE4exy5I@1{#~_Xrr8+Pu752Y6!zgT*mSJP}|KNVo?vW;O z0Py#2Cgy_pR1h;ylg6N~~Uth5D$Q#UCA;$;&+ubE$ zP#;WoBsae&JcGHM=DJT4DQZ6Xy(xG$)X!1(86$YFTKGzoqYnD8f`X+%T6p{(OhWh2 z#)(w{)O8=)L!w0#y&X?C9?}ixn_yKl3V1?vc1@cJPrveA$9aTqAqJytqX=#J86Dn?;Bd z;w8Qxdy8rATU8z0MJ}S^L_+JU_5htqK##}5HV!S33nv?Q=VZg0q;Bk!@w`#4a|Pre z_W0e(tSQBX1JKUEUfUQhO!(Yyr`sHc6}7ox<__-ZLkaP zXt2NOiB{dHI^Xw1!uP7roqM6x{6A&$|GfWV<1f@&K6Qml|EsoMekeHW3Y&f&@!S)6 z_G8XvP_O4y6mDfub8#t)RxztKd$@>R>!Dp;t1`xTsmfgFwWQ_uH(#rku}pXTkzecy zdS zqkaMuKY>F%wCQWrx$zz;(rJb>E_%mW^a_yv%dgM&E>7V@{w?K$pQ96;*@*0_G1Hrr}kFHcL^NX8b z^q&y?rSs{zswj%*-zTRB$Ta}=<2X&w3+|6m#DY6JlBzgfksFc~fhm=NQs#Vi41h?VKtxpb?co%Wn+hP7;pVs+L*q(>d+ zMrX|oTArcW@F=R+E@F{Ev=OFllmo-4^R0U*k^-zHi?|FdPc;A^0HiAiPO^G|c}B4- z&zj%P?Z0INWwTWyj9zMhKsz^pg6hN)SO|dw%M5`-xeOU(omH7(6V8BX_H&hrV)p;W zlmP8q!Ha5}IRJpNNExK#^9UH>+vhv|K$UU^ms)1o4_0T{ufaP&ko^07z59UeX0Q>E z65~|iI>JaB;JoLA9Bd$=i3}a8jdzjp;#UCm49zfG+LXY*=U{7k+6uktD>LeIW%aXqOOFS+H|TSr9~h zliAb=6)TPz-71*5ZFJarfM01&d9Y!rrI5uMgngeq@zrBGG*`Zy{GY7`Xe^MvTKKn( zqWq*#U{9}irpF~tAlcxGpfs?r%tvOj^h~j5;7&9ox`^OkKGA0ymWB%2XxI-@gUjCe zxh2SI<&uurW*mkBSh~v!X0;#|_eWjJx=cZ6mAH3WPRMI}j+y@LI*$gO03* zTox5|d6X4XHn2STloi~qQ_7{=G;}z1Q+7A2wYZAk1C5W=T`!d4x7G-&%ZL6VFC_P; zc=O5KnQs%Z!s5H)Y4Z)@XYCKrB?fjkU)7jm->Ap78?AT&ULVDQn{kJ7C9*SH1*nt{ zDS_KPUM26{DmO$&{*4DVC7Nqqr&MGZ-$!_>2%N1{@=sJ?U0x+k4Axe9waw6dH;50( zZ(Uv=$*f&31cB%LYMCV&9bwOX1DlYTJ1zb!>)romzXvB!$DA}`spG~D2m++CQd+uF z-n_i>63<7sd{67|E17N>{0sO$>eD`+2mTP))H>^|Y;SMPi_TU$`a&za3A=T9BGA+c z5W)Un?I2i))qXQ0@VzAdlwjB0!+v&p%kS{LH-`=7K3!i7qUWApUHLpVY;Spec;*QW zJyPMt0mm9>_+ylqv$u|Pod#w|P;E_A%?D<)H{5t3@JlhgV+yjVXmi!RFkXvt{_Oe7 zyhRx4%YZg0c!fsP^V@Uh?oT+6)Yiur$x}QWXGlu#=JB1M2Hf#e%#HyjTQp!JG*+G; z@Vnrz&5~hoPe;DNF21ly^?rRUycpj*euT8T)W=d$jwKV_dJ??-P4WSk3gC_LrN5P0 zC&tAO9gYqyRC{%9AtUgEq(<(}$nGo>RXCr~P2ptfnM5-}nZKap0fjs<;Q7j!E@I{a z8A6rPzo4Q$L^MI1U50ICIEYz~t~f!_W+^$|BIzdR-<0?AyIrChaeXPd50M~Bu=_ol z_VfdkAcNgRICV3`ddsf)n{oKg>^{AneoyUfe+g*%fTl+^gy6XS6b5e6Ola>Y%I);j zy;zi}k1KC0MJD@9fUNgjt^Q`a@fz#)3l!D&&B(Qy;GmNB^;&?}C~Gs3WFEdhf<_Q= zg4_|jMSEeqW!Bsmm-yw}1f7I`An8ep7pQ+^piGKaDziPQl)XR0FlgfynPJVIp>Z(t~7?)FDpW z=9sIhj-$q%oq*3wmMzt~OzVz#-;B zT$#qLg@D_0=i*q!Elnc-M#pInO`9cgx9>)9s3!`9fcQj!XBW9Ocscp<2Ru>2fc`!< z;57pVOmeQ`;s$(0+>-K=f2Hf1L@SgvI=@|l~mP61oh4l!|B6j&3mPE1CTSv?3 z0sx+b;DK2`GtK);uH2HM&*!t0C4WVSq)h>8Qa&I&5!trjM|b0N@E=@ZcO{PGX6Vp|Joe(H208Yw2h0UyLMH3S_FJ4UmS#FpPVUT=scwOuA;pCHm4>4>8(?G`x$!?{?Q%Z@nbuJolJ{`TSn% zydl$m=`p$JP5ZC6=0mU1W=Fd9+G~9I|AJ-zXZ|;C=Ot10XWTwYT(I?BlU6WTx1ld%u}K=v zEx(yxU8vsBIdghk@OR0QcHKO7^v`@L!DZ68Xtr@0N0)D?;o4wJyR4rkMF)xR+tu2x(lk94JpMhCYPXC#$rNhm zbZc7JEQI}AuzrJbJIpre~qR+DHN<)uTLJ7qoF%%=5EKFr9~Sf_TcOz0++ zRYORuTZ8yRlQt<^b+k4Ce=72AXd#vBD8a=nzXqi5E3=bYiJtBl&8k} zo5Cu@`FM4pt+V*dgMT2P`b_n?M-*k8$RGk2I2AU`-;@WG7D0U?NACMsQu*QinkDz$ zCo}tf+KKDQi{hU{7>g-x6|EHlYKcZ!Zbeig*q;gh^+qjtTyNp;9{YNM+MwgRV0!^7 zKjH77{LA*ZkKgj+iFw=IAjiiah1Y!|f7d^}2l}EQ)JL4;HL>ME9YogVLm@Q^ZK7qm?} zKB4odmXf17nh3u7StQftDXbtXU4EWu0B&dsmD+05Ga2n_r}yM&>Yg5t^Q< zuDp;+FG&}rAu)LSNs^B?yp((NlZ6Q;k{&89psZy52C$X!5ia=gJrS-utqu8Nk^;_b ziO~aNIg0s)mmhJ*ve-8q@whjmtu+RnEmv&p8isN<295h;T|ZLHkAs21Q_Le>I}_(* z2fA=1#J2zSOaMG3jjfiw;a2B~kmLT;6V&GD4;AIYkIpi>(fs{F8J=pfJ%-A&gcw4) zw3kZBc025F3FAXf`jQ}Y-Q1I)3B-$SPE5J-R{CnexB`u^FDt5T=OXVOdXU~1CwSVP zVMk<~-lOFM!2ND?;((RX_T$C<{B>Wo(7gE^^b9HIl}}J5^&_OWhd17wF`JoF(mYav z_-Fcm$sOM&^c}A`WKeo3b7wtusy&D_)k`|oYp&}21#lq<+^*yRUe*B`FC@6pg=a`r z=3IZtGe>UU&HAjX5Juh5A^fb8%dLIH*I+sqT#+q+xU4Y>a{Szz_+~Vo;X? z1Qa-5#KCvv!w$C}h#Q7+bB~*O zBh2?id*z>w%Tk_6r0PDzqx#J#)d$|!EnemIUhEY+gd&|@=YCK0lU>*=f=6JU{VRl> zy2rMAnc4IAhMV-;+pU?+NoI**SNX&a(q~grp;u}xdETtMydu0fM$%!MXJJWXiXUoH z`?KVq_~@{w0#Y^c-czLU_r#z{Lw^Q9-q4#VJZ;ny7Bp@2B?iwH^#s9*IsEQhkvd56 z51?7SV*d&+a>UIr{W6}F{7I9XqyJgO63Ffvf3j{oa9oD#ErG~C&suKbcW55fjJ74BiSK4EH5JHN1_Edxf7ZL9{=x{!{ZJ+yoh%?If z6t4Lq$UV}q4S@g;+BAv4Y1H}@PhwWbc^JN?8wMV%Sxg>gWowTpx3Zbv?bv=Cy1M;r zWgZ{IwaFfo!u=y?m(F^zOe*DGrU|(n+wH&s@GsK_bpN>s-Ny_;1j}}+0887WTj>@= zc!eDosaJkfO7%#P7dp-kcLjN>G0r z-)zLGA_u#JD15AYj`b{Q7>|@^$bB@%fey!l#TaKj+;D zuNMrXDMHLXo}k1{8BCEJDwX#$MP{N5qe+TyD(+!|(mgt>lOayF?2CZ}z_%e0xo>&3 zUjL8;d%0J7AYC^FA*J}>e#V+Vs&Q`aiMUsOy^~E{*^eS0%Q;yg@0oV5Z2<7s#G!!q z{(NJE#j!O;O2IFC;I?}4L1fV#!r@xa(m@G2wr8Xu`0dP0I9SN<-mZ{tQwG9ty0c&B zTQK^-14h%kGEcq{gVpd|@R54~dv?*N{N6Z^K}oDzsbw4-Dy822ba>MRLd`1h%Xs}9 zZNBinDlG44Mg$x)%d7;e$LI-fO9)EaNo1eh5T-y0zFp?I& zG*Q4tKbq`4O1k)Av{!EnYQQf4n!$gEEayoAeIr9;sZK#~u69@YP63X2!__%8FnYsr z_aH~t?2BMCh5+nY{lmDQ`XqD8J&?49Hfo*jT7ItRiDF0M-4y8Zn638H;xlxFVhcN@ zp|rEUNtme)?UJwn3tQwt2cAi?G5Ns6g5i;{3Mzj;kg+VrI-ZBgy8sY2^(2bMsjHd6ubuaMzSUH z@?1|=To`MWB+MeT=uu5fTuFaeONMpoaw}+wo!Wf0nN!G#qj40Cugq>Sc>MbZrGu_JAQ5R2jby^NUh0xxW2icc6qLO=QLu_L!MNM0%)EOd9PeK4A{Q4XCaxSQqf|x#XX^ z%|!}$tt;rUZ%M@g-uDTSKP+2+_(HK=Arc!TV1}dl>lv3M1HXbpa0wI;8RkO(POEXP zh`S`-p*Ty}u&w>Kw}aTS*Ka$d~g zcyafk1p0F-nhb5FZ2mT0KijMoWw5;2rv8zRoI8y~(EXVZ&Y;kSb&X<_u_8L?15p{2 zN-0ss8Oq8^)E@eGRgQE4^Jo{FrNUatH>39!fqZ7_a$S~v&gJD)$i!vCQ2W$QN=qPw zcyCz2ZLm~!4ol|HVu@vP00(V+u0mowd=&Xey*QzgA2(HCLXYJijuijw^Nu zYI9PeV!~DiP@US)1cP?kU8dEdrNe&a`snT3mLTX1!p+N8`~KIj3t5#$t<%7LK`I&d{ixCyh^%CC2A_mwT{(%a#?MGpB7mw zThOXP1UNu1aNpNeX-Pjv99z)z>bf$gQsaOsQ#~vzC5gWGIZpi|6fU$Y*Td19o`an3KyFZlk>KV)vo+A84yW2dpU(^M{nzE6gSXvkRjbk7Ra)$K0df{4!nE&$*!o$>D3k+W-rIKMd)b+yEaiAw!`f5q> zy(!n=d1bwFR>QjLs)8Gu=e9cQ`E2pyvkbdW?kd(ZTjr-xWwC`-Mr2dLW!T5R>1Er+($;hJ%k&!QDg(gxBc^?MKXt3L0Ob#l#5c#rOwDo}Ys! zHa4m}ExJcRFTImVM?yoDM=<|dm$xfH2-BQ9HFHVRNKJzYm0nhlDVveyfD-TeV?j6E z)z;cjfi1SX5HAM>6e+CTFAbCis-s@C{DTrewh0;*&+Tj3ZY9+ zbv#U%<}khZ!PD=G>GP3kWp#ehv!1Wf#w*rpuuH*L*EP{J1mYx1qkmvq&R)H{v|SQ% zJWBjPa;2;+>w~9j7Ys)V+%S`mZOLllvO=fKTieK$tn~iDeCB?EQ%6Q=%V~y zI3(t{yrMoYs7~u*Wt}Zys^3&Mr)$;EU*r+fmUbGA8K$9nV`C;gtqN=v(|XAFSG%Ag zPYCDZ-qSM1JI`L9nE6agu_~)uEMR`w5`z!*ANI7ndaAwRxFbd-AqlpFE2Z4I`nh?D z4btbYnsP~!4t0;L_-RID0h972v>3D$G`_YN{fZ@N9H64ruc*Mg^jJ}yy`Kz`%+*_Q zb}UVrDY%R3R?1AulVDpVOH)i^BPb*o=EiCzZFmz#ke0SYC;ansA#wz7J$XE1hEaRM zy8e4|lMlzGaxhY?Bt|}vcke*vG)ALU^@gFEaa=8TRUhFNa%t>M>8+|Wb87Et7u89D z#TE891tY5mUDc|nwMuM4@Foq0mo*t0+q{*reJg*mjdAG%sS#fi1k$9iAq3t9bIg=_ zB`%VD3kp@Pj^L(qn6`?Urp$*Nv6pi(l7l(O$Qs3wdKPl+GtEjXOodpKpsv=!+Vzn{ zM)m?QiD&vMJD{A&6I+dlL>YTK{3?Pjj7M-%5D1qAWni2u6@(RmFP-lW#x04v>@jb9}Q@$Es>XK zCH3|!pH5))p812p##}B15@);~ks``M_uDY=9jVslb1Tb5RolPwrZId=)MQqyKA>2% zB;tW&aq>$dc_Ds{XADvf$~Rfwli20Rg2fWLKDs4rH^GAkai&jv(hU>Tt}~O8E1)q| zSZlRiofY7mOx24a@ZC*Bi@Vgs_GWd+JHic|Wy0iaj^v~Xzg2<+{ol!iEjdh+#+xw}>>J$R!0BQo6wD)>Fspz~cOeWQ=ALS&i5R`H&(+y4ibF;al$Tq^ ztIW-B`zseY`y>a+sw-wAsI(X9m)X{#ms^BVtcWW-h) zhRlu2U^1wLG7BabAp^-Lae+r6m?II^AetbpC&x5t)VLhQc9<$_S=m?y$0}t9#XvQ#YQD5}u&x$-L)d6JYtF(=^{xw4g5USF2 zKM_i1;HxxL&Pdz|__$ODjWH;QoS`L>?HkKHqVR8@%sPZl-LsxXb(ln(i zR^nXB3k4h&m2UT}%SO0EA>Pifi-BONu(EjJ;8`Qu@FGI9FDr_|5-+VBJ|&V_W0E1o zCBI=$zk@S#SFF14;3oD0XRScMELN z&{)D=lQY-41iz<;94)K>kX8O@vW8;=LRGbJMN-A~rp7?3MnZAd1$vIh2&Lnj!^3|F z)Xuen5)SXyGb(Mz)QH)i8`S8IJquL1LE(CSl>%1AeCU$#I;GNg%PhI|4>F6Z?wLYE z_oZ*r6HXY@Ak#|n#~8tKq|m2phehK^Wlc5l7G60jBRcF12alJE5RSUZ|4OB3A$4j1 zJN>=nIU8s*=g&iftw?`jbD>(_C1&Rykt6Eyz?g)n2;2W?#*X zY7=!Pot+O)nxDmNmzRZ!Gc{%=4e8P*g`k0u49?A6VT|P&(o)(yUZG)j8FdXye7Zm; z!!)vqB%~SxkrDM*7h;5knl3mvz;_%zYLb=ZgGMGjp_Qb{WJ`6H3+Q4J%mPU7k9ZUOF}$6c2LpM-L8jg)FR z&~P_0=XEC6sYt>ZIF9^kSMj8Fs2ffB_BnZZ6Xs3TUGSc|=IsFLBN^5pMLC~l^vj~V zTCjz%>hLvv0dp$ko(=eEIe1X;rbogh(V`&RlTnT{VcBnLc~b4aTrgIYC)&1ehf0B* zZzIx}W^}npJI4qVfl&p>2dr$(-L9;XoTC$(e=_PDIsEP#B+VviYVwJ??MMvUl?0b+ zRTOk#prw203%^!sfQo0-)9$o=c?|Is_0$U-tU;rO4ZwhGRa;VY{=$g*02pM7XcC(D zb+V$k^druxm930x+&jd);x~;zdq|-|9+u7xvIxSn$XgRtat~t;T9tXi8C+YCYHC$( zmpuw~p=W$vcXJmhyO=l;`yQ8~`PqwH3;-t5M;tG@g%Ye5I+zXNY8|!SS z9yTC49x`YDpB$C4BFHjBxnn+hK;aEohH+Q;M88WQ9b*d#CODKL-;T#^cKB`@n`w{; zOd9#yEe)1@frjQ8LRnz)XN`#zH=8??>}V^5bhF0(X*3q;@9HCDG(PIvB4qx`+aeh> zf9il`XI9>E9U>;DJCRdza^^WboZ2@+8;Jk-*g0 z7D=GkD**{86_C{NCJ(gO(yl|sTbB16=5iSk>WCfihCV}#gIlRd{pyPTvbLH_Gk8HrmFfKBA%}?2f~N>_8c6gbA?Ji$AQI*9g?o)u zbaSO8n!8plw6In$`sWZf7% zv6q(odB;Gvme<{SXW?8P3(A~8LI^e*>6AJm#KlBAK%!b%Mus~hWnL12bvaMd6l?W` zjza1af$vfcyeK0Vdm=eFWBEi&Zpn5-2|A`#>MJBc=58j_ef3o;GkUFl&!)34V#1Lt z1;86|j|S-i+y@9Nnvsf*jV-#f5v{Z$h94;^D@qRV*~n;m;AER6#nI0EB$C7@s|G`8 zk!cy2n#37<`2P|&(C*(TW;|`(DAh-g8mtrxgPPJ_TapT(wFA9d5))AqRBolnN;8sj zqso)g!C_?eFyafC^IvYk9lTT+D7w6FFv8+nSBSLrp{x(Np8LqA&@4rEnl%>MA85sZ zlDJn`41h~MpZII$Yjs%wc zt_WjHKA7p@-fWVs{_YD5W+Kd-emJzlsXY8L>|Hhxh;e%xblwzntf<-x)R>gv%qR$Q zL3DBL6kc2jhY@=ify=nwr4C$M93OAR4l{?<6|(wgxnuOv(^|P6Vpe@_qdIts*@qj1UyYms&W1cr9_83$L>mE#j|2jV%bM zp-@x-)(l!M+094C&*}^KP55Dnb5DL5xUQ(r6Il!8l(Nm~Dsy^$9_EyW7vu1v%sQ9j zZ*?$#35rLJDorNg_phtw9?bkOMF}Drk#qx$k_Tx|M{o{8qaDaSk?39+bH>Mcc9}$bNUjJLZwpnxpaIi+!u?KraWoeK@mH1Soda6JM8bP9nKh^`^ zB98U6ji9Rtmc|?x^iLwoJQ;s%jO~-KyKjRD%4Nyn##>d(NAbvANoNTWao`A8olcR3 z|3NO0yf>$O;fsd3ku2wnjj#q4CvQ|~9tGv!AfCeA6@Qd(fW~K4FM_9A7>-3xvv`T+ zA^hRNE(O2@B;#%~_NO$X>Pr%W%Gf>Fqh;Vrmuom}I+d&}S?S(6qT!s zJ7r?Z&irz3(rFJ`>yv+X>Uq&UCB9bCK|8$$C5f-Cl^Bw?WT;s%O3DO<<93(eEjCg| zlE;}ijROmQp*8q$e3kvGv|UoKX-r%2KM!mPMG?{_#@wVNC86dN=97>MzzyS6iJNzs zq5h$bZ7-g_QJD6BlvfdlVbPUpZ+yN<<- z?&m5WRfMpjJMz}Vy{{|CveK&1th%6q2e)keJlQE_kJp3<)(BT_QS^T}{2H9Yi<|?HdROMX4sV*-5kg1i zUc5m-SnmtaIIP-j!Wu8Jj*D3g1udB0`fY^q0Tp%g_g@f>9zB{nvjnVjTlzL!v67j@ z&b{!EcR3wsA>SVC^~!IpDONcy?2R96YSpo;YUB&@=uwfz<#`5&2bUTYwK3o&7?Mbh zC5}J)_5~&};9iNAlVUy)&myFDjpHrZTu_%cRZJYWmqvH5)+?&zui(GEzqE0n_&%cP zzm=+@@~%NC7*J8wAT3A?y;m?u;sbu`))y0lOGEdFo!wIIMnxJN7uGNkTnpvxJxPPO z@n}J9m7|UZ(GeoddznKtX}V?)q9({PmeHU3@rbA^Y)Oz59G3pF5!dkH1A&)g#+V}L z#}`}IXg_G_Fq}TDAG^w^p6uB?4KW3nYDKTbU%0@;qYg6qRjnT*%=Uz{onkD?2qlfl zG!Gf=aXv@opeLovd*fY3;MPp3{@{`>;i=4nhsS{j{-Y7IQMLoWFm!Cy-K0Mx8YQEzEri{1YYv{kiozzc$-0uIT&hGKQqGHjrYo>2f=@eow__$M4ZC z?j+KAY(-{t=sqm4nP7@(&${S5MGR2^k)N70@W-Y3ylai-k?sXWi7mlDy|}N30h3Lu z=-Cj97|~feSx?I?kRID+Fl6xnGrF@MF@CoREoxZ-R9Lks8APtPfrwwpsTIyP z9*xR-2n#i}_uhQc$~TzXMVAi1?NG2L=|=P!Y@s;R6WB-JByAM)s$vLzQXtwI$fLKn@&B zu&t>|Aa7E3+ay?I^0^N9@qm?i=!b82MUx*%$R-v^=yBu_h+$baAyq@e`~tq^{B!A6 z$iwioXy(>vE!NL z9zU4oA_9e#bMHnVTkv!!Ge7ANteuA>ShWTw5PS1`Qd9z7;qQzob(mc}ZnDIL19b^Mo0P(~*xUNz7@Tl^9X2VFz`$6bi8b!$0G^ zYsC8s#^=vJp~maij1>&?72`2@nD;mFeiJX~Ynm)MFS9okJ9Q|O^V=kV65_@rATL+_ z7J$HmUt{>R9wn%`6Qij0P!&=Ir~5t;aVdtQmpcX(1C5wq(P-B(eVosi+0d%jT0hH} z^q!P(Nu9@&7&?pMo#K;u7%0#|$#IU!q2GtAD7RXs4fqxO4c@7>nTe&?QoXG#x=Crc zA7s>q4R5sIbDFca86%eR;G4Wj9pvaMq*O3Dti$yvBf$^havE8zZ1t%7PakOH4!R#` zB5srz>Hv--hyxs8l$I^;)6hi)8`v?_De$3zqHOj!7!W zsbye}mGoO&BavjuTSO0c*0Zw}W1mxGmUsD5H9)W-r_LAQ+m$tO)@<|Tf;25qs15nG zGLUqKi$KcOtoz*l7KubFK%tmfM%UEREx+jK)meGr+WY$FAGV9CZHq6In~U$rYND2R zLoT)zi8@{(%Be=&x;8yN*1j-8W`~+5@y;JMdn>rcEZ0FiTLQz{y} zcG~q2_DCF_vzsTG#^--_-m~UVwy*@{SZR$N1vh#Kk#|Coy-0_%KO2YtGY@}K$>o`_y7Q1`5KYqrN0h{O3EA4i#QYL79(Y}?gr;BB5O_X zK4#Iv1SZTJlFMep?ysupU}TOF-Yut=T!Y`k28EN~vLZyt8n8d%<}EyVu9iN4-_M~c z1u^{KJZO~XjB-St(tNSUnvmp~ZsHCGXsJt7KpUZ;N-9wLEFH?+Bcts^9VDvH;8T3r~bQyc9eVPeU1P2e0I zc927_GaW2>f-O!VR5a_tj{+JhQ%8wMv>olLEa753A;2?=J{IqLG98qxF9b;_I<;Uv5Dym|NDWhQg0E+-X@Lk{b{<&MC2;GWM4dPKc9HBB$Ivo z1FA{}=bxp!w#R#u`lvTl_CmtDa~sm`6MPMz6|tOq#y0+c07O8$zhk>Ee*z>&Vr|V{|^#;)6P|+s_4}$No}@|4lAv!|B}< zlowSOpXjkm&MJQi^=VgYu}t(x7jgimPMyHUef6NuAAY{<&w-qzDm9;^Dy7>QX*Ht+{k7oOk3 zV}_h?2R@swV*S=re3Qe#J?-`A$LkIxKm`f+caX0r{maun>pcwv(L>4%dI;W)HP}rl zjWKg?oaNmMs!M<;^nQhd_};j3*TCb%@^#nc!0*{7cTE$ohoLUh?ScA?lJ_4Q?;Rb) zwXc@jfywQxtwHLAjG5lsVu0!gLyWy+x(r4GnH3-*mP%p}3t49NIAg~bxReb2^)*iB z(*LY8&Jtl^y0_B!LQRKPXAOzQKv7*h^r%j2ua~Lz*XRxIq^BVYU7tn==n0lg4HIps}m;MAi`aTU_`%Mym~H!T7}_n%_759du;h9ub-#;{^5)4<@j; ziS$WH`aY%Z0Lj8Otkw%$c@t{s0BmLVA|wP zeo+2E@CG7%EsXI-<^EqAN@UY!(|p^m zT5-NR+2Iz@<0J38*e#m4DWtLs*{pB16L6T37NX0M_hlOH!sgp6M?3P~&u;%3U$O{> z>xqE)X~eh1YUnkDP}TZ7KkqJV@)_!3H^S7a0Tw%Pf(nNIUaXPc{i(9+mye^6AIym! zToxy?_-0p^A4`1id~|Et{q+5izfc~HU@%VOvF>CCll}dlJBIFqY5VWxE*(%*QK=SH zMAm+=2Xu1&zR%Bi!mGIdw{&@J!FBvfN-#^*gdeFO9`p3DCFLV1;?o;T|&YfRyDA5YmP>WVOM3yUmi(g74awuJ5nOha=Ke_u+qlN0E+r& z0LI&y>gpSp5s&8y%OLsHy`U=~B2p1p7o91nhFm;Fbg9qw0^I-4-j~2hc2#x1EbJj{ zihu+Lf-xi{>DqcpCS!WKYi4SuH@bVmgg`FURj;}$Q(LNDb@xCFVN(nu_^~NVM0Qz4 zB7!0x%D#z$b<+1dzSw>ClsbW zXm{Pvn=^krFI`lvZ_+o> z-DyM1ykwye4`DNj=~|wq*Q_UZ7J>QZ(N!SohNEC(?_sHjslh-Q>z1*xDG4UcmRH|R2^s32{+CAJ-er( zwRv@=pu%}0aA3M!vn0r0Tk_I$izh8YBRW($^f8YNbA3z*$b$}BIk%AZu+C7bEg?TWoq z@4*t{@I%L~xVTYwL@~!+Fs{>`bgD)1dTN#;E`p;jP&8wy%zBs=Az#z34%>Q=D~ZT3 z=~c12PjMe}n42J=U(XtATuuk|xGn6TdW~)uk)Y#AkT8|Xr@QfWMpY-K)Wps}2?j{_ zN3sOAl|(y3e+pFL<8Q4Q*C4`tM~qthyqeUgQ+ZS&lMITLs;>Q9RxTYif|>-&z6Kph zz1T9G=ZLy1DlCP+0fDxYIUSLgeQR1u!C~U~VR<5fIuoP$3su{4#xMmbi*=(&v*0x4 z;FxCMCv2JSI{e?GO42Y}Y_p`u+QB=Wb}td)?aqMJW|G5KSv7#BB}WQl^qooIVGzjq zMbg?GRYwG|HD|)x1*2CnrenC^!qhS$$lM(EpAJ_zu`Z=W4hX}$rNndnai`L2_>ka3>87;+Kwk!@RT_u;pd;z~Qq;P3xoU+t zT;wMRlB0614Q7bYn{sqKieSG&mx*!PnaE7J;Oc3j9e~x`5dJVprT=+e^_`=P1;7Uc za8fG&8Bs9A>%5RaYV(@>Ll21+L?sYx4!Lohp5JuEV{9O?OVaxDyRD3=cx+}ZLqp;jcxX_^yJyz>2&E=Yg*1$c@1*5JZRZo zX<@-Y1Q)XjEQ6lDni;eNoncs2XRF)Z@oHEkK0&5=SHVU@Nt^-`aeUp(#(Fxg(XA-- znXyk>H|yn7#MeMWI_AGB- zvPZ>!o}^lK%3~dsFy^EOLBGZr)c~L?wOj~9$D8q@rD#QueOVpKQdh+H6AKQBMN$O}vuyxqepKd36^2>Y5KBe1NnyJTp^LrF)(>-;m7 z8QIfqTS7fy7!9XhlVgQ4Uey9Lo>m&%*nvQ#oqgt?_~e2^gW zIcq`+vW~A(!;R^~BiOK+j4vZC1yDk6RXdg{iqY=I!weQZvg0Zc!>(%VNPL!H`0Z*Rs%a5d@`ptC$&bELE5OApy1Q!1ct&h zu~Y-ewW6t66< zUIjU3ix_m;5X_EIcc|8IZXeT54((z9=Y@trrjEskMgZI~mXaE&P4AP?_w?7MbT@ z)@i{)uMbp=j&NZjmCn7cq?%U>y-&@mIJ=}>W9bc+R%&r5Me>?;0A%wQFFR%SY=$9p zRZ?6P%rkbPT0WsaRs0+yuf*dKm>D)xy9z zeL)QCg+l-8!pYXRWbya2x*Nm}vSMP@L8i&q&cd>B7+%XbA=Q`_E< z1zax6OP(r$O6CLDt#wCKxVRo84+_(uGBZQpnAnF0^6}T`x?4UlqF)(vJ2K1h#jPq- zK3(M{A!26pW!$RsIjlNASXDe3^Ec#jY)w(eh3*Qc-Kf&t!W?=XJ~BIXXA5Sk2NyJ~ zTBXtM*;b`XH+_Zoy|k1!h)9STRasairDhxrCLO?oa>j&{bp8HGJEv5-Qdgz~1)-Q~ zof=d$m*tBv%NC*2-mqrKK~n3qnY<6}qwH{RiPvrYSaFp*c$*#JJQw}N6BY``$^h&} zyxYXsTHsux@fo|#F@9q=G0azDIAPP@`NU~tf%Vwvhhps;nw5)kX>q0DdCC`z-7Eqk zpJ53)+RI}SGAW8yH%D0ffVdUx5)H_*TY)3s*988`p_6WSnZ&{^&x^Zwf>RIKqRolotuIkgT}9H4u}JXHh2a2pw;@`BLKF)kr8&%A zL4Y>ldCC0MtXX!bFU>74(TzP@TEcprL&XBC=KGYWU)lCmRgA_8%rGm)Y1e90SMKr> z@;j9+)*3czHxS|=rA()V9rFSc!pP@`{_H~OARQU$@Ta@bb>bOTI;(kR??~-gO=&1P zSc;GXr3E%Q%%EhEWLyR2Fm+fIPOV#)C2oZ|Q9v^{;WpKg7a^evc7uy8ZI_AXFbhUu zE3obAeki}Oq24XNFC=qf&@o0XlE8yQJs#07U^r!X;-I4@+(Nx$X@R=I!^yy=*?GBB z;$fk*c211*pr~P^NpsjJFd4Srv#V4DRF0?6RTs{9nS*BF@H&I0NN+0s^2_8)r!dwM=VuyHO>Gl(P`8mbgHc)Ua+` zM@*Q5hsHYK0_9C>wMM_Ubtk})f;0;mlthJ}W%Lsy2KaN`eRXzeetA)pYMAoX=ZTSO zR9^;EM%;@WEbdOsMz>?*{dHC7ma%*`4RshFr z@ZZZ;(zL6Wn(S%_jbSv949}5*)Hr47+5Fs(SOI!qm2Wa?^U?_9r-Hc=s zl9YJ#N=g|`9tQ#RM$K;5;(#s_7r|u`mMw@%zuP6f6U~iw!)k8yn2T_X^#x&_941z6 z({?Ijy%d9R>H}h2+`_R#FES8--J2O}Q*xSD1nAka!V?$aG_J%WV zU!17fEu6%qkNBVUUC5G=q3W)P6A&6j#D(`SyZ{_DLehnlFJppfP!qV3|6?AOpOXunIC<_eT5=h!5*gn^mb<%x3mita zKTQ*qHnf2XE>L%hiRpwL@dn6?%L^P!kDuC>mNGxq!P~5%$Um%f0o$s9lh1DTn^u#R z^xSIqd*xQO#~ePPaLE9#u_(m5-IGgy3_W4Xjk*sz$%m;^gpP8rj{PJ={5mteLkE}x z`P^tXFXo_6s6~#p>U0cP@r_bR52rWy zaI+T80wb3Co{@gYs{y67JuQh0S*tCllMX#yC$L9c6B~N-N<0P?emun&>)gA+8{)Es z>N^4wR!hmUA~2n9yHnm|W*!xGqHd;uJ-H|zbHQb|f%tsCP#eCq+`h1sJF`96R!R& zSxw&GSlR#h_2qn0#WVG(RGwX1BFk$>_g_i&m)65on;1O{x^}C~ z{c~&1R1G>pu7=doC@!y)RUWg0in3iBx|Z{)&9fgW^4rb0j@tpMw5`xz-`H2@EUqBRp&*)Ko{<)0clHPXCKIZ>yvS*e zNbN7n-A&?HI4{g<>6_9=##V!pJS9OW0oh-&wm@W1P~D$D$F^=SNq(iToCnm(al;pp zSt$H;8$$kM>`Q&s(8s3p8~rjXBiXu^B|^CxkW?Bqc&BDb!D?;LGY57{1dLN^PvcKd z@>Q@Mu>NAA>hpTc%%1?PE;p&oZMUkUAyF%W_BG+b2`nMl5q*ksNOC?gg z;~^rNMT`!@U{2N_SI?x^%{HtQe&PxbE<7%()*N;ZXs*&h(`WTAE%jI6#Y%${#8O9y zctmt+L`zuglKq~v4+*y9K=5a$!or&qqI#>L?Zrr|(hD2kMb+0D<;@<6@}9;qkIbFr zBiep*2hLvc=j@UH8g86mOk>r_bZuGiNo2vG_3rRJ0JT8lNLAGFMzi6mG zKC#a-qGUz}z+GlWtxe~m!ra4zS9Rwm%y_5hhPI*!O3iJi^sjj8g}b`C+htTu5(FQp zawD)Hbp1FsG{xlmF3Xo>xzmxh8>!JbphM zcC9pL$@Q5e->zDWO23S9GKi*`qR|NO^}0+GfVIPRQ#t=H%f2&WJ!2bPHmYgZV*XRJuH->Fxf zt(3ZkFI_=$Yy@p|EOVwzNYDWj29OMdQ^skxrXFJ)fy$DAsFcav&DqmG4`is6T4w&jB|+t`}V<)c?`=ynhrmaQRyZz&LZ)UB>l z86Ak8>RWSOh1C#Ynz|MMic+x`^3Y2JkGqvP_NqDNlbLYu)t1}|0V9uIU^+qA@LCK2 zwgec#OK)SSk!xa|zO%#5lNgF2v-~02FWZ*!6vNII3v9Y@v1tSz7wao46-$mE{JaC> zoz#I*>x~Pa-U%rHVTI3b@Is{RzC%~1Qj;0WF%ObdE4OXWiMH*iLR@&ErDVETSZ_;U zo@Y4_Cgt(Tf-RM<%^cV)OihIyE4#=t)V%hku_8xOL8Sz3V=LuOxk82M5R-O-8%%JI z7js|>V-Ln{Q8Y*BMYw-XW!u{;&=v+4Tb1mS1U?!zsM|HAW8m;q-8`%I?jBgODq|iI z9+KHOE)c)a)sux}-0lO|uJI)D4^8l@WxR4Pgmlrb)u*qwal)~CRFlJDXZx*35RGJ4 z*#`%JziRVJ5Mo_J8{x!zl9@?OOn7OGvrEd{P9S+QU!IF_R+xs=d)3|ujBH~<0JEfL zm#%{Db1CJ2MhamHxDimeP$(6zR`SySg-#L1va|bc}F9D$~o{ zZgg|idudI3xAwpw-DX8BVrq01UCh}3X#(KX8O&L7_(93?b)X)Q+tyfCwlYD_nbx`z zpvgHBFB~_$PYC|w63+Q(W^#;Gqp<#hrUr<~>$Fbs$eV~Vh&59>%pp7U*SDhp4~TbQ zP1wjNGN-Ecpy?UBnXTMrOo$hjw=TJUM`E-ka5V}nRjS^2o@K_Zvb48R%8jqk(I0D| zknGAzlfE_&=mdRZ{tS%SNHQeryTwRd{*(^>>8+TIX&SwlR%D)c`=$?v)w!E=As3;C zV%OfFHp4LL;RScj3cMRXg)R`T!hMJ&@R~2J1#}Y`y808Vi}tjVt23))8H8IBc`_qX zV?cdMY{j~JN!QI1L}bPp5ai0|&?;1z79OVY$LUBy&6Hfu617q2V2^c0Y)^_W!q4)Q zeamjp4Lru0w7a4Pf_aA2*YUufBfNR!t{;Ob!tJLg>8h`$;YcqGsF@ z&wG9iF^zt^R0QStpWkW7w#>J;k<+;+xr z9a?`}$s}cmyC41aLPzxY+dfI-(`-X`8Gi}4;x4s5dZg2}D|XfHg;(a0Jb~l9R(U!j zt5!=#WxL+)_aOcf&^#&>sv`FGNSZJ&Gq>pgb{ya!-7L#%ZD7_TX}X*PC)!lXYl93y0G6(mN1G_Bdy1EqxpvV6pxz2lW^Or(DdF}FB& zHsmznu>hrs*6ip)BT0+h^V}S=V9WKpa&FxXJKJj(^`~Mm9F|xx3S_gW$=)1=IuaZ- zikWFO;Z}kf6}ng?w9&)2RV6)}{ekt<*g>on?cx=PdATxP&ZBC(1LoS%Mymp8L&cK8ys+1~yhR5q~kQ&_bZem%vl5=S|>Uxf=>s(JO zvIm$Y2IHU?=nSVS5yDEek~4E&htIKG3_K0gknkIt25PB|Mma=;?yc^o<(3`)IXL>x z07qjjt+PCt@lIs{jGAX&@Rpn9fSg(pWlV%(x& zg=WLYxWiP8Yo@*0m7p!VeV-FI-jm%aS%MI%G+5;sa2u|7^wMCXsPQ6ag9`WltXvMz>U3>SD_{ar)-62|2o(KD{=6)B1_Ep zoL!oqU7aT@3)Bc*FCJUB#GR|$JY6d;mUJ6+Tu*-CI4lskH&Lx?+oWkbTkYye6_X9< zrIM)jesk;#<6%lw#^0mlq$!{_+!g}?Ep~=k_?%bXkm}Wj1Y|5Nz7@y1ngr{LX|Jbp z3}QRZ%TD3T7A(E+KlkCG;%yq@jMcDf!7xaFFl?xPbFL|fvK-VVV14+MWM)WUPhL`E zpKzt+l)Lfa4YQ|M@<4Gt!%8MV^N#Q+pYruLO;DqAl3S2-ND@Eh#X+vMPPzhcC+K0u%s;?%LwvMHf7qI05@f`zgp2?e zgmB6a&Ho?L-qzjL;U{&0WHN~pA}86V-Rjm`$LTncT7BF@{snQmyKYf2fT3Xpj==z< zn|bO)GqYl=-(;&Jd54XBSCmF%odP$z?S6-Kykj?SD;|78e_(^TPE7~rMpHVW1D>1j z!JrN;3?ow6>PF4=seGi$aS}4y-SjFR%1PdsBOlha!5I`nD^B+rv4-gS;3asW$F%!T zUU~Ke>p(?FcdKWq1=W}qdS~=r4mW&8fq@Up`VLC^PT%ND^T_5H+=rc5Ub%9oyqTrD z!`*x1x<4e}6SeE<+25q|yxqoTHCyd2l|ig6mQ;Qqm$el9Q2N{gF1>_;x8n9-9NS|@ zuPBlcqCkz=ibDCaOG>x{xZac?Q&P(S}`PUC880M;(6_7Yl$KU7B4e9b78TixR%fvKwcAIM=lfkvL)C z=`r>O%(z09#Xy=-;WKCnC3StV3@c4LzGqy(*eTqNi~lKVNoR>y#m9A?KE7{vPaq70 zsltAxs>JWX{JG*YlBO|p!L3|7O}H0loj|;Qwqy91R1MxK*^QX%|$T9I@aAvfW^y5+)079(-!8Yz)qxMqnVm}-RQYP?#m`??hvbFRhR}m|lZQkI;tfQUH$SbP zFcR*y3(l!dxm#}9ba0qGCIx>R?7x+*I#v1W>674?lTkEaVSuHId%SZ{3dqSis8R9EQP{JZ1$@TETNg;!&Dl@hTKtL-tJXKH^a;B5Raux)sT99I5_n> zBT}!&HuUFJ(@1r&Ci7>U`Xe>guP8%en9)_W6?}sGPsikqi+hBhci!VdoNwpt8@7`J zvPTL;Bu%qY|D<8J0$+i7|EqS5YKPUxg1`H$*|h_UK`V_D+O&$lMAJLvA0FV~MeHR_rBP z?WTQ6e}l@|{w2L`{gPIDn`CmA*x8FXwwsQRP5;rWH|eL9OPZn@VYl69wFxg_)-wSf zowioBVRtXCbUJCGBdS!sAie;<00(NE1IXj-8JuLz_B;`qJQ6$OI!xH{83ntQ?J!4 zJ;Dpd*mQf+6ORK(d6);vS4-FRfd}pRDcG(v&hlZhf~tM3-t9T8Dr%qg&~^pmNL(pdUmum! zZEc|rKuBFE-r*L-9KZ$&iGXPmW?-ek&;n9HyF`m{tbP2rl*YQCE`T!JKn9cTzRU?# z)X1&1wIc50JVbCKW2$>z=@XbDBEicOV{U!Smb&1;G5X&1RJai7!xSodVaJgG@&*TW zbD=q1Wa0HVY4!Ac%w>YS4N7M|zsun+Z;F)-w;e-5yv5v9EaX&iGrW7@%+xFYv3Ecfte8R2yh z>WB;@wMLsy(%x#jPvy|Q#4g>KlEa18EgOpGC6^pbaBaInBSA3-UbJT0VhQ7tRIg_hS- zA!hNf48a9Ne?4NUQ(KrW3%b`rYZ5x)-ORLda=aFvuO>7PG>QNtp@P+B*Q19EN5-Fu zije#;^movJN5Vp)CnN_CFg1ceZU#auJpZsMN*@RpsgP3P%a%UAJfc$1o|L_?<_8S z-7N9Eyn`fj&>Kv84Nw9SZ`=&A5p4&pvih(=@J*gdh0w)FNcJf$Tg8+f8i`C1jhpif zkU}<_4pq&EZlh*0ri^?EA5~;uuRAABWv~JNa~c~iurbvaV}VyRo+5Oy(oN3l*Upo* zB3U~Kiorlx!%TzOp^rssRJO_*l&_mvn0t4fn^cC1OFa|QNh#CSdZ=8&k9YNYo=--% zua~yX&Z~|e-UZEZS^I{AqJYs*H=@Arjdl7;XtTI!O>v)8u*~DR_LSC7aq1oC(7~Ub zN**6#*=ckyN2p?6e(M;o#K4ZZ^c5_Y;YnB(42QcUqOEsqrjW^v2;-E%jm;gdPP5}L zQ=yg$44X`3gmEE#*4Ld-?!-Y{!Lid!7rta6TOuBQ}kd zil&oApJNYGK=}E~97pQEEH4(1M|GUKnz^BSHC$I5Tc>kw0n?%XKu`);HkLevWUxh2 z>36$S;01;J_1>bxtjlFqtY(=Z?FvGy4$*4U6-dRdrN?&08#9Vq_mG0$RGgrOLU0KW ztr%%;r=lCj&2yVwKR}k24=l_cTubCK9(CI}ktMKgcWaII4(|eA?%HLG%rX>&i8;7aE^@9Q%S@@* zlh?BMV57ZJZWOazX(-L}#0+o~SvM$JfyI|N_6ba!v%wZp*X9O(*RE0N+^X1-(OO;f zCYK$&ihH+Qk(%YCsTV2%uuqO)4sY%RMsw9R0D`8#iO*Ro0xNCdo(D)v?zScmzAC~wngYQQ4pDQsmn4P!)a-free#n0TVzjsP$Qo&2GFiE6Cse;$&e#Eby5NpQx>u263DuUOuUew zVm2}#>r`IYZm!XEV6M@mFV|?GR0W<&8iD%?o(>tfKct3~_Oh3(o-hb~*EX42DquRG?A)PuT-D#4*(iz|j@lNjAzqJ|B|d@qcI za~ss=)j8fw(UN^|vConT_bk!VQ^zQ>Asll%m0p)MHLi8~&Q3)at;3kh{Dx@olQb_n zr}x})N0p8Uvq8>h5vl{G*QQ?XoJjlJ1$ zuZ5%8!rI+Q2nuSOTRRdU`IPiFFa^;I*&3?#Ca&leo%c4E4^h-|#FxJ2fh^>nxw`Hb zyMx)h2(_{Dc6;4JC0&kC)7bRTyvnC}vq`pehEi~rF8NGFc)%~NFw7&vFhScEON-;N zv&&xEZ%JR|8VOIlI<~k#^$};w;+4dyNyWTM@QbD!EiJDfV)eAeeHgHc-^=PzG1y=* zEA}JYGu7tzS8hR{g2fg6w>3U;i)_-TRz7KM;yu`2pZ64X{rmnw=*#cVDiU<$CW591 z5I-h=O<>6U?-Fc6p}vD)YGRI+LeeyVLGE)?B&Yv)AcX=&^s&@ujP+ zm*IbA`JXxdXP*CA;D1hPDdt?1sNQXqDNKHNf7iPw#?NMKhKNqUjtSlQ2)=qJ% z(r$LjUAwq)WQU9E@RwhPZhjF;NyAeu;Jd=P>W&(fqRwo!S$7;Ni%X8(G|z;TC>QcQ zfoh&nk2n|}Hqk9-)|)D=Mvn1CeQ7Y;R?zJn@15pZ@%_51WUM)boeC94EVrad%H3}H zgn0@k8+L2c*zPd#Nn9K z{R+&##CL1AUa40@hmyHOm?T;6DD}jnmKik)S7(DhuHxbB$Hxa;P zrR`TK@6z`p`K}0ccD-gctM+!i$B-QX@H%h0_-e@SR79i9Bfgs#IINl7oocE4-d+1z zdWCS?`LECOx-fiEI`j}-Z$E+Mm+fRHCYn7<1+J)TM)~ZJU1p#a3Gkw#r}=j$Gv-Ar z%6rl!+jNUnv74y*2K)vy`eWwcDGhca|4B#P$Orl9K<2jEbS-<^SE_q8UoUUA+C4|O z^fy=ymwt=RY}MZ&ls%lebDL#;fB$~ls&=W8(zT@V*t;YC;SIWf@ z$Fw8=I>QC~~bg%HKjU&$<{LK;%*wc*C$fhgzEKoeux3*w>+`-`rADxbRh0yihwad-DY_);^Og_EX-`PyY zlgY-JaJ5VJn%qCnjJmm_usO*(p1C|{K$HHzrDs! zZCAL-R)JyJ3z=NV`L&4oqfC)-k1O>^ljp*_#fFu+=GuGv_&r9E8O*5~82NaUXSxdL*0H6S0EJu`wZxk~VUdV+i zEZh)w{ad-o2qlaUv{cAfer0cwODYV{^9b@k_&nySTTyeAYdA)ul%~7eT`|!=lkNw! zBti9v@+|?MAdf5Ql$GWa82ZX0M*F2w%rga}xKdd;Qt|zAh+;+ujX5am6%W=V4$pF{ zDvCvmWNb2FlJY3Sv#}ryK^VzlAA=i0zTO0AcOrMKAZs)8yS% zkq!Fmgx8?wnq8#u&@~g)gn*P4X>m%5pGio>F2E^dgAq;ED2A?Qc^K#u3n3QA*odr!}R<(Bra;)4=9g>JFDrftuPhb zG&bs0{zb~7e!Tz>F13o9#t$UOtQv3;@j`2VNh$+T>ClbJJae8LUZZDqKj>GvE-5wg zN}x-|waxqKVkMsSseK~CPZ=U&P(wKTe0p*GC*01A|bakGDw1*IndjV(J3 z15`Bkpb!Tiy%40f*@)?z<&v+eA*&DJcPep*WHFOd!fqv_ozH=T^hMTrdAI^mCC_3V zd)aFb0{AT*{VvvUm^=zpFC-BiN0(Banf@4BKme_fH0F-h(IpV_6{ZpI>nd%`p4r!x zZ7}REi#cjrTP$Exorg90TMb(VtmGzEvc6Fb_cDbHgYn`Rw+=Y%B7Bm8{&)aQh#<3k zwiS4MNA|Qy?odmOlc?cr&ybx63W%X>{qQjxmSxCqV)uyw8;4w1X>4uRpnS) zq8Bsp`l<*^uG&h3QUpzuCDhY6!8(lPdl{ls6mh3H$i(*I+7fvZ~8~s|A z{ZZgrTrM9ibxS;oD~4MrML8DCU0vsO<2l-;(ca{sChiz#`V04wvrep1s4y8;cp#VL z9?7Al8LM7B4<$}P>TNa(QI(U}Smts`^rek{y-`)PCWDZd)w{ss)er{`u$Cbxv*zSE z4#^)jkzWVAI$obBlln5rtx^yE6dv7`1yL+Zm1^u-({+x!-8Kq#udP9}{gNSiCom03 z1Hm`CUOC#30Sqb2!vPq-Jk#m-wg|sNR9Gh?Rca8nZdfb=&Ajj^@#+rMpZ!7)S5pK+ zQif?ykmkyfZL1@PZTuxfJx33;E6M5FMV{-YCLJmtFp1D^+swMK77lgxTPkvbGKsBem z#YI+le+_U-PIg^)VE7qdcH`W7O{2gQQmsqN?l?7NP^eLP_C_=0QQT#%Xrc=8FF?ak z@vA=L(Oh!fXVSSU2i6*Jaft3~s1Fmge`j1}qtrM|#ZS=#I?s2O=>Z*4$v_C@gA2?1 zXBP-lc1Vf%?f78`UfFXJ;!6#Sh)AZae+i1pPFr^6I5QuLO=fR|xk>cHT@E^n#SB4ZMw?{ESb$eeMlDcFX_h~ywNn=X3U#S5*Ok1? zlKcO-Rq%BimOVV1jDj!t}{00D~apeY$ubvxbb;XePt3kSzz#ik+a#?Ca#qt`$k4+-+ocyH=;s zY(*V-IHdJrFAbtwN83UWU5wqdAyQ}#3R0C;xWC*kx3T7`;(}Wu-E)1}r4L{nlgE&M zXL`mg{-&fLWVzE}cD6ajj_!n@6=_C|2z7%EA-e9d;-u1mo}lZ~`faX^bUqD<`T5M>e=S}d7DsK!;UJaOEE zzsZb4QSPzmo9|{%PGn^rG3vDwbUV5}ZC9XaZeKu8=;7S6CzyeqTvkXqD^Hi3A0iU04Ff#JpEth(Ww$ zth`ed_8t;IV(MIl3R5cXnbAw-V9}5iTSdMj z6nD0Tbyyw!M2DR(yYXWjW1(nfjPMFq4@ZbnJ(c;1wRK2OzBaGjOmA6QEUlNWERyxB zR*Ix&EJm4%%89&5P#@S zP_=JxNJsphOSEWh_Zf<($X7i$#Bd~gUB@}$Bcm!F)|XfMl^X4-@Ek^8c61Ub z`7$8M15~oGgiEz_p&on5%1CVv5%who`69w7N)iBW&B{{DLhS(36lt~f*ab_>9=5(z z?b8a*Ac~RXXinfzY}DvuPS<_{Pj_Z@wAwr;vmQ{aE75SWwuu3v#;+*natYwaQgTAv zOs$F7S7s2k93*{pT+`q8Kiwg%)Cd6qrAu1LH=WY0q;$hzl%$ljv@{Y*ON|ggk&c1X zkecLx0b`8qx6kkU$M(i(8G$<$_V_xj1sM9)%~5%>Ax4@c*MSu=ufG8Yu7;g{dihOT+(vk6<{{}^%6dPf z$NYcYnf@t^z!MS3IViWO>bWdp-6nkH9<~fy_ej*%Vn;Q)^E>^A?^|X$!ds(pHlUA3 z4-D;WZ$*oF8OV5P9+8~JCiatuEqiM&#>qsmhYZaz7l$%2+K#tHMua+A&pW3x_e|Y!?Tm>rFCLhgG`NpdZc|GVRQHoGi%t?T zXm~DtkDfS!yt&_1pON?}k4yEt-2$?u&3AWQ5=nXR&6n0G9y_gR2Ke*|N<@d#;p=Hd zCgMxIdBn1NYku#~Z4mQl*6$%A#omL>xUBY;P5gtUECjk4zA3PH{|kPbl9&0`sC|P)+-qV*HOhle4Jn@B^+tKcB z)spxP&uoV{((t>H21_(q&y&}&T4dYnxiC3lRe5(gRod!&8_{W9-ptSp!Duonmz;Wn z_}bZS2RxMCc73Ye@rMfAHcQJm_vVGE9X?0^{J7@7_jV6?6NlrJ>R-m`YBkq3>!vc_)JjUq=-u+ zLP$^A{~LIeJUFwNA2JqkKlu)1F`bjO=z}G|!It_Gz9K?57T9 z>?n7E=^Gx|tk$|rx=L*RcbFqS{N+KsW|1K^^|hKKK}kJTi^%8UQU*>Ue*O=YPDP&; zez#h%3U$xd%XiYyK_%@sEEIUG!2LlJ91Tyk)Ng6Z>5A(EN}RUB?=$}{-M#HBZT5*w z5^h0QxzLE8J#{?*)+R?TZ*y_Vd6 ziYfulhznxzgCFJJxa;bDv>xVcKIi_eQBO;gzP}!Q_M^f;!`rcwi%0)Q)gP};uDnW< zvAV{BU3!F-&M{ko0!IwPG#*vX04cSn%c!=&gZ-Na^UjsehaVXGEQB%#GH|A38Mh)$ zr$^6z?;xqDTMC|&`_T7pv{>AffQDUW#$&%hzurA~_MZlWjee2dD;Oa`^s7c>XlmF> zL(3H9ALimFsCJoD@kmw;KNUz1)H=7syZ*j{VY%WG@})RPAuq$2JLTj*tM@6yb{Ce^ zjudO*{82pwV4{NXd0$CgDjf=$8WXSc;?~rV)4!-*yRV^#E%R!=>Lr(|eSg)qb%N=CVRMkJFmN^kmPI#)a2$efi?Cx`Bts3*XQ3@;cAT{yImVopE(kA zW1}*^Qj1?6G$r#-m@q&E-3fk2*KYD2zevc~&3i}oPn6w6#CiT1%ZtUbfdGbmohtPM zek8_Ll;LHaL3!J}UwJA8b7Se8a6ZHpci`8R?`7+Yk_T%6)vwOx+w1KpbFOt`l?q1r zQ|=3fW)zAqI>Xrv2D*OW-KCvAn{5;H5+Yrk2WKgD&HBT{%Dx7&npuhRWn#*vr2 zfxZ{4X@_~L{ALc2aZ#jOE+HtmsTuuDV5kvXH3}T;w)jV5_RCJ4yG=+ikxum+Rs4LY zi4QYNE1hR25iP`4##WU2k-JskM|x?JDbMWgH!rx-o@rzEeTKj5FW>Y~em{~g%eF3~ zv@1XItxR7zKOx)<5Se5iClcgzJv2Y}%Wlpz_uc*-x*Tq`?J}Iauok=)iA~G6 zl5e`EzlS}b!~UWdSz9&jU8B=|w@nVZ9}?mznca5PFw5MC>?OMs)AJgE8Uv+r{mA@2KeqN`85`ZmAmE$hOHJj{I_L6f ztE-@VgZ*Hi6$!DCO>(v8rw<2baq z^janEErhL`jX^uXfAw#8`mg`%rB)PN*2wmjC5h5`e(S%`ClqAPGBzxS5t*dE)GS)tgEHtsWzF;W`6vIyeQF&%e!IGHWpEg(HObVy zx|!0EU;Foqn~!NLMgN2N(a`@WAX1GDRAr2>*S=`gO}YvWjj0t3No}=!_b6cf&DO7R zri1NLPj@BRaJRr`nm`8W-IA`7OVFAhAd}27g3%rG&9bZO5}XJ>hVJ4IQeF?OfZxVV<_ z*mjT~9@O-H{L(gkq3yG=ePYgh0CY#BB=E6z_wp+l`MsWTy;Z-O9@Jw>rDi7Ma@)#w zfdGTUri;{}_j6j-#$~-+MXo$3#RBR`&vt=qWyhlN`YU3V-HlzB1La$~?s+Mau71*L z(J|SMFE&i870PL0FfQZS-Awr%&V!MLpOfm68vT#EV?Kqi=^*lVdqNh zN!oxU@wc4c>PU>UCD5u+&uC9Wny&H1W8xO_FR1&AgrmYP%Q7;%ccCoAz=Wd_Lb{l2 zKFE`Ne((2&_5E^{sk&MjGOse=zJh&Rw0#xYLI{t7c&?Z>hIRDce1mb|9#{8UD?6d9S~_57L&&P?c0p*;l8ryGyY+Rwyn3mmMwkK8?RH}+H6HT zK1!(j$1vX`|)2dCTU_gDNe(tDLVAvApG!Mi~H<@S=xi|*-4>}w}eT59SmCez;0 zFefR|EH#Uqg(^4qHwuYOu7~+|4Pz$}8vu3~+_3wpKdTu!FT%2gU(G>$R=sYjk5b5W z_(5qCOEu8RM_^Oc^_%B_dD7ca{QIRrX7i@vPmqs7CX(V-iT3JjOHUiVSnCa?`J9dq z_Z{CndM)@x^;TQz?8)Cu!G8C37jJddF${LlWjy z(O3-%Axm`#yuHTTNyCwIurInpcywJbe5v#U5>Y|g{-oHPPKy_kH55ceQA*t+R8;|mS6sw8?7$N4H&e_=5a6TkKppK|N5BU#dT!B+@>VBit<$|B2R;?FlI66z*F?O zb9vZ0X8>QkrO_`#X`QqY9Tq^q0Yy!c#Bt`+yZGqx59X&TmfNRWUH(njRW-l@zWRdiz8-!jUAVTNss4oQI@9M@kW!+hgqC2k8u;$_FY z&>6LpD-WUL$4g6@ZHaw%wmABgIZ0bjKYF{`jIZ0eBsX(!j`*bL)>w%`-l2Baz9_p*Br>bYDFm_Y2wqwf;i-&eAk3DCMtW z_NnU={w%&;&y+VLu%CwMd1V{(rtcDAbsiLJ{${dnjRz#-l3D3H8LNpp#or`$Lgb#b z)J~4R%~7_z`CX};U#UgG-KUV^WO<-?)Gh|!YD4m0 z4k4ehH1KJRt7Q6*)}MW^KRgrg?ub{D?|4q7w(;qjg+E1(gxfuz@;j*lnd&2EvJuM8 zyVf=_fHP&C?b}Mx#D)ktGcB6{m50m#ZSfyXhwl%%1aCtB%dhzm+!&SJt*0R{QD50} zG&1{u@Hwn%hsAiDffmqKo6bG>6(Q&!a6R<&KVil?y44|v6-JwQhDJk xMehbrxf z_zDK3gw0$?+_kMC3xn0*Ip62^x)B>FzUFJ0pSvPo+gbdRw9-$Jx;=r#(bnG*-aQe? z25!_GiY&OxhWSq$uX-x}`Ybo&JR(B+Ta2^q2M4d3N~g>-l=YA=6=@p2fv%|#e+=tF zi}JSx20KNw%}$fr2i0H39--frRsAi$OQ})sDO`HE^(OcFs-{tg*E~UQNc=%_(IToL zNRz2J-k|u%6UVy)Y10Ax$NyOBPG+e7S}fU1UAsAqtUth|4){qR>)j~cn`F~~xv?=~ z0Z+$BMZH!9%uvoqTo;!~Z-zLrUKRLU<>chVD7Anp(G@gGi%PT+= z4ZHD9Vk6J89(+!uog@BB5}%)*+6ryfA8&Z~F5}8TriKgew__nA+u~;>2GJK>^E>iA zL774bQ`fRnnn_u^*N@~9miYCB8^z3x7RyMl#*+23)xDZ*>AjnB1akD+Uw`;n@%lqt z==#;KHAMB{bN1Vl+C7O0@yOVw)N1lk-**+Bt|aP9kGHJ)Te5Q`Ky#V8PNAB6E{c+( z{ej);4i^vnCB;8oh^3C5bn+(bX=yRnZW}u`9zeX5jLQo|#UXa|MH5A=BE$-Tc;#bw zmH^K&^AR%_P`LW56OFctPcdiwZYDzUGtUASKg(`V4X7U9bS2XU^7>oeJ#~(k412f* zU5Lhpe(}s}{PIWYE3oBj_G+ZFlsG|tfS8qY+EKI4iLL47PvN;5Q3mJMg+%azhef{A zXvs~F62o2Gmm_QQPG%*_s^2P3JON@_4=0{9!{*po8wi|Fm7mpK_x4h+F_6_(@~^~r z2?W2kys@N`s5Tqh&S>c{7`sKB1`bZm;R`Baorvi)!|V%fRRzaQPkqOWBgB-^4?CqC z{A5azBqcOuWEytVr$H#=`XJ?jR7{}HJHtf#lxYkdlgdB(T~H}r2Na5G0>Vg@y_D^x z=YNJRY17s(X_Ln8_9A=TRcv4{sXNqig8#5}M5AFbbp5e03igWO${Xoi;{uKEf5YvT zj@R>r8LByw7ny_?R&CbBSl+mV$&Fp?d{0b5Y12}Rnz4p_V`3un<%VR{pbe-@Q{R;ZjwLaDD0(!M=9OrTEr z?s?>s+B91QZm<@MZ^-lK6{y@xe^Z~|!V__85sw#3^gHWF-o#o`Q9ryq^a%3gxo4_Ib-R`&A}vi$Vu##F}a0RTYRk2Umi;*Ln4LmiMz$`H=a9z8v4gVKYb@E?2XK88Sbe>bsQG90 zRt9bYD0Qpwqqx8hxc%hM~M<7*R?;zo$;I~ZebZ&!#!G>Far{aR0K8E15^H}J|epdF0$)|3E zZzWHoC*J(J@GNQzqi!+DpvWZsP;ZL_rrL%LbYKFSQZM4wJ$HiE*dBYYXF8G@sgIcL zl{5)uKH)CPlcZ-MJd{Dqve&4*WK=N;e#Vg`9#d@n>}E6rA5)Wyq8{0p-!7`JfHOW; z<4(etXohJTS7+_^>71^fdCv)FFeC-<`i;Hai(R65>!)1TOFi0$hVOF4kcz~q7 zy>gxfFN%A%8!t+D_U@Hqbd0iX6{(apNiRMkM^%Lw0gl1Q&W<%!=&Cw2&E0q)UZrE& zHD|sOM-k0>Nk@R675Y|?N~3rxL`hJr=@`D*8^WkCyBhBbjtam$j6)TKCk1NOIbw~% zpJgG4BA&G%i0ack!$T2P6aZL)0JDvncdFg7gO*iW#1U+>cQTGjc=x{Pr@oDd8rFNc zSwp=0I86Y=|H0hVDWtV#n_^D~44 zOt4I8lon+8J~mpr%3+~?$^0KN>xn0#Q`LbKVW;Ygk9v{5Svv>7zZaj?x;B$1M3__@ zv7X=u#|)}gfg0z0-4Oz+APNLK>9yqSqjVpF4T9e0ITlaEq$-#ILCT8DgmfZVqXsn{ z@DX{cTVx1*)h%KKa|M71#a)5@G`G;@q=Y{pI@=zr%m^Eev8TbQX`ZfZS2Y8H$x27` zX&SB>|NErbx`eX`R=cWv5%#SwPMO60Rn^%XY+M=zl8TsN5W456K!Liqo+2G0Ix8HA zQJogWt>CqGBCPBt#gQol&=E+~8VS|}lOc3f0p~J#80Fal!uuFaQ2pHe8nF^p2k9a{ zil9Q22*q6CON??!-@M}xn(_()|KCCa7GUV|dIX=U0|jD(^?p$E>_+6FLxn~8*HO|MY(&9(4&K|{XR?oG1Aby8_Mr5nr;0+j6S$G8LR>^K( zedJ6<+eqOivPZbZ*;63`D(+(PV>n6vEW&&VqC{p3JQ0+v_q6F{cbqF*s&&$yUWiiG z`w~r2U~5GtVZ=AhOm~D(I&S#0L0LyIwgw7D5q`nOME@h)KN7_6c4DR%yAvgrQBH&stk@!GTmw(c z0Ew@)5|o-J6m{|Lkn}1dBuPCq7LzA_eNE>tqlktEEjAe_H+*Bl+L*T zqnWj<5G6o4SAagvX`!ohSfo(Y6<8`n9c$EYh`Bs*5bG_rdVZ8u>3|J>heO4odk1nx zC`w>f1>YLQzYcIWuafonpG7n=-HXAGAb`3%$mv@UtMbj62clUu7-XIcrUZuy8*Qk> zqjAcefsFqV;ka???hb-LC8xflcgG7b@$}_bdrHKpstN%jB)#k!U?rX4h^A2;cR{Q}17z0i!#2)JaA&fRA8nqUOp`QJA zR*(3(WehRT0)?z#rk`MUq~W%$%djYPR%1#(klT6%A0R5s=&>2DswPWDHLD2b@yk46D#g9+8{O<=Ik?~J7$vz7rjZZ zLO~R#m%gk@mo#~0ln8NES}(+9X#I`;kqVgUG_Y6`6p<8RXN#4OK5GKhqq#tl-$8Dc zbyfgL;3d^j(2)!;mg?xoT@lg^M+PBve&)L8D|vqAGjMRnk5OvcP|!n1S{vS0rhr7f zj%=~k=b%-}I5evH*}YBtCr6nA~Y>M|!UHhTHl&GU^RF!(ArsSru~MY+TA zuga`-_(c^pn$*fh6C-NL!HZ>Su6w|M9nQaEWWW|QvDxrr)S86<;J%|2he4Kj*aAW% zEiJU1VF;v-hs{>zEUuAkKD*DHR!PHPgGT$ysnIN+Xf1p!KpMk{rS=8F7YNa3m|M@0 zsO#U2H_wM#Z)Wb!h!wGH+o9zI;6563rXNPssx>jZpAH#Hw0`h=VdW}F2`iAS4OL-9 z%3=zj<+NyNC`ffjmgehSs*lszSk!kfMu709DV71r#Mad?gowB}c2wBi%|x zkiN@ES|yHsj*9;*@UgZ~EFHYOF?}W}x;kTKudcY9;Vho#))U$~bb0*T^!VnE5KMz6 zhpG@EXNWKqZ~ztB0uNkuZm7ZwTrZ=9?8vPL^jfNPyB{%+ld83%khYgkgMrFq=u7Sn zYXZ#45SRuDPQFPAo0i=eMVFi{lr5Boo@)k(XQB04TrnQpZT}j1L)k z%HN_@Kw0(#L<0;Wu38V9+8_p~p)ZH9lu#FKYQu`VtgFW@2D*`UW)`<~TX2_`MrUQJg`XvT8xiInBr37v|<{OB>nJ;G&hyn`261!qVl~vaP z+|+VDx1`DE-~P4^zm7Y%iaDCwi@QYf^k9vN0golxUi+8*S zD_|XmwOCj-4`ex?mSNY;hqp*)um^rhA7OGBz%5@GW~Si=yOu2np@N~)ab34gvt38WI=zKbSAW-cI$ z9GHPY9=%66p->w4m-|Vh(cyh4^cksgZ^(H#=5Bl6U+#`w5^H>r91h&W51W=G!nOr| zzo$bb+z3plvG8oNSx>@bm&ak z1U}c9v2`yAb(x5!Mt0)^)c9BkL0g=cft+i+I4C~;^>sAU8FF_|E1XFWsXF4^8^z*a zYi}eR39E7{l{>s$3-7oM_lY|amr6J|TmKf9nI+P1cw~DSRYnY{n#6?zkOCA%sz|a= z$(4K;gY_EHa;I;}*&;>tB>Ar z!vk>J$l{1VE~}?WkxnV9=W?`-lw z+2Qts!0fCf072iy*CCZl=PVa&MHyu<6#Sn8%O)N$L84;g+#AYUjl25@)UOT)G^elq zP6#WbRK?ytgzGYhDR(y~J_*22S@Y{^A565tqsB zgWfoJJ$1LYXI0o5TEBD6GBj?)&~h2M=g2--*Rr-2@OOaqi~+qxLg;G9d97=cM{6^L zZ3@W%ia|?ILbjQejO^u?6n+`*JAwU<$_3@5z=VXqz5`@PG7k0UKvFoJM10vo-habd z?i46tdufkoj0!ar%ezj>eIz$c`;i_<)yY8|&4PT`Hs+6f3a3N8KN$J9fD=rxA3NU> zuJl&FcqXlY0H9WL7mGC<(wg8Zg8+)~@3kVQFGb%S#76zW!zjdN&ejsZK>-a`tzo-w zzJRu$-{65*k%a*<7Y9$^0v(t4=0oETRtex>a$rL0_SNdZhyhr?ec|9{M3Lb2j`t9D z*S;N%-L$`q2!ro^0S!Cg*0#KxcK5@6YuLVW`(Tu$ZR?$z&z2iz<`gHl=tmHg2Fm;W;myw8 z-PBCreRLM#N5IYu4k5<7Ag0?2hf0-`;=qa|cg*L=DN5y+5pd-KJb>wQvG&HG3T9~m_10RTb>^Bf?WlozSA~R_$kcs*B%^JnkyI{i4yo!i+Tm*86>iwe|DXbGJ`Adv}DjUI@gTR9N{c0w{k^QFuUcWDJ;)s5gC%HDHmApL}gUw~i z`g~@5Ggpq2!TAX;l!Tot(nfxOVkHys^8vV^{}~{98sESICP0TOZ7Pax#opx*``@Q? zxiy(TEC-p4H&X)>Fx!P-Vk8;ek4x0ukk%8C(}GTEIk&CKmZU9$K_3W+7D@K}mJ!}+ zCA-G!OQc+D28|lT6+tQfo++Q!LwO%l?9E>dY1K2eV8O)7wGTciUHA@xO8E;YEIy87 zXY*XYZ4fBeI&KGUGWwNg;uP7oCdM$7aqZu1VRV+ZHqk`>N-tyl)~Dt9kz~#4;5Vem zLX(&aI3T9=4m90EF|9CVZ%?HBGTa!`e<;)*edW`GVf#3MRv7}D*a&uspQP4+zlVui$!Zfc@Y4*_5&4i9C~MPh4+2`upc?UFEIsv z0KMSvSJ&Q9mtPcvkoBDH{y{YktSl}*E#i*R;9`UK=v8}2`fa#OtN0o*fLQq@8qVPh z{_%7?ngZhTOK5s0DtUF<8XpHwV;V3$vhZW<9n5QJJlDW>CNnDaR&fKEx}xO}gG2&G z6$eRLwCY&~Ar>*2f^|;>Km$xMY!|wUJW-+ ztsoQ|Hu`qU&Q82_G(^KTbM}?3g#&Irl>a8}D`J2t{-W{qVgTYX%Gs;%GqWLrf0_AM%hqLFNl6V+NObSRjjrL7RR;T zWtS17eZBlg)ok|fk<3sR3erFAp`US{cVtZaH8xZ5>>+KG2wc3A%zh0u;Dvif3?dZ` z2-mCm*bsz`o`G3Dr`pk_iq%g(Dh~scU-wINKiWl*&C1AcW!qmGZyT?mQ>J5dp$rePmAYDAH3qD$O^j_Q?Fn&@AAy>|S+{1~O z#{}<31(`#DSXY+a?feMr4bHdfjg$>4IF8dQQ<=Q_x_gGG3p>qlf z`*je?+wl-GYJ;=XV`N`9Zec^kS`bCv!{dy1EhX6-DPhe)#9@g)q@t+@OE?Ur^VzDKg<#fG%B#xFmh9)kEg zZ;|z2i)Qd|LAFcX7O|N%^6=+a==1%%e#(|{vrypl0!R%mK1OvkfW)~+En@rZbn`LNvXNwO*9!-$OP7*M#o_V=G$GE{Q%TDl z&LYafIaN@K;?p2IddO%%_aO1j@S+lel=Id*EczKIB5{lPCj2xI%AOE-`~DzaaSk2^ z#sK~A(_Rcl(IZ=vj=mDn{=$kXZlTfLN)9EwfZ6G61%ejP>{-mfy7~A45&SD7!Nm+P z7UxOKC|P?7;L|q==O1Ya9c~OaIb#g_#wo|H3h6VC4xhk-fs5FP%7@(`Vs^P7rCVeW z7Y`B(2b5iwfOSa=3A)@f;=(32ldl1e*}_FwpDMudPb}qeGT8L$XOt*Gq}63Nng%Xj z^G`Mg%K&xpz_-Q9f>-)mw=SJ8!!Y-0PV9pfEo+(m-`|$o!%gH2RjN*__6k0pZP7wO zq^Fmj`aUyYJ-GNg*88soXwDU|^?D@{P;dAL5_%Am*>Hy}p}miqJ(9X}WZmcbroj#oy}0yz&B#aGUs9qECS#)6y2 z-ke5B!Y;A(WtnTTq|jPu1PA!s7;5tey?I893ll1$_xRsg$^?DpAH2a+ z(nwBtu;OkV4tg<%L!g7t!~k7rg&pV`5XVt{dt*H`&ZwSC>u|4ji3HNNK>Yb>qp58y zF#Yj?_JpX-(4}xN9kSc=;3D3E@?zJe5d+tTy8IJZtnzG?p3FHIkiny+g}9JcKt{ja zer}a?z@|b{!ht{28~dXUj-crIWh`w>CZE>qX1_e%!B)6ZlOb-4=!@Gti*83KwS-=? z5n+!$Ztef{6OrHlHBnH?KxyKb}dl4S_jN<7-IhlHe#= ziE!kDBc(4b53q2W9{X{@0Ty)hv?(zb1HHMsiP=&*(XX&@j~>$+_;3B76wHfshz|~6 zvd!c}7`;-t(sxxrrTJ3KR^dEpDfTS#Pw|Tu&x>6y97GBKCaB!+pHC7MgspxU)ZlH<*!z^n$vO18kGZZ(ZcHSPvs2XBCLC z#jG^18IYE#)A|L?L8WC2txF;;mgaq4zRQsr8+-;iW~?Xq8|`EbT|ZrM6ov9>3MW39 zvJNhGP}VLN3(>NVB}Fn0>Yi7xN^|=*F36p`OHRo@FF%v@HaU?k7Jyk)gXoqE)V?iF zUmxn5bb1Y>3766wO=lPRSrWc4GxZ7SN-NT<**cl`f(YhBl}v?L8Ky*hUI^9h+gV&| z=Jb$lyvobd5zl$!9g#&XduCojvkv4gb`Wl{x3cAr&rO zyUXO<1@U?vwFhcVNN{{2q?|P53QS53)cP)35ZSEvZnM|Zf`Ah&mR(ANG6Vy@V^cWEeJaHY2Emwa$Lf- zhM@a7TvJsYMmFf@9=$YhbP-GFH5S~a+y|Jj*rOcA^9&=2s>yVg0D(#CG~ z$aY;owkSMcQqUVdxvHvnd0R7+SNw-jDapTO6>%-JAx-;@3KSuiRc+{2Xb5r zt%w^wvh3tbcK^+jStT3rf{;bZr@xbIV2$T%=)WGb3Y+z8|I#fSk``7Bla*j;>#|&D8Jn|Lz?#BjX=QfQ_8@hk=5-}Y}qHDcqqC)<@4PH~g zk=DtSK64K3^X5Nq?fDCR>49DU>hd_$e{<1V%;pcXFI1%Tyae#DF)Mm*b8vDO=9^;; z9!m&p*4H8*>|gdlq*9L-W^@t%{jaU4i2Z0zw&V7U#R3>rQd=Qtk<m4JEa6B&E-C5H>||}ocbKau0K_jO56xEG45{` z&G_Bn@Y98&?BOT&?WvNA)u#^a!dh{pp6|TxuBg01^evR^1pkUG+~-61T7I2PWbCtp zKSTOjjCUQ%xq{p;Hj}sbyeH|Oy*(LD1h=*KlPi=a#k@=RPPNErnqv6uA=_|Dz@Xp8 z;wCCG^z!Ei;cv4ntq&A4^<=)BUkna?)c=%xF`WTZ_#K2o2+ID-+i7yJ*Yy3+l-9Gj z!Be+^NuSE&9c<~B^jr`>M;SNENOBWSL9TE`03QfRn4gfY1*A4*$t$?m>|f)*g?yyj z`)4Azt-tAaer7&PRqFJSc-g#jp*4T_L4*R8HrrS-XrGa?ec^92Q5cavm^EPYRUt#* z5v!)t@Z+&xy;!ObUG_D`*3_qHyAp?1sQ|O}fFiplsr74!nct$k9?jFfcuim3l_)ZB z8F>l8Ht1$6G>=*aEu<7!2=u2ddG(i2-~zV1<(X>Z<}KtbK(6wo&ad#pZ#oF+(X%yf zj=GJD)?aTqrR7(LcsltdC(9d4Bv{-8jM@?UJR5Ij^*W4xw=5MeY(%F?{W&q9qp1v{ z$aY{)UURDrg^|(A&#XVky-d2C1~Z(r8J0V~;d+f<0Lp4d?Db4mgjVtkVx5lLbG(BUrjM9smh=_KXS}FWqY!v1%>qetdTF3ULVrciW6|>>yYkUHwm!;=QMPCPXvCO z8O-N9=Dy`FI{@=cMR%#nHVOU4^|;>tTQpL4jJ9Tpy?WJYFE~k%l}fnpQ-vcIVf~L? zW(6c{6O3Y<#S|2&kZ>e_2I`H|mlF$Va_c6PX=@l2)sk=gL*I;iC;SsW+|KOG6!z)e z{jp4Po|(d8yKKBgve)wahAA!mWR1U_WwmTw0qY?V#te*|&5kQ=k52U%X+#Xyo0lyl zpJPP10m*`aa-n+D#PIZ5R{Qi8s1F^LR;+W^b@ppdhUs6*f469OQZt$JR>n#tjFW(iS*anC zgjWmVBiZ6|_SoMPNs863ujBDMW<7kMpPYZyK-4Gfq2{IzJ1H_6lY0AdV277iYT;>$ z;>(wu)*;4BJ!wL{Ro6lm)XUeVF6E)8n;92xQlfIhvWdKJs&x~icq7zi#AIdehRarj zhFe6dcvU5dT=WxLUL_Noc{jOp);{x8LUwtmiix7f*-i<691Hl&j=ES~SI%(R=jKK# z6)Q)kE62ScNnieN0ucM>2?8{@#R<7o7|oYEa{@a-3eyVGExvx!;Y$IJ1A#MSl9Sfg zEiC91UqYr_cbx#I!Xmho%Al78vd@U}9r4~;r{`_L&v&w2IY$d||N13*MrT8E=frEn zH*SvXF|QD{>y~>5-E+cU3^HOP!)1y@6@TweR_3tV9-A5E{TmAO{mo=yG_24ER+nHo zFpv-kc^y_;k?02eN-EUF_IryKpTzT@TMzRD5657$L}AWq&#PRHzL#!{9qs>clnUdL z4xc0^%>+$}ro(m{X|BH+e|LO0FY}qm6#X^#eUJTH?FgkxT^9C&U#xK_0%quwfGXd+ zb%&3xL)S6`vsaSoBX^>k{)z9e$lWFW)OJ3T@>q8MAV<8KJ;6h>Y4Tq5W1+0<5u{q6 zreJ5mPN(XQQ4-zZN;zXEiQrZmq9Nk-Jjpl-w7eAasGD+pc8WjnA$s@?|9WI++V4@H z;FDk1Grz()_Pd=c-Cp)*ndipGXw?P?Jo+%yz0_mAgix>u&RHbx@90Al3D4y?6^V@V zN2PZr@VoBD0^3##+sMack&b_Xzf|lKZyKdiPrpm0ei#o66L6pQF;8*{bLFL)d3>$a zb<9}&aVgGPql_Dcd}7{p{OkPFPj!>HYORq9RsWG{NqI|LH>w#p`Q1`sM$(d8wTrZg zBOC0s)W1l#x#Ai;jiNMF!aBQ>DedfPL3z&4cqd)AA9huScM|DjoUE@*{jaBJpvO7D zwiJBsM?X!3H8rVz{MJ2ks_I!0}QcPuh`MKOIi+&_ADNu6-3C@Edxq!o}Ky#V^K@XKjv0M+YT?ZveeeTqLlf#-|2mADQuFi z8!OnRDYVWu<+fFlx$6Yp>0#nErR0gVCJ8zTD??eE3FJ*a847O-d+$2`Nnx+z=Jj!f ztZe=MMun{7%YmU#R{R{(64fy#ql|m2P?Ga=>{?&`%8wR_8#~(RCID3_{D3N&nN0=Kk$z7;}_fTK0D95_fF+}TX|-? zc{~$289WmbsJIuZUk4azhwS`a)ky@&QBwV%liYI%!ZtR?51!T^+|BrKp92A{l?Yhg zP0WCm)JE5Ah7WZ3p_0ermH)&*yeYp=EuOxiJ%6vjh7_Z|s(C>QT~An;d)y&w{u#gT zz;AN<@NI(FifKXk&-|wrnlbX%c!|aZJlf>y8x!iZiQtgF?I58s?LIo^x;x_zE;a3Y zvwyLUl5)zr&xPL?f7(kUSlzZS+-+H15FR-YE~J=>!9+?ZZ3kwPdib#R3&>ieum17~ z`^7k}_~Cva`NVGYY1_KmbC)Tuv0CEJ)!KU2(odcV8A>puhhxGJp{BNh`|MU?AcW(G zjHuhAgI^)W-Uw9EIx+9!UEF;)8370?qLn{#&I6}l{ZP%<_Dkq$;Fm=I?z=te?ykcy zZ0qRl>H7Nzq$e*cyZ>XEzW(+Xn3K?!Fr7UqZ4zL!EbL{>$e`RkR%z8p{_zc+$LGcm zUB8GUa&;@e#c;>sCFY)7wn_jNT=9mW2(aWPEMHGvYTydP&5B|fHw z=~*{^()cnyf7)Fc3a;+uzEQTuD~c13DO}I%H!1V!T4$oxeDIR5=C7pshO7NTmUu}h za_y^1#vHh4>)nF(&1C_z2EmtCkiP0l*xb2mPN9WG`rRACH!(iP7FTZ-h_uQ&BDi*F znGMF;#O8G(pgzc-z?EN~am`PA7<859D8*#Wh!_*X&l{_mH6UcX8H))o)56_f9}daY z8Oz`Ys*okMpB#t-re>HGI75bdwW(nX!Z#pi_?t>gsqJBsmzqwj@3vQhc+vlO@nx3t zet(jAca_ZQN)jwa>cNLQ11s7fxEEjhgegQ-VU~Y2t@69Jex+a`)pzrVYqR83d2O$`soub3UM7;?9&Y=&p7yPX?X+V22=!_IQ8gdy zRBe{~#OJm}XRWan1fGpm<(MUCHFCYLdwM#%cM0oCUK}TF*3Hd*qEntByZf)O>u2hK zszu;gF+pUkG8_MyDTztrk2J)hfom6!5p(;Q&_Z1d1FzLbo!&%wCyT5+{PdOgf}K4? zHH8&-|7CR>kdzjqXT)WQF8|U7TUSNCXC~^A=8ItilJ~xooirjsxK>rUzodh!ENWCm zs+CieoE6G}sIX2lv<$pSX5cK9-iiH3EO_Cs?r-BeI6u86PXIkMT(TY*V=-H-sUYBV za-AGjMs+mU9gLzB-stuC|Gxk&3)1wlHmn?l z$12@2@&D(lY-OcD7AdfxL(qk&eHK#1q|Q--2~Ib$x*EA^VViCXYpw({H|Z>y#uF_k znoqzt_<$R*pB_Xi9g0d!qSsmHsNE86@TA}o?qX^HiEvK&C4>Z6Y^!^H1k zdQ|Y_W9<%0farhTfkt^fA0Q-iaic}hMa4~%dBvPoTr?w@lt-G9%CycZa^$Y!E8HZ{ zf;*RT)A89i$ztuB)7EFOeDr6ZvAS_x5A1nr_=BmTV^jXjT;B;F6j%rdp$M+rr|o5g zuD$xVLsY~!*}wTy7EH+uF;pv4#Q)FtV zREU*BqVR)?t>;~$CXiy0CF~0n6fm9kkA~ZDk=IF#pH4$h!*JT$A?OR(yG#}Wcj@4u zT2s#c4`B~O2*de8N5goDNe0n3YWu1s&tKZ#%vxu7G6RzLLief^aa}AXDO#L?ON`Ug zO?(1V$%J1g$r5uev{!K@%&M$}nFa1;g+&y~Z);eUfTU_CUE~1OFP*fMV~Fdf96%I9 z(SW+YogaXnTAuUDlqawPPwC&ImRA&0NuAYA1NkxsK&5@TILxM0Cf~gMXftSu2Q#qd&c@@*?higjOv8*O>rZ6b^>oh zbyL0JrKlQHigY#8EY42a0(^_WgYi`f!18ooBHiPcw1o-kIRLsit21Yi zIp;N;+&K!@<|zH23R0HjMy~bCvWgNdK(7)*_JIZLxui3rH(Tvnb*NP5kIqY+->(}o zftS@5+(jtqaP~NjL4+ilm@?RS>Ep_Xs^I=oKSjr!x#1CyNm~LA?>QBz zl9jGPyNRIoo%Mb1U4u)bph{HyRwJeQvlBUT)-rV*xUBn}o!15}@z3Wdxx zAy;{zwKypHZtT$6)(Y}64MpCP@fo`G-sp2e5YSK)Ytv(-(o!rY%yj8X)fEmCO`*-QRb{1> zn-lo(x*;AEPLK^wPR2c&u#C@Cin5>wSi-AXEXeA_!)IIzU?W>>^^~?20AE{h0!FeA zoxz)|aREt`>3}0hxYJ`^0J)?RK7E2a7Q&|$f3}_vf94~xF<@GQporYYd2guBp7ZZOB&CexK^8VQ`8*qO~*&hBQF^HGH#10noa2u&e_ z^XvH(;-8Qd;v1?$eBolQOy<^BmvNky&m*cSL`+QoAzDfFGB$di#?tCK)>hR74hE7> z!;R%Zh2~S)$jfu+9@)9go2f9SoB{AA>X!DxiHQL9DO>ouPZnj1mZUseTaQzAisUTD z)Rc>%UE;aQKw4+W=`hI}!VzFbjI6bDi?%tprW?eEOkRvchpOtChZ=6x`0+1QNL>Xg z@aAw93I!{2^7f!_sh1QYD`inxwk~jzdr5a?Z8g6EFPtIL3j~i7RFoK04qu+Y11{%| z#i0J!PO*u}ZJeas4b933^RzLS&Qzeru4w7UlTkP9olL?lp4Hz;Y(O_^M-{;#O_xMT zg?%ph0(XsW6n4_Uy`J7K`x#a0XV60XDH>62ahdc~V7sU^Mj8B~9Pu64>B-1OxA17e zGiNTuOk|pEESxu1B^b_62r4Nd_oCg?J;NRpAsmn8foYGOxB@>pIy)oq%%&q0YMtFC zr|V{&I!F4)&Q{?aKP|x?>WzlD}uji!i7x32A=Ps^%=l@+T?kPk#&r;yQc?s(QwOh*y!Xlj8PQg zvP?T&K_ETsW%N(%@=2!^Rvff+NNp*H?Nc`E8p=JE(i^ml7wpI&+Y_k-ySX6e-enMB zXwJxRHu?}j7kx{6`Jsz*sgleg=O=q*&CJ=KKwTd&ao+~vKtW4Y>q_^n*IeD#FTrLNctDL+ho(5JrSZc@I<%W3Ae%Bt(zdh%hF4QR|nU>+wTdV{FXQ zR=X&U`(zqUAzU0DMWVLs#Bt{@kz2g2VniCdt4f(Ptq&M>xj_^pWo2!8djQ9R?QFuf z$Kto)Xcn$P=UY2C=|{cC`n?MMgpaDS*1J7~mTWtlu>Zioog%|P{y^Y=lQ8Pw7x{1F zXjWOHV;_HAI~u_+v+xXl9>QPYOCy?KSPPHIAx^sFxHm~Y!QQ)F4%R00F0q}F&ScWL z&GsRFhhugI{cZ)1!4Avzd@!9>*1Dqs=KbJr;larfG{N3E6(6xD#Q!=tn1rX|6BZ`L z@AT5yue^B~ug}B#qwrqkpWj+hw_nx1f1mbw4c_nFy*m=^-&s+&KludPUgH11thH~! z`+n*8cOFu=>l?{&SETlj@a;9eZ_)nswz_@g*Xr?BwBuig_g(4y>+h)BSMF2Ke^uMw zg!g}?_HX=K-M(2#&i_)yy#5~lpJ;#fuDX4DRXx6b{X^dV3I6%k`|9@cqe=VESlXXe z*gg3O|9t$F6=nNb?R@p;Kh@gb;qAos%`d3me^}doUu%Eu+KRH(@7HB*`$Mh$E^jBc zfBb{}_~P{=t^EVudaSyzn{O;+W+a9Rb~6?CH4FI@&63(2P;Yc+fGD+P|(H|BCkcUA`~T{@RGOU*{I-PD=a#@Z+y*e;4h)ru}_I z+g@5RZ7ROL!`ttE$=+VPKILft+K>7D`-R#8_3wVs(f)Ifu@U{tNBzhDx}*IY&$ISV zkNoXhEB5=h`W9>d-G}YxFSc8bg$|-(a7=4DS~zrv1ln zX+xa8E;m0;w}1bw|M;JDwEySZto^sO2DWRx_qzAG_qzA`Fuwi=h1l2%000XBo%k@6 literal 0 HcmV?d00001 diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/Chart.yaml b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/Chart.yaml new file mode 100644 index 0000000..fdd3174 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/Chart.yaml @@ -0,0 +1,22 @@ +# ================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +apiVersion: v1 +appVersion: "1.0" +description: Helm chart for E2Sim Kubernetes +name: e2sim +namespace: ricplt +version: 3.0.0 diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/templates/deployment.yaml b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/templates/deployment.yaml new file mode 100644 index 0000000..d8302ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/templates/deployment.yaml @@ -0,0 +1,40 @@ +# ================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Values.e2sim.alpha.name }} + labels: + app: {{ .Values.e2sim.alpha.app }} + namespace: {{ .Values.e2sim.alpha.namespace }} +spec: + replicas: {{ .Values.e2sim.alpha.replicaCount }} + selector: + matchLabels: + app: {{ .Values.e2sim.alpha.app }} + template: + metadata: + labels: + app: {{ .Values.e2sim.alpha.app }} + spec: + containers: + - name: {{ .Values.e2sim.alpha.name }} + image: {{ .Values.e2sim.alpha.image.registry }}/{{ .Values.e2sim.alpha.image.name }}:{{ .Values.e2sim.alpha.image.tag }} + imagePullPolicy: {{ .Values.e2sim.alpha.image.imagepullpolicy }} + ports: + - containerPort: {{ .Values.e2sim.alpha.port }} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml new file mode 100644 index 0000000..751cda5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/helm/values.yaml @@ -0,0 +1,62 @@ +# ================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +################################################################# +# Application configuration defaults. +################################################################# +# application image +e2sim: + alpha: + name: e2sim + namespace: test + app: e2simulator + imagepullpolicy: IfNotPresent + image: + name: oran-ric/e2simul + tag: 1.2.2 + registry: "oran.nexus:8082" + port: 36422 + + privilegedmode: false + hostnetworkmode: false + + replicaCount: 1 + env: + print: "1" + messagecollectorfile: "/data/outgoing/" + # Service ports are now defined in + # ric-common/Common-Template/helm/ric-common/templates/_ports.tpl file. + # If need to change a service port, make the code change necessary, then + # update the _ports.tpl file with the new port number. + + dataVolSize: 100Mi + storageClassName: local-storage + #storageClassName: ric-storage-class + + pizpub: + enabled: false + # publishURL: "" + # user: "" + # password: "" + # feedId: "" + # dataRootDir: "" + # scanDirectory: "" + # processedDirectory: "" + # image: + # name: "" + # tag: "" + # registry: "" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/simulation.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/simulation.txt new file mode 100644 index 0000000..c1eedb7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/simulation.txt @@ -0,0 +1,3 @@ +This is a silulation file +This is a simulation +This is a a a a a simulation file! diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_C_RNTI_constr_1 CC_NOTUSED = { + { 0, 0 }, + 2 /* (SIZE(2..2)) */}; +asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + &asn_OP_OCTET_STRING, + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + { &asn_OER_type_C_RNTI_constr_1, &asn_PER_type_C_RNTI_constr_1, C_RNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/C-RNTI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef OCTET_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_C_RNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +oer_type_decoder_f C_RNTI_decode_oer; +oer_type_encoder_f C_RNTI_encode_oer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; +per_type_decoder_f C_RNTI_decode_aper; +per_type_encoder_f C_RNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt new file mode 100644 index 0000000..964af7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CMakeLists.txt @@ -0,0 +1,32 @@ +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# +file(GLOB SOURCES "*.c") +file(GLOB HEADERS "*.h") + +include_directories(.) +add_library( asn1objects STATIC ${SOURCES} ${HEADERS}) + +target_include_directories (asn1objects PUBLIC + $ + $ + PRIVATE src) + + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem = { + "CU-CP-Usage-Report-CellResourceReportItem", + "CU-CP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_CellResourceReportItem_H_ +#define _CU_CP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_UeResourceReportItem; + +/* CU-CP-Usage-Report-CellResourceReportItem */ +typedef struct CU_CP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 16384)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_CP_Usage_Report_Per_UE), + offsetof(struct CU_CP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE = { + "CU-CP-Usage-Report-Per-UE", + "CU-CP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_Per_UE_H_ +#define _CU_CP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_CellResourceReportItem; + +/* CU-CP-Usage-Report-Per-UE */ +typedef struct CU_CP_Usage_Report_Per_UE { + struct CU_CP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, serving_Cell_RF_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serving-Cell-RF-Type" + }, + { ATF_POINTER, 1, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, neighbor_Cell_RF), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbor-Cell-RF" + }, +}; +static const int asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serving-Cell-RF-Type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighbor-Cell-RF */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem = { + "CU-CP-Usage-Report-UeResourceReportItem", + "CU-CP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_UeResourceReportItem_H_ +#define _CU_CP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-CP-Usage-Report-UeResourceReportItem */ +typedef struct CU_CP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + OCTET_STRING_t *serving_Cell_RF_Type; /* OPTIONAL */ + OCTET_STRING_t *neighbor_Cell_RF; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_CP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem = { + "CU-UP-Usage-Report-CellResourceReportItem", + "CU-UP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_CellResourceReportItem_H_ +#define _CU_UP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_UeResourceReportItem; + +/* CU-UP-Usage-Report-CellResourceReportItem */ +typedef struct CU_UP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_UP_Usage_Report_Per_UE), + offsetof(struct CU_UP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE = { + "CU-UP-Usage-Report-Per-UE", + "CU-UP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_Per_UE_H_ +#define _CU_UP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_CellResourceReportItem; + +/* CU-UP-Usage-Report-Per-UE */ +typedef struct CU_UP_Usage_Report_Per_UE { + struct CU_UP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem = { + "CU-UP-Usage-Report-UeResourceReportItem", + "CU-UP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_UeResourceReportItem_H_ +#define _CU_UP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-UP-Usage-Report-UeResourceReportItem */ +typedef struct CU_UP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_UP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CUUPMeasurement-Container.h" + +static int +memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmnList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PlmnID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = { + sizeof(struct CUUPMeasurement_Container__plmnList), + offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmnList_2 = { + "plmnList", + "plmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_plmnList_tags_2, + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */ + asn_DEF_plmnList_tags_2, /* Same as above */ + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */ + { &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_plmnList_2, + 1, /* Single element */ + &asn_SPC_plmnList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_plmnList_2, + 0, + { &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2, memb_plmnList_constraint_1 }, + 0, 0, /* No default value */ + "plmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = { + sizeof(struct CUUPMeasurement_Container), + offsetof(struct CUUPMeasurement_Container, _asn_ctx), + asn_MAP_CUUPMeasurement_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container = { + "CUUPMeasurement-Container", + "CUUPMeasurement-Container", + &asn_OP_SEQUENCE, + asn_DEF_CUUPMeasurement_Container_tags_1, + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + asn_DEF_CUUPMeasurement_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CUUPMeasurement_Container_1, + 1, /* Elements count */ + &asn_SPC_CUUPMeasurement_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CUUPMeasurement-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CUUPMeasurement_Container_H_ +#define _CUUPMeasurement_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PlmnID_List; + +/* CUUPMeasurement-Container */ +typedef struct CUUPMeasurement_Container { + struct CUUPMeasurement_Container__plmnList { + A_SEQUENCE_OF(struct PlmnID_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CUUPMeasurement_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PlmnID-List.h" + +#endif /* _CUUPMeasurement_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c new file mode 100644 index 0000000..294c0a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.c @@ -0,0 +1,95 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Cause.h" + +static asn_oer_constraints_t asn_OER_type_Cause_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_Cause_constr_1, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h new file mode 100644 index 0000000..1c168e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c new file mode 100644 index 0000000..11ade29 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseMisc_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseMisc_constr_1, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h new file mode 100644 index 0000000..44fb6b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseMisc.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +oer_type_decoder_f CauseMisc_decode_oer; +oer_type_encoder_f CauseMisc_encode_oer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..d7d2008 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.c @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseProtocol_constr_1, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..67008e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseProtocol.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +oer_type_decoder_f CauseProtocol_decode_oer; +oer_type_encoder_f CauseProtocol_encode_oer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c new file mode 100644 index 0000000..b4a1dfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.c @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseRIC_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseRIC_constr_1, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h new file mode 100644 index 0000000..187b6ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRIC.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +oer_type_decoder_f CauseRIC_decode_oer; +oer_type_encoder_f CauseRIC_encode_oer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..72dca60 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseRICservice_constr_1, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..a247216 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseRICservice.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +oer_type_decoder_f CauseRICservice_decode_oer; +oer_type_encoder_f CauseRICservice_encode_oer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c new file mode 100644 index 0000000..0ac9911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseTransport_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseTransport_constr_1, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f92578e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CauseTransport.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +oer_type_decoder_f CauseTransport_decode_oer; +oer_type_encoder_f CauseTransport_encode_oer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CellResourceReportListItem.h" + +static int +memb_dl_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = { + sizeof(struct CellResourceReportListItem__servedPlmnPerCellList), + offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = { + "servedPlmnPerCellList", + "servedPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_servedPlmnPerCellList_tags_5, + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */ + asn_DEF_servedPlmnPerCellList_tags_5, /* Same as above */ + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */ + { &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_servedPlmnPerCellList_5, + 1, /* Single element */ + &asn_SPC_servedPlmnPerCellList_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3, memb_dl_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "dl-TotalofAvailablePRBs" + }, + { ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4, memb_ul_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "ul-TotalofAvailablePRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_servedPlmnPerCellList_5, + 0, + { &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5, memb_servedPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "servedPlmnPerCellList" + }, +}; +static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = { + sizeof(struct CellResourceReportListItem), + offsetof(struct CellResourceReportListItem, _asn_ctx), + asn_MAP_CellResourceReportListItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellResourceReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = { + "CellResourceReportListItem", + "CellResourceReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_CellResourceReportListItem_tags_1, + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + asn_DEF_CellResourceReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellResourceReportListItem_1, + 4, /* Elements count */ + &asn_SPC_CellResourceReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CellResourceReportListItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CellResourceReportListItem_H_ +#define _CellResourceReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedPlmnPerCellListItem; + +/* CellResourceReportListItem */ +typedef struct CellResourceReportListItem { + NRCGI_t nRCGI; + long *dl_TotalofAvailablePRBs; /* OPTIONAL */ + long *ul_TotalofAvailablePRBs; /* OPTIONAL */ + struct CellResourceReportListItem__servedPlmnPerCellList { + A_SEQUENCE_OF(struct ServedPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } servedPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellResourceReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[4]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ServedPlmnPerCellListItem.h" + +#endif /* _CellResourceReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c new file mode 100644 index 0000000..8f9f73b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_Criticality_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { &asn_OER_type_Criticality_constr_1, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h new file mode 100644 index 0000000..76d1b89 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Criticality.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +oer_type_decoder_f Criticality_decode_oer; +oer_type_encoder_f Criticality_encode_oer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..c2350c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..3977363 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..d54f845 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +static asn_oer_constraints_t asn_OER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { &asn_OER_type_CriticalityDiagnostics_IE_List_constr_1, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..57f9cf4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..ed81ffc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9500793 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem), + offsetof(struct DU_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem = { + "DU-Usage-Report-CellResourceReportItem", + "DU-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_CellResourceReportItem_H_ +#define _DU_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_UeResourceReportItem; + +/* DU-Usage-Report-CellResourceReportItem */ +typedef struct DU_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-UeResourceReportItem.h" + +#endif /* _DU_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct DU_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct DU_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1 = { + sizeof(struct DU_Usage_Report_Per_UE), + offsetof(struct DU_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_DU_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE = { + "DU-Usage-Report-Per-UE", + "DU-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_DU_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_Per_UE_H_ +#define _DU_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_CellResourceReportItem; + +/* DU-Usage-Report-Per-UE */ +typedef struct DU_Usage_Report_Per_UE { + struct DU_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-CellResourceReportItem.h" + +#endif /* _DU_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,138 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-UeResourceReportItem.h" + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct DU_Usage_Report_UeResourceReportItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct DU_Usage_Report_UeResourceReportItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_UeResourceReportItem), + offsetof(struct DU_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem = { + "DU-Usage-Report-UeResourceReportItem", + "DU-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/DU-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_UeResourceReportItem_H_ +#define _DU_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DU-Usage-Report-UeResourceReportItem */ +typedef struct DU_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DU_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..8d6888d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.c @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_oer_constraints_t asn_OER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2AP_PDU_constr_1, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..600e848 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-ActionDefinition.h" + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition), + offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { + "E2SM-KPM-ActionDefinition", + "E2SM-KPM-ActionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-ActionDefinition.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_ActionDefinition_H_ +#define _E2SM_KPM_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition */ +typedef struct E2SM_KPM_ActionDefinition { + RIC_Style_Type_t ric_Style_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" + +static int +memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Trigger_ConditionIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { + "policyTest-List", + "policyTest-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_policyTest_List_tags_2, + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_policyTest_List_tags_2, /* Same as above */ + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ + { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_policyTest_List_2, + 1, /* Single element */ + &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_policyTest_List_2, + 0, + { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + 0, 0, /* No default value */ + "policyTest-List" + }, +}; +static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { + "E2SM-KPM-EventTriggerDefinition-Format1", + "E2SM-KPM-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ +#define _E2SM_KPM_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Trigger_ConditionIE_Item; + +/* E2SM-KPM-EventTriggerDefinition-Format1 */ +typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { + struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { + A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *policyTest_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Trigger-ConditionIE-Item.h" + +#endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-EventTriggerDefinition.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_H_ +#define _E2SM_KPM_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_EventTriggerDefinition_PR { + E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_EventTriggerDefinition_PR; + +/* E2SM-KPM-EventTriggerDefinition */ +typedef struct E2SM_KPM_EventTriggerDefinition { + E2SM_KPM_EventTriggerDefinition_PR present; + union E2SM_KPM_EventTriggerDefinition_u { + E2SM_KPM_EventTriggerDefinition_Format1_t eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader-Format1.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { + { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "id-GlobalKPMnode-ID" + }, + { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_Report_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "message-Type" + }, + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-Name" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-GNB-ID" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader_Format1), + offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { + "E2SM-KPM-IndicationHeader-Format1", + "E2SM-KPM-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, + 10, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader-Format1.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_Format1_H_ +#define _E2SM_KPM_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include "UE-Report-Type.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalKPMnode_ID; +struct NRCGI; +struct SNSSAI; +struct GNB_Name; +struct GlobalgNB_ID; + +/* E2SM-KPM-IndicationHeader-Format1 */ +typedef struct E2SM_KPM_IndicationHeader_Format1 { + struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ + struct NRCGI *nRCGI; /* OPTIONAL */ + PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ + struct SNSSAI *sliceID; /* OPTIONAL */ + long *fiveQI; /* OPTIONAL */ + long *qci; /* OPTIONAL */ + UE_Report_Type_t *message_Type; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + struct GNB_Name *gNB_Name; /* OPTIONAL */ + struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "GlobalKPMnode-ID.h" +#include "NRCGI.h" +#include "SNSSAI.h" +#include "GNB-Name.h" +#include "GlobalgNB-ID.h" + +#endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader, present), + sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationHeader.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_H_ +#define _E2SM_KPM_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-IndicationHeader-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationHeader_PR { + E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationHeader_PR; + +/* E2SM-KPM-IndicationHeader */ +typedef struct E2SM_KPM_IndicationHeader { + E2SM_KPM_IndicationHeader_PR present; + union E2SM_KPM_IndicationHeader_u { + E2SM_KPM_IndicationHeader_Format1_t indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage-Format1.h" + +static int +memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 8)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PM_Containers_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), + offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { + "pm-Containers", + "pm-Containers", + &asn_OP_SEQUENCE_OF, + asn_DEF_pm_Containers_tags_2, + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ + asn_DEF_pm_Containers_tags_2, /* Same as above */ + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ + { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_pm_Containers_2, + 1, /* Single element */ + &asn_SPC_pm_Containers_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pm_Containers_2, + 0, + { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + 0, 0, /* No default value */ + "pm-Containers" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1), + offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { + "E2SM-KPM-IndicationMessage-Format1", + "E2SM-KPM-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format1_H_ +#define _E2SM_KPM_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PM_Containers_List; + +/* E2SM-KPM-IndicationMessage-Format1 */ +typedef struct E2SM_KPM_IndicationMessage_Format1 { + struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { + A_SEQUENCE_OF(struct PM_Containers_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pm_Containers; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PM-Containers-List.h" + +#endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.c @@ -0,0 +1,107 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage.h" + +static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), + asn_MAP_indicationMessage_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { + "indicationMessage", + "indicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, + asn_MBR_indicationMessage_3, + 1, /* Elements count */ + &asn_SPC_indicationMessage_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationMessage_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { + "E2SM-KPM-IndicationMessage", + "E2SM-KPM-IndicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-IndicationMessage.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_H_ +#define _E2SM_KPM_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "E2SM-KPM-IndicationMessage-Format1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { + E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationMessage__indicationMessage_PR; + +/* E2SM-KPM-IndicationMessage */ +typedef struct E2SM_KPM_IndicationMessage { + RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_IndicationMessage__indicationMessage { + E2SM_KPM_IndicationMessage__indicationMessage_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_u { + E2SM_KPM_IndicationMessage_Format1_t indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-RANfunction-Description.h" + +static int +memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_EventTriggerStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { + "ric-EventTriggerStyle-List", + "ric-EventTriggerStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_EventTriggerStyle_List_tags_4, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ + { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_4, + 1, /* Single element */ + &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_ReportStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { + "ric-ReportStyle-List", + "ric-ReportStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_ReportStyle_List_tags_6, + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ + { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_6, + 1, /* Single element */ + &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ric_EventTriggerStyle_List_4, + 0, + { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_6, + 0, + { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-ReportStyle-List" + }, +}; +static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), + asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { + "e2SM-KPM-RANfunction-Item", + "e2SM-KPM-RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_e2SM_KPM_RANfunction_Item_3, + 2, /* Elements count */ + &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, ranFunction_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunction_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_e2SM_KPM_RANfunction_Item_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e2SM-KPM-RANfunction-Item" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { + sizeof(struct E2SM_KPM_RANfunction_Description), + offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), + asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { + "E2SM-KPM-RANfunction-Description", + "E2SM-KPM-RANfunction-Description", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_RANfunction_Description_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2SM-KPM-RANfunction-Description.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_RANfunction_Description_H_ +#define _E2SM_KPM_RANfunction_Description_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunction-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RIC_EventTriggerStyle_List; +struct RIC_ReportStyle_List; + +/* E2SM-KPM-RANfunction-Description */ +typedef struct E2SM_KPM_RANfunction_Description { + RANfunction_Name_t ranFunction_Name; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } e2SM_KPM_RANfunction_Item; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_RANfunction_Description_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RIC-EventTriggerStyle-List.h" +#include "RIC-ReportStyle-List.h" + +#endif /* _E2SM_KPM_RANfunction_Description_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..8f21633 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..ab89da4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..20b2f35 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..c09d454 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..81dce04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..64fda6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..2818f1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..2caa477 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c new file mode 100644 index 0000000..d0280b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8e5dcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..d1cfbf9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..b5aabcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-CUUP-PM-Format.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItemFormat, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_CUUP_PM_Format__perQCIReportList), + offsetof(struct EPC_CUUP_PM_Format__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = { + sizeof(struct EPC_CUUP_PM_Format), + offsetof(struct EPC_CUUP_PM_Format, _asn_ctx), + asn_MAP_EPC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format = { + "EPC-CUUP-PM-Format", + "EPC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_EPC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_EPC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_EPC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_CUUP_PM_Format_H_ +#define _EPC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItemFormat; + +/* EPC-CUUP-PM-Format */ +typedef struct EPC_CUUP_PM_Format { + struct EPC_CUUP_PM_Format__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItemFormat) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItemFormat.h" + +#endif /* _EPC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-DU-PM-Container.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_DU_PM_Container__perQCIReportList), + offsetof(struct EPC_DU_PM_Container__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = { + sizeof(struct EPC_DU_PM_Container), + offsetof(struct EPC_DU_PM_Container, _asn_ctx), + asn_MAP_EPC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container = { + "EPC-DU-PM-Container", + "EPC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_EPC_DU_PM_Container_tags_1, + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_EPC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_EPC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/EPC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_DU_PM_Container_H_ +#define _EPC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItem; + +/* EPC-DU-PM-Container */ +typedef struct EPC_DU_PM_Container { + struct EPC_DU_PM_Container__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItem.h" + +#endif /* _EPC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..7392861 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..c3b4930 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-CUUP-PM-Format.h" + +static int +memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SliceToReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = { + sizeof(struct FGC_CUUP_PM_Format__sliceToReportList), + offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = { + "sliceToReportList", + "sliceToReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_sliceToReportList_tags_2, + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_sliceToReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_sliceToReportList_2, + 1, /* Single element */ + &asn_SPC_sliceToReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sliceToReportList_2, + 0, + { &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2, memb_sliceToReportList_constraint_1 }, + 0, 0, /* No default value */ + "sliceToReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = { + sizeof(struct FGC_CUUP_PM_Format), + offsetof(struct FGC_CUUP_PM_Format, _asn_ctx), + asn_MAP_FGC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format = { + "FGC-CUUP-PM-Format", + "FGC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_FGC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_FGC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_FGC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_CUUP_PM_Format_H_ +#define _FGC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SliceToReportListItem; + +/* FGC-CUUP-PM-Format */ +typedef struct FGC_CUUP_PM_Format { + struct FGC_CUUP_PM_Format__sliceToReportList { + A_SEQUENCE_OF(struct SliceToReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sliceToReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SliceToReportListItem.h" + +#endif /* _FGC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-DU-PM-Container.h" + +static int +memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SlicePerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = { + sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList), + offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = { + "slicePerPlmnPerCellList", + "slicePerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_slicePerPlmnPerCellList_tags_2, + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */ + asn_DEF_slicePerPlmnPerCellList_tags_2, /* Same as above */ + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */ + { &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_slicePerPlmnPerCellList_2, + 1, /* Single element */ + &asn_SPC_slicePerPlmnPerCellList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_slicePerPlmnPerCellList_2, + 0, + { &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2, memb_slicePerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "slicePerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = { + sizeof(struct FGC_DU_PM_Container), + offsetof(struct FGC_DU_PM_Container, _asn_ctx), + asn_MAP_FGC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container = { + "FGC-DU-PM-Container", + "FGC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_FGC_DU_PM_Container_tags_1, + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_FGC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_FGC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FGC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_DU_PM_Container_H_ +#define _FGC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SlicePerPlmnPerCellListItem; + +/* FGC-DU-PM-Container */ +typedef struct FGC_DU_PM_Container { + struct FGC_DU_PM_Container__slicePerPlmnPerCellList { + A_SEQUENCE_OF(struct SlicePerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } slicePerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SlicePerPlmnPerCellListItem.h" + +#endif /* _FGC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnListItem), + offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = { + "FQIPERSlicesPerPlmnListItem", + "FQIPERSlicesPerPlmnListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnListItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnListItem_H_ +#define _FQIPERSlicesPerPlmnListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnListItem */ +typedef struct FQIPERSlicesPerPlmnListItem { + long fiveQI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnPerCellListItem), + offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = { + "FQIPERSlicesPerPlmnPerCellListItem", + "FQIPERSlicesPerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnPerCellListItem_H_ +#define _FQIPERSlicesPerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnPerCellListItem */ +typedef struct FQIPERSlicesPerPlmnPerCellListItem { + long fiveQI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-CP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_CP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_CP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_CP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_CP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_CP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name = { + "GNB-CU-CP-Name", + "GNB-CU-CP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_CP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_CP_Name_constr_1, &asn_PER_type_GNB_CU_CP_Name_constr_1, GNB_CU_CP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-CP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_CP_Name_H_ +#define _GNB_CU_CP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-Name */ +typedef PrintableString_t GNB_CU_CP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name; +asn_struct_free_f GNB_CU_CP_Name_free; +asn_struct_print_f GNB_CU_CP_Name_print; +asn_constr_check_f GNB_CU_CP_Name_constraint; +ber_type_decoder_f GNB_CU_CP_Name_decode_ber; +der_type_encoder_f GNB_CU_CP_Name_encode_der; +xer_type_decoder_f GNB_CU_CP_Name_decode_xer; +xer_type_encoder_f GNB_CU_CP_Name_encode_xer; +oer_type_decoder_f GNB_CU_CP_Name_decode_oer; +oer_type_encoder_f GNB_CU_CP_Name_encode_oer; +per_type_decoder_f GNB_CU_CP_Name_decode_uper; +per_type_encoder_f GNB_CU_CP_Name_encode_uper; +per_type_decoder_f GNB_CU_CP_Name_decode_aper; +per_type_encoder_f GNB_CU_CP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..f6d50d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..a9152e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_UP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_UP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_UP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_UP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_UP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name = { + "GNB-CU-UP-Name", + "GNB-CU-UP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_UP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_Name_constr_1, &asn_PER_type_GNB_CU_UP_Name_constr_1, GNB_CU_UP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-CU-UP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_Name_H_ +#define _GNB_CU_UP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-Name */ +typedef PrintableString_t GNB_CU_UP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name; +asn_struct_free_f GNB_CU_UP_Name_free; +asn_struct_print_f GNB_CU_UP_Name_print; +asn_constr_check_f GNB_CU_UP_Name_constraint; +ber_type_decoder_f GNB_CU_UP_Name_decode_ber; +der_type_encoder_f GNB_CU_UP_Name_encode_der; +xer_type_decoder_f GNB_CU_UP_Name_decode_xer; +xer_type_encoder_f GNB_CU_UP_Name_encode_xer; +oer_type_decoder_f GNB_CU_UP_Name_decode_oer; +oer_type_encoder_f GNB_CU_UP_Name_encode_oer; +per_type_decoder_f GNB_CU_UP_Name_decode_uper; +per_type_encoder_f GNB_CU_UP_Name_encode_uper; +per_type_decoder_f GNB_CU_UP_Name_decode_aper; +per_type_encoder_f GNB_CU_UP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..5e72065 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..7b460d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_DU_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_DU_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_DU_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_DU_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_DU_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name = { + "GNB-DU-Name", + "GNB-DU-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_DU_Name_tags_1, + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_Name_constr_1, &asn_PER_type_GNB_DU_Name_constr_1, GNB_DU_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-DU-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_Name_H_ +#define _GNB_DU_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-Name */ +typedef PrintableString_t GNB_DU_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name; +asn_struct_free_f GNB_DU_Name_free; +asn_struct_print_f GNB_DU_Name_print; +asn_constr_check_f GNB_DU_Name_constraint; +ber_type_decoder_f GNB_DU_Name_decode_ber; +der_type_encoder_f GNB_DU_Name_encode_der; +xer_type_decoder_f GNB_DU_Name_decode_xer; +xer_type_encoder_f GNB_DU_Name_encode_xer; +oer_type_decoder_f GNB_DU_Name_decode_oer; +oer_type_encoder_f GNB_DU_Name_encode_oer; +per_type_decoder_f GNB_DU_Name_decode_uper; +per_type_encoder_f GNB_DU_Name_encode_uper; +per_type_decoder_f GNB_DU_Name_decode_aper; +per_type_encoder_f GNB_DU_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..552725f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..4646519 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-Name.h" + +static asn_oer_constraints_t asn_OER_type_GNB_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_DU_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-DU-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-CU-UP-Name */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1 = { + sizeof(struct GNB_Name), + offsetof(struct GNB_Name, _asn_ctx), + offsetof(struct GNB_Name, present), + sizeof(((struct GNB_Name *)0)->present), + asn_MAP_GNB_Name_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_Name = { + "GNB-Name", + "GNB-Name", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_Name_constr_1, &asn_PER_type_GNB_Name_constr_1, CHOICE_constraint }, + asn_MBR_GNB_Name_1, + 3, /* Elements count */ + &asn_SPC_GNB_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GNB-Name.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_Name_H_ +#define _GNB_Name_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-DU-Name.h" +#include "GNB-CU-CP-Name.h" +#include "GNB-CU-UP-Name.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_Name_PR { + GNB_Name_PR_NOTHING, /* No components present */ + GNB_Name_PR_gNB_DU_Name, + GNB_Name_PR_gNB_CU_CP_Name, + GNB_Name_PR_gNB_CU_UP_Name + /* Extensions may appear below */ + +} GNB_Name_PR; + +/* GNB-Name */ +typedef struct GNB_Name { + GNB_Name_PR present; + union GNB_Name_u { + GNB_DU_Name_t gNB_DU_Name; + GNB_CU_CP_Name_t gNB_CU_CP_Name; + GNB_CU_UP_Name_t gNB_CU_UP_Name; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_Name; +extern asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_Name_1[3]; +extern asn_per_constraints_t asn_PER_type_GNB_Name_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..cc0a706 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_oer_constraints_t asn_OER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalE2node_ID_constr_1, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..6257cd1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..cdc62e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..a3fa696 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..ee8b882 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..037537a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..ea2e38c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..8f15471 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..f942bce --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..0311e40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..6ceca00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..c8683e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.c @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ID.h" + +static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ID), + offsetof(struct GlobalKPMnode_ID, _asn_ctx), + offsetof(struct GlobalKPMnode_ID, present), + sizeof(((struct GlobalKPMnode_ID *)0)->present), + asn_MAP_GlobalKPMnode_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = { + "GlobalKPMnode-ID", + "GlobalKPMnode-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalKPMnode_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalKPMnode_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ID.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ID_H_ +#define _GlobalKPMnode_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalKPMnode-gNB-ID.h" +#include "GlobalKPMnode-en-gNB-ID.h" +#include "GlobalKPMnode-ng-eNB-ID.h" +#include "GlobalKPMnode-eNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalKPMnode_ID_PR { + GlobalKPMnode_ID_PR_NOTHING, /* No components present */ + GlobalKPMnode_ID_PR_gNB, + GlobalKPMnode_ID_PR_en_gNB, + GlobalKPMnode_ID_PR_ng_eNB, + GlobalKPMnode_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalKPMnode_ID_PR; + +/* GlobalKPMnode-ID */ +typedef struct GlobalKPMnode_ID { + GlobalKPMnode_ID_PR present; + union GlobalKPMnode_ID_u { + GlobalKPMnode_gNB_ID_t gNB; + GlobalKPMnode_en_gNB_ID_t en_gNB; + GlobalKPMnode_ng_eNB_ID_t ng_eNB; + GlobalKPMnode_eNB_ID_t eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_eNB_ID), + offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID = { + "GlobalKPMnode-eNB-ID", + "GlobalKPMnode-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_eNB_ID_H_ +#define _GlobalKPMnode_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-eNB-ID */ +typedef struct GlobalKPMnode_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_en_gNB_ID), + offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID = { + "GlobalKPMnode-en-gNB-ID", + "GlobalKPMnode-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_en_gNB_ID_H_ +#define _GlobalKPMnode_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-en-gNB-ID */ +typedef struct GlobalKPMnode_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_gNB_ID), + offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalKPMnode_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = { + "GlobalKPMnode-gNB-ID", + "GlobalKPMnode-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalKPMnode_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_gNB_ID_H_ +#define _GlobalKPMnode_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-gNB-ID */ +typedef struct GlobalKPMnode_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ng_eNB_ID), + offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID = { + "GlobalKPMnode-ng-eNB-ID", + "GlobalKPMnode-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalKPMnode-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ng_eNB_ID_H_ +#define _GlobalKPMnode_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-ng-eNB-ID */ +typedef struct GlobalKPMnode_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..9f85294 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,99 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_ric_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_ric_ID_constr_3, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..7b7fc65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..cdf362c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..75933b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..740f552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..ac18b81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..a3dfaed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..843002a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..9dc4ccf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.c @@ -0,0 +1,398 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..cea345e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..62c2707 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include ./Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/./ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + ./converter-example.c\ + ./pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D . /root/e2ap-v01.00.00.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..7a4c612 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,288 @@ +ASN_MODULE_SRCS= \ + ./E2AP-PDU.c \ + ./InitiatingMessage.c \ + ./SuccessfulOutcome.c \ + ./UnsuccessfulOutcome.c \ + ./RICsubscriptionRequest.c \ + ./RICsubscriptionDetails.c \ + ./RICactions-ToBeSetup-List.c \ + ./RICaction-ToBeSetup-Item.c \ + ./RICsubscriptionResponse.c \ + ./RICaction-Admitted-List.c \ + ./RICaction-Admitted-Item.c \ + ./RICaction-NotAdmitted-List.c \ + ./RICaction-NotAdmitted-Item.c \ + ./RICsubscriptionFailure.c \ + ./RICsubscriptionDeleteRequest.c \ + ./RICsubscriptionDeleteResponse.c \ + ./RICsubscriptionDeleteFailure.c \ + ./RICindication.c \ + ./RICcontrolRequest.c \ + ./RICcontrolAcknowledge.c \ + ./RICcontrolFailure.c \ + ./ErrorIndication.c \ + ./E2setupRequest.c \ + ./E2setupResponse.c \ + ./E2setupFailure.c \ + ./ResetRequest.c \ + ./ResetResponse.c \ + ./RICserviceUpdate.c \ + ./RANfunctions-List.c \ + ./RANfunction-Item.c \ + ./RANfunctionsID-List.c \ + ./RANfunctionID-Item.c \ + ./RICserviceUpdateAcknowledge.c \ + ./RANfunctionsIDcause-List.c \ + ./RANfunctionIDcause-Item.c \ + ./RICserviceUpdateFailure.c \ + ./RICserviceQuery.c \ + ./Cause.c \ + ./CauseMisc.c \ + ./CauseProtocol.c \ + ./CauseRIC.c \ + ./CauseRICservice.c \ + ./CauseTransport.c \ + ./CriticalityDiagnostics.c \ + ./CriticalityDiagnostics-IE-List.c \ + ./CriticalityDiagnostics-IE-Item.c \ + ./ENB-ID.c \ + ./ENB-ID-Choice.c \ + ./ENGNB-ID.c \ + ./GlobalE2node-ID.c \ + ./GlobalE2node-en-gNB-ID.c \ + ./GlobalE2node-eNB-ID.c \ + ./GlobalE2node-gNB-ID.c \ + ./GlobalE2node-ng-eNB-ID.c \ + ./GlobalENB-ID.c \ + ./GlobalenGNB-ID.c \ + ./GlobalgNB-ID.c \ + ./GlobalngeNB-ID.c \ + ./GlobalRIC-ID.c \ + ./GNB-CU-UP-ID.c \ + ./GNB-DU-ID.c \ + ./GNB-ID-Choice.c \ + ./PLMN-Identity.c \ + ./RANfunctionDefinition.c \ + ./RANfunctionID.c \ + ./RANfunctionRevision.c \ + ./RICactionDefinition.c \ + ./RICactionID.c \ + ./RICactionType.c \ + ./RICcallProcessID.c \ + ./RICcontrolAckRequest.c \ + ./RICcontrolHeader.c \ + ./RICcontrolMessage.c \ + ./RICcontrolOutcome.c \ + ./RICcontrolStatus.c \ + ./RICeventTriggerDefinition.c \ + ./RICindicationHeader.c \ + ./RICindicationMessage.c \ + ./RICindicationSN.c \ + ./RICindicationType.c \ + ./RICrequestID.c \ + ./RICsubsequentAction.c \ + ./RICsubsequentActionType.c \ + ./RICtimeToWait.c \ + ./TimeToWait.c \ + ./TypeOfError.c \ + ./Criticality.c \ + ./Presence.c \ + ./ProcedureCode.c \ + ./ProtocolIE-ID.c \ + ./TriggeringMessage.c \ + ./ProtocolIE-Container.c \ + ./ProtocolIE-SingleContainer.c \ + ./ProtocolIE-Field.c \ + ./ProtocolIE-ContainerPair.c \ + ./ProtocolIE-FieldPair.c \ + ./ProtocolIE-ContainerList.c \ + ./ProtocolIE-ContainerPairList.c + +ASN_MODULE_HDRS= \ + ./E2AP-PDU.h \ + ./InitiatingMessage.h \ + ./SuccessfulOutcome.h \ + ./UnsuccessfulOutcome.h \ + ./RICsubscriptionRequest.h \ + ./RICsubscriptionDetails.h \ + ./RICactions-ToBeSetup-List.h \ + ./RICaction-ToBeSetup-Item.h \ + ./RICsubscriptionResponse.h \ + ./RICaction-Admitted-List.h \ + ./RICaction-Admitted-Item.h \ + ./RICaction-NotAdmitted-List.h \ + ./RICaction-NotAdmitted-Item.h \ + ./RICsubscriptionFailure.h \ + ./RICsubscriptionDeleteRequest.h \ + ./RICsubscriptionDeleteResponse.h \ + ./RICsubscriptionDeleteFailure.h \ + ./RICindication.h \ + ./RICcontrolRequest.h \ + ./RICcontrolAcknowledge.h \ + ./RICcontrolFailure.h \ + ./ErrorIndication.h \ + ./E2setupRequest.h \ + ./E2setupResponse.h \ + ./E2setupFailure.h \ + ./ResetRequest.h \ + ./ResetResponse.h \ + ./RICserviceUpdate.h \ + ./RANfunctions-List.h \ + ./RANfunction-Item.h \ + ./RANfunctionsID-List.h \ + ./RANfunctionID-Item.h \ + ./RICserviceUpdateAcknowledge.h \ + ./RANfunctionsIDcause-List.h \ + ./RANfunctionIDcause-Item.h \ + ./RICserviceUpdateFailure.h \ + ./RICserviceQuery.h \ + ./Cause.h \ + ./CauseMisc.h \ + ./CauseProtocol.h \ + ./CauseRIC.h \ + ./CauseRICservice.h \ + ./CauseTransport.h \ + ./CriticalityDiagnostics.h \ + ./CriticalityDiagnostics-IE-List.h \ + ./CriticalityDiagnostics-IE-Item.h \ + ./ENB-ID.h \ + ./ENB-ID-Choice.h \ + ./ENGNB-ID.h \ + ./GlobalE2node-ID.h \ + ./GlobalE2node-en-gNB-ID.h \ + ./GlobalE2node-eNB-ID.h \ + ./GlobalE2node-gNB-ID.h \ + ./GlobalE2node-ng-eNB-ID.h \ + ./GlobalENB-ID.h \ + ./GlobalenGNB-ID.h \ + ./GlobalgNB-ID.h \ + ./GlobalngeNB-ID.h \ + ./GlobalRIC-ID.h \ + ./GNB-CU-UP-ID.h \ + ./GNB-DU-ID.h \ + ./GNB-ID-Choice.h \ + ./PLMN-Identity.h \ + ./RANfunctionDefinition.h \ + ./RANfunctionID.h \ + ./RANfunctionRevision.h \ + ./RICactionDefinition.h \ + ./RICactionID.h \ + ./RICactionType.h \ + ./RICcallProcessID.h \ + ./RICcontrolAckRequest.h \ + ./RICcontrolHeader.h \ + ./RICcontrolMessage.h \ + ./RICcontrolOutcome.h \ + ./RICcontrolStatus.h \ + ./RICeventTriggerDefinition.h \ + ./RICindicationHeader.h \ + ./RICindicationMessage.h \ + ./RICindicationSN.h \ + ./RICindicationType.h \ + ./RICrequestID.h \ + ./RICsubsequentAction.h \ + ./RICsubsequentActionType.h \ + ./RICtimeToWait.h \ + ./TimeToWait.h \ + ./TypeOfError.h \ + ./Criticality.h \ + ./Presence.h \ + ./ProcedureCode.h \ + ./ProtocolIE-ID.h \ + ./TriggeringMessage.h \ + ./ProtocolIE-Container.h \ + ./ProtocolIE-SingleContainer.h \ + ./ProtocolIE-Field.h \ + ./ProtocolIE-ContainerPair.h \ + ./ProtocolIE-FieldPair.h \ + ./ProtocolIE-ContainerList.h \ + ./ProtocolIE-ContainerPairList.h + +ASN_MODULE_HDRS+=./ANY.h +ASN_MODULE_SRCS+=./ANY.c +ASN_MODULE_HDRS+=./OCTET_STRING.h +ASN_MODULE_HDRS+=./OPEN_TYPE.h +ASN_MODULE_SRCS+=./OPEN_TYPE.c +ASN_MODULE_HDRS+=./constr_CHOICE.h +ASN_MODULE_HDRS+=./INTEGER.h +ASN_MODULE_SRCS+=./INTEGER.c +ASN_MODULE_HDRS+=./NativeEnumerated.h +ASN_MODULE_SRCS+=./NativeEnumerated.c +ASN_MODULE_HDRS+=./NativeInteger.h +ASN_MODULE_SRCS+=./NativeInteger.c +ASN_MODULE_HDRS+=./asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./asn_SET_OF.h +ASN_MODULE_SRCS+=./asn_SET_OF.c +ASN_MODULE_SRCS+=./constr_CHOICE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE.h +ASN_MODULE_SRCS+=./constr_SEQUENCE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./constr_SET_OF.h +ASN_MODULE_SRCS+=./constr_SET_OF.c +ASN_MODULE_HDRS+=./asn_application.h +ASN_MODULE_SRCS+=./asn_application.c +ASN_MODULE_HDRS+=./asn_ioc.h +ASN_MODULE_HDRS+=./asn_system.h +ASN_MODULE_HDRS+=./asn_codecs.h +ASN_MODULE_HDRS+=./asn_internal.h +ASN_MODULE_SRCS+=./asn_internal.c +ASN_MODULE_HDRS+=./asn_random_fill.h +ASN_MODULE_SRCS+=./asn_random_fill.c +ASN_MODULE_HDRS+=./asn_bit_data.h +ASN_MODULE_SRCS+=./asn_bit_data.c +ASN_MODULE_SRCS+=./OCTET_STRING.c +ASN_MODULE_HDRS+=./BIT_STRING.h +ASN_MODULE_SRCS+=./BIT_STRING.c +ASN_MODULE_SRCS+=./asn_codecs_prim.c +ASN_MODULE_HDRS+=./asn_codecs_prim.h +ASN_MODULE_HDRS+=./ber_tlv_length.h +ASN_MODULE_SRCS+=./ber_tlv_length.c +ASN_MODULE_HDRS+=./ber_tlv_tag.h +ASN_MODULE_SRCS+=./ber_tlv_tag.c +ASN_MODULE_HDRS+=./ber_decoder.h +ASN_MODULE_SRCS+=./ber_decoder.c +ASN_MODULE_HDRS+=./der_encoder.h +ASN_MODULE_SRCS+=./der_encoder.c +ASN_MODULE_HDRS+=./constr_TYPE.h +ASN_MODULE_SRCS+=./constr_TYPE.c +ASN_MODULE_HDRS+=./constraints.h +ASN_MODULE_SRCS+=./constraints.c +ASN_MODULE_HDRS+=./xer_support.h +ASN_MODULE_SRCS+=./xer_support.c +ASN_MODULE_HDRS+=./xer_decoder.h +ASN_MODULE_SRCS+=./xer_decoder.c +ASN_MODULE_HDRS+=./xer_encoder.h +ASN_MODULE_SRCS+=./xer_encoder.c +ASN_MODULE_HDRS+=./per_support.h +ASN_MODULE_SRCS+=./per_support.c +ASN_MODULE_HDRS+=./per_decoder.h +ASN_MODULE_SRCS+=./per_decoder.c +ASN_MODULE_HDRS+=./per_encoder.h +ASN_MODULE_SRCS+=./per_encoder.c +ASN_MODULE_HDRS+=./per_opentype.h +ASN_MODULE_SRCS+=./per_opentype.c +ASN_MODULE_HDRS+=./oer_decoder.h +ASN_MODULE_HDRS+=./oer_encoder.h +ASN_MODULE_HDRS+=./oer_support.h +ASN_MODULE_SRCS+=./oer_decoder.c +ASN_MODULE_SRCS+=./oer_encoder.c +ASN_MODULE_SRCS+=./oer_support.c +ASN_MODULE_SRCS+=./OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=./INTEGER_oer.c +ASN_MODULE_SRCS+=./BIT_STRING_oer.c +ASN_MODULE_SRCS+=./OCTET_STRING_oer.c +ASN_MODULE_SRCS+=./NativeInteger_oer.c +ASN_MODULE_SRCS+=./NativeEnumerated_oer.c +ASN_MODULE_SRCS+=./constr_CHOICE_oer.c +ASN_MODULE_SRCS+=./constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=./constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/./ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NI-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_NI_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NI_Type_value2enum_1[] = { + { 0, 4, "x2-u" }, + { 1, 4, "xn-u" }, + { 2, 4, "f1-u" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NI_Type_enum2value_1[] = { + 2, /* f1-u(2) */ + 0, /* x2-u(0) */ + 1 /* xn-u(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = { + asn_MAP_NI_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NI_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NI_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NI_Type = { + "NI-Type", + "NI-Type", + &asn_OP_NativeEnumerated, + asn_DEF_NI_Type_tags_1, + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + asn_DEF_NI_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NI_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NI-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NI_Type_H_ +#define _NI_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NI_Type { + NI_Type_x2_u = 0, + NI_Type_xn_u = 1, + NI_Type_f1_u = 2 + /* + * Enumeration is extensible + */ +} e_NI_Type; + +/* NI-Type */ +typedef long NI_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NI_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NI_Type; +extern const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1; +asn_struct_free_f NI_Type_free; +asn_struct_print_f NI_Type_print; +asn_constr_check_f NI_Type_constraint; +ber_type_decoder_f NI_Type_decode_ber; +der_type_encoder_f NI_Type_encode_der; +xer_type_decoder_f NI_Type_decode_xer; +xer_type_encoder_f NI_Type_encode_xer; +oer_type_decoder_f NI_Type_decode_oer; +oer_type_encoder_f NI_Type_encode_oer; +per_type_decoder_f NI_Type_decode_uper; +per_type_encoder_f NI_Type_encode_uper; +per_type_decoder_f NI_Type_decode_aper; +per_type_encoder_f NI_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NI_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCGI.h" + +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 2, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCGI.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentity_t nRCellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCellIdentity.h" + +int +NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 36 /* (SIZE(36..36)) */}; +asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { + "NRCellIdentity", + "NRCellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentity_tags_1, + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NRCellIdentity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCellIdentity_H_ +#define _NRCellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentity */ +typedef BIT_STRING_t NRCellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentity; +asn_struct_free_f NRCellIdentity_free; +asn_struct_print_f NRCellIdentity_print; +asn_constr_check_f NRCellIdentity_constraint; +ber_type_decoder_f NRCellIdentity_decode_ber; +der_type_encoder_f NRCellIdentity_encode_der; +xer_type_decoder_f NRCellIdentity_decode_xer; +xer_type_encoder_f NRCellIdentity_encode_xer; +oer_type_decoder_f NRCellIdentity_decode_oer; +oer_type_encoder_f NRCellIdentity_encode_oer; +per_type_decoder_f NRCellIdentity_decode_uper; +per_type_encoder_f NRCellIdentity_encode_uper; +per_type_decoder_f NRCellIdentity_decode_aper; +per_type_encoder_f NRCellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUCP-PF-Container.h" + +static int +memb_numberOfActive_UEs_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_3[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_numberOfActive_UEs_constr_4, &asn_PER_memb_numberOfActive_UEs_constr_4, memb_numberOfActive_UEs_constraint_3 }, + 0, 0, /* No default value */ + "numberOfActive-UEs" + }, +}; +static const int asn_MAP_cu_CP_Resource_Status_oms_3[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_3 = { + sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status), + offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx), + asn_MAP_cu_CP_Resource_Status_tag2el_3, + 1, /* Count of tags in the map */ + asn_MAP_cu_CP_Resource_Status_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_3 = { + "cu-CP-Resource-Status", + "cu-CP-Resource-Status", + &asn_OP_SEQUENCE, + asn_DEF_cu_CP_Resource_Status_tags_3, + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]) - 1, /* 1 */ + asn_DEF_cu_CP_Resource_Status_tags_3, /* Same as above */ + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_cu_CP_Resource_Status_3, + 1, /* Elements count */ + &asn_SPC_cu_CP_Resource_Status_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container, gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cu_CP_Resource_Status_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-CP-Resource-Status" + }, +}; +static const int asn_MAP_OCUCP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cu-CP-Resource-Status */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = { + sizeof(struct OCUCP_PF_Container), + offsetof(struct OCUCP_PF_Container, _asn_ctx), + asn_MAP_OCUCP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUCP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container = { + "OCUCP-PF-Container", + "OCUCP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUCP_PF_Container_tags_1, + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUCP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUCP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUCP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUCP-PF-Container.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUCP_PF_Container_H_ +#define _OCUCP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-CP-Name.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OCUCP-PF-Container */ +typedef struct OCUCP_PF_Container { + GNB_CU_CP_Name_t *gNB_CU_CP_Name; /* OPTIONAL */ + struct OCUCP_PF_Container__cu_CP_Resource_Status { + long *numberOfActive_UEs; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cu_CP_Resource_Status; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUCP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCUCP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.c @@ -0,0 +1,141 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUUP-PF-Container.h" + +static int +memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pf_ContainerList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PF_ContainerListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_3 = { + sizeof(struct OCUUP_PF_Container__pf_ContainerList), + offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_3 = { + "pf-ContainerList", + "pf-ContainerList", + &asn_OP_SEQUENCE_OF, + asn_DEF_pf_ContainerList_tags_3, + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]) - 1, /* 1 */ + asn_DEF_pf_ContainerList_tags_3, /* Same as above */ + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]), /* 2 */ + { &asn_OER_type_pf_ContainerList_constr_3, &asn_PER_type_pf_ContainerList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_pf_ContainerList_3, + 1, /* Single element */ + &asn_SPC_pf_ContainerList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUUP_PF_Container, gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pf_ContainerList_3, + 0, + { &asn_OER_memb_pf_ContainerList_constr_3, &asn_PER_memb_pf_ContainerList_constr_3, memb_pf_ContainerList_constraint_1 }, + 0, 0, /* No default value */ + "pf-ContainerList" + }, +}; +static const int asn_MAP_OCUUP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pf-ContainerList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = { + sizeof(struct OCUUP_PF_Container), + offsetof(struct OCUUP_PF_Container, _asn_ctx), + asn_MAP_OCUUP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUUP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container = { + "OCUUP-PF-Container", + "OCUUP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUUP_PF_Container_tags_1, + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUUP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUUP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUUP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OCUUP-PF-Container.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUUP_PF_Container_H_ +#define _OCUUP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-UP-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_ContainerListItem; + +/* OCUUP-PF-Container */ +typedef struct OCUUP_PF_Container { + GNB_CU_UP_Name_t *gNB_CU_UP_Name; /* OPTIONAL */ + struct OCUUP_PF_Container__pf_ContainerList { + A_SEQUENCE_OF(struct PF_ContainerListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pf_ContainerList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUUP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-ContainerListItem.h" + +#endif /* _OCUUP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ODU-PF-Container.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellResourceReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct ODU_PF_Container__cellResourceReportList), + offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = { + sizeof(struct ODU_PF_Container), + offsetof(struct ODU_PF_Container, _asn_ctx), + asn_MAP_ODU_PF_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container = { + "ODU-PF-Container", + "ODU-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_ODU_PF_Container_tags_1, + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_ODU_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ODU_PF_Container_1, + 1, /* Elements count */ + &asn_SPC_ODU_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ODU-PF-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ODU_PF_Container_H_ +#define _ODU_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellResourceReportListItem; + +/* ODU-PF-Container */ +typedef struct ODU_PF_Container { + struct ODU_PF_Container__cellResourceReportList { + A_SEQUENCE_OF(struct CellResourceReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ODU_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellResourceReportListItem.h" + +#endif /* _ODU_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-Container.h" + +static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oDU), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ODU_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_CP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUCP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_UP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUUP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */ +}; +asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = { + sizeof(struct PF_Container), + offsetof(struct PF_Container, _asn_ctx), + offsetof(struct PF_Container, present), + sizeof(((struct PF_Container *)0)->present), + asn_MAP_PF_Container_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_Container = { + "PF-Container", + "PF-Container", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint }, + asn_MBR_PF_Container_1, + 3, /* Elements count */ + &asn_SPC_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-Container.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_Container_H_ +#define _PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "ODU-PF-Container.h" +#include "OCUCP-PF-Container.h" +#include "OCUUP-PF-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PF_Container_PR { + PF_Container_PR_NOTHING, /* No components present */ + PF_Container_PR_oDU, + PF_Container_PR_oCU_CP, + PF_Container_PR_oCU_UP + /* Extensions may appear below */ + +} PF_Container_PR; + +/* PF-Container */ +typedef struct PF_Container { + PF_Container_PR present; + union PF_Container_u { + ODU_PF_Container_t oDU; + OCUCP_PF_Container_t oCU_CP; + OCUUP_PF_Container_t oCU_UP; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_Container; +extern asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_Container_1[3]; +extern asn_per_constraints_t asn_PER_type_PF_Container_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-ContainerListItem.h" + +asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NI_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-type" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CUUPMeasurement_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "o-CU-UP-PM-Container" + }, +}; +static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = { + sizeof(struct PF_ContainerListItem), + offsetof(struct PF_ContainerListItem, _asn_ctx), + asn_MAP_PF_ContainerListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem = { + "PF-ContainerListItem", + "PF-ContainerListItem", + &asn_OP_SEQUENCE, + asn_DEF_PF_ContainerListItem_tags_1, + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + asn_DEF_PF_ContainerListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PF_ContainerListItem_1, + 2, /* Elements count */ + &asn_SPC_PF_ContainerListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PF-ContainerListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_ContainerListItem_H_ +#define _PF_ContainerListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NI-Type.h" +#include "CUUPMeasurement-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PF-ContainerListItem */ +typedef struct PF_ContainerListItem { + NI_Type_t interface_type; + CUUPMeasurement_Container_t o_CU_UP_PM_Container; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_ContainerListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_ContainerListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..d0a3d97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..0083974 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PM-Containers-List.h" + +asn_TYPE_member_t asn_MBR_PM_Containers_List_1[] = { + { ATF_POINTER, 2, offsetof(struct PM_Containers_List, performanceContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "performanceContainer" + }, + { ATF_POINTER, 1, offsetof(struct PM_Containers_List, theRANContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAN_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "theRANContainer" + }, +}; +static const int asn_MAP_PM_Containers_List_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_PM_Containers_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1 = { + sizeof(struct PM_Containers_List), + offsetof(struct PM_Containers_List, _asn_ctx), + asn_MAP_PM_Containers_List_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PM_Containers_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PM_Containers_List = { + "PM-Containers-List", + "PM-Containers-List", + &asn_OP_SEQUENCE, + asn_DEF_PM_Containers_List_tags_1, + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + asn_DEF_PM_Containers_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PM_Containers_List_1, + 2, /* Elements count */ + &asn_SPC_PM_Containers_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PM-Containers-List.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PM_Containers_List_H_ +#define _PM_Containers_List_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_Container; +struct RAN_Container; + +/* PM-Containers-List */ +typedef struct PM_Containers_List { + struct PF_Container *performanceContainer; /* OPTIONAL */ + struct RAN_Container *theRANContainer; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PM_Containers_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PM_Containers_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PM_Containers_List_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-Container.h" +#include "RAN-Container.h" + +#endif /* _PM_Containers_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItem.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = { + sizeof(struct PerQCIReportListItem), + offsetof(struct PerQCIReportListItem, _asn_ctx), + asn_MAP_PerQCIReportListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = { + "PerQCIReportListItem", + "PerQCIReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItem_tags_1, + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItem_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItem_H_ +#define _PerQCIReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItem */ +typedef struct PerQCIReportListItem { + long qci; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItemFormat.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = { + sizeof(struct PerQCIReportListItemFormat), + offsetof(struct PerQCIReportListItemFormat, _asn_ctx), + asn_MAP_PerQCIReportListItemFormat_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItemFormat_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = { + "PerQCIReportListItemFormat", + "PerQCIReportListItemFormat", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItemFormat_tags_1, + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItemFormat_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItemFormat_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItemFormat_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PerQCIReportListItemFormat.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItemFormat_H_ +#define _PerQCIReportListItemFormat_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItemFormat */ +typedef struct PerQCIReportListItemFormat { + long qci; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItemFormat_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItemFormat_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PlmnID-List.h" + +asn_TYPE_member_t asn_MBR_PlmnID_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PlmnID_List, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct PlmnID_List, cu_UP_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct PlmnID_List, cu_UP_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-EPC" + }, +}; +static const int asn_MAP_PlmnID_List_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PlmnID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PlmnID_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1 = { + sizeof(struct PlmnID_List), + offsetof(struct PlmnID_List, _asn_ctx), + asn_MAP_PlmnID_List_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PlmnID_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PlmnID_List = { + "PlmnID-List", + "PlmnID-List", + &asn_OP_SEQUENCE, + asn_DEF_PlmnID_List_tags_1, + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + asn_DEF_PlmnID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PlmnID_List_1, + 3, /* Elements count */ + &asn_SPC_PlmnID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PlmnID-List.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PlmnID_List_H_ +#define _PlmnID_List_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_CUUP_PM_Format; +struct EPC_CUUP_PM_Format; + +/* PlmnID-List */ +typedef struct PlmnID_List { + PLMN_Identity_t pLMN_Identity; + struct FGC_CUUP_PM_Format *cu_UP_PM_5GC; /* OPTIONAL */ + struct EPC_CUUP_PM_Format *cu_UP_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PlmnID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PlmnID_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PlmnID_List_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-CUUP-PM-Format.h" +#include "EPC-CUUP-PM-Format.h" + +#endif /* _PlmnID_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c new file mode 100644 index 0000000..e28be1a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_Presence_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { &asn_OER_type_Presence_constr_1, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h new file mode 100644 index 0000000..9af00f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Presence.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +oer_type_decoder_f Presence_decode_oer; +oer_type_encoder_f Presence_encode_oer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..31d0944 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { &asn_OER_type_ProcedureCode_constr_1, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..1d85971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProcedureCode.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +oer_type_decoder_f ProcedureCode_decode_oer; +oer_type_encoder_f ProcedureCode_encode_oer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4636657 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,870 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P0_constr_1, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P1_constr_3, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P2_constr_5, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P3_constr_7, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P4_constr_9, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P5_constr_11, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P6_constr_13, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P7_constr_15, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P8_constr_17, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P9_constr_19, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P10_constr_21, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P11_constr_23, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P12_constr_25, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P13_constr_27, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P14_constr_29, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P15_constr_31, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P16_constr_33, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P17_constr_35, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P18_constr_37, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P19_constr_39, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..750426b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c434a72 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..c895e7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..44a410d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..178cc55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..9019178 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..dd9a5be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..e6abc22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7424 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_id_constr_2 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_6 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_7 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_8 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_10 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_11 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_12 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_14 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_15 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_16 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_18 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_19 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_20 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_22 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_23 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_24 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_26 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_27 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_28 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_30 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_31 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_32 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_34 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_35 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_36 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_38 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_39 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_40 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_42 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_43 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_44 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_46 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_47 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_48 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_50 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_51 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_52 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_54 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_55 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_56 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_58 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_59 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_60 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_62 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_63 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_64 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_66 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_67 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_68 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_70 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_71 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_72 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_74 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_75 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_76 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_78 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_79 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_80 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_82 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_83 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_84 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_86 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_87 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_88 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_90 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_91 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_92 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_94 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_95 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_96 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_98 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_99 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_100 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_102 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_103 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_104 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_2, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_6, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_7, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { &asn_OER_memb_value_constr_8, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_10, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_11, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { &asn_OER_memb_value_constr_12, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_14, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_15, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { &asn_OER_memb_value_constr_16, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_18, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_19, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { &asn_OER_memb_value_constr_20, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_22, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_23, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { &asn_OER_memb_value_constr_24, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_26, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_27, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { &asn_OER_memb_value_constr_28, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_30, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_31, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { &asn_OER_memb_value_constr_32, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_34, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_35, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { &asn_OER_memb_value_constr_36, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_38, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_39, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { &asn_OER_memb_value_constr_40, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_42, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_43, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { &asn_OER_memb_value_constr_44, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_46, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_47, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { &asn_OER_memb_value_constr_48, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_50, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_51, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { &asn_OER_memb_value_constr_52, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_54, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_55, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { &asn_OER_memb_value_constr_56, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_58, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_59, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { &asn_OER_memb_value_constr_60, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_62, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_63, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { &asn_OER_memb_value_constr_64, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_66, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_67, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { &asn_OER_memb_value_constr_68, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_70, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { &asn_OER_memb_criticality_constr_71, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { &asn_OER_memb_value_constr_72, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_74, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { &asn_OER_memb_criticality_constr_75, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { &asn_OER_memb_value_constr_76, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_78, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { &asn_OER_memb_criticality_constr_79, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { &asn_OER_memb_value_constr_80, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_82, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { &asn_OER_memb_criticality_constr_83, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { &asn_OER_memb_value_constr_84, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_86, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { &asn_OER_memb_criticality_constr_87, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { &asn_OER_memb_value_constr_88, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_90, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_91, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { &asn_OER_memb_value_constr_92, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_94, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_95, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { &asn_OER_memb_value_constr_96, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_98, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_99, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { &asn_OER_memb_value_constr_100, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_102, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_103, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { &asn_OER_memb_value_constr_104, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..a62f34b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..1d70ccf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..ca20e0d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..c7466e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_ID_constr_1, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..cb581b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +oer_type_decoder_f ProtocolIE_ID_decode_oer; +oer_type_encoder_f ProtocolIE_ID_encode_oer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..d9b038e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..f733073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.c @@ -0,0 +1,127 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RAN-Container.h" + +static asn_oer_constraints_t asn_OER_type_reportContainer_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_reportContainer_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportContainer_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oDU_UE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DU_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_CP_UE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_CP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_UP_UE), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_UP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP-UE" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_reportContainer_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU-UE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP-UE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP-UE */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportContainer_specs_3 = { + sizeof(struct RAN_Container__reportContainer), + offsetof(struct RAN_Container__reportContainer, _asn_ctx), + offsetof(struct RAN_Container__reportContainer, present), + sizeof(((struct RAN_Container__reportContainer *)0)->present), + asn_MAP_reportContainer_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportContainer_3 = { + "reportContainer", + "reportContainer", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_reportContainer_constr_3, &asn_PER_type_reportContainer_constr_3, CHOICE_constraint }, + asn_MBR_reportContainer_3, + 3, /* Elements count */ + &asn_SPC_reportContainer_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RAN_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, timestamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Timestamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, reportContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportContainer_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportContainer" + }, +}; +static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RAN_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1 = { + sizeof(struct RAN_Container), + offsetof(struct RAN_Container, _asn_ctx), + asn_MAP_RAN_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RAN_Container = { + "RAN-Container", + "RAN-Container", + &asn_OP_SEQUENCE, + asn_DEF_RAN_Container_tags_1, + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + asn_DEF_RAN_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RAN_Container_1, + 2, /* Elements count */ + &asn_SPC_RAN_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RAN-Container.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RAN_Container_H_ +#define _RAN_Container_H_ + + +#include + +/* Including external dependencies */ +#include "Timestamp.h" +#include "DU-Usage-Report-Per-UE.h" +#include "CU-CP-Usage-Report-Per-UE.h" +#include "CU-UP-Usage-Report-Per-UE.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAN_Container__reportContainer_PR { + RAN_Container__reportContainer_PR_NOTHING, /* No components present */ + RAN_Container__reportContainer_PR_oDU_UE, + RAN_Container__reportContainer_PR_oCU_CP_UE, + RAN_Container__reportContainer_PR_oCU_UP_UE + /* Extensions may appear below */ + +} RAN_Container__reportContainer_PR; + +/* RAN-Container */ +typedef struct RAN_Container { + Timestamp_t timestamp; + struct RAN_Container__reportContainer { + RAN_Container__reportContainer_PR present; + union RAN_Container__reportContainer_u { + DU_Usage_Report_Per_UE_t oDU_UE; + CU_CP_Usage_Report_Per_UE_t oCU_CP_UE; + CU_UP_Usage_Report_Per_UE_t oCU_UP_UE; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportContainer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RAN_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAN_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_RAN_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAN_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANcallProcess-ID-string.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RANcallProcess_ID_string_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RANcallProcess_ID_string_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RANcallProcess_ID_string_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = { + "RANcallProcess-ID-string", + "RANcallProcess-ID-string", + &asn_OP_PrintableString, + asn_DEF_RANcallProcess_ID_string_tags_1, + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + asn_DEF_RANcallProcess_ID_string_tags_1, /* Same as above */ + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + { &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANcallProcess-ID-string.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANcallProcess_ID_string_H_ +#define _RANcallProcess_ID_string_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANcallProcess-ID-string */ +typedef PrintableString_t RANcallProcess_ID_string_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string; +asn_struct_free_f RANcallProcess_ID_string_free; +asn_struct_print_f RANcallProcess_ID_string_print; +asn_constr_check_f RANcallProcess_ID_string_constraint; +ber_type_decoder_f RANcallProcess_ID_string_decode_ber; +der_type_encoder_f RANcallProcess_ID_string_encode_der; +xer_type_decoder_f RANcallProcess_ID_string_decode_xer; +xer_type_encoder_f RANcallProcess_ID_string_encode_xer; +oer_type_decoder_f RANcallProcess_ID_string_decode_oer; +oer_type_encoder_f RANcallProcess_ID_string_encode_oer; +per_type_decoder_f RANcallProcess_ID_string_decode_uper; +per_type_encoder_f RANcallProcess_ID_string_encode_uper; +per_type_decoder_f RANcallProcess_ID_string_decode_aper; +per_type_encoder_f RANcallProcess_ID_string_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANcallProcess_ID_string_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..3cc4346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..b791652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.c @@ -0,0 +1,316 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANfunction-Name.h" + +static const int permitted_alphabet_table_2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_2[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_2(const void *sptr) { + const int *table = permitted_alphabet_table_2; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_ranFunction_ShortName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_2(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_ShortName_2_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_2)/sizeof(permitted_alphabet_table_2[0])) + return -1; + return permitted_alphabet_table_2[value] - 1; +} +static int asn_PER_MAP_ranFunction_ShortName_2_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_2)/sizeof(permitted_alphabet_code2value_2[0])) + return -1; + return permitted_alphabet_code2value_2[code]; +} +static int +memb_ranFunction_E2SM_OID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000) + && !check_permitted_alphabet_3(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_E2SM_OID_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_ranFunction_E2SM_OID_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} +static int +memb_ranFunction_Description_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_4(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_Description_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} +static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, + asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_Description_4_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_Description_4_c2v /* PER code to value map */ +}; +asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_ShortName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-ShortName" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_E2SM_OID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-E2SM-OID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_Description), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-Description" + }, + { ATF_POINTER, 1, offsetof(struct RANfunction_Name, ranFunction_Instance), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Instance" + }, +}; +static const int asn_MAP_RANfunction_Name_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_RANfunction_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-ShortName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunction-E2SM-OID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunction-Description */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunction-Instance */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1 = { + sizeof(struct RANfunction_Name), + offsetof(struct RANfunction_Name, _asn_ctx), + asn_MAP_RANfunction_Name_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RANfunction_Name_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Name = { + "RANfunction-Name", + "RANfunction-Name", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Name_tags_1, + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Name_1, + 4, /* Elements count */ + &asn_SPC_RANfunction_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunction-Name.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANfunction_Name_H_ +#define _RANfunction_Name_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Name */ +typedef struct RANfunction_Name { + PrintableString_t ranFunction_ShortName; + PrintableString_t ranFunction_E2SM_OID; + PrintableString_t ranFunction_Description; + long *ranFunction_Instance; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Name; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..2e60af0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..93dca22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +oer_type_decoder_f RANfunctionDefinition_decode_oer; +oer_type_encoder_f RANfunctionDefinition_encode_oer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..3fa7c18 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..1566a03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..964225d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..4095) */, + -1}; +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionID_constr_1, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..dc825cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +oer_type_decoder_f RANfunctionID_decode_oer; +oer_type_encoder_f RANfunctionID_encode_oer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..ac39adc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..338e066 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a2aa7ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..4095) */, + -1}; +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionRevision_constr_1, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..837b0e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionRevision.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +oer_type_decoder_f RANfunctionRevision_decode_oer; +oer_type_encoder_f RANfunctionRevision_encode_oer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..61f8e02 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctions_List_constr_1, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..f1193cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..1cc0185 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionsID_List_constr_1, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..1cad48c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..e5345f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionsIDcause_List_constr_1, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..4949436 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-EventTriggerStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_List), + offsetof(struct RIC_EventTriggerStyle_List, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_List_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List = { + "RIC-EventTriggerStyle-List", + "RIC-EventTriggerStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_List_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_List_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-EventTriggerStyle-List.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_EventTriggerStyle_List_H_ +#define _RIC_EventTriggerStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-List */ +typedef struct RIC_EventTriggerStyle_List { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Format-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Format_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type = { + "RIC-Format-Type", + "RIC-Format-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Format_Type_tags_1, + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Format_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Format-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Format_Type_H_ +#define _RIC_Format_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Format-Type */ +typedef long RIC_Format_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type; +asn_struct_free_f RIC_Format_Type_free; +asn_struct_print_f RIC_Format_Type_print; +asn_constr_check_f RIC_Format_Type_constraint; +ber_type_decoder_f RIC_Format_Type_decode_ber; +der_type_encoder_f RIC_Format_Type_encode_der; +xer_type_decoder_f RIC_Format_Type_decode_xer; +xer_type_encoder_f RIC_Format_Type_encode_xer; +oer_type_decoder_f RIC_Format_Type_decode_oer; +oer_type_encoder_f RIC_Format_Type_encode_oer; +per_type_decoder_f RIC_Format_Type_decode_uper; +per_type_encoder_f RIC_Format_Type_encode_uper; +per_type_decoder_f RIC_Format_Type_decode_aper; +per_type_encoder_f RIC_Format_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Format_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-ReportStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1 = { + sizeof(struct RIC_ReportStyle_List), + offsetof(struct RIC_ReportStyle_List, _asn_ctx), + asn_MAP_RIC_ReportStyle_List_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List = { + "RIC-ReportStyle-List", + "RIC-ReportStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_List_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_List_1, + 4, /* Elements count */ + &asn_SPC_RIC_ReportStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-ReportStyle-List.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_ReportStyle_List_H_ +#define _RIC_ReportStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-List */ +typedef struct RIC_ReportStyle_List { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RIC_Style_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RIC_Style_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RIC_Style_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RIC_Style_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RIC_Style_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { + "RIC-Style-Name", + "RIC-Style-Name", + &asn_OP_PrintableString, + asn_DEF_RIC_Style_Name_tags_1, + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Name_H_ +#define _RIC_Style_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Name */ +typedef PrintableString_t RIC_Style_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name; +asn_struct_free_f RIC_Style_Name_free; +asn_struct_print_f RIC_Style_Name_print; +asn_constr_check_f RIC_Style_Name_constraint; +ber_type_decoder_f RIC_Style_Name_decode_ber; +der_type_encoder_f RIC_Style_Name_encode_der; +xer_type_decoder_f RIC_Style_Name_decode_xer; +xer_type_encoder_f RIC_Style_Name_encode_xer; +oer_type_decoder_f RIC_Style_Name_decode_oer; +oer_type_encoder_f RIC_Style_Name_encode_oer; +per_type_decoder_f RIC_Style_Name_decode_uper; +per_type_encoder_f RIC_Style_Name_encode_uper; +per_type_decoder_f RIC_Style_Name_decode_aper; +per_type_encoder_f RIC_Style_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Style_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type = { + "RIC-Style-Type", + "RIC-Style-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Style_Type_tags_1, + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RIC-Style-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Type_H_ +#define _RIC_Style_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Type */ +typedef long RIC_Style_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type; +asn_struct_free_f RIC_Style_Type_free; +asn_struct_print_f RIC_Style_Type_print; +asn_constr_check_f RIC_Style_Type_constraint; +ber_type_decoder_f RIC_Style_Type_decode_ber; +der_type_encoder_f RIC_Style_Type_encode_der; +xer_type_decoder_f RIC_Style_Type_decode_xer; +xer_type_encoder_f RIC_Style_Type_encode_xer; +oer_type_decoder_f RIC_Style_Type_decode_oer; +oer_type_encoder_f RIC_Style_Type_encode_oer; +per_type_decoder_f RIC_Style_Type_decode_uper; +per_type_encoder_f RIC_Style_Type_encode_uper; +per_type_decoder_f RIC_Style_Type_decode_aper; +per_type_encoder_f RIC_Style_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..edb976f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..3ad904a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..457e9ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16)) */}; +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICaction_Admitted_List_constr_1, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..09d9711 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..3cc57e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..0d1b376 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..abb292f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..16)) */}; +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICaction_NotAdmitted_List_constr_1, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..c38717c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..94f5b2f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..1bbbd47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..9a0588b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..9d89df9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +oer_type_decoder_f RICactionDefinition_decode_oer; +oer_type_encoder_f RICactionDefinition_encode_oer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c new file mode 100644 index 0000000..56c67b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICactionID_constr_1 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactionID_constr_1, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h new file mode 100644 index 0000000..68fc9b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +oer_type_decoder_f RICactionID_decode_oer; +oer_type_encoder_f RICactionID_encode_oer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c new file mode 100644 index 0000000..7fd484b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICactionType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactionType_constr_1, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h new file mode 100644 index 0000000..2f1f5ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactionType.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +oer_type_decoder_f RICactionType_decode_oer; +oer_type_encoder_f RICactionType_encode_oer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..e47fa8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16)) */}; +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactions_ToBeSetup_List_constr_1, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..3e92509 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..4cfed50 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..dd303af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcallProcessID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +oer_type_decoder_f RICcallProcessID_decode_oer; +oer_type_encoder_f RICcallProcessID_encode_oer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..0fd327b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { &asn_OER_type_RICcontrolAckRequest_constr_1, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..11fc016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +oer_type_decoder_f RICcontrolAckRequest_decode_oer; +oer_type_encoder_f RICcontrolAckRequest_encode_oer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..5e821fe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..34c81b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..76b0bdc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..7a28d41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..c79d335 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..2301656 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolHeader.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +oer_type_decoder_f RICcontrolHeader_decode_oer; +oer_type_encoder_f RICcontrolHeader_encode_oer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..9004d22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..a501aaf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolMessage.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +oer_type_decoder_f RICcontrolMessage_decode_oer; +oer_type_encoder_f RICcontrolMessage_encode_oer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..36934f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..fa6bcd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +oer_type_decoder_f RICcontrolOutcome_decode_oer; +oer_type_encoder_f RICcontrolOutcome_encode_oer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..c5ccbff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..7bed8f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..9b183a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { &asn_OER_type_RICcontrolStatus_constr_1, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..54474e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICcontrolStatus.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +oer_type_decoder_f RICcontrolStatus_decode_oer; +oer_type_encoder_f RICcontrolStatus_encode_oer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..ecf7fc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..b9c63f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +oer_type_decoder_f RICeventTriggerDefinition_decode_oer; +oer_type_encoder_f RICeventTriggerDefinition_encode_oer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c new file mode 100644 index 0000000..acadb86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h new file mode 100644 index 0000000..c6a89bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..64e4144 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..d6655e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationHeader.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +oer_type_decoder_f RICindicationHeader_decode_oer; +oer_type_encoder_f RICindicationHeader_encode_oer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..cea2831 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..5d8ee52 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationMessage.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +oer_type_decoder_f RICindicationMessage_decode_oer; +oer_type_encoder_f RICindicationMessage_encode_oer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..453d308 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { &asn_OER_type_RICindicationSN_constr_1, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..f286d17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationSN.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +oer_type_decoder_f RICindicationSN_decode_oer; +oer_type_encoder_f RICindicationSN_encode_oer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c new file mode 100644 index 0000000..8297a1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICindicationType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICindicationType_constr_1, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h new file mode 100644 index 0000000..769ece8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICindicationType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +oer_type_decoder_f RICindicationType_decode_oer; +oer_type_encoder_f RICindicationType_encode_oer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dd83fcd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.c @@ -0,0 +1,126 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ricRequestorID_constr_2, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ricInstanceID_constr_3, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h new file mode 100644 index 0000000..25749c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..325f270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..d15d587 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..86f3600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..50bbff7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..875bb38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..a50b20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..369d521 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..eb38105 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..0f7c74f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..352ad75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..c584cc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..12b34f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..105b324 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..654a420 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..a1d91a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..c16b877 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..b206576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..6ff580b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..754c2d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..2baa323 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..a9088f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..24f30de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..431301b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..b4f4837 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..fb10ee0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICsubsequentActionType_constr_1, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..1397029 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +oer_type_decoder_f RICsubsequentActionType_decode_oer; +oer_type_encoder_f RICsubsequentActionType_encode_oer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..866c010 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.c @@ -0,0 +1,90 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { &asn_OER_type_RICtimeToWait_constr_1, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..ac9cd3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RICtimeToWait.h @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +oer_type_decoder_f RICtimeToWait_decode_oer; +oer_type_encoder_f RICtimeToWait_encode_oer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RT-Period-IE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = { + { 0, 4, "ms10" }, + { 1, 4, "ms20" }, + { 2, 4, "ms32" }, + { 3, 4, "ms40" }, + { 4, 4, "ms60" }, + { 5, 4, "ms64" }, + { 6, 4, "ms70" }, + { 7, 4, "ms80" }, + { 8, 5, "ms128" }, + { 9, 5, "ms160" }, + { 10, 5, "ms256" }, + { 11, 5, "ms320" }, + { 12, 5, "ms512" }, + { 13, 5, "ms640" }, + { 14, 6, "ms1024" }, + { 15, 6, "ms1280" }, + { 16, 6, "ms2048" }, + { 17, 6, "ms2560" }, + { 18, 6, "ms5120" }, + { 19, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = { + 0, /* ms10(0) */ + 14, /* ms1024(14) */ + 19, /* ms10240(19) */ + 8, /* ms128(8) */ + 15, /* ms1280(15) */ + 9, /* ms160(9) */ + 1, /* ms20(1) */ + 16, /* ms2048(16) */ + 10, /* ms256(10) */ + 17, /* ms2560(17) */ + 2, /* ms32(2) */ + 11, /* ms320(11) */ + 3, /* ms40(3) */ + 12, /* ms512(12) */ + 18, /* ms5120(18) */ + 4, /* ms60(4) */ + 5, /* ms64(5) */ + 13, /* ms640(13) */ + 6, /* ms70(6) */ + 7 /* ms80(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = { + asn_MAP_RT_Period_IE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RT_Period_IE_enum2value_1, /* N => "tag"; sorted by N */ + 20, /* Number of elements in the maps */ + 21, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = { + "RT-Period-IE", + "RT-Period-IE", + &asn_OP_NativeEnumerated, + asn_DEF_RT_Period_IE_tags_1, + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + asn_DEF_RT_Period_IE_tags_1, /* Same as above */ + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + { &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RT_Period_IE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/RT-Period-IE.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RT_Period_IE_H_ +#define _RT_Period_IE_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RT_Period_IE { + RT_Period_IE_ms10 = 0, + RT_Period_IE_ms20 = 1, + RT_Period_IE_ms32 = 2, + RT_Period_IE_ms40 = 3, + RT_Period_IE_ms60 = 4, + RT_Period_IE_ms64 = 5, + RT_Period_IE_ms70 = 6, + RT_Period_IE_ms80 = 7, + RT_Period_IE_ms128 = 8, + RT_Period_IE_ms160 = 9, + RT_Period_IE_ms256 = 10, + RT_Period_IE_ms320 = 11, + RT_Period_IE_ms512 = 12, + RT_Period_IE_ms640 = 13, + RT_Period_IE_ms1024 = 14, + RT_Period_IE_ms1280 = 15, + RT_Period_IE_ms2048 = 16, + RT_Period_IE_ms2560 = 17, + RT_Period_IE_ms5120 = 18, + RT_Period_IE_ms10240 = 19 + /* + * Enumeration is extensible + */ +} e_RT_Period_IE; + +/* RT-Period-IE */ +typedef long RT_Period_IE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RT_Period_IE; +extern const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1; +asn_struct_free_f RT_Period_IE_free; +asn_struct_print_f RT_Period_IE_print; +asn_constr_check_f RT_Period_IE_constraint; +ber_type_decoder_f RT_Period_IE_decode_ber; +der_type_encoder_f RT_Period_IE_encode_der; +xer_type_decoder_f RT_Period_IE_decode_xer; +xer_type_encoder_f RT_Period_IE_encode_xer; +oer_type_decoder_f RT_Period_IE_decode_oer; +oer_type_encoder_f RT_Period_IE_encode_oer; +per_type_decoder_f RT_Period_IE_decode_uper; +per_type_encoder_f RT_Period_IE_encode_uper; +per_type_decoder_f RT_Period_IE_decode_aper; +per_type_encoder_f RT_Period_IE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RT_Period_IE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c new file mode 100644 index 0000000..8d2dc82 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h new file mode 100644 index 0000000..f92e0ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c new file mode 100644 index 0000000..30f6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h new file mode 100644 index 0000000..139b953 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SNSSAI.h" + +static int +memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = { + { 0, 0 }, + 1 /* (SIZE(1..1)) */}; +static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SNSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2, memb_sST_constraint_1 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct SNSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3, memb_sD_constraint_1 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_SNSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SNSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1 = { + sizeof(struct SNSSAI), + offsetof(struct SNSSAI, _asn_ctx), + asn_MAP_SNSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SNSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNSSAI = { + "SNSSAI", + "SNSSAI", + &asn_OP_SEQUENCE, + asn_DEF_SNSSAI_tags_1, + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + asn_DEF_SNSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNSSAI_1, + 2, /* Elements count */ + &asn_SPC_SNSSAI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SNSSAI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SNSSAI_H_ +#define _SNSSAI_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNSSAI */ +typedef struct SNSSAI { + OCTET_STRING_t sST; + OCTET_STRING_t *sD; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_SNSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNSSAI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ServedPlmnPerCellListItem.h" + +asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-EPC" + }, +}; +static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = { + sizeof(struct ServedPlmnPerCellListItem), + offsetof(struct ServedPlmnPerCellListItem, _asn_ctx), + asn_MAP_ServedPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ServedPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = { + "ServedPlmnPerCellListItem", + "ServedPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_ServedPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_ServedPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_ServedPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ServedPlmnPerCellListItem.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ServedPlmnPerCellListItem_H_ +#define _ServedPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_DU_PM_Container; +struct EPC_DU_PM_Container; + +/* ServedPlmnPerCellListItem */ +typedef struct ServedPlmnPerCellListItem { + PLMN_Identity_t pLMN_Identity; + struct FGC_DU_PM_Container *du_PM_5GC; /* OPTIONAL */ + struct EPC_DU_PM_Container *du_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-DU-PM-Container.h" +#include "EPC-DU-PM-Container.h" + +#endif /* _ServedPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SlicePerPlmnPerCellListItem.h" + +static int +memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = { + sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList), + offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = { + "fQIPERSlicesPerPlmnPerCellList", + "fQIPERSlicesPerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnPerCellList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnPerCellList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = { + sizeof(struct SlicePerPlmnPerCellListItem), + offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx), + asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem = { + "SlicePerPlmnPerCellListItem", + "SlicePerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SlicePerPlmnPerCellListItem_1, + 2, /* Elements count */ + &asn_SPC_SlicePerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SlicePerPlmnPerCellListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SlicePerPlmnPerCellListItem_H_ +#define _SlicePerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnPerCellListItem; + +/* SlicePerPlmnPerCellListItem */ +typedef struct SlicePerPlmnPerCellListItem { + SNSSAI_t sliceID; + struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SlicePerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +#endif /* _SlicePerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SliceToReportListItem.h" + +static int +memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = { + sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList), + offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = { + "fQIPERSlicesPerPlmnList", + "fQIPERSlicesPerPlmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3, memb_fQIPERSlicesPerPlmnList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = { + sizeof(struct SliceToReportListItem), + offsetof(struct SliceToReportListItem, _asn_ctx), + asn_MAP_SliceToReportListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem = { + "SliceToReportListItem", + "SliceToReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_SliceToReportListItem_tags_1, + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + asn_DEF_SliceToReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SliceToReportListItem_1, + 2, /* Elements count */ + &asn_SPC_SliceToReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SliceToReportListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SliceToReportListItem_H_ +#define _SliceToReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnListItem; + +/* SliceToReportListItem */ +typedef struct SliceToReportListItem { + SNSSAI_t sliceID; + struct SliceToReportListItem__fQIPERSlicesPerPlmnList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SliceToReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnListItem.h" + +#endif /* _SliceToReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..1fbef5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,368 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..5df655a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c new file mode 100644 index 0000000..ad3c27c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.c @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TimeToWait_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { &asn_OER_type_TimeToWait_constr_1, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h new file mode 100644 index 0000000..7c06018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TimeToWait.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +oer_type_decoder_f TimeToWait_decode_oer; +oer_type_encoder_f TimeToWait_encode_oer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Timestamp.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Timestamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Timestamp = { + "Timestamp", + "Timestamp", + &asn_OP_OCTET_STRING, + asn_DEF_Timestamp_tags_1, + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + asn_DEF_Timestamp_tags_1, /* Same as above */ + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Timestamp.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Timestamp_H_ +#define _Timestamp_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timestamp */ +typedef OCTET_STRING_t Timestamp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Timestamp; +asn_struct_free_f Timestamp_free; +asn_struct_print_f Timestamp_print; +asn_constr_check_f Timestamp_constraint; +ber_type_decoder_f Timestamp_decode_ber; +der_type_encoder_f Timestamp_encode_der; +xer_type_decoder_f Timestamp_decode_xer; +xer_type_encoder_f Timestamp_encode_xer; +oer_type_decoder_f Timestamp_decode_oer; +oer_type_encoder_f Timestamp_encode_oer; +per_type_decoder_f Timestamp_decode_uper; +per_type_encoder_f Timestamp_encode_uper; +per_type_decoder_f Timestamp_decode_aper; +per_type_encoder_f Timestamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Timestamp_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Trigger-ConditionIE-Item.h" + +asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RT_Period_IE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "report-Period-IE" + }, +}; +static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = { + sizeof(struct Trigger_ConditionIE_Item), + offsetof(struct Trigger_ConditionIE_Item, _asn_ctx), + asn_MAP_Trigger_ConditionIE_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item = { + "Trigger-ConditionIE-Item", + "Trigger-ConditionIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_Trigger_ConditionIE_Item_tags_1, + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + asn_DEF_Trigger_ConditionIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Trigger_ConditionIE_Item_1, + 1, /* Elements count */ + &asn_SPC_Trigger_ConditionIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/Trigger-ConditionIE-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Trigger_ConditionIE_Item_H_ +#define _Trigger_ConditionIE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RT-Period-IE.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trigger-ConditionIE-Item */ +typedef struct Trigger_ConditionIE_Item { + RT_Period_IE_t report_Period_IE; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Trigger_ConditionIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Trigger_ConditionIE_Item_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..fb10f3c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { &asn_OER_type_TriggeringMessage_constr_1, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..51bb220 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TriggeringMessage.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +oer_type_decoder_f TriggeringMessage_decode_oer; +oer_type_encoder_f TriggeringMessage_encode_oer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c new file mode 100644 index 0000000..6b4f37e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TypeOfError_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { &asn_OER_type_TypeOfError_constr_1, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h new file mode 100644 index 0000000..7dee671 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/TypeOfError.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +oer_type_decoder_f TypeOfError_decode_oer; +oer_type_encoder_f TypeOfError_encode_oer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "UE-Report-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_Report_Type_value2enum_1[] = { + { 0, 17, "oDU-Report-Per-UE" }, + { 1, 20, "oCU-CP-Report-Per-UE" }, + { 2, 20, "oCU-UP-Report-Per-UE" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_Report_Type_enum2value_1[] = { + 1, /* oCU-CP-Report-Per-UE(1) */ + 2, /* oCU-UP-Report-Per-UE(2) */ + 0 /* oDU-Report-Per-UE(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1 = { + asn_MAP_UE_Report_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_Report_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_Report_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_Report_Type = { + "UE-Report-Type", + "UE-Report-Type", + &asn_OP_NativeEnumerated, + asn_DEF_UE_Report_Type_tags_1, + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + asn_DEF_UE_Report_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_UE_Report_Type_constr_1, &asn_PER_type_UE_Report_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_Report_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UE-Report-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _UE_Report_Type_H_ +#define _UE_Report_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_Report_Type { + UE_Report_Type_oDU_Report_Per_UE = 0, + UE_Report_Type_oCU_CP_Report_Per_UE = 1, + UE_Report_Type_oCU_UP_Report_Per_UE = 2 + /* + * Enumeration is extensible + */ +} e_UE_Report_Type; + +/* UE-Report-Type */ +typedef long UE_Report_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_Report_Type; +extern const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1; +asn_struct_free_f UE_Report_Type_free; +asn_struct_print_f UE_Report_Type_print; +asn_constr_check_f UE_Report_Type_constraint; +ber_type_decoder_f UE_Report_Type_decode_ber; +der_type_encoder_f UE_Report_Type_encode_der; +xer_type_decoder_f UE_Report_Type_decode_xer; +xer_type_encoder_f UE_Report_Type_encode_xer; +oer_type_decoder_f UE_Report_Type_decode_oer; +oer_type_encoder_f UE_Report_Type_encode_oer; +per_type_decoder_f UE_Report_Type_decode_uper; +per_type_encoder_f UE_Report_Type_encode_uper; +per_type_decoder_f UE_Report_Type_decode_aper; +per_type_encoder_f UE_Report_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_Report_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..7cd5cd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,358 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..0a1cb1a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h new file mode 100644 index 0000000..a6f348c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_constant.h @@ -0,0 +1,22 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define maxProtocolIEs (65535) +#define maxnoofErrors (256) +#define maxofRANfunctionID (256) +#define maxofRICactionID (16) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk new file mode 100644 index 0000000..ef02a5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include ./Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + ./converter-example.c\ + ./pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D . /root/e2ap-v01.00.00.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c new file mode 100644 index 0000000..ea8309c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/pdu_collection.c @@ -0,0 +1,15 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2AP_PDU; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2AP-PDU-Descriptions in /root/e2ap-v01.00.00.asn */ + &asn_DEF_E2AP_PDU, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt new file mode 100644 index 0000000..ed6e7ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/CMakeLists.txt @@ -0,0 +1,35 @@ +#================================================================================== +# Copyright (c) 2020 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"), +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== +# + +add_executable( kpm_sim kpm_callbacks.cpp encode_kpm.cpp ) + +add_dependencies( kpm_sim asn1objects ) +include_directories(.) +include_directories(../ASN1c) +include_directories(/usr/local/include/e2sim) +include_directories(/usr/local/include) + +target_link_libraries( kpm_sim asn1objects ) +target_link_libraries( kpm_sim e2sim ) +target_link_libraries( kpm_sim asn1objects ) +target_link_libraries( kpm_sim pthread) + +install( + TARGETS kpm_sim + DESTINATION ${install_bin} +) + diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp new file mode 100644 index 0000000..6981454 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp @@ -0,0 +1,1871 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "encode_kpm.hpp" + +using namespace std; + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc) { + + printf("kpm0\n"); + + uint8_t *buf = (uint8_t*)"ORAN-E2SM-KPM"; + uint8_t *buf2 = (uint8_t*)"KPM monitor"; + uint8_t *buf3 = (uint8_t*)"OID123"; + + OCTET_STRING_t *sname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sname->buf = (uint8_t*)calloc(1,13); + + memcpy(sname->buf, buf, 13); + sname->size = strlen((char*)buf); + ranfunc_desc->ranFunction_Name.ranFunction_ShortName = *sname; + + long inst = 1; + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); + + // ranfunc_desc->ranFunction_Name.ranFunction_Description = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.buf = (uint8_t*)calloc(1,strlen((char*)buf2)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_Description.buf, buf2, strlen((char*)buf2)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.size = strlen((char*)buf2); + ranfunc_desc->ranFunction_Name.ranFunction_Instance = &inst; + + printf("kpm0.9\n"); + + // ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t*)calloc(1,strlen((char*)buf3)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf, buf3, strlen((char*)buf3)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char*)buf3); + + printf("kpm2\n"); + + + RIC_EventTriggerStyle_List_t *trigger_style = + (RIC_EventTriggerStyle_List_t*)calloc(1, sizeof(RIC_EventTriggerStyle_List_t)); + trigger_style->ric_EventTriggerStyle_Type = 1; + uint8_t *buf4 = (uint8_t*)"Periodic report"; + // trigger_style->ric_EventTriggerStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + trigger_style->ric_EventTriggerStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf4)); + memcpy(trigger_style->ric_EventTriggerStyle_Name.buf, buf4, strlen((char*)buf4)); + trigger_style->ric_EventTriggerStyle_Name.size = strlen((char*)buf4); + trigger_style->ric_EventTriggerFormat_Type = 5; + + printf("kpm3\n"); + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List)); + + int ret = ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List->list , trigger_style); + printf("ret is %d\n", ret); + + RIC_ReportStyle_List_t *report_style1 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style1->ric_ReportStyle_Type = 1; + + uint8_t *buf5 = (uint8_t*)"O-DU Measurement Container for the 5GC connected deployment"; + + printf("kpm4\n"); + + // report_style1->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style1->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf5)); + memcpy(report_style1->ric_ReportStyle_Name.buf, buf5, strlen((char*)buf5)); + report_style1->ric_ReportStyle_Name.size = strlen((char*)buf5); + report_style1->ric_IndicationHeaderFormat_Type = 1; + report_style1->ric_IndicationMessageFormat_Type = 1; + + printf("kpm5\n"); + + RIC_ReportStyle_List_t *report_style2 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style2->ric_ReportStyle_Type = 2; + + uint8_t *buf6 = (uint8_t*)"O-DU Measurement Container for the EPC connected deployment"; + + // report_style2->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + + + report_style2->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf6)); + memcpy(report_style2->ric_ReportStyle_Name.buf, buf6, strlen((char*)buf6)); + report_style2->ric_ReportStyle_Name.size = strlen((char*)buf6); + report_style2->ric_IndicationHeaderFormat_Type = 1; + report_style2->ric_IndicationMessageFormat_Type = 1; + + printf("kpm6\n"); + + RIC_ReportStyle_List_t *report_style3 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style3->ric_ReportStyle_Type = 3; + + uint8_t *buf7 = (uint8_t*)"O-CU-CP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style3->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf7)); + memcpy(report_style3->ric_ReportStyle_Name.buf, buf7, strlen((char*)buf7)); + report_style3->ric_ReportStyle_Name.size = strlen((char*)buf7); + report_style3->ric_IndicationHeaderFormat_Type = 1; + report_style3->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style4 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style4->ric_ReportStyle_Type = 4; + + uint8_t *buf8 = (uint8_t*)"O-CU-CP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style4->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf8)); + memcpy(report_style4->ric_ReportStyle_Name.buf, buf8, strlen((char*)buf8)); + report_style4->ric_ReportStyle_Name.size = strlen((char*)buf8); + report_style4->ric_IndicationHeaderFormat_Type = 1; + report_style4->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style5 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style5->ric_ReportStyle_Type = 5; + + uint8_t *buf9 = (uint8_t*)"O-CU-UP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style5->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf9)); + memcpy(report_style5->ric_ReportStyle_Name.buf, buf9, strlen((char*)buf9)); + report_style5->ric_ReportStyle_Name.size = strlen((char*)buf9); + report_style5->ric_IndicationHeaderFormat_Type = 1; + report_style5->ric_IndicationMessageFormat_Type = 1; + + + RIC_ReportStyle_List_t *report_style6 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style6->ric_ReportStyle_Type = 6; + + uint8_t *buf10 = (uint8_t*)"O-CU-UP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style6->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf10)); + memcpy(report_style6->ric_ReportStyle_Name.buf, buf10, strlen((char*)buf10)); + report_style6->ric_ReportStyle_Name.size = strlen((char*)buf10); + report_style6->ric_IndicationHeaderFormat_Type = 1; + report_style6->ric_IndicationMessageFormat_Type = 1; + + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List)); + + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style1); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style2); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style3); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style4); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style5); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style6); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); +} + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_UP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_UP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_UP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_UP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_UP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_UP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + + ue_report_item->c_RNTI = *crnti; + ue_report_item->pDCPBytesDL = bytesdl; + ue_report_item->pDCPBytesUL = bytesul; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_UP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_UP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + int plmnid_size = strlen((char*)plmnid_buf); + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(plmnid_size,1); + plmnidstr->size = plmnid_size; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + + int nrcellid_size = strlen((char*)nrcellid_buf); + nrcellid->buf = (uint8_t*)calloc(1, nrcellid_size); + memcpy(nrcellid->buf, nrcellid_buf, nrcellid_size); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + + int crnti_size = strlen((char*)crnti_buf); + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1, crnti_size); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_buf); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_buf, crnti->size); + + // uint8_t *buf_serving = (uint8_t*)"RSRP10"; + + int serving_buf_len = strlen((char*)serving_buf); + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(serving_buf_len,1); + servingstr->size = serving_buf_len; + memcpy(servingstr->buf, serving_buf, servingstr->size); + + + int neighbor_buf_len = strlen((char*)neighbor_buf); + // uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ts->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->size = neighbor_buf_len; + memcpy(neighborstr->buf, neighbor_buf, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + + +void encode_kpm_odu_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + DU_Usage_Report_CellResourceReportItem_t *report_item = + (DU_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(DU_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + printf("enc3.1\n"); + + DU_Usage_Report_UeResourceReportItem *ue_report_item = + (DU_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(DU_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + long lval1 = 2; + long lval2 = 1; + + ue_report_item->c_RNTI = *crnti; + ue_report_item->dl_PRBUsage = &lval1; + + printf("enc5\n"); + + ue_report_item->ul_PRBUsage = &lval2; + + printf("enc6\n"); + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oDU_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oDU_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_odu_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco, plmnid_buf, + nrcellid_buf, crnti_buf, + serving_buf, neighbor_buf); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + int pdcp_bytesdl, + int pdcp_bytesul) { + + +} + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + //encode_kpm_ocuup_user_level(ranco); + + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + // xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + long fiveqi, + long dl_prb_usage, + long ul_prb_usage, + uint8_t* sd_buf, + uint8_t* sst_buf, + uint8_t* plmnid_buf, + uint8_t* nrcellid_buf, + long *dl_prbs, + long *ul_prbs) { + + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, nrcellid_buf, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = dl_prbs; + listitem1->ul_TotalofAvailablePRBs = ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + long fiveqi = 8; + long dl_prb_usage = 50; + long ul_prb_usage = 70; + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + long dl_prbs = (long)100; + long ul_prbs = (long)120; + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = &dl_prbs; + listitem1->ul_TotalofAvailablePRBs = &ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *gnbcuupname_buf, + int bytes_dl, + int bytes_ul, + uint8_t *sst_buf, + uint8_t *sd_buf, + uint8_t *plmnid_buf) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + // uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, gnbcuupname_buf, gnbcuupname->size); + + + //We need to convert bytes_dl into array of uint8_t + + int array_size_dl; + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + if (bytes_dl <= 64) { + array_size_dl = 1; + + uint8_t buffer[array_size_dl]; + buffer[0] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf,buffer,1); + bytesdl->size = 1; + + } else if (bytes_dl <= 16384) { + array_size_dl = 2; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 8) & 0xFF; + buffer[1] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(2,1); + memcpy(bytesdl->buf,buffer,2); + bytesdl->size = 2; + + } else if (bytes_dl <= 4194304) { + array_size_dl = 3; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 16) & 0xFF; + buffer[1] = (bytes_dl >> 8) & 0xFF; + buffer[2] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(3,1); + memcpy(bytesdl->buf,buffer,3); + bytesdl->size = 3; + + } else if (bytes_dl <= 1073741824) { + array_size_dl = 4; + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 24) & 0xFF; + buffer[1] = (bytes_dl >> 16) & 0xFF; + buffer[2] = (bytes_dl >> 8) & 0xFF; + buffer[3] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(4,1); + memcpy(bytesdl->buf,buffer,4); + bytesdl->size = 4; + } + + + //We need to convert bytes_ul into array of uint8_t + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + int array_size_ul; + + if (bytes_ul <= 64) { + array_size_ul = 1; + + uint8_t buffer[array_size_ul]; + buffer[0] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf,buffer,1); + bytesul->size = 1; + + } else if (bytes_ul <= 16384) { + array_size_ul = 2; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 8) & 0xFF; + buffer[1] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(2,1); + memcpy(bytesul->buf,buffer,2); + bytesul->size = 2; + + } else if (bytes_ul <= 4194304) { + array_size_ul = 3; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 16) & 0xFF; + buffer[1] = (bytes_ul >> 8) & 0xFF; + buffer[2] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(3,1); + memcpy(bytesul->buf,buffer,3); + bytesul->size = 3; + + } else if (bytes_ul <= 1073741824) { + array_size_ul = 4; + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 24) & 0xFF; + buffer[1] = (bytes_ul >> 16) & 0xFF; + buffer[2] = (bytes_ul >> 8) & 0xFF; + buffer[3] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(4,1); + memcpy(bytesul->buf,buffer,4); + bytesul->size = 4; + } + + long fqi = 9; + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = fqi; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,sst_buf,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, sd_buf, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + //fprintf(stderr, "inner er encded is %d\n", era.encoded); + //fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + //printf("error length %d\n", errlen); + //printf("error buf %s\n", error_buf); + + //xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + //fprintf(stderr, "er encded is %d\n", er.encoded); + //fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + /* + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + //std::string gn = "GNBCUUP5"; + //std::vector gnvec(gn.begin(), gn.end()); + //uint8_t *buf = &gnvec[0]; + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + // std::string sl = "SLICE4"; + // std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + */ +} + +/* +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage) { + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + std::string gn = "GNBCUUP5"; + std::vector gnvec(gn.begin(), gn.end()); + uint8_t *buf = &gnvec[0]; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + std::string sl = "SLICE4"; + std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"SLICE4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + std::string sd = "SD1"; + std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(6,1); + snssai->sST.size = 6; + memcpy(snssai->sST.buf, buf1, 6); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + auto era = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + std::string pl = "PLMNID7"; + std::vector plvec(pl.begin(), pl.end()); + uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(1,7); + plmnid->size = 7; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + auto er = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} +*/ diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp new file mode 100644 index 0000000..09a3583 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.hpp @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ENCODE_KPM_HPP +#define ENCODE_KPM_HPP + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" +} + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc); + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_odu_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco); + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage,uint8_t *plmnid_buf,uint8_t *nrcellid_buf,uint8_t *crnti_buf,const uint8_t *serving_buf, const uint8_t *neighbor_buf); + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *plmnid_buf, uint8_t *nrcellid_buf, uint8_t *crnti_buf,int pdcp_bytesdl, int pdcp_bytesul); + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, long fiveqi, long dl_prb_usage, long ul_prb_usage, uint8_t* sd_buf, uint8_t* sst_buf,uint8_t* plmnid_buf, uint8_t* nrcellid_buf, long *dl_prbs, long *ul_prbs); + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *gnbcuupname_buf, int bytes_dl,int bytes_ul, uint8_t *sst_buf, uint8_t *sd_buf, uint8_t *plmnid_buf); + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp new file mode 100644 index 0000000..c0d94b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.cpp @@ -0,0 +1,828 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Copyright (c) 2020 HCL Technologies Limited. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "E2SM-KPM-IndicationHeader-Format1.h" + #include "E2SM-KPM-IndicationHeader.h" + #include "Timestamp.h" + #include "E2AP-PDU.h" + #include "RICsubscriptionRequest.h" + #include "RICsubscriptionResponse.h" + #include "RICactionType.h" + #include "ProtocolIE-Field.h" + #include "ProtocolIE-SingleContainer.h" + #include "InitiatingMessage.h" +} + +#include "kpm_callbacks.hpp" +#include "encode_kpm.hpp" + +#include "encode_e2apv1.hpp" + +#include +#include + + +using json = nlohmann::json; + +using namespace std; +class E2Sim; + + +E2Sim e2sim; + +int main(int argc, char* argv[]) { + + fprintf(stderr, "Starting KPM processor sim"); + + asn_codec_ctx_t *opt_cod; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + fprintf(stderr, "here is encoded message %s\n", e2smbuffer); + + uint8_t *ranfuncdesc = (uint8_t*)calloc(1,er.encoded); + memcpy(ranfuncdesc, e2smbuffer, er.encoded); + + printf("this is the char array %s\n", (char*)ranfuncdesc); + + OCTET_STRING_t *ranfunc_ostr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfunc_ostr->buf = (uint8_t*)calloc(1,er.encoded); + ranfunc_ostr->size = er.encoded; + memcpy(ranfunc_ostr->buf,e2smbuffer,er.encoded); + + printf("!!!lenth of ranfuncdesc is %d\n", strlen((char*)ranfuncdesc)); + printf("value of this index is %d\n", ranfuncdesc[0]); + printf("value of this index is %d\n", ranfuncdesc[1]); + printf("value of this index is %d\n", ranfuncdesc[2]); + printf("value of this index is %d\n", ranfuncdesc[3]); + printf("value of this index is %d\n", ranfuncdesc[4]); + printf("value of this index is %d\n", ranfuncdesc[5]); + printf("value of this index is %d\n", ranfuncdesc[6]); + printf("value of this index is %d\n", ranfuncdesc[10]); + printf("value of this index is %d\n", ranfuncdesc[15]); + printf("value of this index is %d\n", ranfuncdesc[100]); + printf("value of this index is %d\n", ranfuncdesc[101]); + + e2sim.register_e2sm(0,ranfunc_ostr); + e2sim.register_subscription_callback(0,&callback_kpm_subscription_request); + + e2sim.run_loop(argc, argv); + +} + +/* +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId) { + +} +*/ + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId) { + + //Process simulation file + + ifstream simfile; + string line; + + long seqNum = 1; + + int maxInd = 1000; //1000 no of indication to send + + simfile.open("simulation.txt", ios::in); + + // cout << "step1" << endl; + + std::ifstream ue_stream("/playpen/src/ueMeasReport.txt"); + std::ifstream cell_stream("/playpen/src/cellMeasReport.txt"); + + json all_ues_json; + + ue_stream >> all_ues_json; + + json all_cells_json; + + cell_stream >> all_cells_json; + + asn_codec_ctx_t *opt_cod; + + // cout << "UE RF Measurements" << endl; + // cout << "******************" << endl; + + int numMeasReports = (all_ues_json["/ueMeasReport/ueMeasReportList"_json_pointer]).size(); + + for (int i = 0; i < numMeasReports; i++) { + int nextCellId; + int nextRsrp; + int nextRsrq; + int nextRssinr; + // cout << "UE number " + i << endl; + // cout << "**********" << endl; + json::json_pointer p1(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_ues_json[p1].get(); + // cout << "Serving Cell " << nextCellId << endl; + + json::json_pointer p2(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrp"); + nextRsrp = all_ues_json[p2].get(); + // cout << " RSRP " << nextRsrp << endl; + json::json_pointer p3(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrq"); + nextRsrq = all_ues_json[p3].get(); + // cout << " RSRQ " << nextRsrq << endl; + json::json_pointer p4(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rssinr"); + nextRssinr = all_ues_json[p4].get(); + // cout << " RSSINR " << nextRssinr << endl; + + json::json_pointer p5(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList"); + + int numNeighborCells = (all_ues_json[p5]).size(); + + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)calloc(1,2); + + if (nextCellId == 0) { + uint8_t *buf2 = (uint8_t*)"12"; + memcpy(crnti_buf, buf2, 2); + } else if (nextCellId == 1) { + uint8_t *buf2 = (uint8_t*)"22"; + memcpy(crnti_buf, buf2, 2); + } + + std::string serving_str = "{\"rsrp\": " + std::to_string(nextRsrp) + ", \"rsrq\": " + + std::to_string(nextRsrq) + ", \"rssinr\": " + std::to_string(nextRssinr) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + std::string neighbor_str = "["; + + int nextNbCell; + int nextNbRsrp; + int nextNbRsrq; + int nextNbRssinr; + + for (int j = 0; j < numNeighborCells; j++) { + json::json_pointer p8(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList/" + std::to_string(j) + "/nbCellIdentity"); + nextNbCell = all_ues_json[p8].get(); + //cout << "Neighbor Cell " << all_ues_json[p8] << endl; + json::json_pointer p9(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrp"); + nextNbRsrp = all_ues_json[p9].get(); + //cout << " RSRP " << nextNbRsrp << endl; + + json::json_pointer p10(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrq"); + nextNbRsrq = all_ues_json[p10].get(); + //cout << " RSRQ " << nextNbRsrq << endl; + + json::json_pointer p11(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rssinr"); + nextNbRssinr = all_ues_json[p11].get(); + //cout << " RSSINR " << nextNbRssinr << endl; + + if (j != 0) { + neighbor_str += ","; + + } + + neighbor_str += "{\"CID\" : \"" + std::to_string(nextNbCell) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(nextNbRsrp) + + ", \"rsrq\": " + std::to_string(nextNbRsrq) + ", \"rssinr\": " + std::to_string(nextNbRssinr) + "}}"; + + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + // printf("Neighbor string\n%s", neighbor_buf); + + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + + /* + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)""; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 0, e2smbuffer3, er3.encoded); + + e2sim.encode_and_send_sctp_data(pdu3); + */ + + seqNum++; + + } + + + // cout << "Cell Measurements" << endl; + // cout << "******************" << endl; + + int numCellMeasReports = (all_cells_json["/cellMeasReport/cellMeasReportList"_json_pointer]).size(); + + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + + for (int i = 0; i < numCellMeasReports; i++) { + + int nextCellId; + int nextPdcpBytesDL; + int nextPdcpBytesUL; + int nextPRBBytesDL; + int nextPRBBytesUL; + + json::json_pointer p1(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_cells_json[p1].get(); + // cout << std::string("Cell number ") << nextCellId << endl; + + // cout << "**********" << endl; + + json::json_pointer p2(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesDl"); + nextPdcpBytesDL = all_cells_json[p2].get(); + // cout << std::string(" PDCP Bytes DL ") << nextPdcpBytesDL << endl; + + json::json_pointer p3(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesUl"); + nextPdcpBytesUL = all_cells_json[p3].get(); + // cout << std::string(" PDCP Bytes UL ") << nextPdcpBytesUL << endl; + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = nextPdcpBytesDL; + + int bytes_ul = nextPdcpBytesUL; + + // int bytes_dl = 3905; + // int bytes_ul = 1609321; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + //fprintf(stderr, "er encded is %d\n", er2.encoded); + //fprintf(stderr, "after encoding message\n"); + + E2SM_KPM_IndicationHeader_t *ihead = + (E2SM_KPM_IndicationHeader_t*)calloc(1,sizeof(E2SM_KPM_IndicationHeader_t)); + + + E2SM_KPM_IndicationHeader_Format1_t* ind_header = + (E2SM_KPM_IndicationHeader_Format1_t*)calloc(1,sizeof(E2SM_KPM_IndicationHeader_Format1_t)); + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + long fqival = 9; + long qcival = 9; + + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,sst_buf,sst->size); + + + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, sd_buf, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + ind_header->pLMN_Identity = plmnid; + ind_header->fiveQI = &fqival; + + BIT_STRING_t *nrcellid = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + nrcellid->buf = (uint8_t*)calloc(1,5); + nrcellid->size = 5; + nrcellid->buf[0] = 0x22; + nrcellid->buf[1] = 0x5B; + nrcellid->buf[2] = 0xD6; + nrcellid->buf[3] = 0x00; + nrcellid->buf[4] = 0x70; + + nrcellid->bits_unused = 4; + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + INTEGER_t *cuup_id = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0] = 20000; + cuup_id->buf = (uint8_t*)calloc(1,1); + memcpy(cuup_id->buf, buffer, 1); + cuup_id->size = 1; + + ind_header->id_GlobalKPMnode_ID = (GlobalKPMnode_ID*)calloc(1,sizeof(GlobalKPMnode_ID)); + ind_header->id_GlobalKPMnode_ID->present = GlobalKPMnode_ID_PR_gNB; + ind_header->id_GlobalKPMnode_ID->choice.gNB.global_gNB_ID.gnb_id.present = GNB_ID_Choice_PR_gnb_ID; + ind_header->id_GlobalKPMnode_ID->choice.gNB.global_gNB_ID.gnb_id.choice.gnb_ID = *gnb_bstring; + ind_header->id_GlobalKPMnode_ID->choice.gNB.global_gNB_ID.plmn_id = *plmnid; + ind_header->id_GlobalKPMnode_ID->choice.gNB.gNB_CU_UP_ID = cuup_id; + + ind_header->nRCGI = (NRCGI*)calloc(1,sizeof(NRCGI)); + ind_header->nRCGI->pLMN_Identity = *plmnid; + ind_header->nRCGI->nRCellIdentity = *nrcellid; + + ind_header->sliceID = snssai; + ind_header->qci = &qcival; + // ind_header->message_Type = ; + // ind_header->gNB_DU_ID = ; + + + uint8_t *buf5 = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *cuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + cuupname->size = 8; + cuupname->buf = (uint8_t*)calloc(1,8); + memcpy(cuupname->buf, buf5, cuupname->size); + + + ind_header->gNB_Name = (GNB_Name*)calloc(1,sizeof(GNB_Name)); + ind_header->gNB_Name->present = GNB_Name_PR_gNB_CU_UP_Name; + ind_header->gNB_Name->choice.gNB_CU_UP_Name = *cuupname; + + + ind_header->global_GNB_ID = (GlobalgNB_ID*)calloc(1,sizeof(GlobalgNB_ID)); + ind_header->global_GNB_ID->plmn_id = *plmnid; + ind_header->global_GNB_ID->gnb_id.present = GNB_ID_Choice_PR_gnb_ID; + ind_header->global_GNB_ID->gnb_id.choice.gnb_ID = *gnb_bstring; + + + ihead->present = E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1; + ihead->choice.indicationHeader_Format1 = *ind_header; + + //printf("IndicationHeader - now printing xer\n"); + //xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationHeader, ihead); + //printf("IndicationHeader - done printing xer\n"); + + uint8_t e2sm_header_buffer[8192]; + size_t e2sm_header_buffer_size = 8192; + + asn_enc_rval_t er4 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationHeader, + ihead, e2sm_header_buffer, e2sm_header_buffer_size); + + uint8_t *e2smheader_buf2 = (uint8_t*)""; + + int seqNum0 = 1; + + if (i == 0) { + + sleep(10); //added sleep before sending indication because bouncer xapp need to some time to receive subscription response properly + + for(int ind=0; ind(); + // cout << std::string(" PRB Bytes DL ") << all_cells_json[p4] << endl; + + json::json_pointer p5(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/prbMeasReport/availPrbUl"); + nextPRBBytesUL = all_cells_json[p5].get(); + // cout << std::string(" PRB Bytes UL ") << all_cells_json[p5] << endl; + + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = nextPRBBytesDL; + long ul_prbs = nextPRBBytesUL; + + /* + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)""; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 0, e2smbuffer, er.encoded); + + e2sim.encode_and_send_sctp_data(pdu); + */ + seqNum++; + + } + + + + /* + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = 100; + long ul_prbs = 50; + + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)"header"; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 6, e2smbuffer, er.encoded); + + encode_and_send_sctp_data(pdu, socket_fd); + + seqNum++; + + //REPORT Message 2 -- Encode and send OCUUP cell-level report + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = 40000; + int bytes_ul = 50000; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf2 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu2, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf2, 6, e2smbuffer2, er2.encoded); + + encode_and_send_sctp_data(pdu2, socket_fd); + + seqNum++; + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)"12"; + // uint8_t *serving_buf = (uint8_t*)"RSRP10"; + //uint8_t *neighbor_buf = (uint8_t*)"-10,-15"; + int rsrpServ = 10; + int rsrqServ = 0; + int rssinrServ = 0; + + std::string serving_str = "{\"rsrp\": " + std::to_string(rsrpServ) + ", \"rsrq\": " + + std::to_string(rsrqServ) + ", \"rssinr\": " + std::to_string(rssinrServ) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + + neighbor_cell_entry n_entries[3]; + n_entries[0] = {"123", 10, 0, 0}; + n_entries[1] = {"456", 10, 0, 0}; + n_entries[2] = {"789", 10, 0, 0}; + + std::string neighbor_str = "["; + + for (int i=0; i < sizeof(n_entries)/sizeof(n_entries[0]); i++) { + + if (i != 0) { + neighbor_str += ","; + } + neighbor_str += "{\"CID\" : \"" + std::string(n_entries[i].cellid) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(n_entries[i].rsrp) + + ", \"rsrq\": " + std::to_string(n_entries[i].rsrq) + ", \"rssinr\": " + std::to_string(n_entries[i].rsrp) + "}}"; + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + printf("Neighbor string\n%s", neighbor_buf); + + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 6, e2smbuffer3, er3.encoded); + + encode_and_send_sctp_data(pdu3, socket_fd); + + seqNum++; + + //Encode and send OCUUP user-level report + + + + //Encode and send ODU user-level report + + + + + } + + simfile.close(); + + } + */ + +} + + +void callback_kpm_subscription_request(E2AP_PDU_t *sub_req_pdu) { + + fprintf(stderr, "Calling callback_kpm_subscription_request\n"); + + //Record RIC Request ID + //Go through RIC action to be Setup List + //Find first entry with REPORT action Type + //Record ricActionID + //Encode subscription response + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long reqRequestorId; + long reqInstanceId; + long reqActionId; + + std::vector actionIdsAccept; + std::vector actionIdsReject; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "The next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + fprintf(stderr,"in case request id\n"); + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + reqRequestorId = requestorId; + reqInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + { + fprintf(stderr,"in case ran func id\n"); + break; + } + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + fprintf(stderr,"in case subscription details\n"); + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + fprintf(stderr,"in case subscription details 1\n"); + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + fprintf(stderr,"in case subscription details 2\n"); + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + fprintf(stderr,"in case subscription details 3\n"); + //We are ignoring the trigger definition + + //We identify the first action whose type is REPORT + //That is the only one accepted; all others are rejected + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + bool foundAction = false; + + for (int i=0; i < actionCount; i++) { + + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + RICactionType_t actionType = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionType; + + if (!foundAction && actionType == RICactionType_report) { + reqActionId = actionId; + actionIdsAccept.push_back(reqActionId); + printf("adding accept\n"); + foundAction = true; + } else { + reqActionId = actionId; + printf("adding reject\n"); + actionIdsReject.push_back(reqActionId); + } + } + + break; + } + default: + { + fprintf(stderr,"in case default\n"); + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", reqRequestorId); + fprintf(stderr, "instanceId %d\n", reqInstanceId); + + + for (int i=0; i < actionIdsAccept.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIdsAccept.at(i)); + + } + + E2AP_PDU *e2ap_pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long *accept_array = &actionIdsAccept[0]; + long *reject_array = &actionIdsReject[0]; + int accept_size = actionIdsAccept.size(); + int reject_size = actionIdsReject.size(); + + encoding::generate_e2apv1_subscription_response_success(e2ap_pdu, accept_array, reject_array, accept_size, reject_size, reqRequestorId, reqInstanceId); + + e2sim.encode_and_send_sctp_data(e2ap_pdu); + + //Start thread for sending REPORT messages + + // std::thread loop_thread; + + long funcId = 1; + + run_report_loop(reqRequestorId, reqInstanceId, funcId, reqActionId); + + // loop_thread = std::thread(&run_report_loop); + +} diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp new file mode 100644 index 0000000..13b12d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/src/kpm/kpm_callbacks.hpp @@ -0,0 +1,24 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + + +#include "e2sim.hpp" + +void callback_kpm_subscription_request(E2AP_PDU_t *pdu); + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId); diff --git a/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt new file mode 100644 index 0000000..32bf4d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/e2sm_examples/kpm_e2sm/ueMeasReport.txt @@ -0,0 +1,65 @@ +{ + "ueMeasReport": { + "du-id": 1000, + "ueMeasReportList": [ + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 0, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 1, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + }, + + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 1, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 0, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.c new file mode 100644 index 0000000..b41a7ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ABS-Status.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ABS_Status_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABS_Status, dL_ABS_status), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_ABS_status, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-ABS-status" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABS_Status, usableABSInformation), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_UsableABSInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "usableABSInformation" + }, + { ATF_POINTER, 1, offsetof(struct ABS_Status, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P106, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ABS_Status_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ABS_Status_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABS_Status_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-ABS-status */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* usableABSInformation */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABS_Status_specs_1 = { + sizeof(struct ABS_Status), + offsetof(struct ABS_Status, _asn_ctx), + asn_MAP_ABS_Status_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ABS_Status_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABS_Status = { + "ABS-Status", + "ABS-Status", + &asn_OP_SEQUENCE, + asn_DEF_ABS_Status_tags_1, + sizeof(asn_DEF_ABS_Status_tags_1) + /sizeof(asn_DEF_ABS_Status_tags_1[0]), /* 1 */ + asn_DEF_ABS_Status_tags_1, /* Same as above */ + sizeof(asn_DEF_ABS_Status_tags_1) + /sizeof(asn_DEF_ABS_Status_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABS_Status_1, + 3, /* Elements count */ + &asn_SPC_ABS_Status_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.h new file mode 100644 index 0000000..55132eb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABS-Status.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ABS_Status_H_ +#define _ABS_Status_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "DL-ABS-status.h" +#include "UsableABSInformation.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ABS-Status */ +typedef struct ABS_Status { + DL_ABS_status_t dL_ABS_status; + UsableABSInformation_t usableABSInformation; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABS_Status_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ABS_Status; +extern asn_SEQUENCE_specifics_t asn_SPC_ABS_Status_specs_1; +extern asn_TYPE_member_t asn_MBR_ABS_Status_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ABS_Status_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.c new file mode 100644 index 0000000..fff56a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ABSInformation.h" + +#include "ABSInformationFDD.h" +#include "ABSInformationTDD.h" +asn_per_constraints_t asn_PER_type_ABSInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ABSInformation_1[] = { + { ATF_POINTER, 0, offsetof(struct ABSInformation, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ABSInformationFDD, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fdd" + }, + { ATF_POINTER, 0, offsetof(struct ABSInformation, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ABSInformationTDD, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tdd" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformation, choice.abs_inactive), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "abs-inactive" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ABSInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tdd */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* abs-inactive */ +}; +asn_CHOICE_specifics_t asn_SPC_ABSInformation_specs_1 = { + sizeof(struct ABSInformation), + offsetof(struct ABSInformation, _asn_ctx), + offsetof(struct ABSInformation, present), + sizeof(((struct ABSInformation *)0)->present), + asn_MAP_ABSInformation_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ABSInformation = { + "ABSInformation", + "ABSInformation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ABSInformation_constr_1, CHOICE_constraint }, + asn_MBR_ABSInformation_1, + 3, /* Elements count */ + &asn_SPC_ABSInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.h new file mode 100644 index 0000000..9861413 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformation.h @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ABSInformation_H_ +#define _ABSInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ABSInformation_PR { + ABSInformation_PR_NOTHING, /* No components present */ + ABSInformation_PR_fdd, + ABSInformation_PR_tdd, + ABSInformation_PR_abs_inactive + /* Extensions may appear below */ + +} ABSInformation_PR; + +/* Forward declarations */ +struct ABSInformationFDD; +struct ABSInformationTDD; + +/* ABSInformation */ +typedef struct ABSInformation { + ABSInformation_PR present; + union ABSInformation_u { + struct ABSInformationFDD *fdd; + struct ABSInformationTDD *tdd; + NULL_t abs_inactive; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABSInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ABSInformation; +extern asn_CHOICE_specifics_t asn_SPC_ABSInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_ABSInformation_1[3]; +extern asn_per_constraints_t asn_PER_type_ABSInformation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ABSInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.c new file mode 100644 index 0000000..c00fe77 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.c @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ABSInformationFDD.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static int +memb_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_measurement_subset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_numberOfCellSpecificAntennaPorts_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_abs_pattern_info_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_measurement_subset_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_3[] = { + { 0, 3, "one" }, + { 1, 3, "two" }, + { 2, 4, "four" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_3[] = { + 2, /* four(2) */ + 0, /* one(0) */ + 1 /* two(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_numberOfCellSpecificAntennaPorts_specs_3 = { + asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_3, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_3 = { + "numberOfCellSpecificAntennaPorts", + "numberOfCellSpecificAntennaPorts", + &asn_OP_NativeEnumerated, + asn_DEF_numberOfCellSpecificAntennaPorts_tags_3, + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[0]) - 1, /* 1 */ + asn_DEF_numberOfCellSpecificAntennaPorts_tags_3, /* Same as above */ + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_numberOfCellSpecificAntennaPorts_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_numberOfCellSpecificAntennaPorts_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ABSInformationFDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD, abs_pattern_info), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_abs_pattern_info_constr_2, memb_abs_pattern_info_constraint_1 }, + 0, 0, /* No default value */ + "abs-pattern-info" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD, numberOfCellSpecificAntennaPorts), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_numberOfCellSpecificAntennaPorts_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "numberOfCellSpecificAntennaPorts" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD, measurement_subset), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_measurement_subset_constr_8, memb_measurement_subset_constraint_1 }, + 0, 0, /* No default value */ + "measurement-subset" + }, + { ATF_POINTER, 1, offsetof(struct ABSInformationFDD, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P104, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ABSInformationFDD_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_ABSInformationFDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABSInformationFDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* abs-pattern-info */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* numberOfCellSpecificAntennaPorts */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurement-subset */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABSInformationFDD_specs_1 = { + sizeof(struct ABSInformationFDD), + offsetof(struct ABSInformationFDD, _asn_ctx), + asn_MAP_ABSInformationFDD_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ABSInformationFDD_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABSInformationFDD = { + "ABSInformationFDD", + "ABSInformationFDD", + &asn_OP_SEQUENCE, + asn_DEF_ABSInformationFDD_tags_1, + sizeof(asn_DEF_ABSInformationFDD_tags_1) + /sizeof(asn_DEF_ABSInformationFDD_tags_1[0]), /* 1 */ + asn_DEF_ABSInformationFDD_tags_1, /* Same as above */ + sizeof(asn_DEF_ABSInformationFDD_tags_1) + /sizeof(asn_DEF_ABSInformationFDD_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABSInformationFDD_1, + 4, /* Elements count */ + &asn_SPC_ABSInformationFDD_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.h new file mode 100644 index 0000000..496d68b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationFDD.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ABSInformationFDD_H_ +#define _ABSInformationFDD_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ABSInformationFDD__numberOfCellSpecificAntennaPorts { + ABSInformationFDD__numberOfCellSpecificAntennaPorts_one = 0, + ABSInformationFDD__numberOfCellSpecificAntennaPorts_two = 1, + ABSInformationFDD__numberOfCellSpecificAntennaPorts_four = 2 + /* + * Enumeration is extensible + */ +} e_ABSInformationFDD__numberOfCellSpecificAntennaPorts; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ABSInformationFDD */ +typedef struct ABSInformationFDD { + BIT_STRING_t abs_pattern_info; + long numberOfCellSpecificAntennaPorts; + BIT_STRING_t measurement_subset; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABSInformationFDD_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ABSInformationFDD; +extern asn_SEQUENCE_specifics_t asn_SPC_ABSInformationFDD_specs_1; +extern asn_TYPE_member_t asn_MBR_ABSInformationFDD_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ABSInformationFDD_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.c new file mode 100644 index 0000000..318d488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.c @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ABSInformationTDD.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static int +memb_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 70)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_measurement_subset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 70)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_numberOfCellSpecificAntennaPorts_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_abs_pattern_info_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 1, 70 } /* (SIZE(1..70,...)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_measurement_subset_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 1, 70 } /* (SIZE(1..70,...)) */, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_3[] = { + { 0, 3, "one" }, + { 1, 3, "two" }, + { 2, 4, "four" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_3[] = { + 2, /* four(2) */ + 0, /* one(0) */ + 1 /* two(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_numberOfCellSpecificAntennaPorts_specs_3 = { + asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_3, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_3 = { + "numberOfCellSpecificAntennaPorts", + "numberOfCellSpecificAntennaPorts", + &asn_OP_NativeEnumerated, + asn_DEF_numberOfCellSpecificAntennaPorts_tags_3, + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[0]) - 1, /* 1 */ + asn_DEF_numberOfCellSpecificAntennaPorts_tags_3, /* Same as above */ + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_numberOfCellSpecificAntennaPorts_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_numberOfCellSpecificAntennaPorts_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ABSInformationTDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD, abs_pattern_info), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_abs_pattern_info_constr_2, memb_abs_pattern_info_constraint_1 }, + 0, 0, /* No default value */ + "abs-pattern-info" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD, numberOfCellSpecificAntennaPorts), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_numberOfCellSpecificAntennaPorts_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "numberOfCellSpecificAntennaPorts" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD, measurement_subset), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_measurement_subset_constr_8, memb_measurement_subset_constraint_1 }, + 0, 0, /* No default value */ + "measurement-subset" + }, + { ATF_POINTER, 1, offsetof(struct ABSInformationTDD, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P105, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ABSInformationTDD_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_ABSInformationTDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABSInformationTDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* abs-pattern-info */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* numberOfCellSpecificAntennaPorts */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurement-subset */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABSInformationTDD_specs_1 = { + sizeof(struct ABSInformationTDD), + offsetof(struct ABSInformationTDD, _asn_ctx), + asn_MAP_ABSInformationTDD_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ABSInformationTDD_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABSInformationTDD = { + "ABSInformationTDD", + "ABSInformationTDD", + &asn_OP_SEQUENCE, + asn_DEF_ABSInformationTDD_tags_1, + sizeof(asn_DEF_ABSInformationTDD_tags_1) + /sizeof(asn_DEF_ABSInformationTDD_tags_1[0]), /* 1 */ + asn_DEF_ABSInformationTDD_tags_1, /* Same as above */ + sizeof(asn_DEF_ABSInformationTDD_tags_1) + /sizeof(asn_DEF_ABSInformationTDD_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABSInformationTDD_1, + 4, /* Elements count */ + &asn_SPC_ABSInformationTDD_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.h new file mode 100644 index 0000000..210966c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ABSInformationTDD.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ABSInformationTDD_H_ +#define _ABSInformationTDD_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ABSInformationTDD__numberOfCellSpecificAntennaPorts { + ABSInformationTDD__numberOfCellSpecificAntennaPorts_one = 0, + ABSInformationTDD__numberOfCellSpecificAntennaPorts_two = 1, + ABSInformationTDD__numberOfCellSpecificAntennaPorts_four = 2 + /* + * Enumeration is extensible + */ +} e_ABSInformationTDD__numberOfCellSpecificAntennaPorts; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ABSInformationTDD */ +typedef struct ABSInformationTDD { + BIT_STRING_t abs_pattern_info; + long numberOfCellSpecificAntennaPorts; + BIT_STRING_t measurement_subset; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABSInformationTDD_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ABSInformationTDD; +extern asn_SEQUENCE_specifics_t asn_SPC_ABSInformationTDD_specs_1; +extern asn_TYPE_member_t asn_MBR_ABSInformationTDD_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ABSInformationTDD_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.c new file mode 100644 index 0000000..5044d8e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.c @@ -0,0 +1,468 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.h new file mode 100644 index 0000000..fbdfec6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ANY.h @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.c new file mode 100644 index 0000000..94e7d53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AS-SecurityInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_AS_SecurityInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AS_SecurityInformation, key_eNodeB_star), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Key_eNodeB_Star, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "key-eNodeB-star" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_SecurityInformation, nextHopChainingCount), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NextHopChainingCount, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nextHopChainingCount" + }, + { ATF_POINTER, 1, offsetof(struct AS_SecurityInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P110, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_AS_SecurityInformation_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_AS_SecurityInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AS_SecurityInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* key-eNodeB-star */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nextHopChainingCount */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AS_SecurityInformation_specs_1 = { + sizeof(struct AS_SecurityInformation), + offsetof(struct AS_SecurityInformation, _asn_ctx), + asn_MAP_AS_SecurityInformation_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_AS_SecurityInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AS_SecurityInformation = { + "AS-SecurityInformation", + "AS-SecurityInformation", + &asn_OP_SEQUENCE, + asn_DEF_AS_SecurityInformation_tags_1, + sizeof(asn_DEF_AS_SecurityInformation_tags_1) + /sizeof(asn_DEF_AS_SecurityInformation_tags_1[0]), /* 1 */ + asn_DEF_AS_SecurityInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_AS_SecurityInformation_tags_1) + /sizeof(asn_DEF_AS_SecurityInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AS_SecurityInformation_1, + 3, /* Elements count */ + &asn_SPC_AS_SecurityInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.h new file mode 100644 index 0000000..baade7a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AS-SecurityInformation.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AS_SecurityInformation_H_ +#define _AS_SecurityInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Key-eNodeB-Star.h" +#include "NextHopChainingCount.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* AS-SecurityInformation */ +typedef struct AS_SecurityInformation { + Key_eNodeB_Star_t key_eNodeB_star; + NextHopChainingCount_t nextHopChainingCount; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AS_SecurityInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AS_SecurityInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_AS_SecurityInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_AS_SecurityInformation_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _AS_SecurityInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.c new file mode 100644 index 0000000..24ed3f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActionParameter-ID.h" + +int +ActionParameter_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ActionParameter_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ActionParameter_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ActionParameter_ID = { + "ActionParameter-ID", + "ActionParameter-ID", + &asn_OP_NativeInteger, + asn_DEF_ActionParameter_ID_tags_1, + sizeof(asn_DEF_ActionParameter_ID_tags_1) + /sizeof(asn_DEF_ActionParameter_ID_tags_1[0]), /* 1 */ + asn_DEF_ActionParameter_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ActionParameter_ID_tags_1) + /sizeof(asn_DEF_ActionParameter_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ActionParameter_ID_constr_1, ActionParameter_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.h new file mode 100644 index 0000000..23a8038 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActionParameter_ID_H_ +#define _ActionParameter_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ActionParameter-ID */ +typedef long ActionParameter_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ActionParameter_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ActionParameter_ID; +asn_struct_free_f ActionParameter_ID_free; +asn_struct_print_f ActionParameter_ID_print; +asn_constr_check_f ActionParameter_ID_constraint; +ber_type_decoder_f ActionParameter_ID_decode_ber; +der_type_encoder_f ActionParameter_ID_encode_der; +xer_type_decoder_f ActionParameter_ID_decode_xer; +xer_type_encoder_f ActionParameter_ID_encode_xer; +per_type_decoder_f ActionParameter_ID_decode_uper; +per_type_encoder_f ActionParameter_ID_encode_uper; +per_type_decoder_f ActionParameter_ID_decode_aper; +per_type_encoder_f ActionParameter_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActionParameter_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.c new file mode 100644 index 0000000..d432c10 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActionParameter-Item.h" + +asn_TYPE_member_t asn_MBR_ActionParameter_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Item, actionParameter_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ActionParameter_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionParameter-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Item, actionParameter_Value), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ActionParameter_Value, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionParameter-Value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ActionParameter_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ActionParameter_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* actionParameter-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionParameter-Value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ActionParameter_Item_specs_1 = { + sizeof(struct ActionParameter_Item), + offsetof(struct ActionParameter_Item, _asn_ctx), + asn_MAP_ActionParameter_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ActionParameter_Item = { + "ActionParameter-Item", + "ActionParameter-Item", + &asn_OP_SEQUENCE, + asn_DEF_ActionParameter_Item_tags_1, + sizeof(asn_DEF_ActionParameter_Item_tags_1) + /sizeof(asn_DEF_ActionParameter_Item_tags_1[0]), /* 1 */ + asn_DEF_ActionParameter_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ActionParameter_Item_tags_1) + /sizeof(asn_DEF_ActionParameter_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ActionParameter_Item_1, + 2, /* Elements count */ + &asn_SPC_ActionParameter_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.h new file mode 100644 index 0000000..a257ac5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Item.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActionParameter_Item_H_ +#define _ActionParameter_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ActionParameter-ID.h" +#include "ActionParameter-Value.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ActionParameter-Item */ +typedef struct ActionParameter_Item { + ActionParameter_ID_t actionParameter_ID; + ActionParameter_Value_t actionParameter_Value; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActionParameter_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActionParameter_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ActionParameter_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ActionParameter_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActionParameter_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.c new file mode 100644 index 0000000..2c98fdb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.c @@ -0,0 +1,120 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActionParameter-Value.h" + +asn_per_constraints_t asn_PER_type_ActionParameter_Value_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ActionParameter_Value_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valueInt), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueInt" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valueEnum), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueEnum" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valueBool), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBool" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valueBitS), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBitS" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valueOctS), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueOctS" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActionParameter_Value, choice.valuePrtS), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valuePrtS" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ActionParameter_Value_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueEnum */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueBool */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* valueOctS */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* valuePrtS */ +}; +asn_CHOICE_specifics_t asn_SPC_ActionParameter_Value_specs_1 = { + sizeof(struct ActionParameter_Value), + offsetof(struct ActionParameter_Value, _asn_ctx), + offsetof(struct ActionParameter_Value, present), + sizeof(((struct ActionParameter_Value *)0)->present), + asn_MAP_ActionParameter_Value_tag2el_1, + 6, /* Count of tags in the map */ + 0, 0, + 6 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ActionParameter_Value = { + "ActionParameter-Value", + "ActionParameter-Value", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ActionParameter_Value_constr_1, CHOICE_constraint }, + asn_MBR_ActionParameter_Value_1, + 6, /* Elements count */ + &asn_SPC_ActionParameter_Value_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.h new file mode 100644 index 0000000..edf2d73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActionParameter-Value.h @@ -0,0 +1,88 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActionParameter_Value_H_ +#define _ActionParameter_Value_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "BOOLEAN.h" +#include "BIT_STRING.h" +#include "OCTET_STRING.h" +#include "PrintableString.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ActionParameter_Value_PR { + ActionParameter_Value_PR_NOTHING, /* No components present */ + ActionParameter_Value_PR_valueInt, + ActionParameter_Value_PR_valueEnum, + ActionParameter_Value_PR_valueBool, + ActionParameter_Value_PR_valueBitS, + ActionParameter_Value_PR_valueOctS, + ActionParameter_Value_PR_valuePrtS + /* Extensions may appear below */ + +} ActionParameter_Value_PR; + +/* ActionParameter-Value */ +typedef struct ActionParameter_Value { + ActionParameter_Value_PR present; + union ActionParameter_Value_u { + long valueInt; + long valueEnum; + BOOLEAN_t valueBool; + BIT_STRING_t valueBitS; + OCTET_STRING_t valueOctS; + PrintableString_t valuePrtS; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActionParameter_Value_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActionParameter_Value; +extern asn_CHOICE_specifics_t asn_SPC_ActionParameter_Value_specs_1; +extern asn_TYPE_member_t asn_MBR_ActionParameter_Value_1[6]; +extern asn_per_constraints_t asn_PER_type_ActionParameter_Value_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActionParameter_Value_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.c new file mode 100644 index 0000000..de8e467 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActivatedCellList-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ActivatedCellList_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActivatedCellList_Item, ecgi), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ecgi" + }, + { ATF_POINTER, 1, offsetof(struct ActivatedCellList_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ActivatedCellList_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ActivatedCellList_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ActivatedCellList_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ecgi */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ActivatedCellList_Item_specs_1 = { + sizeof(struct ActivatedCellList_Item), + offsetof(struct ActivatedCellList_Item, _asn_ctx), + asn_MAP_ActivatedCellList_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ActivatedCellList_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedCellList_Item = { + "ActivatedCellList-Item", + "ActivatedCellList-Item", + &asn_OP_SEQUENCE, + asn_DEF_ActivatedCellList_Item_tags_1, + sizeof(asn_DEF_ActivatedCellList_Item_tags_1) + /sizeof(asn_DEF_ActivatedCellList_Item_tags_1[0]), /* 1 */ + asn_DEF_ActivatedCellList_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ActivatedCellList_Item_tags_1) + /sizeof(asn_DEF_ActivatedCellList_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ActivatedCellList_Item_1, + 2, /* Elements count */ + &asn_SPC_ActivatedCellList_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.h new file mode 100644 index 0000000..b70b468 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActivatedCellList_Item_H_ +#define _ActivatedCellList_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ActivatedCellList-Item */ +typedef struct ActivatedCellList_Item { + ECGI_t ecgi; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedCellList_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActivatedCellList_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ActivatedCellList_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ActivatedCellList_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActivatedCellList_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.c new file mode 100644 index 0000000..a12132b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActivatedCellList.h" + +#include "ActivatedCellList-Item.h" +static asn_per_constraints_t asn_PER_type_ActivatedCellList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ActivatedCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedCellList_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ActivatedCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ActivatedCellList_specs_1 = { + sizeof(struct ActivatedCellList), + offsetof(struct ActivatedCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedCellList = { + "ActivatedCellList", + "ActivatedCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ActivatedCellList_tags_1, + sizeof(asn_DEF_ActivatedCellList_tags_1) + /sizeof(asn_DEF_ActivatedCellList_tags_1[0]), /* 1 */ + asn_DEF_ActivatedCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_ActivatedCellList_tags_1) + /sizeof(asn_DEF_ActivatedCellList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ActivatedCellList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ActivatedCellList_1, + 1, /* Single element */ + &asn_SPC_ActivatedCellList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.h new file mode 100644 index 0000000..e145ddd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedCellList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActivatedCellList_H_ +#define _ActivatedCellList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ActivatedCellList_Item; + +/* ActivatedCellList */ +typedef struct ActivatedCellList { + A_SEQUENCE_OF(struct ActivatedCellList_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActivatedCellList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActivatedCellList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.c new file mode 100644 index 0000000..df3b99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActivatedNRCellList-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ActivatedNRCellList_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActivatedNRCellList_Item, nrCellID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrCellID" + }, + { ATF_POINTER, 1, offsetof(struct ActivatedNRCellList_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P102, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ActivatedNRCellList_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ActivatedNRCellList_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ActivatedNRCellList_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ActivatedNRCellList_Item_specs_1 = { + sizeof(struct ActivatedNRCellList_Item), + offsetof(struct ActivatedNRCellList_Item, _asn_ctx), + asn_MAP_ActivatedNRCellList_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ActivatedNRCellList_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList_Item = { + "ActivatedNRCellList-Item", + "ActivatedNRCellList-Item", + &asn_OP_SEQUENCE, + asn_DEF_ActivatedNRCellList_Item_tags_1, + sizeof(asn_DEF_ActivatedNRCellList_Item_tags_1) + /sizeof(asn_DEF_ActivatedNRCellList_Item_tags_1[0]), /* 1 */ + asn_DEF_ActivatedNRCellList_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ActivatedNRCellList_Item_tags_1) + /sizeof(asn_DEF_ActivatedNRCellList_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ActivatedNRCellList_Item_1, + 2, /* Elements count */ + &asn_SPC_ActivatedNRCellList_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.h new file mode 100644 index 0000000..31437d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActivatedNRCellList_Item_H_ +#define _ActivatedNRCellList_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRCGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ActivatedNRCellList-Item */ +typedef struct ActivatedNRCellList_Item { + NRCGI_t nrCellID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedNRCellList_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ActivatedNRCellList_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ActivatedNRCellList_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActivatedNRCellList_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.c new file mode 100644 index 0000000..531a4d9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActivatedNRCellList.h" + +#include "ActivatedNRCellList-Item.h" +static asn_per_constraints_t asn_PER_type_ActivatedNRCellList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ActivatedNRCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedNRCellList_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ActivatedNRCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ActivatedNRCellList_specs_1 = { + sizeof(struct ActivatedNRCellList), + offsetof(struct ActivatedNRCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList = { + "ActivatedNRCellList", + "ActivatedNRCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ActivatedNRCellList_tags_1, + sizeof(asn_DEF_ActivatedNRCellList_tags_1) + /sizeof(asn_DEF_ActivatedNRCellList_tags_1[0]), /* 1 */ + asn_DEF_ActivatedNRCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_ActivatedNRCellList_tags_1) + /sizeof(asn_DEF_ActivatedNRCellList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ActivatedNRCellList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ActivatedNRCellList_1, + 1, /* Single element */ + &asn_SPC_ActivatedNRCellList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.h new file mode 100644 index 0000000..3f47cd1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivatedNRCellList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActivatedNRCellList_H_ +#define _ActivatedNRCellList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ActivatedNRCellList_Item; + +/* ActivatedNRCellList */ +typedef struct ActivatedNRCellList { + A_SEQUENCE_OF(struct ActivatedNRCellList_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedNRCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActivatedNRCellList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.c new file mode 100644 index 0000000..7ddf4c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ActivationID.h" + +int +ActivationID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ActivationID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ActivationID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ActivationID = { + "ActivationID", + "ActivationID", + &asn_OP_NativeInteger, + asn_DEF_ActivationID_tags_1, + sizeof(asn_DEF_ActivationID_tags_1) + /sizeof(asn_DEF_ActivationID_tags_1[0]), /* 1 */ + asn_DEF_ActivationID_tags_1, /* Same as above */ + sizeof(asn_DEF_ActivationID_tags_1) + /sizeof(asn_DEF_ActivationID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ActivationID_constr_1, ActivationID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.h new file mode 100644 index 0000000..7c82220 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ActivationID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ActivationID_H_ +#define _ActivationID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ActivationID */ +typedef long ActivationID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ActivationID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ActivationID; +asn_struct_free_f ActivationID_free; +asn_struct_print_f ActivationID_print; +asn_constr_check_f ActivationID_constraint; +ber_type_decoder_f ActivationID_decode_ber; +der_type_encoder_f ActivationID_encode_der; +xer_type_decoder_f ActivationID_decode_xer; +xer_type_encoder_f ActivationID_encode_xer; +per_type_decoder_f ActivationID_decode_uper; +per_type_encoder_f ActivationID_encode_uper; +per_type_decoder_f ActivationID_decode_aper; +per_type_encoder_f ActivationID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ActivationID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c new file mode 100644 index 0000000..265ae45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AdditionalSpecialSubframe-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframe_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info, additionalspecialSubframePatterns), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSpecialSubframePatterns, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "additionalspecialSubframePatterns" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info, cyclicPrefixDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixDL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info, cyclicPrefixUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixUL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixUL" + }, + { ATF_POINTER, 1, offsetof(struct AdditionalSpecialSubframe_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P107, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_AdditionalSpecialSubframe_Info_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframe_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AdditionalSpecialSubframe_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* additionalspecialSubframePatterns */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframe_Info_specs_1 = { + sizeof(struct AdditionalSpecialSubframe_Info), + offsetof(struct AdditionalSpecialSubframe_Info, _asn_ctx), + asn_MAP_AdditionalSpecialSubframe_Info_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_AdditionalSpecialSubframe_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframe_Info = { + "AdditionalSpecialSubframe-Info", + "AdditionalSpecialSubframe-Info", + &asn_OP_SEQUENCE, + asn_DEF_AdditionalSpecialSubframe_Info_tags_1, + sizeof(asn_DEF_AdditionalSpecialSubframe_Info_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframe_Info_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframe_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframe_Info_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframe_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AdditionalSpecialSubframe_Info_1, + 4, /* Elements count */ + &asn_SPC_AdditionalSpecialSubframe_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h new file mode 100644 index 0000000..0145105 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframe-Info.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AdditionalSpecialSubframe_Info_H_ +#define _AdditionalSpecialSubframe_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "AdditionalSpecialSubframePatterns.h" +#include "CyclicPrefixDL.h" +#include "CyclicPrefixUL.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* AdditionalSpecialSubframe-Info */ +typedef struct AdditionalSpecialSubframe_Info { + AdditionalSpecialSubframePatterns_t additionalspecialSubframePatterns; + CyclicPrefixDL_t cyclicPrefixDL; + CyclicPrefixUL_t cyclicPrefixUL; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalSpecialSubframe_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframe_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframe_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframe_Info_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSpecialSubframe_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c new file mode 100644 index 0000000..2c88de2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AdditionalSpecialSubframeExtension-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframeExtension_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info, additionalspecialSubframePatternsExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSpecialSubframePatternsExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "additionalspecialSubframePatternsExtension" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info, cyclicPrefixDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixDL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info, cyclicPrefixUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixUL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixUL" + }, + { ATF_POINTER, 1, offsetof(struct AdditionalSpecialSubframeExtension_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P108, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_AdditionalSpecialSubframeExtension_Info_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AdditionalSpecialSubframeExtension_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* additionalspecialSubframePatternsExtension */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframeExtension_Info_specs_1 = { + sizeof(struct AdditionalSpecialSubframeExtension_Info), + offsetof(struct AdditionalSpecialSubframeExtension_Info, _asn_ctx), + asn_MAP_AdditionalSpecialSubframeExtension_Info_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_AdditionalSpecialSubframeExtension_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframeExtension_Info = { + "AdditionalSpecialSubframeExtension-Info", + "AdditionalSpecialSubframeExtension-Info", + &asn_OP_SEQUENCE, + asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1, + sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AdditionalSpecialSubframeExtension_Info_1, + 4, /* Elements count */ + &asn_SPC_AdditionalSpecialSubframeExtension_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h new file mode 100644 index 0000000..5be0df6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframeExtension-Info.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AdditionalSpecialSubframeExtension_Info_H_ +#define _AdditionalSpecialSubframeExtension_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "AdditionalSpecialSubframePatternsExtension.h" +#include "CyclicPrefixDL.h" +#include "CyclicPrefixUL.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* AdditionalSpecialSubframeExtension-Info */ +typedef struct AdditionalSpecialSubframeExtension_Info { + AdditionalSpecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + CyclicPrefixDL_t cyclicPrefixDL; + CyclicPrefixUL_t cyclicPrefixUL; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalSpecialSubframeExtension_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframeExtension_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframeExtension_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframeExtension_Info_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSpecialSubframeExtension_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c new file mode 100644 index 0000000..76ddb4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.c @@ -0,0 +1,89 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AdditionalSpecialSubframePatterns.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AdditionalSpecialSubframePatterns_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 9 } /* (0..9,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_AdditionalSpecialSubframePatterns_value2enum_1[] = { + { 0, 4, "ssp0" }, + { 1, 4, "ssp1" }, + { 2, 4, "ssp2" }, + { 3, 4, "ssp3" }, + { 4, 4, "ssp4" }, + { 5, 4, "ssp5" }, + { 6, 4, "ssp6" }, + { 7, 4, "ssp7" }, + { 8, 4, "ssp8" }, + { 9, 4, "ssp9" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_AdditionalSpecialSubframePatterns_enum2value_1[] = { + 0, /* ssp0(0) */ + 1, /* ssp1(1) */ + 2, /* ssp2(2) */ + 3, /* ssp3(3) */ + 4, /* ssp4(4) */ + 5, /* ssp5(5) */ + 6, /* ssp6(6) */ + 7, /* ssp7(7) */ + 8, /* ssp8(8) */ + 9 /* ssp9(9) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatterns_specs_1 = { + asn_MAP_AdditionalSpecialSubframePatterns_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_AdditionalSpecialSubframePatterns_enum2value_1, /* N => "tag"; sorted by N */ + 10, /* Number of elements in the maps */ + 11, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframePatterns_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframePatterns = { + "AdditionalSpecialSubframePatterns", + "AdditionalSpecialSubframePatterns", + &asn_OP_NativeEnumerated, + asn_DEF_AdditionalSpecialSubframePatterns_tags_1, + sizeof(asn_DEF_AdditionalSpecialSubframePatterns_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframePatterns_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframePatterns_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframePatterns_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframePatterns_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AdditionalSpecialSubframePatterns_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_AdditionalSpecialSubframePatterns_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h new file mode 100644 index 0000000..62c987a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatterns.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AdditionalSpecialSubframePatterns_H_ +#define _AdditionalSpecialSubframePatterns_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AdditionalSpecialSubframePatterns { + AdditionalSpecialSubframePatterns_ssp0 = 0, + AdditionalSpecialSubframePatterns_ssp1 = 1, + AdditionalSpecialSubframePatterns_ssp2 = 2, + AdditionalSpecialSubframePatterns_ssp3 = 3, + AdditionalSpecialSubframePatterns_ssp4 = 4, + AdditionalSpecialSubframePatterns_ssp5 = 5, + AdditionalSpecialSubframePatterns_ssp6 = 6, + AdditionalSpecialSubframePatterns_ssp7 = 7, + AdditionalSpecialSubframePatterns_ssp8 = 8, + AdditionalSpecialSubframePatterns_ssp9 = 9 + /* + * Enumeration is extensible + */ +} e_AdditionalSpecialSubframePatterns; + +/* AdditionalSpecialSubframePatterns */ +typedef long AdditionalSpecialSubframePatterns_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AdditionalSpecialSubframePatterns_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframePatterns; +extern const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatterns_specs_1; +asn_struct_free_f AdditionalSpecialSubframePatterns_free; +asn_struct_print_f AdditionalSpecialSubframePatterns_print; +asn_constr_check_f AdditionalSpecialSubframePatterns_constraint; +ber_type_decoder_f AdditionalSpecialSubframePatterns_decode_ber; +der_type_encoder_f AdditionalSpecialSubframePatterns_encode_der; +xer_type_decoder_f AdditionalSpecialSubframePatterns_decode_xer; +xer_type_encoder_f AdditionalSpecialSubframePatterns_encode_xer; +per_type_decoder_f AdditionalSpecialSubframePatterns_decode_uper; +per_type_encoder_f AdditionalSpecialSubframePatterns_encode_uper; +per_type_decoder_f AdditionalSpecialSubframePatterns_decode_aper; +per_type_encoder_f AdditionalSpecialSubframePatterns_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSpecialSubframePatterns_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c new file mode 100644 index 0000000..bd809ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AdditionalSpecialSubframePatternsExtension.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AdditionalSpecialSubframePatternsExtension_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_AdditionalSpecialSubframePatternsExtension_value2enum_1[] = { + { 0, 5, "ssp10" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_AdditionalSpecialSubframePatternsExtension_enum2value_1[] = { + 0 /* ssp10(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatternsExtension_specs_1 = { + asn_MAP_AdditionalSpecialSubframePatternsExtension_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_AdditionalSpecialSubframePatternsExtension_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframePatternsExtension = { + "AdditionalSpecialSubframePatternsExtension", + "AdditionalSpecialSubframePatternsExtension", + &asn_OP_NativeEnumerated, + asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1, + sizeof(asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1) + /sizeof(asn_DEF_AdditionalSpecialSubframePatternsExtension_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AdditionalSpecialSubframePatternsExtension_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_AdditionalSpecialSubframePatternsExtension_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h new file mode 100644 index 0000000..70c8a80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AdditionalSpecialSubframePatternsExtension.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AdditionalSpecialSubframePatternsExtension_H_ +#define _AdditionalSpecialSubframePatternsExtension_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AdditionalSpecialSubframePatternsExtension { + AdditionalSpecialSubframePatternsExtension_ssp10 = 0 + /* + * Enumeration is extensible + */ +} e_AdditionalSpecialSubframePatternsExtension; + +/* AdditionalSpecialSubframePatternsExtension */ +typedef long AdditionalSpecialSubframePatternsExtension_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AdditionalSpecialSubframePatternsExtension_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframePatternsExtension; +extern const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatternsExtension_specs_1; +asn_struct_free_f AdditionalSpecialSubframePatternsExtension_free; +asn_struct_print_f AdditionalSpecialSubframePatternsExtension_print; +asn_constr_check_f AdditionalSpecialSubframePatternsExtension_constraint; +ber_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_ber; +der_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_der; +xer_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_xer; +xer_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_xer; +per_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_uper; +per_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_uper; +per_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_aper; +per_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSpecialSubframePatternsExtension_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c new file mode 100644 index 0000000..5e632f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AerialUEsubscriptionInformation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AerialUEsubscriptionInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_AerialUEsubscriptionInformation_value2enum_1[] = { + { 0, 7, "allowed" }, + { 1, 11, "not-allowed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_AerialUEsubscriptionInformation_enum2value_1[] = { + 0, /* allowed(0) */ + 1 /* not-allowed(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_AerialUEsubscriptionInformation_specs_1 = { + asn_MAP_AerialUEsubscriptionInformation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_AerialUEsubscriptionInformation_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_AerialUEsubscriptionInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AerialUEsubscriptionInformation = { + "AerialUEsubscriptionInformation", + "AerialUEsubscriptionInformation", + &asn_OP_NativeEnumerated, + asn_DEF_AerialUEsubscriptionInformation_tags_1, + sizeof(asn_DEF_AerialUEsubscriptionInformation_tags_1) + /sizeof(asn_DEF_AerialUEsubscriptionInformation_tags_1[0]), /* 1 */ + asn_DEF_AerialUEsubscriptionInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_AerialUEsubscriptionInformation_tags_1) + /sizeof(asn_DEF_AerialUEsubscriptionInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AerialUEsubscriptionInformation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_AerialUEsubscriptionInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h new file mode 100644 index 0000000..528332d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AerialUEsubscriptionInformation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AerialUEsubscriptionInformation_H_ +#define _AerialUEsubscriptionInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AerialUEsubscriptionInformation { + AerialUEsubscriptionInformation_allowed = 0, + AerialUEsubscriptionInformation_not_allowed = 1 + /* + * Enumeration is extensible + */ +} e_AerialUEsubscriptionInformation; + +/* AerialUEsubscriptionInformation */ +typedef long AerialUEsubscriptionInformation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AerialUEsubscriptionInformation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AerialUEsubscriptionInformation; +extern const asn_INTEGER_specifics_t asn_SPC_AerialUEsubscriptionInformation_specs_1; +asn_struct_free_f AerialUEsubscriptionInformation_free; +asn_struct_print_f AerialUEsubscriptionInformation_print; +asn_constr_check_f AerialUEsubscriptionInformation_constraint; +ber_type_decoder_f AerialUEsubscriptionInformation_decode_ber; +der_type_encoder_f AerialUEsubscriptionInformation_encode_der; +xer_type_decoder_f AerialUEsubscriptionInformation_decode_xer; +xer_type_encoder_f AerialUEsubscriptionInformation_encode_xer; +per_type_decoder_f AerialUEsubscriptionInformation_decode_uper; +per_type_encoder_f AerialUEsubscriptionInformation_encode_uper; +per_type_decoder_f AerialUEsubscriptionInformation_decode_aper; +per_type_encoder_f AerialUEsubscriptionInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AerialUEsubscriptionInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.c new file mode 100644 index 0000000..0411ea9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AllocationAndRetentionPriority.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_AllocationAndRetentionPriority_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority, priorityLevel), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PriorityLevel, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "priorityLevel" + }, + { ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority, pre_emptionCapability), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Pre_emptionCapability, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pre-emptionCapability" + }, + { ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority, pre_emptionVulnerability), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Pre_emptionVulnerability, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pre-emptionVulnerability" + }, + { ATF_POINTER, 1, offsetof(struct AllocationAndRetentionPriority, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P109, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_AllocationAndRetentionPriority_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_AllocationAndRetentionPriority_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AllocationAndRetentionPriority_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* priorityLevel */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pre-emptionCapability */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pre-emptionVulnerability */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AllocationAndRetentionPriority_specs_1 = { + sizeof(struct AllocationAndRetentionPriority), + offsetof(struct AllocationAndRetentionPriority, _asn_ctx), + asn_MAP_AllocationAndRetentionPriority_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_AllocationAndRetentionPriority_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AllocationAndRetentionPriority = { + "AllocationAndRetentionPriority", + "AllocationAndRetentionPriority", + &asn_OP_SEQUENCE, + asn_DEF_AllocationAndRetentionPriority_tags_1, + sizeof(asn_DEF_AllocationAndRetentionPriority_tags_1) + /sizeof(asn_DEF_AllocationAndRetentionPriority_tags_1[0]), /* 1 */ + asn_DEF_AllocationAndRetentionPriority_tags_1, /* Same as above */ + sizeof(asn_DEF_AllocationAndRetentionPriority_tags_1) + /sizeof(asn_DEF_AllocationAndRetentionPriority_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AllocationAndRetentionPriority_1, + 4, /* Elements count */ + &asn_SPC_AllocationAndRetentionPriority_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.h new file mode 100644 index 0000000..f46ba79 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AllocationAndRetentionPriority.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AllocationAndRetentionPriority_H_ +#define _AllocationAndRetentionPriority_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PriorityLevel.h" +#include "Pre-emptionCapability.h" +#include "Pre-emptionVulnerability.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* AllocationAndRetentionPriority */ +typedef struct AllocationAndRetentionPriority { + PriorityLevel_t priorityLevel; + Pre_emptionCapability_t pre_emptionCapability; + Pre_emptionVulnerability_t pre_emptionVulnerability; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AllocationAndRetentionPriority_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AllocationAndRetentionPriority; +extern asn_SEQUENCE_specifics_t asn_SPC_AllocationAndRetentionPriority_specs_1; +extern asn_TYPE_member_t asn_MBR_AllocationAndRetentionPriority_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _AllocationAndRetentionPriority_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.c new file mode 100644 index 0000000..3158494 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.c @@ -0,0 +1,103 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AreaScopeOfMDT.h" + +#include "CellBasedMDT.h" +#include "TABasedMDT.h" +#include "TAIBasedMDT.h" +asn_per_constraints_t asn_PER_type_AreaScopeOfMDT_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_AreaScopeOfMDT_1[] = { + { ATF_POINTER, 0, offsetof(struct AreaScopeOfMDT, choice.cellBased), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellBasedMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellBased" + }, + { ATF_POINTER, 0, offsetof(struct AreaScopeOfMDT, choice.tABased), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TABasedMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tABased" + }, + { ATF_NOFLAGS, 0, offsetof(struct AreaScopeOfMDT, choice.pLMNWide), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNWide" + }, + { ATF_POINTER, 0, offsetof(struct AreaScopeOfMDT, choice.tAIBased), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAIBasedMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAIBased" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_AreaScopeOfMDT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellBased */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tABased */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMNWide */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* tAIBased */ +}; +asn_CHOICE_specifics_t asn_SPC_AreaScopeOfMDT_specs_1 = { + sizeof(struct AreaScopeOfMDT), + offsetof(struct AreaScopeOfMDT, _asn_ctx), + offsetof(struct AreaScopeOfMDT, present), + sizeof(((struct AreaScopeOfMDT *)0)->present), + asn_MAP_AreaScopeOfMDT_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_AreaScopeOfMDT = { + "AreaScopeOfMDT", + "AreaScopeOfMDT", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_AreaScopeOfMDT_constr_1, CHOICE_constraint }, + asn_MBR_AreaScopeOfMDT_1, + 4, /* Elements count */ + &asn_SPC_AreaScopeOfMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.h new file mode 100644 index 0000000..d4664e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfMDT.h @@ -0,0 +1,84 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AreaScopeOfMDT_H_ +#define _AreaScopeOfMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AreaScopeOfMDT_PR { + AreaScopeOfMDT_PR_NOTHING, /* No components present */ + AreaScopeOfMDT_PR_cellBased, + AreaScopeOfMDT_PR_tABased, + AreaScopeOfMDT_PR_pLMNWide, + /* Extensions may appear below */ + AreaScopeOfMDT_PR_tAIBased +} AreaScopeOfMDT_PR; + +/* Forward declarations */ +struct CellBasedMDT; +struct TABasedMDT; +struct TAIBasedMDT; + +/* AreaScopeOfMDT */ +typedef struct AreaScopeOfMDT { + AreaScopeOfMDT_PR present; + union AreaScopeOfMDT_u { + struct CellBasedMDT *cellBased; + struct TABasedMDT *tABased; + NULL_t pLMNWide; + /* + * This type is extensible, + * possible extensions are below. + */ + struct TAIBasedMDT *tAIBased; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AreaScopeOfMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AreaScopeOfMDT; +extern asn_CHOICE_specifics_t asn_SPC_AreaScopeOfMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_AreaScopeOfMDT_1[4]; +extern asn_per_constraints_t asn_PER_type_AreaScopeOfMDT_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _AreaScopeOfMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.c new file mode 100644 index 0000000..23bb37a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.c @@ -0,0 +1,104 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "AreaScopeOfQMC.h" + +#include "CellBasedQMC.h" +#include "TABasedQMC.h" +#include "TAIBasedQMC.h" +#include "PLMNAreaBasedQMC.h" +asn_per_constraints_t asn_PER_type_AreaScopeOfQMC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_AreaScopeOfQMC_1[] = { + { ATF_POINTER, 0, offsetof(struct AreaScopeOfQMC, choice.cellBased), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellBasedQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellBased" + }, + { ATF_POINTER, 0, offsetof(struct AreaScopeOfQMC, choice.tABased), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TABasedQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tABased" + }, + { ATF_POINTER, 0, offsetof(struct AreaScopeOfQMC, choice.tAIBased), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAIBasedQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAIBased" + }, + { ATF_POINTER, 0, offsetof(struct AreaScopeOfQMC, choice.pLMNAreaBased), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNAreaBasedQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNAreaBased" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_AreaScopeOfQMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellBased */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tABased */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tAIBased */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pLMNAreaBased */ +}; +asn_CHOICE_specifics_t asn_SPC_AreaScopeOfQMC_specs_1 = { + sizeof(struct AreaScopeOfQMC), + offsetof(struct AreaScopeOfQMC, _asn_ctx), + offsetof(struct AreaScopeOfQMC, present), + sizeof(((struct AreaScopeOfQMC *)0)->present), + asn_MAP_AreaScopeOfQMC_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_AreaScopeOfQMC = { + "AreaScopeOfQMC", + "AreaScopeOfQMC", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_AreaScopeOfQMC_constr_1, CHOICE_constraint }, + asn_MBR_AreaScopeOfQMC_1, + 4, /* Elements count */ + &asn_SPC_AreaScopeOfQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.h new file mode 100644 index 0000000..c88bd30 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/AreaScopeOfQMC.h @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _AreaScopeOfQMC_H_ +#define _AreaScopeOfQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AreaScopeOfQMC_PR { + AreaScopeOfQMC_PR_NOTHING, /* No components present */ + AreaScopeOfQMC_PR_cellBased, + AreaScopeOfQMC_PR_tABased, + AreaScopeOfQMC_PR_tAIBased, + AreaScopeOfQMC_PR_pLMNAreaBased + /* Extensions may appear below */ + +} AreaScopeOfQMC_PR; + +/* Forward declarations */ +struct CellBasedQMC; +struct TABasedQMC; +struct TAIBasedQMC; +struct PLMNAreaBasedQMC; + +/* AreaScopeOfQMC */ +typedef struct AreaScopeOfQMC { + AreaScopeOfQMC_PR present; + union AreaScopeOfQMC_u { + struct CellBasedQMC *cellBased; + struct TABasedQMC *tABased; + struct TAIBasedQMC *tAIBased; + struct PLMNAreaBasedQMC *pLMNAreaBased; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AreaScopeOfQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AreaScopeOfQMC; +extern asn_CHOICE_specifics_t asn_SPC_AreaScopeOfQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_AreaScopeOfQMC_1[4]; +extern asn_per_constraints_t asn_PER_type_AreaScopeOfQMC_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _AreaScopeOfQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..a4b724e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.c @@ -0,0 +1,674 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..7bd05b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BIT_STRING.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.c new file mode 100644 index 0000000..41b88e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.c @@ -0,0 +1,510 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BOOLEAN basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) +}; +asn_TYPE_operation_t asn_OP_BOOLEAN = { + BOOLEAN_free, + BOOLEAN_print, + BOOLEAN_compare, + BOOLEAN_decode_ber, + BOOLEAN_encode_der, + BOOLEAN_decode_xer, + BOOLEAN_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BOOLEAN_decode_oer, + BOOLEAN_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BOOLEAN_decode_uper, /* Unaligned PER decoder */ + BOOLEAN_encode_uper, /* Unaligned PER encoder */ + BOOLEAN_decode_aper, /* Aligned PER decoder */ + BOOLEAN_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BOOLEAN_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { + "BOOLEAN", + "BOOLEAN", + &asn_OP_BOOLEAN, + asn_DEF_BOOLEAN_tags, + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + asn_DEF_BOOLEAN_tags, /* Same as above */ + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode BOOLEAN type. + */ +asn_dec_rval_t +BOOLEAN_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **bool_value, + const void *buf_ptr, size_t size, int tag_mode) { + BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; + asn_dec_rval_t rval; + ber_tlv_len_t length; + ber_tlv_len_t lidx; + + if(st == NULL) { + st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); + if(st == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("Boolean length is %d bytes", (int)length); + + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * Compute boolean value. + */ + for(*st = 0, lidx = 0; + (lidx < length) && *st == 0; lidx++) { + /* + * Very simple approach: read bytes until the end or + * value is already TRUE. + * BOOLEAN is not supposed to contain meaningful data anyway. + */ + *st |= ((const uint8_t *)buf_ptr)[lidx]; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", + (long)rval.consumed, (long)length, + td->name, *st); + + return rval; +} + +asn_enc_rval_t +BOOLEAN_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + + erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb) { + uint8_t bool_value; + + bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ + + if(cb(&bool_value, 1, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } + + erval.encoded += 1; + + ASN__ENCODED_OK(erval); +} + + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +BOOLEAN__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + BOOLEAN_t *st = (BOOLEAN_t *)sptr; + const char *p = (const char *)chunk_buf; + + (void)td; + + if(chunk_size && p[0] == 0x3c /* '<' */) { + switch(xer_check_tag(chunk_buf, chunk_size, "false")) { + case XCT_BOTH: + /* "" */ + *st = 0; + break; + case XCT_UNKNOWN_BO: + if(xer_check_tag(chunk_buf, chunk_size, "true") + != XCT_BOTH) + return XPBD_BROKEN_ENCODING; + /* "" */ + *st = 1; /* Or 0xff as in DER?.. */ + break; + default: + return XPBD_BROKEN_ENCODING; + } + return XPBD_BODY_CONSUMED; + } else { + return XPBD_BROKEN_ENCODING; + } +} + + +asn_dec_rval_t +BOOLEAN_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, + BOOLEAN__xer_body_decode); +} + +asn_enc_rval_t +BOOLEAN_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + + (void)ilevel; + (void)flags; + + if(!st) ASN__ENCODE_FAILED; + + if(*st) { + ASN__CALLBACK("", 7); + } else { + ASN__CALLBACK("", 8); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +int +BOOLEAN_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + const char *buf; + size_t buflen; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st) { + if(*st) { + buf = "TRUE"; + buflen = 4; + } else { + buf = "FALSE"; + buflen = 5; + } + } else { + buf = ""; + buflen = 8; + } + + return (cb(buf, buflen, app_key) < 0) ? -1 : 0; +} + +void +BOOLEAN_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(BOOLEAN_t)); + break; + } + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +BOOLEAN_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: *st = 1; break; + case 0: *st = 0; break; + case -1: default: ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + + +asn_enc_rval_t +BOOLEAN_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +BOOLEAN_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + (void)td; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: + *st = 1; + break; + case 0: + *st = 0; + break; + case -1: + default: + ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + +asn_enc_rval_t +BOOLEAN_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +#ifndef ASN_DISABLE_OER_SUPPORT + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BOOLEAN_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 1, 0, 0 }; + const BOOLEAN_t *st = sptr; + uint8_t bool_value = *st ? 0xff : 0; /* 0xff mandated by OER */ + + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(cb(&bool_value, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +asn_dec_rval_t +BOOLEAN_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t ok = {RC_OK, 1}; + BOOLEAN_t *st; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if(!(st = *sptr)) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + *st = *(const uint8_t *)ptr; + + return ok; +} + + + +#endif + +int +BOOLEAN_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const BOOLEAN_t *a = aptr; + const BOOLEAN_t *b = bptr; + + (void)td; + + if(a && b) { + if(!*a == !*b) { /* TRUE can be encoded by any non-zero byte. */ + return 0; + } else if(!*a) { + return -1; + } else { + return 1; + } + } else if(!a) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +BOOLEAN_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + BOOLEAN_t *st = *sptr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_CONSTRAINED) { + *st = asn_random_between(pc->lower_bound, pc->upper_bound); + return result_ok; + } + } + + /* Simulate booleans that are sloppily set and biased. */ + switch(asn_random_between(0, 7)) { + case 0: + case 1: + case 2: + *st = 0; break; + case 3: *st = -1; break; + case 4: *st = 1; break; + case 5: *st = INT_MIN; break; + case 6: *st = INT_MAX; break; + default: + *st = asn_random_between(INT_MIN, INT_MAX); + break; + } + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.h new file mode 100644 index 0000000..c822311 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BOOLEAN.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BOOLEAN_H_ +#define _BOOLEAN_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The underlying integer may contain various values, but everything + * non-zero is capped to 0xff by the DER encoder. The BER decoder may + * yield non-zero values different from 1, beware. + */ +typedef int BOOLEAN_t; + +extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; +extern asn_TYPE_operation_t asn_OP_BOOLEAN; + +asn_struct_free_f BOOLEAN_free; +asn_struct_print_f BOOLEAN_print; +asn_struct_compare_f BOOLEAN_compare; +ber_type_decoder_f BOOLEAN_decode_ber; +der_type_encoder_f BOOLEAN_encode_der; +oer_type_decoder_f BOOLEAN_decode_oer; +oer_type_encoder_f BOOLEAN_encode_oer; +per_type_decoder_f BOOLEAN_decode_uper; +per_type_encoder_f BOOLEAN_encode_uper; +per_type_decoder_f BOOLEAN_decode_aper; +per_type_encoder_f BOOLEAN_encode_aper; +xer_type_decoder_f BOOLEAN_decode_xer; +xer_type_encoder_f BOOLEAN_encode_xer; +asn_random_fill_f BOOLEAN_random_fill; + +#define BOOLEAN_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _BOOLEAN_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.c new file mode 100644 index 0000000..6710e8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BandInfo.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_BandInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandInfo, freqBandIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FreqBandIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "freqBandIndicator" + }, + { ATF_POINTER, 1, offsetof(struct BandInfo, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P169, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_BandInfo_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_BandInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_BandInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_BandInfo_specs_1 = { + sizeof(struct BandInfo), + offsetof(struct BandInfo, _asn_ctx), + asn_MAP_BandInfo_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_BandInfo_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_BandInfo = { + "BandInfo", + "BandInfo", + &asn_OP_SEQUENCE, + asn_DEF_BandInfo_tags_1, + sizeof(asn_DEF_BandInfo_tags_1) + /sizeof(asn_DEF_BandInfo_tags_1[0]), /* 1 */ + asn_DEF_BandInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_BandInfo_tags_1) + /sizeof(asn_DEF_BandInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_BandInfo_1, + 2, /* Elements count */ + &asn_SPC_BandInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.h new file mode 100644 index 0000000..3a5f7a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandInfo.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BandInfo_H_ +#define _BandInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "FreqBandIndicator.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* BandInfo */ +typedef struct BandInfo { + FreqBandIndicator_t freqBandIndicator; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_BandInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_BandInfo_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.c new file mode 100644 index 0000000..8cba4ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BandwidthReducedSI.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BandwidthReducedSI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_BandwidthReducedSI_value2enum_1[] = { + { 0, 9, "scheduled" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_BandwidthReducedSI_enum2value_1[] = { + 0 /* scheduled(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_BandwidthReducedSI_specs_1 = { + asn_MAP_BandwidthReducedSI_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_BandwidthReducedSI_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_BandwidthReducedSI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BandwidthReducedSI = { + "BandwidthReducedSI", + "BandwidthReducedSI", + &asn_OP_NativeEnumerated, + asn_DEF_BandwidthReducedSI_tags_1, + sizeof(asn_DEF_BandwidthReducedSI_tags_1) + /sizeof(asn_DEF_BandwidthReducedSI_tags_1[0]), /* 1 */ + asn_DEF_BandwidthReducedSI_tags_1, /* Same as above */ + sizeof(asn_DEF_BandwidthReducedSI_tags_1) + /sizeof(asn_DEF_BandwidthReducedSI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BandwidthReducedSI_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_BandwidthReducedSI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.h new file mode 100644 index 0000000..18910d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BandwidthReducedSI.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BandwidthReducedSI_H_ +#define _BandwidthReducedSI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BandwidthReducedSI { + BandwidthReducedSI_scheduled = 0 + /* + * Enumeration is extensible + */ +} e_BandwidthReducedSI; + +/* BandwidthReducedSI */ +typedef long BandwidthReducedSI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BandwidthReducedSI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BandwidthReducedSI; +extern const asn_INTEGER_specifics_t asn_SPC_BandwidthReducedSI_specs_1; +asn_struct_free_f BandwidthReducedSI_free; +asn_struct_print_f BandwidthReducedSI_print; +asn_constr_check_f BandwidthReducedSI_constraint; +ber_type_decoder_f BandwidthReducedSI_decode_ber; +der_type_encoder_f BandwidthReducedSI_encode_der; +xer_type_decoder_f BandwidthReducedSI_decode_xer; +xer_type_encoder_f BandwidthReducedSI_encode_xer; +per_type_decoder_f BandwidthReducedSI_decode_uper; +per_type_encoder_f BandwidthReducedSI_encode_uper; +per_type_decoder_f BandwidthReducedSI_decode_aper; +per_type_encoder_f BandwidthReducedSI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandwidthReducedSI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.c new file mode 100644 index 0000000..7a14791 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BearerType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BearerType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_BearerType_value2enum_1[] = { + { 0, 6, "non-IP" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_BearerType_enum2value_1[] = { + 0 /* non-IP(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_BearerType_specs_1 = { + asn_MAP_BearerType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_BearerType_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_BearerType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BearerType = { + "BearerType", + "BearerType", + &asn_OP_NativeEnumerated, + asn_DEF_BearerType_tags_1, + sizeof(asn_DEF_BearerType_tags_1) + /sizeof(asn_DEF_BearerType_tags_1[0]), /* 1 */ + asn_DEF_BearerType_tags_1, /* Same as above */ + sizeof(asn_DEF_BearerType_tags_1) + /sizeof(asn_DEF_BearerType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BearerType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_BearerType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.h new file mode 100644 index 0000000..69e6d45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BearerType.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BearerType_H_ +#define _BearerType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BearerType { + BearerType_non_IP = 0 + /* + * Enumeration is extensible + */ +} e_BearerType; + +/* BearerType */ +typedef long BearerType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BearerType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BearerType; +extern const asn_INTEGER_specifics_t asn_SPC_BearerType_specs_1; +asn_struct_free_f BearerType_free; +asn_struct_print_f BearerType_print; +asn_constr_check_f BearerType_constraint; +ber_type_decoder_f BearerType_decode_ber; +der_type_encoder_f BearerType_encode_der; +xer_type_decoder_f BearerType_decode_xer; +xer_type_encoder_f BearerType_encode_xer; +per_type_decoder_f BearerType_decode_uper; +per_type_encoder_f BearerType_encode_uper; +per_type_decoder_f BearerType_decode_aper; +per_type_encoder_f BearerType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BearerType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.c new file mode 100644 index 0000000..48fb194 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BenefitMetric.h" + +int +BenefitMetric_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -101 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BenefitMetric_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, -101, 100 } /* (-101..100,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_BenefitMetric_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BenefitMetric = { + "BenefitMetric", + "BenefitMetric", + &asn_OP_NativeInteger, + asn_DEF_BenefitMetric_tags_1, + sizeof(asn_DEF_BenefitMetric_tags_1) + /sizeof(asn_DEF_BenefitMetric_tags_1[0]), /* 1 */ + asn_DEF_BenefitMetric_tags_1, /* Same as above */ + sizeof(asn_DEF_BenefitMetric_tags_1) + /sizeof(asn_DEF_BenefitMetric_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BenefitMetric_constr_1, BenefitMetric_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.h new file mode 100644 index 0000000..a3a5196 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BenefitMetric.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BenefitMetric_H_ +#define _BenefitMetric_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BenefitMetric */ +typedef long BenefitMetric_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BenefitMetric_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BenefitMetric; +asn_struct_free_f BenefitMetric_free; +asn_struct_print_f BenefitMetric_print; +asn_constr_check_f BenefitMetric_constraint; +ber_type_decoder_f BenefitMetric_decode_ber; +der_type_encoder_f BenefitMetric_encode_der; +xer_type_decoder_f BenefitMetric_decode_xer; +xer_type_encoder_f BenefitMetric_encode_xer; +per_type_decoder_f BenefitMetric_decode_uper; +per_type_encoder_f BenefitMetric_encode_uper; +per_type_decoder_f BenefitMetric_decode_aper; +per_type_encoder_f BenefitMetric_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BenefitMetric_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.c new file mode 100644 index 0000000..6444d13 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BitRate.h" + +int +BitRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BitRate_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 34, -1, 0, 10000000000 } /* (0..10000000000) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_BitRate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BitRate = { + "BitRate", + "BitRate", + &asn_OP_INTEGER, + asn_DEF_BitRate_tags_1, + sizeof(asn_DEF_BitRate_tags_1) + /sizeof(asn_DEF_BitRate_tags_1[0]), /* 1 */ + asn_DEF_BitRate_tags_1, /* Same as above */ + sizeof(asn_DEF_BitRate_tags_1) + /sizeof(asn_DEF_BitRate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BitRate_constr_1, BitRate_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.h new file mode 100644 index 0000000..d792ca9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BitRate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BitRate_H_ +#define _BitRate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BitRate */ +typedef INTEGER_t BitRate_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BitRate_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BitRate; +asn_struct_free_f BitRate_free; +asn_struct_print_f BitRate_print; +asn_constr_check_f BitRate_constraint; +ber_type_decoder_f BitRate_decode_ber; +der_type_encoder_f BitRate_encode_der; +xer_type_decoder_f BitRate_decode_xer; +xer_type_encoder_f BitRate_encode_xer; +per_type_decoder_f BitRate_decode_uper; +per_type_encoder_f BitRate_encode_uper; +per_type_decoder_f BitRate_decode_aper; +per_type_encoder_f BitRate_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BitRate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.c new file mode 100644 index 0000000..ca1b91f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BluetoothMeasConfig.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BluetoothMeasConfig_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_BluetoothMeasConfig_value2enum_1[] = { + { 0, 5, "setup" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_BluetoothMeasConfig_enum2value_1[] = { + 0 /* setup(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_BluetoothMeasConfig_specs_1 = { + asn_MAP_BluetoothMeasConfig_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_BluetoothMeasConfig_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_BluetoothMeasConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BluetoothMeasConfig = { + "BluetoothMeasConfig", + "BluetoothMeasConfig", + &asn_OP_NativeEnumerated, + asn_DEF_BluetoothMeasConfig_tags_1, + sizeof(asn_DEF_BluetoothMeasConfig_tags_1) + /sizeof(asn_DEF_BluetoothMeasConfig_tags_1[0]), /* 1 */ + asn_DEF_BluetoothMeasConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_BluetoothMeasConfig_tags_1) + /sizeof(asn_DEF_BluetoothMeasConfig_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BluetoothMeasConfig_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_BluetoothMeasConfig_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.h new file mode 100644 index 0000000..c98bdb7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfig.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BluetoothMeasConfig_H_ +#define _BluetoothMeasConfig_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BluetoothMeasConfig { + BluetoothMeasConfig_setup = 0 + /* + * Enumeration is extensible + */ +} e_BluetoothMeasConfig; + +/* BluetoothMeasConfig */ +typedef long BluetoothMeasConfig_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BluetoothMeasConfig_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BluetoothMeasConfig; +extern const asn_INTEGER_specifics_t asn_SPC_BluetoothMeasConfig_specs_1; +asn_struct_free_f BluetoothMeasConfig_free; +asn_struct_print_f BluetoothMeasConfig_print; +asn_constr_check_f BluetoothMeasConfig_constraint; +ber_type_decoder_f BluetoothMeasConfig_decode_ber; +der_type_encoder_f BluetoothMeasConfig_encode_der; +xer_type_decoder_f BluetoothMeasConfig_decode_xer; +xer_type_encoder_f BluetoothMeasConfig_encode_xer; +per_type_decoder_f BluetoothMeasConfig_decode_uper; +per_type_encoder_f BluetoothMeasConfig_encode_uper; +per_type_decoder_f BluetoothMeasConfig_decode_aper; +per_type_encoder_f BluetoothMeasConfig_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BluetoothMeasConfig_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c new file mode 100644 index 0000000..b6c7480 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BluetoothMeasConfigNameList.h" + +asn_per_constraints_t asn_PER_type_BluetoothMeasConfigNameList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_BluetoothMeasConfigNameList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_BluetoothName, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_BluetoothMeasConfigNameList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_BluetoothMeasConfigNameList_specs_1 = { + sizeof(struct BluetoothMeasConfigNameList), + offsetof(struct BluetoothMeasConfigNameList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BluetoothMeasConfigNameList = { + "BluetoothMeasConfigNameList", + "BluetoothMeasConfigNameList", + &asn_OP_SEQUENCE_OF, + asn_DEF_BluetoothMeasConfigNameList_tags_1, + sizeof(asn_DEF_BluetoothMeasConfigNameList_tags_1) + /sizeof(asn_DEF_BluetoothMeasConfigNameList_tags_1[0]), /* 1 */ + asn_DEF_BluetoothMeasConfigNameList_tags_1, /* Same as above */ + sizeof(asn_DEF_BluetoothMeasConfigNameList_tags_1) + /sizeof(asn_DEF_BluetoothMeasConfigNameList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BluetoothMeasConfigNameList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_BluetoothMeasConfigNameList_1, + 1, /* Single element */ + &asn_SPC_BluetoothMeasConfigNameList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h new file mode 100644 index 0000000..3f512dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasConfigNameList.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BluetoothMeasConfigNameList_H_ +#define _BluetoothMeasConfigNameList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BluetoothName.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BluetoothMeasConfigNameList */ +typedef struct BluetoothMeasConfigNameList { + A_SEQUENCE_OF(BluetoothName_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BluetoothMeasConfigNameList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BluetoothMeasConfigNameList; +extern asn_SET_OF_specifics_t asn_SPC_BluetoothMeasConfigNameList_specs_1; +extern asn_TYPE_member_t asn_MBR_BluetoothMeasConfigNameList_1[1]; +extern asn_per_constraints_t asn_PER_type_BluetoothMeasConfigNameList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _BluetoothMeasConfigNameList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c new file mode 100644 index 0000000..4502114 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.c @@ -0,0 +1,148 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BluetoothMeasurementConfiguration.h" + +#include "BluetoothMeasConfigNameList.h" +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_bt_rssi_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_bt_rssi_value2enum_4[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_bt_rssi_enum2value_4[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_bt_rssi_specs_4 = { + asn_MAP_bt_rssi_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_bt_rssi_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_bt_rssi_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_bt_rssi_4 = { + "bt-rssi", + "bt-rssi", + &asn_OP_NativeEnumerated, + asn_DEF_bt_rssi_tags_4, + sizeof(asn_DEF_bt_rssi_tags_4) + /sizeof(asn_DEF_bt_rssi_tags_4[0]) - 1, /* 1 */ + asn_DEF_bt_rssi_tags_4, /* Same as above */ + sizeof(asn_DEF_bt_rssi_tags_4) + /sizeof(asn_DEF_bt_rssi_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_bt_rssi_constr_4, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_bt_rssi_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_BluetoothMeasurementConfiguration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BluetoothMeasurementConfiguration, bluetoothMeasConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BluetoothMeasConfig, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "bluetoothMeasConfig" + }, + { ATF_POINTER, 3, offsetof(struct BluetoothMeasurementConfiguration, bluetoothMeasConfigNameList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BluetoothMeasConfigNameList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "bluetoothMeasConfigNameList" + }, + { ATF_POINTER, 2, offsetof(struct BluetoothMeasurementConfiguration, bt_rssi), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_bt_rssi_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "bt-rssi" + }, + { ATF_POINTER, 1, offsetof(struct BluetoothMeasurementConfiguration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P111, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_BluetoothMeasurementConfiguration_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_BluetoothMeasurementConfiguration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_BluetoothMeasurementConfiguration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bluetoothMeasConfig */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bluetoothMeasConfigNameList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bt-rssi */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_BluetoothMeasurementConfiguration_specs_1 = { + sizeof(struct BluetoothMeasurementConfiguration), + offsetof(struct BluetoothMeasurementConfiguration, _asn_ctx), + asn_MAP_BluetoothMeasurementConfiguration_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_BluetoothMeasurementConfiguration_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_BluetoothMeasurementConfiguration = { + "BluetoothMeasurementConfiguration", + "BluetoothMeasurementConfiguration", + &asn_OP_SEQUENCE, + asn_DEF_BluetoothMeasurementConfiguration_tags_1, + sizeof(asn_DEF_BluetoothMeasurementConfiguration_tags_1) + /sizeof(asn_DEF_BluetoothMeasurementConfiguration_tags_1[0]), /* 1 */ + asn_DEF_BluetoothMeasurementConfiguration_tags_1, /* Same as above */ + sizeof(asn_DEF_BluetoothMeasurementConfiguration_tags_1) + /sizeof(asn_DEF_BluetoothMeasurementConfiguration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_BluetoothMeasurementConfiguration_1, + 4, /* Elements count */ + &asn_SPC_BluetoothMeasurementConfiguration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h new file mode 100644 index 0000000..83b75ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothMeasurementConfiguration.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BluetoothMeasurementConfiguration_H_ +#define _BluetoothMeasurementConfiguration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BluetoothMeasConfig.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BluetoothMeasurementConfiguration__bt_rssi { + BluetoothMeasurementConfiguration__bt_rssi_true = 0 + /* + * Enumeration is extensible + */ +} e_BluetoothMeasurementConfiguration__bt_rssi; + +/* Forward declarations */ +struct BluetoothMeasConfigNameList; +struct ProtocolExtensionContainer; + +/* BluetoothMeasurementConfiguration */ +typedef struct BluetoothMeasurementConfiguration { + BluetoothMeasConfig_t bluetoothMeasConfig; + struct BluetoothMeasConfigNameList *bluetoothMeasConfigNameList; /* OPTIONAL */ + long *bt_rssi; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BluetoothMeasurementConfiguration_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_bt_rssi_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_BluetoothMeasurementConfiguration; +extern asn_SEQUENCE_specifics_t asn_SPC_BluetoothMeasurementConfiguration_specs_1; +extern asn_TYPE_member_t asn_MBR_BluetoothMeasurementConfiguration_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _BluetoothMeasurementConfiguration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.c new file mode 100644 index 0000000..9b0cf88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BluetoothName.h" + +int +BluetoothName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 248)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_BluetoothName_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 248 } /* (SIZE(1..248)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_BluetoothName_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BluetoothName = { + "BluetoothName", + "BluetoothName", + &asn_OP_OCTET_STRING, + asn_DEF_BluetoothName_tags_1, + sizeof(asn_DEF_BluetoothName_tags_1) + /sizeof(asn_DEF_BluetoothName_tags_1[0]), /* 1 */ + asn_DEF_BluetoothName_tags_1, /* Same as above */ + sizeof(asn_DEF_BluetoothName_tags_1) + /sizeof(asn_DEF_BluetoothName_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BluetoothName_constr_1, BluetoothName_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.h new file mode 100644 index 0000000..1a4e667 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BluetoothName.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BluetoothName_H_ +#define _BluetoothName_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BluetoothName */ +typedef OCTET_STRING_t BluetoothName_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_BluetoothName_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_BluetoothName; +asn_struct_free_f BluetoothName_free; +asn_struct_print_f BluetoothName_print; +asn_constr_check_f BluetoothName_constraint; +ber_type_decoder_f BluetoothName_decode_ber; +der_type_encoder_f BluetoothName_encode_der; +xer_type_decoder_f BluetoothName_decode_xer; +xer_type_encoder_f BluetoothName_encode_xer; +per_type_decoder_f BluetoothName_decode_uper; +per_type_encoder_f BluetoothName_encode_uper; +per_type_decoder_f BluetoothName_decode_aper; +per_type_encoder_f BluetoothName_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BluetoothName_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.c new file mode 100644 index 0000000..3535839 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "BroadcastPLMNs-Item.h" + +asn_per_constraints_t asn_PER_type_BroadcastPLMNs_Item_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (SIZE(1..6)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_BroadcastPLMNs_Item_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_BroadcastPLMNs_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_BroadcastPLMNs_Item_specs_1 = { + sizeof(struct BroadcastPLMNs_Item), + offsetof(struct BroadcastPLMNs_Item, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BroadcastPLMNs_Item = { + "BroadcastPLMNs-Item", + "BroadcastPLMNs-Item", + &asn_OP_SEQUENCE_OF, + asn_DEF_BroadcastPLMNs_Item_tags_1, + sizeof(asn_DEF_BroadcastPLMNs_Item_tags_1) + /sizeof(asn_DEF_BroadcastPLMNs_Item_tags_1[0]), /* 1 */ + asn_DEF_BroadcastPLMNs_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_BroadcastPLMNs_Item_tags_1) + /sizeof(asn_DEF_BroadcastPLMNs_Item_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_BroadcastPLMNs_Item_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_BroadcastPLMNs_Item_1, + 1, /* Single element */ + &asn_SPC_BroadcastPLMNs_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.h new file mode 100644 index 0000000..d229a46 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/BroadcastPLMNs-Item.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _BroadcastPLMNs_Item_H_ +#define _BroadcastPLMNs_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BroadcastPLMNs-Item */ +typedef struct BroadcastPLMNs_Item { + A_SEQUENCE_OF(PLMN_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BroadcastPLMNs_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BroadcastPLMNs_Item; +extern asn_SET_OF_specifics_t asn_SPC_BroadcastPLMNs_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_BroadcastPLMNs_Item_1[1]; +extern asn_per_constraints_t asn_PER_type_BroadcastPLMNs_Item_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _BroadcastPLMNs_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.c new file mode 100644 index 0000000..0f80e47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CNTypeRestrictions.h" + +#include "CNTypeRestrictionsItem.h" +asn_per_constraints_t asn_PER_type_CNTypeRestrictions_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CNTypeRestrictions_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CNTypeRestrictionsItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CNTypeRestrictions_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CNTypeRestrictions_specs_1 = { + sizeof(struct CNTypeRestrictions), + offsetof(struct CNTypeRestrictions, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictions = { + "CNTypeRestrictions", + "CNTypeRestrictions", + &asn_OP_SEQUENCE_OF, + asn_DEF_CNTypeRestrictions_tags_1, + sizeof(asn_DEF_CNTypeRestrictions_tags_1) + /sizeof(asn_DEF_CNTypeRestrictions_tags_1[0]), /* 1 */ + asn_DEF_CNTypeRestrictions_tags_1, /* Same as above */ + sizeof(asn_DEF_CNTypeRestrictions_tags_1) + /sizeof(asn_DEF_CNTypeRestrictions_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CNTypeRestrictions_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CNTypeRestrictions_1, + 1, /* Single element */ + &asn_SPC_CNTypeRestrictions_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.h new file mode 100644 index 0000000..0e7758b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictions.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CNTypeRestrictions_H_ +#define _CNTypeRestrictions_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CNTypeRestrictionsItem; + +/* CNTypeRestrictions */ +typedef struct CNTypeRestrictions { + A_SEQUENCE_OF(struct CNTypeRestrictionsItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CNTypeRestrictions_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictions; +extern asn_SET_OF_specifics_t asn_SPC_CNTypeRestrictions_specs_1; +extern asn_TYPE_member_t asn_MBR_CNTypeRestrictions_1[1]; +extern asn_per_constraints_t asn_PER_type_CNTypeRestrictions_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CNTypeRestrictions_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.c new file mode 100644 index 0000000..ab8134c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.c @@ -0,0 +1,137 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CNTypeRestrictionsItem.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_cn_type_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_cn_type_value2enum_3[] = { + { 0, 16, "fiveGC-forbidden" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_cn_type_enum2value_3[] = { + 0 /* fiveGC-forbidden(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_cn_type_specs_3 = { + asn_MAP_cn_type_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_cn_type_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_cn_type_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cn_type_3 = { + "cn-type", + "cn-type", + &asn_OP_NativeEnumerated, + asn_DEF_cn_type_tags_3, + sizeof(asn_DEF_cn_type_tags_3) + /sizeof(asn_DEF_cn_type_tags_3[0]) - 1, /* 1 */ + asn_DEF_cn_type_tags_3, /* Same as above */ + sizeof(asn_DEF_cn_type_tags_3) + /sizeof(asn_DEF_cn_type_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_cn_type_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cn_type_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CNTypeRestrictionsItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CNTypeRestrictionsItem, plmn_Id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-Id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CNTypeRestrictionsItem, cn_type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cn_type_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cn-type" + }, + { ATF_POINTER, 1, offsetof(struct CNTypeRestrictionsItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P116, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CNTypeRestrictionsItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_CNTypeRestrictionsItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CNTypeRestrictionsItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cn-type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CNTypeRestrictionsItem_specs_1 = { + sizeof(struct CNTypeRestrictionsItem), + offsetof(struct CNTypeRestrictionsItem, _asn_ctx), + asn_MAP_CNTypeRestrictionsItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CNTypeRestrictionsItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictionsItem = { + "CNTypeRestrictionsItem", + "CNTypeRestrictionsItem", + &asn_OP_SEQUENCE, + asn_DEF_CNTypeRestrictionsItem_tags_1, + sizeof(asn_DEF_CNTypeRestrictionsItem_tags_1) + /sizeof(asn_DEF_CNTypeRestrictionsItem_tags_1[0]), /* 1 */ + asn_DEF_CNTypeRestrictionsItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CNTypeRestrictionsItem_tags_1) + /sizeof(asn_DEF_CNTypeRestrictionsItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CNTypeRestrictionsItem_1, + 3, /* Elements count */ + &asn_SPC_CNTypeRestrictionsItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.h new file mode 100644 index 0000000..6f6b726 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CNTypeRestrictionsItem.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CNTypeRestrictionsItem_H_ +#define _CNTypeRestrictionsItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CNTypeRestrictionsItem__cn_type { + CNTypeRestrictionsItem__cn_type_fiveGC_forbidden = 0 + /* + * Enumeration is extensible + */ +} e_CNTypeRestrictionsItem__cn_type; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CNTypeRestrictionsItem */ +typedef struct CNTypeRestrictionsItem { + PLMN_Identity_t plmn_Id; + long cn_type; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CNTypeRestrictionsItem_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cn_type_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictionsItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CNTypeRestrictionsItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CNTypeRestrictionsItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CNTypeRestrictionsItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.c new file mode 100644 index 0000000..0609c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "COUNTValueExtended.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_COUNTValueExtended_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTValueExtended, pDCP_SNExtended), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDCP_SNExtended, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pDCP-SNExtended" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTValueExtended, hFNModified), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HFNModified, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "hFNModified" + }, + { ATF_POINTER, 1, offsetof(struct COUNTValueExtended, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P124, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_COUNTValueExtended_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_COUNTValueExtended_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTValueExtended_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SNExtended */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFNModified */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTValueExtended_specs_1 = { + sizeof(struct COUNTValueExtended), + offsetof(struct COUNTValueExtended, _asn_ctx), + asn_MAP_COUNTValueExtended_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_COUNTValueExtended_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTValueExtended = { + "COUNTValueExtended", + "COUNTValueExtended", + &asn_OP_SEQUENCE, + asn_DEF_COUNTValueExtended_tags_1, + sizeof(asn_DEF_COUNTValueExtended_tags_1) + /sizeof(asn_DEF_COUNTValueExtended_tags_1[0]), /* 1 */ + asn_DEF_COUNTValueExtended_tags_1, /* Same as above */ + sizeof(asn_DEF_COUNTValueExtended_tags_1) + /sizeof(asn_DEF_COUNTValueExtended_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTValueExtended_1, + 3, /* Elements count */ + &asn_SPC_COUNTValueExtended_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.h new file mode 100644 index 0000000..2d5bed0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTValueExtended.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _COUNTValueExtended_H_ +#define _COUNTValueExtended_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PDCP-SNExtended.h" +#include "HFNModified.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* COUNTValueExtended */ +typedef struct COUNTValueExtended { + PDCP_SNExtended_t pDCP_SNExtended; + HFNModified_t hFNModified; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTValueExtended_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_COUNTValueExtended; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTValueExtended_specs_1; +extern asn_TYPE_member_t asn_MBR_COUNTValueExtended_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _COUNTValueExtended_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.c new file mode 100644 index 0000000..650efa7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "COUNTvalue.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_COUNTvalue_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTvalue, pDCP_SN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDCP_SN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pDCP-SN" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTvalue, hFN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HFN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "hFN" + }, + { ATF_POINTER, 1, offsetof(struct COUNTvalue, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P123, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_COUNTvalue_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_COUNTvalue_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTvalue_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFN */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTvalue_specs_1 = { + sizeof(struct COUNTvalue), + offsetof(struct COUNTvalue, _asn_ctx), + asn_MAP_COUNTvalue_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_COUNTvalue_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTvalue = { + "COUNTvalue", + "COUNTvalue", + &asn_OP_SEQUENCE, + asn_DEF_COUNTvalue_tags_1, + sizeof(asn_DEF_COUNTvalue_tags_1) + /sizeof(asn_DEF_COUNTvalue_tags_1[0]), /* 1 */ + asn_DEF_COUNTvalue_tags_1, /* Same as above */ + sizeof(asn_DEF_COUNTvalue_tags_1) + /sizeof(asn_DEF_COUNTvalue_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTvalue_1, + 3, /* Elements count */ + &asn_SPC_COUNTvalue_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.h new file mode 100644 index 0000000..8442403 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvalue.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _COUNTvalue_H_ +#define _COUNTvalue_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PDCP-SN.h" +#include "HFN.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* COUNTvalue */ +typedef struct COUNTvalue { + PDCP_SN_t pDCP_SN; + HFN_t hFN; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTvalue_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_COUNTvalue; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTvalue_specs_1; +extern asn_TYPE_member_t asn_MBR_COUNTvalue_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _COUNTvalue_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c new file mode 100644 index 0000000..b9d8687 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "COUNTvaluePDCP-SNlength18.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_COUNTvaluePDCP_SNlength18_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTvaluePDCP_SNlength18, pDCP_SNlength18), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDCP_SNlength18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pDCP-SNlength18" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTvaluePDCP_SNlength18, hFNforPDCP_SNlength18), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HFNforPDCP_SNlength18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "hFNforPDCP-SNlength18" + }, + { ATF_POINTER, 1, offsetof(struct COUNTvaluePDCP_SNlength18, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P125, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_COUNTvaluePDCP_SNlength18_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_COUNTvaluePDCP_SNlength18_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTvaluePDCP_SNlength18_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SNlength18 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFNforPDCP-SNlength18 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTvaluePDCP_SNlength18_specs_1 = { + sizeof(struct COUNTvaluePDCP_SNlength18), + offsetof(struct COUNTvaluePDCP_SNlength18, _asn_ctx), + asn_MAP_COUNTvaluePDCP_SNlength18_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_COUNTvaluePDCP_SNlength18_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTvaluePDCP_SNlength18 = { + "COUNTvaluePDCP-SNlength18", + "COUNTvaluePDCP-SNlength18", + &asn_OP_SEQUENCE, + asn_DEF_COUNTvaluePDCP_SNlength18_tags_1, + sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_tags_1) + /sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_tags_1[0]), /* 1 */ + asn_DEF_COUNTvaluePDCP_SNlength18_tags_1, /* Same as above */ + sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_tags_1) + /sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTvaluePDCP_SNlength18_1, + 3, /* Elements count */ + &asn_SPC_COUNTvaluePDCP_SNlength18_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h new file mode 100644 index 0000000..c9b7d1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/COUNTvaluePDCP-SNlength18.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _COUNTvaluePDCP_SNlength18_H_ +#define _COUNTvaluePDCP_SNlength18_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PDCP-SNlength18.h" +#include "HFNforPDCP-SNlength18.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* COUNTvaluePDCP-SNlength18 */ +typedef struct COUNTvaluePDCP_SNlength18 { + PDCP_SNlength18_t pDCP_SNlength18; + HFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTvaluePDCP_SNlength18_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_COUNTvaluePDCP_SNlength18; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTvaluePDCP_SNlength18_specs_1; +extern asn_TYPE_member_t asn_MBR_COUNTvaluePDCP_SNlength18_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _COUNTvaluePDCP_SNlength18_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.c new file mode 100644 index 0000000..35f2875 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CRNTI.h" + +int +CRNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CRNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CRNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CRNTI = { + "CRNTI", + "CRNTI", + &asn_OP_BIT_STRING, + asn_DEF_CRNTI_tags_1, + sizeof(asn_DEF_CRNTI_tags_1) + /sizeof(asn_DEF_CRNTI_tags_1[0]), /* 1 */ + asn_DEF_CRNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_CRNTI_tags_1) + /sizeof(asn_DEF_CRNTI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CRNTI_constr_1, CRNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.h new file mode 100644 index 0000000..e535f4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CRNTI.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CRNTI_H_ +#define _CRNTI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CRNTI */ +typedef BIT_STRING_t CRNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CRNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CRNTI; +asn_struct_free_f CRNTI_free; +asn_struct_print_f CRNTI_print; +asn_constr_check_f CRNTI_constraint; +ber_type_decoder_f CRNTI_decode_ber; +der_type_encoder_f CRNTI_encode_der; +xer_type_decoder_f CRNTI_decode_xer; +xer_type_encoder_f CRNTI_encode_xer; +per_type_decoder_f CRNTI_decode_uper; +per_type_encoder_f CRNTI_encode_uper; +per_type_decoder_f CRNTI_decode_aper; +per_type_encoder_f CRNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CRNTI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.c new file mode 100644 index 0000000..da65c6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CSG-Id.h" + +int +CSG_Id_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 27)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CSG_Id_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 27, 27 } /* (SIZE(27..27)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CSG_Id_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CSG_Id = { + "CSG-Id", + "CSG-Id", + &asn_OP_BIT_STRING, + asn_DEF_CSG_Id_tags_1, + sizeof(asn_DEF_CSG_Id_tags_1) + /sizeof(asn_DEF_CSG_Id_tags_1[0]), /* 1 */ + asn_DEF_CSG_Id_tags_1, /* Same as above */ + sizeof(asn_DEF_CSG_Id_tags_1) + /sizeof(asn_DEF_CSG_Id_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CSG_Id_constr_1, CSG_Id_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.h new file mode 100644 index 0000000..ff339d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSG-Id.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CSG_Id_H_ +#define _CSG_Id_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CSG-Id */ +typedef BIT_STRING_t CSG_Id_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CSG_Id_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CSG_Id; +asn_struct_free_f CSG_Id_free; +asn_struct_print_f CSG_Id_print; +asn_constr_check_f CSG_Id_constraint; +ber_type_decoder_f CSG_Id_decode_ber; +der_type_encoder_f CSG_Id_encode_der; +xer_type_decoder_f CSG_Id_decode_xer; +xer_type_encoder_f CSG_Id_encode_xer; +per_type_decoder_f CSG_Id_decode_uper; +per_type_encoder_f CSG_Id_encode_uper; +per_type_decoder_f CSG_Id_decode_aper; +per_type_encoder_f CSG_Id_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSG_Id_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.c new file mode 100644 index 0000000..59c23c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CSGMembershipStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CSGMembershipStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CSGMembershipStatus_value2enum_1[] = { + { 0, 6, "member" }, + { 1, 10, "not-member" } +}; +static const unsigned int asn_MAP_CSGMembershipStatus_enum2value_1[] = { + 0, /* member(0) */ + 1 /* not-member(1) */ +}; +const asn_INTEGER_specifics_t asn_SPC_CSGMembershipStatus_specs_1 = { + asn_MAP_CSGMembershipStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CSGMembershipStatus_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CSGMembershipStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CSGMembershipStatus = { + "CSGMembershipStatus", + "CSGMembershipStatus", + &asn_OP_NativeEnumerated, + asn_DEF_CSGMembershipStatus_tags_1, + sizeof(asn_DEF_CSGMembershipStatus_tags_1) + /sizeof(asn_DEF_CSGMembershipStatus_tags_1[0]), /* 1 */ + asn_DEF_CSGMembershipStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_CSGMembershipStatus_tags_1) + /sizeof(asn_DEF_CSGMembershipStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CSGMembershipStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CSGMembershipStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.h new file mode 100644 index 0000000..c47d563 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSGMembershipStatus.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CSGMembershipStatus_H_ +#define _CSGMembershipStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSGMembershipStatus { + CSGMembershipStatus_member = 0, + CSGMembershipStatus_not_member = 1 +} e_CSGMembershipStatus; + +/* CSGMembershipStatus */ +typedef long CSGMembershipStatus_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CSGMembershipStatus_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CSGMembershipStatus; +extern const asn_INTEGER_specifics_t asn_SPC_CSGMembershipStatus_specs_1; +asn_struct_free_f CSGMembershipStatus_free; +asn_struct_print_f CSGMembershipStatus_print; +asn_constr_check_f CSGMembershipStatus_constraint; +ber_type_decoder_f CSGMembershipStatus_decode_ber; +der_type_encoder_f CSGMembershipStatus_encode_der; +xer_type_decoder_f CSGMembershipStatus_decode_xer; +xer_type_encoder_f CSGMembershipStatus_encode_xer; +per_type_decoder_f CSGMembershipStatus_decode_uper; +per_type_encoder_f CSGMembershipStatus_encode_uper; +per_type_decoder_f CSGMembershipStatus_decode_aper; +per_type_encoder_f CSGMembershipStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSGMembershipStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.c new file mode 100644 index 0000000..8cea051 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.c @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CSIReportList.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_CSIReportList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 1, 128 } /* (SIZE(1..128)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportList__Member, uEID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uEID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportList__Member, cSIReportPerCSIProcess), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSIReportPerCSIProcess, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cSIReportPerCSIProcess" + }, + { ATF_POINTER, 1, offsetof(struct CSIReportList__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P128, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uEID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cSIReportPerCSIProcess */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CSIReportList__Member), + offsetof(struct CSIReportList__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CSIReportList_specs_1 = { + sizeof(struct CSIReportList), + offsetof(struct CSIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportList = { + "CSIReportList", + "CSIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_CSIReportList_tags_1, + sizeof(asn_DEF_CSIReportList_tags_1) + /sizeof(asn_DEF_CSIReportList_tags_1[0]), /* 1 */ + asn_DEF_CSIReportList_tags_1, /* Same as above */ + sizeof(asn_DEF_CSIReportList_tags_1) + /sizeof(asn_DEF_CSIReportList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CSIReportList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CSIReportList_1, + 1, /* Single element */ + &asn_SPC_CSIReportList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.h new file mode 100644 index 0000000..04eeb3f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportList.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CSIReportList_H_ +#define _CSIReportList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "UEID.h" +#include "CSIReportPerCSIProcess.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CSIReportList__Member { + UEID_t uEID; + CSIReportPerCSIProcess_t cSIReportPerCSIProcess; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportList__Member; + +/* CSIReportList */ +typedef struct CSIReportList { + A_SEQUENCE_OF(CSIReportList__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSIReportList; +extern asn_SET_OF_specifics_t asn_SPC_CSIReportList_specs_1; +extern asn_TYPE_member_t asn_MBR_CSIReportList_1[1]; +extern asn_per_constraints_t asn_PER_type_CSIReportList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSIReportList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.c new file mode 100644 index 0000000..b7d9251 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.c @@ -0,0 +1,162 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CSIReportPerCSIProcess.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_cSIProcessConfigurationIndex_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cSIProcessConfigurationIndex_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 1, 7 } /* (1..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_CSIReportPerCSIProcess_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcess__Member, cSIProcessConfigurationIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_cSIProcessConfigurationIndex_constr_3, memb_cSIProcessConfigurationIndex_constraint_2 }, + 0, 0, /* No default value */ + "cSIProcessConfigurationIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcess__Member, cSIReportPerCSIProcessItem), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSIReportPerCSIProcessItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cSIReportPerCSIProcessItem" + }, + { ATF_POINTER, 1, offsetof(struct CSIReportPerCSIProcess__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P129, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cSIProcessConfigurationIndex */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cSIReportPerCSIProcessItem */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CSIReportPerCSIProcess__Member), + offsetof(struct CSIReportPerCSIProcess__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcess_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportPerCSIProcess_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CSIReportPerCSIProcess_specs_1 = { + sizeof(struct CSIReportPerCSIProcess), + offsetof(struct CSIReportPerCSIProcess, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcess = { + "CSIReportPerCSIProcess", + "CSIReportPerCSIProcess", + &asn_OP_SEQUENCE_OF, + asn_DEF_CSIReportPerCSIProcess_tags_1, + sizeof(asn_DEF_CSIReportPerCSIProcess_tags_1) + /sizeof(asn_DEF_CSIReportPerCSIProcess_tags_1[0]), /* 1 */ + asn_DEF_CSIReportPerCSIProcess_tags_1, /* Same as above */ + sizeof(asn_DEF_CSIReportPerCSIProcess_tags_1) + /sizeof(asn_DEF_CSIReportPerCSIProcess_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CSIReportPerCSIProcess_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CSIReportPerCSIProcess_1, + 1, /* Single element */ + &asn_SPC_CSIReportPerCSIProcess_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.h new file mode 100644 index 0000000..e0c5500 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcess.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CSIReportPerCSIProcess_H_ +#define _CSIReportPerCSIProcess_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "NativeInteger.h" +#include "CSIReportPerCSIProcessItem.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CSIReportPerCSIProcess__Member { + long cSIProcessConfigurationIndex; + CSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcess__Member; + +/* CSIReportPerCSIProcess */ +typedef struct CSIReportPerCSIProcess { + A_SEQUENCE_OF(CSIReportPerCSIProcess__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcess_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcess; +extern asn_SET_OF_specifics_t asn_SPC_CSIReportPerCSIProcess_specs_1; +extern asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcess_1[1]; +extern asn_per_constraints_t asn_PER_type_CSIReportPerCSIProcess_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSIReportPerCSIProcess_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c new file mode 100644 index 0000000..33322db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.c @@ -0,0 +1,183 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CSIReportPerCSIProcessItem.h" + +#include "SubbandCQIList.h" +#include "ProtocolExtensionContainer.h" +static int +memb_rI_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_rI_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 1, 8 } /* (1..8,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_CSIReportPerCSIProcessItem_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem__Member, rI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_rI_constr_3, memb_rI_constraint_2 }, + 0, 0, /* No default value */ + "rI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem__Member, widebandCQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WidebandCQI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "widebandCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem__Member, subbandSize), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubbandSize, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subbandSize" + }, + { ATF_POINTER, 2, offsetof(struct CSIReportPerCSIProcessItem__Member, subbandCQIList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubbandCQIList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subbandCQIList" + }, + { ATF_POINTER, 1, offsetof(struct CSIReportPerCSIProcessItem__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P130, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 3, 4 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* widebandCQI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subbandSize */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* subbandCQIList */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CSIReportPerCSIProcessItem__Member), + offsetof(struct CSIReportPerCSIProcessItem__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 5, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 5, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcessItem_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportPerCSIProcessItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CSIReportPerCSIProcessItem_specs_1 = { + sizeof(struct CSIReportPerCSIProcessItem), + offsetof(struct CSIReportPerCSIProcessItem, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcessItem = { + "CSIReportPerCSIProcessItem", + "CSIReportPerCSIProcessItem", + &asn_OP_SEQUENCE_OF, + asn_DEF_CSIReportPerCSIProcessItem_tags_1, + sizeof(asn_DEF_CSIReportPerCSIProcessItem_tags_1) + /sizeof(asn_DEF_CSIReportPerCSIProcessItem_tags_1[0]), /* 1 */ + asn_DEF_CSIReportPerCSIProcessItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CSIReportPerCSIProcessItem_tags_1) + /sizeof(asn_DEF_CSIReportPerCSIProcessItem_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CSIReportPerCSIProcessItem_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CSIReportPerCSIProcessItem_1, + 1, /* Single element */ + &asn_SPC_CSIReportPerCSIProcessItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h new file mode 100644 index 0000000..04c8455 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CSIReportPerCSIProcessItem.h @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CSIReportPerCSIProcessItem_H_ +#define _CSIReportPerCSIProcessItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "NativeInteger.h" +#include "WidebandCQI.h" +#include "SubbandSize.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SubbandCQIList; +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CSIReportPerCSIProcessItem__Member { + long rI; + WidebandCQI_t widebandCQI; + SubbandSize_t subbandSize; + struct SubbandCQIList *subbandCQIList; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcessItem__Member; + +/* CSIReportPerCSIProcessItem */ +typedef struct CSIReportPerCSIProcessItem { + A_SEQUENCE_OF(CSIReportPerCSIProcessItem__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcessItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcessItem; +extern asn_SET_OF_specifics_t asn_SPC_CSIReportPerCSIProcessItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcessItem_1[1]; +extern asn_per_constraints_t asn_PER_type_CSIReportPerCSIProcessItem_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSIReportPerCSIProcessItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.c new file mode 100644 index 0000000..7ecee10 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CallProcess-ID.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_CallProcess_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CallProcess_ID = { + "CallProcess-ID", + "CallProcess-ID", + &asn_OP_NativeInteger, + asn_DEF_CallProcess_ID_tags_1, + sizeof(asn_DEF_CallProcess_ID_tags_1) + /sizeof(asn_DEF_CallProcess_ID_tags_1[0]), /* 1 */ + asn_DEF_CallProcess_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_CallProcess_ID_tags_1) + /sizeof(asn_DEF_CallProcess_ID_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.h new file mode 100644 index 0000000..0dab560 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CallProcess-ID.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CallProcess_ID_H_ +#define _CallProcess_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CallProcess-ID */ +typedef long CallProcess_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CallProcess_ID; +asn_struct_free_f CallProcess_ID_free; +asn_struct_print_f CallProcess_ID_print; +asn_constr_check_f CallProcess_ID_constraint; +ber_type_decoder_f CallProcess_ID_decode_ber; +der_type_encoder_f CallProcess_ID_encode_der; +xer_type_decoder_f CallProcess_ID_decode_xer; +xer_type_encoder_f CallProcess_ID_encode_xer; +per_type_decoder_f CallProcess_ID_decode_uper; +per_type_encoder_f CallProcess_ID_encode_uper; +per_type_decoder_f CallProcess_ID_decode_aper; +per_type_encoder_f CallProcess_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CallProcess_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.c new file mode 100644 index 0000000..4bdca68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CapacityValue.h" + +int +CapacityValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CapacityValue_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CapacityValue_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CapacityValue = { + "CapacityValue", + "CapacityValue", + &asn_OP_NativeInteger, + asn_DEF_CapacityValue_tags_1, + sizeof(asn_DEF_CapacityValue_tags_1) + /sizeof(asn_DEF_CapacityValue_tags_1[0]), /* 1 */ + asn_DEF_CapacityValue_tags_1, /* Same as above */ + sizeof(asn_DEF_CapacityValue_tags_1) + /sizeof(asn_DEF_CapacityValue_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CapacityValue_constr_1, CapacityValue_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.h new file mode 100644 index 0000000..d3cc315 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CapacityValue.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CapacityValue_H_ +#define _CapacityValue_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CapacityValue */ +typedef long CapacityValue_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CapacityValue_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CapacityValue; +asn_struct_free_f CapacityValue_free; +asn_struct_print_f CapacityValue_print; +asn_constr_check_f CapacityValue_constraint; +ber_type_decoder_f CapacityValue_decode_ber; +der_type_encoder_f CapacityValue_encode_der; +xer_type_decoder_f CapacityValue_decode_xer; +xer_type_encoder_f CapacityValue_encode_xer; +per_type_decoder_f CapacityValue_decode_uper; +per_type_encoder_f CapacityValue_encode_uper; +per_type_decoder_f CapacityValue_decode_aper; +per_type_encoder_f CapacityValue_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CapacityValue_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.c new file mode 100644 index 0000000..779da05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.c @@ -0,0 +1,100 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.radioNetwork), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRadioNetwork, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "radioNetwork" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 4, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.h new file mode 100644 index 0000000..4f311c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cause.h @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRadioNetwork.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_radioNetwork, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRadioNetwork_t radioNetwork; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[4]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.c new file mode 100644 index 0000000..a8b431b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 42, "not-enough-user-plane-processing-resources" }, + { 4, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 3, /* not-enough-user-plane-processing-resources(3) */ + 2, /* om-intervention(2) */ + 4 /* unspecified(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.h new file mode 100644 index 0000000..6b59462 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseMisc.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_not_enough_user_plane_processing_resources = 3, + CauseMisc_unspecified = 4 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..779271c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.c @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 11, "unspecified" }, + { 6, 49, "abstract-syntax-error-falsely-constructed-message" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 6, /* abstract-syntax-error-falsely-constructed-message(6) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 5 /* unspecified(5) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..7445a53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseProtocol.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_unspecified = 5, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.c new file mode 100644 index 0000000..c4a9d45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.c @@ -0,0 +1,95 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 12 } /* (0..12,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 19, "function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 21, "function-not-required" }, + { 11, 19, "excessive-functions" }, + { 12, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 11, /* excessive-functions(11) */ + 0, /* function-id-Invalid(0) */ + 10, /* function-not-required(10) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 6, /* request-id-unknown(6) */ + 12 /* ric-resource-limit(12) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 13, /* Number of elements in the maps */ + 14, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.h new file mode 100644 index 0000000..7ff708a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRIC.h @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_function_not_required = 10, + CauseRIC_excessive_functions = 11, + CauseRIC_ric_resource_limit = 12 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.c new file mode 100644 index 0000000..1f9e49d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.c @@ -0,0 +1,171 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CauseRadioNetwork.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRadioNetwork_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 21 } /* (0..21,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRadioNetwork_value2enum_1[] = { + { 0, 36, "handover-desirable-for-radio-reasons" }, + { 1, 22, "time-critical-handover" }, + { 2, 30, "resource-optimisation-handover" }, + { 3, 27, "reduce-load-in-serving-cell" }, + { 4, 16, "partial-handover" }, + { 5, 26, "unknown-new-eNB-UE-X2AP-ID" }, + { 6, 26, "unknown-old-eNB-UE-X2AP-ID" }, + { 7, 26, "unknown-pair-of-UE-X2AP-ID" }, + { 8, 21, "ho-target-not-allowed" }, + { 9, 22, "tx2relocoverall-expiry" }, + { 10, 17, "trelocprep-expiry" }, + { 11, 18, "cell-not-available" }, + { 12, 43, "no-radio-resources-available-in-target-cell" }, + { 13, 19, "invalid-MME-GroupID" }, + { 14, 16, "unknown-MME-Code" }, + { 15, 63, "encryption-and-or-integrity-protection-algorithms-not-supported" }, + { 16, 26, "reportCharacteristicsEmpty" }, + { 17, 19, "noReportPeriodicity" }, + { 18, 21, "existingMeasurementID" }, + { 19, 26, "unknown-eNB-Measurement-ID" }, + { 20, 37, "measurement-temporarily-not-available" }, + { 21, 11, "unspecified" }, + { 22, 14, "load-balancing" }, + { 23, 21, "handover-optimisation" }, + { 24, 26, "value-out-of-allowed-range" }, + { 25, 27, "multiple-E-RAB-ID-instances" }, + { 26, 18, "switch-off-ongoing" }, + { 27, 23, "not-supported-QCI-value" }, + { 28, 40, "measurement-not-supported-for-the-object" }, + { 29, 17, "tDCoverall-expiry" }, + { 30, 14, "tDCprep-expiry" }, + { 31, 34, "action-desirable-for-radio-reasons" }, + { 32, 11, "reduce-load" }, + { 33, 21, "resource-optimisation" }, + { 34, 20, "time-critical-action" }, + { 35, 18, "target-not-allowed" }, + { 36, 28, "no-radio-resources-available" }, + { 37, 23, "invalid-QoS-combination" }, + { 38, 35, "encryption-algorithms-not-aupported" }, + { 39, 19, "procedure-cancelled" }, + { 40, 11, "rRM-purpose" }, + { 41, 21, "improve-user-bit-rate" }, + { 42, 15, "user-inactivity" }, + { 43, 29, "radio-connection-with-UE-lost" }, + { 44, 40, "failure-in-the-radio-interface-procedure" }, + { 45, 27, "bearer-option-not-supported" }, + { 46, 12, "mCG-Mobility" }, + { 47, 12, "sCG-Mobility" }, + { 48, 23, "count-reaches-max-value" }, + { 49, 29, "unknown-old-en-gNB-UE-X2AP-ID" }, + { 50, 13, "pDCP-Overload" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRadioNetwork_enum2value_1[] = { + 31, /* action-desirable-for-radio-reasons(31) */ + 45, /* bearer-option-not-supported(45) */ + 11, /* cell-not-available(11) */ + 48, /* count-reaches-max-value(48) */ + 38, /* encryption-algorithms-not-aupported(38) */ + 15, /* encryption-and-or-integrity-protection-algorithms-not-supported(15) */ + 18, /* existingMeasurementID(18) */ + 44, /* failure-in-the-radio-interface-procedure(44) */ + 0, /* handover-desirable-for-radio-reasons(0) */ + 23, /* handover-optimisation(23) */ + 8, /* ho-target-not-allowed(8) */ + 41, /* improve-user-bit-rate(41) */ + 13, /* invalid-MME-GroupID(13) */ + 37, /* invalid-QoS-combination(37) */ + 22, /* load-balancing(22) */ + 46, /* mCG-Mobility(46) */ + 28, /* measurement-not-supported-for-the-object(28) */ + 20, /* measurement-temporarily-not-available(20) */ + 25, /* multiple-E-RAB-ID-instances(25) */ + 36, /* no-radio-resources-available(36) */ + 12, /* no-radio-resources-available-in-target-cell(12) */ + 17, /* noReportPeriodicity(17) */ + 27, /* not-supported-QCI-value(27) */ + 50, /* pDCP-Overload(50) */ + 4, /* partial-handover(4) */ + 39, /* procedure-cancelled(39) */ + 40, /* rRM-purpose(40) */ + 43, /* radio-connection-with-UE-lost(43) */ + 32, /* reduce-load(32) */ + 3, /* reduce-load-in-serving-cell(3) */ + 16, /* reportCharacteristicsEmpty(16) */ + 33, /* resource-optimisation(33) */ + 2, /* resource-optimisation-handover(2) */ + 47, /* sCG-Mobility(47) */ + 26, /* switch-off-ongoing(26) */ + 29, /* tDCoverall-expiry(29) */ + 30, /* tDCprep-expiry(30) */ + 35, /* target-not-allowed(35) */ + 34, /* time-critical-action(34) */ + 1, /* time-critical-handover(1) */ + 10, /* trelocprep-expiry(10) */ + 9, /* tx2relocoverall-expiry(9) */ + 14, /* unknown-MME-Code(14) */ + 19, /* unknown-eNB-Measurement-ID(19) */ + 5, /* unknown-new-eNB-UE-X2AP-ID(5) */ + 6, /* unknown-old-eNB-UE-X2AP-ID(6) */ + 49, /* unknown-old-en-gNB-UE-X2AP-ID(49) */ + 7, /* unknown-pair-of-UE-X2AP-ID(7) */ + 21, /* unspecified(21) */ + 42, /* user-inactivity(42) */ + 24 /* value-out-of-allowed-range(24) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRadioNetwork_specs_1 = { + asn_MAP_CauseRadioNetwork_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRadioNetwork_enum2value_1, /* N => "tag"; sorted by N */ + 51, /* Number of elements in the maps */ + 23, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRadioNetwork_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRadioNetwork = { + "CauseRadioNetwork", + "CauseRadioNetwork", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRadioNetwork_tags_1, + sizeof(asn_DEF_CauseRadioNetwork_tags_1) + /sizeof(asn_DEF_CauseRadioNetwork_tags_1[0]), /* 1 */ + asn_DEF_CauseRadioNetwork_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRadioNetwork_tags_1) + /sizeof(asn_DEF_CauseRadioNetwork_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRadioNetwork_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRadioNetwork_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.h new file mode 100644 index 0000000..7ab7f90 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseRadioNetwork.h @@ -0,0 +1,121 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CauseRadioNetwork_H_ +#define _CauseRadioNetwork_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRadioNetwork { + CauseRadioNetwork_handover_desirable_for_radio_reasons = 0, + CauseRadioNetwork_time_critical_handover = 1, + CauseRadioNetwork_resource_optimisation_handover = 2, + CauseRadioNetwork_reduce_load_in_serving_cell = 3, + CauseRadioNetwork_partial_handover = 4, + CauseRadioNetwork_unknown_new_eNB_UE_X2AP_ID = 5, + CauseRadioNetwork_unknown_old_eNB_UE_X2AP_ID = 6, + CauseRadioNetwork_unknown_pair_of_UE_X2AP_ID = 7, + CauseRadioNetwork_ho_target_not_allowed = 8, + CauseRadioNetwork_tx2relocoverall_expiry = 9, + CauseRadioNetwork_trelocprep_expiry = 10, + CauseRadioNetwork_cell_not_available = 11, + CauseRadioNetwork_no_radio_resources_available_in_target_cell = 12, + CauseRadioNetwork_invalid_MME_GroupID = 13, + CauseRadioNetwork_unknown_MME_Code = 14, + CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported = 15, + CauseRadioNetwork_reportCharacteristicsEmpty = 16, + CauseRadioNetwork_noReportPeriodicity = 17, + CauseRadioNetwork_existingMeasurementID = 18, + CauseRadioNetwork_unknown_eNB_Measurement_ID = 19, + CauseRadioNetwork_measurement_temporarily_not_available = 20, + CauseRadioNetwork_unspecified = 21, + /* + * Enumeration is extensible + */ + CauseRadioNetwork_load_balancing = 22, + CauseRadioNetwork_handover_optimisation = 23, + CauseRadioNetwork_value_out_of_allowed_range = 24, + CauseRadioNetwork_multiple_E_RAB_ID_instances = 25, + CauseRadioNetwork_switch_off_ongoing = 26, + CauseRadioNetwork_not_supported_QCI_value = 27, + CauseRadioNetwork_measurement_not_supported_for_the_object = 28, + CauseRadioNetwork_tDCoverall_expiry = 29, + CauseRadioNetwork_tDCprep_expiry = 30, + CauseRadioNetwork_action_desirable_for_radio_reasons = 31, + CauseRadioNetwork_reduce_load = 32, + CauseRadioNetwork_resource_optimisation = 33, + CauseRadioNetwork_time_critical_action = 34, + CauseRadioNetwork_target_not_allowed = 35, + CauseRadioNetwork_no_radio_resources_available = 36, + CauseRadioNetwork_invalid_QoS_combination = 37, + CauseRadioNetwork_encryption_algorithms_not_aupported = 38, + CauseRadioNetwork_procedure_cancelled = 39, + CauseRadioNetwork_rRM_purpose = 40, + CauseRadioNetwork_improve_user_bit_rate = 41, + CauseRadioNetwork_user_inactivity = 42, + CauseRadioNetwork_radio_connection_with_UE_lost = 43, + CauseRadioNetwork_failure_in_the_radio_interface_procedure = 44, + CauseRadioNetwork_bearer_option_not_supported = 45, + CauseRadioNetwork_mCG_Mobility = 46, + CauseRadioNetwork_sCG_Mobility = 47, + CauseRadioNetwork_count_reaches_max_value = 48, + CauseRadioNetwork_unknown_old_en_gNB_UE_X2AP_ID = 49, + CauseRadioNetwork_pDCP_Overload = 50 +} e_CauseRadioNetwork; + +/* CauseRadioNetwork */ +typedef long CauseRadioNetwork_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRadioNetwork_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRadioNetwork; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRadioNetwork_specs_1; +asn_struct_free_f CauseRadioNetwork_free; +asn_struct_print_f CauseRadioNetwork_print; +asn_constr_check_f CauseRadioNetwork_constraint; +ber_type_decoder_f CauseRadioNetwork_decode_ber; +der_type_encoder_f CauseRadioNetwork_encode_der; +xer_type_decoder_f CauseRadioNetwork_decode_xer; +xer_type_encoder_f CauseRadioNetwork_encode_xer; +per_type_decoder_f CauseRadioNetwork_decode_uper; +per_type_encoder_f CauseRadioNetwork_encode_uper; +per_type_decoder_f CauseRadioNetwork_decode_aper; +per_type_encoder_f CauseRadioNetwork_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRadioNetwork_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.c new file mode 100644 index 0000000..e8364b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 30, "transport-resource-unavailable" }, + { 1, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 0, /* transport-resource-unavailable(0) */ + 1 /* unspecified(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.h new file mode 100644 index 0000000..2adff94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CauseTransport.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_transport_resource_unavailable = 0, + CauseTransport_unspecified = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.c new file mode 100644 index 0000000..8775b64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Cell-Size.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Cell_Size_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Cell_Size_value2enum_1[] = { + { 0, 9, "verysmall" }, + { 1, 5, "small" }, + { 2, 6, "medium" }, + { 3, 5, "large" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Cell_Size_enum2value_1[] = { + 3, /* large(3) */ + 2, /* medium(2) */ + 1, /* small(1) */ + 0 /* verysmall(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Cell_Size_specs_1 = { + asn_MAP_Cell_Size_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Cell_Size_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Cell_Size_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Cell_Size = { + "Cell-Size", + "Cell-Size", + &asn_OP_NativeEnumerated, + asn_DEF_Cell_Size_tags_1, + sizeof(asn_DEF_Cell_Size_tags_1) + /sizeof(asn_DEF_Cell_Size_tags_1[0]), /* 1 */ + asn_DEF_Cell_Size_tags_1, /* Same as above */ + sizeof(asn_DEF_Cell_Size_tags_1) + /sizeof(asn_DEF_Cell_Size_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Cell_Size_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Cell_Size_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.h new file mode 100644 index 0000000..813ac94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Cell-Size.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Cell_Size_H_ +#define _Cell_Size_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cell_Size { + Cell_Size_verysmall = 0, + Cell_Size_small = 1, + Cell_Size_medium = 2, + Cell_Size_large = 3 + /* + * Enumeration is extensible + */ +} e_Cell_Size; + +/* Cell-Size */ +typedef long Cell_Size_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Cell_Size_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Cell_Size; +extern const asn_INTEGER_specifics_t asn_SPC_Cell_Size_specs_1; +asn_struct_free_f Cell_Size_free; +asn_struct_print_f Cell_Size_print; +asn_constr_check_f Cell_Size_constraint; +ber_type_decoder_f Cell_Size_decode_ber; +der_type_encoder_f Cell_Size_encode_der; +xer_type_decoder_f Cell_Size_decode_xer; +xer_type_encoder_f Cell_Size_encode_xer; +per_type_decoder_f Cell_Size_decode_uper; +per_type_encoder_f Cell_Size_encode_uper; +per_type_decoder_f Cell_Size_decode_aper; +per_type_encoder_f Cell_Size_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cell_Size_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.c new file mode 100644 index 0000000..7edd26b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellActivationFailure.h" + +static asn_TYPE_member_t asn_MBR_CellActivationFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P41, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellActivationFailure_specs_1 = { + sizeof(struct CellActivationFailure), + offsetof(struct CellActivationFailure, _asn_ctx), + asn_MAP_CellActivationFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationFailure = { + "CellActivationFailure", + "CellActivationFailure", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationFailure_tags_1, + sizeof(asn_DEF_CellActivationFailure_tags_1) + /sizeof(asn_DEF_CellActivationFailure_tags_1[0]), /* 1 */ + asn_DEF_CellActivationFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_CellActivationFailure_tags_1) + /sizeof(asn_DEF_CellActivationFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationFailure_1, + 1, /* Elements count */ + &asn_SPC_CellActivationFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.h new file mode 100644 index 0000000..54ad738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellActivationFailure_H_ +#define _CellActivationFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellActivationFailure */ +typedef struct CellActivationFailure { + ProtocolIE_Container_119P41_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellActivationFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellActivationFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.c new file mode 100644 index 0000000..60598bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellActivationRequest.h" + +static asn_TYPE_member_t asn_MBR_CellActivationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P39, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellActivationRequest_specs_1 = { + sizeof(struct CellActivationRequest), + offsetof(struct CellActivationRequest, _asn_ctx), + asn_MAP_CellActivationRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationRequest = { + "CellActivationRequest", + "CellActivationRequest", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationRequest_tags_1, + sizeof(asn_DEF_CellActivationRequest_tags_1) + /sizeof(asn_DEF_CellActivationRequest_tags_1[0]), /* 1 */ + asn_DEF_CellActivationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_CellActivationRequest_tags_1) + /sizeof(asn_DEF_CellActivationRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationRequest_1, + 1, /* Elements count */ + &asn_SPC_CellActivationRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.h new file mode 100644 index 0000000..79448c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellActivationRequest_H_ +#define _CellActivationRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellActivationRequest */ +typedef struct CellActivationRequest { + ProtocolIE_Container_119P39_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellActivationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellActivationRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.c new file mode 100644 index 0000000..05fc371 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellActivationResponse.h" + +static asn_TYPE_member_t asn_MBR_CellActivationResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P40, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellActivationResponse_specs_1 = { + sizeof(struct CellActivationResponse), + offsetof(struct CellActivationResponse, _asn_ctx), + asn_MAP_CellActivationResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationResponse = { + "CellActivationResponse", + "CellActivationResponse", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationResponse_tags_1, + sizeof(asn_DEF_CellActivationResponse_tags_1) + /sizeof(asn_DEF_CellActivationResponse_tags_1[0]), /* 1 */ + asn_DEF_CellActivationResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_CellActivationResponse_tags_1) + /sizeof(asn_DEF_CellActivationResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationResponse_1, + 1, /* Elements count */ + &asn_SPC_CellActivationResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.h new file mode 100644 index 0000000..cc84201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellActivationResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellActivationResponse_H_ +#define _CellActivationResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellActivationResponse */ +typedef struct CellActivationResponse { + ProtocolIE_Container_119P40_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellActivationResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellActivationResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.c new file mode 100644 index 0000000..2e183d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.c @@ -0,0 +1,127 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellAssistanceInformation.h" + +#include "Limited-list.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_full_list_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CellAssistanceInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_full_list_value2enum_3[] = { + { 0, 16, "allServedNRcells" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_full_list_enum2value_3[] = { + 0 /* allServedNRcells(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_full_list_specs_3 = { + asn_MAP_full_list_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_full_list_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_full_list_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_full_list_3 = { + "full-list", + "full-list", + &asn_OP_NativeEnumerated, + asn_DEF_full_list_tags_3, + sizeof(asn_DEF_full_list_tags_3) + /sizeof(asn_DEF_full_list_tags_3[0]) - 1, /* 1 */ + asn_DEF_full_list_tags_3, /* Same as above */ + sizeof(asn_DEF_full_list_tags_3) + /sizeof(asn_DEF_full_list_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_full_list_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_full_list_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CellAssistanceInformation_1[] = { + { ATF_POINTER, 0, offsetof(struct CellAssistanceInformation, choice.limited_list), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Limited_list, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "limited-list" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellAssistanceInformation, choice.full_list), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_full_list_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "full-list" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_CellAssistanceInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* limited-list */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* full-list */ +}; +static asn_CHOICE_specifics_t asn_SPC_CellAssistanceInformation_specs_1 = { + sizeof(struct CellAssistanceInformation), + offsetof(struct CellAssistanceInformation, _asn_ctx), + offsetof(struct CellAssistanceInformation, present), + sizeof(((struct CellAssistanceInformation *)0)->present), + asn_MAP_CellAssistanceInformation_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CellAssistanceInformation = { + "CellAssistanceInformation", + "CellAssistanceInformation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_CellAssistanceInformation_constr_1, CHOICE_constraint }, + asn_MBR_CellAssistanceInformation_1, + 2, /* Elements count */ + &asn_SPC_CellAssistanceInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.h new file mode 100644 index 0000000..987c42e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellAssistanceInformation.h @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellAssistanceInformation_H_ +#define _CellAssistanceInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CellAssistanceInformation_PR { + CellAssistanceInformation_PR_NOTHING, /* No components present */ + CellAssistanceInformation_PR_limited_list, + CellAssistanceInformation_PR_full_list + /* Extensions may appear below */ + +} CellAssistanceInformation_PR; +typedef enum CellAssistanceInformation__full_list { + CellAssistanceInformation__full_list_allServedNRcells = 0 + /* + * Enumeration is extensible + */ +} e_CellAssistanceInformation__full_list; + +/* Forward declarations */ +struct Limited_list; + +/* CellAssistanceInformation */ +typedef struct CellAssistanceInformation { + CellAssistanceInformation_PR present; + union CellAssistanceInformation_u { + struct Limited_list *limited_list; + long full_list; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellAssistanceInformation_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_full_list_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CellAssistanceInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellAssistanceInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.c new file mode 100644 index 0000000..84eba09 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellBasedMDT.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CellBasedMDT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellBasedMDT, cellIdListforMDT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdListforMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellIdListforMDT" + }, + { ATF_POINTER, 1, offsetof(struct CellBasedMDT, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P112, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellBasedMDT_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellBasedMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellBasedMDT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdListforMDT */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellBasedMDT_specs_1 = { + sizeof(struct CellBasedMDT), + offsetof(struct CellBasedMDT, _asn_ctx), + asn_MAP_CellBasedMDT_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellBasedMDT_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellBasedMDT = { + "CellBasedMDT", + "CellBasedMDT", + &asn_OP_SEQUENCE, + asn_DEF_CellBasedMDT_tags_1, + sizeof(asn_DEF_CellBasedMDT_tags_1) + /sizeof(asn_DEF_CellBasedMDT_tags_1[0]), /* 1 */ + asn_DEF_CellBasedMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_CellBasedMDT_tags_1) + /sizeof(asn_DEF_CellBasedMDT_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellBasedMDT_1, + 2, /* Elements count */ + &asn_SPC_CellBasedMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.h new file mode 100644 index 0000000..d9a7a0e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedMDT.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellBasedMDT_H_ +#define _CellBasedMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CellIdListforMDT.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CellBasedMDT */ +typedef struct CellBasedMDT { + CellIdListforMDT_t cellIdListforMDT; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellBasedMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellBasedMDT; +extern asn_SEQUENCE_specifics_t asn_SPC_CellBasedMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_CellBasedMDT_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellBasedMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.c new file mode 100644 index 0000000..6faf135 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellBasedQMC.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CellBasedQMC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellBasedQMC, cellIdListforQMC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdListforQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellIdListforQMC" + }, + { ATF_POINTER, 1, offsetof(struct CellBasedQMC, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P113, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellBasedQMC_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellBasedQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellBasedQMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdListforQMC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellBasedQMC_specs_1 = { + sizeof(struct CellBasedQMC), + offsetof(struct CellBasedQMC, _asn_ctx), + asn_MAP_CellBasedQMC_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellBasedQMC_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellBasedQMC = { + "CellBasedQMC", + "CellBasedQMC", + &asn_OP_SEQUENCE, + asn_DEF_CellBasedQMC_tags_1, + sizeof(asn_DEF_CellBasedQMC_tags_1) + /sizeof(asn_DEF_CellBasedQMC_tags_1[0]), /* 1 */ + asn_DEF_CellBasedQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_CellBasedQMC_tags_1) + /sizeof(asn_DEF_CellBasedQMC_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellBasedQMC_1, + 2, /* Elements count */ + &asn_SPC_CellBasedQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.h new file mode 100644 index 0000000..dc35c7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellBasedQMC.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellBasedQMC_H_ +#define _CellBasedQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CellIdListforQMC.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CellBasedQMC */ +typedef struct CellBasedQMC { + CellIdListforQMC_t cellIdListforQMC; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellBasedQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellBasedQMC; +extern asn_SEQUENCE_specifics_t asn_SPC_CellBasedQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_CellBasedQMC_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellBasedQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.c new file mode 100644 index 0000000..aea44bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellCapacityClassValue.h" + +int +CellCapacityClassValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CellCapacityClassValue_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 1, 100 } /* (1..100,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CellCapacityClassValue_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellCapacityClassValue = { + "CellCapacityClassValue", + "CellCapacityClassValue", + &asn_OP_NativeInteger, + asn_DEF_CellCapacityClassValue_tags_1, + sizeof(asn_DEF_CellCapacityClassValue_tags_1) + /sizeof(asn_DEF_CellCapacityClassValue_tags_1[0]), /* 1 */ + asn_DEF_CellCapacityClassValue_tags_1, /* Same as above */ + sizeof(asn_DEF_CellCapacityClassValue_tags_1) + /sizeof(asn_DEF_CellCapacityClassValue_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellCapacityClassValue_constr_1, CellCapacityClassValue_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.h new file mode 100644 index 0000000..63e554b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellCapacityClassValue.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellCapacityClassValue_H_ +#define _CellCapacityClassValue_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellCapacityClassValue */ +typedef long CellCapacityClassValue_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CellCapacityClassValue_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CellCapacityClassValue; +asn_struct_free_f CellCapacityClassValue_free; +asn_struct_print_f CellCapacityClassValue_print; +asn_constr_check_f CellCapacityClassValue_constraint; +ber_type_decoder_f CellCapacityClassValue_decode_ber; +der_type_encoder_f CellCapacityClassValue_encode_der; +xer_type_decoder_f CellCapacityClassValue_decode_xer; +xer_type_encoder_f CellCapacityClassValue_encode_xer; +per_type_decoder_f CellCapacityClassValue_decode_uper; +per_type_encoder_f CellCapacityClassValue_encode_uper; +per_type_decoder_f CellCapacityClassValue_decode_aper; +per_type_encoder_f CellCapacityClassValue_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellCapacityClassValue_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c new file mode 100644 index 0000000..040f7eb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellDeploymentStatusIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CellDeploymentStatusIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CellDeploymentStatusIndicator_value2enum_1[] = { + { 0, 23, "pre-change-notification" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CellDeploymentStatusIndicator_enum2value_1[] = { + 0 /* pre-change-notification(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CellDeploymentStatusIndicator_specs_1 = { + asn_MAP_CellDeploymentStatusIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CellDeploymentStatusIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CellDeploymentStatusIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellDeploymentStatusIndicator = { + "CellDeploymentStatusIndicator", + "CellDeploymentStatusIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_CellDeploymentStatusIndicator_tags_1, + sizeof(asn_DEF_CellDeploymentStatusIndicator_tags_1) + /sizeof(asn_DEF_CellDeploymentStatusIndicator_tags_1[0]), /* 1 */ + asn_DEF_CellDeploymentStatusIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_CellDeploymentStatusIndicator_tags_1) + /sizeof(asn_DEF_CellDeploymentStatusIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellDeploymentStatusIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CellDeploymentStatusIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h new file mode 100644 index 0000000..ea84428 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellDeploymentStatusIndicator.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellDeploymentStatusIndicator_H_ +#define _CellDeploymentStatusIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CellDeploymentStatusIndicator { + CellDeploymentStatusIndicator_pre_change_notification = 0 + /* + * Enumeration is extensible + */ +} e_CellDeploymentStatusIndicator; + +/* CellDeploymentStatusIndicator */ +typedef long CellDeploymentStatusIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CellDeploymentStatusIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CellDeploymentStatusIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_CellDeploymentStatusIndicator_specs_1; +asn_struct_free_f CellDeploymentStatusIndicator_free; +asn_struct_print_f CellDeploymentStatusIndicator_print; +asn_constr_check_f CellDeploymentStatusIndicator_constraint; +ber_type_decoder_f CellDeploymentStatusIndicator_decode_ber; +der_type_encoder_f CellDeploymentStatusIndicator_encode_der; +xer_type_decoder_f CellDeploymentStatusIndicator_decode_xer; +xer_type_encoder_f CellDeploymentStatusIndicator_encode_xer; +per_type_decoder_f CellDeploymentStatusIndicator_decode_uper; +per_type_encoder_f CellDeploymentStatusIndicator_encode_uper; +per_type_decoder_f CellDeploymentStatusIndicator_decode_aper; +per_type_encoder_f CellDeploymentStatusIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellDeploymentStatusIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.c new file mode 100644 index 0000000..1d3e073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellIdListforMDT.h" + +#include "ECGI.h" +asn_per_constraints_t asn_PER_type_CellIdListforMDT_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CellIdListforMDT_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellIdListforMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CellIdListforMDT_specs_1 = { + sizeof(struct CellIdListforMDT), + offsetof(struct CellIdListforMDT, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellIdListforMDT = { + "CellIdListforMDT", + "CellIdListforMDT", + &asn_OP_SEQUENCE_OF, + asn_DEF_CellIdListforMDT_tags_1, + sizeof(asn_DEF_CellIdListforMDT_tags_1) + /sizeof(asn_DEF_CellIdListforMDT_tags_1[0]), /* 1 */ + asn_DEF_CellIdListforMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_CellIdListforMDT_tags_1) + /sizeof(asn_DEF_CellIdListforMDT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellIdListforMDT_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CellIdListforMDT_1, + 1, /* Single element */ + &asn_SPC_CellIdListforMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.h new file mode 100644 index 0000000..2419753 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforMDT.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellIdListforMDT_H_ +#define _CellIdListforMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* CellIdListforMDT */ +typedef struct CellIdListforMDT { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellIdListforMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellIdListforMDT; +extern asn_SET_OF_specifics_t asn_SPC_CellIdListforMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_CellIdListforMDT_1[1]; +extern asn_per_constraints_t asn_PER_type_CellIdListforMDT_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellIdListforMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.c new file mode 100644 index 0000000..0786f57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellIdListforQMC.h" + +#include "ECGI.h" +asn_per_constraints_t asn_PER_type_CellIdListforQMC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CellIdListforQMC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellIdListforQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CellIdListforQMC_specs_1 = { + sizeof(struct CellIdListforQMC), + offsetof(struct CellIdListforQMC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellIdListforQMC = { + "CellIdListforQMC", + "CellIdListforQMC", + &asn_OP_SEQUENCE_OF, + asn_DEF_CellIdListforQMC_tags_1, + sizeof(asn_DEF_CellIdListforQMC_tags_1) + /sizeof(asn_DEF_CellIdListforQMC_tags_1[0]), /* 1 */ + asn_DEF_CellIdListforQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_CellIdListforQMC_tags_1) + /sizeof(asn_DEF_CellIdListforQMC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellIdListforQMC_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CellIdListforQMC_1, + 1, /* Single element */ + &asn_SPC_CellIdListforQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.h new file mode 100644 index 0000000..88e1e7d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellIdListforQMC.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellIdListforQMC_H_ +#define _CellIdListforQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* CellIdListforQMC */ +typedef struct CellIdListforQMC { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellIdListforQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellIdListforQMC; +extern asn_SET_OF_specifics_t asn_SPC_CellIdListforQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_CellIdListforQMC_1[1]; +extern asn_per_constraints_t asn_PER_type_CellIdListforQMC_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellIdListforQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.c new file mode 100644 index 0000000..b74f6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellInformation-Item.h" + +#include "UL-InterferenceOverloadIndication.h" +#include "UL-HighInterferenceIndicationInfo.h" +#include "RelativeNarrowbandTxPower.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_CellInformation_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item, cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-ID" + }, + { ATF_POINTER, 4, offsetof(struct CellInformation_Item, ul_InterferenceOverloadIndication), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_InterferenceOverloadIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-InterferenceOverloadIndication" + }, + { ATF_POINTER, 3, offsetof(struct CellInformation_Item, ul_HighInterferenceIndicationInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_HighInterferenceIndicationInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-HighInterferenceIndicationInfo" + }, + { ATF_POINTER, 2, offsetof(struct CellInformation_Item, relativeNarrowbandTxPower), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RelativeNarrowbandTxPower, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "relativeNarrowbandTxPower" + }, + { ATF_POINTER, 1, offsetof(struct CellInformation_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellInformation_Item_oms_1[] = { 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CellInformation_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellInformation_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-InterferenceOverloadIndication */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-HighInterferenceIndicationInfo */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* relativeNarrowbandTxPower */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellInformation_Item_specs_1 = { + sizeof(struct CellInformation_Item), + offsetof(struct CellInformation_Item, _asn_ctx), + asn_MAP_CellInformation_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CellInformation_Item_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInformation_Item = { + "CellInformation-Item", + "CellInformation-Item", + &asn_OP_SEQUENCE, + asn_DEF_CellInformation_Item_tags_1, + sizeof(asn_DEF_CellInformation_Item_tags_1) + /sizeof(asn_DEF_CellInformation_Item_tags_1[0]), /* 1 */ + asn_DEF_CellInformation_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInformation_Item_tags_1) + /sizeof(asn_DEF_CellInformation_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellInformation_Item_1, + 5, /* Elements count */ + &asn_SPC_CellInformation_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.h new file mode 100644 index 0000000..d276c54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellInformation_Item_H_ +#define _CellInformation_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UL_InterferenceOverloadIndication; +struct UL_HighInterferenceIndicationInfo; +struct RelativeNarrowbandTxPower; +struct ProtocolExtensionContainer; + +/* CellInformation-Item */ +typedef struct CellInformation_Item { + ECGI_t cell_ID; + struct UL_InterferenceOverloadIndication *ul_InterferenceOverloadIndication; /* OPTIONAL */ + struct UL_HighInterferenceIndicationInfo *ul_HighInterferenceIndicationInfo; /* OPTIONAL */ + struct RelativeNarrowbandTxPower *relativeNarrowbandTxPower; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInformation_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInformation_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInformation_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.c new file mode 100644 index 0000000..3b09720 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellInformation-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_CellInformation_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellInformation_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellInformation_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellInformation_List_specs_1 = { + sizeof(struct CellInformation_List), + offsetof(struct CellInformation_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInformation_List = { + "CellInformation-List", + "CellInformation-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CellInformation_List_tags_1, + sizeof(asn_DEF_CellInformation_List_tags_1) + /sizeof(asn_DEF_CellInformation_List_tags_1[0]), /* 1 */ + asn_DEF_CellInformation_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInformation_List_tags_1) + /sizeof(asn_DEF_CellInformation_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellInformation_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CellInformation_List_1, + 1, /* Single element */ + &asn_SPC_CellInformation_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.h new file mode 100644 index 0000000..c71dece --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellInformation-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellInformation_List_H_ +#define _CellInformation_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* CellInformation-List */ +typedef struct CellInformation_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInformation_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInformation_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInformation_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.c new file mode 100644 index 0000000..9389595 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellMeasurementResult-Item.h" + +#include "HWLoadIndicator.h" +#include "S1TNLLoadIndicator.h" +#include "RadioResourceStatus.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_CellMeasurementResult_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item, cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-ID" + }, + { ATF_POINTER, 4, offsetof(struct CellMeasurementResult_Item, hWLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HWLoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "hWLoadIndicator" + }, + { ATF_POINTER, 3, offsetof(struct CellMeasurementResult_Item, s1TNLLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_S1TNLLoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1TNLLoadIndicator" + }, + { ATF_POINTER, 2, offsetof(struct CellMeasurementResult_Item, radioResourceStatus), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "radioResourceStatus" + }, + { ATF_POINTER, 1, offsetof(struct CellMeasurementResult_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellMeasurementResult_Item_oms_1[] = { 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CellMeasurementResult_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellMeasurementResult_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hWLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* s1TNLLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* radioResourceStatus */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellMeasurementResult_Item_specs_1 = { + sizeof(struct CellMeasurementResult_Item), + offsetof(struct CellMeasurementResult_Item, _asn_ctx), + asn_MAP_CellMeasurementResult_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CellMeasurementResult_Item_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_Item = { + "CellMeasurementResult-Item", + "CellMeasurementResult-Item", + &asn_OP_SEQUENCE, + asn_DEF_CellMeasurementResult_Item_tags_1, + sizeof(asn_DEF_CellMeasurementResult_Item_tags_1) + /sizeof(asn_DEF_CellMeasurementResult_Item_tags_1[0]), /* 1 */ + asn_DEF_CellMeasurementResult_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CellMeasurementResult_Item_tags_1) + /sizeof(asn_DEF_CellMeasurementResult_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellMeasurementResult_Item_1, + 5, /* Elements count */ + &asn_SPC_CellMeasurementResult_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.h new file mode 100644 index 0000000..3e1117e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellMeasurementResult_Item_H_ +#define _CellMeasurementResult_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HWLoadIndicator; +struct S1TNLLoadIndicator; +struct RadioResourceStatus; +struct ProtocolExtensionContainer; + +/* CellMeasurementResult-Item */ +typedef struct CellMeasurementResult_Item { + ECGI_t cell_ID; + struct HWLoadIndicator *hWLoadIndicator; /* OPTIONAL */ + struct S1TNLLoadIndicator *s1TNLLoadIndicator; /* OPTIONAL */ + struct RadioResourceStatus *radioResourceStatus; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellMeasurementResult_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellMeasurementResult_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.c new file mode 100644 index 0000000..33fcdb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellMeasurementResult-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_CellMeasurementResult_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellMeasurementResult_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellMeasurementResult_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellMeasurementResult_List_specs_1 = { + sizeof(struct CellMeasurementResult_List), + offsetof(struct CellMeasurementResult_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_List = { + "CellMeasurementResult-List", + "CellMeasurementResult-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CellMeasurementResult_List_tags_1, + sizeof(asn_DEF_CellMeasurementResult_List_tags_1) + /sizeof(asn_DEF_CellMeasurementResult_List_tags_1[0]), /* 1 */ + asn_DEF_CellMeasurementResult_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CellMeasurementResult_List_tags_1) + /sizeof(asn_DEF_CellMeasurementResult_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellMeasurementResult_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CellMeasurementResult_List_1, + 1, /* Single element */ + &asn_SPC_CellMeasurementResult_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.h new file mode 100644 index 0000000..effedc6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellMeasurementResult-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellMeasurementResult_List_H_ +#define _CellMeasurementResult_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* CellMeasurementResult-List */ +typedef struct CellMeasurementResult_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellMeasurementResult_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellMeasurementResult_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.c new file mode 100644 index 0000000..edf80c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellReplacingInfo.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CellReplacingInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellReplacingInfo, replacingCellsList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReplacingCellsList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "replacingCellsList" + }, + { ATF_POINTER, 1, offsetof(struct CellReplacingInfo, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P114, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellReplacingInfo_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellReplacingInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellReplacingInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* replacingCellsList */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellReplacingInfo_specs_1 = { + sizeof(struct CellReplacingInfo), + offsetof(struct CellReplacingInfo, _asn_ctx), + asn_MAP_CellReplacingInfo_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellReplacingInfo_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellReplacingInfo = { + "CellReplacingInfo", + "CellReplacingInfo", + &asn_OP_SEQUENCE, + asn_DEF_CellReplacingInfo_tags_1, + sizeof(asn_DEF_CellReplacingInfo_tags_1) + /sizeof(asn_DEF_CellReplacingInfo_tags_1[0]), /* 1 */ + asn_DEF_CellReplacingInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_CellReplacingInfo_tags_1) + /sizeof(asn_DEF_CellReplacingInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellReplacingInfo_1, + 2, /* Elements count */ + &asn_SPC_CellReplacingInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.h new file mode 100644 index 0000000..a346253 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReplacingInfo.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellReplacingInfo_H_ +#define _CellReplacingInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ReplacingCellsList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CellReplacingInfo */ +typedef struct CellReplacingInfo { + ReplacingCellsList_t replacingCellsList; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellReplacingInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellReplacingInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_CellReplacingInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_CellReplacingInfo_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellReplacingInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.c new file mode 100644 index 0000000..02b30e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellReportingIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CellReportingIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CellReportingIndicator_value2enum_1[] = { + { 0, 12, "stop-request" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CellReportingIndicator_enum2value_1[] = { + 0 /* stop-request(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CellReportingIndicator_specs_1 = { + asn_MAP_CellReportingIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CellReportingIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CellReportingIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellReportingIndicator = { + "CellReportingIndicator", + "CellReportingIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_CellReportingIndicator_tags_1, + sizeof(asn_DEF_CellReportingIndicator_tags_1) + /sizeof(asn_DEF_CellReportingIndicator_tags_1[0]), /* 1 */ + asn_DEF_CellReportingIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_CellReportingIndicator_tags_1) + /sizeof(asn_DEF_CellReportingIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellReportingIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CellReportingIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.h new file mode 100644 index 0000000..73585c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellReportingIndicator.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellReportingIndicator_H_ +#define _CellReportingIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CellReportingIndicator { + CellReportingIndicator_stop_request = 0 + /* + * Enumeration is extensible + */ +} e_CellReportingIndicator; + +/* CellReportingIndicator */ +typedef long CellReportingIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CellReportingIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CellReportingIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_CellReportingIndicator_specs_1; +asn_struct_free_f CellReportingIndicator_free; +asn_struct_print_f CellReportingIndicator_print; +asn_constr_check_f CellReportingIndicator_constraint; +ber_type_decoder_f CellReportingIndicator_decode_ber; +der_type_encoder_f CellReportingIndicator_encode_der; +xer_type_decoder_f CellReportingIndicator_decode_xer; +xer_type_encoder_f CellReportingIndicator_encode_xer; +per_type_decoder_f CellReportingIndicator_decode_uper; +per_type_encoder_f CellReportingIndicator_encode_uper; +per_type_decoder_f CellReportingIndicator_decode_aper; +per_type_encoder_f CellReportingIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellReportingIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.c new file mode 100644 index 0000000..1a3f1e4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellToReport-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_CellToReport_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_Item, cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-ID" + }, + { ATF_POINTER, 1, offsetof(struct CellToReport_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellToReport_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellToReport_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellToReport_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellToReport_Item_specs_1 = { + sizeof(struct CellToReport_Item), + offsetof(struct CellToReport_Item, _asn_ctx), + asn_MAP_CellToReport_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellToReport_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellToReport_Item = { + "CellToReport-Item", + "CellToReport-Item", + &asn_OP_SEQUENCE, + asn_DEF_CellToReport_Item_tags_1, + sizeof(asn_DEF_CellToReport_Item_tags_1) + /sizeof(asn_DEF_CellToReport_Item_tags_1[0]), /* 1 */ + asn_DEF_CellToReport_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CellToReport_Item_tags_1) + /sizeof(asn_DEF_CellToReport_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellToReport_Item_1, + 2, /* Elements count */ + &asn_SPC_CellToReport_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.h new file mode 100644 index 0000000..22ec640 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-Item.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellToReport_Item_H_ +#define _CellToReport_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CellToReport-Item */ +typedef struct CellToReport_Item { + ECGI_t cell_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellToReport_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellToReport_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellToReport_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.c new file mode 100644 index 0000000..8712c4c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellToReport-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_CellToReport_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellToReport_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellToReport_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellToReport_List_specs_1 = { + sizeof(struct CellToReport_List), + offsetof(struct CellToReport_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellToReport_List = { + "CellToReport-List", + "CellToReport-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CellToReport_List_tags_1, + sizeof(asn_DEF_CellToReport_List_tags_1) + /sizeof(asn_DEF_CellToReport_List_tags_1[0]), /* 1 */ + asn_DEF_CellToReport_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CellToReport_List_tags_1) + /sizeof(asn_DEF_CellToReport_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CellToReport_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CellToReport_List_1, + 1, /* Single element */ + &asn_SPC_CellToReport_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.h new file mode 100644 index 0000000..84f97b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellToReport-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellToReport_List_H_ +#define _CellToReport_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* CellToReport-List */ +typedef struct CellToReport_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellToReport_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellToReport_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellToReport_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.c new file mode 100644 index 0000000..59a7ae9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CellType.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CellType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellType, cell_Size), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Cell_Size, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-Size" + }, + { ATF_POINTER, 1, offsetof(struct CellType, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P115, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CellType_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-Size */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellType_specs_1 = { + sizeof(struct CellType), + offsetof(struct CellType, _asn_ctx), + asn_MAP_CellType_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellType_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellType = { + "CellType", + "CellType", + &asn_OP_SEQUENCE, + asn_DEF_CellType_tags_1, + sizeof(asn_DEF_CellType_tags_1) + /sizeof(asn_DEF_CellType_tags_1[0]), /* 1 */ + asn_DEF_CellType_tags_1, /* Same as above */ + sizeof(asn_DEF_CellType_tags_1) + /sizeof(asn_DEF_CellType_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellType_1, + 2, /* Elements count */ + &asn_SPC_CellType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.h new file mode 100644 index 0000000..20523ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CellType.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CellType_H_ +#define _CellType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Cell-Size.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CellType */ +typedef struct CellType { + Cell_Size_t cell_Size; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellType; +extern asn_SEQUENCE_specifics_t asn_SPC_CellType_specs_1; +extern asn_TYPE_member_t asn_MBR_CellType_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.c new file mode 100644 index 0000000..f4b429a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoMPHypothesisSet.h" + +#include "CoMPHypothesisSetItem.h" +asn_per_constraints_t asn_PER_type_CoMPHypothesisSet_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CoMPHypothesisSet_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPHypothesisSetItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPHypothesisSet_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CoMPHypothesisSet_specs_1 = { + sizeof(struct CoMPHypothesisSet), + offsetof(struct CoMPHypothesisSet, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSet = { + "CoMPHypothesisSet", + "CoMPHypothesisSet", + &asn_OP_SEQUENCE_OF, + asn_DEF_CoMPHypothesisSet_tags_1, + sizeof(asn_DEF_CoMPHypothesisSet_tags_1) + /sizeof(asn_DEF_CoMPHypothesisSet_tags_1[0]), /* 1 */ + asn_DEF_CoMPHypothesisSet_tags_1, /* Same as above */ + sizeof(asn_DEF_CoMPHypothesisSet_tags_1) + /sizeof(asn_DEF_CoMPHypothesisSet_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CoMPHypothesisSet_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CoMPHypothesisSet_1, + 1, /* Single element */ + &asn_SPC_CoMPHypothesisSet_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.h new file mode 100644 index 0000000..71556dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSet.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoMPHypothesisSet_H_ +#define _CoMPHypothesisSet_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CoMPHypothesisSetItem; + +/* CoMPHypothesisSet */ +typedef struct CoMPHypothesisSet { + A_SEQUENCE_OF(struct CoMPHypothesisSetItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPHypothesisSet_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSet; +extern asn_SET_OF_specifics_t asn_SPC_CoMPHypothesisSet_specs_1; +extern asn_TYPE_member_t asn_MBR_CoMPHypothesisSet_1[1]; +extern asn_per_constraints_t asn_PER_type_CoMPHypothesisSet_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoMPHypothesisSet_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.c new file mode 100644 index 0000000..931d69a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.c @@ -0,0 +1,127 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoMPHypothesisSetItem.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_coMPHypothesis_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 4400)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_coMPHypothesis_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 13, 13, 6, 4400 } /* (SIZE(6..4400,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CoMPHypothesisSetItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPHypothesisSetItem, coMPCellID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "coMPCellID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPHypothesisSetItem, coMPHypothesis), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_coMPHypothesis_constr_3, memb_coMPHypothesis_constraint_1 }, + 0, 0, /* No default value */ + "coMPHypothesis" + }, + { ATF_POINTER, 1, offsetof(struct CoMPHypothesisSetItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P117, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CoMPHypothesisSetItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_CoMPHypothesisSetItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPHypothesisSetItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPCellID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coMPHypothesis */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPHypothesisSetItem_specs_1 = { + sizeof(struct CoMPHypothesisSetItem), + offsetof(struct CoMPHypothesisSetItem, _asn_ctx), + asn_MAP_CoMPHypothesisSetItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CoMPHypothesisSetItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSetItem = { + "CoMPHypothesisSetItem", + "CoMPHypothesisSetItem", + &asn_OP_SEQUENCE, + asn_DEF_CoMPHypothesisSetItem_tags_1, + sizeof(asn_DEF_CoMPHypothesisSetItem_tags_1) + /sizeof(asn_DEF_CoMPHypothesisSetItem_tags_1[0]), /* 1 */ + asn_DEF_CoMPHypothesisSetItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CoMPHypothesisSetItem_tags_1) + /sizeof(asn_DEF_CoMPHypothesisSetItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPHypothesisSetItem_1, + 3, /* Elements count */ + &asn_SPC_CoMPHypothesisSetItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.h new file mode 100644 index 0000000..6768c8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPHypothesisSetItem.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoMPHypothesisSetItem_H_ +#define _CoMPHypothesisSetItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CoMPHypothesisSetItem */ +typedef struct CoMPHypothesisSetItem { + ECGI_t coMPCellID; + BIT_STRING_t coMPHypothesis; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPHypothesisSetItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSetItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPHypothesisSetItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CoMPHypothesisSetItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoMPHypothesisSetItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.c new file mode 100644 index 0000000..00cdb93 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoMPInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CoMPInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformation, coMPInformationItem), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CoMPInformationItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "coMPInformationItem" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformation, coMPInformationStartTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CoMPInformationStartTime, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "coMPInformationStartTime" + }, + { ATF_POINTER, 1, offsetof(struct CoMPInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P118, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CoMPInformation_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_CoMPInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPInformationItem */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coMPInformationStartTime */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPInformation_specs_1 = { + sizeof(struct CoMPInformation), + offsetof(struct CoMPInformation, _asn_ctx), + asn_MAP_CoMPInformation_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CoMPInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformation = { + "CoMPInformation", + "CoMPInformation", + &asn_OP_SEQUENCE, + asn_DEF_CoMPInformation_tags_1, + sizeof(asn_DEF_CoMPInformation_tags_1) + /sizeof(asn_DEF_CoMPInformation_tags_1[0]), /* 1 */ + asn_DEF_CoMPInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_CoMPInformation_tags_1) + /sizeof(asn_DEF_CoMPInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPInformation_1, + 3, /* Elements count */ + &asn_SPC_CoMPInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.h new file mode 100644 index 0000000..5f952cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformation.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoMPInformation_H_ +#define _CoMPInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CoMPInformationItem.h" +#include "CoMPInformationStartTime.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CoMPInformation */ +typedef struct CoMPInformation { + CoMPInformationItem_t coMPInformationItem; + CoMPInformationStartTime_t coMPInformationStartTime; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_CoMPInformation_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoMPInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.c new file mode 100644 index 0000000..3575371 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.c @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoMPInformationItem.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_CoMPInformationItem_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationItem__Member, coMPHypothesisSet), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CoMPHypothesisSet, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "coMPHypothesisSet" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationItem__Member, benefitMetric), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BenefitMetric, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "benefitMetric" + }, + { ATF_POINTER, 1, offsetof(struct CoMPInformationItem__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P119, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPHypothesisSet */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* benefitMetric */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CoMPInformationItem__Member), + offsetof(struct CoMPInformationItem__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPInformationItem_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPInformationItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CoMPInformationItem_specs_1 = { + sizeof(struct CoMPInformationItem), + offsetof(struct CoMPInformationItem, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformationItem = { + "CoMPInformationItem", + "CoMPInformationItem", + &asn_OP_SEQUENCE_OF, + asn_DEF_CoMPInformationItem_tags_1, + sizeof(asn_DEF_CoMPInformationItem_tags_1) + /sizeof(asn_DEF_CoMPInformationItem_tags_1[0]), /* 1 */ + asn_DEF_CoMPInformationItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CoMPInformationItem_tags_1) + /sizeof(asn_DEF_CoMPInformationItem_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CoMPInformationItem_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CoMPInformationItem_1, + 1, /* Single element */ + &asn_SPC_CoMPInformationItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.h new file mode 100644 index 0000000..0f9c976 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationItem.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoMPInformationItem_H_ +#define _CoMPInformationItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "CoMPHypothesisSet.h" +#include "BenefitMetric.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CoMPInformationItem__Member { + CoMPHypothesisSet_t coMPHypothesisSet; + BenefitMetric_t benefitMetric; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationItem__Member; + +/* CoMPInformationItem */ +typedef struct CoMPInformationItem { + A_SEQUENCE_OF(CoMPInformationItem__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformationItem; +extern asn_SET_OF_specifics_t asn_SPC_CoMPInformationItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CoMPInformationItem_1[1]; +extern asn_per_constraints_t asn_PER_type_CoMPInformationItem_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoMPInformationItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.c new file mode 100644 index 0000000..fff2521 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.c @@ -0,0 +1,192 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoMPInformationStartTime.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_startSFN_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_startSubframeNumber_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 9)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_startSFN_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 0, 1023 } /* (0..1023,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_startSubframeNumber_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 9 } /* (0..9,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_CoMPInformationStartTime_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (SIZE(0..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationStartTime__Member, startSFN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_startSFN_constr_3, memb_startSFN_constraint_2 }, + 0, 0, /* No default value */ + "startSFN" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationStartTime__Member, startSubframeNumber), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_startSubframeNumber_constr_4, memb_startSubframeNumber_constraint_2 }, + 0, 0, /* No default value */ + "startSubframeNumber" + }, + { ATF_POINTER, 1, offsetof(struct CoMPInformationStartTime__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P120, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startSFN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* startSubframeNumber */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CoMPInformationStartTime__Member), + offsetof(struct CoMPInformationStartTime__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPInformationStartTime_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPInformationStartTime_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CoMPInformationStartTime_specs_1 = { + sizeof(struct CoMPInformationStartTime), + offsetof(struct CoMPInformationStartTime, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformationStartTime = { + "CoMPInformationStartTime", + "CoMPInformationStartTime", + &asn_OP_SEQUENCE_OF, + asn_DEF_CoMPInformationStartTime_tags_1, + sizeof(asn_DEF_CoMPInformationStartTime_tags_1) + /sizeof(asn_DEF_CoMPInformationStartTime_tags_1[0]), /* 1 */ + asn_DEF_CoMPInformationStartTime_tags_1, /* Same as above */ + sizeof(asn_DEF_CoMPInformationStartTime_tags_1) + /sizeof(asn_DEF_CoMPInformationStartTime_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CoMPInformationStartTime_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CoMPInformationStartTime_1, + 1, /* Single element */ + &asn_SPC_CoMPInformationStartTime_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.h new file mode 100644 index 0000000..c7c660b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoMPInformationStartTime.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoMPInformationStartTime_H_ +#define _CoMPInformationStartTime_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CoMPInformationStartTime__Member { + long startSFN; + long startSubframeNumber; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationStartTime__Member; + +/* CoMPInformationStartTime */ +typedef struct CoMPInformationStartTime { + A_SEQUENCE_OF(CoMPInformationStartTime__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationStartTime_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformationStartTime; +extern asn_SET_OF_specifics_t asn_SPC_CoMPInformationStartTime_specs_1; +extern asn_TYPE_member_t asn_MBR_CoMPInformationStartTime_1[1]; +extern asn_per_constraints_t asn_PER_type_CoMPInformationStartTime_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoMPInformationStartTime_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c new file mode 100644 index 0000000..a2239e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CompleteFailureCauseInformation-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_Item, cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_Item, measurementFailureCause_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementFailureCause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementFailureCause-List" + }, + { ATF_POINTER, 1, offsetof(struct CompleteFailureCauseInformation_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CompleteFailureCauseInformation_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_CompleteFailureCauseInformation_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompleteFailureCauseInformation_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measurementFailureCause-List */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CompleteFailureCauseInformation_Item_specs_1 = { + sizeof(struct CompleteFailureCauseInformation_Item), + offsetof(struct CompleteFailureCauseInformation_Item, _asn_ctx), + asn_MAP_CompleteFailureCauseInformation_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CompleteFailureCauseInformation_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_Item = { + "CompleteFailureCauseInformation-Item", + "CompleteFailureCauseInformation-Item", + &asn_OP_SEQUENCE, + asn_DEF_CompleteFailureCauseInformation_Item_tags_1, + sizeof(asn_DEF_CompleteFailureCauseInformation_Item_tags_1) + /sizeof(asn_DEF_CompleteFailureCauseInformation_Item_tags_1[0]), /* 1 */ + asn_DEF_CompleteFailureCauseInformation_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CompleteFailureCauseInformation_Item_tags_1) + /sizeof(asn_DEF_CompleteFailureCauseInformation_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompleteFailureCauseInformation_Item_1, + 3, /* Elements count */ + &asn_SPC_CompleteFailureCauseInformation_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h new file mode 100644 index 0000000..6112f5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CompleteFailureCauseInformation_Item_H_ +#define _CompleteFailureCauseInformation_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "MeasurementFailureCause-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CompleteFailureCauseInformation-Item */ +typedef struct CompleteFailureCauseInformation_Item { + ECGI_t cell_ID; + MeasurementFailureCause_List_t measurementFailureCause_List; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompleteFailureCauseInformation_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _CompleteFailureCauseInformation_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c new file mode 100644 index 0000000..9238870 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CompleteFailureCauseInformation-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_CompleteFailureCauseInformation_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CompleteFailureCauseInformation_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CompleteFailureCauseInformation_List_specs_1 = { + sizeof(struct CompleteFailureCauseInformation_List), + offsetof(struct CompleteFailureCauseInformation_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_List = { + "CompleteFailureCauseInformation-List", + "CompleteFailureCauseInformation-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CompleteFailureCauseInformation_List_tags_1, + sizeof(asn_DEF_CompleteFailureCauseInformation_List_tags_1) + /sizeof(asn_DEF_CompleteFailureCauseInformation_List_tags_1[0]), /* 1 */ + asn_DEF_CompleteFailureCauseInformation_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CompleteFailureCauseInformation_List_tags_1) + /sizeof(asn_DEF_CompleteFailureCauseInformation_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CompleteFailureCauseInformation_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CompleteFailureCauseInformation_List_1, + 1, /* Single element */ + &asn_SPC_CompleteFailureCauseInformation_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h new file mode 100644 index 0000000..73eadff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompleteFailureCauseInformation-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CompleteFailureCauseInformation_List_H_ +#define _CompleteFailureCauseInformation_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* CompleteFailureCauseInformation-List */ +typedef struct CompleteFailureCauseInformation_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompleteFailureCauseInformation_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _CompleteFailureCauseInformation_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.c new file mode 100644 index 0000000..b8cb844 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CompositeAvailableCapacity.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CompositeAvailableCapacity_1[] = { + { ATF_POINTER, 1, offsetof(struct CompositeAvailableCapacity, cellCapacityClassValue), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellCapacityClassValue, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellCapacityClassValue" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacity, capacityValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CapacityValue, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "capacityValue" + }, + { ATF_POINTER, 1, offsetof(struct CompositeAvailableCapacity, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P121, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CompositeAvailableCapacity_oms_1[] = { 0, 2 }; +static const ber_tlv_tag_t asn_DEF_CompositeAvailableCapacity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompositeAvailableCapacity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellCapacityClassValue */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* capacityValue */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacity_specs_1 = { + sizeof(struct CompositeAvailableCapacity), + offsetof(struct CompositeAvailableCapacity, _asn_ctx), + asn_MAP_CompositeAvailableCapacity_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CompositeAvailableCapacity_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacity = { + "CompositeAvailableCapacity", + "CompositeAvailableCapacity", + &asn_OP_SEQUENCE, + asn_DEF_CompositeAvailableCapacity_tags_1, + sizeof(asn_DEF_CompositeAvailableCapacity_tags_1) + /sizeof(asn_DEF_CompositeAvailableCapacity_tags_1[0]), /* 1 */ + asn_DEF_CompositeAvailableCapacity_tags_1, /* Same as above */ + sizeof(asn_DEF_CompositeAvailableCapacity_tags_1) + /sizeof(asn_DEF_CompositeAvailableCapacity_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompositeAvailableCapacity_1, + 3, /* Elements count */ + &asn_SPC_CompositeAvailableCapacity_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.h new file mode 100644 index 0000000..c8dc3e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacity.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CompositeAvailableCapacity_H_ +#define _CompositeAvailableCapacity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CellCapacityClassValue.h" +#include "CapacityValue.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CompositeAvailableCapacity */ +typedef struct CompositeAvailableCapacity { + CellCapacityClassValue_t *cellCapacityClassValue; /* OPTIONAL */ + CapacityValue_t capacityValue; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompositeAvailableCapacity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacity; +extern asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacity_specs_1; +extern asn_TYPE_member_t asn_MBR_CompositeAvailableCapacity_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CompositeAvailableCapacity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c new file mode 100644 index 0000000..8699580 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CompositeAvailableCapacityGroup.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CompositeAvailableCapacityGroup_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacityGroup, dL_CompositeAvailableCapacity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CompositeAvailableCapacity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-CompositeAvailableCapacity" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacityGroup, uL_CompositeAvailableCapacity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CompositeAvailableCapacity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-CompositeAvailableCapacity" + }, + { ATF_POINTER, 1, offsetof(struct CompositeAvailableCapacityGroup, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P122, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CompositeAvailableCapacityGroup_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_CompositeAvailableCapacityGroup_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompositeAvailableCapacityGroup_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-CompositeAvailableCapacity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-CompositeAvailableCapacity */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacityGroup_specs_1 = { + sizeof(struct CompositeAvailableCapacityGroup), + offsetof(struct CompositeAvailableCapacityGroup, _asn_ctx), + asn_MAP_CompositeAvailableCapacityGroup_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CompositeAvailableCapacityGroup_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacityGroup = { + "CompositeAvailableCapacityGroup", + "CompositeAvailableCapacityGroup", + &asn_OP_SEQUENCE, + asn_DEF_CompositeAvailableCapacityGroup_tags_1, + sizeof(asn_DEF_CompositeAvailableCapacityGroup_tags_1) + /sizeof(asn_DEF_CompositeAvailableCapacityGroup_tags_1[0]), /* 1 */ + asn_DEF_CompositeAvailableCapacityGroup_tags_1, /* Same as above */ + sizeof(asn_DEF_CompositeAvailableCapacityGroup_tags_1) + /sizeof(asn_DEF_CompositeAvailableCapacityGroup_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompositeAvailableCapacityGroup_1, + 3, /* Elements count */ + &asn_SPC_CompositeAvailableCapacityGroup_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h new file mode 100644 index 0000000..ce617bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CompositeAvailableCapacityGroup.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CompositeAvailableCapacityGroup_H_ +#define _CompositeAvailableCapacityGroup_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CompositeAvailableCapacity.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* CompositeAvailableCapacityGroup */ +typedef struct CompositeAvailableCapacityGroup { + CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompositeAvailableCapacityGroup_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacityGroup; +extern asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacityGroup_specs_1; +extern asn_TYPE_member_t asn_MBR_CompositeAvailableCapacityGroup_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CompositeAvailableCapacityGroup_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.c new file mode 100644 index 0000000..fedb077 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Correlation-ID.h" + +int +Correlation_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Correlation_ID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Correlation_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Correlation_ID = { + "Correlation-ID", + "Correlation-ID", + &asn_OP_OCTET_STRING, + asn_DEF_Correlation_ID_tags_1, + sizeof(asn_DEF_Correlation_ID_tags_1) + /sizeof(asn_DEF_Correlation_ID_tags_1[0]), /* 1 */ + asn_DEF_Correlation_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_Correlation_ID_tags_1) + /sizeof(asn_DEF_Correlation_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Correlation_ID_constr_1, Correlation_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.h new file mode 100644 index 0000000..1381531 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Correlation-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Correlation_ID_H_ +#define _Correlation_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Correlation-ID */ +typedef OCTET_STRING_t Correlation_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Correlation_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Correlation_ID; +asn_struct_free_f Correlation_ID_free; +asn_struct_print_f Correlation_ID_print; +asn_constr_check_f Correlation_ID_constraint; +ber_type_decoder_f Correlation_ID_decode_ber; +der_type_encoder_f Correlation_ID_encode_der; +xer_type_decoder_f Correlation_ID_decode_xer; +xer_type_encoder_f Correlation_ID_encode_xer; +per_type_decoder_f Correlation_ID_decode_uper; +per_type_encoder_f Correlation_ID_encode_uper; +per_type_decoder_f Correlation_ID_decode_aper; +per_type_encoder_f Correlation_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Correlation_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.c new file mode 100644 index 0000000..a7c1f58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.c @@ -0,0 +1,131 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoverageModification-Item.h" + +#include "CellReplacingInfo.h" +static int +memb_coverageState_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_coverageState_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CoverageModification_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoverageModification_Item, eCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoverageModification_Item, coverageState), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_coverageState_constr_3, memb_coverageState_constraint_1 }, + 0, 0, /* No default value */ + "coverageState" + }, + { ATF_POINTER, 2, offsetof(struct CoverageModification_Item, cellDeploymentStatusIndicator), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellDeploymentStatusIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellDeploymentStatusIndicator" + }, + { ATF_POINTER, 1, offsetof(struct CoverageModification_Item, cellReplacingInfo), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReplacingInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellReplacingInfo" + }, +}; +static const int asn_MAP_CoverageModification_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_CoverageModification_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoverageModification_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coverageState */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellDeploymentStatusIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* cellReplacingInfo */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoverageModification_Item_specs_1 = { + sizeof(struct CoverageModification_Item), + offsetof(struct CoverageModification_Item, _asn_ctx), + asn_MAP_CoverageModification_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CoverageModification_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoverageModification_Item = { + "CoverageModification-Item", + "CoverageModification-Item", + &asn_OP_SEQUENCE, + asn_DEF_CoverageModification_Item_tags_1, + sizeof(asn_DEF_CoverageModification_Item_tags_1) + /sizeof(asn_DEF_CoverageModification_Item_tags_1[0]), /* 1 */ + asn_DEF_CoverageModification_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CoverageModification_Item_tags_1) + /sizeof(asn_DEF_CoverageModification_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoverageModification_Item_1, + 4, /* Elements count */ + &asn_SPC_CoverageModification_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.h new file mode 100644 index 0000000..4277523 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModification-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoverageModification_Item_H_ +#define _CoverageModification_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "NativeInteger.h" +#include "CellDeploymentStatusIndicator.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellReplacingInfo; + +/* CoverageModification-Item */ +typedef struct CoverageModification_Item { + ECGI_t eCGI; + long coverageState; + CellDeploymentStatusIndicator_t *cellDeploymentStatusIndicator; /* OPTIONAL */ + struct CellReplacingInfo *cellReplacingInfo; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoverageModification_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoverageModification_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CoverageModification_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CoverageModification_Item_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoverageModification_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.c new file mode 100644 index 0000000..2e976c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CoverageModificationList.h" + +#include "CoverageModification-Item.h" +asn_per_constraints_t asn_PER_type_CoverageModificationList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CoverageModificationList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoverageModification_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoverageModificationList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CoverageModificationList_specs_1 = { + sizeof(struct CoverageModificationList), + offsetof(struct CoverageModificationList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CoverageModificationList = { + "CoverageModificationList", + "CoverageModificationList", + &asn_OP_SEQUENCE_OF, + asn_DEF_CoverageModificationList_tags_1, + sizeof(asn_DEF_CoverageModificationList_tags_1) + /sizeof(asn_DEF_CoverageModificationList_tags_1[0]), /* 1 */ + asn_DEF_CoverageModificationList_tags_1, /* Same as above */ + sizeof(asn_DEF_CoverageModificationList_tags_1) + /sizeof(asn_DEF_CoverageModificationList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CoverageModificationList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CoverageModificationList_1, + 1, /* Single element */ + &asn_SPC_CoverageModificationList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.h new file mode 100644 index 0000000..0f35d0d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CoverageModificationList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CoverageModificationList_H_ +#define _CoverageModificationList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CoverageModification_Item; + +/* CoverageModificationList */ +typedef struct CoverageModificationList { + A_SEQUENCE_OF(struct CoverageModification_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoverageModificationList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoverageModificationList; +extern asn_SET_OF_specifics_t asn_SPC_CoverageModificationList_specs_1; +extern asn_TYPE_member_t asn_MBR_CoverageModificationList_1[1]; +extern asn_per_constraints_t asn_PER_type_CoverageModificationList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoverageModificationList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.c new file mode 100644 index 0000000..741ee00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.h new file mode 100644 index 0000000..4ab4f6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Criticality.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..7cb49f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,142 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List__Member, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List__Member, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List__Member, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics_IE_List__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P127, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* typeOfError */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct CriticalityDiagnostics_IE_List__Member), + offsetof(struct CriticalityDiagnostics_IE_List__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 4, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..fb94416 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct CriticalityDiagnostics_IE_List__Member { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List__Member; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(CriticalityDiagnostics_IE_List__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..c4d015c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,112 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CriticalityDiagnostics.h" + +#include "CriticalityDiagnostics-IE-List.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P126, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* iEsCriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..8d8c649 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_List; +struct ProtocolExtensionContainer; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.c new file mode 100644 index 0000000..3dd2488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CyclicPrefixDL.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CyclicPrefixDL_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CyclicPrefixDL_value2enum_1[] = { + { 0, 6, "normal" }, + { 1, 8, "extended" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CyclicPrefixDL_enum2value_1[] = { + 1, /* extended(1) */ + 0 /* normal(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixDL_specs_1 = { + asn_MAP_CyclicPrefixDL_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CyclicPrefixDL_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CyclicPrefixDL_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CyclicPrefixDL = { + "CyclicPrefixDL", + "CyclicPrefixDL", + &asn_OP_NativeEnumerated, + asn_DEF_CyclicPrefixDL_tags_1, + sizeof(asn_DEF_CyclicPrefixDL_tags_1) + /sizeof(asn_DEF_CyclicPrefixDL_tags_1[0]), /* 1 */ + asn_DEF_CyclicPrefixDL_tags_1, /* Same as above */ + sizeof(asn_DEF_CyclicPrefixDL_tags_1) + /sizeof(asn_DEF_CyclicPrefixDL_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CyclicPrefixDL_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CyclicPrefixDL_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.h new file mode 100644 index 0000000..66b0375 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixDL.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CyclicPrefixDL_H_ +#define _CyclicPrefixDL_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CyclicPrefixDL { + CyclicPrefixDL_normal = 0, + CyclicPrefixDL_extended = 1 + /* + * Enumeration is extensible + */ +} e_CyclicPrefixDL; + +/* CyclicPrefixDL */ +typedef long CyclicPrefixDL_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CyclicPrefixDL_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CyclicPrefixDL; +extern const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixDL_specs_1; +asn_struct_free_f CyclicPrefixDL_free; +asn_struct_print_f CyclicPrefixDL_print; +asn_constr_check_f CyclicPrefixDL_constraint; +ber_type_decoder_f CyclicPrefixDL_decode_ber; +der_type_encoder_f CyclicPrefixDL_encode_der; +xer_type_decoder_f CyclicPrefixDL_decode_xer; +xer_type_encoder_f CyclicPrefixDL_encode_xer; +per_type_decoder_f CyclicPrefixDL_decode_uper; +per_type_encoder_f CyclicPrefixDL_encode_uper; +per_type_decoder_f CyclicPrefixDL_decode_aper; +per_type_encoder_f CyclicPrefixDL_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CyclicPrefixDL_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.c new file mode 100644 index 0000000..59faba1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "CyclicPrefixUL.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CyclicPrefixUL_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CyclicPrefixUL_value2enum_1[] = { + { 0, 6, "normal" }, + { 1, 8, "extended" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CyclicPrefixUL_enum2value_1[] = { + 1, /* extended(1) */ + 0 /* normal(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixUL_specs_1 = { + asn_MAP_CyclicPrefixUL_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CyclicPrefixUL_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CyclicPrefixUL_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CyclicPrefixUL = { + "CyclicPrefixUL", + "CyclicPrefixUL", + &asn_OP_NativeEnumerated, + asn_DEF_CyclicPrefixUL_tags_1, + sizeof(asn_DEF_CyclicPrefixUL_tags_1) + /sizeof(asn_DEF_CyclicPrefixUL_tags_1[0]), /* 1 */ + asn_DEF_CyclicPrefixUL_tags_1, /* Same as above */ + sizeof(asn_DEF_CyclicPrefixUL_tags_1) + /sizeof(asn_DEF_CyclicPrefixUL_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CyclicPrefixUL_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CyclicPrefixUL_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.h new file mode 100644 index 0000000..ff49cbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/CyclicPrefixUL.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _CyclicPrefixUL_H_ +#define _CyclicPrefixUL_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CyclicPrefixUL { + CyclicPrefixUL_normal = 0, + CyclicPrefixUL_extended = 1 + /* + * Enumeration is extensible + */ +} e_CyclicPrefixUL; + +/* CyclicPrefixUL */ +typedef long CyclicPrefixUL_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CyclicPrefixUL_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CyclicPrefixUL; +extern const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixUL_specs_1; +asn_struct_free_f CyclicPrefixUL_free; +asn_struct_print_f CyclicPrefixUL_print; +asn_constr_check_f CyclicPrefixUL_constraint; +ber_type_decoder_f CyclicPrefixUL_decode_ber; +der_type_encoder_f CyclicPrefixUL_encode_der; +xer_type_decoder_f CyclicPrefixUL_decode_xer; +xer_type_encoder_f CyclicPrefixUL_encode_xer; +per_type_decoder_f CyclicPrefixUL_decode_uper; +per_type_encoder_f CyclicPrefixUL_encode_uper; +per_type_decoder_f CyclicPrefixUL_decode_aper; +per_type_encoder_f CyclicPrefixUL_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CyclicPrefixUL_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.c new file mode 100644 index 0000000..2fe9c00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-ABS-status.h" + +int +DL_ABS_status_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_ABS_status_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DL_ABS_status_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_ABS_status = { + "DL-ABS-status", + "DL-ABS-status", + &asn_OP_NativeInteger, + asn_DEF_DL_ABS_status_tags_1, + sizeof(asn_DEF_DL_ABS_status_tags_1) + /sizeof(asn_DEF_DL_ABS_status_tags_1[0]), /* 1 */ + asn_DEF_DL_ABS_status_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_ABS_status_tags_1) + /sizeof(asn_DEF_DL_ABS_status_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_ABS_status_constr_1, DL_ABS_status_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.h new file mode 100644 index 0000000..345dde6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-ABS-status.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_ABS_status_H_ +#define _DL_ABS_status_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-ABS-status */ +typedef long DL_ABS_status_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_ABS_status_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_ABS_status; +asn_struct_free_f DL_ABS_status_free; +asn_struct_print_f DL_ABS_status_print; +asn_constr_check_f DL_ABS_status_constraint; +ber_type_decoder_f DL_ABS_status_decode_ber; +der_type_encoder_f DL_ABS_status_encode_der; +xer_type_decoder_f DL_ABS_status_decode_xer; +xer_type_encoder_f DL_ABS_status_encode_xer; +per_type_decoder_f DL_ABS_status_decode_uper; +per_type_encoder_f DL_ABS_status_encode_uper; +per_type_decoder_f DL_ABS_status_decode_aper; +per_type_encoder_f DL_ABS_status_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_ABS_status_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.c new file mode 100644 index 0000000..13edeab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-Forwarding.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_Forwarding_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_DL_Forwarding_value2enum_1[] = { + { 0, 21, "dL-forwardingProposed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_DL_Forwarding_enum2value_1[] = { + 0 /* dL-forwardingProposed(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_DL_Forwarding_specs_1 = { + asn_MAP_DL_Forwarding_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_DL_Forwarding_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_DL_Forwarding_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_Forwarding = { + "DL-Forwarding", + "DL-Forwarding", + &asn_OP_NativeEnumerated, + asn_DEF_DL_Forwarding_tags_1, + sizeof(asn_DEF_DL_Forwarding_tags_1) + /sizeof(asn_DEF_DL_Forwarding_tags_1[0]), /* 1 */ + asn_DEF_DL_Forwarding_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_Forwarding_tags_1) + /sizeof(asn_DEF_DL_Forwarding_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_Forwarding_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_DL_Forwarding_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.h new file mode 100644 index 0000000..c748493 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Forwarding.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_Forwarding_H_ +#define _DL_Forwarding_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DL_Forwarding { + DL_Forwarding_dL_forwardingProposed = 0 + /* + * Enumeration is extensible + */ +} e_DL_Forwarding; + +/* DL-Forwarding */ +typedef long DL_Forwarding_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_Forwarding_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_Forwarding; +extern const asn_INTEGER_specifics_t asn_SPC_DL_Forwarding_specs_1; +asn_struct_free_f DL_Forwarding_free; +asn_struct_print_f DL_Forwarding_print; +asn_constr_check_f DL_Forwarding_constraint; +ber_type_decoder_f DL_Forwarding_decode_ber; +der_type_encoder_f DL_Forwarding_encode_der; +xer_type_decoder_f DL_Forwarding_decode_xer; +xer_type_encoder_f DL_Forwarding_encode_xer; +per_type_decoder_f DL_Forwarding_decode_uper; +per_type_encoder_f DL_Forwarding_encode_uper; +per_type_decoder_f DL_Forwarding_decode_aper; +per_type_encoder_f DL_Forwarding_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_Forwarding_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.c new file mode 100644 index 0000000..aa6e869 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-GBR-PRB-usage.h" + +int +DL_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_GBR_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DL_GBR_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_GBR_PRB_usage = { + "DL-GBR-PRB-usage", + "DL-GBR-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_DL_GBR_PRB_usage_tags_1, + sizeof(asn_DEF_DL_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_GBR_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_DL_GBR_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_GBR_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_GBR_PRB_usage_constr_1, DL_GBR_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.h new file mode 100644 index 0000000..8dc4bf4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-GBR-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_GBR_PRB_usage_H_ +#define _DL_GBR_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-GBR-PRB-usage */ +typedef long DL_GBR_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_GBR_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_GBR_PRB_usage; +asn_struct_free_f DL_GBR_PRB_usage_free; +asn_struct_print_f DL_GBR_PRB_usage_print; +asn_constr_check_f DL_GBR_PRB_usage_constraint; +ber_type_decoder_f DL_GBR_PRB_usage_decode_ber; +der_type_encoder_f DL_GBR_PRB_usage_encode_der; +xer_type_decoder_f DL_GBR_PRB_usage_decode_xer; +xer_type_encoder_f DL_GBR_PRB_usage_encode_xer; +per_type_decoder_f DL_GBR_PRB_usage_decode_uper; +per_type_encoder_f DL_GBR_PRB_usage_encode_uper; +per_type_decoder_f DL_GBR_PRB_usage_decode_aper; +per_type_encoder_f DL_GBR_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_GBR_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.c new file mode 100644 index 0000000..f6cd6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-Total-PRB-usage.h" + +int +DL_Total_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_Total_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DL_Total_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_Total_PRB_usage = { + "DL-Total-PRB-usage", + "DL-Total-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_DL_Total_PRB_usage_tags_1, + sizeof(asn_DEF_DL_Total_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_Total_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_DL_Total_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_Total_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_Total_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_Total_PRB_usage_constr_1, DL_Total_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.h new file mode 100644 index 0000000..4ee9165 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-Total-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_Total_PRB_usage_H_ +#define _DL_Total_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-Total-PRB-usage */ +typedef long DL_Total_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_Total_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_Total_PRB_usage; +asn_struct_free_f DL_Total_PRB_usage_free; +asn_struct_print_f DL_Total_PRB_usage_print; +asn_constr_check_f DL_Total_PRB_usage_constraint; +ber_type_decoder_f DL_Total_PRB_usage_decode_ber; +der_type_encoder_f DL_Total_PRB_usage_encode_der; +xer_type_decoder_f DL_Total_PRB_usage_decode_xer; +xer_type_encoder_f DL_Total_PRB_usage_encode_xer; +per_type_decoder_f DL_Total_PRB_usage_decode_uper; +per_type_encoder_f DL_Total_PRB_usage_encode_uper; +per_type_decoder_f DL_Total_PRB_usage_decode_aper; +per_type_encoder_f DL_Total_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_Total_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c new file mode 100644 index 0000000..9b3d6c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-non-GBR-PRB-usage.h" + +int +DL_non_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_non_GBR_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DL_non_GBR_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_non_GBR_PRB_usage = { + "DL-non-GBR-PRB-usage", + "DL-non-GBR-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_DL_non_GBR_PRB_usage_tags_1, + sizeof(asn_DEF_DL_non_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_non_GBR_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_DL_non_GBR_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_non_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_DL_non_GBR_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_non_GBR_PRB_usage_constr_1, DL_non_GBR_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h new file mode 100644 index 0000000..35d369e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-non-GBR-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_non_GBR_PRB_usage_H_ +#define _DL_non_GBR_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-non-GBR-PRB-usage */ +typedef long DL_non_GBR_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_non_GBR_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_non_GBR_PRB_usage; +asn_struct_free_f DL_non_GBR_PRB_usage_free; +asn_struct_print_f DL_non_GBR_PRB_usage_print; +asn_constr_check_f DL_non_GBR_PRB_usage_constraint; +ber_type_decoder_f DL_non_GBR_PRB_usage_decode_ber; +der_type_encoder_f DL_non_GBR_PRB_usage_encode_der; +xer_type_decoder_f DL_non_GBR_PRB_usage_decode_xer; +xer_type_encoder_f DL_non_GBR_PRB_usage_encode_xer; +per_type_decoder_f DL_non_GBR_PRB_usage_decode_uper; +per_type_encoder_f DL_non_GBR_PRB_usage_encode_uper; +per_type_decoder_f DL_non_GBR_PRB_usage_decode_aper; +per_type_encoder_f DL_non_GBR_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_non_GBR_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c new file mode 100644 index 0000000..fe6969f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DL-scheduling-PDCCH-CCE-usage.h" + +int +DL_scheduling_PDCCH_CCE_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DL_scheduling_PDCCH_CCE_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DL_scheduling_PDCCH_CCE_usage = { + "DL-scheduling-PDCCH-CCE-usage", + "DL-scheduling-PDCCH-CCE-usage", + &asn_OP_NativeInteger, + asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1, + sizeof(asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1) + /sizeof(asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */ + asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1) + /sizeof(asn_DEF_DL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DL_scheduling_PDCCH_CCE_usage_constr_1, DL_scheduling_PDCCH_CCE_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h new file mode 100644 index 0000000..38fb95b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DL-scheduling-PDCCH-CCE-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DL_scheduling_PDCCH_CCE_usage_H_ +#define _DL_scheduling_PDCCH_CCE_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-scheduling-PDCCH-CCE-usage */ +typedef long DL_scheduling_PDCCH_CCE_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DL_scheduling_PDCCH_CCE_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DL_scheduling_PDCCH_CCE_usage; +asn_struct_free_f DL_scheduling_PDCCH_CCE_usage_free; +asn_struct_print_f DL_scheduling_PDCCH_CCE_usage_print; +asn_constr_check_f DL_scheduling_PDCCH_CCE_usage_constraint; +ber_type_decoder_f DL_scheduling_PDCCH_CCE_usage_decode_ber; +der_type_encoder_f DL_scheduling_PDCCH_CCE_usage_encode_der; +xer_type_decoder_f DL_scheduling_PDCCH_CCE_usage_decode_xer; +xer_type_encoder_f DL_scheduling_PDCCH_CCE_usage_encode_xer; +per_type_decoder_f DL_scheduling_PDCCH_CCE_usage_decode_uper; +per_type_encoder_f DL_scheduling_PDCCH_CCE_usage_encode_uper; +per_type_decoder_f DL_scheduling_PDCCH_CCE_usage_decode_aper; +per_type_encoder_f DL_scheduling_PDCCH_CCE_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_scheduling_PDCCH_CCE_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c new file mode 100644 index 0000000..1f1b0e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DLResourceBitmapULandDLSharing.h" + +int +DLResourceBitmapULandDLSharing_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const DataTrafficResources_t *st = (const DataTrafficResources_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 17600)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using DataTrafficResources, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DLResourceBitmapULandDLSharing_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 15, 15, 6, 17600 } /* (SIZE(6..17600)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DLResourceBitmapULandDLSharing_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DLResourceBitmapULandDLSharing = { + "DLResourceBitmapULandDLSharing", + "DLResourceBitmapULandDLSharing", + &asn_OP_BIT_STRING, + asn_DEF_DLResourceBitmapULandDLSharing_tags_1, + sizeof(asn_DEF_DLResourceBitmapULandDLSharing_tags_1) + /sizeof(asn_DEF_DLResourceBitmapULandDLSharing_tags_1[0]), /* 1 */ + asn_DEF_DLResourceBitmapULandDLSharing_tags_1, /* Same as above */ + sizeof(asn_DEF_DLResourceBitmapULandDLSharing_tags_1) + /sizeof(asn_DEF_DLResourceBitmapULandDLSharing_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DLResourceBitmapULandDLSharing_constr_1, DLResourceBitmapULandDLSharing_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h new file mode 100644 index 0000000..752b4d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourceBitmapULandDLSharing.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DLResourceBitmapULandDLSharing_H_ +#define _DLResourceBitmapULandDLSharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "DataTrafficResources.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DLResourceBitmapULandDLSharing */ +typedef DataTrafficResources_t DLResourceBitmapULandDLSharing_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DLResourceBitmapULandDLSharing_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DLResourceBitmapULandDLSharing; +asn_struct_free_f DLResourceBitmapULandDLSharing_free; +asn_struct_print_f DLResourceBitmapULandDLSharing_print; +asn_constr_check_f DLResourceBitmapULandDLSharing_constraint; +ber_type_decoder_f DLResourceBitmapULandDLSharing_decode_ber; +der_type_encoder_f DLResourceBitmapULandDLSharing_encode_der; +xer_type_decoder_f DLResourceBitmapULandDLSharing_decode_xer; +xer_type_encoder_f DLResourceBitmapULandDLSharing_encode_xer; +per_type_decoder_f DLResourceBitmapULandDLSharing_decode_uper; +per_type_encoder_f DLResourceBitmapULandDLSharing_encode_uper; +per_type_decoder_f DLResourceBitmapULandDLSharing_decode_aper; +per_type_encoder_f DLResourceBitmapULandDLSharing_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DLResourceBitmapULandDLSharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.c new file mode 100644 index 0000000..273a3a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DLResourcesULandDLSharing.h" + +asn_per_constraints_t asn_PER_type_DLResourcesULandDLSharing_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DLResourcesULandDLSharing_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLResourcesULandDLSharing, choice.unchanged), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unchanged" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLResourcesULandDLSharing, choice.changed), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DLResourceBitmapULandDLSharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "changed" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_DLResourcesULandDLSharing_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unchanged */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* changed */ +}; +asn_CHOICE_specifics_t asn_SPC_DLResourcesULandDLSharing_specs_1 = { + sizeof(struct DLResourcesULandDLSharing), + offsetof(struct DLResourcesULandDLSharing, _asn_ctx), + offsetof(struct DLResourcesULandDLSharing, present), + sizeof(((struct DLResourcesULandDLSharing *)0)->present), + asn_MAP_DLResourcesULandDLSharing_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_DLResourcesULandDLSharing = { + "DLResourcesULandDLSharing", + "DLResourcesULandDLSharing", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_DLResourcesULandDLSharing_constr_1, CHOICE_constraint }, + asn_MBR_DLResourcesULandDLSharing_1, + 2, /* Elements count */ + &asn_SPC_DLResourcesULandDLSharing_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.h new file mode 100644 index 0000000..43b5547 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DLResourcesULandDLSharing.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DLResourcesULandDLSharing_H_ +#define _DLResourcesULandDLSharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "DLResourceBitmapULandDLSharing.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DLResourcesULandDLSharing_PR { + DLResourcesULandDLSharing_PR_NOTHING, /* No components present */ + DLResourcesULandDLSharing_PR_unchanged, + DLResourcesULandDLSharing_PR_changed + /* Extensions may appear below */ + +} DLResourcesULandDLSharing_PR; + +/* DLResourcesULandDLSharing */ +typedef struct DLResourcesULandDLSharing { + DLResourcesULandDLSharing_PR present; + union DLResourcesULandDLSharing_u { + NULL_t unchanged; + DLResourceBitmapULandDLSharing_t changed; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DLResourcesULandDLSharing_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DLResourcesULandDLSharing; +extern asn_CHOICE_specifics_t asn_SPC_DLResourcesULandDLSharing_specs_1; +extern asn_TYPE_member_t asn_MBR_DLResourcesULandDLSharing_1[2]; +extern asn_per_constraints_t asn_PER_type_DLResourcesULandDLSharing_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _DLResourcesULandDLSharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.c new file mode 100644 index 0000000..e27b031 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DRB-ID.h" + +int +DRB_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DRB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DRB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DRB_ID = { + "DRB-ID", + "DRB-ID", + &asn_OP_NativeInteger, + asn_DEF_DRB_ID_tags_1, + sizeof(asn_DEF_DRB_ID_tags_1) + /sizeof(asn_DEF_DRB_ID_tags_1[0]), /* 1 */ + asn_DEF_DRB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_ID_tags_1) + /sizeof(asn_DEF_DRB_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DRB_ID_constr_1, DRB_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.h new file mode 100644 index 0000000..2b4de97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DRB-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DRB_ID_H_ +#define _DRB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DRB-ID */ +typedef long DRB_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DRB_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DRB_ID; +asn_struct_free_f DRB_ID_free; +asn_struct_print_f DRB_ID_print; +asn_constr_check_f DRB_ID_constraint; +ber_type_decoder_f DRB_ID_decode_ber; +der_type_encoder_f DRB_ID_encode_der; +xer_type_decoder_f DRB_ID_decode_xer; +xer_type_encoder_f DRB_ID_encode_xer; +per_type_decoder_f DRB_ID_decode_uper; +per_type_encoder_f DRB_ID_encode_uper; +per_type_decoder_f DRB_ID_decode_aper; +per_type_encoder_f DRB_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.c new file mode 100644 index 0000000..01290f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DataForwardingAddressIndication.h" + +static asn_TYPE_member_t asn_MBR_DataForwardingAddressIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P118, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_DataForwardingAddressIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DataForwardingAddressIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DataForwardingAddressIndication_specs_1 = { + sizeof(struct DataForwardingAddressIndication), + offsetof(struct DataForwardingAddressIndication, _asn_ctx), + asn_MAP_DataForwardingAddressIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DataForwardingAddressIndication = { + "DataForwardingAddressIndication", + "DataForwardingAddressIndication", + &asn_OP_SEQUENCE, + asn_DEF_DataForwardingAddressIndication_tags_1, + sizeof(asn_DEF_DataForwardingAddressIndication_tags_1) + /sizeof(asn_DEF_DataForwardingAddressIndication_tags_1[0]), /* 1 */ + asn_DEF_DataForwardingAddressIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_DataForwardingAddressIndication_tags_1) + /sizeof(asn_DEF_DataForwardingAddressIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DataForwardingAddressIndication_1, + 1, /* Elements count */ + &asn_SPC_DataForwardingAddressIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.h new file mode 100644 index 0000000..4d06d31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataForwardingAddressIndication.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DataForwardingAddressIndication_H_ +#define _DataForwardingAddressIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DataForwardingAddressIndication */ +typedef struct DataForwardingAddressIndication { + ProtocolIE_Container_119P118_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DataForwardingAddressIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DataForwardingAddressIndication; + +#ifdef __cplusplus +} +#endif + +#endif /* _DataForwardingAddressIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.c new file mode 100644 index 0000000..4ded49e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.c @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DataTrafficResourceIndication.h" + +#include "ReservedSubframePattern.h" +#include "ProtocolExtensionContainer.h" +static int +memb_activationSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_activationSFN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DataTrafficResourceIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DataTrafficResourceIndication, activationSFN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_activationSFN_constr_2, memb_activationSFN_constraint_1 }, + 0, 0, /* No default value */ + "activationSFN" + }, + { ATF_NOFLAGS, 0, offsetof(struct DataTrafficResourceIndication, sharedResourceType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SharedResourceType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sharedResourceType" + }, + { ATF_POINTER, 2, offsetof(struct DataTrafficResourceIndication, reservedSubframePattern), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReservedSubframePattern, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reservedSubframePattern" + }, + { ATF_POINTER, 1, offsetof(struct DataTrafficResourceIndication, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P131, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_DataTrafficResourceIndication_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_DataTrafficResourceIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DataTrafficResourceIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* activationSFN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sharedResourceType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reservedSubframePattern */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DataTrafficResourceIndication_specs_1 = { + sizeof(struct DataTrafficResourceIndication), + offsetof(struct DataTrafficResourceIndication, _asn_ctx), + asn_MAP_DataTrafficResourceIndication_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_DataTrafficResourceIndication_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DataTrafficResourceIndication = { + "DataTrafficResourceIndication", + "DataTrafficResourceIndication", + &asn_OP_SEQUENCE, + asn_DEF_DataTrafficResourceIndication_tags_1, + sizeof(asn_DEF_DataTrafficResourceIndication_tags_1) + /sizeof(asn_DEF_DataTrafficResourceIndication_tags_1[0]), /* 1 */ + asn_DEF_DataTrafficResourceIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_DataTrafficResourceIndication_tags_1) + /sizeof(asn_DEF_DataTrafficResourceIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DataTrafficResourceIndication_1, + 4, /* Elements count */ + &asn_SPC_DataTrafficResourceIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.h new file mode 100644 index 0000000..5755618 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResourceIndication.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DataTrafficResourceIndication_H_ +#define _DataTrafficResourceIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "SharedResourceType.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ReservedSubframePattern; +struct ProtocolExtensionContainer; + +/* DataTrafficResourceIndication */ +typedef struct DataTrafficResourceIndication { + long activationSFN; + SharedResourceType_t sharedResourceType; + struct ReservedSubframePattern *reservedSubframePattern; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DataTrafficResourceIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DataTrafficResourceIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_DataTrafficResourceIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_DataTrafficResourceIndication_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DataTrafficResourceIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.c new file mode 100644 index 0000000..797e86a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DataTrafficResources.h" + +int +DataTrafficResources_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 17600)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DataTrafficResources_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 15, 15, 6, 17600 } /* (SIZE(6..17600)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_DataTrafficResources_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DataTrafficResources = { + "DataTrafficResources", + "DataTrafficResources", + &asn_OP_BIT_STRING, + asn_DEF_DataTrafficResources_tags_1, + sizeof(asn_DEF_DataTrafficResources_tags_1) + /sizeof(asn_DEF_DataTrafficResources_tags_1[0]), /* 1 */ + asn_DEF_DataTrafficResources_tags_1, /* Same as above */ + sizeof(asn_DEF_DataTrafficResources_tags_1) + /sizeof(asn_DEF_DataTrafficResources_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DataTrafficResources_constr_1, DataTrafficResources_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.h new file mode 100644 index 0000000..890e81b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DataTrafficResources.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DataTrafficResources_H_ +#define _DataTrafficResources_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DataTrafficResources */ +typedef BIT_STRING_t DataTrafficResources_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DataTrafficResources_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DataTrafficResources; +asn_struct_free_f DataTrafficResources_free; +asn_struct_print_f DataTrafficResources_print; +asn_constr_check_f DataTrafficResources_constraint; +ber_type_decoder_f DataTrafficResources_decode_ber; +der_type_encoder_f DataTrafficResources_encode_der; +xer_type_decoder_f DataTrafficResources_decode_xer; +xer_type_encoder_f DataTrafficResources_encode_xer; +per_type_decoder_f DataTrafficResources_decode_uper; +per_type_encoder_f DataTrafficResources_encode_uper; +per_type_decoder_f DataTrafficResources_decode_aper; +per_type_encoder_f DataTrafficResources_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DataTrafficResources_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.c new file mode 100644 index 0000000..d9775a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DeactivationIndication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DeactivationIndication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_DeactivationIndication_value2enum_1[] = { + { 0, 11, "deactivated" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_DeactivationIndication_enum2value_1[] = { + 0 /* deactivated(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_DeactivationIndication_specs_1 = { + asn_MAP_DeactivationIndication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_DeactivationIndication_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_DeactivationIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DeactivationIndication = { + "DeactivationIndication", + "DeactivationIndication", + &asn_OP_NativeEnumerated, + asn_DEF_DeactivationIndication_tags_1, + sizeof(asn_DEF_DeactivationIndication_tags_1) + /sizeof(asn_DEF_DeactivationIndication_tags_1[0]), /* 1 */ + asn_DEF_DeactivationIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_DeactivationIndication_tags_1) + /sizeof(asn_DEF_DeactivationIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DeactivationIndication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_DeactivationIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.h new file mode 100644 index 0000000..0819790 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeactivationIndication.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DeactivationIndication_H_ +#define _DeactivationIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DeactivationIndication { + DeactivationIndication_deactivated = 0 + /* + * Enumeration is extensible + */ +} e_DeactivationIndication; + +/* DeactivationIndication */ +typedef long DeactivationIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DeactivationIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DeactivationIndication; +extern const asn_INTEGER_specifics_t asn_SPC_DeactivationIndication_specs_1; +asn_struct_free_f DeactivationIndication_free; +asn_struct_print_f DeactivationIndication_print; +asn_constr_check_f DeactivationIndication_constraint; +ber_type_decoder_f DeactivationIndication_decode_ber; +der_type_encoder_f DeactivationIndication_encode_der; +xer_type_decoder_f DeactivationIndication_decode_xer; +xer_type_encoder_f DeactivationIndication_encode_xer; +per_type_decoder_f DeactivationIndication_decode_uper; +per_type_encoder_f DeactivationIndication_encode_uper; +per_type_decoder_f DeactivationIndication_decode_aper; +per_type_encoder_f DeactivationIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DeactivationIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.c new file mode 100644 index 0000000..2f6c809 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DeliveryStatus.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_highestSuccessDeliveredPDCPSN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_highestSuccessDeliveredPDCPSN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DeliveryStatus_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DeliveryStatus, highestSuccessDeliveredPDCPSN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_highestSuccessDeliveredPDCPSN_constr_2, memb_highestSuccessDeliveredPDCPSN_constraint_1 }, + 0, 0, /* No default value */ + "highestSuccessDeliveredPDCPSN" + }, + { ATF_POINTER, 1, offsetof(struct DeliveryStatus, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P132, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_DeliveryStatus_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_DeliveryStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DeliveryStatus_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* highestSuccessDeliveredPDCPSN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DeliveryStatus_specs_1 = { + sizeof(struct DeliveryStatus), + offsetof(struct DeliveryStatus, _asn_ctx), + asn_MAP_DeliveryStatus_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_DeliveryStatus_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DeliveryStatus = { + "DeliveryStatus", + "DeliveryStatus", + &asn_OP_SEQUENCE, + asn_DEF_DeliveryStatus_tags_1, + sizeof(asn_DEF_DeliveryStatus_tags_1) + /sizeof(asn_DEF_DeliveryStatus_tags_1[0]), /* 1 */ + asn_DEF_DeliveryStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_DeliveryStatus_tags_1) + /sizeof(asn_DEF_DeliveryStatus_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DeliveryStatus_1, + 2, /* Elements count */ + &asn_SPC_DeliveryStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.h new file mode 100644 index 0000000..bc4bb21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DeliveryStatus.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DeliveryStatus_H_ +#define _DeliveryStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* DeliveryStatus */ +typedef struct DeliveryStatus { + long highestSuccessDeliveredPDCPSN; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DeliveryStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DeliveryStatus; +extern asn_SEQUENCE_specifics_t asn_SPC_DeliveryStatus_specs_1; +extern asn_TYPE_member_t asn_MBR_DeliveryStatus_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DeliveryStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.c new file mode 100644 index 0000000..a74db1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DuplicationActivation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_DuplicationActivation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_DuplicationActivation_value2enum_1[] = { + { 0, 6, "active" }, + { 1, 8, "inactive" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_DuplicationActivation_enum2value_1[] = { + 0, /* active(0) */ + 1 /* inactive(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_DuplicationActivation_specs_1 = { + asn_MAP_DuplicationActivation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_DuplicationActivation_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_DuplicationActivation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DuplicationActivation = { + "DuplicationActivation", + "DuplicationActivation", + &asn_OP_NativeEnumerated, + asn_DEF_DuplicationActivation_tags_1, + sizeof(asn_DEF_DuplicationActivation_tags_1) + /sizeof(asn_DEF_DuplicationActivation_tags_1[0]), /* 1 */ + asn_DEF_DuplicationActivation_tags_1, /* Same as above */ + sizeof(asn_DEF_DuplicationActivation_tags_1) + /sizeof(asn_DEF_DuplicationActivation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_DuplicationActivation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_DuplicationActivation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.h new file mode 100644 index 0000000..8d79972 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DuplicationActivation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DuplicationActivation_H_ +#define _DuplicationActivation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DuplicationActivation { + DuplicationActivation_active = 0, + DuplicationActivation_inactive = 1 + /* + * Enumeration is extensible + */ +} e_DuplicationActivation; + +/* DuplicationActivation */ +typedef long DuplicationActivation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_DuplicationActivation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_DuplicationActivation; +extern const asn_INTEGER_specifics_t asn_SPC_DuplicationActivation_specs_1; +asn_struct_free_f DuplicationActivation_free; +asn_struct_print_f DuplicationActivation_print; +asn_constr_check_f DuplicationActivation_constraint; +ber_type_decoder_f DuplicationActivation_decode_ber; +der_type_encoder_f DuplicationActivation_encode_der; +xer_type_decoder_f DuplicationActivation_decode_xer; +xer_type_encoder_f DuplicationActivation_encode_xer; +per_type_decoder_f DuplicationActivation_decode_uper; +per_type_encoder_f DuplicationActivation_encode_uper; +per_type_decoder_f DuplicationActivation_decode_aper; +per_type_encoder_f DuplicationActivation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DuplicationActivation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c new file mode 100644 index 0000000..73ba6ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DynamicDLTransmissionInformation.h" + +#include "DynamicNAICSInformation.h" +asn_per_constraints_t asn_PER_type_DynamicDLTransmissionInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DynamicDLTransmissionInformation_1[] = { + { ATF_POINTER, 0, offsetof(struct DynamicDLTransmissionInformation, choice.naics_active), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DynamicNAICSInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "naics-active" + }, + { ATF_NOFLAGS, 0, offsetof(struct DynamicDLTransmissionInformation, choice.naics_inactive), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "naics-inactive" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_DynamicDLTransmissionInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* naics-active */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* naics-inactive */ +}; +asn_CHOICE_specifics_t asn_SPC_DynamicDLTransmissionInformation_specs_1 = { + sizeof(struct DynamicDLTransmissionInformation), + offsetof(struct DynamicDLTransmissionInformation, _asn_ctx), + offsetof(struct DynamicDLTransmissionInformation, present), + sizeof(((struct DynamicDLTransmissionInformation *)0)->present), + asn_MAP_DynamicDLTransmissionInformation_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_DynamicDLTransmissionInformation = { + "DynamicDLTransmissionInformation", + "DynamicDLTransmissionInformation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_DynamicDLTransmissionInformation_constr_1, CHOICE_constraint }, + asn_MBR_DynamicDLTransmissionInformation_1, + 2, /* Elements count */ + &asn_SPC_DynamicDLTransmissionInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h new file mode 100644 index 0000000..88fcdbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicDLTransmissionInformation.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DynamicDLTransmissionInformation_H_ +#define _DynamicDLTransmissionInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DynamicDLTransmissionInformation_PR { + DynamicDLTransmissionInformation_PR_NOTHING, /* No components present */ + DynamicDLTransmissionInformation_PR_naics_active, + DynamicDLTransmissionInformation_PR_naics_inactive + /* Extensions may appear below */ + +} DynamicDLTransmissionInformation_PR; + +/* Forward declarations */ +struct DynamicNAICSInformation; + +/* DynamicDLTransmissionInformation */ +typedef struct DynamicDLTransmissionInformation { + DynamicDLTransmissionInformation_PR present; + union DynamicDLTransmissionInformation_u { + struct DynamicNAICSInformation *naics_active; + NULL_t naics_inactive; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DynamicDLTransmissionInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DynamicDLTransmissionInformation; +extern asn_CHOICE_specifics_t asn_SPC_DynamicDLTransmissionInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_DynamicDLTransmissionInformation_1[2]; +extern asn_per_constraints_t asn_PER_type_DynamicDLTransmissionInformation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _DynamicDLTransmissionInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.c new file mode 100644 index 0000000..7fd9d42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.c @@ -0,0 +1,240 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "DynamicNAICSInformation.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_transmissionModes_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pB_information_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pA_list_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_pA_list_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (SIZE(0..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_transmissionModes_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pB_information_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pA_list_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (SIZE(0..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pA_list_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PA_Values, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pA_list_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pA_list_specs_4 = { + sizeof(struct DynamicNAICSInformation__pA_list), + offsetof(struct DynamicNAICSInformation__pA_list, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pA_list_4 = { + "pA-list", + "pA-list", + &asn_OP_SEQUENCE_OF, + asn_DEF_pA_list_tags_4, + sizeof(asn_DEF_pA_list_tags_4) + /sizeof(asn_DEF_pA_list_tags_4[0]) - 1, /* 1 */ + asn_DEF_pA_list_tags_4, /* Same as above */ + sizeof(asn_DEF_pA_list_tags_4) + /sizeof(asn_DEF_pA_list_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_pA_list_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_pA_list_4, + 1, /* Single element */ + &asn_SPC_pA_list_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DynamicNAICSInformation_1[] = { + { ATF_POINTER, 2, offsetof(struct DynamicNAICSInformation, transmissionModes), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_transmissionModes_constr_2, memb_transmissionModes_constraint_1 }, + 0, 0, /* No default value */ + "transmissionModes" + }, + { ATF_POINTER, 1, offsetof(struct DynamicNAICSInformation, pB_information), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_pB_information_constr_3, memb_pB_information_constraint_1 }, + 0, 0, /* No default value */ + "pB-information" + }, + { ATF_NOFLAGS, 0, offsetof(struct DynamicNAICSInformation, pA_list), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_pA_list_4, + 0, + { 0, &asn_PER_memb_pA_list_constr_4, memb_pA_list_constraint_1 }, + 0, 0, /* No default value */ + "pA-list" + }, + { ATF_POINTER, 1, offsetof(struct DynamicNAICSInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P133, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_DynamicNAICSInformation_oms_1[] = { 0, 1, 3 }; +static const ber_tlv_tag_t asn_DEF_DynamicNAICSInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DynamicNAICSInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transmissionModes */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pB-information */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pA-list */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DynamicNAICSInformation_specs_1 = { + sizeof(struct DynamicNAICSInformation), + offsetof(struct DynamicNAICSInformation, _asn_ctx), + asn_MAP_DynamicNAICSInformation_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_DynamicNAICSInformation_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DynamicNAICSInformation = { + "DynamicNAICSInformation", + "DynamicNAICSInformation", + &asn_OP_SEQUENCE, + asn_DEF_DynamicNAICSInformation_tags_1, + sizeof(asn_DEF_DynamicNAICSInformation_tags_1) + /sizeof(asn_DEF_DynamicNAICSInformation_tags_1[0]), /* 1 */ + asn_DEF_DynamicNAICSInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_DynamicNAICSInformation_tags_1) + /sizeof(asn_DEF_DynamicNAICSInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DynamicNAICSInformation_1, + 4, /* Elements count */ + &asn_SPC_DynamicNAICSInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.h new file mode 100644 index 0000000..3c128fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/DynamicNAICSInformation.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _DynamicNAICSInformation_H_ +#define _DynamicNAICSInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "NativeInteger.h" +#include "PA-Values.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* DynamicNAICSInformation */ +typedef struct DynamicNAICSInformation { + BIT_STRING_t *transmissionModes; /* OPTIONAL */ + long *pB_information; /* OPTIONAL */ + struct DynamicNAICSInformation__pA_list { + A_SEQUENCE_OF(PA_Values_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pA_list; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DynamicNAICSInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DynamicNAICSInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_DynamicNAICSInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_DynamicNAICSInformation_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DynamicNAICSInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.c new file mode 100644 index 0000000..afdef5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RAB-ID.h" + +int +E_RAB_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_E_RAB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_E_RAB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_ID = { + "E-RAB-ID", + "E-RAB-ID", + &asn_OP_NativeInteger, + asn_DEF_E_RAB_ID_tags_1, + sizeof(asn_DEF_E_RAB_ID_tags_1) + /sizeof(asn_DEF_E_RAB_ID_tags_1[0]), /* 1 */ + asn_DEF_E_RAB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RAB_ID_tags_1) + /sizeof(asn_DEF_E_RAB_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RAB_ID_constr_1, E_RAB_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.h new file mode 100644 index 0000000..69a47bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RAB_ID_H_ +#define _E_RAB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E-RAB-ID */ +typedef long E_RAB_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_E_RAB_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_ID; +asn_struct_free_f E_RAB_ID_free; +asn_struct_print_f E_RAB_ID_print; +asn_constr_check_f E_RAB_ID_constraint; +ber_type_decoder_f E_RAB_ID_decode_ber; +der_type_encoder_f E_RAB_ID_encode_der; +xer_type_decoder_f E_RAB_ID_decode_xer; +xer_type_encoder_f E_RAB_ID_encode_xer; +per_type_decoder_f E_RAB_ID_decode_uper; +per_type_encoder_f E_RAB_ID_encode_uper; +per_type_decoder_f E_RAB_ID_decode_aper; +per_type_encoder_f E_RAB_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RAB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.c new file mode 100644 index 0000000..e616412 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RAB-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RAB_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 1, offsetof(struct E_RAB_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P140, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RAB_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RAB_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RAB_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Item_specs_1 = { + sizeof(struct E_RAB_Item), + offsetof(struct E_RAB_Item, _asn_ctx), + asn_MAP_E_RAB_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RAB_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_Item = { + "E-RAB-Item", + "E-RAB-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RAB_Item_tags_1, + sizeof(asn_DEF_E_RAB_Item_tags_1) + /sizeof(asn_DEF_E_RAB_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RAB_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RAB_Item_tags_1) + /sizeof(asn_DEF_E_RAB_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_Item_1, + 3, /* Elements count */ + &asn_SPC_E_RAB_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.h new file mode 100644 index 0000000..a1fa6a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RAB_Item_H_ +#define _E_RAB_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RAB-Item */ +typedef struct E_RAB_Item { + E_RAB_ID_t e_RAB_ID; + Cause_t cause; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RAB_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RAB_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c new file mode 100644 index 0000000..b69e40e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RAB-Level-QoS-Parameters.h" + +#include "GBR-QosInformation.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RAB_Level_QoS_Parameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters, qCI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "qCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters, allocationAndRetentionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AllocationAndRetentionPriority, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "allocationAndRetentionPriority" + }, + { ATF_POINTER, 2, offsetof(struct E_RAB_Level_QoS_Parameters, gbrQosInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GBR_QosInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gbrQosInformation" + }, + { ATF_POINTER, 1, offsetof(struct E_RAB_Level_QoS_Parameters, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P139, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RAB_Level_QoS_Parameters_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RAB_Level_QoS_Parameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RAB_Level_QoS_Parameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qCI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* allocationAndRetentionPriority */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gbrQosInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Level_QoS_Parameters_specs_1 = { + sizeof(struct E_RAB_Level_QoS_Parameters), + offsetof(struct E_RAB_Level_QoS_Parameters, _asn_ctx), + asn_MAP_E_RAB_Level_QoS_Parameters_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RAB_Level_QoS_Parameters_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_Level_QoS_Parameters = { + "E-RAB-Level-QoS-Parameters", + "E-RAB-Level-QoS-Parameters", + &asn_OP_SEQUENCE, + asn_DEF_E_RAB_Level_QoS_Parameters_tags_1, + sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_tags_1) + /sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_tags_1[0]), /* 1 */ + asn_DEF_E_RAB_Level_QoS_Parameters_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_tags_1) + /sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_Level_QoS_Parameters_1, + 4, /* Elements count */ + &asn_SPC_E_RAB_Level_QoS_Parameters_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h new file mode 100644 index 0000000..92a8255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-Level-QoS-Parameters.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RAB_Level_QoS_Parameters_H_ +#define _E_RAB_Level_QoS_Parameters_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "QCI.h" +#include "AllocationAndRetentionPriority.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GBR_QosInformation; +struct ProtocolExtensionContainer; + +/* E-RAB-Level-QoS-Parameters */ +typedef struct E_RAB_Level_QoS_Parameters { + QCI_t qCI; + AllocationAndRetentionPriority_t allocationAndRetentionPriority; + struct GBR_QosInformation *gbrQosInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_Level_QoS_Parameters_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_Level_QoS_Parameters; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Level_QoS_Parameters_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RAB_Level_QoS_Parameters_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RAB_Level_QoS_Parameters_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.c new file mode 100644 index 0000000..82f3806 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RAB-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RAB_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RAB_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P46, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RAB_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RAB_List_specs_1 = { + sizeof(struct E_RAB_List), + offsetof(struct E_RAB_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_List = { + "E-RAB-List", + "E-RAB-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RAB_List_tags_1, + sizeof(asn_DEF_E_RAB_List_tags_1) + /sizeof(asn_DEF_E_RAB_List_tags_1[0]), /* 1 */ + asn_DEF_E_RAB_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RAB_List_tags_1) + /sizeof(asn_DEF_E_RAB_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RAB_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RAB_List_1, + 1, /* Single element */ + &asn_SPC_E_RAB_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.h new file mode 100644 index 0000000..cfbef63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RAB-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RAB_List_H_ +#define _E_RAB_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RAB-List */ +typedef struct E_RAB_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_List; +extern asn_SET_OF_specifics_t asn_SPC_E_RAB_List_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RAB_List_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RAB_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RAB_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.c new file mode 100644 index 0000000..06fe740 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.c @@ -0,0 +1,315 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABUsageReport-Item.h" + +#include "ProtocolExtensionContainer.h" +static int +usageCountUL_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +usageCountDL_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +memb_startTimeStamp_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_endTimeStamp_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_usageCountUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static int +memb_usageCountDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static asn_per_constraints_t asn_PER_type_usageCountUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_usageCountDL_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_startTimeStamp_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_endTimeStamp_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_usageCountUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_usageCountDL_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_specifics_t asn_SPC_usageCountUL_specs_4 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_usageCountUL_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_usageCountUL_4 = { + "usageCountUL", + "usageCountUL", + &asn_OP_NativeInteger, + asn_DEF_usageCountUL_tags_4, + sizeof(asn_DEF_usageCountUL_tags_4) + /sizeof(asn_DEF_usageCountUL_tags_4[0]) - 1, /* 1 */ + asn_DEF_usageCountUL_tags_4, /* Same as above */ + sizeof(asn_DEF_usageCountUL_tags_4) + /sizeof(asn_DEF_usageCountUL_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_usageCountUL_constr_4, usageCountUL_4_constraint }, + 0, 0, /* No members */ + &asn_SPC_usageCountUL_specs_4 /* Additional specs */ +}; + +static const asn_INTEGER_specifics_t asn_SPC_usageCountDL_specs_5 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_usageCountDL_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_usageCountDL_5 = { + "usageCountDL", + "usageCountDL", + &asn_OP_NativeInteger, + asn_DEF_usageCountDL_tags_5, + sizeof(asn_DEF_usageCountDL_tags_5) + /sizeof(asn_DEF_usageCountDL_tags_5[0]) - 1, /* 1 */ + asn_DEF_usageCountDL_tags_5, /* Same as above */ + sizeof(asn_DEF_usageCountDL_tags_5) + /sizeof(asn_DEF_usageCountDL_tags_5[0]), /* 2 */ + { 0, &asn_PER_type_usageCountDL_constr_5, usageCountDL_5_constraint }, + 0, 0, /* No members */ + &asn_SPC_usageCountDL_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABUsageReport_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item, startTimeStamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, &asn_PER_memb_startTimeStamp_constr_2, memb_startTimeStamp_constraint_1 }, + 0, 0, /* No default value */ + "startTimeStamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item, endTimeStamp), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, &asn_PER_memb_endTimeStamp_constr_3, memb_endTimeStamp_constraint_1 }, + 0, 0, /* No default value */ + "endTimeStamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item, usageCountUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_usageCountUL_4, + 0, + { 0, &asn_PER_memb_usageCountUL_constr_4, memb_usageCountUL_constraint_1 }, + 0, 0, /* No default value */ + "usageCountUL" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item, usageCountDL), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_usageCountDL_5, + 0, + { 0, &asn_PER_memb_usageCountDL_constr_5, memb_usageCountDL_constraint_1 }, + 0, 0, /* No default value */ + "usageCountDL" + }, + { ATF_POINTER, 1, offsetof(struct E_RABUsageReport_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P141, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABUsageReport_Item_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABUsageReport_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABUsageReport_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startTimeStamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* endTimeStamp */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* usageCountUL */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* usageCountDL */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_Item_specs_1 = { + sizeof(struct E_RABUsageReport_Item), + offsetof(struct E_RABUsageReport_Item, _asn_ctx), + asn_MAP_E_RABUsageReport_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABUsageReport_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_Item = { + "E-RABUsageReport-Item", + "E-RABUsageReport-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABUsageReport_Item_tags_1, + sizeof(asn_DEF_E_RABUsageReport_Item_tags_1) + /sizeof(asn_DEF_E_RABUsageReport_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABUsageReport_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABUsageReport_Item_tags_1) + /sizeof(asn_DEF_E_RABUsageReport_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABUsageReport_Item_1, + 5, /* Elements count */ + &asn_SPC_E_RABUsageReport_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.h new file mode 100644 index 0000000..cde197b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReport-Item.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABUsageReport_Item_H_ +#define _E_RABUsageReport_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABUsageReport-Item */ +typedef struct E_RABUsageReport_Item { + OCTET_STRING_t startTimeStamp; + OCTET_STRING_t endTimeStamp; + unsigned long usageCountUL; + unsigned long usageCountDL; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABUsageReport_Item_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_usageCountUL_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_usageCountDL_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABUsageReport_Item_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABUsageReport_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.c new file mode 100644 index 0000000..d6f246a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABUsageReportList.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABUsageReportList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABUsageReportList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P47, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABUsageReportList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABUsageReportList_specs_1 = { + sizeof(struct E_RABUsageReportList), + offsetof(struct E_RABUsageReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABUsageReportList = { + "E-RABUsageReportList", + "E-RABUsageReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABUsageReportList_tags_1, + sizeof(asn_DEF_E_RABUsageReportList_tags_1) + /sizeof(asn_DEF_E_RABUsageReportList_tags_1[0]), /* 1 */ + asn_DEF_E_RABUsageReportList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABUsageReportList_tags_1) + /sizeof(asn_DEF_E_RABUsageReportList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABUsageReportList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABUsageReportList_1, + 1, /* Single element */ + &asn_SPC_E_RABUsageReportList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.h new file mode 100644 index 0000000..1d4a26e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABUsageReportList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABUsageReportList_H_ +#define _E_RABUsageReportList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABUsageReportList */ +typedef struct E_RABUsageReportList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABUsageReportList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABUsageReportList; +extern asn_SET_OF_specifics_t asn_SPC_E_RABUsageReportList_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABUsageReportList_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABUsageReportList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABUsageReportList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.c new file mode 100644 index 0000000..b57fc16 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-Item.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_Item, uL_GTP_TunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTP-TunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_Item, dL_GTP_TunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GTP-TunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_Item_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GTP-TunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-GTP-TunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_Item), + offsetof(struct E_RABs_Admitted_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_Item_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_Item = { + "E-RABs-Admitted-Item", + "E-RABs-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.h new file mode 100644 index 0000000..5f67e0b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-Item.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_Item_H_ +#define _E_RABs_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-Item */ +typedef struct E_RABs_Admitted_Item { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *uL_GTP_TunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_GTP_TunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.c new file mode 100644 index 0000000..1f00dbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_List_specs_1 = { + sizeof(struct E_RABs_Admitted_List), + offsetof(struct E_RABs_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_List = { + "E-RABs-Admitted-List", + "E-RABs-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_List_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_List_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_List_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.h new file mode 100644 index 0000000..2451eb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_List_H_ +#define _E_RABs_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-List */ +typedef struct E_RABs_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c new file mode 100644 index 0000000..30d9ef4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c @@ -0,0 +1,112 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_oms_1[] = { 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer = { + "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer", + "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h new file mode 100644 index 0000000..a6b3c14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_ +#define _E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer */ +typedef struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c new file mode 100644 index 0000000..9d4e3db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, seNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P20, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer = { + "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer", + "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h new file mode 100644 index 0000000..d475930 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_ +#define _E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-Item-Split-Bearer */ +typedef struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c new file mode 100644 index 0000000..b005660 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-Item.h" + +#include "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h" +#include "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_Item_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_Item *)0)->present), + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item = { + "E-RABs-Admitted-ToBeAdded-Item", + "E-RABs-Admitted-ToBeAdded-Item", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_Item_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_Item_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h new file mode 100644 index 0000000..a11858a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-Item.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_Item_H_ +#define _E_RABs_Admitted_ToBeAdded_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeAdded_Item_PR { + E_RABs_Admitted_ToBeAdded_Item_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_Item_PR_sCG_Bearer, + E_RABs_Admitted_ToBeAdded_Item_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeAdded_Item_PR; + +/* Forward declarations */ +struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; +struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; + +/* E-RABs-Admitted-ToBeAdded-Item */ +typedef struct E_RABs_Admitted_ToBeAdded_Item { + E_RABs_Admitted_ToBeAdded_Item_PR present; + union E_RABs_Admitted_ToBeAdded_Item_u { + struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer *sCG_Bearer; + struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c new file mode 100644 index 0000000..180acd0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_List_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_List), + offsetof(struct E_RABs_Admitted_ToBeAdded_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_List = { + "E-RABs-Admitted-ToBeAdded-List", + "E-RABs-Admitted-ToBeAdded-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h new file mode 100644 index 0000000..a558e33 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_List_H_ +#define _E_RABs_Admitted_ToBeAdded_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeAdded-List */ +typedef struct E_RABs_Admitted_ToBeAdded_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c new file mode 100644 index 0000000..9dbc7d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c @@ -0,0 +1,112 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P30, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_oms_1[] = { 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer = { + "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer", + "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h new file mode 100644 index 0000000..2493347 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_ +#define _E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer */ +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c new file mode 100644 index 0000000..2742b80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, seNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P31, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer = { + "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer", + "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h new file mode 100644 index 0000000..87f653c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_ +#define _E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer */ +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c new file mode 100644 index 0000000..a5daae3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-ModAckItem.h" + +#include "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h" +#include "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_ModAckItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_ModAckItem *)0)->present), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem = { + "E-RABs-Admitted-ToBeAdded-ModAckItem", + "E-RABs-Admitted-ToBeAdded-ModAckItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_ModAckItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h new file mode 100644 index 0000000..9877f07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_ModAckItem_H_ +#define _E_RABs_Admitted_ToBeAdded_ModAckItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeAdded_ModAckItem_PR { + E_RABs_Admitted_ToBeAdded_ModAckItem_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_ModAckItem_PR_sCG_Bearer, + E_RABs_Admitted_ToBeAdded_ModAckItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeAdded_ModAckItem_PR; + +/* Forward declarations */ +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; + +/* E-RABs-Admitted-ToBeAdded-ModAckItem */ +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItem { + E_RABs_Admitted_ToBeAdded_ModAckItem_PR present; + union E_RABs_Admitted_ToBeAdded_ModAckItem_u { + struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_ModAckItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c new file mode 100644 index 0000000..9a4a1ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-ModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_ModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P20, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckList), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList = { + "E-RABs-Admitted-ToBeAdded-ModAckList", + "E-RABs-Admitted-ToBeAdded-ModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_ModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h new file mode 100644 index 0000000..c754abb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-ModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_ModAckList_H_ +#define _E_RABs_Admitted_ToBeAdded_ModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeAdded-ModAckList */ +typedef struct E_RABs_Admitted_ToBeAdded_ModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_ModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..5fff1a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P49, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..ca52542 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent { + GTPtunnelEndpoint_t sgNB_DL_GTP_TEIDatSCG; + struct GTPtunnelEndpoint *secondary_sgNB_DL_GTP_TEIDatSCG; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..d73dff9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c @@ -0,0 +1,144 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 7, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 6, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, rlc_Mode), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode" + }, + { ATF_POINTER, 5, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 4, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P48, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rlc-Mode */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 8, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1, + 8, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..08db077 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GTPtunnelEndpoint.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct E_RAB_Level_QoS_Parameters; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent { + GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + struct GTPtunnelEndpoint *sgNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + RLCMode_t *rlc_Mode; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct E_RAB_Level_QoS_Parameters *mCG_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1[8]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c new file mode 100644 index 0000000..48407f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P47, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h new file mode 100644 index 0000000..af4ec29 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; + +/* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_u { + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c new file mode 100644 index 0000000..bb1fe9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P29, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h new file mode 100644 index 0000000..4f848d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..3935b02 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P64, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..d93d473 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent { + GTPtunnelEndpoint_t sgNB_DL_GTP_TEIDatSCG; + struct GTPtunnelEndpoint *secondary_sgNB_DL_GTP_TEIDatSCG; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..92d9618 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c @@ -0,0 +1,144 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 7, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 6, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, rlc_Mode), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode" + }, + { ATF_POINTER, 5, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 4, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P63, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rlc-Mode */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 8, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1, + 8, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..c336ef2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GTPtunnelEndpoint.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct E_RAB_Level_QoS_Parameters; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent { + GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + struct GTPtunnelEndpoint *sgNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + RLCMode_t *rlc_Mode; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct E_RAB_Level_QoS_Parameters *mCG_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1[8]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c new file mode 100644 index 0000000..b4719f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P62, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h new file mode 100644 index 0000000..4e26b19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; + +/* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_u { + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c new file mode 100644 index 0000000..736f3d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeAdded-SgNBModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeAdded_SgNBModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P33, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAckList), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList = { + "E-RABs-Admitted-ToBeAdded-SgNBModAckList", + "E-RABs-Admitted-ToBeAdded-SgNBModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeAdded_SgNBModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h new file mode 100644 index 0000000..22b2294 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeAdded-SgNBModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_ +#define _E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeAdded-SgNBModAckList */ +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c new file mode 100644 index 0000000..24fad6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P32, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer = { + "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer", + "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h new file mode 100644 index 0000000..cb477c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_ +#define _E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer */ +typedef struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *s1_DL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c new file mode 100644 index 0000000..ba5e326 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, seNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P33, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer = { + "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer", + "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h new file mode 100644 index 0000000..3d21af8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_ +#define _E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer */ +typedef struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *seNB_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c new file mode 100644 index 0000000..e5ab1a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-ModAckItem.h" + +#include "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h" +#include "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeModified_ModAckItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_ModAckItem *)0)->present), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem = { + "E-RABs-Admitted-ToBeModified-ModAckItem", + "E-RABs-Admitted-ToBeModified-ModAckItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeModified_ModAckItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h new file mode 100644 index 0000000..4a7fe77 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_ModAckItem_H_ +#define _E_RABs_Admitted_ToBeModified_ModAckItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeModified_ModAckItem_PR { + E_RABs_Admitted_ToBeModified_ModAckItem_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_ModAckItem_PR_sCG_Bearer, + E_RABs_Admitted_ToBeModified_ModAckItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeModified_ModAckItem_PR; + +/* Forward declarations */ +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; + +/* E-RABs-Admitted-ToBeModified-ModAckItem */ +typedef struct E_RABs_Admitted_ToBeModified_ModAckItem { + E_RABs_Admitted_ToBeModified_ModAckItem_PR present; + union E_RABs_Admitted_ToBeModified_ModAckItem_u { + struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_ModAckItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c new file mode 100644 index 0000000..c7145d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-ModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeModified_ModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P21, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckList), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList = { + "E-RABs-Admitted-ToBeModified-ModAckList", + "E-RABs-Admitted-ToBeModified-ModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeModified_ModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h new file mode 100644 index 0000000..abcc0ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-ModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_ModAckList_H_ +#define _E_RABs_Admitted_ToBeModified_ModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeModified-ModAckList */ +typedef struct E_RABs_Admitted_ToBeModified_ModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_ModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..2205853 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P67, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent", + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..3012b83 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent { + struct GTPtunnelEndpoint *sgNB_DL_GTP_TEIDatSCG; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..8697a05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 5, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 4, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P66, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent", + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..acb1006 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_ +#define _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct E_RAB_Level_QoS_Parameters; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent */ +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent { + struct GTPtunnelEndpoint *s1_DL_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *sgNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + struct E_RAB_Level_QoS_Parameters *mCG_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c new file mode 100644 index 0000000..6b6b1ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h" +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P65, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item", + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h new file mode 100644 index 0000000..09d4f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_ +#define _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; + +/* E-RABs-Admitted-ToBeModified-SgNBModAck-Item */ +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR present; + union E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_u { + struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c new file mode 100644 index 0000000..8d810b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeModified-SgNBModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeModified_SgNBModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P34, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAckList), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList = { + "E-RABs-Admitted-ToBeModified-SgNBModAckList", + "E-RABs-Admitted-ToBeModified-SgNBModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeModified_SgNBModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h new file mode 100644 index 0000000..0c0c980 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeModified-SgNBModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeModified_SgNBModAckList_H_ +#define _E_RABs_Admitted_ToBeModified_SgNBModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeModified-SgNBModAckList */ +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeModified_SgNBModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c new file mode 100644 index 0000000..231ccf7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P34, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer = { + "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer", + "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h new file mode 100644 index 0000000..b444de3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_ +#define _E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer */ +typedef struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c new file mode 100644 index 0000000..f17da18 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P35, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer = { + "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer", + "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h new file mode 100644 index 0000000..438be77 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_ +#define _E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer */ +typedef struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c new file mode 100644 index 0000000..1ca3800 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-ModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeReleased_ModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P22, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckList), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList = { + "E-RABs-Admitted-ToBeReleased-ModAckList", + "E-RABs-Admitted-ToBeReleased-ModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeReleased_ModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h new file mode 100644 index 0000000..f498163 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-ModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_ModAckList_H_ +#define _E_RABs_Admitted_ToBeReleased_ModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeReleased-ModAckList */ +typedef struct E_RABs_Admitted_ToBeReleased_ModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_ModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..539aab9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P70, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent = { + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent", + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..4777250 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..4b58fea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P69, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent = { + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent", + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..5957f4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_ +#define _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent */ +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c new file mode 100644 index 0000000..eda6529 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-SgNBModAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeReleased_SgNBModAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P35, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAckList), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList = { + "E-RABs-Admitted-ToBeReleased-SgNBModAckList", + "E-RABs-Admitted-ToBeReleased-SgNBModAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeReleased_SgNBModAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h new file mode 100644 index 0000000..14e89b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBModAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_ +#define _E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeReleased-SgNBModAckList */ +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c new file mode 100644 index 0000000..91c40ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, rlc_Mode_transferred), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode-transferred" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P81, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-Mode-transferred */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = { + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item", + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h new file mode 100644 index 0000000..9ed4adc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_ +#define _E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item */ +typedef struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item { + E_RAB_ID_t e_RAB_ID; + RLCMode_t rlc_Mode_transferred; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c new file mode 100644 index 0000000..c70731b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P40, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_specs_1 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = { + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList", + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h new file mode 100644 index 0000000..e97ab50 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_ +#define _E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList */ +typedef struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c new file mode 100644 index 0000000..ea9e63b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToReleased-ModAckItem.h" + +#include "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h" +#include "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_Admitted_ToReleased_ModAckItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToReleased_ModAckItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToReleased_ModAckItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToReleased_ModAckItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToReleased_ModAckItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_Admitted_ToReleased_ModAckItem_specs_1 = { + sizeof(struct E_RABs_Admitted_ToReleased_ModAckItem), + offsetof(struct E_RABs_Admitted_ToReleased_ModAckItem, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToReleased_ModAckItem, present), + sizeof(((struct E_RABs_Admitted_ToReleased_ModAckItem *)0)->present), + asn_MAP_E_RABs_Admitted_ToReleased_ModAckItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToReleased_ModAckItem = { + "E-RABs-Admitted-ToReleased-ModAckItem", + "E-RABs-Admitted-ToReleased-ModAckItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_Admitted_ToReleased_ModAckItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_Admitted_ToReleased_ModAckItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToReleased_ModAckItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h new file mode 100644 index 0000000..1d992a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-ModAckItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToReleased_ModAckItem_H_ +#define _E_RABs_Admitted_ToReleased_ModAckItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToReleased_ModAckItem_PR { + E_RABs_Admitted_ToReleased_ModAckItem_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToReleased_ModAckItem_PR_sCG_Bearer, + E_RABs_Admitted_ToReleased_ModAckItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_Admitted_ToReleased_ModAckItem_PR; + +/* Forward declarations */ +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; + +/* E-RABs-Admitted-ToReleased-ModAckItem */ +typedef struct E_RABs_Admitted_ToReleased_ModAckItem { + E_RABs_Admitted_ToReleased_ModAckItem_PR present; + union E_RABs_Admitted_ToReleased_ModAckItem_u { + struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToReleased_ModAckItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToReleased_ModAckItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToReleased_ModAckItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c new file mode 100644 index 0000000..7da2793 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-Admitted-ToReleased-SgNBModAck-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h" +#include "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration), + offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, present), + sizeof(((struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToReleased_SgNBModAck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P68, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_Admitted_ToReleased_SgNBModAck_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToReleased_SgNBModAck_Item_specs_1 = { + sizeof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item), + offsetof(struct E_RABs_Admitted_ToReleased_SgNBModAck_Item, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_Admitted_ToReleased_SgNBModAck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item = { + "E-RABs-Admitted-ToReleased-SgNBModAck-Item", + "E-RABs-Admitted-ToReleased-SgNBModAck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1, + sizeof(asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToReleased_SgNBModAck_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToReleased_SgNBModAck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h new file mode 100644 index 0000000..292f0a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-Admitted-ToReleased-SgNBModAck-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_ +#define _E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR { + E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; + +/* E-RABs-Admitted-ToReleased-SgNBModAck-Item */ +typedef struct E_RABs_Admitted_ToReleased_SgNBModAck_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration { + E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR present; + union E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_u { + struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToReleased_SgNBModAck_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..0d13314 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 2, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P77, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent = { + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent", + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..7f921db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent { + struct GTPtunnelEndpoint *secondary_meNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..ff3050f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P76, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent = { + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent", + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..3324a3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_ +#define _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent */ +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c new file mode 100644 index 0000000..467a91f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h" +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, present), + sizeof(((struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P75, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_specs_1 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item = { + "E-RABs-AdmittedToBeModified-SgNBModConf-Item", + "E-RABs-AdmittedToBeModified-SgNBModConf-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h new file mode 100644 index 0000000..1802fa0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConf-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_ +#define _E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR { + E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; + +/* E-RABs-AdmittedToBeModified-SgNBModConf-Item */ +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration { + E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR present; + union E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_u { + struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c new file mode 100644 index 0000000..505b502 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-AdmittedToBeModified-SgNBModConfList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_AdmittedToBeModified_SgNBModConfList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConfList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P38, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConfList_specs_1 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConfList), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConfList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList = { + "E-RABs-AdmittedToBeModified-SgNBModConfList", + "E-RABs-AdmittedToBeModified-SgNBModConfList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_AdmittedToBeModified_SgNBModConfList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConfList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConfList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h new file mode 100644 index 0000000..974237c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-AdmittedToBeModified-SgNBModConfList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_AdmittedToBeModified_SgNBModConfList_H_ +#define _E_RABs_AdmittedToBeModified_SgNBModConfList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-AdmittedToBeModified-SgNBModConfList */ +typedef struct E_RABs_AdmittedToBeModified_SgNBModConfList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConfList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_AdmittedToBeModified_SgNBModConfList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c new file mode 100644 index 0000000..b28fe28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-DataForwardingAddress-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_Item, dl_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dl-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_DataForwardingAddress_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P103, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_DataForwardingAddress_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_DataForwardingAddress_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_DataForwardingAddress_Item_specs_1 = { + sizeof(struct E_RABs_DataForwardingAddress_Item), + offsetof(struct E_RABs_DataForwardingAddress_Item, _asn_ctx), + asn_MAP_E_RABs_DataForwardingAddress_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_DataForwardingAddress_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_Item = { + "E-RABs-DataForwardingAddress-Item", + "E-RABs-DataForwardingAddress-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1, + sizeof(asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_DataForwardingAddress_Item_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_DataForwardingAddress_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h new file mode 100644 index 0000000..84c5d98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_DataForwardingAddress_Item_H_ +#define _E_RABs_DataForwardingAddress_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-DataForwardingAddress-Item */ +typedef struct E_RABs_DataForwardingAddress_Item { + E_RAB_ID_t e_RAB_ID; + GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_DataForwardingAddress_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_DataForwardingAddress_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c new file mode 100644 index 0000000..bb83dd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-DataForwardingAddress-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_DataForwardingAddress_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P45, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_DataForwardingAddress_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_DataForwardingAddress_List_specs_1 = { + sizeof(struct E_RABs_DataForwardingAddress_List), + offsetof(struct E_RABs_DataForwardingAddress_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_List = { + "E-RABs-DataForwardingAddress-List", + "E-RABs-DataForwardingAddress-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_DataForwardingAddress_List_tags_1, + sizeof(asn_DEF_E_RABs_DataForwardingAddress_List_tags_1) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_DataForwardingAddress_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_DataForwardingAddress_List_tags_1) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_DataForwardingAddress_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_DataForwardingAddress_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_DataForwardingAddress_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h new file mode 100644 index 0000000..96dd116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-DataForwardingAddress-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_DataForwardingAddress_List_H_ +#define _E_RABs_DataForwardingAddress_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-DataForwardingAddress-List */ +typedef struct E_RABs_DataForwardingAddress_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_DataForwardingAddress_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_DataForwardingAddress_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c new file mode 100644 index 0000000..47fa4b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToCounterCheck-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_SubjectToCounterCheck_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheck_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P26, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_SubjectToCounterCheck_List_specs_1 = { + sizeof(struct E_RABs_SubjectToCounterCheck_List), + offsetof(struct E_RABs_SubjectToCounterCheck_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheck_List = { + "E-RABs-SubjectToCounterCheck-List", + "E-RABs-SubjectToCounterCheck-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheck_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_SubjectToCounterCheck_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_SubjectToCounterCheck_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_SubjectToCounterCheck_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h new file mode 100644 index 0000000..1aa0700 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheck-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToCounterCheck_List_H_ +#define _E_RABs_SubjectToCounterCheck_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-SubjectToCounterCheck-List */ +typedef struct E_RABs_SubjectToCounterCheck_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToCounterCheck_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheck_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToCounterCheck_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c new file mode 100644 index 0000000..0df0fe7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.c @@ -0,0 +1,243 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToCounterCheckItem.h" + +#include "ProtocolExtensionContainer.h" +static int +uL_Count_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +dL_Count_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +memb_uL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static int +memb_dL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static asn_per_constraints_t asn_PER_type_uL_Count_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_dL_Count_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_uL_Count_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dL_Count_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_specifics_t asn_SPC_uL_Count_specs_3 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_uL_Count_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_uL_Count_3 = { + "uL-Count", + "uL-Count", + &asn_OP_NativeInteger, + asn_DEF_uL_Count_tags_3, + sizeof(asn_DEF_uL_Count_tags_3) + /sizeof(asn_DEF_uL_Count_tags_3[0]) - 1, /* 1 */ + asn_DEF_uL_Count_tags_3, /* Same as above */ + sizeof(asn_DEF_uL_Count_tags_3) + /sizeof(asn_DEF_uL_Count_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_uL_Count_constr_3, uL_Count_3_constraint }, + 0, 0, /* No members */ + &asn_SPC_uL_Count_specs_3 /* Additional specs */ +}; + +static const asn_INTEGER_specifics_t asn_SPC_dL_Count_specs_4 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_dL_Count_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dL_Count_4 = { + "dL-Count", + "dL-Count", + &asn_OP_NativeInteger, + asn_DEF_dL_Count_tags_4, + sizeof(asn_DEF_dL_Count_tags_4) + /sizeof(asn_DEF_dL_Count_tags_4[0]) - 1, /* 1 */ + asn_DEF_dL_Count_tags_4, /* Same as above */ + sizeof(asn_DEF_dL_Count_tags_4) + /sizeof(asn_DEF_dL_Count_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_dL_Count_constr_4, dL_Count_4_constraint }, + 0, 0, /* No members */ + &asn_SPC_dL_Count_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheckItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItem, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItem, uL_Count), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_uL_Count_3, + 0, + { 0, &asn_PER_memb_uL_Count_constr_3, memb_uL_Count_constraint_1 }, + 0, 0, /* No default value */ + "uL-Count" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItem, dL_Count), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dL_Count_4, + 0, + { 0, &asn_PER_memb_dL_Count_constr_4, memb_dL_Count_constraint_1 }, + 0, 0, /* No default value */ + "dL-Count" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_SubjectToCounterCheckItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P41, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_SubjectToCounterCheckItem_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToCounterCheckItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Count */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Count */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToCounterCheckItem_specs_1 = { + sizeof(struct E_RABs_SubjectToCounterCheckItem), + offsetof(struct E_RABs_SubjectToCounterCheckItem, _asn_ctx), + asn_MAP_E_RABs_SubjectToCounterCheckItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_SubjectToCounterCheckItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItem = { + "E-RABs-SubjectToCounterCheckItem", + "E-RABs-SubjectToCounterCheckItem", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToCounterCheckItem_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_SubjectToCounterCheckItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h new file mode 100644 index 0000000..c83c6ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToCounterCheckItem.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToCounterCheckItem_H_ +#define _E_RABs_SubjectToCounterCheckItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-SubjectToCounterCheckItem */ +typedef struct E_RABs_SubjectToCounterCheckItem { + E_RAB_ID_t e_RAB_ID; + unsigned long uL_Count; + unsigned long dL_Count; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToCounterCheckItem_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_uL_Count_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_dL_Count_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToCounterCheckItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c new file mode 100644 index 0000000..2be2432 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.c @@ -0,0 +1,243 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToSgNBCounterCheck-Item.h" + +#include "ProtocolExtensionContainer.h" +static int +uL_Count_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +dL_Count_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +memb_uL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static int +memb_dL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static asn_per_constraints_t asn_PER_type_uL_Count_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_dL_Count_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_uL_Count_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dL_Count_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_specifics_t asn_SPC_uL_Count_specs_3 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_uL_Count_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_uL_Count_3 = { + "uL-Count", + "uL-Count", + &asn_OP_NativeInteger, + asn_DEF_uL_Count_tags_3, + sizeof(asn_DEF_uL_Count_tags_3) + /sizeof(asn_DEF_uL_Count_tags_3[0]) - 1, /* 1 */ + asn_DEF_uL_Count_tags_3, /* Same as above */ + sizeof(asn_DEF_uL_Count_tags_3) + /sizeof(asn_DEF_uL_Count_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_uL_Count_constr_3, uL_Count_3_constraint }, + 0, 0, /* No members */ + &asn_SPC_uL_Count_specs_3 /* Additional specs */ +}; + +static const asn_INTEGER_specifics_t asn_SPC_dL_Count_specs_4 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_dL_Count_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dL_Count_4 = { + "dL-Count", + "dL-Count", + &asn_OP_NativeInteger, + asn_DEF_dL_Count_tags_4, + sizeof(asn_DEF_dL_Count_tags_4) + /sizeof(asn_DEF_dL_Count_tags_4[0]) - 1, /* 1 */ + asn_DEF_dL_Count_tags_4, /* Same as above */ + sizeof(asn_DEF_dL_Count_tags_4) + /sizeof(asn_DEF_dL_Count_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_dL_Count_constr_4, dL_Count_4_constraint }, + 0, 0, /* No members */ + &asn_SPC_dL_Count_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_Item, uL_Count), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_uL_Count_3, + 0, + { 0, &asn_PER_memb_uL_Count_constr_3, memb_uL_Count_constraint_1 }, + 0, 0, /* No default value */ + "uL-Count" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_Item, dL_Count), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dL_Count_4, + 0, + { 0, &asn_PER_memb_dL_Count_constr_4, memb_dL_Count_constraint_1 }, + 0, 0, /* No default value */ + "dL-Count" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P86, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_SubjectToSgNBCounterCheck_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToSgNBCounterCheck_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Count */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Count */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_Item_specs_1 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_Item), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_Item, _asn_ctx), + asn_MAP_E_RABs_SubjectToSgNBCounterCheck_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_SubjectToSgNBCounterCheck_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item = { + "E-RABs-SubjectToSgNBCounterCheck-Item", + "E-RABs-SubjectToSgNBCounterCheck-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToSgNBCounterCheck_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_SubjectToSgNBCounterCheck_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h new file mode 100644 index 0000000..fa17216 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-Item.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToSgNBCounterCheck_Item_H_ +#define _E_RABs_SubjectToSgNBCounterCheck_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-SubjectToSgNBCounterCheck-Item */ +typedef struct E_RABs_SubjectToSgNBCounterCheck_Item { + E_RAB_ID_t e_RAB_ID; + unsigned long uL_Count; + unsigned long dL_Count; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToSgNBCounterCheck_Item_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_uL_Count_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_dL_Count_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToSgNBCounterCheck_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c new file mode 100644 index 0000000..788a025 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToSgNBCounterCheck-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_SubjectToSgNBCounterCheck_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P43, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_List_specs_1 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_List), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List = { + "E-RABs-SubjectToSgNBCounterCheck-List", + "E-RABs-SubjectToSgNBCounterCheck-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_SubjectToSgNBCounterCheck_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_SubjectToSgNBCounterCheck_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_SubjectToSgNBCounterCheck_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h new file mode 100644 index 0000000..dc588d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToSgNBCounterCheck-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToSgNBCounterCheck_List_H_ +#define _E_RABs_SubjectToSgNBCounterCheck_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-SubjectToSgNBCounterCheck-List */ +typedef struct E_RABs_SubjectToSgNBCounterCheck_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToSgNBCounterCheck_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToSgNBCounterCheck_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c new file mode 100644 index 0000000..e8ffdef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToStatusTransfer-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_SubjectToStatusTransfer_Item, receiveStatusofULPDCPSDUs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReceiveStatusofULPDCPSDUs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "receiveStatusofULPDCPSDUs" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_Item, uL_COUNTvalue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_COUNTvalue, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-COUNTvalue" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_Item, dL_COUNTvalue), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_COUNTvalue, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-COUNTvalue" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_SubjectToStatusTransfer_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_SubjectToStatusTransfer_Item_oms_1[] = { 1, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToStatusTransfer_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* receiveStatusofULPDCPSDUs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-COUNTvalue */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-COUNTvalue */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_Item_specs_1 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_Item), + offsetof(struct E_RABs_SubjectToStatusTransfer_Item, _asn_ctx), + asn_MAP_E_RABs_SubjectToStatusTransfer_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_SubjectToStatusTransfer_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_Item = { + "E-RABs-SubjectToStatusTransfer-Item", + "E-RABs-SubjectToStatusTransfer-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToStatusTransfer_Item_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_SubjectToStatusTransfer_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h new file mode 100644 index 0000000..819c4c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-Item.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToStatusTransfer_Item_H_ +#define _E_RABs_SubjectToStatusTransfer_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "ReceiveStatusofULPDCPSDUs.h" +#include "COUNTvalue.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-SubjectToStatusTransfer-Item */ +typedef struct E_RABs_SubjectToStatusTransfer_Item { + E_RAB_ID_t e_RAB_ID; + ReceiveStatusofULPDCPSDUs_t *receiveStatusofULPDCPSDUs; /* OPTIONAL */ + COUNTvalue_t uL_COUNTvalue; + COUNTvalue_t dL_COUNTvalue; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToStatusTransfer_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToStatusTransfer_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c new file mode 100644 index 0000000..6afcaa3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-SubjectToStatusTransfer-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_SubjectToStatusTransfer_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_List_specs_1 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_List), + offsetof(struct E_RABs_SubjectToStatusTransfer_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_List = { + "E-RABs-SubjectToStatusTransfer-List", + "E-RABs-SubjectToStatusTransfer-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1, + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_SubjectToStatusTransfer_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_SubjectToStatusTransfer_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_SubjectToStatusTransfer_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h new file mode 100644 index 0000000..924ac3c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-SubjectToStatusTransfer-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_SubjectToStatusTransfer_List_H_ +#define _E_RABs_SubjectToStatusTransfer_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-SubjectToStatusTransfer-List */ +typedef struct E_RABs_SubjectToStatusTransfer_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToStatusTransfer_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_SubjectToStatusTransfer_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c new file mode 100644 index 0000000..ad5f113 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-Item-SCG-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, dL_Forwarding), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_Item_SCG_Bearer_oms_1[] = { 2, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_Item_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_Item_SCG_Bearer), + offsetof(struct E_RABs_ToBeAdded_Item_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_Item_SCG_Bearer_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_Item_SCG_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer = { + "E-RABs-ToBeAdded-Item-SCG-Bearer", + "E-RABs-ToBeAdded-Item-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_Item_SCG_Bearer_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h new file mode 100644 index 0000000..ef3e85c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-SCG-Bearer.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_Item_SCG_Bearer_H_ +#define _E_RABs_ToBeAdded_Item_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "DL-Forwarding.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-Item-SCG-Bearer */ +typedef struct E_RABs_ToBeAdded_Item_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + DL_Forwarding_t *dL_Forwarding; /* OPTIONAL */ + GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_Item_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_SCG_Bearer_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_Item_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c new file mode 100644 index 0000000..af38ca4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-Item-Split-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_Bearer, meNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_Item_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_Item_Split_Bearer_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_Item_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_Item_Split_Bearer), + offsetof(struct E_RABs_ToBeAdded_Item_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_Item_Split_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_Item_Split_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer = { + "E-RABs-ToBeAdded-Item-Split-Bearer", + "E-RABs-ToBeAdded-Item-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_Item_Split_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h new file mode 100644 index 0000000..b1d3552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item-Split-Bearer.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_Item_Split_Bearer_H_ +#define _E_RABs_ToBeAdded_Item_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-Item-Split-Bearer */ +typedef struct E_RABs_ToBeAdded_Item_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_Item_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_Split_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_Item_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c new file mode 100644 index 0000000..9d548bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-Item.h" + +#include "E-RABs-ToBeAdded-Item-SCG-Bearer.h" +#include "E-RABs-ToBeAdded-Item-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_Item_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_Item, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_Item_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_Item, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_Item), + offsetof(struct E_RABs_ToBeAdded_Item, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_Item, present), + sizeof(((struct E_RABs_ToBeAdded_Item *)0)->present), + asn_MAP_E_RABs_ToBeAdded_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item = { + "E-RABs-ToBeAdded-Item", + "E-RABs-ToBeAdded-Item", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_Item_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeAdded_Item_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h new file mode 100644 index 0000000..b665fd2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-Item.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_Item_H_ +#define _E_RABs_ToBeAdded_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeAdded_Item_PR { + E_RABs_ToBeAdded_Item_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_Item_PR_sCG_Bearer, + E_RABs_ToBeAdded_Item_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeAdded_Item_PR; + +/* Forward declarations */ +struct E_RABs_ToBeAdded_Item_SCG_Bearer; +struct E_RABs_ToBeAdded_Item_Split_Bearer; + +/* E-RABs-ToBeAdded-Item */ +typedef struct E_RABs_ToBeAdded_Item { + E_RABs_ToBeAdded_Item_PR present; + union E_RABs_ToBeAdded_Item_u { + struct E_RABs_ToBeAdded_Item_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeAdded_Item_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c new file mode 100644 index 0000000..3beffc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-List-ModReq.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_List_ModReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_List_ModReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_List_ModReq_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_List_ModReq), + offsetof(struct E_RABs_ToBeAdded_List_ModReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_List_ModReq = { + "E-RABs-ToBeAdded-List-ModReq", + "E-RABs-ToBeAdded-List-ModReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_List_ModReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_List_ModReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeAdded_List_ModReq_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeAdded_List_ModReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h new file mode 100644 index 0000000..eb6bd42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List-ModReq.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_List_ModReq_H_ +#define _E_RABs_ToBeAdded_List_ModReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeAdded-List-ModReq */ +typedef struct E_RABs_ToBeAdded_List_ModReq { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_List_ModReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_List_ModReq; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_List_ModReq_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_List_ModReq_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_List_ModReq_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_List_ModReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c new file mode 100644 index 0000000..c83fed4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_List_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_List), + offsetof(struct E_RABs_ToBeAdded_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_List = { + "E-RABs-ToBeAdded-List", + "E-RABs-ToBeAdded-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeAdded_List_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeAdded_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeAdded_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h new file mode 100644 index 0000000..785d5ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_List_H_ +#define _E_RABs_ToBeAdded_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeAdded-List */ +typedef struct E_RABs_ToBeAdded_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c new file mode 100644 index 0000000..2c6eada --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, dL_Forwarding), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P24, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_oms_1[] = { 2, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer = { + "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer", + "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h new file mode 100644 index 0000000..6b96484 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_ +#define _E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "DL-Forwarding.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-ModReqItem-SCG-Bearer */ +typedef struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + DL_Forwarding_t *dL_Forwarding; /* OPTIONAL */ + GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c new file mode 100644 index 0000000..2aa70e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer, meNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P25, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer = { + "E-RABs-ToBeAdded-ModReqItem-Split-Bearer", + "E-RABs-ToBeAdded-ModReqItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h new file mode 100644 index 0000000..3dc1ce2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_ +#define _E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-ModReqItem-Split-Bearer */ +typedef struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c new file mode 100644 index 0000000..f6ed5f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-ModReqItem.h" + +#include "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h" +#include "E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_ModReqItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem), + offsetof(struct E_RABs_ToBeAdded_ModReqItem, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_ModReqItem, present), + sizeof(((struct E_RABs_ToBeAdded_ModReqItem *)0)->present), + asn_MAP_E_RABs_ToBeAdded_ModReqItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem = { + "E-RABs-ToBeAdded-ModReqItem", + "E-RABs-ToBeAdded-ModReqItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_ModReqItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h new file mode 100644 index 0000000..a8146c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-ModReqItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_ModReqItem_H_ +#define _E_RABs_ToBeAdded_ModReqItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeAdded_ModReqItem_PR { + E_RABs_ToBeAdded_ModReqItem_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_ModReqItem_PR_sCG_Bearer, + E_RABs_ToBeAdded_ModReqItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeAdded_ModReqItem_PR; + +/* Forward declarations */ +struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; +struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer; + +/* E-RABs-ToBeAdded-ModReqItem */ +typedef struct E_RABs_ToBeAdded_ModReqItem { + E_RABs_ToBeAdded_ModReqItem_PR present; + union E_RABs_ToBeAdded_ModReqItem_u { + struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_ModReqItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..d2d3fc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,123 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "requested-SCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, rlc_Mode), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P46, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_oms_1[] = { 2, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rlc-Mode */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1, + 6, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..ee320d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent { + E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + GTPtunnelEndpoint_t meNB_UL_GTP_TEIDatPDCP; + struct GTPtunnelEndpoint *secondary_meNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + RLCMode_t rlc_Mode; + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..6f29d64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c @@ -0,0 +1,123 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h" + +#include "GBR-QosInformation.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "full-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, max_MCG_admit_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GBR_QosInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "max-MCG-admit-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, dL_Forwarding), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-DL-GTP-TEIDatMCG" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P45, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 5 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MCG-admit-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent = { + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent", + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1, + 6, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..ee11e43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-Level-QoS-Parameters.h" +#include "DL-Forwarding.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GBR_QosInformation; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent { + E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + struct GBR_QosInformation *max_MCG_admit_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + DL_Forwarding_t *dL_Forwarding; /* OPTIONAL */ + struct GTPtunnelEndpoint *meNB_DL_GTP_TEIDatMCG; /* OPTIONAL */ + GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c new file mode 100644 index 0000000..9e0ba66 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.c @@ -0,0 +1,167 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBAddReq-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_5[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_5 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_5, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_5 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_5, CHOICE_constraint }, + asn_MBR_resource_configuration_5, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, drb_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "drb-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P44, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item = { + "E-RABs-ToBeAdded-SgNBAddReq-Item", + "E-RABs-ToBeAdded-SgNBAddReq-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h new file mode 100644 index 0000000..25e592f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReq-Item.h @@ -0,0 +1,94 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBAddReq_Item_H_ +#define _E_RABs_ToBeAdded_SgNBAddReq_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "DRB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR { + E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeAdded-SgNBAddReq-Item */ +typedef struct E_RABs_ToBeAdded_SgNBAddReq_Item { + E_RAB_ID_t e_RAB_ID; + DRB_ID_t drb_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration { + E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR present; + union E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_u { + struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBAddReq_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c new file mode 100644 index 0000000..6503a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBAddReqList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_SgNBAddReqList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReqList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P28, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReqList_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReqList), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReqList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList = { + "E-RABs-ToBeAdded-SgNBAddReqList", + "E-RABs-ToBeAdded-SgNBAddReqList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_SgNBAddReqList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReqList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReqList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h new file mode 100644 index 0000000..ff49afd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBAddReqList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBAddReqList_H_ +#define _E_RABs_ToBeAdded_SgNBAddReqList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeAdded-SgNBAddReqList */ +typedef struct E_RABs_ToBeAdded_SgNBAddReqList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReqList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBAddReqList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..4ead22c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,123 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "requested-SCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, rlc_Mode), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P55, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 2, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rlc-Mode */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1, + 6, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..5741bc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent { + E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + GTPtunnelEndpoint_t meNB_UL_GTP_TEIDatPDCP; + struct GTPtunnelEndpoint *secondary_meNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + RLCMode_t rlc_Mode; + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..227b695 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c @@ -0,0 +1,123 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h" + +#include "GBR-QosInformation.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "full-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, max_MN_admit_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GBR_QosInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "max-MN-admit-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, dL_Forwarding), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-DL-GTP-TEIDatMCG" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P54, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 5 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MN-admit-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent = { + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent", + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1, + 6, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..cc9476f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-Level-QoS-Parameters.h" +#include "DL-Forwarding.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GBR_QosInformation; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent { + E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + struct GBR_QosInformation *max_MN_admit_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + DL_Forwarding_t *dL_Forwarding; /* OPTIONAL */ + struct GTPtunnelEndpoint *meNB_DL_GTP_TEIDatMCG; /* OPTIONAL */ + GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c new file mode 100644 index 0000000..dcab1a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.c @@ -0,0 +1,167 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBModReq-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_5[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_5 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_5, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_5 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_5, CHOICE_constraint }, + asn_MBR_resource_configuration_5, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, drb_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "drb-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P53, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item = { + "E-RABs-ToBeAdded-SgNBModReq-Item", + "E-RABs-ToBeAdded-SgNBModReq-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h new file mode 100644 index 0000000..f451330 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-Item.h @@ -0,0 +1,94 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBModReq_Item_H_ +#define _E_RABs_ToBeAdded_SgNBModReq_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "DRB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR { + E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeAdded-SgNBModReq-Item */ +typedef struct E_RABs_ToBeAdded_SgNBModReq_Item { + E_RAB_ID_t e_RAB_ID; + DRB_ID_t drb_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration { + E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR present; + union E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_u { + struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBModReq_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c new file mode 100644 index 0000000..fe158ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeAdded-SgNBModReq-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_SgNBModReq_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P30, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_List_specs_1 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_List), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List = { + "E-RABs-ToBeAdded-SgNBModReq-List", + "E-RABs-ToBeAdded-SgNBModReq-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeAdded_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h new file mode 100644 index 0000000..a83415b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeAdded-SgNBModReq-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeAdded_SgNBModReq_List_H_ +#define _E_RABs_ToBeAdded_SgNBModReq_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeAdded-SgNBModReq-List */ +typedef struct E_RABs_ToBeAdded_SgNBModReq_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_List_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_List_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeAdded_SgNBModReq_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeAdded_SgNBModReq_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c new file mode 100644 index 0000000..38e0309 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-List-ModReq.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_List_ModReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_List_ModReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeModified_List_ModReq_specs_1 = { + sizeof(struct E_RABs_ToBeModified_List_ModReq), + offsetof(struct E_RABs_ToBeModified_List_ModReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_List_ModReq = { + "E-RABs-ToBeModified-List-ModReq", + "E-RABs-ToBeModified-List-ModReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_List_ModReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeModified_List_ModReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeModified_List_ModReq_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeModified_List_ModReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h new file mode 100644 index 0000000..964d2c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-List-ModReq.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_List_ModReq_H_ +#define _E_RABs_ToBeModified_List_ModReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeModified-List-ModReq */ +typedef struct E_RABs_ToBeModified_List_ModReq { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_List_ModReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_List_ModReq; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeModified_List_ModReq_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_List_ModReq_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_List_ModReq_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_List_ModReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c new file mode 100644 index 0000000..4124cf1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c @@ -0,0 +1,103 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h" + +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P26, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer), + offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer = { + "E-RABs-ToBeModified-ModReqItem-SCG-Bearer", + "E-RABs-ToBeModified-ModReqItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h new file mode 100644 index 0000000..8e1aacb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_ +#define _E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct E_RAB_Level_QoS_Parameters; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-ModReqItem-SCG-Bearer */ +typedef struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct E_RAB_Level_QoS_Parameters *e_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct GTPtunnelEndpoint *s1_UL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c new file mode 100644 index 0000000..bbc945f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.c @@ -0,0 +1,103 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-ModReqItem-Split-Bearer.h" + +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer, meNB_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P27, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_Bearer_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer), + offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer = { + "E-RABs-ToBeModified-ModReqItem-Split-Bearer", + "E-RABs-ToBeModified-ModReqItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h new file mode 100644 index 0000000..ffd3075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem-Split-Bearer.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_ +#define _E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct E_RAB_Level_QoS_Parameters; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-ModReqItem-Split-Bearer */ +typedef struct E_RABs_ToBeModified_ModReqItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct E_RAB_Level_QoS_Parameters *e_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct GTPtunnelEndpoint *meNB_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c new file mode 100644 index 0000000..127101d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-ModReqItem.h" + +#include "E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h" +#include "E-RABs-ToBeModified-ModReqItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_ModReqItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_specs_1 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem), + offsetof(struct E_RABs_ToBeModified_ModReqItem, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_ModReqItem, present), + sizeof(((struct E_RABs_ToBeModified_ModReqItem *)0)->present), + asn_MAP_E_RABs_ToBeModified_ModReqItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem = { + "E-RABs-ToBeModified-ModReqItem", + "E-RABs-ToBeModified-ModReqItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeModified_ModReqItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h new file mode 100644 index 0000000..7b7042f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-ModReqItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_ModReqItem_H_ +#define _E_RABs_ToBeModified_ModReqItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeModified_ModReqItem_PR { + E_RABs_ToBeModified_ModReqItem_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_ModReqItem_PR_sCG_Bearer, + E_RABs_ToBeModified_ModReqItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeModified_ModReqItem_PR; + +/* Forward declarations */ +struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer; +struct E_RABs_ToBeModified_ModReqItem_Split_Bearer; + +/* E-RABs-ToBeModified-ModReqItem */ +typedef struct E_RABs_ToBeModified_ModReqItem { + E_RABs_ToBeModified_ModReqItem_PR present; + union E_RABs_ToBeModified_ModReqItem_u { + struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeModified_ModReqItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_ModReqItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..2f3a322 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,104 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h" + +#include "E-RAB-Level-QoS-Parameters.h" +#include "GTPtunnelEndpoint.h" +#include "ULConfiguration.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 4, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "requested-SCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P58, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..fcb5a54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct E_RAB_Level_QoS_Parameters; +struct GTPtunnelEndpoint; +struct ULConfiguration; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent { + struct E_RAB_Level_QoS_Parameters *requested_SCG_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct GTPtunnelEndpoint *meNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..a6cf6cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h" + +#include "E-RAB-Level-QoS-Parameters.h" +#include "GBR-QosInformation.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 5, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "full-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 4, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, max_MN_admit_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GBR_QosInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "max-MN-admit-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-DL-GTP-TEIDatMCG" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-UL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P57, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MN-admit-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent = { + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent", + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..c62eb59 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct E_RAB_Level_QoS_Parameters; +struct GBR_QosInformation; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent { + struct E_RAB_Level_QoS_Parameters *full_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct GBR_QosInformation *max_MN_admit_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct GTPtunnelEndpoint *meNB_DL_GTP_TEIDatMCG; /* OPTIONAL */ + struct GTPtunnelEndpoint *s1_UL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c new file mode 100644 index 0000000..89147bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReq-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P56, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item = { + "E-RABs-ToBeModified-SgNBModReq-Item", + "E-RABs-ToBeModified-SgNBModReq-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h new file mode 100644 index 0000000..059e624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReq_Item_H_ +#define _E_RABs_ToBeModified_SgNBModReq_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR { + E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeModified-SgNBModReq-Item */ +typedef struct E_RABs_ToBeModified_SgNBModReq_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration { + E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR present; + union E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_u { + struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReq_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c new file mode 100644 index 0000000..f58e885 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReq-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_SgNBModReq_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P31, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_List_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_List), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_List = { + "E-RABs-ToBeModified-SgNBModReq-List", + "E-RABs-ToBeModified-SgNBModReq-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeModified_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h new file mode 100644 index 0000000..14775d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReq-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReq_List_H_ +#define _E_RABs_ToBeModified_SgNBModReq_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeModified-SgNBModReq-List */ +typedef struct E_RABs_ToBeModified_SgNBModReq_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_List; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_List_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_List_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_SgNBModReq_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReq_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..1e3665c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondary-sgNB-DL-GTP-TEIDatSCG" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P74, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..4ff79d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent { + struct GTPtunnelEndpoint *sgNB_DL_GTP_TEIDatSCG; /* OPTIONAL */ + struct GTPtunnelEndpoint *secondary_sgNB_DL_GTP_TEIDatSCG; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..52ae213 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h" + +#include "E-RAB-Level-QoS-Parameters.h" +#include "ULConfiguration.h" +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 5, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, requested_MCG_E_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "requested-MCG-E-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 4, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, uL_Configuration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Configuration" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-UL-GTP-TEIDatPDCP" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, s1_DL_GTP_TEIDatSgNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1-DL-GTP-TEIDatSgNB" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P73, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-MCG-E-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Configuration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-DL-GTP-TEIDatSgNB */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent = { + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent", + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..b3712e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct E_RAB_Level_QoS_Parameters; +struct ULConfiguration; +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent { + struct E_RAB_Level_QoS_Parameters *requested_MCG_E_RAB_Level_QoS_Parameters; /* OPTIONAL */ + struct ULConfiguration *uL_Configuration; /* OPTIONAL */ + struct GTPtunnelEndpoint *sgNB_UL_GTP_TEIDatPDCP; /* OPTIONAL */ + struct GTPtunnelEndpoint *s1_DL_GTP_TEIDatSgNB; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c new file mode 100644 index 0000000..963e4a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReqd-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P72, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item = { + "E-RABs-ToBeModified-SgNBModReqd-Item", + "E-RABs-ToBeModified-SgNBModReqd-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h new file mode 100644 index 0000000..f287edd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqd-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReqd_Item_H_ +#define _E_RABs_ToBeModified_SgNBModReqd_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR { + E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeModified-SgNBModReqd-Item */ +typedef struct E_RABs_ToBeModified_SgNBModReqd_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration { + E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR present; + union E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_u { + struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReqd_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c new file mode 100644 index 0000000..e9ad6ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeModified-SgNBModReqdList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeModified_SgNBModReqdList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqdList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P37, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqdList_specs_1 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqdList), + offsetof(struct E_RABs_ToBeModified_SgNBModReqdList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqdList = { + "E-RABs-ToBeModified-SgNBModReqdList", + "E-RABs-ToBeModified-SgNBModReqdList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqdList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeModified_SgNBModReqdList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqdList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqdList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h new file mode 100644 index 0000000..8a31401 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeModified-SgNBModReqdList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeModified_SgNBModReqdList_H_ +#define _E_RABs_ToBeModified_SgNBModReqdList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeModified-SgNBModReqdList */ +typedef struct E_RABs_ToBeModified_SgNBModReqdList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqdList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqdList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeModified_SgNBModReqdList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c new file mode 100644 index 0000000..d6dbc3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-List-ModReq.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_List_ModReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_List_ModReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_List_ModReq_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_List_ModReq), + offsetof(struct E_RABs_ToBeReleased_List_ModReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_ModReq = { + "E-RABs-ToBeReleased-List-ModReq", + "E-RABs-ToBeReleased-List-ModReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_ModReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_List_ModReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_List_ModReq_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_List_ModReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h new file mode 100644 index 0000000..5245f88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-ModReq.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_List_ModReq_H_ +#define _E_RABs_ToBeReleased_List_ModReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-List-ModReq */ +typedef struct E_RABs_ToBeReleased_List_ModReq { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_List_ModReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_ModReq; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_List_ModReq_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_List_ModReq_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_List_ModReq_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_List_ModReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c new file mode 100644 index 0000000..f7c3c6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-List-RelConf.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_List_RelConf_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_List_RelConf_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P25, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_List_RelConf_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_List_RelConf), + offsetof(struct E_RABs_ToBeReleased_List_RelConf, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_RelConf = { + "E-RABs-ToBeReleased-List-RelConf", + "E-RABs-ToBeReleased-List-RelConf", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelConf_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_List_RelConf_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_List_RelConf_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_List_RelConf_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h new file mode 100644 index 0000000..2309cb7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelConf.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_List_RelConf_H_ +#define _E_RABs_ToBeReleased_List_RelConf_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-List-RelConf */ +typedef struct E_RABs_ToBeReleased_List_RelConf { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_List_RelConf_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_RelConf; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_List_RelConf_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c new file mode 100644 index 0000000..55c30ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-List-RelReq.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_List_RelReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_List_RelReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P24, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_List_RelReq_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_List_RelReq), + offsetof(struct E_RABs_ToBeReleased_List_RelReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_RelReq = { + "E-RABs-ToBeReleased-List-RelReq", + "E-RABs-ToBeReleased-List-RelReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_List_RelReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_List_RelReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_List_RelReq_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_List_RelReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h new file mode 100644 index 0000000..300393a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-List-RelReq.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_List_RelReq_H_ +#define _E_RABs_ToBeReleased_List_RelReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-List-RelReq */ +typedef struct E_RABs_ToBeReleased_List_RelReq { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_List_RelReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_List_RelReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_List_RelReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c new file mode 100644 index 0000000..c1d4eb3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P28, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer = { + "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer", + "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h new file mode 100644 index 0000000..6e4c504 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_ +#define _E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-ModReqItem-SCG-Bearer */ +typedef struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c new file mode 100644 index 0000000..78b5955 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P29, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer = { + "E-RABs-ToBeReleased-ModReqItem-Split-Bearer", + "E-RABs-ToBeReleased-ModReqItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h new file mode 100644 index 0000000..761a2cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_ +#define _E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-ModReqItem-Split-Bearer */ +typedef struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c new file mode 100644 index 0000000..41dee41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-ModReqItem.h" + +#include "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h" +#include "E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_ModReqItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem), + offsetof(struct E_RABs_ToBeReleased_ModReqItem, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqItem, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqItem *)0)->present), + asn_MAP_E_RABs_ToBeReleased_ModReqItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem = { + "E-RABs-ToBeReleased-ModReqItem", + "E-RABs-ToBeReleased-ModReqItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_ModReqItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h new file mode 100644 index 0000000..72480af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_ModReqItem_H_ +#define _E_RABs_ToBeReleased_ModReqItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_ModReqItem_PR { + E_RABs_ToBeReleased_ModReqItem_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_ModReqItem_PR_sCG_Bearer, + E_RABs_ToBeReleased_ModReqItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_ModReqItem_PR; + +/* Forward declarations */ +struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; +struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer; + +/* E-RABs-ToBeReleased-ModReqItem */ +typedef struct E_RABs_ToBeReleased_ModReqItem { + E_RABs_ToBeReleased_ModReqItem_PR present; + union E_RABs_ToBeReleased_ModReqItem_u { + struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_ModReqItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c new file mode 100644 index 0000000..5663549 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-ModReqd.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_ModReqd_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqd_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P23, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqd_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_ModReqd), + offsetof(struct E_RABs_ToBeReleased_ModReqd, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqd = { + "E-RABs-ToBeReleased-ModReqd", + "E-RABs-ToBeReleased-ModReqd", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqd_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_ModReqd_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqd_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_ModReqd_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h new file mode 100644 index 0000000..203e2bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqd.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_ModReqd_H_ +#define _E_RABs_ToBeReleased_ModReqd_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-ModReqd */ +typedef struct E_RABs_ToBeReleased_ModReqd { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqd_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqd; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_ModReqd_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c new file mode 100644 index 0000000..24dbc25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-ModReqdItem.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqdItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItem, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItem, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_ModReqdItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P36, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_ModReqdItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqdItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqdItem_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_ModReqdItem), + offsetof(struct E_RABs_ToBeReleased_ModReqdItem, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqdItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_ModReqdItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItem = { + "E-RABs-ToBeReleased-ModReqdItem", + "E-RABs-ToBeReleased-ModReqdItem", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqdItem_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqdItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h new file mode 100644 index 0000000..4d23acd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-ModReqdItem.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_ModReqdItem_H_ +#define _E_RABs_ToBeReleased_ModReqdItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-ModReqdItem */ +typedef struct E_RABs_ToBeReleased_ModReqdItem { + E_RAB_ID_t e_RAB_ID; + Cause_t cause; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqdItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_ModReqdItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c new file mode 100644 index 0000000..99506ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P39, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer = { + "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer", + "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h new file mode 100644 index 0000000..eb7d661 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_ +#define _E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-RelConfItem-SCG-Bearer */ +typedef struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c new file mode 100644 index 0000000..2354383 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P40, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer = { + "E-RABs-ToBeReleased-RelConfItem-Split-Bearer", + "E-RABs-ToBeReleased-RelConfItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h new file mode 100644 index 0000000..802b74c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_ +#define _E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-RelConfItem-Split-Bearer */ +typedef struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c new file mode 100644 index 0000000..60e75ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelConfItem.h" + +#include "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h" +#include "E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_RelConfItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem), + offsetof(struct E_RABs_ToBeReleased_RelConfItem, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelConfItem, present), + sizeof(((struct E_RABs_ToBeReleased_RelConfItem *)0)->present), + asn_MAP_E_RABs_ToBeReleased_RelConfItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem = { + "E-RABs-ToBeReleased-RelConfItem", + "E-RABs-ToBeReleased-RelConfItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_RelConfItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h new file mode 100644 index 0000000..39ed64c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelConfItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelConfItem_H_ +#define _E_RABs_ToBeReleased_RelConfItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_RelConfItem_PR { + E_RABs_ToBeReleased_RelConfItem_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_RelConfItem_PR_sCG_Bearer, + E_RABs_ToBeReleased_RelConfItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_RelConfItem_PR; + +/* Forward declarations */ +struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; +struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer; + +/* E-RABs-ToBeReleased-RelConfItem */ +typedef struct E_RABs_ToBeReleased_RelConfItem { + E_RABs_ToBeReleased_RelConfItem_PR present; + union E_RABs_ToBeReleased_RelConfItem_u { + struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelConfItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c new file mode 100644 index 0000000..18d308d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P37, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer = { + "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer", + "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h new file mode 100644 index 0000000..f1be15c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_ +#define _E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-RelReqItem-SCG-Bearer */ +typedef struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *uL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c new file mode 100644 index 0000000..35015bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P38, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer = { + "E-RABs-ToBeReleased-RelReqItem-Split-Bearer", + "E-RABs-ToBeReleased-RelReqItem-Split-Bearer", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h new file mode 100644 index 0000000..3b048dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_ +#define _E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-RelReqItem-Split-Bearer */ +typedef struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer { + E_RAB_ID_t e_RAB_ID; + struct GTPtunnelEndpoint *dL_Forwarding_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItem_Split_Bearer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c new file mode 100644 index 0000000..b71f1af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-RelReqItem.h" + +#include "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h" +#include "E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_RelReqItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_1[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem, choice.sCG_Bearer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCG-Bearer" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem, choice.split_Bearer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_Bearer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "split-Bearer" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem), + offsetof(struct E_RABs_ToBeReleased_RelReqItem, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelReqItem, present), + sizeof(((struct E_RABs_ToBeReleased_RelReqItem *)0)->present), + asn_MAP_E_RABs_ToBeReleased_RelReqItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem = { + "E-RABs-ToBeReleased-RelReqItem", + "E-RABs-ToBeReleased-RelReqItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_RelReqItem_constr_1, CHOICE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItem_1, + 2, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h new file mode 100644 index 0000000..e923a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-RelReqItem.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_RelReqItem_H_ +#define _E_RABs_ToBeReleased_RelReqItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_RelReqItem_PR { + E_RABs_ToBeReleased_RelReqItem_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_RelReqItem_PR_sCG_Bearer, + E_RABs_ToBeReleased_RelReqItem_PR_split_Bearer + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_RelReqItem_PR; + +/* Forward declarations */ +struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; +struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer; + +/* E-RABs-ToBeReleased-RelReqItem */ +typedef struct E_RABs_ToBeReleased_RelReqItem { + E_RABs_ToBeReleased_RelReqItem_PR present; + union E_RABs_ToBeReleased_RelReqItem_u { + struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer *sCG_Bearer; + struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer *split_Bearer; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_RelReqItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..31c1e73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P89, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..cc9939d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..df4b8c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P88, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent = { + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent", + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..768ada4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent { + struct GTPtunnelEndpoint *uL_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c new file mode 100644 index 0000000..4b94252 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBChaConf-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P87, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item = { + "E-RABs-ToBeReleased-SgNBChaConf-Item", + "E-RABs-ToBeReleased-SgNBChaConf-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h new file mode 100644 index 0000000..27a2fc8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConf-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBChaConf_Item_H_ +#define _E_RABs_ToBeReleased_SgNBChaConf_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR { + E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeReleased-SgNBChaConf-Item */ +typedef struct E_RABs_ToBeReleased_SgNBChaConf_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration { + E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR present; + union E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_u { + struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBChaConf_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c new file mode 100644 index 0000000..b9146bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBChaConfList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBChaConfList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConfList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P44, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConfList_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConfList), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConfList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList = { + "E-RABs-ToBeReleased-SgNBChaConfList", + "E-RABs-ToBeReleased-SgNBChaConfList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBChaConfList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConfList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConfList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h new file mode 100644 index 0000000..9b64c53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBChaConfList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBChaConfList_H_ +#define _E_RABs_ToBeReleased_SgNBChaConfList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBChaConfList */ +typedef struct E_RABs_ToBeReleased_SgNBChaConfList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConfList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBChaConfList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..226d7c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P61, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..b704063 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..c73a566 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P60, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent = { + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent", + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..3d8c880 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent { + struct GTPtunnelEndpoint *dL_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *uL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c new file mode 100644 index 0000000..ac2f4bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReq-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P59, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item = { + "E-RABs-ToBeReleased-SgNBModReq-Item", + "E-RABs-ToBeReleased-SgNBModReq-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h new file mode 100644 index 0000000..7e2a8dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReq_Item_H_ +#define _E_RABs_ToBeReleased_SgNBModReq_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR { + E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeReleased-SgNBModReq-Item */ +typedef struct E_RABs_ToBeReleased_SgNBModReq_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration { + E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR present; + union E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_u { + struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReq_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c new file mode 100644 index 0000000..14a3bd2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReq-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBModReq_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P32, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_List_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_List), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List = { + "E-RABs-ToBeReleased-SgNBModReq-List", + "E-RABs-ToBeReleased-SgNBModReq-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h new file mode 100644 index 0000000..1dbdfd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReq-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReq_List_H_ +#define _E_RABs_ToBeReleased_SgNBModReq_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBModReq-List */ +typedef struct E_RABs_ToBeReleased_SgNBModReq_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_List_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_List_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBModReq_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReq_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c new file mode 100644 index 0000000..02f2b20 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReqd-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P71, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqd_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item = { + "E-RABs-ToBeReleased-SgNBModReqd-Item", + "E-RABs-ToBeReleased-SgNBModReqd-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_Item_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h new file mode 100644 index 0000000..79034a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqd-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReqd_Item_H_ +#define _E_RABs_ToBeReleased_SgNBModReqd_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBModReqd-Item */ +typedef struct E_RABs_ToBeReleased_SgNBModReqd_Item { + E_RAB_ID_t e_RAB_ID; + Cause_t cause; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReqd_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReqd_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c new file mode 100644 index 0000000..5ae7967 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBModReqdList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBModReqdList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqdList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P36, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqdList_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqdList), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqdList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList = { + "E-RABs-ToBeReleased-SgNBModReqdList", + "E-RABs-ToBeReleased-SgNBModReqdList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBModReqdList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReqdList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReqdList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h new file mode 100644 index 0000000..7e09067 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBModReqdList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBModReqdList_H_ +#define _E_RABs_ToBeReleased_SgNBModReqdList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBModReqdList */ +typedef struct E_RABs_ToBeReleased_SgNBModReqdList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReqdList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBModReqdList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..e56bdcb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P85, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..c12f70b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..c1c11ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P84, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent = { + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent", + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..ea75cf0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent { + struct GTPtunnelEndpoint *uL_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c new file mode 100644 index 0000000..f4034b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelConf-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P83, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item = { + "E-RABs-ToBeReleased-SgNBRelConf-Item", + "E-RABs-ToBeReleased-SgNBRelConf-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h new file mode 100644 index 0000000..49fe748 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConf-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelConf_Item_H_ +#define _E_RABs_ToBeReleased_SgNBRelConf_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR { + E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeReleased-SgNBRelConf-Item */ +typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration { + E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR present; + union E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_u { + struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelConf_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c new file mode 100644 index 0000000..a6525be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelConfList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBRelConfList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConfList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P42, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConfList_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConfList), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConfList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList = { + "E-RABs-ToBeReleased-SgNBRelConfList", + "E-RABs-ToBeReleased-SgNBRelConfList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBRelConfList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConfList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConfList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h new file mode 100644 index 0000000..7e7b798 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelConfList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelConfList_H_ +#define _E_RABs_ToBeReleased_SgNBRelConfList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBRelConfList */ +typedef struct E_RABs_ToBeReleased_SgNBRelConfList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConfList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelConfList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c new file mode 100644 index 0000000..febb6ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1[] = { + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P80, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent = { + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent", + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1, + 1, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h new file mode 100644 index 0000000..b52cd68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_ +#define _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent */ +typedef struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent { + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c new file mode 100644 index 0000000..dbb8f3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h" + +#include "GTPtunnelEndpoint.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1[] = { + { ATF_POINTER, 3, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P79, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent = { + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent", + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h new file mode 100644 index 0000000..321f899 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_ +#define _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GTPtunnelEndpoint; +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent */ +typedef struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent { + struct GTPtunnelEndpoint *uL_GTPtunnelEndpoint; /* OPTIONAL */ + struct GTPtunnelEndpoint *dL_GTPtunnelEndpoint; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c new file mode 100644 index 0000000..7081787 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.c @@ -0,0 +1,157 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReq-Item.h" + +#include "ProtocolExtensionContainer.h" +#include "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h" +#include "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h" +static asn_per_constraints_t asn_PER_type_resource_configuration_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_resource_configuration_4[] = { + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, choice.sgNBPDCPpresent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPpresent" + }, + { ATF_POINTER, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, choice.sgNBPDCPnotpresent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBPDCPnotpresent" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_resource_configuration_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */ +}; +static asn_CHOICE_specifics_t asn_SPC_resource_configuration_specs_4 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration *)0)->present), + asn_MAP_resource_configuration_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resource_configuration_4 = { + "resource-configuration", + "resource-configuration", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_resource_configuration_constr_4, CHOICE_constraint }, + asn_MBR_resource_configuration_4, + 2, /* Elements count */ + &asn_SPC_resource_configuration_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item, en_DC_ResourceConfiguration), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EN_DC_ResourceConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-DC-ResourceConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item, resource_configuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resource_configuration_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resource-configuration" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P78, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item = { + "E-RABs-ToBeReleased-SgNBRelReq-Item", + "E-RABs-ToBeReleased-SgNBRelReq-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h new file mode 100644 index 0000000..7b3a600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReq-Item.h @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReq_Item_H_ +#define _E_RABs_ToBeReleased_SgNBRelReq_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "EN-DC-ResourceConfiguration.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR { + E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_sgNBPDCPpresent, + E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_sgNBPDCPnotpresent + /* Extensions may appear below */ + +} E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; + +/* E-RABs-ToBeReleased-SgNBRelReq-Item */ +typedef struct E_RABs_ToBeReleased_SgNBRelReq_Item { + E_RAB_ID_t e_RAB_ID; + EN_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + struct E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration { + E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR present; + union E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_u { + struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent *sgNBPDCPpresent; + struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent *sgNBPDCPnotpresent; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resource_configuration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReq_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c new file mode 100644 index 0000000..9d42226 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReqList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBRelReqList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P39, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqList_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqList), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList = { + "E-RABs-ToBeReleased-SgNBRelReqList", + "E-RABs-ToBeReleased-SgNBRelReqList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBRelReqList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h new file mode 100644 index 0000000..871a4d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReqList_H_ +#define _E_RABs_ToBeReleased_SgNBRelReqList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBRelReqList */ +typedef struct E_RABs_ToBeReleased_SgNBRelReqList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReqList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReqList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c new file mode 100644 index 0000000..5015294 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReqd-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_Item, rlc_Mode_transferred), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rlc-Mode-transferred" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P82, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-Mode-transferred */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_Item_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqd_Item), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item = { + "E-RABs-ToBeReleased-SgNBRelReqd-Item", + "E-RABs-ToBeReleased-SgNBRelReqd-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_Item_1, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h new file mode 100644 index 0000000..56cfc6b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqd-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReqd_Item_H_ +#define _E_RABs_ToBeReleased_SgNBRelReqd_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "RLCMode.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeReleased-SgNBRelReqd-Item */ +typedef struct E_RABs_ToBeReleased_SgNBRelReqd_Item { + E_RAB_ID_t e_RAB_ID; + RLCMode_t rlc_Mode_transferred; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReqd_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReqd_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c new file mode 100644 index 0000000..92d80dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeReleased-SgNBRelReqdList.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_E_RABs_ToBeReleased_SgNBRelReqdList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqdList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P41, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqdList_specs_1 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqdList), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqdList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList = { + "E-RABs-ToBeReleased-SgNBRelReqdList", + "E-RABs-ToBeReleased-SgNBRelReqdList", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeReleased_SgNBRelReqdList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqdList_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqdList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h new file mode 100644 index 0000000..30ca644 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeReleased-SgNBRelReqdList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeReleased_SgNBRelReqdList_H_ +#define _E_RABs_ToBeReleased_SgNBRelReqdList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeReleased-SgNBRelReqdList */ +typedef struct E_RABs_ToBeReleased_SgNBRelReqdList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReqdList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeReleased_SgNBRelReqdList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c new file mode 100644 index 0000000..24f15e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeSetup-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_Item, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeSetup_Item, dL_Forwarding), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Forwarding" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_Item, uL_GTPtunnelEndpoint), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GTPtunnelEndpoint" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeSetup_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeSetup_Item_oms_1[] = { 2, 4 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetup_Item_specs_1 = { + sizeof(struct E_RABs_ToBeSetup_Item), + offsetof(struct E_RABs_ToBeSetup_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeSetup_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_Item = { + "E-RABs-ToBeSetup-Item", + "E-RABs-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetup_Item_1, + 5, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h new file mode 100644 index 0000000..f9fecfc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeSetup_Item_H_ +#define _E_RABs_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "DL-Forwarding.h" +#include "GTPtunnelEndpoint.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeSetup-Item */ +typedef struct E_RABs_ToBeSetup_Item { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + DL_Forwarding_t *dL_Forwarding; /* OPTIONAL */ + GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c new file mode 100644 index 0000000..3fde74f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeSetup-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeSetup_List_specs_1 = { + sizeof(struct E_RABs_ToBeSetup_List), + offsetof(struct E_RABs_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_List = { + "E-RABs-ToBeSetup-List", + "E-RABs-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeSetup_List_tags_1, + sizeof(asn_DEF_E_RABs_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h new file mode 100644 index 0000000..7406d61 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeSetup_List_H_ +#define _E_RABs_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeSetup-List */ +typedef struct E_RABs_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c new file mode 100644 index 0000000..fa67721 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeSetup-ListRetrieve.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_E_RABs_ToBeSetup_ListRetrieve_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ListRetrieve_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P27, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeSetup_ListRetrieve_specs_1 = { + sizeof(struct E_RABs_ToBeSetup_ListRetrieve), + offsetof(struct E_RABs_ToBeSetup_ListRetrieve, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ListRetrieve = { + "E-RABs-ToBeSetup-ListRetrieve", + "E-RABs-ToBeSetup-ListRetrieve", + &asn_OP_SEQUENCE_OF, + asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1, + sizeof(asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ListRetrieve_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_RABs_ToBeSetup_ListRetrieve_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_E_RABs_ToBeSetup_ListRetrieve_1, + 1, /* Single element */ + &asn_SPC_E_RABs_ToBeSetup_ListRetrieve_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h new file mode 100644 index 0000000..a671382 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetup-ListRetrieve.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeSetup_ListRetrieve_H_ +#define _E_RABs_ToBeSetup_ListRetrieve_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* E-RABs-ToBeSetup-ListRetrieve */ +typedef struct E_RABs_ToBeSetup_ListRetrieve { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetup_ListRetrieve_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ListRetrieve; +extern asn_SET_OF_specifics_t asn_SPC_E_RABs_ToBeSetup_ListRetrieve_specs_1; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ListRetrieve_1[1]; +extern asn_per_constraints_t asn_PER_type_E_RABs_ToBeSetup_ListRetrieve_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeSetup_ListRetrieve_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c new file mode 100644 index 0000000..6641467 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E-RABs-ToBeSetupRetrieve-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetupRetrieve_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_Item, e_RAB_Level_QoS_Parameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_Level_QoS_Parameters, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-Level-QoS-Parameters" + }, + { ATF_POINTER, 2, offsetof(struct E_RABs_ToBeSetupRetrieve_Item, bearerType), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BearerType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "bearerType" + }, + { ATF_POINTER, 1, offsetof(struct E_RABs_ToBeSetupRetrieve_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P43, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_E_RABs_ToBeSetupRetrieve_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetupRetrieve_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bearerType */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetupRetrieve_Item_specs_1 = { + sizeof(struct E_RABs_ToBeSetupRetrieve_Item), + offsetof(struct E_RABs_ToBeSetupRetrieve_Item, _asn_ctx), + asn_MAP_E_RABs_ToBeSetupRetrieve_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_RABs_ToBeSetupRetrieve_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_Item = { + "E-RABs-ToBeSetupRetrieve-Item", + "E-RABs-ToBeSetupRetrieve-Item", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1, + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetupRetrieve_Item_1, + 4, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetupRetrieve_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h new file mode 100644 index 0000000..6e0fe8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E-RABs-ToBeSetupRetrieve-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E_RABs_ToBeSetupRetrieve_Item_H_ +#define _E_RABs_ToBeSetupRetrieve_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "E-RAB-Level-QoS-Parameters.h" +#include "BearerType.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* E-RABs-ToBeSetupRetrieve-Item */ +typedef struct E_RABs_ToBeSetupRetrieve_Item { + E_RAB_ID_t e_RAB_ID; + E_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + BearerType_t *bearerType; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetupRetrieve_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_RABs_ToBeSetupRetrieve_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..b815431 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.c @@ -0,0 +1,93 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..ca1765f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2AP-PDU.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c new file mode 100644 index 0000000..136f424 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.c @@ -0,0 +1,154 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-actionDefinition.h" + +#include "ActionParameter-Item.h" +static int +memb_actionParameter_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 255)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_actionParameter_List_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 255 } /* (SIZE(1..255)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_actionParameter_List_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 255 } /* (SIZE(1..255)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_actionParameter_List_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActionParameter_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_actionParameter_List_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_actionParameter_List_specs_3 = { + sizeof(struct E2SM_gNB_X2_actionDefinition__actionParameter_List), + offsetof(struct E2SM_gNB_X2_actionDefinition__actionParameter_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_actionParameter_List_3 = { + "actionParameter-List", + "actionParameter-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_actionParameter_List_tags_3, + sizeof(asn_DEF_actionParameter_List_tags_3) + /sizeof(asn_DEF_actionParameter_List_tags_3[0]) - 1, /* 1 */ + asn_DEF_actionParameter_List_tags_3, /* Same as above */ + sizeof(asn_DEF_actionParameter_List_tags_3) + /sizeof(asn_DEF_actionParameter_List_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_actionParameter_List_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_actionParameter_List_3, + 1, /* Single element */ + &asn_SPC_actionParameter_List_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_actionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_actionDefinition, style_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Style_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "style-ID" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_gNB_X2_actionDefinition, actionParameter_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_actionParameter_List_3, + 0, + { 0, &asn_PER_memb_actionParameter_List_constr_3, memb_actionParameter_List_constraint_1 }, + 0, 0, /* No default value */ + "actionParameter-List" + }, +}; +static const int asn_MAP_E2SM_gNB_X2_actionDefinition_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_actionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* style-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionParameter-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_actionDefinition_specs_1 = { + sizeof(struct E2SM_gNB_X2_actionDefinition), + offsetof(struct E2SM_gNB_X2_actionDefinition, _asn_ctx), + asn_MAP_E2SM_gNB_X2_actionDefinition_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_E2SM_gNB_X2_actionDefinition_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_actionDefinition = { + "E2SM-gNB-X2-actionDefinition", + "E2SM-gNB-X2-actionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_actionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_actionDefinition_1, + 2, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_actionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h new file mode 100644 index 0000000..b4bd771 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-actionDefinition.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_actionDefinition_H_ +#define _E2SM_gNB_X2_actionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Style-ID.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ActionParameter_Item; + +/* E2SM-gNB-X2-actionDefinition */ +typedef struct E2SM_gNB_X2_actionDefinition { + Style_ID_t style_ID; + struct E2SM_gNB_X2_actionDefinition__actionParameter_List { + A_SEQUENCE_OF(struct ActionParameter_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *actionParameter_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_actionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_actionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_actionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c new file mode 100644 index 0000000..77fcc30 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-callProcessID.h" + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_callProcessID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_callProcessID, callProcess_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CallProcess_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "callProcess-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_callProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_callProcessID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* callProcess-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_callProcessID_specs_1 = { + sizeof(struct E2SM_gNB_X2_callProcessID), + offsetof(struct E2SM_gNB_X2_callProcessID, _asn_ctx), + asn_MAP_E2SM_gNB_X2_callProcessID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_callProcessID = { + "E2SM-gNB-X2-callProcessID", + "E2SM-gNB-X2-callProcessID", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_callProcessID_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_callProcessID_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_callProcessID_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_callProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_callProcessID_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_callProcessID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_callProcessID_1, + 1, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_callProcessID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h new file mode 100644 index 0000000..4dcc39a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-callProcessID.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_callProcessID_H_ +#define _E2SM_gNB_X2_callProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CallProcess-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-gNB-X2-callProcessID */ +typedef struct E2SM_gNB_X2_callProcessID { + CallProcess_ID_t callProcess_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_callProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_callProcessID; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_callProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c new file mode 100644 index 0000000..8a9466a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-controlHeader.h" + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_controlHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_controlHeader, interface_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Interface_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_controlHeader, interfaceDirection), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceDirection, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceDirection" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_controlHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_controlHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* interfaceDirection */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_controlHeader_specs_1 = { + sizeof(struct E2SM_gNB_X2_controlHeader), + offsetof(struct E2SM_gNB_X2_controlHeader, _asn_ctx), + asn_MAP_E2SM_gNB_X2_controlHeader_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_controlHeader = { + "E2SM-gNB-X2-controlHeader", + "E2SM-gNB-X2-controlHeader", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_controlHeader_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_controlHeader_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_controlHeader_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_controlHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_controlHeader_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_controlHeader_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_controlHeader_1, + 2, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_controlHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h new file mode 100644 index 0000000..79c2cd7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlHeader.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_controlHeader_H_ +#define _E2SM_gNB_X2_controlHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Interface-ID.h" +#include "InterfaceDirection.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-gNB-X2-controlHeader */ +typedef struct E2SM_gNB_X2_controlHeader { + Interface_ID_t interface_ID; + InterfaceDirection_t interfaceDirection; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_controlHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_controlHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_controlHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c new file mode 100644 index 0000000..e6b0924 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-controlMessage.h" + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_controlMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_controlMessage, interfaceMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_controlMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_controlMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interfaceMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_controlMessage_specs_1 = { + sizeof(struct E2SM_gNB_X2_controlMessage), + offsetof(struct E2SM_gNB_X2_controlMessage, _asn_ctx), + asn_MAP_E2SM_gNB_X2_controlMessage_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_controlMessage = { + "E2SM-gNB-X2-controlMessage", + "E2SM-gNB-X2-controlMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_controlMessage_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_controlMessage_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_controlMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_controlMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_controlMessage_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_controlMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_controlMessage_1, + 1, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_controlMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h new file mode 100644 index 0000000..40b0f68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-controlMessage.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_controlMessage_H_ +#define _E2SM_gNB_X2_controlMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "InterfaceMessage.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-gNB-X2-controlMessage */ +typedef struct E2SM_gNB_X2_controlMessage { + InterfaceMessage_t interfaceMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_controlMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_controlMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_controlMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c new file mode 100644 index 0000000..39c4970 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.c @@ -0,0 +1,174 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" + +#include "InterfaceProtocolIE-Item.h" +static int +memb_interfaceProtocolIE_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_interfaceProtocolIE_List_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_interfaceProtocolIE_List_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_interfaceProtocolIE_List_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_InterfaceProtocolIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_interfaceProtocolIE_List_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_interfaceProtocolIE_List_specs_5 = { + sizeof(struct E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List), + offsetof(struct E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interfaceProtocolIE_List_5 = { + "interfaceProtocolIE-List", + "interfaceProtocolIE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_interfaceProtocolIE_List_tags_5, + sizeof(asn_DEF_interfaceProtocolIE_List_tags_5) + /sizeof(asn_DEF_interfaceProtocolIE_List_tags_5[0]) - 1, /* 1 */ + asn_DEF_interfaceProtocolIE_List_tags_5, /* Same as above */ + sizeof(asn_DEF_interfaceProtocolIE_List_tags_5) + /sizeof(asn_DEF_interfaceProtocolIE_List_tags_5[0]), /* 2 */ + { 0, &asn_PER_type_interfaceProtocolIE_List_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_interfaceProtocolIE_List_5, + 1, /* Single element */ + &asn_SPC_interfaceProtocolIE_List_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_eventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_eventTriggerDefinition, interface_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Interface_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_eventTriggerDefinition, interfaceDirection), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceDirection, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceDirection" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_eventTriggerDefinition, interfaceMessageType), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceMessageType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceMessageType" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_gNB_X2_eventTriggerDefinition, interfaceProtocolIE_List), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_interfaceProtocolIE_List_5, + 0, + { 0, &asn_PER_memb_interfaceProtocolIE_List_constr_5, memb_interfaceProtocolIE_List_constraint_1 }, + 0, 0, /* No default value */ + "interfaceProtocolIE-List" + }, +}; +static const int asn_MAP_E2SM_gNB_X2_eventTriggerDefinition_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_eventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceDirection */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* interfaceMessageType */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* interfaceProtocolIE-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_eventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_gNB_X2_eventTriggerDefinition), + offsetof(struct E2SM_gNB_X2_eventTriggerDefinition, _asn_ctx), + asn_MAP_E2SM_gNB_X2_eventTriggerDefinition_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E2SM_gNB_X2_eventTriggerDefinition_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_eventTriggerDefinition = { + "E2SM-gNB-X2-eventTriggerDefinition", + "E2SM-gNB-X2-eventTriggerDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_eventTriggerDefinition_1, + 4, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_eventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h new file mode 100644 index 0000000..10f08c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-eventTriggerDefinition.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_eventTriggerDefinition_H_ +#define _E2SM_gNB_X2_eventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Interface-ID.h" +#include "InterfaceDirection.h" +#include "InterfaceMessageType.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterfaceProtocolIE_Item; + +/* E2SM-gNB-X2-eventTriggerDefinition */ +typedef struct E2SM_gNB_X2_eventTriggerDefinition { + Interface_ID_t interface_ID; + InterfaceDirection_t interfaceDirection; + InterfaceMessageType_t interfaceMessageType; + struct E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List { + A_SEQUENCE_OF(struct InterfaceProtocolIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *interfaceProtocolIE_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_eventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_eventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_eventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c new file mode 100644 index 0000000..e64114c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.c @@ -0,0 +1,90 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-indicationHeader.h" + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_indicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_indicationHeader, interface_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Interface_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_indicationHeader, interfaceDirection), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceDirection, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceDirection" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_gNB_X2_indicationHeader, timestamp), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeStamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, +}; +static const int asn_MAP_E2SM_gNB_X2_indicationHeader_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_indicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceDirection */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* timestamp */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_indicationHeader_specs_1 = { + sizeof(struct E2SM_gNB_X2_indicationHeader), + offsetof(struct E2SM_gNB_X2_indicationHeader, _asn_ctx), + asn_MAP_E2SM_gNB_X2_indicationHeader_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E2SM_gNB_X2_indicationHeader_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_indicationHeader = { + "E2SM-gNB-X2-indicationHeader", + "E2SM-gNB-X2-indicationHeader", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_indicationHeader_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_indicationHeader_1, + 3, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_indicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h new file mode 100644 index 0000000..80e9c49 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationHeader.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_indicationHeader_H_ +#define _E2SM_gNB_X2_indicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Interface-ID.h" +#include "InterfaceDirection.h" +#include "TimeStamp.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-gNB-X2-indicationHeader */ +typedef struct E2SM_gNB_X2_indicationHeader { + Interface_ID_t interface_ID; + InterfaceDirection_t interfaceDirection; + TimeStamp_t *timestamp; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_indicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_indicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_indicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c new file mode 100644 index 0000000..70b5921 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "E2SM-gNB-X2-indicationMessage.h" + +static asn_TYPE_member_t asn_MBR_E2SM_gNB_X2_indicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_gNB_X2_indicationMessage, interfaceMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_gNB_X2_indicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interfaceMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_gNB_X2_indicationMessage_specs_1 = { + sizeof(struct E2SM_gNB_X2_indicationMessage), + offsetof(struct E2SM_gNB_X2_indicationMessage, _asn_ctx), + asn_MAP_E2SM_gNB_X2_indicationMessage_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_indicationMessage = { + "E2SM-gNB-X2-indicationMessage", + "E2SM-gNB-X2-indicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1, + sizeof(asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_gNB_X2_indicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_gNB_X2_indicationMessage_1, + 1, /* Elements count */ + &asn_SPC_E2SM_gNB_X2_indicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h new file mode 100644 index 0000000..e28aad1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/E2SM-gNB-X2-indicationMessage.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _E2SM_gNB_X2_indicationMessage_H_ +#define _E2SM_gNB_X2_indicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "InterfaceMessage.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-gNB-X2-indicationMessage */ +typedef struct E2SM_gNB_X2_indicationMessage { + InterfaceMessage_t interfaceMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_gNB_X2_indicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_gNB_X2_indicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_gNB_X2_indicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.c new file mode 100644 index 0000000..4ae1cb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EARFCN.h" + +int +EARFCN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EARFCN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EARFCN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EARFCN = { + "EARFCN", + "EARFCN", + &asn_OP_NativeInteger, + asn_DEF_EARFCN_tags_1, + sizeof(asn_DEF_EARFCN_tags_1) + /sizeof(asn_DEF_EARFCN_tags_1[0]), /* 1 */ + asn_DEF_EARFCN_tags_1, /* Same as above */ + sizeof(asn_DEF_EARFCN_tags_1) + /sizeof(asn_DEF_EARFCN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EARFCN_constr_1, EARFCN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.h new file mode 100644 index 0000000..49d6364 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCN.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EARFCN_H_ +#define _EARFCN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EARFCN */ +typedef long EARFCN_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EARFCN_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EARFCN; +asn_struct_free_f EARFCN_free; +asn_struct_print_f EARFCN_print; +asn_constr_check_f EARFCN_constraint; +ber_type_decoder_f EARFCN_decode_ber; +der_type_encoder_f EARFCN_encode_der; +xer_type_decoder_f EARFCN_decode_xer; +xer_type_encoder_f EARFCN_encode_xer; +per_type_decoder_f EARFCN_decode_uper; +per_type_encoder_f EARFCN_encode_uper; +per_type_decoder_f EARFCN_decode_aper; +per_type_encoder_f EARFCN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EARFCN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.c new file mode 100644 index 0000000..939837d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EARFCNExtension.h" + +int +EARFCNExtension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 65536 && value <= 262143)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EARFCNExtension_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 18, -1, 65536, 262143 } /* (65536..262143,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EARFCNExtension_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EARFCNExtension = { + "EARFCNExtension", + "EARFCNExtension", + &asn_OP_NativeInteger, + asn_DEF_EARFCNExtension_tags_1, + sizeof(asn_DEF_EARFCNExtension_tags_1) + /sizeof(asn_DEF_EARFCNExtension_tags_1[0]), /* 1 */ + asn_DEF_EARFCNExtension_tags_1, /* Same as above */ + sizeof(asn_DEF_EARFCNExtension_tags_1) + /sizeof(asn_DEF_EARFCNExtension_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EARFCNExtension_constr_1, EARFCNExtension_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.h new file mode 100644 index 0000000..b20aa0a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EARFCNExtension.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EARFCNExtension_H_ +#define _EARFCNExtension_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EARFCNExtension */ +typedef long EARFCNExtension_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EARFCNExtension_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EARFCNExtension; +asn_struct_free_f EARFCNExtension_free; +asn_struct_print_f EARFCNExtension_print; +asn_constr_check_f EARFCNExtension_constraint; +ber_type_decoder_f EARFCNExtension_decode_ber; +der_type_encoder_f EARFCNExtension_encode_der; +xer_type_decoder_f EARFCNExtension_decode_xer; +xer_type_encoder_f EARFCNExtension_encode_xer; +per_type_decoder_f EARFCNExtension_decode_uper; +per_type_encoder_f EARFCNExtension_encode_uper; +per_type_decoder_f EARFCNExtension_decode_aper; +per_type_encoder_f EARFCNExtension_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EARFCNExtension_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.c new file mode 100644 index 0000000..b124560 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ECGI.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ECGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ECGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ECGI, eUTRANcellIdentifier), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EUTRANCellIdentifier, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRANcellIdentifier" + }, + { ATF_POINTER, 1, offsetof(struct ECGI, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P134, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ECGI_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ECGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ECGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eUTRANcellIdentifier */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ECGI_specs_1 = { + sizeof(struct ECGI), + offsetof(struct ECGI, _asn_ctx), + asn_MAP_ECGI_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ECGI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ECGI = { + "ECGI", + "ECGI", + &asn_OP_SEQUENCE, + asn_DEF_ECGI_tags_1, + sizeof(asn_DEF_ECGI_tags_1) + /sizeof(asn_DEF_ECGI_tags_1[0]), /* 1 */ + asn_DEF_ECGI_tags_1, /* Same as above */ + sizeof(asn_DEF_ECGI_tags_1) + /sizeof(asn_DEF_ECGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ECGI_1, + 3, /* Elements count */ + &asn_SPC_ECGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.h new file mode 100644 index 0000000..570e1c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ECGI.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ECGI_H_ +#define _ECGI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "EUTRANCellIdentifier.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ECGI */ +typedef struct ECGI { + PLMN_Identity_t pLMN_Identity; + EUTRANCellIdentifier_t eUTRANcellIdentifier; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ECGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ECGI; +extern asn_SEQUENCE_specifics_t asn_SPC_ECGI_specs_1; +extern asn_TYPE_member_t asn_MBR_ECGI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ECGI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c new file mode 100644 index 0000000..976966d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.c @@ -0,0 +1,245 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EN-DC-ResourceConfiguration.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_pDCPatSgNB_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_mCGresources_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sCGresources_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_pDCPatSgNB_value2enum_2[] = { + { 0, 7, "present" }, + { 1, 11, "not-present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_pDCPatSgNB_enum2value_2[] = { + 1, /* not-present(1) */ + 0 /* present(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_pDCPatSgNB_specs_2 = { + asn_MAP_pDCPatSgNB_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_pDCPatSgNB_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_pDCPatSgNB_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pDCPatSgNB_2 = { + "pDCPatSgNB", + "pDCPatSgNB", + &asn_OP_NativeEnumerated, + asn_DEF_pDCPatSgNB_tags_2, + sizeof(asn_DEF_pDCPatSgNB_tags_2) + /sizeof(asn_DEF_pDCPatSgNB_tags_2[0]) - 1, /* 1 */ + asn_DEF_pDCPatSgNB_tags_2, /* Same as above */ + sizeof(asn_DEF_pDCPatSgNB_tags_2) + /sizeof(asn_DEF_pDCPatSgNB_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_pDCPatSgNB_constr_2, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pDCPatSgNB_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_mCGresources_value2enum_6[] = { + { 0, 7, "present" }, + { 1, 11, "not-present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_mCGresources_enum2value_6[] = { + 1, /* not-present(1) */ + 0 /* present(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_mCGresources_specs_6 = { + asn_MAP_mCGresources_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_mCGresources_enum2value_6, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_mCGresources_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mCGresources_6 = { + "mCGresources", + "mCGresources", + &asn_OP_NativeEnumerated, + asn_DEF_mCGresources_tags_6, + sizeof(asn_DEF_mCGresources_tags_6) + /sizeof(asn_DEF_mCGresources_tags_6[0]) - 1, /* 1 */ + asn_DEF_mCGresources_tags_6, /* Same as above */ + sizeof(asn_DEF_mCGresources_tags_6) + /sizeof(asn_DEF_mCGresources_tags_6[0]), /* 2 */ + { 0, &asn_PER_type_mCGresources_constr_6, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mCGresources_specs_6 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_sCGresources_value2enum_10[] = { + { 0, 7, "present" }, + { 1, 11, "not-present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_sCGresources_enum2value_10[] = { + 1, /* not-present(1) */ + 0 /* present(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_sCGresources_specs_10 = { + asn_MAP_sCGresources_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_sCGresources_enum2value_10, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_sCGresources_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sCGresources_10 = { + "sCGresources", + "sCGresources", + &asn_OP_NativeEnumerated, + asn_DEF_sCGresources_tags_10, + sizeof(asn_DEF_sCGresources_tags_10) + /sizeof(asn_DEF_sCGresources_tags_10[0]) - 1, /* 1 */ + asn_DEF_sCGresources_tags_10, /* Same as above */ + sizeof(asn_DEF_sCGresources_tags_10) + /sizeof(asn_DEF_sCGresources_tags_10[0]), /* 2 */ + { 0, &asn_PER_type_sCGresources_constr_10, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sCGresources_specs_10 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EN_DC_ResourceConfiguration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfiguration, pDCPatSgNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pDCPatSgNB_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pDCPatSgNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfiguration, mCGresources), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mCGresources_6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mCGresources" + }, + { ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfiguration, sCGresources), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sCGresources_10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sCGresources" + }, + { ATF_POINTER, 1, offsetof(struct EN_DC_ResourceConfiguration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P137, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_EN_DC_ResourceConfiguration_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_EN_DC_ResourceConfiguration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EN_DC_ResourceConfiguration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCPatSgNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mCGresources */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sCGresources */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EN_DC_ResourceConfiguration_specs_1 = { + sizeof(struct EN_DC_ResourceConfiguration), + offsetof(struct EN_DC_ResourceConfiguration, _asn_ctx), + asn_MAP_EN_DC_ResourceConfiguration_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_EN_DC_ResourceConfiguration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EN_DC_ResourceConfiguration = { + "EN-DC-ResourceConfiguration", + "EN-DC-ResourceConfiguration", + &asn_OP_SEQUENCE, + asn_DEF_EN_DC_ResourceConfiguration_tags_1, + sizeof(asn_DEF_EN_DC_ResourceConfiguration_tags_1) + /sizeof(asn_DEF_EN_DC_ResourceConfiguration_tags_1[0]), /* 1 */ + asn_DEF_EN_DC_ResourceConfiguration_tags_1, /* Same as above */ + sizeof(asn_DEF_EN_DC_ResourceConfiguration_tags_1) + /sizeof(asn_DEF_EN_DC_ResourceConfiguration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EN_DC_ResourceConfiguration_1, + 4, /* Elements count */ + &asn_SPC_EN_DC_ResourceConfiguration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h new file mode 100644 index 0000000..c5fc3ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EN-DC-ResourceConfiguration.h @@ -0,0 +1,94 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EN_DC_ResourceConfiguration_H_ +#define _EN_DC_ResourceConfiguration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum EN_DC_ResourceConfiguration__pDCPatSgNB { + EN_DC_ResourceConfiguration__pDCPatSgNB_present = 0, + EN_DC_ResourceConfiguration__pDCPatSgNB_not_present = 1 + /* + * Enumeration is extensible + */ +} e_EN_DC_ResourceConfiguration__pDCPatSgNB; +typedef enum EN_DC_ResourceConfiguration__mCGresources { + EN_DC_ResourceConfiguration__mCGresources_present = 0, + EN_DC_ResourceConfiguration__mCGresources_not_present = 1 + /* + * Enumeration is extensible + */ +} e_EN_DC_ResourceConfiguration__mCGresources; +typedef enum EN_DC_ResourceConfiguration__sCGresources { + EN_DC_ResourceConfiguration__sCGresources_present = 0, + EN_DC_ResourceConfiguration__sCGresources_not_present = 1 + /* + * Enumeration is extensible + */ +} e_EN_DC_ResourceConfiguration__sCGresources; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* EN-DC-ResourceConfiguration */ +typedef struct EN_DC_ResourceConfiguration { + long pDCPatSgNB; + long mCGresources; + long sCGresources; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EN_DC_ResourceConfiguration_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_pDCPatSgNB_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_mCGresources_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sCGresources_10; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_EN_DC_ResourceConfiguration; +extern asn_SEQUENCE_specifics_t asn_SPC_EN_DC_ResourceConfiguration_specs_1; +extern asn_TYPE_member_t asn_MBR_EN_DC_ResourceConfiguration_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _EN_DC_ResourceConfiguration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.c new file mode 100644 index 0000000..186f816 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.c @@ -0,0 +1,244 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.h new file mode 100644 index 0000000..d95a3e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENB-ID.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.c new file mode 100644 index 0000000..f8afc5a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENBConfigurationUpdate.h" + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P28, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdate_specs_1 = { + sizeof(struct ENBConfigurationUpdate), + offsetof(struct ENBConfigurationUpdate, _asn_ctx), + asn_MAP_ENBConfigurationUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdate = { + "ENBConfigurationUpdate", + "ENBConfigurationUpdate", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdate_tags_1, + sizeof(asn_DEF_ENBConfigurationUpdate_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdate_tags_1[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdate_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdate_1, + 1, /* Elements count */ + &asn_SPC_ENBConfigurationUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.h new file mode 100644 index 0000000..77d4564 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENBConfigurationUpdate_H_ +#define _ENBConfigurationUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENBConfigurationUpdate */ +typedef struct ENBConfigurationUpdate { + ProtocolIE_Container_119P28_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENBConfigurationUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c new file mode 100644 index 0000000..c914195 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENBConfigurationUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P29, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateAcknowledge_specs_1 = { + sizeof(struct ENBConfigurationUpdateAcknowledge), + offsetof(struct ENBConfigurationUpdateAcknowledge, _asn_ctx), + asn_MAP_ENBConfigurationUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateAcknowledge = { + "ENBConfigurationUpdateAcknowledge", + "ENBConfigurationUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1, + sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_ENBConfigurationUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h new file mode 100644 index 0000000..13789da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateAcknowledge.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENBConfigurationUpdateAcknowledge_H_ +#define _ENBConfigurationUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENBConfigurationUpdateAcknowledge */ +typedef struct ENBConfigurationUpdateAcknowledge { + ProtocolIE_Container_119P29_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENBConfigurationUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c new file mode 100644 index 0000000..90f7e4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENBConfigurationUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P30, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateFailure_specs_1 = { + sizeof(struct ENBConfigurationUpdateFailure), + offsetof(struct ENBConfigurationUpdateFailure, _asn_ctx), + asn_MAP_ENBConfigurationUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateFailure = { + "ENBConfigurationUpdateFailure", + "ENBConfigurationUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdateFailure_tags_1, + sizeof(asn_DEF_ENBConfigurationUpdateFailure_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdateFailure_tags_1) + /sizeof(asn_DEF_ENBConfigurationUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_ENBConfigurationUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h new file mode 100644 index 0000000..116da66 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENBConfigurationUpdateFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENBConfigurationUpdateFailure_H_ +#define _ENBConfigurationUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENBConfigurationUpdateFailure */ +typedef struct ENBConfigurationUpdateFailure { + ProtocolIE_Container_119P30_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENBConfigurationUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.c new file mode 100644 index 0000000..d336ba8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCCellActivationFailure.h" + +static asn_TYPE_member_t asn_MBR_ENDCCellActivationFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P100, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationFailure_specs_1 = { + sizeof(struct ENDCCellActivationFailure), + offsetof(struct ENDCCellActivationFailure, _asn_ctx), + asn_MAP_ENDCCellActivationFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationFailure = { + "ENDCCellActivationFailure", + "ENDCCellActivationFailure", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationFailure_tags_1, + sizeof(asn_DEF_ENDCCellActivationFailure_tags_1) + /sizeof(asn_DEF_ENDCCellActivationFailure_tags_1[0]), /* 1 */ + asn_DEF_ENDCCellActivationFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationFailure_tags_1) + /sizeof(asn_DEF_ENDCCellActivationFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationFailure_1, + 1, /* Elements count */ + &asn_SPC_ENDCCellActivationFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.h new file mode 100644 index 0000000..1388743 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCCellActivationFailure_H_ +#define _ENDCCellActivationFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCCellActivationFailure */ +typedef struct ENDCCellActivationFailure { + ProtocolIE_Container_119P100_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCCellActivationFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.c new file mode 100644 index 0000000..6aab46e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCCellActivationRequest.h" + +static asn_TYPE_member_t asn_MBR_ENDCCellActivationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P98, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationRequest_specs_1 = { + sizeof(struct ENDCCellActivationRequest), + offsetof(struct ENDCCellActivationRequest, _asn_ctx), + asn_MAP_ENDCCellActivationRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationRequest = { + "ENDCCellActivationRequest", + "ENDCCellActivationRequest", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationRequest_tags_1, + sizeof(asn_DEF_ENDCCellActivationRequest_tags_1) + /sizeof(asn_DEF_ENDCCellActivationRequest_tags_1[0]), /* 1 */ + asn_DEF_ENDCCellActivationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationRequest_tags_1) + /sizeof(asn_DEF_ENDCCellActivationRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationRequest_1, + 1, /* Elements count */ + &asn_SPC_ENDCCellActivationRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.h new file mode 100644 index 0000000..d8ec59d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCCellActivationRequest_H_ +#define _ENDCCellActivationRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCCellActivationRequest */ +typedef struct ENDCCellActivationRequest { + ProtocolIE_Container_119P98_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCCellActivationRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.c new file mode 100644 index 0000000..49c3ed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCCellActivationResponse.h" + +static asn_TYPE_member_t asn_MBR_ENDCCellActivationResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P99, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationResponse_specs_1 = { + sizeof(struct ENDCCellActivationResponse), + offsetof(struct ENDCCellActivationResponse, _asn_ctx), + asn_MAP_ENDCCellActivationResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationResponse = { + "ENDCCellActivationResponse", + "ENDCCellActivationResponse", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationResponse_tags_1, + sizeof(asn_DEF_ENDCCellActivationResponse_tags_1) + /sizeof(asn_DEF_ENDCCellActivationResponse_tags_1[0]), /* 1 */ + asn_DEF_ENDCCellActivationResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationResponse_tags_1) + /sizeof(asn_DEF_ENDCCellActivationResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationResponse_1, + 1, /* Elements count */ + &asn_SPC_ENDCCellActivationResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.h new file mode 100644 index 0000000..fd1239b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCCellActivationResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCCellActivationResponse_H_ +#define _ENDCCellActivationResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCCellActivationResponse */ +typedef struct ENDCCellActivationResponse { + ProtocolIE_Container_119P99_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCCellActivationResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.c new file mode 100644 index 0000000..638672b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCConfigurationUpdate.h" + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P91, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdate_specs_1 = { + sizeof(struct ENDCConfigurationUpdate), + offsetof(struct ENDCConfigurationUpdate, _asn_ctx), + asn_MAP_ENDCConfigurationUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdate = { + "ENDCConfigurationUpdate", + "ENDCConfigurationUpdate", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdate_tags_1, + sizeof(asn_DEF_ENDCConfigurationUpdate_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdate_tags_1[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdate_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdate_1, + 1, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.h new file mode 100644 index 0000000..f3bfeff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCConfigurationUpdate_H_ +#define _ENDCConfigurationUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCConfigurationUpdate */ +typedef struct ENDCConfigurationUpdate { + ProtocolIE_Container_119P91_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCConfigurationUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c new file mode 100644 index 0000000..29f604f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCConfigurationUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P94, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateAcknowledge_specs_1 = { + sizeof(struct ENDCConfigurationUpdateAcknowledge), + offsetof(struct ENDCConfigurationUpdateAcknowledge, _asn_ctx), + asn_MAP_ENDCConfigurationUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateAcknowledge = { + "ENDCConfigurationUpdateAcknowledge", + "ENDCConfigurationUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1, + sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h new file mode 100644 index 0000000..e336372 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateAcknowledge.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCConfigurationUpdateAcknowledge_H_ +#define _ENDCConfigurationUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCConfigurationUpdateAcknowledge */ +typedef struct ENDCConfigurationUpdateAcknowledge { + ProtocolIE_Container_119P94_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCConfigurationUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c new file mode 100644 index 0000000..33207e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCConfigurationUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P97, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateFailure_specs_1 = { + sizeof(struct ENDCConfigurationUpdateFailure), + offsetof(struct ENDCConfigurationUpdateFailure, _asn_ctx), + asn_MAP_ENDCConfigurationUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateFailure = { + "ENDCConfigurationUpdateFailure", + "ENDCConfigurationUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdateFailure_tags_1, + sizeof(asn_DEF_ENDCConfigurationUpdateFailure_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdateFailure_tags_1) + /sizeof(asn_DEF_ENDCConfigurationUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h new file mode 100644 index 0000000..5f9fb4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCConfigurationUpdateFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCConfigurationUpdateFailure_H_ +#define _ENDCConfigurationUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCConfigurationUpdateFailure */ +typedef struct ENDCConfigurationUpdateFailure { + ProtocolIE_Container_119P97_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCConfigurationUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.c new file mode 100644 index 0000000..b0c6e9e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCPartialResetConfirm.h" + +static asn_TYPE_member_t asn_MBR_ENDCPartialResetConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P104, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCPartialResetConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCPartialResetConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetConfirm_specs_1 = { + sizeof(struct ENDCPartialResetConfirm), + offsetof(struct ENDCPartialResetConfirm, _asn_ctx), + asn_MAP_ENDCPartialResetConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetConfirm = { + "ENDCPartialResetConfirm", + "ENDCPartialResetConfirm", + &asn_OP_SEQUENCE, + asn_DEF_ENDCPartialResetConfirm_tags_1, + sizeof(asn_DEF_ENDCPartialResetConfirm_tags_1) + /sizeof(asn_DEF_ENDCPartialResetConfirm_tags_1[0]), /* 1 */ + asn_DEF_ENDCPartialResetConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCPartialResetConfirm_tags_1) + /sizeof(asn_DEF_ENDCPartialResetConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCPartialResetConfirm_1, + 1, /* Elements count */ + &asn_SPC_ENDCPartialResetConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.h new file mode 100644 index 0000000..e913947 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCPartialResetConfirm_H_ +#define _ENDCPartialResetConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCPartialResetConfirm */ +typedef struct ENDCPartialResetConfirm { + ProtocolIE_Container_119P104_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCPartialResetConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCPartialResetConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.c new file mode 100644 index 0000000..0115910 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCPartialResetRequired.h" + +static asn_TYPE_member_t asn_MBR_ENDCPartialResetRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P103, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCPartialResetRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCPartialResetRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetRequired_specs_1 = { + sizeof(struct ENDCPartialResetRequired), + offsetof(struct ENDCPartialResetRequired, _asn_ctx), + asn_MAP_ENDCPartialResetRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetRequired = { + "ENDCPartialResetRequired", + "ENDCPartialResetRequired", + &asn_OP_SEQUENCE, + asn_DEF_ENDCPartialResetRequired_tags_1, + sizeof(asn_DEF_ENDCPartialResetRequired_tags_1) + /sizeof(asn_DEF_ENDCPartialResetRequired_tags_1[0]), /* 1 */ + asn_DEF_ENDCPartialResetRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCPartialResetRequired_tags_1) + /sizeof(asn_DEF_ENDCPartialResetRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCPartialResetRequired_1, + 1, /* Elements count */ + &asn_SPC_ENDCPartialResetRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.h new file mode 100644 index 0000000..982b9e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCPartialResetRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCPartialResetRequired_H_ +#define _ENDCPartialResetRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCPartialResetRequired */ +typedef struct ENDCPartialResetRequired { + ProtocolIE_Container_119P103_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCPartialResetRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCPartialResetRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.c new file mode 100644 index 0000000..7dfd4f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2RemovalFailure.h" + +static asn_TYPE_member_t asn_MBR_ENDCX2RemovalFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P117, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalFailure_specs_1 = { + sizeof(struct ENDCX2RemovalFailure), + offsetof(struct ENDCX2RemovalFailure, _asn_ctx), + asn_MAP_ENDCX2RemovalFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalFailure = { + "ENDCX2RemovalFailure", + "ENDCX2RemovalFailure", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalFailure_tags_1, + sizeof(asn_DEF_ENDCX2RemovalFailure_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalFailure_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2RemovalFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalFailure_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalFailure_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2RemovalFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.h new file mode 100644 index 0000000..20eb789 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2RemovalFailure_H_ +#define _ENDCX2RemovalFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2RemovalFailure */ +typedef struct ENDCX2RemovalFailure { + ProtocolIE_Container_119P117_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2RemovalFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.c new file mode 100644 index 0000000..bb27762 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2RemovalRequest.h" + +static asn_TYPE_member_t asn_MBR_ENDCX2RemovalRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P111, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalRequest_specs_1 = { + sizeof(struct ENDCX2RemovalRequest), + offsetof(struct ENDCX2RemovalRequest, _asn_ctx), + asn_MAP_ENDCX2RemovalRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalRequest = { + "ENDCX2RemovalRequest", + "ENDCX2RemovalRequest", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalRequest_tags_1, + sizeof(asn_DEF_ENDCX2RemovalRequest_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalRequest_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2RemovalRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalRequest_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalRequest_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2RemovalRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.h new file mode 100644 index 0000000..82cdc7f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2RemovalRequest_H_ +#define _ENDCX2RemovalRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2RemovalRequest */ +typedef struct ENDCX2RemovalRequest { + ProtocolIE_Container_119P111_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2RemovalRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.c new file mode 100644 index 0000000..6a088f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2RemovalResponse.h" + +static asn_TYPE_member_t asn_MBR_ENDCX2RemovalResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P114, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalResponse_specs_1 = { + sizeof(struct ENDCX2RemovalResponse), + offsetof(struct ENDCX2RemovalResponse, _asn_ctx), + asn_MAP_ENDCX2RemovalResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalResponse = { + "ENDCX2RemovalResponse", + "ENDCX2RemovalResponse", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalResponse_tags_1, + sizeof(asn_DEF_ENDCX2RemovalResponse_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalResponse_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2RemovalResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalResponse_tags_1) + /sizeof(asn_DEF_ENDCX2RemovalResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalResponse_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2RemovalResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.h new file mode 100644 index 0000000..ecc9df5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2RemovalResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2RemovalResponse_H_ +#define _ENDCX2RemovalResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2RemovalResponse */ +typedef struct ENDCX2RemovalResponse { + ProtocolIE_Container_119P114_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2RemovalResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.c new file mode 100644 index 0000000..b12555f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2SetupFailure.h" + +asn_TYPE_member_t asn_MBR_ENDCX2SetupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P90, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupFailure_specs_1 = { + sizeof(struct ENDCX2SetupFailure), + offsetof(struct ENDCX2SetupFailure, _asn_ctx), + asn_MAP_ENDCX2SetupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupFailure = { + "ENDCX2SetupFailure", + "ENDCX2SetupFailure", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupFailure_tags_1, + sizeof(asn_DEF_ENDCX2SetupFailure_tags_1) + /sizeof(asn_DEF_ENDCX2SetupFailure_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2SetupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupFailure_tags_1) + /sizeof(asn_DEF_ENDCX2SetupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupFailure_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2SetupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.h new file mode 100644 index 0000000..8ef320a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2SetupFailure_H_ +#define _ENDCX2SetupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2SetupFailure */ +typedef struct ENDCX2SetupFailure { + ProtocolIE_Container_119P90_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2SetupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.c new file mode 100644 index 0000000..50bc7c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2SetupRequest.h" + +asn_TYPE_member_t asn_MBR_ENDCX2SetupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P84, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupRequest_specs_1 = { + sizeof(struct ENDCX2SetupRequest), + offsetof(struct ENDCX2SetupRequest, _asn_ctx), + asn_MAP_ENDCX2SetupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupRequest = { + "ENDCX2SetupRequest", + "ENDCX2SetupRequest", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupRequest_tags_1, + sizeof(asn_DEF_ENDCX2SetupRequest_tags_1) + /sizeof(asn_DEF_ENDCX2SetupRequest_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2SetupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupRequest_tags_1) + /sizeof(asn_DEF_ENDCX2SetupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupRequest_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2SetupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.h new file mode 100644 index 0000000..bbd4cc6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2SetupRequest_H_ +#define _ENDCX2SetupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2SetupRequest */ +typedef struct ENDCX2SetupRequest { + ProtocolIE_Container_119P84_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2SetupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.c new file mode 100644 index 0000000..a74bc9c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ENDCX2SetupResponse.h" + +asn_TYPE_member_t asn_MBR_ENDCX2SetupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P87, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupResponse_specs_1 = { + sizeof(struct ENDCX2SetupResponse), + offsetof(struct ENDCX2SetupResponse, _asn_ctx), + asn_MAP_ENDCX2SetupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupResponse = { + "ENDCX2SetupResponse", + "ENDCX2SetupResponse", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupResponse_tags_1, + sizeof(asn_DEF_ENDCX2SetupResponse_tags_1) + /sizeof(asn_DEF_ENDCX2SetupResponse_tags_1[0]), /* 1 */ + asn_DEF_ENDCX2SetupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupResponse_tags_1) + /sizeof(asn_DEF_ENDCX2SetupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupResponse_1, + 1, /* Elements count */ + &asn_SPC_ENDCX2SetupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.h new file mode 100644 index 0000000..bcf07e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ENDCX2SetupResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ENDCX2SetupResponse_H_ +#define _ENDCX2SetupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENDCX2SetupResponse */ +typedef struct ENDCX2SetupResponse { + ProtocolIE_Container_119P87_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENDCX2SetupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.c new file mode 100644 index 0000000..086e8ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EPLMNs.h" + +asn_per_constraints_t asn_PER_type_EPLMNs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_EPLMNs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPLMNs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_EPLMNs_specs_1 = { + sizeof(struct EPLMNs), + offsetof(struct EPLMNs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_EPLMNs = { + "EPLMNs", + "EPLMNs", + &asn_OP_SEQUENCE_OF, + asn_DEF_EPLMNs_tags_1, + sizeof(asn_DEF_EPLMNs_tags_1) + /sizeof(asn_DEF_EPLMNs_tags_1[0]), /* 1 */ + asn_DEF_EPLMNs_tags_1, /* Same as above */ + sizeof(asn_DEF_EPLMNs_tags_1) + /sizeof(asn_DEF_EPLMNs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EPLMNs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_EPLMNs_1, + 1, /* Single element */ + &asn_SPC_EPLMNs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.h new file mode 100644 index 0000000..79002f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EPLMNs.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EPLMNs_H_ +#define _EPLMNs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EPLMNs */ +typedef struct EPLMNs { + A_SEQUENCE_OF(PLMN_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPLMNs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPLMNs; +extern asn_SET_OF_specifics_t asn_SPC_EPLMNs_specs_1; +extern asn_TYPE_member_t asn_MBR_EPLMNs_1[1]; +extern asn_per_constraints_t asn_PER_type_EPLMNs_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _EPLMNs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.c new file mode 100644 index 0000000..46d87d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ERABActivityNotifyItem.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ERABActivityNotifyItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ERABActivityNotifyItem, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ERABActivityNotifyItem, activityReport), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UserPlaneTrafficActivityReport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "activityReport" + }, + { ATF_POINTER, 1, offsetof(struct ERABActivityNotifyItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P138, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ERABActivityNotifyItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ERABActivityNotifyItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ERABActivityNotifyItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* activityReport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ERABActivityNotifyItem_specs_1 = { + sizeof(struct ERABActivityNotifyItem), + offsetof(struct ERABActivityNotifyItem, _asn_ctx), + asn_MAP_ERABActivityNotifyItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ERABActivityNotifyItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItem = { + "ERABActivityNotifyItem", + "ERABActivityNotifyItem", + &asn_OP_SEQUENCE, + asn_DEF_ERABActivityNotifyItem_tags_1, + sizeof(asn_DEF_ERABActivityNotifyItem_tags_1) + /sizeof(asn_DEF_ERABActivityNotifyItem_tags_1[0]), /* 1 */ + asn_DEF_ERABActivityNotifyItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ERABActivityNotifyItem_tags_1) + /sizeof(asn_DEF_ERABActivityNotifyItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ERABActivityNotifyItem_1, + 3, /* Elements count */ + &asn_SPC_ERABActivityNotifyItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.h new file mode 100644 index 0000000..4938c84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItem.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ERABActivityNotifyItem_H_ +#define _ERABActivityNotifyItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "UserPlaneTrafficActivityReport.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ERABActivityNotifyItem */ +typedef struct ERABActivityNotifyItem { + E_RAB_ID_t e_RAB_ID; + UserPlaneTrafficActivityReport_t activityReport; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ERABActivityNotifyItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ERABActivityNotifyItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ERABActivityNotifyItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ERABActivityNotifyItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.c new file mode 100644 index 0000000..87f0158 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ERABActivityNotifyItemList.h" + +#include "ERABActivityNotifyItem.h" +asn_per_constraints_t asn_PER_type_ERABActivityNotifyItemList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ERABActivityNotifyItemList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ERABActivityNotifyItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ERABActivityNotifyItemList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ERABActivityNotifyItemList_specs_1 = { + sizeof(struct ERABActivityNotifyItemList), + offsetof(struct ERABActivityNotifyItemList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItemList = { + "ERABActivityNotifyItemList", + "ERABActivityNotifyItemList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ERABActivityNotifyItemList_tags_1, + sizeof(asn_DEF_ERABActivityNotifyItemList_tags_1) + /sizeof(asn_DEF_ERABActivityNotifyItemList_tags_1[0]), /* 1 */ + asn_DEF_ERABActivityNotifyItemList_tags_1, /* Same as above */ + sizeof(asn_DEF_ERABActivityNotifyItemList_tags_1) + /sizeof(asn_DEF_ERABActivityNotifyItemList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ERABActivityNotifyItemList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ERABActivityNotifyItemList_1, + 1, /* Single element */ + &asn_SPC_ERABActivityNotifyItemList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.h new file mode 100644 index 0000000..b8ee029 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ERABActivityNotifyItemList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ERABActivityNotifyItemList_H_ +#define _ERABActivityNotifyItemList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ERABActivityNotifyItem; + +/* ERABActivityNotifyItemList */ +typedef struct ERABActivityNotifyItemList { + A_SEQUENCE_OF(struct ERABActivityNotifyItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ERABActivityNotifyItemList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItemList; +extern asn_SET_OF_specifics_t asn_SPC_ERABActivityNotifyItemList_specs_1; +extern asn_TYPE_member_t asn_MBR_ERABActivityNotifyItemList_1[1]; +extern asn_per_constraints_t asn_PER_type_ERABActivityNotifyItemList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ERABActivityNotifyItemList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.c new file mode 100644 index 0000000..8bec217 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EUTRA-Mode-Info.h" + +#include "FDD-Info.h" +#include "TDD-Info.h" +asn_per_constraints_t asn_PER_type_EUTRA_Mode_Info_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_EUTRA_Mode_Info_1[] = { + { ATF_POINTER, 0, offsetof(struct EUTRA_Mode_Info, choice.fDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FDD_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fDD" + }, + { ATF_POINTER, 0, offsetof(struct EUTRA_Mode_Info, choice.tDD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tDD" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRA_Mode_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fDD */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tDD */ +}; +asn_CHOICE_specifics_t asn_SPC_EUTRA_Mode_Info_specs_1 = { + sizeof(struct EUTRA_Mode_Info), + offsetof(struct EUTRA_Mode_Info, _asn_ctx), + offsetof(struct EUTRA_Mode_Info, present), + sizeof(((struct EUTRA_Mode_Info *)0)->present), + asn_MAP_EUTRA_Mode_Info_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRA_Mode_Info = { + "EUTRA-Mode-Info", + "EUTRA-Mode-Info", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_EUTRA_Mode_Info_constr_1, CHOICE_constraint }, + asn_MBR_EUTRA_Mode_Info_1, + 2, /* Elements count */ + &asn_SPC_EUTRA_Mode_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.h new file mode 100644 index 0000000..c9ef0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRA-Mode-Info.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EUTRA_Mode_Info_H_ +#define _EUTRA_Mode_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum EUTRA_Mode_Info_PR { + EUTRA_Mode_Info_PR_NOTHING, /* No components present */ + EUTRA_Mode_Info_PR_fDD, + EUTRA_Mode_Info_PR_tDD + /* Extensions may appear below */ + +} EUTRA_Mode_Info_PR; + +/* Forward declarations */ +struct FDD_Info; +struct TDD_Info; + +/* EUTRA-Mode-Info */ +typedef struct EUTRA_Mode_Info { + EUTRA_Mode_Info_PR present; + union EUTRA_Mode_Info_u { + struct FDD_Info *fDD; + struct TDD_Info *tDD; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRA_Mode_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EUTRA_Mode_Info; +extern asn_CHOICE_specifics_t asn_SPC_EUTRA_Mode_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_EUTRA_Mode_Info_1[2]; +extern asn_per_constraints_t asn_PER_type_EUTRA_Mode_Info_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRA_Mode_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.c new file mode 100644 index 0000000..f5c5b9a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EUTRANCellIdentifier.h" + +int +EUTRANCellIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EUTRANCellIdentifier_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EUTRANCellIdentifier_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANCellIdentifier = { + "EUTRANCellIdentifier", + "EUTRANCellIdentifier", + &asn_OP_BIT_STRING, + asn_DEF_EUTRANCellIdentifier_tags_1, + sizeof(asn_DEF_EUTRANCellIdentifier_tags_1) + /sizeof(asn_DEF_EUTRANCellIdentifier_tags_1[0]), /* 1 */ + asn_DEF_EUTRANCellIdentifier_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRANCellIdentifier_tags_1) + /sizeof(asn_DEF_EUTRANCellIdentifier_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EUTRANCellIdentifier_constr_1, EUTRANCellIdentifier_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.h new file mode 100644 index 0000000..f6d226a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANCellIdentifier.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EUTRANCellIdentifier_H_ +#define _EUTRANCellIdentifier_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRANCellIdentifier */ +typedef BIT_STRING_t EUTRANCellIdentifier_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EUTRANCellIdentifier_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EUTRANCellIdentifier; +asn_struct_free_f EUTRANCellIdentifier_free; +asn_struct_print_f EUTRANCellIdentifier_print; +asn_constr_check_f EUTRANCellIdentifier_constraint; +ber_type_decoder_f EUTRANCellIdentifier_decode_ber; +der_type_encoder_f EUTRANCellIdentifier_encode_der; +xer_type_decoder_f EUTRANCellIdentifier_decode_xer; +xer_type_encoder_f EUTRANCellIdentifier_encode_xer; +per_type_decoder_f EUTRANCellIdentifier_decode_uper; +per_type_encoder_f EUTRANCellIdentifier_encode_uper; +per_type_decoder_f EUTRANCellIdentifier_decode_aper; +per_type_encoder_f EUTRANCellIdentifier_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRANCellIdentifier_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c new file mode 100644 index 0000000..7fd053f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EUTRANRCellResourceCoordinationRequest.h" + +static asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P105, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRANRCellResourceCoordinationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationRequest_specs_1 = { + sizeof(struct EUTRANRCellResourceCoordinationRequest), + offsetof(struct EUTRANRCellResourceCoordinationRequest, _asn_ctx), + asn_MAP_EUTRANRCellResourceCoordinationRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationRequest = { + "EUTRANRCellResourceCoordinationRequest", + "EUTRANRCellResourceCoordinationRequest", + &asn_OP_SEQUENCE, + asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1, + sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1[0]), /* 1 */ + asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EUTRANRCellResourceCoordinationRequest_1, + 1, /* Elements count */ + &asn_SPC_EUTRANRCellResourceCoordinationRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h new file mode 100644 index 0000000..ea573a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EUTRANRCellResourceCoordinationRequest_H_ +#define _EUTRANRCellResourceCoordinationRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRANRCellResourceCoordinationRequest */ +typedef struct EUTRANRCellResourceCoordinationRequest { + ProtocolIE_Container_119P105_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRANRCellResourceCoordinationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRANRCellResourceCoordinationRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c new file mode 100644 index 0000000..e25fab7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EUTRANRCellResourceCoordinationResponse.h" + +static asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P108, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRANRCellResourceCoordinationResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationResponse_specs_1 = { + sizeof(struct EUTRANRCellResourceCoordinationResponse), + offsetof(struct EUTRANRCellResourceCoordinationResponse, _asn_ctx), + asn_MAP_EUTRANRCellResourceCoordinationResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationResponse = { + "EUTRANRCellResourceCoordinationResponse", + "EUTRANRCellResourceCoordinationResponse", + &asn_OP_SEQUENCE, + asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1, + sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1[0]), /* 1 */ + asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EUTRANRCellResourceCoordinationResponse_1, + 1, /* Elements count */ + &asn_SPC_EUTRANRCellResourceCoordinationResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h new file mode 100644 index 0000000..a48d78f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANRCellResourceCoordinationResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EUTRANRCellResourceCoordinationResponse_H_ +#define _EUTRANRCellResourceCoordinationResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRANRCellResourceCoordinationResponse */ +typedef struct EUTRANRCellResourceCoordinationResponse { + ProtocolIE_Container_119P108_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRANRCellResourceCoordinationResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRANRCellResourceCoordinationResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.c new file mode 100644 index 0000000..1022471 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EUTRANTraceID.h" + +int +EUTRANTraceID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EUTRANTraceID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EUTRANTraceID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANTraceID = { + "EUTRANTraceID", + "EUTRANTraceID", + &asn_OP_OCTET_STRING, + asn_DEF_EUTRANTraceID_tags_1, + sizeof(asn_DEF_EUTRANTraceID_tags_1) + /sizeof(asn_DEF_EUTRANTraceID_tags_1[0]), /* 1 */ + asn_DEF_EUTRANTraceID_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRANTraceID_tags_1) + /sizeof(asn_DEF_EUTRANTraceID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EUTRANTraceID_constr_1, EUTRANTraceID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.h new file mode 100644 index 0000000..c012c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EUTRANTraceID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EUTRANTraceID_H_ +#define _EUTRANTraceID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRANTraceID */ +typedef OCTET_STRING_t EUTRANTraceID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EUTRANTraceID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EUTRANTraceID; +asn_struct_free_f EUTRANTraceID_free; +asn_struct_print_f EUTRANTraceID_print; +asn_constr_check_f EUTRANTraceID_constraint; +ber_type_decoder_f EUTRANTraceID_decode_ber; +der_type_encoder_f EUTRANTraceID_encode_der; +xer_type_decoder_f EUTRANTraceID_decode_xer; +xer_type_encoder_f EUTRANTraceID_encode_xer; +per_type_decoder_f EUTRANTraceID_decode_uper; +per_type_encoder_f EUTRANTraceID_encode_uper; +per_type_decoder_f EUTRANTraceID_decode_aper; +per_type_encoder_f EUTRANTraceID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRANTraceID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.c new file mode 100644 index 0000000..4cf4c6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EncryptionAlgorithms.h" + +int +EncryptionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EncryptionAlgorithms_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 16, 16 } /* (SIZE(16..16,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EncryptionAlgorithms_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EncryptionAlgorithms = { + "EncryptionAlgorithms", + "EncryptionAlgorithms", + &asn_OP_BIT_STRING, + asn_DEF_EncryptionAlgorithms_tags_1, + sizeof(asn_DEF_EncryptionAlgorithms_tags_1) + /sizeof(asn_DEF_EncryptionAlgorithms_tags_1[0]), /* 1 */ + asn_DEF_EncryptionAlgorithms_tags_1, /* Same as above */ + sizeof(asn_DEF_EncryptionAlgorithms_tags_1) + /sizeof(asn_DEF_EncryptionAlgorithms_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EncryptionAlgorithms_constr_1, EncryptionAlgorithms_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.h new file mode 100644 index 0000000..ffe8f7d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EncryptionAlgorithms.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EncryptionAlgorithms_H_ +#define _EncryptionAlgorithms_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EncryptionAlgorithms */ +typedef BIT_STRING_t EncryptionAlgorithms_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EncryptionAlgorithms_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EncryptionAlgorithms; +asn_struct_free_f EncryptionAlgorithms_free; +asn_struct_print_f EncryptionAlgorithms_print; +asn_constr_check_f EncryptionAlgorithms_constraint; +ber_type_decoder_f EncryptionAlgorithms_decode_ber; +der_type_encoder_f EncryptionAlgorithms_encode_der; +xer_type_decoder_f EncryptionAlgorithms_decode_xer; +xer_type_encoder_f EncryptionAlgorithms_encode_xer; +per_type_decoder_f EncryptionAlgorithms_decode_uper; +per_type_encoder_f EncryptionAlgorithms_encode_uper; +per_type_decoder_f EncryptionAlgorithms_decode_aper; +per_type_encoder_f EncryptionAlgorithms_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EncryptionAlgorithms_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.c new file mode 100644 index 0000000..9911585 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.c @@ -0,0 +1,138 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EnhancedRNTP.h" + +#include "EnhancedRNTPStartTime.h" +#include "ProtocolExtensionContainer.h" +static int +memb_enhancedRNTPBitmap_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 12 && size <= 8800)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_enhancedRNTPBitmap_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 14, 14, 12, 8800 } /* (SIZE(12..8800,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_EnhancedRNTP_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTP, enhancedRNTPBitmap), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_enhancedRNTPBitmap_constr_2, memb_enhancedRNTPBitmap_constraint_1 }, + 0, 0, /* No default value */ + "enhancedRNTPBitmap" + }, + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTP, rNTP_High_Power_Threshold), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNTP_Threshold, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rNTP-High-Power-Threshold" + }, + { ATF_POINTER, 2, offsetof(struct EnhancedRNTP, enhancedRNTPStartTime), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EnhancedRNTPStartTime, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enhancedRNTPStartTime" + }, + { ATF_POINTER, 1, offsetof(struct EnhancedRNTP, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P135, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_EnhancedRNTP_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_EnhancedRNTP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EnhancedRNTP_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enhancedRNTPBitmap */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rNTP-High-Power-Threshold */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* enhancedRNTPStartTime */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTP_specs_1 = { + sizeof(struct EnhancedRNTP), + offsetof(struct EnhancedRNTP, _asn_ctx), + asn_MAP_EnhancedRNTP_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_EnhancedRNTP_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EnhancedRNTP = { + "EnhancedRNTP", + "EnhancedRNTP", + &asn_OP_SEQUENCE, + asn_DEF_EnhancedRNTP_tags_1, + sizeof(asn_DEF_EnhancedRNTP_tags_1) + /sizeof(asn_DEF_EnhancedRNTP_tags_1[0]), /* 1 */ + asn_DEF_EnhancedRNTP_tags_1, /* Same as above */ + sizeof(asn_DEF_EnhancedRNTP_tags_1) + /sizeof(asn_DEF_EnhancedRNTP_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EnhancedRNTP_1, + 4, /* Elements count */ + &asn_SPC_EnhancedRNTP_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.h new file mode 100644 index 0000000..3380cc8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTP.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EnhancedRNTP_H_ +#define _EnhancedRNTP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "RNTP-Threshold.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct EnhancedRNTPStartTime; +struct ProtocolExtensionContainer; + +/* EnhancedRNTP */ +typedef struct EnhancedRNTP { + BIT_STRING_t enhancedRNTPBitmap; + RNTP_Threshold_t rNTP_High_Power_Threshold; + struct EnhancedRNTPStartTime *enhancedRNTPStartTime; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EnhancedRNTP_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EnhancedRNTP; +extern asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTP_specs_1; +extern asn_TYPE_member_t asn_MBR_EnhancedRNTP_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _EnhancedRNTP_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.c new file mode 100644 index 0000000..c6b0602 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.c @@ -0,0 +1,151 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EnhancedRNTPStartTime.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_startSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_startSubframeNumber_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 9)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_startSFN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 0, 1023 } /* (0..1023,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_startSubframeNumber_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 9 } /* (0..9,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_EnhancedRNTPStartTime_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTPStartTime, startSFN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_startSFN_constr_2, memb_startSFN_constraint_1 }, + 0, 0, /* No default value */ + "startSFN" + }, + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTPStartTime, startSubframeNumber), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_startSubframeNumber_constr_3, memb_startSubframeNumber_constraint_1 }, + 0, 0, /* No default value */ + "startSubframeNumber" + }, + { ATF_POINTER, 1, offsetof(struct EnhancedRNTPStartTime, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P136, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_EnhancedRNTPStartTime_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_EnhancedRNTPStartTime_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EnhancedRNTPStartTime_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startSFN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* startSubframeNumber */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTPStartTime_specs_1 = { + sizeof(struct EnhancedRNTPStartTime), + offsetof(struct EnhancedRNTPStartTime, _asn_ctx), + asn_MAP_EnhancedRNTPStartTime_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_EnhancedRNTPStartTime_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EnhancedRNTPStartTime = { + "EnhancedRNTPStartTime", + "EnhancedRNTPStartTime", + &asn_OP_SEQUENCE, + asn_DEF_EnhancedRNTPStartTime_tags_1, + sizeof(asn_DEF_EnhancedRNTPStartTime_tags_1) + /sizeof(asn_DEF_EnhancedRNTPStartTime_tags_1[0]), /* 1 */ + asn_DEF_EnhancedRNTPStartTime_tags_1, /* Same as above */ + sizeof(asn_DEF_EnhancedRNTPStartTime_tags_1) + /sizeof(asn_DEF_EnhancedRNTPStartTime_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EnhancedRNTPStartTime_1, + 3, /* Elements count */ + &asn_SPC_EnhancedRNTPStartTime_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.h new file mode 100644 index 0000000..ee8d6b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EnhancedRNTPStartTime.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EnhancedRNTPStartTime_H_ +#define _EnhancedRNTPStartTime_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* EnhancedRNTPStartTime */ +typedef struct EnhancedRNTPStartTime { + long startSFN; + long startSubframeNumber; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EnhancedRNTPStartTime_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EnhancedRNTPStartTime; +extern asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTPStartTime_specs_1; +extern asn_TYPE_member_t asn_MBR_EnhancedRNTPStartTime_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _EnhancedRNTPStartTime_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..8c69bf3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P21, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..71ce008 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ErrorIndication.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_119P21_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.c new file mode 100644 index 0000000..d821e23 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "EventType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EventType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_EventType_value2enum_1[] = { + { 0, 22, "change-of-serving-cell" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_EventType_enum2value_1[] = { + 0 /* change-of-serving-cell(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_EventType_specs_1 = { + asn_MAP_EventType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_EventType_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_EventType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EventType = { + "EventType", + "EventType", + &asn_OP_NativeEnumerated, + asn_DEF_EventType_tags_1, + sizeof(asn_DEF_EventType_tags_1) + /sizeof(asn_DEF_EventType_tags_1[0]), /* 1 */ + asn_DEF_EventType_tags_1, /* Same as above */ + sizeof(asn_DEF_EventType_tags_1) + /sizeof(asn_DEF_EventType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EventType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_EventType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.h new file mode 100644 index 0000000..565c2f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/EventType.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _EventType_H_ +#define _EventType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum EventType { + EventType_change_of_serving_cell = 0 + /* + * Enumeration is extensible + */ +} e_EventType; + +/* EventType */ +typedef long EventType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EventType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EventType; +extern const asn_INTEGER_specifics_t asn_SPC_EventType_specs_1; +asn_struct_free_f EventType_free; +asn_struct_print_f EventType_print; +asn_constr_check_f EventType_constraint; +ber_type_decoder_f EventType_decode_ber; +der_type_encoder_f EventType_encode_der; +xer_type_decoder_f EventType_decode_xer; +xer_type_encoder_f EventType_encode_xer; +per_type_decoder_f EventType_decode_uper; +per_type_encoder_f EventType_encode_uper; +per_type_decoder_f EventType_decode_aper; +per_type_encoder_f EventType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EventType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.c new file mode 100644 index 0000000..be1d754 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExpectedActivityPeriod.h" + +int +ExpectedActivityPeriod_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if(((value >= 1 && value <= 30) || (value == 40) || (value == 50) || (value == 60) || (value == 80) || (value == 100) || (value == 120) || (value == 150) || (value >= 180 && value <= 181))) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ExpectedActivityPeriod_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 181 } /* (1..181,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ExpectedActivityPeriod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedActivityPeriod = { + "ExpectedActivityPeriod", + "ExpectedActivityPeriod", + &asn_OP_NativeInteger, + asn_DEF_ExpectedActivityPeriod_tags_1, + sizeof(asn_DEF_ExpectedActivityPeriod_tags_1) + /sizeof(asn_DEF_ExpectedActivityPeriod_tags_1[0]), /* 1 */ + asn_DEF_ExpectedActivityPeriod_tags_1, /* Same as above */ + sizeof(asn_DEF_ExpectedActivityPeriod_tags_1) + /sizeof(asn_DEF_ExpectedActivityPeriod_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ExpectedActivityPeriod_constr_1, ExpectedActivityPeriod_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.h new file mode 100644 index 0000000..b13249f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedActivityPeriod.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExpectedActivityPeriod_H_ +#define _ExpectedActivityPeriod_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ExpectedActivityPeriod */ +typedef long ExpectedActivityPeriod_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ExpectedActivityPeriod_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ExpectedActivityPeriod; +asn_struct_free_f ExpectedActivityPeriod_free; +asn_struct_print_f ExpectedActivityPeriod_print; +asn_constr_check_f ExpectedActivityPeriod_constraint; +ber_type_decoder_f ExpectedActivityPeriod_decode_ber; +der_type_encoder_f ExpectedActivityPeriod_encode_der; +xer_type_decoder_f ExpectedActivityPeriod_decode_xer; +xer_type_encoder_f ExpectedActivityPeriod_encode_xer; +per_type_decoder_f ExpectedActivityPeriod_decode_uper; +per_type_encoder_f ExpectedActivityPeriod_encode_uper; +per_type_decoder_f ExpectedActivityPeriod_decode_aper; +per_type_encoder_f ExpectedActivityPeriod_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExpectedActivityPeriod_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.c new file mode 100644 index 0000000..c66bc97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.c @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExpectedHOInterval.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ExpectedHOInterval_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ExpectedHOInterval_value2enum_1[] = { + { 0, 5, "sec15" }, + { 1, 5, "sec30" }, + { 2, 5, "sec60" }, + { 3, 5, "sec90" }, + { 4, 6, "sec120" }, + { 5, 6, "sec180" }, + { 6, 9, "long-time" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ExpectedHOInterval_enum2value_1[] = { + 6, /* long-time(6) */ + 4, /* sec120(4) */ + 0, /* sec15(0) */ + 5, /* sec180(5) */ + 1, /* sec30(1) */ + 2, /* sec60(2) */ + 3 /* sec90(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ExpectedHOInterval_specs_1 = { + asn_MAP_ExpectedHOInterval_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ExpectedHOInterval_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ExpectedHOInterval_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedHOInterval = { + "ExpectedHOInterval", + "ExpectedHOInterval", + &asn_OP_NativeEnumerated, + asn_DEF_ExpectedHOInterval_tags_1, + sizeof(asn_DEF_ExpectedHOInterval_tags_1) + /sizeof(asn_DEF_ExpectedHOInterval_tags_1[0]), /* 1 */ + asn_DEF_ExpectedHOInterval_tags_1, /* Same as above */ + sizeof(asn_DEF_ExpectedHOInterval_tags_1) + /sizeof(asn_DEF_ExpectedHOInterval_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ExpectedHOInterval_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ExpectedHOInterval_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.h new file mode 100644 index 0000000..b02d8cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedHOInterval.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExpectedHOInterval_H_ +#define _ExpectedHOInterval_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ExpectedHOInterval { + ExpectedHOInterval_sec15 = 0, + ExpectedHOInterval_sec30 = 1, + ExpectedHOInterval_sec60 = 2, + ExpectedHOInterval_sec90 = 3, + ExpectedHOInterval_sec120 = 4, + ExpectedHOInterval_sec180 = 5, + ExpectedHOInterval_long_time = 6 + /* + * Enumeration is extensible + */ +} e_ExpectedHOInterval; + +/* ExpectedHOInterval */ +typedef long ExpectedHOInterval_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ExpectedHOInterval_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ExpectedHOInterval; +extern const asn_INTEGER_specifics_t asn_SPC_ExpectedHOInterval_specs_1; +asn_struct_free_f ExpectedHOInterval_free; +asn_struct_print_f ExpectedHOInterval_print; +asn_constr_check_f ExpectedHOInterval_constraint; +ber_type_decoder_f ExpectedHOInterval_decode_ber; +der_type_encoder_f ExpectedHOInterval_encode_der; +xer_type_decoder_f ExpectedHOInterval_decode_xer; +xer_type_encoder_f ExpectedHOInterval_encode_xer; +per_type_decoder_f ExpectedHOInterval_decode_uper; +per_type_encoder_f ExpectedHOInterval_encode_uper; +per_type_decoder_f ExpectedHOInterval_decode_aper; +per_type_encoder_f ExpectedHOInterval_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExpectedHOInterval_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.c new file mode 100644 index 0000000..9bc7391 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExpectedIdlePeriod.h" + +int +ExpectedIdlePeriod_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if(((value >= 1 && value <= 30) || (value == 40) || (value == 50) || (value == 60) || (value == 80) || (value == 100) || (value == 120) || (value == 150) || (value >= 180 && value <= 181))) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ExpectedIdlePeriod_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 181 } /* (1..181,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ExpectedIdlePeriod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedIdlePeriod = { + "ExpectedIdlePeriod", + "ExpectedIdlePeriod", + &asn_OP_NativeInteger, + asn_DEF_ExpectedIdlePeriod_tags_1, + sizeof(asn_DEF_ExpectedIdlePeriod_tags_1) + /sizeof(asn_DEF_ExpectedIdlePeriod_tags_1[0]), /* 1 */ + asn_DEF_ExpectedIdlePeriod_tags_1, /* Same as above */ + sizeof(asn_DEF_ExpectedIdlePeriod_tags_1) + /sizeof(asn_DEF_ExpectedIdlePeriod_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ExpectedIdlePeriod_constr_1, ExpectedIdlePeriod_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.h new file mode 100644 index 0000000..227d4e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedIdlePeriod.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExpectedIdlePeriod_H_ +#define _ExpectedIdlePeriod_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ExpectedIdlePeriod */ +typedef long ExpectedIdlePeriod_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ExpectedIdlePeriod_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ExpectedIdlePeriod; +asn_struct_free_f ExpectedIdlePeriod_free; +asn_struct_print_f ExpectedIdlePeriod_print; +asn_constr_check_f ExpectedIdlePeriod_constraint; +ber_type_decoder_f ExpectedIdlePeriod_decode_ber; +der_type_encoder_f ExpectedIdlePeriod_encode_der; +xer_type_decoder_f ExpectedIdlePeriod_decode_xer; +xer_type_encoder_f ExpectedIdlePeriod_encode_xer; +per_type_decoder_f ExpectedIdlePeriod_decode_uper; +per_type_encoder_f ExpectedIdlePeriod_encode_uper; +per_type_decoder_f ExpectedIdlePeriod_decode_aper; +per_type_encoder_f ExpectedIdlePeriod_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExpectedIdlePeriod_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c new file mode 100644 index 0000000..e8f172d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExpectedUEActivityBehaviour.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ExpectedUEActivityBehaviour_1[] = { + { ATF_POINTER, 4, offsetof(struct ExpectedUEActivityBehaviour, expectedActivityPeriod), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ExpectedActivityPeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "expectedActivityPeriod" + }, + { ATF_POINTER, 3, offsetof(struct ExpectedUEActivityBehaviour, expectedIdlePeriod), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ExpectedIdlePeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "expectedIdlePeriod" + }, + { ATF_POINTER, 2, offsetof(struct ExpectedUEActivityBehaviour, sourceofUEActivityBehaviourInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SourceOfUEActivityBehaviourInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sourceofUEActivityBehaviourInformation" + }, + { ATF_POINTER, 1, offsetof(struct ExpectedUEActivityBehaviour, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P143, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ExpectedUEActivityBehaviour_oms_1[] = { 0, 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_ExpectedUEActivityBehaviour_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExpectedUEActivityBehaviour_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedActivityPeriod */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* expectedIdlePeriod */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sourceofUEActivityBehaviourInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEActivityBehaviour_specs_1 = { + sizeof(struct ExpectedUEActivityBehaviour), + offsetof(struct ExpectedUEActivityBehaviour, _asn_ctx), + asn_MAP_ExpectedUEActivityBehaviour_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ExpectedUEActivityBehaviour_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedUEActivityBehaviour = { + "ExpectedUEActivityBehaviour", + "ExpectedUEActivityBehaviour", + &asn_OP_SEQUENCE, + asn_DEF_ExpectedUEActivityBehaviour_tags_1, + sizeof(asn_DEF_ExpectedUEActivityBehaviour_tags_1) + /sizeof(asn_DEF_ExpectedUEActivityBehaviour_tags_1[0]), /* 1 */ + asn_DEF_ExpectedUEActivityBehaviour_tags_1, /* Same as above */ + sizeof(asn_DEF_ExpectedUEActivityBehaviour_tags_1) + /sizeof(asn_DEF_ExpectedUEActivityBehaviour_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExpectedUEActivityBehaviour_1, + 4, /* Elements count */ + &asn_SPC_ExpectedUEActivityBehaviour_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h new file mode 100644 index 0000000..aeb46f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEActivityBehaviour.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExpectedUEActivityBehaviour_H_ +#define _ExpectedUEActivityBehaviour_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ExpectedActivityPeriod.h" +#include "ExpectedIdlePeriod.h" +#include "SourceOfUEActivityBehaviourInformation.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ExpectedUEActivityBehaviour */ +typedef struct ExpectedUEActivityBehaviour { + ExpectedActivityPeriod_t *expectedActivityPeriod; /* OPTIONAL */ + ExpectedIdlePeriod_t *expectedIdlePeriod; /* OPTIONAL */ + SourceOfUEActivityBehaviourInformation_t *sourceofUEActivityBehaviourInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExpectedUEActivityBehaviour_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ExpectedUEActivityBehaviour; +extern asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEActivityBehaviour_specs_1; +extern asn_TYPE_member_t asn_MBR_ExpectedUEActivityBehaviour_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExpectedUEActivityBehaviour_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.c new file mode 100644 index 0000000..30d834e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExpectedUEBehaviour.h" + +#include "ExpectedUEActivityBehaviour.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ExpectedUEBehaviour_1[] = { + { ATF_POINTER, 3, offsetof(struct ExpectedUEBehaviour, expectedActivity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ExpectedUEActivityBehaviour, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "expectedActivity" + }, + { ATF_POINTER, 2, offsetof(struct ExpectedUEBehaviour, expectedHOInterval), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ExpectedHOInterval, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "expectedHOInterval" + }, + { ATF_POINTER, 1, offsetof(struct ExpectedUEBehaviour, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P142, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ExpectedUEBehaviour_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ExpectedUEBehaviour_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExpectedUEBehaviour_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedActivity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* expectedHOInterval */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEBehaviour_specs_1 = { + sizeof(struct ExpectedUEBehaviour), + offsetof(struct ExpectedUEBehaviour, _asn_ctx), + asn_MAP_ExpectedUEBehaviour_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ExpectedUEBehaviour_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedUEBehaviour = { + "ExpectedUEBehaviour", + "ExpectedUEBehaviour", + &asn_OP_SEQUENCE, + asn_DEF_ExpectedUEBehaviour_tags_1, + sizeof(asn_DEF_ExpectedUEBehaviour_tags_1) + /sizeof(asn_DEF_ExpectedUEBehaviour_tags_1[0]), /* 1 */ + asn_DEF_ExpectedUEBehaviour_tags_1, /* Same as above */ + sizeof(asn_DEF_ExpectedUEBehaviour_tags_1) + /sizeof(asn_DEF_ExpectedUEBehaviour_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExpectedUEBehaviour_1, + 3, /* Elements count */ + &asn_SPC_ExpectedUEBehaviour_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.h new file mode 100644 index 0000000..62a41e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExpectedUEBehaviour.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExpectedUEBehaviour_H_ +#define _ExpectedUEBehaviour_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ExpectedHOInterval.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ExpectedUEActivityBehaviour; +struct ProtocolExtensionContainer; + +/* ExpectedUEBehaviour */ +typedef struct ExpectedUEBehaviour { + struct ExpectedUEActivityBehaviour *expectedActivity; /* OPTIONAL */ + ExpectedHOInterval_t *expectedHOInterval; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExpectedUEBehaviour_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ExpectedUEBehaviour; +extern asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEBehaviour_specs_1; +extern asn_TYPE_member_t asn_MBR_ExpectedUEBehaviour_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExpectedUEBehaviour_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.c new file mode 100644 index 0000000..363767c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExtendedBitRate.h" + +int +ExtendedBitRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 10000000001 && value <= 4000000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ExtendedBitRate_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 42, -1, 10000000001, 4000000000000 } /* (10000000001..4000000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ExtendedBitRate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ExtendedBitRate = { + "ExtendedBitRate", + "ExtendedBitRate", + &asn_OP_INTEGER, + asn_DEF_ExtendedBitRate_tags_1, + sizeof(asn_DEF_ExtendedBitRate_tags_1) + /sizeof(asn_DEF_ExtendedBitRate_tags_1[0]), /* 1 */ + asn_DEF_ExtendedBitRate_tags_1, /* Same as above */ + sizeof(asn_DEF_ExtendedBitRate_tags_1) + /sizeof(asn_DEF_ExtendedBitRate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ExtendedBitRate_constr_1, ExtendedBitRate_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.h new file mode 100644 index 0000000..8f5fe41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedBitRate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExtendedBitRate_H_ +#define _ExtendedBitRate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ExtendedBitRate */ +typedef INTEGER_t ExtendedBitRate_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ExtendedBitRate_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ExtendedBitRate; +asn_struct_free_f ExtendedBitRate_free; +asn_struct_print_f ExtendedBitRate_print; +asn_constr_check_f ExtendedBitRate_constraint; +ber_type_decoder_f ExtendedBitRate_decode_ber; +der_type_encoder_f ExtendedBitRate_encode_der; +xer_type_decoder_f ExtendedBitRate_decode_xer; +xer_type_encoder_f ExtendedBitRate_encode_xer; +per_type_decoder_f ExtendedBitRate_decode_uper; +per_type_encoder_f ExtendedBitRate_encode_uper; +per_type_decoder_f ExtendedBitRate_decode_aper; +per_type_encoder_f ExtendedBitRate_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExtendedBitRate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c new file mode 100644 index 0000000..e014e5d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.c @@ -0,0 +1,127 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ExtendedULInterferenceOverloadInfo.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_associatedSubframes_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 5)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_associatedSubframes_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 5, 5 } /* (SIZE(5..5)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ExtendedULInterferenceOverloadInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ExtendedULInterferenceOverloadInfo, associatedSubframes), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_associatedSubframes_constr_2, memb_associatedSubframes_constraint_1 }, + 0, 0, /* No default value */ + "associatedSubframes" + }, + { ATF_NOFLAGS, 0, offsetof(struct ExtendedULInterferenceOverloadInfo, extended_ul_InterferenceOverloadIndication), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_InterferenceOverloadIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "extended-ul-InterferenceOverloadIndication" + }, + { ATF_POINTER, 1, offsetof(struct ExtendedULInterferenceOverloadInfo, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P144, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ExtendedULInterferenceOverloadInfo_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExtendedULInterferenceOverloadInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* associatedSubframes */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* extended-ul-InterferenceOverloadIndication */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExtendedULInterferenceOverloadInfo_specs_1 = { + sizeof(struct ExtendedULInterferenceOverloadInfo), + offsetof(struct ExtendedULInterferenceOverloadInfo, _asn_ctx), + asn_MAP_ExtendedULInterferenceOverloadInfo_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ExtendedULInterferenceOverloadInfo_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExtendedULInterferenceOverloadInfo = { + "ExtendedULInterferenceOverloadInfo", + "ExtendedULInterferenceOverloadInfo", + &asn_OP_SEQUENCE, + asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1, + sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1) + /sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1[0]), /* 1 */ + asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1) + /sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExtendedULInterferenceOverloadInfo_1, + 3, /* Elements count */ + &asn_SPC_ExtendedULInterferenceOverloadInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h new file mode 100644 index 0000000..5d20778 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ExtendedULInterferenceOverloadInfo.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ExtendedULInterferenceOverloadInfo_H_ +#define _ExtendedULInterferenceOverloadInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "UL-InterferenceOverloadIndication.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ExtendedULInterferenceOverloadInfo */ +typedef struct ExtendedULInterferenceOverloadInfo { + BIT_STRING_t associatedSubframes; + UL_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExtendedULInterferenceOverloadInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ExtendedULInterferenceOverloadInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_ExtendedULInterferenceOverloadInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_ExtendedULInterferenceOverloadInfo_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExtendedULInterferenceOverloadInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.c new file mode 100644 index 0000000..c1e63d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FDD-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_FDD_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info, uL_EARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-EARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info, dL_EARFCN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-EARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info, uL_Transmission_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Transmission_Bandwidth, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Transmission-Bandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info, dL_Transmission_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Transmission_Bandwidth, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Transmission-Bandwidth" + }, + { ATF_POINTER, 1, offsetof(struct FDD_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P145, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_FDD_Info_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_FDD_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-EARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-EARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Transmission-Bandwidth */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Transmission-Bandwidth */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_Info_specs_1 = { + sizeof(struct FDD_Info), + offsetof(struct FDD_Info, _asn_ctx), + asn_MAP_FDD_Info_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_FDD_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_Info = { + "FDD-Info", + "FDD-Info", + &asn_OP_SEQUENCE, + asn_DEF_FDD_Info_tags_1, + sizeof(asn_DEF_FDD_Info_tags_1) + /sizeof(asn_DEF_FDD_Info_tags_1[0]), /* 1 */ + asn_DEF_FDD_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_FDD_Info_tags_1) + /sizeof(asn_DEF_FDD_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_Info_1, + 5, /* Elements count */ + &asn_SPC_FDD_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.h new file mode 100644 index 0000000..7da4be8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-Info.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FDD_Info_H_ +#define _FDD_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "EARFCN.h" +#include "Transmission-Bandwidth.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* FDD-Info */ +typedef struct FDD_Info { + EARFCN_t uL_EARFCN; + EARFCN_t dL_EARFCN; + Transmission_Bandwidth_t uL_Transmission_Bandwidth; + Transmission_Bandwidth_t dL_Transmission_Bandwidth; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FDD_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_FDD_Info_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FDD_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c new file mode 100644 index 0000000..36a4504 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FDD-InfoNeighbourServedNRCell-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_FDD_InfoNeighbourServedNRCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoNeighbourServedNRCell_Information, ul_NRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-NRFreqInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoNeighbourServedNRCell_Information, dl_NRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dl-NRFreqInfo" + }, + { ATF_POINTER, 1, offsetof(struct FDD_InfoNeighbourServedNRCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P94, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_FDD_InfoNeighbourServedNRCell_Information_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_InfoNeighbourServedNRCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-NRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-NRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoNeighbourServedNRCell_Information_specs_1 = { + sizeof(struct FDD_InfoNeighbourServedNRCell_Information), + offsetof(struct FDD_InfoNeighbourServedNRCell_Information, _asn_ctx), + asn_MAP_FDD_InfoNeighbourServedNRCell_Information_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FDD_InfoNeighbourServedNRCell_Information_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information = { + "FDD-InfoNeighbourServedNRCell-Information", + "FDD-InfoNeighbourServedNRCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1, + sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1) + /sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */ + asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1) + /sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_InfoNeighbourServedNRCell_Information_1, + 3, /* Elements count */ + &asn_SPC_FDD_InfoNeighbourServedNRCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h new file mode 100644 index 0000000..10d1be7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoNeighbourServedNRCell-Information.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FDD_InfoNeighbourServedNRCell_Information_H_ +#define _FDD_InfoNeighbourServedNRCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRFreqInfo.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* FDD-InfoNeighbourServedNRCell-Information */ +typedef struct FDD_InfoNeighbourServedNRCell_Information { + NRFreqInfo_t ul_NRFreqInfo; + NRFreqInfo_t dl_NRFreqInfo; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_InfoNeighbourServedNRCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoNeighbourServedNRCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_FDD_InfoNeighbourServedNRCell_Information_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FDD_InfoNeighbourServedNRCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c new file mode 100644 index 0000000..b2a3158 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FDD-InfoServedNRCell-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_FDD_InfoServedNRCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information, ul_NRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-NRFreqInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information, dl_NRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dl-NRFreqInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information, ul_NR_TxBW), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_TxBW, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-NR-TxBW" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information, dl_NR_TxBW), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_TxBW, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dl-NR-TxBW" + }, + { ATF_POINTER, 1, offsetof(struct FDD_InfoServedNRCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P93, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_FDD_InfoServedNRCell_Information_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_FDD_InfoServedNRCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_InfoServedNRCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-NRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-NRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-NR-TxBW */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dl-NR-TxBW */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoServedNRCell_Information_specs_1 = { + sizeof(struct FDD_InfoServedNRCell_Information), + offsetof(struct FDD_InfoServedNRCell_Information, _asn_ctx), + asn_MAP_FDD_InfoServedNRCell_Information_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_FDD_InfoServedNRCell_Information_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_InfoServedNRCell_Information = { + "FDD-InfoServedNRCell-Information", + "FDD-InfoServedNRCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_FDD_InfoServedNRCell_Information_tags_1, + sizeof(asn_DEF_FDD_InfoServedNRCell_Information_tags_1) + /sizeof(asn_DEF_FDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */ + asn_DEF_FDD_InfoServedNRCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_FDD_InfoServedNRCell_Information_tags_1) + /sizeof(asn_DEF_FDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_InfoServedNRCell_Information_1, + 5, /* Elements count */ + &asn_SPC_FDD_InfoServedNRCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h new file mode 100644 index 0000000..4cf79d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FDD-InfoServedNRCell-Information.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FDD_InfoServedNRCell_Information_H_ +#define _FDD_InfoServedNRCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRFreqInfo.h" +#include "NR-TxBW.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* FDD-InfoServedNRCell-Information */ +typedef struct FDD_InfoServedNRCell_Information { + NRFreqInfo_t ul_NRFreqInfo; + NRFreqInfo_t dl_NRFreqInfo; + NR_TxBW_t ul_NR_TxBW; + NR_TxBW_t dl_NR_TxBW; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_InfoServedNRCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FDD_InfoServedNRCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoServedNRCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_FDD_InfoServedNRCell_Information_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FDD_InfoServedNRCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.c new file mode 100644 index 0000000..1aab4b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FiveGS-TAC.h" + +int +FiveGS_TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_FiveGS_TAC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_FiveGS_TAC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FiveGS_TAC = { + "FiveGS-TAC", + "FiveGS-TAC", + &asn_OP_OCTET_STRING, + asn_DEF_FiveGS_TAC_tags_1, + sizeof(asn_DEF_FiveGS_TAC_tags_1) + /sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */ + asn_DEF_FiveGS_TAC_tags_1, /* Same as above */ + sizeof(asn_DEF_FiveGS_TAC_tags_1) + /sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_FiveGS_TAC_constr_1, FiveGS_TAC_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.h new file mode 100644 index 0000000..4047798 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FiveGS-TAC.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FiveGS_TAC_H_ +#define _FiveGS_TAC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* FiveGS-TAC */ +typedef OCTET_STRING_t FiveGS_TAC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_FiveGS_TAC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_FiveGS_TAC; +asn_struct_free_f FiveGS_TAC_free; +asn_struct_print_f FiveGS_TAC_print; +asn_constr_check_f FiveGS_TAC_constraint; +ber_type_decoder_f FiveGS_TAC_decode_ber; +der_type_encoder_f FiveGS_TAC_encode_der; +xer_type_decoder_f FiveGS_TAC_decode_xer; +xer_type_encoder_f FiveGS_TAC_encode_xer; +per_type_decoder_f FiveGS_TAC_decode_uper; +per_type_encoder_f FiveGS_TAC_encode_uper; +per_type_decoder_f FiveGS_TAC_decode_aper; +per_type_encoder_f FiveGS_TAC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FiveGS_TAC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.c new file mode 100644 index 0000000..6daa5b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenInterRATs.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ForbiddenInterRATs_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ForbiddenInterRATs_value2enum_1[] = { + { 0, 3, "all" }, + { 1, 5, "geran" }, + { 2, 5, "utran" }, + { 3, 8, "cdma2000" }, + { 4, 13, "geranandutran" }, + { 5, 16, "cdma2000andutran" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ForbiddenInterRATs_enum2value_1[] = { + 0, /* all(0) */ + 3, /* cdma2000(3) */ + 5, /* cdma2000andutran(5) */ + 1, /* geran(1) */ + 4, /* geranandutran(4) */ + 2 /* utran(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ForbiddenInterRATs_specs_1 = { + asn_MAP_ForbiddenInterRATs_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ForbiddenInterRATs_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenInterRATs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenInterRATs = { + "ForbiddenInterRATs", + "ForbiddenInterRATs", + &asn_OP_NativeEnumerated, + asn_DEF_ForbiddenInterRATs_tags_1, + sizeof(asn_DEF_ForbiddenInterRATs_tags_1) + /sizeof(asn_DEF_ForbiddenInterRATs_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenInterRATs_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenInterRATs_tags_1) + /sizeof(asn_DEF_ForbiddenInterRATs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ForbiddenInterRATs_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ForbiddenInterRATs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.h new file mode 100644 index 0000000..de1572a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenInterRATs.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenInterRATs_H_ +#define _ForbiddenInterRATs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ForbiddenInterRATs { + ForbiddenInterRATs_all = 0, + ForbiddenInterRATs_geran = 1, + ForbiddenInterRATs_utran = 2, + ForbiddenInterRATs_cdma2000 = 3, + /* + * Enumeration is extensible + */ + ForbiddenInterRATs_geranandutran = 4, + ForbiddenInterRATs_cdma2000andutran = 5 +} e_ForbiddenInterRATs; + +/* ForbiddenInterRATs */ +typedef long ForbiddenInterRATs_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ForbiddenInterRATs_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenInterRATs; +extern const asn_INTEGER_specifics_t asn_SPC_ForbiddenInterRATs_specs_1; +asn_struct_free_f ForbiddenInterRATs_free; +asn_struct_print_f ForbiddenInterRATs_print; +asn_constr_check_f ForbiddenInterRATs_constraint; +ber_type_decoder_f ForbiddenInterRATs_decode_ber; +der_type_encoder_f ForbiddenInterRATs_encode_der; +xer_type_decoder_f ForbiddenInterRATs_decode_xer; +xer_type_encoder_f ForbiddenInterRATs_encode_xer; +per_type_decoder_f ForbiddenInterRATs_decode_uper; +per_type_encoder_f ForbiddenInterRATs_encode_uper; +per_type_decoder_f ForbiddenInterRATs_decode_aper; +per_type_encoder_f ForbiddenInterRATs_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenInterRATs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.c new file mode 100644 index 0000000..169e170 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenLACs.h" + +asn_per_constraints_t asn_PER_type_ForbiddenLACs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 12, 12, 1, 4096 } /* (SIZE(1..4096)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ForbiddenLACs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_LAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenLACs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ForbiddenLACs_specs_1 = { + sizeof(struct ForbiddenLACs), + offsetof(struct ForbiddenLACs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenLACs = { + "ForbiddenLACs", + "ForbiddenLACs", + &asn_OP_SEQUENCE_OF, + asn_DEF_ForbiddenLACs_tags_1, + sizeof(asn_DEF_ForbiddenLACs_tags_1) + /sizeof(asn_DEF_ForbiddenLACs_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenLACs_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenLACs_tags_1) + /sizeof(asn_DEF_ForbiddenLACs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ForbiddenLACs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ForbiddenLACs_1, + 1, /* Single element */ + &asn_SPC_ForbiddenLACs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.h new file mode 100644 index 0000000..f736fd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLACs.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenLACs_H_ +#define _ForbiddenLACs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "LAC.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ForbiddenLACs */ +typedef struct ForbiddenLACs { + A_SEQUENCE_OF(LAC_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenLACs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenLACs; +extern asn_SET_OF_specifics_t asn_SPC_ForbiddenLACs_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenLACs_1[1]; +extern asn_per_constraints_t asn_PER_type_ForbiddenLACs_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenLACs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.c new file mode 100644 index 0000000..d3c0d89 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenLAs-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ForbiddenLAs_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenLAs_Item, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenLAs_Item, forbiddenLACs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ForbiddenLACs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "forbiddenLACs" + }, + { ATF_POINTER, 1, offsetof(struct ForbiddenLAs_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P147, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ForbiddenLAs_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ForbiddenLAs_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ForbiddenLAs_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* forbiddenLACs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ForbiddenLAs_Item_specs_1 = { + sizeof(struct ForbiddenLAs_Item), + offsetof(struct ForbiddenLAs_Item, _asn_ctx), + asn_MAP_ForbiddenLAs_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ForbiddenLAs_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs_Item = { + "ForbiddenLAs-Item", + "ForbiddenLAs-Item", + &asn_OP_SEQUENCE, + asn_DEF_ForbiddenLAs_Item_tags_1, + sizeof(asn_DEF_ForbiddenLAs_Item_tags_1) + /sizeof(asn_DEF_ForbiddenLAs_Item_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenLAs_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenLAs_Item_tags_1) + /sizeof(asn_DEF_ForbiddenLAs_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ForbiddenLAs_Item_1, + 3, /* Elements count */ + &asn_SPC_ForbiddenLAs_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.h new file mode 100644 index 0000000..45a0eb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenLAs_Item_H_ +#define _ForbiddenLAs_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ForbiddenLACs.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ForbiddenLAs-Item */ +typedef struct ForbiddenLAs_Item { + PLMN_Identity_t pLMN_Identity; + ForbiddenLACs_t forbiddenLACs; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenLAs_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ForbiddenLAs_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenLAs_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenLAs_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.c new file mode 100644 index 0000000..4257704 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenLAs.h" + +#include "ForbiddenLAs-Item.h" +asn_per_constraints_t asn_PER_type_ForbiddenLAs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ForbiddenLAs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ForbiddenLAs_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenLAs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ForbiddenLAs_specs_1 = { + sizeof(struct ForbiddenLAs), + offsetof(struct ForbiddenLAs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs = { + "ForbiddenLAs", + "ForbiddenLAs", + &asn_OP_SEQUENCE_OF, + asn_DEF_ForbiddenLAs_tags_1, + sizeof(asn_DEF_ForbiddenLAs_tags_1) + /sizeof(asn_DEF_ForbiddenLAs_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenLAs_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenLAs_tags_1) + /sizeof(asn_DEF_ForbiddenLAs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ForbiddenLAs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ForbiddenLAs_1, + 1, /* Single element */ + &asn_SPC_ForbiddenLAs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.h new file mode 100644 index 0000000..4381cae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenLAs.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenLAs_H_ +#define _ForbiddenLAs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ForbiddenLAs_Item; + +/* ForbiddenLAs */ +typedef struct ForbiddenLAs { + A_SEQUENCE_OF(struct ForbiddenLAs_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenLAs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs; +extern asn_SET_OF_specifics_t asn_SPC_ForbiddenLAs_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenLAs_1[1]; +extern asn_per_constraints_t asn_PER_type_ForbiddenLAs_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenLAs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.c new file mode 100644 index 0000000..6bda2f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenTACs.h" + +asn_per_constraints_t asn_PER_type_ForbiddenTACs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 12, 12, 1, 4096 } /* (SIZE(1..4096)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ForbiddenTACs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenTACs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ForbiddenTACs_specs_1 = { + sizeof(struct ForbiddenTACs), + offsetof(struct ForbiddenTACs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenTACs = { + "ForbiddenTACs", + "ForbiddenTACs", + &asn_OP_SEQUENCE_OF, + asn_DEF_ForbiddenTACs_tags_1, + sizeof(asn_DEF_ForbiddenTACs_tags_1) + /sizeof(asn_DEF_ForbiddenTACs_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenTACs_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenTACs_tags_1) + /sizeof(asn_DEF_ForbiddenTACs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ForbiddenTACs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ForbiddenTACs_1, + 1, /* Single element */ + &asn_SPC_ForbiddenTACs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.h new file mode 100644 index 0000000..ed844bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTACs.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenTACs_H_ +#define _ForbiddenTACs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAC.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ForbiddenTACs */ +typedef struct ForbiddenTACs { + A_SEQUENCE_OF(TAC_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenTACs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenTACs; +extern asn_SET_OF_specifics_t asn_SPC_ForbiddenTACs_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenTACs_1[1]; +extern asn_per_constraints_t asn_PER_type_ForbiddenTACs_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenTACs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.c new file mode 100644 index 0000000..3d3379d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenTAs-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ForbiddenTAs_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenTAs_Item, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenTAs_Item, forbiddenTACs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ForbiddenTACs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "forbiddenTACs" + }, + { ATF_POINTER, 1, offsetof(struct ForbiddenTAs_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P146, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ForbiddenTAs_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ForbiddenTAs_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ForbiddenTAs_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* forbiddenTACs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ForbiddenTAs_Item_specs_1 = { + sizeof(struct ForbiddenTAs_Item), + offsetof(struct ForbiddenTAs_Item, _asn_ctx), + asn_MAP_ForbiddenTAs_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ForbiddenTAs_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs_Item = { + "ForbiddenTAs-Item", + "ForbiddenTAs-Item", + &asn_OP_SEQUENCE, + asn_DEF_ForbiddenTAs_Item_tags_1, + sizeof(asn_DEF_ForbiddenTAs_Item_tags_1) + /sizeof(asn_DEF_ForbiddenTAs_Item_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenTAs_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenTAs_Item_tags_1) + /sizeof(asn_DEF_ForbiddenTAs_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ForbiddenTAs_Item_1, + 3, /* Elements count */ + &asn_SPC_ForbiddenTAs_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.h new file mode 100644 index 0000000..81b912b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenTAs_Item_H_ +#define _ForbiddenTAs_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ForbiddenTACs.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ForbiddenTAs-Item */ +typedef struct ForbiddenTAs_Item { + PLMN_Identity_t pLMN_Identity; + ForbiddenTACs_t forbiddenTACs; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenTAs_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ForbiddenTAs_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenTAs_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenTAs_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.c new file mode 100644 index 0000000..382698d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ForbiddenTAs.h" + +#include "ForbiddenTAs-Item.h" +asn_per_constraints_t asn_PER_type_ForbiddenTAs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ForbiddenTAs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ForbiddenTAs_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenTAs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ForbiddenTAs_specs_1 = { + sizeof(struct ForbiddenTAs), + offsetof(struct ForbiddenTAs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs = { + "ForbiddenTAs", + "ForbiddenTAs", + &asn_OP_SEQUENCE_OF, + asn_DEF_ForbiddenTAs_tags_1, + sizeof(asn_DEF_ForbiddenTAs_tags_1) + /sizeof(asn_DEF_ForbiddenTAs_tags_1[0]), /* 1 */ + asn_DEF_ForbiddenTAs_tags_1, /* Same as above */ + sizeof(asn_DEF_ForbiddenTAs_tags_1) + /sizeof(asn_DEF_ForbiddenTAs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ForbiddenTAs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ForbiddenTAs_1, + 1, /* Single element */ + &asn_SPC_ForbiddenTAs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.h new file mode 100644 index 0000000..a60d37a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ForbiddenTAs.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ForbiddenTAs_H_ +#define _ForbiddenTAs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ForbiddenTAs_Item; + +/* ForbiddenTAs */ +typedef struct ForbiddenTAs { + A_SEQUENCE_OF(struct ForbiddenTAs_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenTAs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs; +extern asn_SET_OF_specifics_t asn_SPC_ForbiddenTAs_specs_1; +extern asn_TYPE_member_t asn_MBR_ForbiddenTAs_1[1]; +extern asn_per_constraints_t asn_PER_type_ForbiddenTAs_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ForbiddenTAs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.c new file mode 100644 index 0000000..0fa474b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Fourframes.h" + +int +Fourframes_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 24)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Fourframes_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 24, 24 } /* (SIZE(24..24)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Fourframes_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Fourframes = { + "Fourframes", + "Fourframes", + &asn_OP_BIT_STRING, + asn_DEF_Fourframes_tags_1, + sizeof(asn_DEF_Fourframes_tags_1) + /sizeof(asn_DEF_Fourframes_tags_1[0]), /* 1 */ + asn_DEF_Fourframes_tags_1, /* Same as above */ + sizeof(asn_DEF_Fourframes_tags_1) + /sizeof(asn_DEF_Fourframes_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Fourframes_constr_1, Fourframes_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.h new file mode 100644 index 0000000..21a28c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Fourframes.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Fourframes_H_ +#define _Fourframes_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Fourframes */ +typedef BIT_STRING_t Fourframes_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Fourframes_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Fourframes; +asn_struct_free_f Fourframes_free; +asn_struct_print_f Fourframes_print; +asn_constr_check_f Fourframes_constraint; +ber_type_decoder_f Fourframes_decode_ber; +der_type_encoder_f Fourframes_encode_der; +xer_type_decoder_f Fourframes_decode_xer; +xer_type_encoder_f Fourframes_encode_xer; +per_type_decoder_f Fourframes_decode_uper; +per_type_encoder_f Fourframes_encode_uper; +per_type_decoder_f Fourframes_decode_aper; +per_type_encoder_f Fourframes_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Fourframes_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.c new file mode 100644 index 0000000..aa74a3f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FreqBandIndicator.h" + +int +FreqBandIndicator_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_FreqBandIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 256 } /* (1..256,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_FreqBandIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FreqBandIndicator = { + "FreqBandIndicator", + "FreqBandIndicator", + &asn_OP_NativeInteger, + asn_DEF_FreqBandIndicator_tags_1, + sizeof(asn_DEF_FreqBandIndicator_tags_1) + /sizeof(asn_DEF_FreqBandIndicator_tags_1[0]), /* 1 */ + asn_DEF_FreqBandIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqBandIndicator_tags_1) + /sizeof(asn_DEF_FreqBandIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_FreqBandIndicator_constr_1, FreqBandIndicator_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.h new file mode 100644 index 0000000..8f01f3f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicator.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FreqBandIndicator_H_ +#define _FreqBandIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqBandIndicator */ +typedef long FreqBandIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_FreqBandIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_FreqBandIndicator; +asn_struct_free_f FreqBandIndicator_free; +asn_struct_print_f FreqBandIndicator_print; +asn_constr_check_f FreqBandIndicator_constraint; +ber_type_decoder_f FreqBandIndicator_decode_ber; +der_type_encoder_f FreqBandIndicator_encode_der; +xer_type_decoder_f FreqBandIndicator_decode_xer; +xer_type_encoder_f FreqBandIndicator_encode_xer; +per_type_decoder_f FreqBandIndicator_decode_uper; +per_type_encoder_f FreqBandIndicator_encode_uper; +per_type_decoder_f FreqBandIndicator_decode_aper; +per_type_encoder_f FreqBandIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqBandIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.c new file mode 100644 index 0000000..21e31e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FreqBandIndicatorPriority.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_FreqBandIndicatorPriority_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_FreqBandIndicatorPriority_value2enum_1[] = { + { 0, 15, "not-broadcasted" }, + { 1, 11, "broadcasted" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_FreqBandIndicatorPriority_enum2value_1[] = { + 1, /* broadcasted(1) */ + 0 /* not-broadcasted(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_FreqBandIndicatorPriority_specs_1 = { + asn_MAP_FreqBandIndicatorPriority_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_FreqBandIndicatorPriority_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_FreqBandIndicatorPriority_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FreqBandIndicatorPriority = { + "FreqBandIndicatorPriority", + "FreqBandIndicatorPriority", + &asn_OP_NativeEnumerated, + asn_DEF_FreqBandIndicatorPriority_tags_1, + sizeof(asn_DEF_FreqBandIndicatorPriority_tags_1) + /sizeof(asn_DEF_FreqBandIndicatorPriority_tags_1[0]), /* 1 */ + asn_DEF_FreqBandIndicatorPriority_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqBandIndicatorPriority_tags_1) + /sizeof(asn_DEF_FreqBandIndicatorPriority_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_FreqBandIndicatorPriority_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_FreqBandIndicatorPriority_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.h new file mode 100644 index 0000000..5314d67 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandIndicatorPriority.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FreqBandIndicatorPriority_H_ +#define _FreqBandIndicatorPriority_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum FreqBandIndicatorPriority { + FreqBandIndicatorPriority_not_broadcasted = 0, + FreqBandIndicatorPriority_broadcasted = 1 + /* + * Enumeration is extensible + */ +} e_FreqBandIndicatorPriority; + +/* FreqBandIndicatorPriority */ +typedef long FreqBandIndicatorPriority_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_FreqBandIndicatorPriority_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_FreqBandIndicatorPriority; +extern const asn_INTEGER_specifics_t asn_SPC_FreqBandIndicatorPriority_specs_1; +asn_struct_free_f FreqBandIndicatorPriority_free; +asn_struct_print_f FreqBandIndicatorPriority_print; +asn_constr_check_f FreqBandIndicatorPriority_constraint; +ber_type_decoder_f FreqBandIndicatorPriority_decode_ber; +der_type_encoder_f FreqBandIndicatorPriority_encode_der; +xer_type_decoder_f FreqBandIndicatorPriority_decode_xer; +xer_type_encoder_f FreqBandIndicatorPriority_encode_xer; +per_type_decoder_f FreqBandIndicatorPriority_decode_uper; +per_type_encoder_f FreqBandIndicatorPriority_encode_uper; +per_type_decoder_f FreqBandIndicatorPriority_decode_aper; +per_type_encoder_f FreqBandIndicatorPriority_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqBandIndicatorPriority_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.c new file mode 100644 index 0000000..4f9c1db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.c @@ -0,0 +1,195 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "FreqBandNrItem.h" + +#include "ProtocolExtensionContainer.h" +#include "SupportedSULFreqBandItem.h" +static int +memb_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 1024)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_supportedSULBandList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_supportedSULBandList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 0, 32 } /* (SIZE(0..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1024 } /* (1..1024,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_supportedSULBandList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 0, 32 } /* (SIZE(0..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_supportedSULBandList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SupportedSULFreqBandItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_supportedSULBandList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_supportedSULBandList_specs_3 = { + sizeof(struct FreqBandNrItem__supportedSULBandList), + offsetof(struct FreqBandNrItem__supportedSULBandList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_supportedSULBandList_3 = { + "supportedSULBandList", + "supportedSULBandList", + &asn_OP_SEQUENCE_OF, + asn_DEF_supportedSULBandList_tags_3, + sizeof(asn_DEF_supportedSULBandList_tags_3) + /sizeof(asn_DEF_supportedSULBandList_tags_3[0]) - 1, /* 1 */ + asn_DEF_supportedSULBandList_tags_3, /* Same as above */ + sizeof(asn_DEF_supportedSULBandList_tags_3) + /sizeof(asn_DEF_supportedSULBandList_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_supportedSULBandList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_supportedSULBandList_3, + 1, /* Single element */ + &asn_SPC_supportedSULBandList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FreqBandNrItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem, freqBandIndicatorNr), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_freqBandIndicatorNr_constr_2, memb_freqBandIndicatorNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandIndicatorNr" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem, supportedSULBandList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_supportedSULBandList_3, + 0, + { 0, &asn_PER_memb_supportedSULBandList_constr_3, memb_supportedSULBandList_constraint_1 }, + 0, 0, /* No default value */ + "supportedSULBandList" + }, + { ATF_POINTER, 1, offsetof(struct FreqBandNrItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P148, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_FreqBandNrItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_FreqBandNrItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FreqBandNrItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* supportedSULBandList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_specs_1 = { + sizeof(struct FreqBandNrItem), + offsetof(struct FreqBandNrItem, _asn_ctx), + asn_MAP_FreqBandNrItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FreqBandNrItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem = { + "FreqBandNrItem", + "FreqBandNrItem", + &asn_OP_SEQUENCE, + asn_DEF_FreqBandNrItem_tags_1, + sizeof(asn_DEF_FreqBandNrItem_tags_1) + /sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */ + asn_DEF_FreqBandNrItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqBandNrItem_tags_1) + /sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FreqBandNrItem_1, + 3, /* Elements count */ + &asn_SPC_FreqBandNrItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.h new file mode 100644 index 0000000..b095d40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/FreqBandNrItem.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _FreqBandNrItem_H_ +#define _FreqBandNrItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct SupportedSULFreqBandItem; + +/* FreqBandNrItem */ +typedef struct FreqBandNrItem { + long freqBandIndicatorNr; + struct FreqBandNrItem__supportedSULBandList { + A_SEQUENCE_OF(struct SupportedSULFreqBandItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } supportedSULBandList; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqBandNrItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FreqBandNrItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqBandNrItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.c new file mode 100644 index 0000000..58c218f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GBR-QosInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GBR_QosInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation, e_RAB_MaximumBitrateDL), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-MaximumBitrateDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation, e_RAB_MaximumBitrateUL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-MaximumBitrateUL" + }, + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation, e_RAB_GuaranteedBitrateDL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-GuaranteedBitrateDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation, e_RAB_GuaranteedBitrateUL), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-GuaranteedBitrateUL" + }, + { ATF_POINTER, 1, offsetof(struct GBR_QosInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P149, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GBR_QosInformation_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_GBR_QosInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GBR_QosInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-MaximumBitrateDL */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-MaximumBitrateUL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e-RAB-GuaranteedBitrateDL */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RAB-GuaranteedBitrateUL */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GBR_QosInformation_specs_1 = { + sizeof(struct GBR_QosInformation), + offsetof(struct GBR_QosInformation, _asn_ctx), + asn_MAP_GBR_QosInformation_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_GBR_QosInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GBR_QosInformation = { + "GBR-QosInformation", + "GBR-QosInformation", + &asn_OP_SEQUENCE, + asn_DEF_GBR_QosInformation_tags_1, + sizeof(asn_DEF_GBR_QosInformation_tags_1) + /sizeof(asn_DEF_GBR_QosInformation_tags_1[0]), /* 1 */ + asn_DEF_GBR_QosInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_GBR_QosInformation_tags_1) + /sizeof(asn_DEF_GBR_QosInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GBR_QosInformation_1, + 5, /* Elements count */ + &asn_SPC_GBR_QosInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.h new file mode 100644 index 0000000..c8c3df1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GBR-QosInformation.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GBR_QosInformation_H_ +#define _GBR_QosInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BitRate.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GBR-QosInformation */ +typedef struct GBR_QosInformation { + BitRate_t e_RAB_MaximumBitrateDL; + BitRate_t e_RAB_MaximumBitrateUL; + BitRate_t e_RAB_GuaranteedBitrateDL; + BitRate_t e_RAB_GuaranteedBitrateUL; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GBR_QosInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GBR_QosInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_GBR_QosInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_GBR_QosInformation_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GBR_QosInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.c new file mode 100644 index 0000000..4d03567 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.c @@ -0,0 +1,106 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_GNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_specs_1 = { + sizeof(struct GNB_ID), + offsetof(struct GNB_ID, _asn_ctx), + offsetof(struct GNB_ID, present), + sizeof(((struct GNB_ID *)0)->present), + asn_MAP_GNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID = { + "GNB-ID", + "GNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.h new file mode 100644 index 0000000..2371e04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNB-ID.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GNB_ID_H_ +#define _GNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_PR { + GNB_ID_PR_NOTHING, /* No components present */ + GNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} GNB_ID_PR; + +/* GNB-ID */ +typedef struct GNB_ID { + GNB_ID_PR present; + union GNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.c new file mode 100644 index 0000000..ad8f380 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GNBOverloadInformation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GNBOverloadInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_GNBOverloadInformation_value2enum_1[] = { + { 0, 10, "overloaded" }, + { 1, 14, "not-overloaded" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_GNBOverloadInformation_enum2value_1[] = { + 1, /* not-overloaded(1) */ + 0 /* overloaded(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_GNBOverloadInformation_specs_1 = { + asn_MAP_GNBOverloadInformation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_GNBOverloadInformation_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_GNBOverloadInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNBOverloadInformation = { + "GNBOverloadInformation", + "GNBOverloadInformation", + &asn_OP_NativeEnumerated, + asn_DEF_GNBOverloadInformation_tags_1, + sizeof(asn_DEF_GNBOverloadInformation_tags_1) + /sizeof(asn_DEF_GNBOverloadInformation_tags_1[0]), /* 1 */ + asn_DEF_GNBOverloadInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_GNBOverloadInformation_tags_1) + /sizeof(asn_DEF_GNBOverloadInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GNBOverloadInformation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_GNBOverloadInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.h new file mode 100644 index 0000000..bd1597c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBOverloadInformation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GNBOverloadInformation_H_ +#define _GNBOverloadInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNBOverloadInformation { + GNBOverloadInformation_overloaded = 0, + GNBOverloadInformation_not_overloaded = 1 + /* + * Enumeration is extensible + */ +} e_GNBOverloadInformation; + +/* GNBOverloadInformation */ +typedef long GNBOverloadInformation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNBOverloadInformation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNBOverloadInformation; +extern const asn_INTEGER_specifics_t asn_SPC_GNBOverloadInformation_specs_1; +asn_struct_free_f GNBOverloadInformation_free; +asn_struct_print_f GNBOverloadInformation_print; +asn_constr_check_f GNBOverloadInformation_constraint; +ber_type_decoder_f GNBOverloadInformation_decode_ber; +der_type_encoder_f GNBOverloadInformation_encode_der; +xer_type_decoder_f GNBOverloadInformation_decode_xer; +xer_type_encoder_f GNBOverloadInformation_encode_xer; +per_type_decoder_f GNBOverloadInformation_decode_uper; +per_type_encoder_f GNBOverloadInformation_encode_uper; +per_type_decoder_f GNBOverloadInformation_decode_aper; +per_type_encoder_f GNBOverloadInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNBOverloadInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.c new file mode 100644 index 0000000..50e449b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GNBStatusIndication.h" + +asn_TYPE_member_t asn_MBR_GNBStatusIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNBStatusIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P119, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_GNBStatusIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GNBStatusIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GNBStatusIndication_specs_1 = { + sizeof(struct GNBStatusIndication), + offsetof(struct GNBStatusIndication, _asn_ctx), + asn_MAP_GNBStatusIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GNBStatusIndication = { + "GNBStatusIndication", + "GNBStatusIndication", + &asn_OP_SEQUENCE, + asn_DEF_GNBStatusIndication_tags_1, + sizeof(asn_DEF_GNBStatusIndication_tags_1) + /sizeof(asn_DEF_GNBStatusIndication_tags_1[0]), /* 1 */ + asn_DEF_GNBStatusIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_GNBStatusIndication_tags_1) + /sizeof(asn_DEF_GNBStatusIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GNBStatusIndication_1, + 1, /* Elements count */ + &asn_SPC_GNBStatusIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.h new file mode 100644 index 0000000..cea74b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GNBStatusIndication.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GNBStatusIndication_H_ +#define _GNBStatusIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNBStatusIndication */ +typedef struct GNBStatusIndication { + ProtocolIE_Container_119P119_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNBStatusIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNBStatusIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_GNBStatusIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_GNBStatusIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNBStatusIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.c new file mode 100644 index 0000000..45b2ff4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GTP-TEI.h" + +int +GTP_TEI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GTP_TEI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GTP_TEI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GTP_TEI = { + "GTP-TEI", + "GTP-TEI", + &asn_OP_OCTET_STRING, + asn_DEF_GTP_TEI_tags_1, + sizeof(asn_DEF_GTP_TEI_tags_1) + /sizeof(asn_DEF_GTP_TEI_tags_1[0]), /* 1 */ + asn_DEF_GTP_TEI_tags_1, /* Same as above */ + sizeof(asn_DEF_GTP_TEI_tags_1) + /sizeof(asn_DEF_GTP_TEI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GTP_TEI_constr_1, GTP_TEI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.h new file mode 100644 index 0000000..319552a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTP-TEI.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GTP_TEI_H_ +#define _GTP_TEI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GTP-TEI */ +typedef OCTET_STRING_t GTP_TEI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GTP_TEI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GTP_TEI; +asn_struct_free_f GTP_TEI_free; +asn_struct_print_f GTP_TEI_print; +asn_constr_check_f GTP_TEI_constraint; +ber_type_decoder_f GTP_TEI_decode_ber; +der_type_encoder_f GTP_TEI_encode_der; +xer_type_decoder_f GTP_TEI_decode_xer; +xer_type_encoder_f GTP_TEI_encode_xer; +per_type_decoder_f GTP_TEI_decode_uper; +per_type_encoder_f GTP_TEI_encode_uper; +per_type_decoder_f GTP_TEI_decode_aper; +per_type_encoder_f GTP_TEI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GTP_TEI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.c new file mode 100644 index 0000000..989bb22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GTPtunnelEndpoint.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GTPtunnelEndpoint_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GTPtunnelEndpoint, transportLayerAddress), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TransportLayerAddress, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transportLayerAddress" + }, + { ATF_NOFLAGS, 0, offsetof(struct GTPtunnelEndpoint, gTP_TEID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GTP_TEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gTP-TEID" + }, + { ATF_POINTER, 1, offsetof(struct GTPtunnelEndpoint, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P152, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GTPtunnelEndpoint_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_GTPtunnelEndpoint_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GTPtunnelEndpoint_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gTP-TEID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GTPtunnelEndpoint_specs_1 = { + sizeof(struct GTPtunnelEndpoint), + offsetof(struct GTPtunnelEndpoint, _asn_ctx), + asn_MAP_GTPtunnelEndpoint_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GTPtunnelEndpoint_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GTPtunnelEndpoint = { + "GTPtunnelEndpoint", + "GTPtunnelEndpoint", + &asn_OP_SEQUENCE, + asn_DEF_GTPtunnelEndpoint_tags_1, + sizeof(asn_DEF_GTPtunnelEndpoint_tags_1) + /sizeof(asn_DEF_GTPtunnelEndpoint_tags_1[0]), /* 1 */ + asn_DEF_GTPtunnelEndpoint_tags_1, /* Same as above */ + sizeof(asn_DEF_GTPtunnelEndpoint_tags_1) + /sizeof(asn_DEF_GTPtunnelEndpoint_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GTPtunnelEndpoint_1, + 3, /* Elements count */ + &asn_SPC_GTPtunnelEndpoint_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.h new file mode 100644 index 0000000..98e5520 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GTPtunnelEndpoint.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GTPtunnelEndpoint_H_ +#define _GTPtunnelEndpoint_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TransportLayerAddress.h" +#include "GTP-TEI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GTPtunnelEndpoint */ +typedef struct GTPtunnelEndpoint { + TransportLayerAddress_t transportLayerAddress; + GTP_TEI_t gTP_TEID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GTPtunnelEndpoint_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GTPtunnelEndpoint; +extern asn_SEQUENCE_specifics_t asn_SPC_GTPtunnelEndpoint_specs_1; +extern asn_TYPE_member_t asn_MBR_GTPtunnelEndpoint_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GTPtunnelEndpoint_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.c new file mode 100644 index 0000000..2b8c036 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GU-Group-ID.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GU_Group_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GU_Group_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GU_Group_ID, mME_Group_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MME_Group_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-Group-ID" + }, + { ATF_POINTER, 1, offsetof(struct GU_Group_ID, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P153, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GU_Group_ID_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_GU_Group_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GU_Group_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Group-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GU_Group_ID_specs_1 = { + sizeof(struct GU_Group_ID), + offsetof(struct GU_Group_ID, _asn_ctx), + asn_MAP_GU_Group_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GU_Group_ID_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GU_Group_ID = { + "GU-Group-ID", + "GU-Group-ID", + &asn_OP_SEQUENCE, + asn_DEF_GU_Group_ID_tags_1, + sizeof(asn_DEF_GU_Group_ID_tags_1) + /sizeof(asn_DEF_GU_Group_ID_tags_1[0]), /* 1 */ + asn_DEF_GU_Group_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GU_Group_ID_tags_1) + /sizeof(asn_DEF_GU_Group_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GU_Group_ID_1, + 3, /* Elements count */ + &asn_SPC_GU_Group_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.h new file mode 100644 index 0000000..0f9d44d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GU-Group-ID.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GU_Group_ID_H_ +#define _GU_Group_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "MME-Group-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GU-Group-ID */ +typedef struct GU_Group_ID { + PLMN_Identity_t pLMN_Identity; + MME_Group_ID_t mME_Group_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GU_Group_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GU_Group_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GU_Group_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GU_Group_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GU_Group_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.c new file mode 100644 index 0000000..ecf7724 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GUGroupIDList.h" + +#include "GU-Group-ID.h" +asn_per_constraints_t asn_PER_type_GUGroupIDList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GUGroupIDList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GU_Group_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_GUGroupIDList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_GUGroupIDList_specs_1 = { + sizeof(struct GUGroupIDList), + offsetof(struct GUGroupIDList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_GUGroupIDList = { + "GUGroupIDList", + "GUGroupIDList", + &asn_OP_SEQUENCE_OF, + asn_DEF_GUGroupIDList_tags_1, + sizeof(asn_DEF_GUGroupIDList_tags_1) + /sizeof(asn_DEF_GUGroupIDList_tags_1[0]), /* 1 */ + asn_DEF_GUGroupIDList_tags_1, /* Same as above */ + sizeof(asn_DEF_GUGroupIDList_tags_1) + /sizeof(asn_DEF_GUGroupIDList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GUGroupIDList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_GUGroupIDList_1, + 1, /* Single element */ + &asn_SPC_GUGroupIDList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.h new file mode 100644 index 0000000..14066aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUGroupIDList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GUGroupIDList_H_ +#define _GUGroupIDList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GU_Group_ID; + +/* GUGroupIDList */ +typedef struct GUGroupIDList { + A_SEQUENCE_OF(struct GU_Group_ID) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GUGroupIDList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GUGroupIDList; +extern asn_SET_OF_specifics_t asn_SPC_GUGroupIDList_specs_1; +extern asn_TYPE_member_t asn_MBR_GUGroupIDList_1[1]; +extern asn_per_constraints_t asn_PER_type_GUGroupIDList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GUGroupIDList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.c new file mode 100644 index 0000000..dc2aa0a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GUMMEI.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GUMMEI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI, gU_Group_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GU_Group_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gU-Group-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI, mME_Code), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MME_Code, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-Code" + }, + { ATF_POINTER, 1, offsetof(struct GUMMEI, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P154, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GUMMEI_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_GUMMEI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GUMMEI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gU-Group-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Code */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_specs_1 = { + sizeof(struct GUMMEI), + offsetof(struct GUMMEI, _asn_ctx), + asn_MAP_GUMMEI_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GUMMEI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GUMMEI = { + "GUMMEI", + "GUMMEI", + &asn_OP_SEQUENCE, + asn_DEF_GUMMEI_tags_1, + sizeof(asn_DEF_GUMMEI_tags_1) + /sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */ + asn_DEF_GUMMEI_tags_1, /* Same as above */ + sizeof(asn_DEF_GUMMEI_tags_1) + /sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GUMMEI_1, + 3, /* Elements count */ + &asn_SPC_GUMMEI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.h new file mode 100644 index 0000000..9b9ac44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GUMMEI.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GUMMEI_H_ +#define _GUMMEI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GU-Group-ID.h" +#include "MME-Code.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GUMMEI */ +typedef struct GUMMEI { + GU_Group_ID_t gU_Group_ID; + MME_Code_t mME_Code; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GUMMEI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GUMMEI; +extern asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_specs_1; +extern asn_TYPE_member_t asn_MBR_GUMMEI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GUMMEI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..4d042fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GlobalENB-ID.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalENB_ID, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P150, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GlobalENB_ID_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalENB_ID_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..2782e11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalENB-ID.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.c new file mode 100644 index 0000000..c8a4a16 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "GlobalGNB-ID.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_GlobalGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalGNB_ID, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P151, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_GlobalGNB_ID_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_specs_1 = { + sizeof(struct GlobalGNB_ID), + offsetof(struct GlobalGNB_ID, _asn_ctx), + asn_MAP_GlobalGNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalGNB_ID_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID = { + "GlobalGNB-ID", + "GlobalGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalGNB_ID_tags_1, + sizeof(asn_DEF_GlobalGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalGNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.h new file mode 100644 index 0000000..ee99c5c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/GlobalGNB-ID.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _GlobalGNB_ID_H_ +#define _GlobalGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* GlobalGNB-ID */ +typedef struct GlobalGNB_ID { + PLMN_Identity_t pLMN_Identity; + GNB_ID_t gNB_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalGNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.c new file mode 100644 index 0000000..cf6845a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HFN.h" + +int +HFN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1048575)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_HFN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 20, -1, 0, 1048575 } /* (0..1048575) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_HFN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_HFN = { + "HFN", + "HFN", + &asn_OP_NativeInteger, + asn_DEF_HFN_tags_1, + sizeof(asn_DEF_HFN_tags_1) + /sizeof(asn_DEF_HFN_tags_1[0]), /* 1 */ + asn_DEF_HFN_tags_1, /* Same as above */ + sizeof(asn_DEF_HFN_tags_1) + /sizeof(asn_DEF_HFN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_HFN_constr_1, HFN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.h new file mode 100644 index 0000000..81d1abe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFN.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HFN_H_ +#define _HFN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HFN */ +typedef long HFN_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_HFN_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_HFN; +asn_struct_free_f HFN_free; +asn_struct_print_f HFN_print; +asn_constr_check_f HFN_constraint; +ber_type_decoder_f HFN_decode_ber; +der_type_encoder_f HFN_encode_der; +xer_type_decoder_f HFN_decode_xer; +xer_type_encoder_f HFN_encode_xer; +per_type_decoder_f HFN_decode_uper; +per_type_encoder_f HFN_encode_uper; +per_type_decoder_f HFN_decode_aper; +per_type_encoder_f HFN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _HFN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.c new file mode 100644 index 0000000..f4db021 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HFNModified.h" + +int +HFNModified_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 131071)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_HFNModified_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 17, -1, 0, 131071 } /* (0..131071) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_HFNModified_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_HFNModified = { + "HFNModified", + "HFNModified", + &asn_OP_NativeInteger, + asn_DEF_HFNModified_tags_1, + sizeof(asn_DEF_HFNModified_tags_1) + /sizeof(asn_DEF_HFNModified_tags_1[0]), /* 1 */ + asn_DEF_HFNModified_tags_1, /* Same as above */ + sizeof(asn_DEF_HFNModified_tags_1) + /sizeof(asn_DEF_HFNModified_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_HFNModified_constr_1, HFNModified_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.h new file mode 100644 index 0000000..68182f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNModified.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HFNModified_H_ +#define _HFNModified_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HFNModified */ +typedef long HFNModified_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_HFNModified_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_HFNModified; +asn_struct_free_f HFNModified_free; +asn_struct_print_f HFNModified_print; +asn_constr_check_f HFNModified_constraint; +ber_type_decoder_f HFNModified_decode_ber; +der_type_encoder_f HFNModified_encode_der; +xer_type_decoder_f HFNModified_decode_xer; +xer_type_encoder_f HFNModified_encode_xer; +per_type_decoder_f HFNModified_decode_uper; +per_type_encoder_f HFNModified_encode_uper; +per_type_decoder_f HFNModified_decode_aper; +per_type_encoder_f HFNModified_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _HFNModified_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c new file mode 100644 index 0000000..5e6a619 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HFNforPDCP-SNlength18.h" + +int +HFNforPDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 16383)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_HFNforPDCP_SNlength18_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 14, 14, 0, 16383 } /* (0..16383) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_HFNforPDCP_SNlength18_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_HFNforPDCP_SNlength18 = { + "HFNforPDCP-SNlength18", + "HFNforPDCP-SNlength18", + &asn_OP_NativeInteger, + asn_DEF_HFNforPDCP_SNlength18_tags_1, + sizeof(asn_DEF_HFNforPDCP_SNlength18_tags_1) + /sizeof(asn_DEF_HFNforPDCP_SNlength18_tags_1[0]), /* 1 */ + asn_DEF_HFNforPDCP_SNlength18_tags_1, /* Same as above */ + sizeof(asn_DEF_HFNforPDCP_SNlength18_tags_1) + /sizeof(asn_DEF_HFNforPDCP_SNlength18_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_HFNforPDCP_SNlength18_constr_1, HFNforPDCP_SNlength18_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h new file mode 100644 index 0000000..76aee4c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HFNforPDCP-SNlength18.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HFNforPDCP_SNlength18_H_ +#define _HFNforPDCP_SNlength18_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HFNforPDCP-SNlength18 */ +typedef long HFNforPDCP_SNlength18_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_HFNforPDCP_SNlength18_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_HFNforPDCP_SNlength18; +asn_struct_free_f HFNforPDCP_SNlength18_free; +asn_struct_print_f HFNforPDCP_SNlength18_print; +asn_constr_check_f HFNforPDCP_SNlength18_constraint; +ber_type_decoder_f HFNforPDCP_SNlength18_decode_ber; +der_type_encoder_f HFNforPDCP_SNlength18_encode_der; +xer_type_decoder_f HFNforPDCP_SNlength18_decode_xer; +xer_type_encoder_f HFNforPDCP_SNlength18_encode_xer; +per_type_decoder_f HFNforPDCP_SNlength18_decode_uper; +per_type_encoder_f HFNforPDCP_SNlength18_encode_uper; +per_type_decoder_f HFNforPDCP_SNlength18_decode_aper; +per_type_encoder_f HFNforPDCP_SNlength18_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _HFNforPDCP_SNlength18_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.c new file mode 100644 index 0000000..25dca7c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HWLoadIndicator.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_HWLoadIndicator_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HWLoadIndicator, dLHWLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dLHWLoadIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct HWLoadIndicator, uLHWLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLHWLoadIndicator" + }, + { ATF_POINTER, 1, offsetof(struct HWLoadIndicator, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P156, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_HWLoadIndicator_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_HWLoadIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HWLoadIndicator_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dLHWLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLHWLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HWLoadIndicator_specs_1 = { + sizeof(struct HWLoadIndicator), + offsetof(struct HWLoadIndicator, _asn_ctx), + asn_MAP_HWLoadIndicator_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_HWLoadIndicator_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HWLoadIndicator = { + "HWLoadIndicator", + "HWLoadIndicator", + &asn_OP_SEQUENCE, + asn_DEF_HWLoadIndicator_tags_1, + sizeof(asn_DEF_HWLoadIndicator_tags_1) + /sizeof(asn_DEF_HWLoadIndicator_tags_1[0]), /* 1 */ + asn_DEF_HWLoadIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_HWLoadIndicator_tags_1) + /sizeof(asn_DEF_HWLoadIndicator_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HWLoadIndicator_1, + 3, /* Elements count */ + &asn_SPC_HWLoadIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.h new file mode 100644 index 0000000..bb818b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HWLoadIndicator.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HWLoadIndicator_H_ +#define _HWLoadIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "LoadIndicator.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* HWLoadIndicator */ +typedef struct HWLoadIndicator { + LoadIndicator_t dLHWLoadIndicator; + LoadIndicator_t uLHWLoadIndicator; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HWLoadIndicator_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HWLoadIndicator; +extern asn_SEQUENCE_specifics_t asn_SPC_HWLoadIndicator_specs_1; +extern asn_TYPE_member_t asn_MBR_HWLoadIndicator_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _HWLoadIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.c new file mode 100644 index 0000000..0f7d23b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverCancel.h" + +static asn_TYPE_member_t asn_MBR_HandoverCancel_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P20, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverCancel_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverCancel_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverCancel_specs_1 = { + sizeof(struct HandoverCancel), + offsetof(struct HandoverCancel, _asn_ctx), + asn_MAP_HandoverCancel_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverCancel = { + "HandoverCancel", + "HandoverCancel", + &asn_OP_SEQUENCE, + asn_DEF_HandoverCancel_tags_1, + sizeof(asn_DEF_HandoverCancel_tags_1) + /sizeof(asn_DEF_HandoverCancel_tags_1[0]), /* 1 */ + asn_DEF_HandoverCancel_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverCancel_tags_1) + /sizeof(asn_DEF_HandoverCancel_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverCancel_1, + 1, /* Elements count */ + &asn_SPC_HandoverCancel_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.h new file mode 100644 index 0000000..294a4dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverCancel.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverCancel_H_ +#define _HandoverCancel_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverCancel */ +typedef struct HandoverCancel { + ProtocolIE_Container_119P20_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverCancel_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverCancel; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverCancel_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.c new file mode 100644 index 0000000..f8b0ea7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverPreparationFailure.h" + +static asn_TYPE_member_t asn_MBR_HandoverPreparationFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverPreparationFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverPreparationFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationFailure_specs_1 = { + sizeof(struct HandoverPreparationFailure), + offsetof(struct HandoverPreparationFailure, _asn_ctx), + asn_MAP_HandoverPreparationFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverPreparationFailure = { + "HandoverPreparationFailure", + "HandoverPreparationFailure", + &asn_OP_SEQUENCE, + asn_DEF_HandoverPreparationFailure_tags_1, + sizeof(asn_DEF_HandoverPreparationFailure_tags_1) + /sizeof(asn_DEF_HandoverPreparationFailure_tags_1[0]), /* 1 */ + asn_DEF_HandoverPreparationFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverPreparationFailure_tags_1) + /sizeof(asn_DEF_HandoverPreparationFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverPreparationFailure_1, + 1, /* Elements count */ + &asn_SPC_HandoverPreparationFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.h new file mode 100644 index 0000000..f8f6c1f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverPreparationFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverPreparationFailure_H_ +#define _HandoverPreparationFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverPreparationFailure */ +typedef struct HandoverPreparationFailure { + ProtocolIE_Container_119P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverPreparationFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverPreparationFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverPreparationFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.c new file mode 100644 index 0000000..fefa47c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverReport.h" + +static asn_TYPE_member_t asn_MBR_HandoverReport_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverReport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverReport_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverReport_specs_1 = { + sizeof(struct HandoverReport), + offsetof(struct HandoverReport, _asn_ctx), + asn_MAP_HandoverReport_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverReport = { + "HandoverReport", + "HandoverReport", + &asn_OP_SEQUENCE, + asn_DEF_HandoverReport_tags_1, + sizeof(asn_DEF_HandoverReport_tags_1) + /sizeof(asn_DEF_HandoverReport_tags_1[0]), /* 1 */ + asn_DEF_HandoverReport_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverReport_tags_1) + /sizeof(asn_DEF_HandoverReport_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverReport_1, + 1, /* Elements count */ + &asn_SPC_HandoverReport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.h new file mode 100644 index 0000000..32aad87 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReport.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverReport_H_ +#define _HandoverReport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverReport */ +typedef struct HandoverReport { + ProtocolIE_Container_119P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverReport_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverReport; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverReport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.c new file mode 100644 index 0000000..123dd54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverReportType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_HandoverReportType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_HandoverReportType_value2enum_1[] = { + { 0, 10, "hoTooEarly" }, + { 1, 13, "hoToWrongCell" }, + { 2, 16, "interRATpingpong" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_HandoverReportType_enum2value_1[] = { + 1, /* hoToWrongCell(1) */ + 0, /* hoTooEarly(0) */ + 2 /* interRATpingpong(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_HandoverReportType_specs_1 = { + asn_MAP_HandoverReportType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_HandoverReportType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_HandoverReportType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_HandoverReportType = { + "HandoverReportType", + "HandoverReportType", + &asn_OP_NativeEnumerated, + asn_DEF_HandoverReportType_tags_1, + sizeof(asn_DEF_HandoverReportType_tags_1) + /sizeof(asn_DEF_HandoverReportType_tags_1[0]), /* 1 */ + asn_DEF_HandoverReportType_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverReportType_tags_1) + /sizeof(asn_DEF_HandoverReportType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_HandoverReportType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_HandoverReportType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.h new file mode 100644 index 0000000..6784a7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverReportType.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverReportType_H_ +#define _HandoverReportType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum HandoverReportType { + HandoverReportType_hoTooEarly = 0, + HandoverReportType_hoToWrongCell = 1, + /* + * Enumeration is extensible + */ + HandoverReportType_interRATpingpong = 2 +} e_HandoverReportType; + +/* HandoverReportType */ +typedef long HandoverReportType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_HandoverReportType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_HandoverReportType; +extern const asn_INTEGER_specifics_t asn_SPC_HandoverReportType_specs_1; +asn_struct_free_f HandoverReportType_free; +asn_struct_print_f HandoverReportType_print; +asn_constr_check_f HandoverReportType_constraint; +ber_type_decoder_f HandoverReportType_decode_ber; +der_type_encoder_f HandoverReportType_encode_der; +xer_type_decoder_f HandoverReportType_decode_xer; +xer_type_encoder_f HandoverReportType_encode_xer; +per_type_decoder_f HandoverReportType_decode_uper; +per_type_encoder_f HandoverReportType_encode_uper; +per_type_decoder_f HandoverReportType_decode_aper; +per_type_encoder_f HandoverReportType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverReportType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.c new file mode 100644 index 0000000..95fe244 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverRequest.h" + +static asn_TYPE_member_t asn_MBR_HandoverRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverRequest_specs_1 = { + sizeof(struct HandoverRequest), + offsetof(struct HandoverRequest, _asn_ctx), + asn_MAP_HandoverRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRequest = { + "HandoverRequest", + "HandoverRequest", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRequest_tags_1, + sizeof(asn_DEF_HandoverRequest_tags_1) + /sizeof(asn_DEF_HandoverRequest_tags_1[0]), /* 1 */ + asn_DEF_HandoverRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverRequest_tags_1) + /sizeof(asn_DEF_HandoverRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRequest_1, + 1, /* Elements count */ + &asn_SPC_HandoverRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.h new file mode 100644 index 0000000..1fab6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverRequest_H_ +#define _HandoverRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverRequest */ +typedef struct HandoverRequest { + ProtocolIE_Container_119P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.c new file mode 100644 index 0000000..52dba8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_HandoverRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverRequestAcknowledge_specs_1 = { + sizeof(struct HandoverRequestAcknowledge), + offsetof(struct HandoverRequestAcknowledge, _asn_ctx), + asn_MAP_HandoverRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRequestAcknowledge = { + "HandoverRequestAcknowledge", + "HandoverRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRequestAcknowledge_tags_1, + sizeof(asn_DEF_HandoverRequestAcknowledge_tags_1) + /sizeof(asn_DEF_HandoverRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_HandoverRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverRequestAcknowledge_tags_1) + /sizeof(asn_DEF_HandoverRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_HandoverRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.h new file mode 100644 index 0000000..f5bc0f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverRequestAcknowledge_H_ +#define _HandoverRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverRequestAcknowledge */ +typedef struct HandoverRequestAcknowledge { + ProtocolIE_Container_119P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.c new file mode 100644 index 0000000..fe2a0d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.c @@ -0,0 +1,124 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "HandoverRestrictionList.h" + +#include "EPLMNs.h" +#include "ForbiddenTAs.h" +#include "ForbiddenLAs.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_HandoverRestrictionList_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList, servingPLMN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servingPLMN" + }, + { ATF_POINTER, 5, offsetof(struct HandoverRestrictionList, equivalentPLMNs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPLMNs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "equivalentPLMNs" + }, + { ATF_POINTER, 4, offsetof(struct HandoverRestrictionList, forbiddenTAs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ForbiddenTAs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "forbiddenTAs" + }, + { ATF_POINTER, 3, offsetof(struct HandoverRestrictionList, forbiddenLAs), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ForbiddenLAs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "forbiddenLAs" + }, + { ATF_POINTER, 2, offsetof(struct HandoverRestrictionList, forbiddenInterRATs), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ForbiddenInterRATs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "forbiddenInterRATs" + }, + { ATF_POINTER, 1, offsetof(struct HandoverRestrictionList, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P155, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_HandoverRestrictionList_oms_1[] = { 1, 2, 3, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_HandoverRestrictionList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRestrictionList_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servingPLMN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* equivalentPLMNs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* forbiddenTAs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* forbiddenLAs */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* forbiddenInterRATs */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverRestrictionList_specs_1 = { + sizeof(struct HandoverRestrictionList), + offsetof(struct HandoverRestrictionList, _asn_ctx), + asn_MAP_HandoverRestrictionList_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_HandoverRestrictionList_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRestrictionList = { + "HandoverRestrictionList", + "HandoverRestrictionList", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRestrictionList_tags_1, + sizeof(asn_DEF_HandoverRestrictionList_tags_1) + /sizeof(asn_DEF_HandoverRestrictionList_tags_1[0]), /* 1 */ + asn_DEF_HandoverRestrictionList_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverRestrictionList_tags_1) + /sizeof(asn_DEF_HandoverRestrictionList_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRestrictionList_1, + 6, /* Elements count */ + &asn_SPC_HandoverRestrictionList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.h new file mode 100644 index 0000000..176bf42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/HandoverRestrictionList.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _HandoverRestrictionList_H_ +#define _HandoverRestrictionList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ForbiddenInterRATs.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct EPLMNs; +struct ForbiddenTAs; +struct ForbiddenLAs; +struct ProtocolExtensionContainer; + +/* HandoverRestrictionList */ +typedef struct HandoverRestrictionList { + PLMN_Identity_t servingPLMN; + struct EPLMNs *equivalentPLMNs; /* OPTIONAL */ + struct ForbiddenTAs *forbiddenTAs; /* OPTIONAL */ + struct ForbiddenLAs *forbiddenLAs; /* OPTIONAL */ + ForbiddenInterRATs_t *forbiddenInterRATs; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRestrictionList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverRestrictionList; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverRestrictionList_specs_1; +extern asn_TYPE_member_t asn_MBR_HandoverRestrictionList_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverRestrictionList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.c new file mode 100644 index 0000000..daf7345 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.c @@ -0,0 +1,1753 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.h new file mode 100644 index 0000000..b2a1eac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/INTEGER.h @@ -0,0 +1,126 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..1e9c6e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.c @@ -0,0 +1,526 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_ricSubscription = 201; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_ricSubscriptionDelete = 202; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_ricServiceUpdate = 203; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_ricControl = 204; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_x2Setup = 6; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_endcX2Setup = 36; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_resourceStatusReportingInitiation = 9; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_8_id_eNBConfigurationUpdate = 8; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_9_id_endcConfigurationUpdate = 37; +static const long asn_VAL_9_reject = 0; +static const long asn_VAL_10_id_reset = 7; +static const long asn_VAL_10_reject = 0; +static const long asn_VAL_11_id_ricIndication = 205; +static const long asn_VAL_11_ignore = 1; +static const long asn_VAL_12_id_ricServiceQuery = 206; +static const long asn_VAL_12_ignore = 1; +static const long asn_VAL_13_id_loadIndication = 2; +static const long asn_VAL_13_ignore = 1; +static const long asn_VAL_14_id_gNBStatusIndication = 45; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_15_id_resourceStatusReporting = 10; +static const long asn_VAL_15_ignore = 1; +static const long asn_VAL_16_id_errorIndication = 3; +static const long asn_VAL_16_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_ricSubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_ricSubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_ricServiceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_ricControl }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_X2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_X2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_x2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCX2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_endcX2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_resourceStatusReportingInitiation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENBConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_eNBConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_endcConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_ricIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_12_id_ricServiceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_LoadInformation }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_13_id_loadIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_GNBStatusIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_14_id_gNBStatusIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusUpdate }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_15_id_resourceStatusReporting }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_16_id_errorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 16, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.X2SetupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "X2SetupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ENDCX2SetupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCX2SetupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResourceStatusRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResourceStatusRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ENBConfigurationUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENBConfigurationUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ENDCConfigurationUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCConfigurationUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.LoadInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LoadInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LoadInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.GNBStatusIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GNBStatusIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GNBStatusIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResourceStatusUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResourceStatusUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 15 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 14 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 13 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 12 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 11 }, /* X2SetupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 10 }, /* ENDCX2SetupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 9 }, /* ResourceStatusRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 8 }, /* ENBConfigurationUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 7 }, /* ENDCConfigurationUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 6 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 5 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 11, -11, 4 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -12, 3 }, /* LoadInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -13, 2 }, /* GNBStatusIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -14, 1 }, /* ResourceStatusUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -15, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 16, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 16, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..4d9cf55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingMessage.h @@ -0,0 +1,144 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "X2SetupRequest.h" +#include "X2SetupResponse.h" +#include "X2SetupFailure.h" +#include "ENDCX2SetupRequest.h" +#include "ENDCX2SetupResponse.h" +#include "ENDCX2SetupFailure.h" +#include "ResourceStatusRequest.h" +#include "ResourceStatusResponse.h" +#include "ResourceStatusFailure.h" +#include "ENBConfigurationUpdate.h" +#include "ENBConfigurationUpdateAcknowledge.h" +#include "ENBConfigurationUpdateFailure.h" +#include "ENDCConfigurationUpdate.h" +#include "ENDCConfigurationUpdateAcknowledge.h" +#include "ENDCConfigurationUpdateFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "LoadInformation.h" +#include "GNBStatusIndication.h" +#include "ResourceStatusUpdate.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_X2SetupRequest, + InitiatingMessage__value_PR_ENDCX2SetupRequest, + InitiatingMessage__value_PR_ResourceStatusRequest, + InitiatingMessage__value_PR_ENBConfigurationUpdate, + InitiatingMessage__value_PR_ENDCConfigurationUpdate, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_LoadInformation, + InitiatingMessage__value_PR_GNBStatusIndication, + InitiatingMessage__value_PR_ResourceStatusUpdate, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + X2SetupRequest_t X2SetupRequest; + ENDCX2SetupRequest_t ENDCX2SetupRequest; + ResourceStatusRequest_t ResourceStatusRequest; + ENBConfigurationUpdate_t ENBConfigurationUpdate; + ENDCConfigurationUpdate_t ENDCConfigurationUpdate; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + LoadInformation_t LoadInformation; + GNBStatusIndication_t GNBStatusIndication; + ResourceStatusUpdate_t ResourceStatusUpdate; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c new file mode 100644 index 0000000..6e947b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InitiatingNodeType-EndcConfigUpdate.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_InitiatingNodeType_EndcConfigUpdate_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InitiatingNodeType_EndcConfigUpdate_1[] = { + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcConfigUpdate, choice.init_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P92, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-eNB" + }, + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcConfigUpdate, choice.init_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P93, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingNodeType_EndcConfigUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_InitiatingNodeType_EndcConfigUpdate_specs_1 = { + sizeof(struct InitiatingNodeType_EndcConfigUpdate), + offsetof(struct InitiatingNodeType_EndcConfigUpdate, _asn_ctx), + offsetof(struct InitiatingNodeType_EndcConfigUpdate, present), + sizeof(((struct InitiatingNodeType_EndcConfigUpdate *)0)->present), + asn_MAP_InitiatingNodeType_EndcConfigUpdate_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcConfigUpdate = { + "InitiatingNodeType-EndcConfigUpdate", + "InitiatingNodeType-EndcConfigUpdate", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InitiatingNodeType_EndcConfigUpdate_constr_1, CHOICE_constraint }, + asn_MBR_InitiatingNodeType_EndcConfigUpdate_1, + 2, /* Elements count */ + &asn_SPC_InitiatingNodeType_EndcConfigUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h new file mode 100644 index 0000000..ff62a67 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcConfigUpdate.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InitiatingNodeType_EndcConfigUpdate_H_ +#define _InitiatingNodeType_EndcConfigUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingNodeType_EndcConfigUpdate_PR { + InitiatingNodeType_EndcConfigUpdate_PR_NOTHING, /* No components present */ + InitiatingNodeType_EndcConfigUpdate_PR_init_eNB, + InitiatingNodeType_EndcConfigUpdate_PR_init_en_gNB + /* Extensions may appear below */ + +} InitiatingNodeType_EndcConfigUpdate_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* InitiatingNodeType-EndcConfigUpdate */ +typedef struct InitiatingNodeType_EndcConfigUpdate { + InitiatingNodeType_EndcConfigUpdate_PR present; + union InitiatingNodeType_EndcConfigUpdate_u { + struct ProtocolIE_Container *init_eNB; + struct ProtocolIE_Container *init_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingNodeType_EndcConfigUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcConfigUpdate; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingNodeType_EndcConfigUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c new file mode 100644 index 0000000..f8c3e68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InitiatingNodeType-EndcX2Removal.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_InitiatingNodeType_EndcX2Removal_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InitiatingNodeType_EndcX2Removal_1[] = { + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcX2Removal, choice.init_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P112, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-eNB" + }, + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcX2Removal, choice.init_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P113, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingNodeType_EndcX2Removal_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_InitiatingNodeType_EndcX2Removal_specs_1 = { + sizeof(struct InitiatingNodeType_EndcX2Removal), + offsetof(struct InitiatingNodeType_EndcX2Removal, _asn_ctx), + offsetof(struct InitiatingNodeType_EndcX2Removal, present), + sizeof(((struct InitiatingNodeType_EndcX2Removal *)0)->present), + asn_MAP_InitiatingNodeType_EndcX2Removal_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcX2Removal = { + "InitiatingNodeType-EndcX2Removal", + "InitiatingNodeType-EndcX2Removal", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InitiatingNodeType_EndcX2Removal_constr_1, CHOICE_constraint }, + asn_MBR_InitiatingNodeType_EndcX2Removal_1, + 2, /* Elements count */ + &asn_SPC_InitiatingNodeType_EndcX2Removal_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h new file mode 100644 index 0000000..d6b9b8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Removal.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InitiatingNodeType_EndcX2Removal_H_ +#define _InitiatingNodeType_EndcX2Removal_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingNodeType_EndcX2Removal_PR { + InitiatingNodeType_EndcX2Removal_PR_NOTHING, /* No components present */ + InitiatingNodeType_EndcX2Removal_PR_init_eNB, + InitiatingNodeType_EndcX2Removal_PR_init_en_gNB + /* Extensions may appear below */ + +} InitiatingNodeType_EndcX2Removal_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* InitiatingNodeType-EndcX2Removal */ +typedef struct InitiatingNodeType_EndcX2Removal { + InitiatingNodeType_EndcX2Removal_PR present; + union InitiatingNodeType_EndcX2Removal_u { + struct ProtocolIE_Container *init_eNB; + struct ProtocolIE_Container *init_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingNodeType_EndcX2Removal_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcX2Removal; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingNodeType_EndcX2Removal_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c new file mode 100644 index 0000000..f3298ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InitiatingNodeType-EndcX2Setup.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_InitiatingNodeType_EndcX2Setup_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InitiatingNodeType_EndcX2Setup_1[] = { + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcX2Setup, choice.init_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P85, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-eNB" + }, + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EndcX2Setup, choice.init_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P86, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "init-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingNodeType_EndcX2Setup_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_InitiatingNodeType_EndcX2Setup_specs_1 = { + sizeof(struct InitiatingNodeType_EndcX2Setup), + offsetof(struct InitiatingNodeType_EndcX2Setup, _asn_ctx), + offsetof(struct InitiatingNodeType_EndcX2Setup, present), + sizeof(((struct InitiatingNodeType_EndcX2Setup *)0)->present), + asn_MAP_InitiatingNodeType_EndcX2Setup_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcX2Setup = { + "InitiatingNodeType-EndcX2Setup", + "InitiatingNodeType-EndcX2Setup", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InitiatingNodeType_EndcX2Setup_constr_1, CHOICE_constraint }, + asn_MBR_InitiatingNodeType_EndcX2Setup_1, + 2, /* Elements count */ + &asn_SPC_InitiatingNodeType_EndcX2Setup_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h new file mode 100644 index 0000000..a4fecc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EndcX2Setup.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InitiatingNodeType_EndcX2Setup_H_ +#define _InitiatingNodeType_EndcX2Setup_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingNodeType_EndcX2Setup_PR { + InitiatingNodeType_EndcX2Setup_PR_NOTHING, /* No components present */ + InitiatingNodeType_EndcX2Setup_PR_init_eNB, + InitiatingNodeType_EndcX2Setup_PR_init_en_gNB + /* Extensions may appear below */ + +} InitiatingNodeType_EndcX2Setup_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* InitiatingNodeType-EndcX2Setup */ +typedef struct InitiatingNodeType_EndcX2Setup { + InitiatingNodeType_EndcX2Setup_PR present; + union InitiatingNodeType_EndcX2Setup_u { + struct ProtocolIE_Container *init_eNB; + struct ProtocolIE_Container *init_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingNodeType_EndcX2Setup_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EndcX2Setup; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingNodeType_EndcX2Setup_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c new file mode 100644 index 0000000..a4230c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InitiatingNodeType-EutranrCellResourceCoordination.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_InitiatingNodeType_EutranrCellResourceCoordination_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InitiatingNodeType_EutranrCellResourceCoordination_1[] = { + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EutranrCellResourceCoordination, choice.initiate_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P106, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiate-eNB" + }, + { ATF_POINTER, 0, offsetof(struct InitiatingNodeType_EutranrCellResourceCoordination, choice.initiate_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P107, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiate-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingNodeType_EutranrCellResourceCoordination_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiate-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* initiate-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_InitiatingNodeType_EutranrCellResourceCoordination_specs_1 = { + sizeof(struct InitiatingNodeType_EutranrCellResourceCoordination), + offsetof(struct InitiatingNodeType_EutranrCellResourceCoordination, _asn_ctx), + offsetof(struct InitiatingNodeType_EutranrCellResourceCoordination, present), + sizeof(((struct InitiatingNodeType_EutranrCellResourceCoordination *)0)->present), + asn_MAP_InitiatingNodeType_EutranrCellResourceCoordination_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EutranrCellResourceCoordination = { + "InitiatingNodeType-EutranrCellResourceCoordination", + "InitiatingNodeType-EutranrCellResourceCoordination", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InitiatingNodeType_EutranrCellResourceCoordination_constr_1, CHOICE_constraint }, + asn_MBR_InitiatingNodeType_EutranrCellResourceCoordination_1, + 2, /* Elements count */ + &asn_SPC_InitiatingNodeType_EutranrCellResourceCoordination_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h new file mode 100644 index 0000000..8b8d665 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InitiatingNodeType-EutranrCellResourceCoordination.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InitiatingNodeType_EutranrCellResourceCoordination_H_ +#define _InitiatingNodeType_EutranrCellResourceCoordination_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingNodeType_EutranrCellResourceCoordination_PR { + InitiatingNodeType_EutranrCellResourceCoordination_PR_NOTHING, /* No components present */ + InitiatingNodeType_EutranrCellResourceCoordination_PR_initiate_eNB, + InitiatingNodeType_EutranrCellResourceCoordination_PR_initiate_en_gNB + /* Extensions may appear below */ + +} InitiatingNodeType_EutranrCellResourceCoordination_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* InitiatingNodeType-EutranrCellResourceCoordination */ +typedef struct InitiatingNodeType_EutranrCellResourceCoordination { + InitiatingNodeType_EutranrCellResourceCoordination_PR present; + union InitiatingNodeType_EutranrCellResourceCoordination_u { + struct ProtocolIE_Container *initiate_eNB; + struct ProtocolIE_Container *initiate_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingNodeType_EutranrCellResourceCoordination_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingNodeType_EutranrCellResourceCoordination; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingNodeType_EutranrCellResourceCoordination_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c new file mode 100644 index 0000000..a48d886 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "IntegrityProtectionAlgorithms.h" + +int +IntegrityProtectionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_IntegrityProtectionAlgorithms_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 16, 16 } /* (SIZE(16..16,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_IntegrityProtectionAlgorithms_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_IntegrityProtectionAlgorithms = { + "IntegrityProtectionAlgorithms", + "IntegrityProtectionAlgorithms", + &asn_OP_BIT_STRING, + asn_DEF_IntegrityProtectionAlgorithms_tags_1, + sizeof(asn_DEF_IntegrityProtectionAlgorithms_tags_1) + /sizeof(asn_DEF_IntegrityProtectionAlgorithms_tags_1[0]), /* 1 */ + asn_DEF_IntegrityProtectionAlgorithms_tags_1, /* Same as above */ + sizeof(asn_DEF_IntegrityProtectionAlgorithms_tags_1) + /sizeof(asn_DEF_IntegrityProtectionAlgorithms_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_IntegrityProtectionAlgorithms_constr_1, IntegrityProtectionAlgorithms_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h new file mode 100644 index 0000000..ddcae11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/IntegrityProtectionAlgorithms.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _IntegrityProtectionAlgorithms_H_ +#define _IntegrityProtectionAlgorithms_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* IntegrityProtectionAlgorithms */ +typedef BIT_STRING_t IntegrityProtectionAlgorithms_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_IntegrityProtectionAlgorithms_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_IntegrityProtectionAlgorithms; +asn_struct_free_f IntegrityProtectionAlgorithms_free; +asn_struct_print_f IntegrityProtectionAlgorithms_print; +asn_constr_check_f IntegrityProtectionAlgorithms_constraint; +ber_type_decoder_f IntegrityProtectionAlgorithms_decode_ber; +der_type_encoder_f IntegrityProtectionAlgorithms_encode_der; +xer_type_decoder_f IntegrityProtectionAlgorithms_decode_xer; +xer_type_encoder_f IntegrityProtectionAlgorithms_encode_xer; +per_type_decoder_f IntegrityProtectionAlgorithms_decode_uper; +per_type_encoder_f IntegrityProtectionAlgorithms_encode_uper; +per_type_decoder_f IntegrityProtectionAlgorithms_decode_aper; +per_type_encoder_f IntegrityProtectionAlgorithms_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _IntegrityProtectionAlgorithms_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.c new file mode 100644 index 0000000..8a35c7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Interface-ID.h" + +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +asn_per_constraints_t asn_PER_type_Interface_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Interface_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct Interface_ID, choice.global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, + { ATF_POINTER, 0, offsetof(struct Interface_ID, choice.global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Interface_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global-gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_Interface_ID_specs_1 = { + sizeof(struct Interface_ID), + offsetof(struct Interface_ID, _asn_ctx), + offsetof(struct Interface_ID, present), + sizeof(((struct Interface_ID *)0)->present), + asn_MAP_Interface_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Interface_ID = { + "Interface-ID", + "Interface-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Interface_ID_constr_1, CHOICE_constraint }, + asn_MBR_Interface_ID_1, + 2, /* Elements count */ + &asn_SPC_Interface_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.h new file mode 100644 index 0000000..9104c46 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Interface-ID.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Interface_ID_H_ +#define _Interface_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Interface_ID_PR { + Interface_ID_PR_NOTHING, /* No components present */ + Interface_ID_PR_global_eNB_ID, + Interface_ID_PR_global_gNB_ID + /* Extensions may appear below */ + +} Interface_ID_PR; + +/* Forward declarations */ +struct GlobalENB_ID; +struct GlobalGNB_ID; + +/* Interface-ID */ +typedef struct Interface_ID { + Interface_ID_PR present; + union Interface_ID_u { + struct GlobalENB_ID *global_eNB_ID; + struct GlobalGNB_ID *global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Interface_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Interface_ID; +extern asn_CHOICE_specifics_t asn_SPC_Interface_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_Interface_ID_1[2]; +extern asn_per_constraints_t asn_PER_type_Interface_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Interface_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.c new file mode 100644 index 0000000..901c182 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceDirection.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_InterfaceDirection_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_InterfaceDirection_value2enum_1[] = { + { 0, 8, "incoming" }, + { 1, 8, "outgoing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_InterfaceDirection_enum2value_1[] = { + 0, /* incoming(0) */ + 1 /* outgoing(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_InterfaceDirection_specs_1 = { + asn_MAP_InterfaceDirection_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_InterfaceDirection_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_InterfaceDirection_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceDirection = { + "InterfaceDirection", + "InterfaceDirection", + &asn_OP_NativeEnumerated, + asn_DEF_InterfaceDirection_tags_1, + sizeof(asn_DEF_InterfaceDirection_tags_1) + /sizeof(asn_DEF_InterfaceDirection_tags_1[0]), /* 1 */ + asn_DEF_InterfaceDirection_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceDirection_tags_1) + /sizeof(asn_DEF_InterfaceDirection_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InterfaceDirection_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_InterfaceDirection_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.h new file mode 100644 index 0000000..07d42b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceDirection.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceDirection_H_ +#define _InterfaceDirection_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceDirection { + InterfaceDirection_incoming = 0, + InterfaceDirection_outgoing = 1 + /* + * Enumeration is extensible + */ +} e_InterfaceDirection; + +/* InterfaceDirection */ +typedef long InterfaceDirection_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_InterfaceDirection_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_InterfaceDirection; +extern const asn_INTEGER_specifics_t asn_SPC_InterfaceDirection_specs_1; +asn_struct_free_f InterfaceDirection_free; +asn_struct_print_f InterfaceDirection_print; +asn_constr_check_f InterfaceDirection_constraint; +ber_type_decoder_f InterfaceDirection_decode_ber; +der_type_encoder_f InterfaceDirection_encode_der; +xer_type_decoder_f InterfaceDirection_decode_xer; +xer_type_encoder_f InterfaceDirection_encode_xer; +per_type_decoder_f InterfaceDirection_decode_uper; +per_type_encoder_f InterfaceDirection_encode_uper; +per_type_decoder_f InterfaceDirection_decode_aper; +per_type_encoder_f InterfaceDirection_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceDirection_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.c new file mode 100644 index 0000000..245749a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_InterfaceMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceMessage = { + "InterfaceMessage", + "InterfaceMessage", + &asn_OP_OCTET_STRING, + asn_DEF_InterfaceMessage_tags_1, + sizeof(asn_DEF_InterfaceMessage_tags_1) + /sizeof(asn_DEF_InterfaceMessage_tags_1[0]), /* 1 */ + asn_DEF_InterfaceMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceMessage_tags_1) + /sizeof(asn_DEF_InterfaceMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.h new file mode 100644 index 0000000..faba3e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessage.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceMessage_H_ +#define _InterfaceMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceMessage */ +typedef OCTET_STRING_t InterfaceMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceMessage; +asn_struct_free_f InterfaceMessage_free; +asn_struct_print_f InterfaceMessage_print; +asn_constr_check_f InterfaceMessage_constraint; +ber_type_decoder_f InterfaceMessage_decode_ber; +der_type_encoder_f InterfaceMessage_encode_der; +xer_type_decoder_f InterfaceMessage_decode_xer; +xer_type_encoder_f InterfaceMessage_encode_xer; +per_type_decoder_f InterfaceMessage_decode_uper; +per_type_encoder_f InterfaceMessage_encode_uper; +per_type_decoder_f InterfaceMessage_decode_aper; +per_type_encoder_f InterfaceMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.c new file mode 100644 index 0000000..bf50893 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceMessageType.h" + +asn_TYPE_member_t asn_MBR_InterfaceMessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceMessageType, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceMessageType, typeOfMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceMessageType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceMessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* typeOfMessage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceMessageType_specs_1 = { + sizeof(struct InterfaceMessageType), + offsetof(struct InterfaceMessageType, _asn_ctx), + asn_MAP_InterfaceMessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceMessageType = { + "InterfaceMessageType", + "InterfaceMessageType", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceMessageType_tags_1, + sizeof(asn_DEF_InterfaceMessageType_tags_1) + /sizeof(asn_DEF_InterfaceMessageType_tags_1[0]), /* 1 */ + asn_DEF_InterfaceMessageType_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceMessageType_tags_1) + /sizeof(asn_DEF_InterfaceMessageType_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceMessageType_1, + 2, /* Elements count */ + &asn_SPC_InterfaceMessageType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.h new file mode 100644 index 0000000..628ec4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceMessageType.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceMessageType_H_ +#define _InterfaceMessageType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TypeOfMessage.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceMessageType */ +typedef struct InterfaceMessageType { + ProcedureCode_t procedureCode; + TypeOfMessage_t typeOfMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceMessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceMessageType; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceMessageType_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceMessageType_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceMessageType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c new file mode 100644 index 0000000..4e9aa7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceProtocolIE-ID.h" + +int +InterfaceProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using ProtocolIE_ID, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_InterfaceProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_ID = { + "InterfaceProtocolIE-ID", + "InterfaceProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_InterfaceProtocolIE_ID_tags_1, + sizeof(asn_DEF_InterfaceProtocolIE_ID_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_InterfaceProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceProtocolIE_ID_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InterfaceProtocolIE_ID_constr_1, InterfaceProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h new file mode 100644 index 0000000..c2054f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceProtocolIE_ID_H_ +#define _InterfaceProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceProtocolIE-ID */ +typedef ProtocolIE_ID_t InterfaceProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_ID; +asn_struct_free_f InterfaceProtocolIE_ID_free; +asn_struct_print_f InterfaceProtocolIE_ID_print; +asn_constr_check_f InterfaceProtocolIE_ID_constraint; +ber_type_decoder_f InterfaceProtocolIE_ID_decode_ber; +der_type_encoder_f InterfaceProtocolIE_ID_encode_der; +xer_type_decoder_f InterfaceProtocolIE_ID_decode_xer; +xer_type_encoder_f InterfaceProtocolIE_ID_encode_xer; +per_type_decoder_f InterfaceProtocolIE_ID_decode_uper; +per_type_encoder_f InterfaceProtocolIE_ID_encode_uper; +per_type_decoder_f InterfaceProtocolIE_ID_decode_aper; +per_type_encoder_f InterfaceProtocolIE_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c new file mode 100644 index 0000000..3da4baf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.c @@ -0,0 +1,88 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceProtocolIE-Item.h" + +asn_TYPE_member_t asn_MBR_InterfaceProtocolIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Item, interfaceProtocolIE_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceProtocolIE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Item, interfaceProtocolIE_Test), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceProtocolIE_Test, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceProtocolIE-Test" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Item, interfaceProtocolIE_Value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_InterfaceProtocolIE_Value, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceProtocolIE-Value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceProtocolIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceProtocolIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interfaceProtocolIE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceProtocolIE-Test */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* interfaceProtocolIE-Value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceProtocolIE_Item_specs_1 = { + sizeof(struct InterfaceProtocolIE_Item), + offsetof(struct InterfaceProtocolIE_Item, _asn_ctx), + asn_MAP_InterfaceProtocolIE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Item = { + "InterfaceProtocolIE-Item", + "InterfaceProtocolIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceProtocolIE_Item_tags_1, + sizeof(asn_DEF_InterfaceProtocolIE_Item_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_Item_tags_1[0]), /* 1 */ + asn_DEF_InterfaceProtocolIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceProtocolIE_Item_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceProtocolIE_Item_1, + 3, /* Elements count */ + &asn_SPC_InterfaceProtocolIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h new file mode 100644 index 0000000..556d666 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceProtocolIE_Item_H_ +#define _InterfaceProtocolIE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "InterfaceProtocolIE-ID.h" +#include "InterfaceProtocolIE-Test.h" +#include "InterfaceProtocolIE-Value.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceProtocolIE-Item */ +typedef struct InterfaceProtocolIE_Item { + InterfaceProtocolIE_ID_t interfaceProtocolIE_ID; + InterfaceProtocolIE_Test_t interfaceProtocolIE_Test; + InterfaceProtocolIE_Value_t interfaceProtocolIE_Value; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceProtocolIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceProtocolIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceProtocolIE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceProtocolIE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c new file mode 100644 index 0000000..138244b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceProtocolIE-Test.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_Test_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_InterfaceProtocolIE_Test_value2enum_1[] = { + { 0, 5, "equal" }, + { 1, 11, "greaterthan" }, + { 2, 8, "lessthan" }, + { 3, 8, "contains" }, + { 4, 7, "present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_InterfaceProtocolIE_Test_enum2value_1[] = { + 3, /* contains(3) */ + 0, /* equal(0) */ + 1, /* greaterthan(1) */ + 2, /* lessthan(2) */ + 4 /* present(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_InterfaceProtocolIE_Test_specs_1 = { + asn_MAP_InterfaceProtocolIE_Test_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_InterfaceProtocolIE_Test_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_InterfaceProtocolIE_Test_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Test = { + "InterfaceProtocolIE-Test", + "InterfaceProtocolIE-Test", + &asn_OP_NativeEnumerated, + asn_DEF_InterfaceProtocolIE_Test_tags_1, + sizeof(asn_DEF_InterfaceProtocolIE_Test_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_Test_tags_1[0]), /* 1 */ + asn_DEF_InterfaceProtocolIE_Test_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceProtocolIE_Test_tags_1) + /sizeof(asn_DEF_InterfaceProtocolIE_Test_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InterfaceProtocolIE_Test_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_InterfaceProtocolIE_Test_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h new file mode 100644 index 0000000..8618276 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Test.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceProtocolIE_Test_H_ +#define _InterfaceProtocolIE_Test_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceProtocolIE_Test { + InterfaceProtocolIE_Test_equal = 0, + InterfaceProtocolIE_Test_greaterthan = 1, + InterfaceProtocolIE_Test_lessthan = 2, + InterfaceProtocolIE_Test_contains = 3, + InterfaceProtocolIE_Test_present = 4 + /* + * Enumeration is extensible + */ +} e_InterfaceProtocolIE_Test; + +/* InterfaceProtocolIE-Test */ +typedef long InterfaceProtocolIE_Test_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_Test_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Test; +extern const asn_INTEGER_specifics_t asn_SPC_InterfaceProtocolIE_Test_specs_1; +asn_struct_free_f InterfaceProtocolIE_Test_free; +asn_struct_print_f InterfaceProtocolIE_Test_print; +asn_constr_check_f InterfaceProtocolIE_Test_constraint; +ber_type_decoder_f InterfaceProtocolIE_Test_decode_ber; +der_type_encoder_f InterfaceProtocolIE_Test_encode_der; +xer_type_decoder_f InterfaceProtocolIE_Test_decode_xer; +xer_type_encoder_f InterfaceProtocolIE_Test_encode_xer; +per_type_decoder_f InterfaceProtocolIE_Test_decode_uper; +per_type_encoder_f InterfaceProtocolIE_Test_encode_uper; +per_type_decoder_f InterfaceProtocolIE_Test_decode_aper; +per_type_encoder_f InterfaceProtocolIE_Test_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceProtocolIE_Test_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c new file mode 100644 index 0000000..5fc2293 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.c @@ -0,0 +1,110 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfaceProtocolIE-Value.h" + +asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_Value_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_InterfaceProtocolIE_Value_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Value, choice.valueInt), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueInt" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Value, choice.valueEnum), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueEnum" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Value, choice.valueBool), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBool" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Value, choice.valueBitS), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBitS" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceProtocolIE_Value, choice.valueOctS), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueOctS" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceProtocolIE_Value_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueEnum */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueBool */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* valueOctS */ +}; +asn_CHOICE_specifics_t asn_SPC_InterfaceProtocolIE_Value_specs_1 = { + sizeof(struct InterfaceProtocolIE_Value), + offsetof(struct InterfaceProtocolIE_Value, _asn_ctx), + offsetof(struct InterfaceProtocolIE_Value, present), + sizeof(((struct InterfaceProtocolIE_Value *)0)->present), + asn_MAP_InterfaceProtocolIE_Value_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Value = { + "InterfaceProtocolIE-Value", + "InterfaceProtocolIE-Value", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InterfaceProtocolIE_Value_constr_1, CHOICE_constraint }, + asn_MBR_InterfaceProtocolIE_Value_1, + 5, /* Elements count */ + &asn_SPC_InterfaceProtocolIE_Value_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h new file mode 100644 index 0000000..b2ffe8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfaceProtocolIE-Value.h @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfaceProtocolIE_Value_H_ +#define _InterfaceProtocolIE_Value_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "BOOLEAN.h" +#include "BIT_STRING.h" +#include "OCTET_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceProtocolIE_Value_PR { + InterfaceProtocolIE_Value_PR_NOTHING, /* No components present */ + InterfaceProtocolIE_Value_PR_valueInt, + InterfaceProtocolIE_Value_PR_valueEnum, + InterfaceProtocolIE_Value_PR_valueBool, + InterfaceProtocolIE_Value_PR_valueBitS, + InterfaceProtocolIE_Value_PR_valueOctS + /* Extensions may appear below */ + +} InterfaceProtocolIE_Value_PR; + +/* InterfaceProtocolIE-Value */ +typedef struct InterfaceProtocolIE_Value { + InterfaceProtocolIE_Value_PR present; + union InterfaceProtocolIE_Value_u { + long valueInt; + long valueEnum; + BOOLEAN_t valueBool; + BIT_STRING_t valueBitS; + OCTET_STRING_t valueOctS; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceProtocolIE_Value_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceProtocolIE_Value; +extern asn_CHOICE_specifics_t asn_SPC_InterfaceProtocolIE_Value_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceProtocolIE_Value_1[5]; +extern asn_per_constraints_t asn_PER_type_InterfaceProtocolIE_Value_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceProtocolIE_Value_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.c new file mode 100644 index 0000000..cee74d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InterfacesToTrace.h" + +int +InterfacesToTrace_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_InterfacesToTrace_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_InterfacesToTrace_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfacesToTrace = { + "InterfacesToTrace", + "InterfacesToTrace", + &asn_OP_BIT_STRING, + asn_DEF_InterfacesToTrace_tags_1, + sizeof(asn_DEF_InterfacesToTrace_tags_1) + /sizeof(asn_DEF_InterfacesToTrace_tags_1[0]), /* 1 */ + asn_DEF_InterfacesToTrace_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfacesToTrace_tags_1) + /sizeof(asn_DEF_InterfacesToTrace_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InterfacesToTrace_constr_1, InterfacesToTrace_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.h new file mode 100644 index 0000000..1f4b5e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InterfacesToTrace.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InterfacesToTrace_H_ +#define _InterfacesToTrace_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfacesToTrace */ +typedef BIT_STRING_t InterfacesToTrace_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_InterfacesToTrace_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_InterfacesToTrace; +asn_struct_free_f InterfacesToTrace_free; +asn_struct_print_f InterfacesToTrace_print; +asn_constr_check_f InterfacesToTrace_constraint; +ber_type_decoder_f InterfacesToTrace_decode_ber; +der_type_encoder_f InterfacesToTrace_encode_der; +xer_type_decoder_f InterfacesToTrace_decode_xer; +xer_type_encoder_f InterfacesToTrace_encode_xer; +per_type_decoder_f InterfacesToTrace_decode_uper; +per_type_encoder_f InterfacesToTrace_encode_uper; +per_type_decoder_f InterfacesToTrace_decode_aper; +per_type_encoder_f InterfacesToTrace_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfacesToTrace_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.c new file mode 100644 index 0000000..9e8d0b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "InvokeIndication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_InvokeIndication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_InvokeIndication_value2enum_1[] = { + { 0, 15, "abs-information" }, + { 1, 23, "naics-information-start" }, + { 2, 22, "naics-information-stop" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_InvokeIndication_enum2value_1[] = { + 0, /* abs-information(0) */ + 1, /* naics-information-start(1) */ + 2 /* naics-information-stop(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_InvokeIndication_specs_1 = { + asn_MAP_InvokeIndication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_InvokeIndication_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_InvokeIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InvokeIndication = { + "InvokeIndication", + "InvokeIndication", + &asn_OP_NativeEnumerated, + asn_DEF_InvokeIndication_tags_1, + sizeof(asn_DEF_InvokeIndication_tags_1) + /sizeof(asn_DEF_InvokeIndication_tags_1[0]), /* 1 */ + asn_DEF_InvokeIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_InvokeIndication_tags_1) + /sizeof(asn_DEF_InvokeIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InvokeIndication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_InvokeIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.h new file mode 100644 index 0000000..f3aac49 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/InvokeIndication.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _InvokeIndication_H_ +#define _InvokeIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InvokeIndication { + InvokeIndication_abs_information = 0, + /* + * Enumeration is extensible + */ + InvokeIndication_naics_information_start = 1, + InvokeIndication_naics_information_stop = 2 +} e_InvokeIndication; + +/* InvokeIndication */ +typedef long InvokeIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_InvokeIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_InvokeIndication; +extern const asn_INTEGER_specifics_t asn_SPC_InvokeIndication_specs_1; +asn_struct_free_f InvokeIndication_free; +asn_struct_print_f InvokeIndication_print; +asn_constr_check_f InvokeIndication_constraint; +ber_type_decoder_f InvokeIndication_decode_ber; +der_type_encoder_f InvokeIndication_encode_der; +xer_type_decoder_f InvokeIndication_decode_xer; +xer_type_encoder_f InvokeIndication_encode_xer; +per_type_decoder_f InvokeIndication_decode_uper; +per_type_encoder_f InvokeIndication_encode_uper; +per_type_decoder_f InvokeIndication_decode_aper; +per_type_encoder_f InvokeIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InvokeIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.c new file mode 100644 index 0000000..8960c8e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Key-eNodeB-Star.h" + +int +Key_eNodeB_Star_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Key_eNodeB_Star_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 256, 256 } /* (SIZE(256..256)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Key_eNodeB_Star_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Key_eNodeB_Star = { + "Key-eNodeB-Star", + "Key-eNodeB-Star", + &asn_OP_BIT_STRING, + asn_DEF_Key_eNodeB_Star_tags_1, + sizeof(asn_DEF_Key_eNodeB_Star_tags_1) + /sizeof(asn_DEF_Key_eNodeB_Star_tags_1[0]), /* 1 */ + asn_DEF_Key_eNodeB_Star_tags_1, /* Same as above */ + sizeof(asn_DEF_Key_eNodeB_Star_tags_1) + /sizeof(asn_DEF_Key_eNodeB_Star_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Key_eNodeB_Star_constr_1, Key_eNodeB_Star_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.h new file mode 100644 index 0000000..bca1cc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Key-eNodeB-Star.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Key_eNodeB_Star_H_ +#define _Key_eNodeB_Star_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Key-eNodeB-Star */ +typedef BIT_STRING_t Key_eNodeB_Star_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Key_eNodeB_Star_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Key_eNodeB_Star; +asn_struct_free_f Key_eNodeB_Star_free; +asn_struct_print_f Key_eNodeB_Star_print; +asn_constr_check_f Key_eNodeB_Star_constraint; +ber_type_decoder_f Key_eNodeB_Star_decode_ber; +der_type_encoder_f Key_eNodeB_Star_encode_der; +xer_type_decoder_f Key_eNodeB_Star_decode_xer; +xer_type_encoder_f Key_eNodeB_Star_encode_xer; +per_type_decoder_f Key_eNodeB_Star_decode_uper; +per_type_encoder_f Key_eNodeB_Star_encode_uper; +per_type_decoder_f Key_eNodeB_Star_decode_aper; +per_type_encoder_f Key_eNodeB_Star_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Key_eNodeB_Star_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.c new file mode 100644 index 0000000..ade34e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LAC.h" + +int +LAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_LAC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_LAC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LAC = { + "LAC", + "LAC", + &asn_OP_OCTET_STRING, + asn_DEF_LAC_tags_1, + sizeof(asn_DEF_LAC_tags_1) + /sizeof(asn_DEF_LAC_tags_1[0]), /* 1 */ + asn_DEF_LAC_tags_1, /* Same as above */ + sizeof(asn_DEF_LAC_tags_1) + /sizeof(asn_DEF_LAC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_LAC_constr_1, LAC_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.h new file mode 100644 index 0000000..a1fecba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LAC.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LAC_H_ +#define _LAC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LAC */ +typedef OCTET_STRING_t LAC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_LAC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_LAC; +asn_struct_free_f LAC_free; +asn_struct_print_f LAC_print; +asn_constr_check_f LAC_constraint; +ber_type_decoder_f LAC_decode_ber; +der_type_encoder_f LAC_encode_der; +xer_type_decoder_f LAC_decode_xer; +xer_type_encoder_f LAC_encode_xer; +per_type_decoder_f LAC_decode_uper; +per_type_encoder_f LAC_encode_uper; +per_type_decoder_f LAC_decode_aper; +per_type_encoder_f LAC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LAC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.c new file mode 100644 index 0000000..412b127 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LCID.h" + +int +LCID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_LCID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 1, 32 } /* (1..32,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_LCID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LCID = { + "LCID", + "LCID", + &asn_OP_NativeInteger, + asn_DEF_LCID_tags_1, + sizeof(asn_DEF_LCID_tags_1) + /sizeof(asn_DEF_LCID_tags_1[0]), /* 1 */ + asn_DEF_LCID_tags_1, /* Same as above */ + sizeof(asn_DEF_LCID_tags_1) + /sizeof(asn_DEF_LCID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_LCID_constr_1, LCID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.h new file mode 100644 index 0000000..00b43e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LCID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LCID_H_ +#define _LCID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LCID */ +typedef long LCID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_LCID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_LCID; +asn_struct_free_f LCID_free; +asn_struct_print_f LCID_print; +asn_constr_check_f LCID_constraint; +ber_type_decoder_f LCID_decode_ber; +der_type_encoder_f LCID_encode_der; +xer_type_decoder_f LCID_decode_xer; +xer_type_encoder_f LCID_encode_xer; +per_type_decoder_f LCID_decode_uper; +per_type_encoder_f LCID_encode_uper; +per_type_decoder_f LCID_decode_aper; +per_type_encoder_f LCID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LCID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.c new file mode 100644 index 0000000..92aa3d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LHN-ID.h" + +int +LHN_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 32 && size <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_LHN_ID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 32, 256 } /* (SIZE(32..256)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_LHN_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LHN_ID = { + "LHN-ID", + "LHN-ID", + &asn_OP_OCTET_STRING, + asn_DEF_LHN_ID_tags_1, + sizeof(asn_DEF_LHN_ID_tags_1) + /sizeof(asn_DEF_LHN_ID_tags_1[0]), /* 1 */ + asn_DEF_LHN_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_LHN_ID_tags_1) + /sizeof(asn_DEF_LHN_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_LHN_ID_constr_1, LHN_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.h new file mode 100644 index 0000000..3f32bbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LHN-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LHN_ID_H_ +#define _LHN_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LHN-ID */ +typedef OCTET_STRING_t LHN_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_LHN_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_LHN_ID; +asn_struct_free_f LHN_ID_free; +asn_struct_print_f LHN_ID_print; +asn_constr_check_f LHN_ID_constraint; +ber_type_decoder_f LHN_ID_decode_ber; +der_type_encoder_f LHN_ID_encode_der; +xer_type_decoder_f LHN_ID_decode_xer; +xer_type_encoder_f LHN_ID_encode_xer; +per_type_decoder_f LHN_ID_decode_uper; +per_type_encoder_f LHN_ID_encode_uper; +per_type_decoder_f LHN_ID_decode_aper; +per_type_encoder_f LHN_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LHN_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.c new file mode 100644 index 0000000..fcb9e8c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LastVisitedCell-Item.h" + +#include "LastVisitedEUTRANCellInformation.h" +#include "LastVisitedGERANCellInformation.h" +asn_per_constraints_t asn_PER_type_LastVisitedCell_Item_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_LastVisitedCell_Item_1[] = { + { ATF_POINTER, 0, offsetof(struct LastVisitedCell_Item, choice.e_UTRAN_Cell), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LastVisitedEUTRANCellInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-UTRAN-Cell" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedCell_Item, choice.uTRAN_Cell), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LastVisitedUTRANCellInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uTRAN-Cell" + }, + { ATF_POINTER, 0, offsetof(struct LastVisitedCell_Item, choice.gERAN_Cell), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_LastVisitedGERANCellInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gERAN-Cell" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedCell_Item, choice.nG_RAN_Cell), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LastVisitedNGRANCellInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nG-RAN-Cell" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_LastVisitedCell_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-UTRAN-Cell */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uTRAN-Cell */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gERAN-Cell */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nG-RAN-Cell */ +}; +asn_CHOICE_specifics_t asn_SPC_LastVisitedCell_Item_specs_1 = { + sizeof(struct LastVisitedCell_Item), + offsetof(struct LastVisitedCell_Item, _asn_ctx), + offsetof(struct LastVisitedCell_Item, present), + sizeof(((struct LastVisitedCell_Item *)0)->present), + asn_MAP_LastVisitedCell_Item_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedCell_Item = { + "LastVisitedCell-Item", + "LastVisitedCell-Item", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_LastVisitedCell_Item_constr_1, CHOICE_constraint }, + asn_MBR_LastVisitedCell_Item_1, + 4, /* Elements count */ + &asn_SPC_LastVisitedCell_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.h new file mode 100644 index 0000000..33b2f02 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedCell-Item.h @@ -0,0 +1,84 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LastVisitedCell_Item_H_ +#define _LastVisitedCell_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "LastVisitedUTRANCellInformation.h" +#include "LastVisitedNGRANCellInformation.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LastVisitedCell_Item_PR { + LastVisitedCell_Item_PR_NOTHING, /* No components present */ + LastVisitedCell_Item_PR_e_UTRAN_Cell, + LastVisitedCell_Item_PR_uTRAN_Cell, + LastVisitedCell_Item_PR_gERAN_Cell, + /* Extensions may appear below */ + LastVisitedCell_Item_PR_nG_RAN_Cell +} LastVisitedCell_Item_PR; + +/* Forward declarations */ +struct LastVisitedEUTRANCellInformation; +struct LastVisitedGERANCellInformation; + +/* LastVisitedCell-Item */ +typedef struct LastVisitedCell_Item { + LastVisitedCell_Item_PR present; + union LastVisitedCell_Item_u { + struct LastVisitedEUTRANCellInformation *e_UTRAN_Cell; + LastVisitedUTRANCellInformation_t uTRAN_Cell; + struct LastVisitedGERANCellInformation *gERAN_Cell; + /* + * This type is extensible, + * possible extensions are below. + */ + LastVisitedNGRANCellInformation_t nG_RAN_Cell; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LastVisitedCell_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedCell_Item; +extern asn_CHOICE_specifics_t asn_SPC_LastVisitedCell_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_LastVisitedCell_Item_1[4]; +extern asn_per_constraints_t asn_PER_type_LastVisitedCell_Item_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _LastVisitedCell_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c new file mode 100644 index 0000000..8cb017d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LastVisitedEUTRANCellInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_LastVisitedEUTRANCellInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation, global_Cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-Cell-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation, cellType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellType" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation, time_UE_StayedInCell), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Time_UE_StayedInCell, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "time-UE-StayedInCell" + }, + { ATF_POINTER, 1, offsetof(struct LastVisitedEUTRANCellInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P157, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_LastVisitedEUTRANCellInformation_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_LastVisitedEUTRANCellInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LastVisitedEUTRANCellInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-Cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* time-UE-StayedInCell */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LastVisitedEUTRANCellInformation_specs_1 = { + sizeof(struct LastVisitedEUTRANCellInformation), + offsetof(struct LastVisitedEUTRANCellInformation, _asn_ctx), + asn_MAP_LastVisitedEUTRANCellInformation_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_LastVisitedEUTRANCellInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedEUTRANCellInformation = { + "LastVisitedEUTRANCellInformation", + "LastVisitedEUTRANCellInformation", + &asn_OP_SEQUENCE, + asn_DEF_LastVisitedEUTRANCellInformation_tags_1, + sizeof(asn_DEF_LastVisitedEUTRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedEUTRANCellInformation_tags_1[0]), /* 1 */ + asn_DEF_LastVisitedEUTRANCellInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_LastVisitedEUTRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedEUTRANCellInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LastVisitedEUTRANCellInformation_1, + 4, /* Elements count */ + &asn_SPC_LastVisitedEUTRANCellInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h new file mode 100644 index 0000000..33db1e4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedEUTRANCellInformation.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LastVisitedEUTRANCellInformation_H_ +#define _LastVisitedEUTRANCellInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "CellType.h" +#include "Time-UE-StayedInCell.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* LastVisitedEUTRANCellInformation */ +typedef struct LastVisitedEUTRANCellInformation { + ECGI_t global_Cell_ID; + CellType_t cellType; + Time_UE_StayedInCell_t time_UE_StayedInCell; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LastVisitedEUTRANCellInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedEUTRANCellInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_LastVisitedEUTRANCellInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_LastVisitedEUTRANCellInformation_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _LastVisitedEUTRANCellInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c new file mode 100644 index 0000000..8d0e09b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.c @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LastVisitedGERANCellInformation.h" + +asn_per_constraints_t asn_PER_type_LastVisitedGERANCellInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_LastVisitedGERANCellInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedGERANCellInformation, choice.undefined), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "undefined" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_LastVisitedGERANCellInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* undefined */ +}; +asn_CHOICE_specifics_t asn_SPC_LastVisitedGERANCellInformation_specs_1 = { + sizeof(struct LastVisitedGERANCellInformation), + offsetof(struct LastVisitedGERANCellInformation, _asn_ctx), + offsetof(struct LastVisitedGERANCellInformation, present), + sizeof(((struct LastVisitedGERANCellInformation *)0)->present), + asn_MAP_LastVisitedGERANCellInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedGERANCellInformation = { + "LastVisitedGERANCellInformation", + "LastVisitedGERANCellInformation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_LastVisitedGERANCellInformation_constr_1, CHOICE_constraint }, + asn_MBR_LastVisitedGERANCellInformation_1, + 1, /* Elements count */ + &asn_SPC_LastVisitedGERANCellInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h new file mode 100644 index 0000000..21fc9a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedGERANCellInformation.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LastVisitedGERANCellInformation_H_ +#define _LastVisitedGERANCellInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LastVisitedGERANCellInformation_PR { + LastVisitedGERANCellInformation_PR_NOTHING, /* No components present */ + LastVisitedGERANCellInformation_PR_undefined + /* Extensions may appear below */ + +} LastVisitedGERANCellInformation_PR; + +/* LastVisitedGERANCellInformation */ +typedef struct LastVisitedGERANCellInformation { + LastVisitedGERANCellInformation_PR present; + union LastVisitedGERANCellInformation_u { + NULL_t undefined; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LastVisitedGERANCellInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedGERANCellInformation; +extern asn_CHOICE_specifics_t asn_SPC_LastVisitedGERANCellInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_LastVisitedGERANCellInformation_1[1]; +extern asn_per_constraints_t asn_PER_type_LastVisitedGERANCellInformation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _LastVisitedGERANCellInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c new file mode 100644 index 0000000..e0e480f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LastVisitedNGRANCellInformation.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_LastVisitedNGRANCellInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedNGRANCellInformation = { + "LastVisitedNGRANCellInformation", + "LastVisitedNGRANCellInformation", + &asn_OP_OCTET_STRING, + asn_DEF_LastVisitedNGRANCellInformation_tags_1, + sizeof(asn_DEF_LastVisitedNGRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedNGRANCellInformation_tags_1[0]), /* 1 */ + asn_DEF_LastVisitedNGRANCellInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_LastVisitedNGRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedNGRANCellInformation_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h new file mode 100644 index 0000000..8e93c0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedNGRANCellInformation.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LastVisitedNGRANCellInformation_H_ +#define _LastVisitedNGRANCellInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LastVisitedNGRANCellInformation */ +typedef OCTET_STRING_t LastVisitedNGRANCellInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedNGRANCellInformation; +asn_struct_free_f LastVisitedNGRANCellInformation_free; +asn_struct_print_f LastVisitedNGRANCellInformation_print; +asn_constr_check_f LastVisitedNGRANCellInformation_constraint; +ber_type_decoder_f LastVisitedNGRANCellInformation_decode_ber; +der_type_encoder_f LastVisitedNGRANCellInformation_encode_der; +xer_type_decoder_f LastVisitedNGRANCellInformation_decode_xer; +xer_type_encoder_f LastVisitedNGRANCellInformation_encode_xer; +per_type_decoder_f LastVisitedNGRANCellInformation_decode_uper; +per_type_encoder_f LastVisitedNGRANCellInformation_encode_uper; +per_type_decoder_f LastVisitedNGRANCellInformation_decode_aper; +per_type_encoder_f LastVisitedNGRANCellInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LastVisitedNGRANCellInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c new file mode 100644 index 0000000..1133af0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LastVisitedUTRANCellInformation.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_LastVisitedUTRANCellInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedUTRANCellInformation = { + "LastVisitedUTRANCellInformation", + "LastVisitedUTRANCellInformation", + &asn_OP_OCTET_STRING, + asn_DEF_LastVisitedUTRANCellInformation_tags_1, + sizeof(asn_DEF_LastVisitedUTRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedUTRANCellInformation_tags_1[0]), /* 1 */ + asn_DEF_LastVisitedUTRANCellInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_LastVisitedUTRANCellInformation_tags_1) + /sizeof(asn_DEF_LastVisitedUTRANCellInformation_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h new file mode 100644 index 0000000..f7d8bd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LastVisitedUTRANCellInformation.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LastVisitedUTRANCellInformation_H_ +#define _LastVisitedUTRANCellInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LastVisitedUTRANCellInformation */ +typedef OCTET_STRING_t LastVisitedUTRANCellInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedUTRANCellInformation; +asn_struct_free_f LastVisitedUTRANCellInformation_free; +asn_struct_print_f LastVisitedUTRANCellInformation_print; +asn_constr_check_f LastVisitedUTRANCellInformation_constraint; +ber_type_decoder_f LastVisitedUTRANCellInformation_decode_ber; +der_type_encoder_f LastVisitedUTRANCellInformation_encode_der; +xer_type_decoder_f LastVisitedUTRANCellInformation_decode_xer; +xer_type_encoder_f LastVisitedUTRANCellInformation_encode_xer; +per_type_decoder_f LastVisitedUTRANCellInformation_decode_uper; +per_type_encoder_f LastVisitedUTRANCellInformation_encode_uper; +per_type_decoder_f LastVisitedUTRANCellInformation_decode_aper; +per_type_encoder_f LastVisitedUTRANCellInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LastVisitedUTRANCellInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.c new file mode 100644 index 0000000..b28f083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.c @@ -0,0 +1,122 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Limited-list.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_Limited_list_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct Limited_list__Member, nrCellID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrCellID" + }, + { ATF_POINTER, 1, offsetof(struct Limited_list__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P98, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct Limited_list__Member), + offsetof(struct Limited_list__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 2, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 2, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Limited_list_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_Limited_list_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_Limited_list_specs_1 = { + sizeof(struct Limited_list), + offsetof(struct Limited_list, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_Limited_list = { + "Limited-list", + "Limited-list", + &asn_OP_SEQUENCE_OF, + asn_DEF_Limited_list_tags_1, + sizeof(asn_DEF_Limited_list_tags_1) + /sizeof(asn_DEF_Limited_list_tags_1[0]), /* 1 */ + asn_DEF_Limited_list_tags_1, /* Same as above */ + sizeof(asn_DEF_Limited_list_tags_1) + /sizeof(asn_DEF_Limited_list_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Limited_list_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_Limited_list_1, + 1, /* Single element */ + &asn_SPC_Limited_list_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.h new file mode 100644 index 0000000..c861862 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Limited-list.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Limited_list_H_ +#define _Limited_list_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "NRCGI.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct Limited_list__Member { + NRCGI_t nrCellID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Limited_list__Member; + +/* Limited-list */ +typedef struct Limited_list { + A_SEQUENCE_OF(Limited_list__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Limited_list_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Limited_list; +extern asn_SET_OF_specifics_t asn_SPC_Limited_list_specs_1; +extern asn_TYPE_member_t asn_MBR_Limited_list_1[1]; +extern asn_per_constraints_t asn_PER_type_Limited_list_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Limited_list_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.c new file mode 100644 index 0000000..c5d90b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Links-to-log.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Links_to_log_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Links_to_log_value2enum_1[] = { + { 0, 6, "uplink" }, + { 1, 8, "downlink" }, + { 2, 24, "both-uplink-and-downlink" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Links_to_log_enum2value_1[] = { + 2, /* both-uplink-and-downlink(2) */ + 1, /* downlink(1) */ + 0 /* uplink(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Links_to_log_specs_1 = { + asn_MAP_Links_to_log_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Links_to_log_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Links_to_log_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Links_to_log = { + "Links-to-log", + "Links-to-log", + &asn_OP_NativeEnumerated, + asn_DEF_Links_to_log_tags_1, + sizeof(asn_DEF_Links_to_log_tags_1) + /sizeof(asn_DEF_Links_to_log_tags_1[0]), /* 1 */ + asn_DEF_Links_to_log_tags_1, /* Same as above */ + sizeof(asn_DEF_Links_to_log_tags_1) + /sizeof(asn_DEF_Links_to_log_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Links_to_log_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Links_to_log_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.h new file mode 100644 index 0000000..41556c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Links-to-log.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Links_to_log_H_ +#define _Links_to_log_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Links_to_log { + Links_to_log_uplink = 0, + Links_to_log_downlink = 1, + Links_to_log_both_uplink_and_downlink = 2 + /* + * Enumeration is extensible + */ +} e_Links_to_log; + +/* Links-to-log */ +typedef long Links_to_log_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Links_to_log_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Links_to_log; +extern const asn_INTEGER_specifics_t asn_SPC_Links_to_log_specs_1; +asn_struct_free_f Links_to_log_free; +asn_struct_print_f Links_to_log_print; +asn_constr_check_f Links_to_log_constraint; +ber_type_decoder_f Links_to_log_decode_ber; +der_type_encoder_f Links_to_log_encode_der; +xer_type_decoder_f Links_to_log_decode_xer; +xer_type_encoder_f Links_to_log_encode_xer; +per_type_decoder_f Links_to_log_decode_uper; +per_type_encoder_f Links_to_log_encode_uper; +per_type_decoder_f Links_to_log_decode_aper; +per_type_encoder_f Links_to_log_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Links_to_log_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c new file mode 100644 index 0000000..782ff17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ListofEUTRACellsinEUTRACoordinationReq.h" + +#include "ECGI.h" +static asn_per_constraints_t asn_PER_type_ListofEUTRACellsinEUTRACoordinationReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ListofEUTRACellsinEUTRACoordinationReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ListofEUTRACellsinEUTRACoordinationReq_specs_1 = { + sizeof(struct ListofEUTRACellsinEUTRACoordinationReq), + offsetof(struct ListofEUTRACellsinEUTRACoordinationReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinEUTRACoordinationReq = { + "ListofEUTRACellsinEUTRACoordinationReq", + "ListofEUTRACellsinEUTRACoordinationReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1, + sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1[0]), /* 1 */ + asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1, /* Same as above */ + sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ListofEUTRACellsinEUTRACoordinationReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ListofEUTRACellsinEUTRACoordinationReq_1, + 1, /* Single element */ + &asn_SPC_ListofEUTRACellsinEUTRACoordinationReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h new file mode 100644 index 0000000..c33db8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationReq.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ListofEUTRACellsinEUTRACoordinationReq_H_ +#define _ListofEUTRACellsinEUTRACoordinationReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* ListofEUTRACellsinEUTRACoordinationReq */ +typedef struct ListofEUTRACellsinEUTRACoordinationReq { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ListofEUTRACellsinEUTRACoordinationReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinEUTRACoordinationReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _ListofEUTRACellsinEUTRACoordinationReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c new file mode 100644 index 0000000..b7fc39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ListofEUTRACellsinEUTRACoordinationResp.h" + +#include "ECGI.h" +static asn_per_constraints_t asn_PER_type_ListofEUTRACellsinEUTRACoordinationResp_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ListofEUTRACellsinEUTRACoordinationResp_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ListofEUTRACellsinEUTRACoordinationResp_specs_1 = { + sizeof(struct ListofEUTRACellsinEUTRACoordinationResp), + offsetof(struct ListofEUTRACellsinEUTRACoordinationResp, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinEUTRACoordinationResp = { + "ListofEUTRACellsinEUTRACoordinationResp", + "ListofEUTRACellsinEUTRACoordinationResp", + &asn_OP_SEQUENCE_OF, + asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1, + sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1[0]), /* 1 */ + asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1, /* Same as above */ + sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinEUTRACoordinationResp_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ListofEUTRACellsinEUTRACoordinationResp_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ListofEUTRACellsinEUTRACoordinationResp_1, + 1, /* Single element */ + &asn_SPC_ListofEUTRACellsinEUTRACoordinationResp_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h new file mode 100644 index 0000000..5af4ce9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinEUTRACoordinationResp.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ListofEUTRACellsinEUTRACoordinationResp_H_ +#define _ListofEUTRACellsinEUTRACoordinationResp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* ListofEUTRACellsinEUTRACoordinationResp */ +typedef struct ListofEUTRACellsinEUTRACoordinationResp { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ListofEUTRACellsinEUTRACoordinationResp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinEUTRACoordinationResp; + +#ifdef __cplusplus +} +#endif + +#endif /* _ListofEUTRACellsinEUTRACoordinationResp_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c new file mode 100644 index 0000000..6172ef6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ListofEUTRACellsinNRCoordinationReq.h" + +#include "ECGI.h" +static asn_per_constraints_t asn_PER_type_ListofEUTRACellsinNRCoordinationReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ListofEUTRACellsinNRCoordinationReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ListofEUTRACellsinNRCoordinationReq_specs_1 = { + sizeof(struct ListofEUTRACellsinNRCoordinationReq), + offsetof(struct ListofEUTRACellsinNRCoordinationReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinNRCoordinationReq = { + "ListofEUTRACellsinNRCoordinationReq", + "ListofEUTRACellsinNRCoordinationReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1, + sizeof(asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1[0]), /* 1 */ + asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1, /* Same as above */ + sizeof(asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1) + /sizeof(asn_DEF_ListofEUTRACellsinNRCoordinationReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ListofEUTRACellsinNRCoordinationReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ListofEUTRACellsinNRCoordinationReq_1, + 1, /* Single element */ + &asn_SPC_ListofEUTRACellsinNRCoordinationReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h new file mode 100644 index 0000000..4d85c13 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofEUTRACellsinNRCoordinationReq.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ListofEUTRACellsinNRCoordinationReq_H_ +#define _ListofEUTRACellsinNRCoordinationReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* ListofEUTRACellsinNRCoordinationReq */ +typedef struct ListofEUTRACellsinNRCoordinationReq { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ListofEUTRACellsinNRCoordinationReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ListofEUTRACellsinNRCoordinationReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _ListofEUTRACellsinNRCoordinationReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c new file mode 100644 index 0000000..e40af6b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ListofNRCellsinNRCoordinationReq.h" + +#include "NRCGI.h" +static asn_per_constraints_t asn_PER_type_ListofNRCellsinNRCoordinationReq_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 0, 64 } /* (SIZE(0..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ListofNRCellsinNRCoordinationReq_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ListofNRCellsinNRCoordinationReq_specs_1 = { + sizeof(struct ListofNRCellsinNRCoordinationReq), + offsetof(struct ListofNRCellsinNRCoordinationReq, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ListofNRCellsinNRCoordinationReq = { + "ListofNRCellsinNRCoordinationReq", + "ListofNRCellsinNRCoordinationReq", + &asn_OP_SEQUENCE_OF, + asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1, + sizeof(asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1) + /sizeof(asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1[0]), /* 1 */ + asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1, /* Same as above */ + sizeof(asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1) + /sizeof(asn_DEF_ListofNRCellsinNRCoordinationReq_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ListofNRCellsinNRCoordinationReq_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ListofNRCellsinNRCoordinationReq_1, + 1, /* Single element */ + &asn_SPC_ListofNRCellsinNRCoordinationReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h new file mode 100644 index 0000000..d8fb324 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationReq.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ListofNRCellsinNRCoordinationReq_H_ +#define _ListofNRCellsinNRCoordinationReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRCGI; + +/* ListofNRCellsinNRCoordinationReq */ +typedef struct ListofNRCellsinNRCoordinationReq { + A_SEQUENCE_OF(struct NRCGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ListofNRCellsinNRCoordinationReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ListofNRCellsinNRCoordinationReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _ListofNRCellsinNRCoordinationReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c new file mode 100644 index 0000000..f3b0e80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ListofNRCellsinNRCoordinationResp.h" + +#include "NRCGI.h" +static asn_per_constraints_t asn_PER_type_ListofNRCellsinNRCoordinationResp_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 0, 64 } /* (SIZE(0..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ListofNRCellsinNRCoordinationResp_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ListofNRCellsinNRCoordinationResp_specs_1 = { + sizeof(struct ListofNRCellsinNRCoordinationResp), + offsetof(struct ListofNRCellsinNRCoordinationResp, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ListofNRCellsinNRCoordinationResp = { + "ListofNRCellsinNRCoordinationResp", + "ListofNRCellsinNRCoordinationResp", + &asn_OP_SEQUENCE_OF, + asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1, + sizeof(asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1) + /sizeof(asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1[0]), /* 1 */ + asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1, /* Same as above */ + sizeof(asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1) + /sizeof(asn_DEF_ListofNRCellsinNRCoordinationResp_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ListofNRCellsinNRCoordinationResp_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ListofNRCellsinNRCoordinationResp_1, + 1, /* Single element */ + &asn_SPC_ListofNRCellsinNRCoordinationResp_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h new file mode 100644 index 0000000..706416d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ListofNRCellsinNRCoordinationResp.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ListofNRCellsinNRCoordinationResp_H_ +#define _ListofNRCellsinNRCoordinationResp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRCGI; + +/* ListofNRCellsinNRCoordinationResp */ +typedef struct ListofNRCellsinNRCoordinationResp { + A_SEQUENCE_OF(struct NRCGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ListofNRCellsinNRCoordinationResp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ListofNRCellsinNRCoordinationResp; + +#ifdef __cplusplus +} +#endif + +#endif /* _ListofNRCellsinNRCoordinationResp_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.c new file mode 100644 index 0000000..b72b05a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LoadIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_LoadIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_LoadIndicator_value2enum_1[] = { + { 0, 7, "lowLoad" }, + { 1, 10, "mediumLoad" }, + { 2, 8, "highLoad" }, + { 3, 8, "overLoad" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_LoadIndicator_enum2value_1[] = { + 2, /* highLoad(2) */ + 0, /* lowLoad(0) */ + 1, /* mediumLoad(1) */ + 3 /* overLoad(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_LoadIndicator_specs_1 = { + asn_MAP_LoadIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_LoadIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_LoadIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LoadIndicator = { + "LoadIndicator", + "LoadIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_LoadIndicator_tags_1, + sizeof(asn_DEF_LoadIndicator_tags_1) + /sizeof(asn_DEF_LoadIndicator_tags_1[0]), /* 1 */ + asn_DEF_LoadIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_LoadIndicator_tags_1) + /sizeof(asn_DEF_LoadIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_LoadIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_LoadIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.h new file mode 100644 index 0000000..0bd0673 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadIndicator.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LoadIndicator_H_ +#define _LoadIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LoadIndicator { + LoadIndicator_lowLoad = 0, + LoadIndicator_mediumLoad = 1, + LoadIndicator_highLoad = 2, + LoadIndicator_overLoad = 3 + /* + * Enumeration is extensible + */ +} e_LoadIndicator; + +/* LoadIndicator */ +typedef long LoadIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_LoadIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_LoadIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_LoadIndicator_specs_1; +asn_struct_free_f LoadIndicator_free; +asn_struct_print_f LoadIndicator_print; +asn_constr_check_f LoadIndicator_constraint; +ber_type_decoder_f LoadIndicator_decode_ber; +der_type_encoder_f LoadIndicator_encode_der; +xer_type_decoder_f LoadIndicator_decode_xer; +xer_type_encoder_f LoadIndicator_encode_xer; +per_type_decoder_f LoadIndicator_decode_uper; +per_type_encoder_f LoadIndicator_encode_uper; +per_type_decoder_f LoadIndicator_decode_aper; +per_type_encoder_f LoadIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LoadIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.c new file mode 100644 index 0000000..da01046 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LoadInformation.h" + +asn_TYPE_member_t asn_MBR_LoadInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoadInformation, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P27, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_LoadInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LoadInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LoadInformation_specs_1 = { + sizeof(struct LoadInformation), + offsetof(struct LoadInformation, _asn_ctx), + asn_MAP_LoadInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LoadInformation = { + "LoadInformation", + "LoadInformation", + &asn_OP_SEQUENCE, + asn_DEF_LoadInformation_tags_1, + sizeof(asn_DEF_LoadInformation_tags_1) + /sizeof(asn_DEF_LoadInformation_tags_1[0]), /* 1 */ + asn_DEF_LoadInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_LoadInformation_tags_1) + /sizeof(asn_DEF_LoadInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LoadInformation_1, + 1, /* Elements count */ + &asn_SPC_LoadInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.h new file mode 100644 index 0000000..691c7a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LoadInformation.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LoadInformation_H_ +#define _LoadInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LoadInformation */ +typedef struct LoadInformation { + ProtocolIE_Container_119P27_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LoadInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LoadInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_LoadInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_LoadInformation_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _LoadInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.c new file mode 100644 index 0000000..e8f2a19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "LocationReportingInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_LocationReportingInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LocationReportingInformation, eventType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EventType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventType" + }, + { ATF_NOFLAGS, 0, offsetof(struct LocationReportingInformation, reportArea), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportArea, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportArea" + }, + { ATF_POINTER, 1, offsetof(struct LocationReportingInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P158, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_LocationReportingInformation_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_LocationReportingInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LocationReportingInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reportArea */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LocationReportingInformation_specs_1 = { + sizeof(struct LocationReportingInformation), + offsetof(struct LocationReportingInformation, _asn_ctx), + asn_MAP_LocationReportingInformation_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_LocationReportingInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LocationReportingInformation = { + "LocationReportingInformation", + "LocationReportingInformation", + &asn_OP_SEQUENCE, + asn_DEF_LocationReportingInformation_tags_1, + sizeof(asn_DEF_LocationReportingInformation_tags_1) + /sizeof(asn_DEF_LocationReportingInformation_tags_1[0]), /* 1 */ + asn_DEF_LocationReportingInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_LocationReportingInformation_tags_1) + /sizeof(asn_DEF_LocationReportingInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LocationReportingInformation_1, + 3, /* Elements count */ + &asn_SPC_LocationReportingInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.h new file mode 100644 index 0000000..9b3ba49 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/LocationReportingInformation.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _LocationReportingInformation_H_ +#define _LocationReportingInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "EventType.h" +#include "ReportArea.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* LocationReportingInformation */ +typedef struct LocationReportingInformation { + EventType_t eventType; + ReportArea_t reportArea; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LocationReportingInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LocationReportingInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_LocationReportingInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_LocationReportingInformation_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _LocationReportingInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.c new file mode 100644 index 0000000..999fc19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M1PeriodicReporting.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M1PeriodicReporting_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M1PeriodicReporting, reportInterval), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportIntervalMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportInterval" + }, + { ATF_NOFLAGS, 0, offsetof(struct M1PeriodicReporting, reportAmount), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportAmountMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportAmount" + }, + { ATF_POINTER, 1, offsetof(struct M1PeriodicReporting, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P159, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M1PeriodicReporting_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_M1PeriodicReporting_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M1PeriodicReporting_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reportInterval */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reportAmount */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M1PeriodicReporting_specs_1 = { + sizeof(struct M1PeriodicReporting), + offsetof(struct M1PeriodicReporting, _asn_ctx), + asn_MAP_M1PeriodicReporting_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_M1PeriodicReporting_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M1PeriodicReporting = { + "M1PeriodicReporting", + "M1PeriodicReporting", + &asn_OP_SEQUENCE, + asn_DEF_M1PeriodicReporting_tags_1, + sizeof(asn_DEF_M1PeriodicReporting_tags_1) + /sizeof(asn_DEF_M1PeriodicReporting_tags_1[0]), /* 1 */ + asn_DEF_M1PeriodicReporting_tags_1, /* Same as above */ + sizeof(asn_DEF_M1PeriodicReporting_tags_1) + /sizeof(asn_DEF_M1PeriodicReporting_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M1PeriodicReporting_1, + 3, /* Elements count */ + &asn_SPC_M1PeriodicReporting_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.h new file mode 100644 index 0000000..ababa9c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1PeriodicReporting.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M1PeriodicReporting_H_ +#define _M1PeriodicReporting_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ReportIntervalMDT.h" +#include "ReportAmountMDT.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M1PeriodicReporting */ +typedef struct M1PeriodicReporting { + ReportIntervalMDT_t reportInterval; + ReportAmountMDT_t reportAmount; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M1PeriodicReporting_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M1PeriodicReporting; +extern asn_SEQUENCE_specifics_t asn_SPC_M1PeriodicReporting_specs_1; +extern asn_TYPE_member_t asn_MBR_M1PeriodicReporting_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M1PeriodicReporting_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.c new file mode 100644 index 0000000..feaa6b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M1ReportingTrigger.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M1ReportingTrigger_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M1ReportingTrigger_value2enum_1[] = { + { 0, 8, "periodic" }, + { 1, 16, "a2eventtriggered" }, + { 2, 25, "a2eventtriggered-periodic" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M1ReportingTrigger_enum2value_1[] = { + 1, /* a2eventtriggered(1) */ + 2, /* a2eventtriggered-periodic(2) */ + 0 /* periodic(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M1ReportingTrigger_specs_1 = { + asn_MAP_M1ReportingTrigger_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M1ReportingTrigger_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M1ReportingTrigger_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M1ReportingTrigger = { + "M1ReportingTrigger", + "M1ReportingTrigger", + &asn_OP_NativeEnumerated, + asn_DEF_M1ReportingTrigger_tags_1, + sizeof(asn_DEF_M1ReportingTrigger_tags_1) + /sizeof(asn_DEF_M1ReportingTrigger_tags_1[0]), /* 1 */ + asn_DEF_M1ReportingTrigger_tags_1, /* Same as above */ + sizeof(asn_DEF_M1ReportingTrigger_tags_1) + /sizeof(asn_DEF_M1ReportingTrigger_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M1ReportingTrigger_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M1ReportingTrigger_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.h new file mode 100644 index 0000000..0a77453 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ReportingTrigger.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M1ReportingTrigger_H_ +#define _M1ReportingTrigger_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M1ReportingTrigger { + M1ReportingTrigger_periodic = 0, + M1ReportingTrigger_a2eventtriggered = 1, + /* + * Enumeration is extensible + */ + M1ReportingTrigger_a2eventtriggered_periodic = 2 +} e_M1ReportingTrigger; + +/* M1ReportingTrigger */ +typedef long M1ReportingTrigger_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M1ReportingTrigger_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M1ReportingTrigger; +extern const asn_INTEGER_specifics_t asn_SPC_M1ReportingTrigger_specs_1; +asn_struct_free_f M1ReportingTrigger_free; +asn_struct_print_f M1ReportingTrigger_print; +asn_constr_check_f M1ReportingTrigger_constraint; +ber_type_decoder_f M1ReportingTrigger_decode_ber; +der_type_encoder_f M1ReportingTrigger_encode_der; +xer_type_decoder_f M1ReportingTrigger_decode_xer; +xer_type_encoder_f M1ReportingTrigger_encode_xer; +per_type_decoder_f M1ReportingTrigger_decode_uper; +per_type_encoder_f M1ReportingTrigger_encode_uper; +per_type_decoder_f M1ReportingTrigger_decode_aper; +per_type_encoder_f M1ReportingTrigger_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M1ReportingTrigger_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.c new file mode 100644 index 0000000..8036408 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M1ThresholdEventA2.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M1ThresholdEventA2_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M1ThresholdEventA2, measurementThreshold), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasurementThresholdA2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementThreshold" + }, + { ATF_POINTER, 1, offsetof(struct M1ThresholdEventA2, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P160, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M1ThresholdEventA2_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_M1ThresholdEventA2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M1ThresholdEventA2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measurementThreshold */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M1ThresholdEventA2_specs_1 = { + sizeof(struct M1ThresholdEventA2), + offsetof(struct M1ThresholdEventA2, _asn_ctx), + asn_MAP_M1ThresholdEventA2_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_M1ThresholdEventA2_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M1ThresholdEventA2 = { + "M1ThresholdEventA2", + "M1ThresholdEventA2", + &asn_OP_SEQUENCE, + asn_DEF_M1ThresholdEventA2_tags_1, + sizeof(asn_DEF_M1ThresholdEventA2_tags_1) + /sizeof(asn_DEF_M1ThresholdEventA2_tags_1[0]), /* 1 */ + asn_DEF_M1ThresholdEventA2_tags_1, /* Same as above */ + sizeof(asn_DEF_M1ThresholdEventA2_tags_1) + /sizeof(asn_DEF_M1ThresholdEventA2_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M1ThresholdEventA2_1, + 2, /* Elements count */ + &asn_SPC_M1ThresholdEventA2_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.h new file mode 100644 index 0000000..8f9c904 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M1ThresholdEventA2.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M1ThresholdEventA2_H_ +#define _M1ThresholdEventA2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementThresholdA2.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M1ThresholdEventA2 */ +typedef struct M1ThresholdEventA2 { + MeasurementThresholdA2_t measurementThreshold; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M1ThresholdEventA2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M1ThresholdEventA2; +extern asn_SEQUENCE_specifics_t asn_SPC_M1ThresholdEventA2_specs_1; +extern asn_TYPE_member_t asn_MBR_M1ThresholdEventA2_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M1ThresholdEventA2_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.c new file mode 100644 index 0000000..9819dbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M3Configuration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M3Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M3Configuration, m3period), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M3period, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m3period" + }, + { ATF_POINTER, 1, offsetof(struct M3Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P161, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M3Configuration_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_M3Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M3Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m3period */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M3Configuration_specs_1 = { + sizeof(struct M3Configuration), + offsetof(struct M3Configuration, _asn_ctx), + asn_MAP_M3Configuration_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_M3Configuration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M3Configuration = { + "M3Configuration", + "M3Configuration", + &asn_OP_SEQUENCE, + asn_DEF_M3Configuration_tags_1, + sizeof(asn_DEF_M3Configuration_tags_1) + /sizeof(asn_DEF_M3Configuration_tags_1[0]), /* 1 */ + asn_DEF_M3Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_M3Configuration_tags_1) + /sizeof(asn_DEF_M3Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M3Configuration_1, + 2, /* Elements count */ + &asn_SPC_M3Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.h new file mode 100644 index 0000000..0487171 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3Configuration.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M3Configuration_H_ +#define _M3Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "M3period.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M3Configuration */ +typedef struct M3Configuration { + M3period_t m3period; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M3Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M3Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_M3Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_M3Configuration_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M3Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.c new file mode 100644 index 0000000..4e081da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M3period.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M3period_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M3period_value2enum_1[] = { + { 0, 5, "ms100" }, + { 1, 6, "ms1000" }, + { 2, 7, "ms10000" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M3period_enum2value_1[] = { + 0, /* ms100(0) */ + 1, /* ms1000(1) */ + 2 /* ms10000(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M3period_specs_1 = { + asn_MAP_M3period_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M3period_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M3period_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M3period = { + "M3period", + "M3period", + &asn_OP_NativeEnumerated, + asn_DEF_M3period_tags_1, + sizeof(asn_DEF_M3period_tags_1) + /sizeof(asn_DEF_M3period_tags_1[0]), /* 1 */ + asn_DEF_M3period_tags_1, /* Same as above */ + sizeof(asn_DEF_M3period_tags_1) + /sizeof(asn_DEF_M3period_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M3period_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M3period_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.h new file mode 100644 index 0000000..7b27f14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M3period.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M3period_H_ +#define _M3period_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M3period { + M3period_ms100 = 0, + M3period_ms1000 = 1, + M3period_ms10000 = 2 + /* + * Enumeration is extensible + */ +} e_M3period; + +/* M3period */ +typedef long M3period_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M3period_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M3period; +extern const asn_INTEGER_specifics_t asn_SPC_M3period_specs_1; +asn_struct_free_f M3period_free; +asn_struct_print_f M3period_print; +asn_constr_check_f M3period_constraint; +ber_type_decoder_f M3period_decode_ber; +der_type_encoder_f M3period_encode_der; +xer_type_decoder_f M3period_decode_xer; +xer_type_encoder_f M3period_encode_xer; +per_type_decoder_f M3period_decode_uper; +per_type_encoder_f M3period_encode_uper; +per_type_decoder_f M3period_decode_aper; +per_type_encoder_f M3period_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M3period_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.c new file mode 100644 index 0000000..5d9ddf4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M4Configuration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M4Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M4Configuration, m4period), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M4period, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m4period" + }, + { ATF_NOFLAGS, 0, offsetof(struct M4Configuration, m4_links_to_log), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Links_to_log, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m4-links-to-log" + }, + { ATF_POINTER, 1, offsetof(struct M4Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P162, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M4Configuration_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_M4Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M4Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m4period */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m4-links-to-log */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M4Configuration_specs_1 = { + sizeof(struct M4Configuration), + offsetof(struct M4Configuration, _asn_ctx), + asn_MAP_M4Configuration_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_M4Configuration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M4Configuration = { + "M4Configuration", + "M4Configuration", + &asn_OP_SEQUENCE, + asn_DEF_M4Configuration_tags_1, + sizeof(asn_DEF_M4Configuration_tags_1) + /sizeof(asn_DEF_M4Configuration_tags_1[0]), /* 1 */ + asn_DEF_M4Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_M4Configuration_tags_1) + /sizeof(asn_DEF_M4Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M4Configuration_1, + 3, /* Elements count */ + &asn_SPC_M4Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.h new file mode 100644 index 0000000..7b354e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4Configuration.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M4Configuration_H_ +#define _M4Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "M4period.h" +#include "Links-to-log.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M4Configuration */ +typedef struct M4Configuration { + M4period_t m4period; + Links_to_log_t m4_links_to_log; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M4Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M4Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_M4Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_M4Configuration_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M4Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.c new file mode 100644 index 0000000..14ee261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M4period.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M4period_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M4period_value2enum_1[] = { + { 0, 6, "ms1024" }, + { 1, 6, "ms2048" }, + { 2, 6, "ms5120" }, + { 3, 7, "ms10240" }, + { 4, 4, "min1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M4period_enum2value_1[] = { + 4, /* min1(4) */ + 0, /* ms1024(0) */ + 3, /* ms10240(3) */ + 1, /* ms2048(1) */ + 2 /* ms5120(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M4period_specs_1 = { + asn_MAP_M4period_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M4period_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M4period_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M4period = { + "M4period", + "M4period", + &asn_OP_NativeEnumerated, + asn_DEF_M4period_tags_1, + sizeof(asn_DEF_M4period_tags_1) + /sizeof(asn_DEF_M4period_tags_1[0]), /* 1 */ + asn_DEF_M4period_tags_1, /* Same as above */ + sizeof(asn_DEF_M4period_tags_1) + /sizeof(asn_DEF_M4period_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M4period_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M4period_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.h new file mode 100644 index 0000000..2f83692 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M4period.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M4period_H_ +#define _M4period_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M4period { + M4period_ms1024 = 0, + M4period_ms2048 = 1, + M4period_ms5120 = 2, + M4period_ms10240 = 3, + M4period_min1 = 4 + /* + * Enumeration is extensible + */ +} e_M4period; + +/* M4period */ +typedef long M4period_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M4period_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M4period; +extern const asn_INTEGER_specifics_t asn_SPC_M4period_specs_1; +asn_struct_free_f M4period_free; +asn_struct_print_f M4period_print; +asn_constr_check_f M4period_constraint; +ber_type_decoder_f M4period_decode_ber; +der_type_encoder_f M4period_encode_der; +xer_type_decoder_f M4period_decode_xer; +xer_type_encoder_f M4period_encode_xer; +per_type_decoder_f M4period_decode_uper; +per_type_encoder_f M4period_encode_uper; +per_type_decoder_f M4period_decode_aper; +per_type_encoder_f M4period_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M4period_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.c new file mode 100644 index 0000000..0d444b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M5Configuration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M5Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M5Configuration, m5period), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M5period, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m5period" + }, + { ATF_NOFLAGS, 0, offsetof(struct M5Configuration, m5_links_to_log), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Links_to_log, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m5-links-to-log" + }, + { ATF_POINTER, 1, offsetof(struct M5Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P163, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M5Configuration_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_M5Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M5Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m5period */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m5-links-to-log */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M5Configuration_specs_1 = { + sizeof(struct M5Configuration), + offsetof(struct M5Configuration, _asn_ctx), + asn_MAP_M5Configuration_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_M5Configuration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M5Configuration = { + "M5Configuration", + "M5Configuration", + &asn_OP_SEQUENCE, + asn_DEF_M5Configuration_tags_1, + sizeof(asn_DEF_M5Configuration_tags_1) + /sizeof(asn_DEF_M5Configuration_tags_1[0]), /* 1 */ + asn_DEF_M5Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_M5Configuration_tags_1) + /sizeof(asn_DEF_M5Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M5Configuration_1, + 3, /* Elements count */ + &asn_SPC_M5Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.h new file mode 100644 index 0000000..1f52bf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5Configuration.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M5Configuration_H_ +#define _M5Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "M5period.h" +#include "Links-to-log.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M5Configuration */ +typedef struct M5Configuration { + M5period_t m5period; + Links_to_log_t m5_links_to_log; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M5Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M5Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_M5Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_M5Configuration_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M5Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.c new file mode 100644 index 0000000..37a6c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M5period.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M5period_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M5period_value2enum_1[] = { + { 0, 6, "ms1024" }, + { 1, 6, "ms2048" }, + { 2, 6, "ms5120" }, + { 3, 7, "ms10240" }, + { 4, 4, "min1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M5period_enum2value_1[] = { + 4, /* min1(4) */ + 0, /* ms1024(0) */ + 3, /* ms10240(3) */ + 1, /* ms2048(1) */ + 2 /* ms5120(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M5period_specs_1 = { + asn_MAP_M5period_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M5period_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M5period_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M5period = { + "M5period", + "M5period", + &asn_OP_NativeEnumerated, + asn_DEF_M5period_tags_1, + sizeof(asn_DEF_M5period_tags_1) + /sizeof(asn_DEF_M5period_tags_1[0]), /* 1 */ + asn_DEF_M5period_tags_1, /* Same as above */ + sizeof(asn_DEF_M5period_tags_1) + /sizeof(asn_DEF_M5period_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M5period_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M5period_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.h new file mode 100644 index 0000000..8c13389 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M5period.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M5period_H_ +#define _M5period_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M5period { + M5period_ms1024 = 0, + M5period_ms2048 = 1, + M5period_ms5120 = 2, + M5period_ms10240 = 3, + M5period_min1 = 4 + /* + * Enumeration is extensible + */ +} e_M5period; + +/* M5period */ +typedef long M5period_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M5period_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M5period; +extern const asn_INTEGER_specifics_t asn_SPC_M5period_specs_1; +asn_struct_free_f M5period_free; +asn_struct_print_f M5period_print; +asn_constr_check_f M5period_constraint; +ber_type_decoder_f M5period_decode_ber; +der_type_encoder_f M5period_encode_der; +xer_type_decoder_f M5period_decode_xer; +xer_type_encoder_f M5period_encode_xer; +per_type_decoder_f M5period_decode_uper; +per_type_encoder_f M5period_encode_uper; +per_type_decoder_f M5period_decode_aper; +per_type_encoder_f M5period_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M5period_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.c new file mode 100644 index 0000000..51853a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M6Configuration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M6Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M6Configuration, m6report_interval), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M6report_interval, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m6report-interval" + }, + { ATF_POINTER, 1, offsetof(struct M6Configuration, m6delay_threshold), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M6delay_threshold, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m6delay-threshold" + }, + { ATF_NOFLAGS, 0, offsetof(struct M6Configuration, m6_links_to_log), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Links_to_log, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m6-links-to-log" + }, + { ATF_POINTER, 1, offsetof(struct M6Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P164, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M6Configuration_oms_1[] = { 1, 3 }; +static const ber_tlv_tag_t asn_DEF_M6Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M6Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m6report-interval */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m6delay-threshold */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* m6-links-to-log */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M6Configuration_specs_1 = { + sizeof(struct M6Configuration), + offsetof(struct M6Configuration, _asn_ctx), + asn_MAP_M6Configuration_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_M6Configuration_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M6Configuration = { + "M6Configuration", + "M6Configuration", + &asn_OP_SEQUENCE, + asn_DEF_M6Configuration_tags_1, + sizeof(asn_DEF_M6Configuration_tags_1) + /sizeof(asn_DEF_M6Configuration_tags_1[0]), /* 1 */ + asn_DEF_M6Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_M6Configuration_tags_1) + /sizeof(asn_DEF_M6Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M6Configuration_1, + 4, /* Elements count */ + &asn_SPC_M6Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.h new file mode 100644 index 0000000..ca3161e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6Configuration.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M6Configuration_H_ +#define _M6Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "M6report-interval.h" +#include "M6delay-threshold.h" +#include "Links-to-log.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M6Configuration */ +typedef struct M6Configuration { + M6report_interval_t m6report_interval; + M6delay_threshold_t *m6delay_threshold; /* OPTIONAL */ + Links_to_log_t m6_links_to_log; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M6Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M6Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_M6Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_M6Configuration_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M6Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.c new file mode 100644 index 0000000..bca61f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.c @@ -0,0 +1,93 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M6delay-threshold.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M6delay_threshold_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 11 } /* (0..11,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M6delay_threshold_value2enum_1[] = { + { 0, 4, "ms30" }, + { 1, 4, "ms40" }, + { 2, 4, "ms50" }, + { 3, 4, "ms60" }, + { 4, 4, "ms70" }, + { 5, 4, "ms80" }, + { 6, 4, "ms90" }, + { 7, 5, "ms100" }, + { 8, 5, "ms150" }, + { 9, 5, "ms300" }, + { 10, 5, "ms500" }, + { 11, 5, "ms750" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M6delay_threshold_enum2value_1[] = { + 7, /* ms100(7) */ + 8, /* ms150(8) */ + 0, /* ms30(0) */ + 9, /* ms300(9) */ + 1, /* ms40(1) */ + 2, /* ms50(2) */ + 10, /* ms500(10) */ + 3, /* ms60(3) */ + 4, /* ms70(4) */ + 11, /* ms750(11) */ + 5, /* ms80(5) */ + 6 /* ms90(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M6delay_threshold_specs_1 = { + asn_MAP_M6delay_threshold_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M6delay_threshold_enum2value_1, /* N => "tag"; sorted by N */ + 12, /* Number of elements in the maps */ + 13, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M6delay_threshold_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M6delay_threshold = { + "M6delay-threshold", + "M6delay-threshold", + &asn_OP_NativeEnumerated, + asn_DEF_M6delay_threshold_tags_1, + sizeof(asn_DEF_M6delay_threshold_tags_1) + /sizeof(asn_DEF_M6delay_threshold_tags_1[0]), /* 1 */ + asn_DEF_M6delay_threshold_tags_1, /* Same as above */ + sizeof(asn_DEF_M6delay_threshold_tags_1) + /sizeof(asn_DEF_M6delay_threshold_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M6delay_threshold_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M6delay_threshold_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.h new file mode 100644 index 0000000..7cfc86b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6delay-threshold.h @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M6delay_threshold_H_ +#define _M6delay_threshold_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M6delay_threshold { + M6delay_threshold_ms30 = 0, + M6delay_threshold_ms40 = 1, + M6delay_threshold_ms50 = 2, + M6delay_threshold_ms60 = 3, + M6delay_threshold_ms70 = 4, + M6delay_threshold_ms80 = 5, + M6delay_threshold_ms90 = 6, + M6delay_threshold_ms100 = 7, + M6delay_threshold_ms150 = 8, + M6delay_threshold_ms300 = 9, + M6delay_threshold_ms500 = 10, + M6delay_threshold_ms750 = 11 + /* + * Enumeration is extensible + */ +} e_M6delay_threshold; + +/* M6delay-threshold */ +typedef long M6delay_threshold_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M6delay_threshold_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M6delay_threshold; +extern const asn_INTEGER_specifics_t asn_SPC_M6delay_threshold_specs_1; +asn_struct_free_f M6delay_threshold_free; +asn_struct_print_f M6delay_threshold_print; +asn_constr_check_f M6delay_threshold_constraint; +ber_type_decoder_f M6delay_threshold_decode_ber; +der_type_encoder_f M6delay_threshold_encode_der; +xer_type_decoder_f M6delay_threshold_decode_xer; +xer_type_encoder_f M6delay_threshold_encode_xer; +per_type_decoder_f M6delay_threshold_decode_uper; +per_type_encoder_f M6delay_threshold_encode_uper; +per_type_decoder_f M6delay_threshold_decode_aper; +per_type_encoder_f M6delay_threshold_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M6delay_threshold_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.c new file mode 100644 index 0000000..e4aacba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M6report-interval.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M6report_interval_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_M6report_interval_value2enum_1[] = { + { 0, 6, "ms1024" }, + { 1, 6, "ms2048" }, + { 2, 6, "ms5120" }, + { 3, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_M6report_interval_enum2value_1[] = { + 0, /* ms1024(0) */ + 3, /* ms10240(3) */ + 1, /* ms2048(1) */ + 2 /* ms5120(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_M6report_interval_specs_1 = { + asn_MAP_M6report_interval_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_M6report_interval_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_M6report_interval_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M6report_interval = { + "M6report-interval", + "M6report-interval", + &asn_OP_NativeEnumerated, + asn_DEF_M6report_interval_tags_1, + sizeof(asn_DEF_M6report_interval_tags_1) + /sizeof(asn_DEF_M6report_interval_tags_1[0]), /* 1 */ + asn_DEF_M6report_interval_tags_1, /* Same as above */ + sizeof(asn_DEF_M6report_interval_tags_1) + /sizeof(asn_DEF_M6report_interval_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M6report_interval_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_M6report_interval_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.h new file mode 100644 index 0000000..7e4e908 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M6report-interval.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M6report_interval_H_ +#define _M6report_interval_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum M6report_interval { + M6report_interval_ms1024 = 0, + M6report_interval_ms2048 = 1, + M6report_interval_ms5120 = 2, + M6report_interval_ms10240 = 3 + /* + * Enumeration is extensible + */ +} e_M6report_interval; + +/* M6report-interval */ +typedef long M6report_interval_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M6report_interval_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M6report_interval; +extern const asn_INTEGER_specifics_t asn_SPC_M6report_interval_specs_1; +asn_struct_free_f M6report_interval_free; +asn_struct_print_f M6report_interval_print; +asn_constr_check_f M6report_interval_constraint; +ber_type_decoder_f M6report_interval_decode_ber; +der_type_encoder_f M6report_interval_encode_der; +xer_type_decoder_f M6report_interval_decode_xer; +xer_type_encoder_f M6report_interval_encode_xer; +per_type_decoder_f M6report_interval_decode_uper; +per_type_encoder_f M6report_interval_encode_uper; +per_type_decoder_f M6report_interval_decode_aper; +per_type_encoder_f M6report_interval_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M6report_interval_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.c new file mode 100644 index 0000000..b408998 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M7Configuration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_M7Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct M7Configuration, m7period), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M7period, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m7period" + }, + { ATF_NOFLAGS, 0, offsetof(struct M7Configuration, m7_links_to_log), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Links_to_log, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m7-links-to-log" + }, + { ATF_POINTER, 1, offsetof(struct M7Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P165, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_M7Configuration_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_M7Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M7Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m7period */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m7-links-to-log */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M7Configuration_specs_1 = { + sizeof(struct M7Configuration), + offsetof(struct M7Configuration, _asn_ctx), + asn_MAP_M7Configuration_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_M7Configuration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M7Configuration = { + "M7Configuration", + "M7Configuration", + &asn_OP_SEQUENCE, + asn_DEF_M7Configuration_tags_1, + sizeof(asn_DEF_M7Configuration_tags_1) + /sizeof(asn_DEF_M7Configuration_tags_1[0]), /* 1 */ + asn_DEF_M7Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_M7Configuration_tags_1) + /sizeof(asn_DEF_M7Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M7Configuration_1, + 3, /* Elements count */ + &asn_SPC_M7Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.h new file mode 100644 index 0000000..23afc53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7Configuration.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M7Configuration_H_ +#define _M7Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "M7period.h" +#include "Links-to-log.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* M7Configuration */ +typedef struct M7Configuration { + M7period_t m7period; + Links_to_log_t m7_links_to_log; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M7Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_M7Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_M7Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_M7Configuration_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _M7Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.c new file mode 100644 index 0000000..157a47f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "M7period.h" + +int +M7period_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 60)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_M7period_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 6, 6, 1, 60 } /* (1..60,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_M7period_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_M7period = { + "M7period", + "M7period", + &asn_OP_NativeInteger, + asn_DEF_M7period_tags_1, + sizeof(asn_DEF_M7period_tags_1) + /sizeof(asn_DEF_M7period_tags_1[0]), /* 1 */ + asn_DEF_M7period_tags_1, /* Same as above */ + sizeof(asn_DEF_M7period_tags_1) + /sizeof(asn_DEF_M7period_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_M7period_constr_1, M7period_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.h new file mode 100644 index 0000000..2aa3055 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/M7period.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _M7period_H_ +#define _M7period_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* M7period */ +typedef long M7period_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_M7period_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_M7period; +asn_struct_free_f M7period_free; +asn_struct_print_f M7period_print; +asn_constr_check_f M7period_constraint; +ber_type_decoder_f M7period_decode_ber; +der_type_encoder_f M7period_encode_der; +xer_type_decoder_f M7period_decode_xer; +xer_type_encoder_f M7period_encode_xer; +per_type_decoder_f M7period_decode_uper; +per_type_encoder_f M7period_encode_uper; +per_type_decoder_f M7period_decode_aper; +per_type_encoder_f M7period_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _M7period_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c new file mode 100644 index 0000000..f0d809a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MBMS-Service-Area-Identity-List.h" + +asn_per_constraints_t asn_PER_type_MBMS_Service_Area_Identity_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MBMS_Service_Area_Identity_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MBMS_Service_Area_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MBMS_Service_Area_Identity_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MBMS_Service_Area_Identity_List_specs_1 = { + sizeof(struct MBMS_Service_Area_Identity_List), + offsetof(struct MBMS_Service_Area_Identity_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMS_Service_Area_Identity_List = { + "MBMS-Service-Area-Identity-List", + "MBMS-Service-Area-Identity-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_MBMS_Service_Area_Identity_List_tags_1, + sizeof(asn_DEF_MBMS_Service_Area_Identity_List_tags_1) + /sizeof(asn_DEF_MBMS_Service_Area_Identity_List_tags_1[0]), /* 1 */ + asn_DEF_MBMS_Service_Area_Identity_List_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMS_Service_Area_Identity_List_tags_1) + /sizeof(asn_DEF_MBMS_Service_Area_Identity_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MBMS_Service_Area_Identity_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MBMS_Service_Area_Identity_List_1, + 1, /* Single element */ + &asn_SPC_MBMS_Service_Area_Identity_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h new file mode 100644 index 0000000..a902266 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity-List.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MBMS_Service_Area_Identity_List_H_ +#define _MBMS_Service_Area_Identity_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MBMS-Service-Area-Identity.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MBMS-Service-Area-Identity-List */ +typedef struct MBMS_Service_Area_Identity_List { + A_SEQUENCE_OF(MBMS_Service_Area_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMS_Service_Area_Identity_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMS_Service_Area_Identity_List; +extern asn_SET_OF_specifics_t asn_SPC_MBMS_Service_Area_Identity_List_specs_1; +extern asn_TYPE_member_t asn_MBR_MBMS_Service_Area_Identity_List_1[1]; +extern asn_per_constraints_t asn_PER_type_MBMS_Service_Area_Identity_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMS_Service_Area_Identity_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c new file mode 100644 index 0000000..ea0ac52 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MBMS-Service-Area-Identity.h" + +int +MBMS_Service_Area_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MBMS_Service_Area_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MBMS_Service_Area_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MBMS_Service_Area_Identity = { + "MBMS-Service-Area-Identity", + "MBMS-Service-Area-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_MBMS_Service_Area_Identity_tags_1, + sizeof(asn_DEF_MBMS_Service_Area_Identity_tags_1) + /sizeof(asn_DEF_MBMS_Service_Area_Identity_tags_1[0]), /* 1 */ + asn_DEF_MBMS_Service_Area_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMS_Service_Area_Identity_tags_1) + /sizeof(asn_DEF_MBMS_Service_Area_Identity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MBMS_Service_Area_Identity_constr_1, MBMS_Service_Area_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h new file mode 100644 index 0000000..c2b3aa0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBMS-Service-Area-Identity.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MBMS_Service_Area_Identity_H_ +#define _MBMS_Service_Area_Identity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MBMS-Service-Area-Identity */ +typedef OCTET_STRING_t MBMS_Service_Area_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MBMS_Service_Area_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MBMS_Service_Area_Identity; +asn_struct_free_f MBMS_Service_Area_Identity_free; +asn_struct_print_f MBMS_Service_Area_Identity_print; +asn_constr_check_f MBMS_Service_Area_Identity_constraint; +ber_type_decoder_f MBMS_Service_Area_Identity_decode_ber; +der_type_encoder_f MBMS_Service_Area_Identity_encode_der; +xer_type_decoder_f MBMS_Service_Area_Identity_decode_xer; +xer_type_encoder_f MBMS_Service_Area_Identity_encode_xer; +per_type_decoder_f MBMS_Service_Area_Identity_decode_uper; +per_type_encoder_f MBMS_Service_Area_Identity_encode_uper; +per_type_decoder_f MBMS_Service_Area_Identity_decode_aper; +per_type_encoder_f MBMS_Service_Area_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMS_Service_Area_Identity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.c new file mode 100644 index 0000000..fb6feb8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MBSFN-Subframe-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info, radioframeAllocationPeriod), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioframeAllocationPeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "radioframeAllocationPeriod" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info, radioframeAllocationOffset), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioframeAllocationOffset, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "radioframeAllocationOffset" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info, subframeAllocation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SubframeAllocation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subframeAllocation" + }, + { ATF_POINTER, 1, offsetof(struct MBSFN_Subframe_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P168, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_MBSFN_Subframe_Info_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_MBSFN_Subframe_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MBSFN_Subframe_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioframeAllocationPeriod */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* radioframeAllocationOffset */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subframeAllocation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MBSFN_Subframe_Info_specs_1 = { + sizeof(struct MBSFN_Subframe_Info), + offsetof(struct MBSFN_Subframe_Info, _asn_ctx), + asn_MAP_MBSFN_Subframe_Info_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MBSFN_Subframe_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Info = { + "MBSFN-Subframe-Info", + "MBSFN-Subframe-Info", + &asn_OP_SEQUENCE, + asn_DEF_MBSFN_Subframe_Info_tags_1, + sizeof(asn_DEF_MBSFN_Subframe_Info_tags_1) + /sizeof(asn_DEF_MBSFN_Subframe_Info_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_Subframe_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_Subframe_Info_tags_1) + /sizeof(asn_DEF_MBSFN_Subframe_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MBSFN_Subframe_Info_1, + 4, /* Elements count */ + &asn_SPC_MBSFN_Subframe_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.h new file mode 100644 index 0000000..efabe57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Info.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MBSFN_Subframe_Info_H_ +#define _MBSFN_Subframe_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RadioframeAllocationPeriod.h" +#include "RadioframeAllocationOffset.h" +#include "SubframeAllocation.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* MBSFN-Subframe-Info */ +typedef struct MBSFN_Subframe_Info { + RadioframeAllocationPeriod_t radioframeAllocationPeriod; + RadioframeAllocationOffset_t radioframeAllocationOffset; + SubframeAllocation_t subframeAllocation; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_Subframe_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_MBSFN_Subframe_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Info_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBSFN_Subframe_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c new file mode 100644 index 0000000..73ec9b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MBSFN-Subframe-Infolist.h" + +#include "MBSFN-Subframe-Info.h" +asn_per_constraints_t asn_PER_type_MBSFN_Subframe_Infolist_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Infolist_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_Subframe_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MBSFN_Subframe_Infolist_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MBSFN_Subframe_Infolist_specs_1 = { + sizeof(struct MBSFN_Subframe_Infolist), + offsetof(struct MBSFN_Subframe_Infolist, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Infolist = { + "MBSFN-Subframe-Infolist", + "MBSFN-Subframe-Infolist", + &asn_OP_SEQUENCE_OF, + asn_DEF_MBSFN_Subframe_Infolist_tags_1, + sizeof(asn_DEF_MBSFN_Subframe_Infolist_tags_1) + /sizeof(asn_DEF_MBSFN_Subframe_Infolist_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_Subframe_Infolist_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_Subframe_Infolist_tags_1) + /sizeof(asn_DEF_MBSFN_Subframe_Infolist_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MBSFN_Subframe_Infolist_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MBSFN_Subframe_Infolist_1, + 1, /* Single element */ + &asn_SPC_MBSFN_Subframe_Infolist_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h new file mode 100644 index 0000000..0071d2a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MBSFN-Subframe-Infolist.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MBSFN_Subframe_Infolist_H_ +#define _MBSFN_Subframe_Infolist_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MBSFN_Subframe_Info; + +/* MBSFN-Subframe-Infolist */ +typedef struct MBSFN_Subframe_Infolist { + A_SEQUENCE_OF(struct MBSFN_Subframe_Info) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_Subframe_Infolist_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Infolist; +extern asn_SET_OF_specifics_t asn_SPC_MBSFN_Subframe_Infolist_specs_1; +extern asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Infolist_1[1]; +extern asn_per_constraints_t asn_PER_type_MBSFN_Subframe_Infolist_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBSFN_Subframe_Infolist_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.c new file mode 100644 index 0000000..b010e8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MDT-Activation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MDT_Activation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_MDT_Activation_value2enum_1[] = { + { 0, 18, "immediate-MDT-only" }, + { 1, 23, "immediate-MDT-and-Trace" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_MDT_Activation_enum2value_1[] = { + 1, /* immediate-MDT-and-Trace(1) */ + 0 /* immediate-MDT-only(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_MDT_Activation_specs_1 = { + asn_MAP_MDT_Activation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MDT_Activation_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_MDT_Activation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MDT_Activation = { + "MDT-Activation", + "MDT-Activation", + &asn_OP_NativeEnumerated, + asn_DEF_MDT_Activation_tags_1, + sizeof(asn_DEF_MDT_Activation_tags_1) + /sizeof(asn_DEF_MDT_Activation_tags_1[0]), /* 1 */ + asn_DEF_MDT_Activation_tags_1, /* Same as above */ + sizeof(asn_DEF_MDT_Activation_tags_1) + /sizeof(asn_DEF_MDT_Activation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MDT_Activation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MDT_Activation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.h new file mode 100644 index 0000000..f33682e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Activation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MDT_Activation_H_ +#define _MDT_Activation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MDT_Activation { + MDT_Activation_immediate_MDT_only = 0, + MDT_Activation_immediate_MDT_and_Trace = 1 + /* + * Enumeration is extensible + */ +} e_MDT_Activation; + +/* MDT-Activation */ +typedef long MDT_Activation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MDT_Activation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MDT_Activation; +extern const asn_INTEGER_specifics_t asn_SPC_MDT_Activation_specs_1; +asn_struct_free_f MDT_Activation_free; +asn_struct_print_f MDT_Activation_print; +asn_constr_check_f MDT_Activation_constraint; +ber_type_decoder_f MDT_Activation_decode_ber; +der_type_encoder_f MDT_Activation_encode_der; +xer_type_decoder_f MDT_Activation_decode_xer; +xer_type_encoder_f MDT_Activation_encode_xer; +per_type_decoder_f MDT_Activation_decode_uper; +per_type_encoder_f MDT_Activation_encode_uper; +per_type_decoder_f MDT_Activation_decode_aper; +per_type_encoder_f MDT_Activation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MDT_Activation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.c new file mode 100644 index 0000000..ec03371 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.c @@ -0,0 +1,133 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MDT-Configuration.h" + +#include "M1ThresholdEventA2.h" +#include "M1PeriodicReporting.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_MDT_Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration, mdt_Activation), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MDT_Activation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mdt-Activation" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration, areaScopeOfMDT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_AreaScopeOfMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "areaScopeOfMDT" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration, measurementsToActivate), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementsToActivate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementsToActivate" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration, m1reportingTrigger), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M1ReportingTrigger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m1reportingTrigger" + }, + { ATF_POINTER, 3, offsetof(struct MDT_Configuration, m1thresholdeventA2), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M1ThresholdEventA2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m1thresholdeventA2" + }, + { ATF_POINTER, 2, offsetof(struct MDT_Configuration, m1periodicReporting), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_M1PeriodicReporting, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m1periodicReporting" + }, + { ATF_POINTER, 1, offsetof(struct MDT_Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P166, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_MDT_Configuration_oms_1[] = { 4, 5, 6 }; +static const ber_tlv_tag_t asn_DEF_MDT_Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MDT_Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mdt-Activation */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* areaScopeOfMDT */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurementsToActivate */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m1reportingTrigger */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* m1thresholdeventA2 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* m1periodicReporting */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MDT_Configuration_specs_1 = { + sizeof(struct MDT_Configuration), + offsetof(struct MDT_Configuration, _asn_ctx), + asn_MAP_MDT_Configuration_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_MDT_Configuration_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MDT_Configuration = { + "MDT-Configuration", + "MDT-Configuration", + &asn_OP_SEQUENCE, + asn_DEF_MDT_Configuration_tags_1, + sizeof(asn_DEF_MDT_Configuration_tags_1) + /sizeof(asn_DEF_MDT_Configuration_tags_1[0]), /* 1 */ + asn_DEF_MDT_Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_MDT_Configuration_tags_1) + /sizeof(asn_DEF_MDT_Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MDT_Configuration_1, + 7, /* Elements count */ + &asn_SPC_MDT_Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.h new file mode 100644 index 0000000..59b7551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Configuration.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MDT_Configuration_H_ +#define _MDT_Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MDT-Activation.h" +#include "AreaScopeOfMDT.h" +#include "MeasurementsToActivate.h" +#include "M1ReportingTrigger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct M1ThresholdEventA2; +struct M1PeriodicReporting; +struct ProtocolExtensionContainer; + +/* MDT-Configuration */ +typedef struct MDT_Configuration { + MDT_Activation_t mdt_Activation; + AreaScopeOfMDT_t areaScopeOfMDT; + MeasurementsToActivate_t measurementsToActivate; + M1ReportingTrigger_t m1reportingTrigger; + struct M1ThresholdEventA2 *m1thresholdeventA2; /* OPTIONAL */ + struct M1PeriodicReporting *m1periodicReporting; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MDT_Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MDT_Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_MDT_Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_MDT_Configuration_1[7]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MDT_Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.c new file mode 100644 index 0000000..1b0431c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MDT-Location-Info.h" + +int +MDT_Location_Info_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MDT_Location_Info_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MDT_Location_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MDT_Location_Info = { + "MDT-Location-Info", + "MDT-Location-Info", + &asn_OP_BIT_STRING, + asn_DEF_MDT_Location_Info_tags_1, + sizeof(asn_DEF_MDT_Location_Info_tags_1) + /sizeof(asn_DEF_MDT_Location_Info_tags_1[0]), /* 1 */ + asn_DEF_MDT_Location_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_MDT_Location_Info_tags_1) + /sizeof(asn_DEF_MDT_Location_Info_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MDT_Location_Info_constr_1, MDT_Location_Info_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.h new file mode 100644 index 0000000..87f410d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDT-Location-Info.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MDT_Location_Info_H_ +#define _MDT_Location_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MDT-Location-Info */ +typedef BIT_STRING_t MDT_Location_Info_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MDT_Location_Info_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MDT_Location_Info; +asn_struct_free_f MDT_Location_Info_free; +asn_struct_print_f MDT_Location_Info_print; +asn_constr_check_f MDT_Location_Info_constraint; +ber_type_decoder_f MDT_Location_Info_decode_ber; +der_type_encoder_f MDT_Location_Info_encode_der; +xer_type_decoder_f MDT_Location_Info_decode_xer; +xer_type_encoder_f MDT_Location_Info_encode_xer; +per_type_decoder_f MDT_Location_Info_decode_uper; +per_type_encoder_f MDT_Location_Info_encode_uper; +per_type_decoder_f MDT_Location_Info_decode_aper; +per_type_encoder_f MDT_Location_Info_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MDT_Location_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.c new file mode 100644 index 0000000..33d13f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MDTPLMNList.h" + +asn_per_constraints_t asn_PER_type_MDTPLMNList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MDTPLMNList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MDTPLMNList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MDTPLMNList_specs_1 = { + sizeof(struct MDTPLMNList), + offsetof(struct MDTPLMNList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MDTPLMNList = { + "MDTPLMNList", + "MDTPLMNList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MDTPLMNList_tags_1, + sizeof(asn_DEF_MDTPLMNList_tags_1) + /sizeof(asn_DEF_MDTPLMNList_tags_1[0]), /* 1 */ + asn_DEF_MDTPLMNList_tags_1, /* Same as above */ + sizeof(asn_DEF_MDTPLMNList_tags_1) + /sizeof(asn_DEF_MDTPLMNList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MDTPLMNList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MDTPLMNList_1, + 1, /* Single element */ + &asn_SPC_MDTPLMNList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.h new file mode 100644 index 0000000..2b5d0b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MDTPLMNList.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MDTPLMNList_H_ +#define _MDTPLMNList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MDTPLMNList */ +typedef struct MDTPLMNList { + A_SEQUENCE_OF(PLMN_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MDTPLMNList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MDTPLMNList; +extern asn_SET_OF_specifics_t asn_SPC_MDTPLMNList_specs_1; +extern asn_TYPE_member_t asn_MBR_MDTPLMNList_1[1]; +extern asn_per_constraints_t asn_PER_type_MDTPLMNList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MDTPLMNList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.c new file mode 100644 index 0000000..fb9f1de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MME-Code.h" + +int +MME_Code_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MME_Code_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MME_Code_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MME_Code = { + "MME-Code", + "MME-Code", + &asn_OP_OCTET_STRING, + asn_DEF_MME_Code_tags_1, + sizeof(asn_DEF_MME_Code_tags_1) + /sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */ + asn_DEF_MME_Code_tags_1, /* Same as above */ + sizeof(asn_DEF_MME_Code_tags_1) + /sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MME_Code_constr_1, MME_Code_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.h new file mode 100644 index 0000000..9c161e4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Code.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MME_Code_H_ +#define _MME_Code_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MME-Code */ +typedef OCTET_STRING_t MME_Code_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MME_Code_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MME_Code; +asn_struct_free_f MME_Code_free; +asn_struct_print_f MME_Code_print; +asn_constr_check_f MME_Code_constraint; +ber_type_decoder_f MME_Code_decode_ber; +der_type_encoder_f MME_Code_encode_der; +xer_type_decoder_f MME_Code_decode_xer; +xer_type_encoder_f MME_Code_encode_xer; +per_type_decoder_f MME_Code_decode_uper; +per_type_encoder_f MME_Code_encode_uper; +per_type_decoder_f MME_Code_decode_aper; +per_type_encoder_f MME_Code_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MME_Code_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.c new file mode 100644 index 0000000..a25836b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MME-Group-ID.h" + +int +MME_Group_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MME_Group_ID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MME_Group_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MME_Group_ID = { + "MME-Group-ID", + "MME-Group-ID", + &asn_OP_OCTET_STRING, + asn_DEF_MME_Group_ID_tags_1, + sizeof(asn_DEF_MME_Group_ID_tags_1) + /sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */ + asn_DEF_MME_Group_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_MME_Group_ID_tags_1) + /sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MME_Group_ID_constr_1, MME_Group_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.h new file mode 100644 index 0000000..5b83ef5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MME-Group-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MME_Group_ID_H_ +#define _MME_Group_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MME-Group-ID */ +typedef OCTET_STRING_t MME_Group_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MME_Group_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MME_Group_ID; +asn_struct_free_f MME_Group_ID_free; +asn_struct_print_f MME_Group_ID_print; +asn_constr_check_f MME_Group_ID_constraint; +ber_type_decoder_f MME_Group_ID_decode_ber; +der_type_encoder_f MME_Group_ID_encode_der; +xer_type_decoder_f MME_Group_ID_decode_xer; +xer_type_encoder_f MME_Group_ID_encode_xer; +per_type_decoder_f MME_Group_ID_decode_uper; +per_type_encoder_f MME_Group_ID_encode_uper; +per_type_decoder_f MME_Group_ID_decode_aper; +per_type_encoder_f MME_Group_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MME_Group_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c new file mode 100644 index 0000000..5da239c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MakeBeforeBreakIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MakeBeforeBreakIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_MakeBeforeBreakIndicator_value2enum_1[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_MakeBeforeBreakIndicator_enum2value_1[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_MakeBeforeBreakIndicator_specs_1 = { + asn_MAP_MakeBeforeBreakIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MakeBeforeBreakIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_MakeBeforeBreakIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MakeBeforeBreakIndicator = { + "MakeBeforeBreakIndicator", + "MakeBeforeBreakIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_MakeBeforeBreakIndicator_tags_1, + sizeof(asn_DEF_MakeBeforeBreakIndicator_tags_1) + /sizeof(asn_DEF_MakeBeforeBreakIndicator_tags_1[0]), /* 1 */ + asn_DEF_MakeBeforeBreakIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_MakeBeforeBreakIndicator_tags_1) + /sizeof(asn_DEF_MakeBeforeBreakIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MakeBeforeBreakIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MakeBeforeBreakIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h new file mode 100644 index 0000000..3bdf136 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MakeBeforeBreakIndicator.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MakeBeforeBreakIndicator_H_ +#define _MakeBeforeBreakIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MakeBeforeBreakIndicator { + MakeBeforeBreakIndicator_true = 0 + /* + * Enumeration is extensible + */ +} e_MakeBeforeBreakIndicator; + +/* MakeBeforeBreakIndicator */ +typedef long MakeBeforeBreakIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MakeBeforeBreakIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MakeBeforeBreakIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_MakeBeforeBreakIndicator_specs_1; +asn_struct_free_f MakeBeforeBreakIndicator_free; +asn_struct_print_f MakeBeforeBreakIndicator_print; +asn_constr_check_f MakeBeforeBreakIndicator_constraint; +ber_type_decoder_f MakeBeforeBreakIndicator_decode_ber; +der_type_encoder_f MakeBeforeBreakIndicator_encode_der; +xer_type_decoder_f MakeBeforeBreakIndicator_decode_xer; +xer_type_encoder_f MakeBeforeBreakIndicator_encode_xer; +per_type_decoder_f MakeBeforeBreakIndicator_decode_uper; +per_type_encoder_f MakeBeforeBreakIndicator_encode_uper; +per_type_decoder_f MakeBeforeBreakIndicator_decode_aper; +per_type_encoder_f MakeBeforeBreakIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MakeBeforeBreakIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..68ee114 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,31 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +include ./Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/./ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + ./converter-example.c\ + ./pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D. ../../asnFiles/e2ap-v031.asn ../../asnFiles/X2AP-PDU-Contents.asn ../../asnFiles/X2AP-Constants.asn ../../asnFiles/X2AP-Containers.asn ../../asnFiles/X2AP-IEs.asn ../../asnFiles/X2AP-CommonDataTypes.asn ../../asnFiles/e2sm-gNB-X2-release-1-v041.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..0555e3d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,1592 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +ASN_MODULE_SRCS= \ + ./E2AP-PDU.c \ + ./InitiatingMessage.c \ + ./SuccessfulOutcome.c \ + ./UnsuccessfulOutcome.c \ + ./RICsubscriptionRequest.c \ + ./RICsubscription.c \ + ./RICactions-ToBeSetup-List.c \ + ./RICaction-ToBeSetup-Item.c \ + ./RICsubscriptionResponse.c \ + ./RICaction-Admitted-List.c \ + ./RICaction-Admitted-Item.c \ + ./RICaction-NotAdmitted-List.c \ + ./RICaction-NotAdmitted-Item.c \ + ./RICsubscriptionFailure.c \ + ./RICsubscriptionDeleteRequest.c \ + ./RICsubscriptionDeleteResponse.c \ + ./RICsubscriptionDeleteFailure.c \ + ./RICindication.c \ + ./RICcontrolRequest.c \ + ./RICcontrolAcknowledge.c \ + ./RICcontrolFailure.c \ + ./RICserviceUpdate.c \ + ./RANfunctions-List.c \ + ./RANfunction-Item.c \ + ./RANfunctionsID-List.c \ + ./RANfunctionID-Item.c \ + ./RICserviceUpdateAcknowledge.c \ + ./RANfunctionsIDcause-List.c \ + ./RANfunctionIDcause-Item.c \ + ./RICserviceUpdateFailure.c \ + ./RICserviceQuery.c \ + ./CauseRIC.c \ + ./RANfunctionDefinition.c \ + ./RANfunctionID.c \ + ./RICactionDefinition.c \ + ./RICactionID.c \ + ./RICactionType.c \ + ./RICcallProcessID.c \ + ./RICcause.c \ + ./RICcontrolAckRequest.c \ + ./RICcontrolHeader.c \ + ./RICcontrolMessage.c \ + ./RICcontrolStatus.c \ + ./RICeventTriggerDefinition.c \ + ./RICindicationHeader.c \ + ./RICindicationMessage.c \ + ./RICindicationSN.c \ + ./RICindicationType.c \ + ./RICrequestID.c \ + ./RICsubsequentAction.c \ + ./RICsubsequentActionType.c \ + ./RICtimeToWait.c \ + ./HandoverRequest.c \ + ./UE-ContextInformation.c \ + ./E-RABs-ToBeSetup-List.c \ + ./E-RABs-ToBeSetup-Item.c \ + ./MobilityInformation.c \ + ./UE-ContextReferenceAtSeNB.c \ + ./UE-ContextReferenceAtWT.c \ + ./UE-ContextReferenceAtSgNB.c \ + ./HandoverRequestAcknowledge.c \ + ./E-RABs-Admitted-List.c \ + ./E-RABs-Admitted-Item.c \ + ./HandoverPreparationFailure.c \ + ./HandoverReport.c \ + ./SNStatusTransfer.c \ + ./E-RABs-SubjectToStatusTransfer-List.c \ + ./E-RABs-SubjectToStatusTransfer-Item.c \ + ./UEContextRelease.c \ + ./HandoverCancel.c \ + ./ErrorIndication.c \ + ./ResetRequest.c \ + ./ResetResponse.c \ + ./X2SetupRequest.c \ + ./X2SetupResponse.c \ + ./X2SetupFailure.c \ + ./LoadInformation.c \ + ./CellInformation-List.c \ + ./CellInformation-Item.c \ + ./ENBConfigurationUpdate.c \ + ./ServedCellsToModify.c \ + ./ServedCellsToModify-Item.c \ + ./Old-ECGIs.c \ + ./ENBConfigurationUpdateAcknowledge.c \ + ./ENBConfigurationUpdateFailure.c \ + ./ResourceStatusRequest.c \ + ./CellToReport-List.c \ + ./CellToReport-Item.c \ + ./ReportingPeriodicity.c \ + ./PartialSuccessIndicator.c \ + ./ResourceStatusResponse.c \ + ./MeasurementInitiationResult-List.c \ + ./MeasurementInitiationResult-Item.c \ + ./MeasurementFailureCause-List.c \ + ./MeasurementFailureCause-Item.c \ + ./ResourceStatusFailure.c \ + ./CompleteFailureCauseInformation-List.c \ + ./CompleteFailureCauseInformation-Item.c \ + ./ResourceStatusUpdate.c \ + ./CellMeasurementResult-List.c \ + ./CellMeasurementResult-Item.c \ + ./PrivateMessage.c \ + ./MobilityChangeRequest.c \ + ./MobilityChangeAcknowledge.c \ + ./MobilityChangeFailure.c \ + ./RLFIndication.c \ + ./CellActivationRequest.c \ + ./ServedCellsToActivate.c \ + ./ServedCellsToActivate-Item.c \ + ./CellActivationResponse.c \ + ./ActivatedCellList.c \ + ./ActivatedCellList-Item.c \ + ./CellActivationFailure.c \ + ./X2Release.c \ + ./X2APMessageTransfer.c \ + ./RNL-Header.c \ + ./X2AP-Message.c \ + ./SeNBAdditionRequest.c \ + ./E-RABs-ToBeAdded-List.c \ + ./E-RABs-ToBeAdded-Item.c \ + ./E-RABs-ToBeAdded-Item-SCG-Bearer.c \ + ./E-RABs-ToBeAdded-Item-Split-Bearer.c \ + ./SeNBAdditionRequestAcknowledge.c \ + ./E-RABs-Admitted-ToBeAdded-List.c \ + ./E-RABs-Admitted-ToBeAdded-Item.c \ + ./E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c \ + ./E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c \ + ./SeNBAdditionRequestReject.c \ + ./SeNBReconfigurationComplete.c \ + ./ResponseInformationSeNBReconfComp.c \ + ./ResponseInformationSeNBReconfComp-SuccessItem.c \ + ./ResponseInformationSeNBReconfComp-RejectByMeNBItem.c \ + ./SeNBModificationRequest.c \ + ./UE-ContextInformationSeNBModReq.c \ + ./E-RABs-ToBeAdded-List-ModReq.c \ + ./E-RABs-ToBeAdded-ModReqItem.c \ + ./E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c \ + ./E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c \ + ./E-RABs-ToBeModified-List-ModReq.c \ + ./E-RABs-ToBeModified-ModReqItem.c \ + ./E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c \ + ./E-RABs-ToBeModified-ModReqItem-Split-Bearer.c \ + ./E-RABs-ToBeReleased-List-ModReq.c \ + ./E-RABs-ToBeReleased-ModReqItem.c \ + ./E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c \ + ./E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c \ + ./SeNBModificationRequestAcknowledge.c \ + ./E-RABs-Admitted-ToBeAdded-ModAckList.c \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem.c \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c \ + ./E-RABs-Admitted-ToBeModified-ModAckList.c \ + ./E-RABs-Admitted-ToBeModified-ModAckItem.c \ + ./E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c \ + ./E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c \ + ./E-RABs-Admitted-ToBeReleased-ModAckList.c \ + ./E-RABs-Admitted-ToReleased-ModAckItem.c \ + ./E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c \ + ./E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c \ + ./SeNBModificationRequestReject.c \ + ./SeNBModificationRequired.c \ + ./E-RABs-ToBeReleased-ModReqd.c \ + ./E-RABs-ToBeReleased-ModReqdItem.c \ + ./SeNBModificationConfirm.c \ + ./SeNBModificationRefuse.c \ + ./SeNBReleaseRequest.c \ + ./E-RABs-ToBeReleased-List-RelReq.c \ + ./E-RABs-ToBeReleased-RelReqItem.c \ + ./E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c \ + ./E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c \ + ./SeNBReleaseRequired.c \ + ./SeNBReleaseConfirm.c \ + ./E-RABs-ToBeReleased-List-RelConf.c \ + ./E-RABs-ToBeReleased-RelConfItem.c \ + ./E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c \ + ./E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c \ + ./SeNBCounterCheckRequest.c \ + ./E-RABs-SubjectToCounterCheck-List.c \ + ./E-RABs-SubjectToCounterCheckItem.c \ + ./X2RemovalRequest.c \ + ./X2RemovalResponse.c \ + ./X2RemovalFailure.c \ + ./RetrieveUEContextRequest.c \ + ./RetrieveUEContextResponse.c \ + ./UE-ContextInformationRetrieve.c \ + ./E-RABs-ToBeSetup-ListRetrieve.c \ + ./E-RABs-ToBeSetupRetrieve-Item.c \ + ./RetrieveUEContextFailure.c \ + ./SgNBAdditionRequest.c \ + ./E-RABs-ToBeAdded-SgNBAddReqList.c \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item.c \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c \ + ./SgNBAdditionRequestAcknowledge.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c \ + ./SgNBAdditionRequestReject.c \ + ./SgNBReconfigurationComplete.c \ + ./ResponseInformationSgNBReconfComp.c \ + ./ResponseInformationSgNBReconfComp-SuccessItem.c \ + ./ResponseInformationSgNBReconfComp-RejectByMeNBItem.c \ + ./SgNBModificationRequest.c \ + ./UE-ContextInformation-SgNBModReq.c \ + ./E-RABs-ToBeAdded-SgNBModReq-List.c \ + ./E-RABs-ToBeAdded-SgNBModReq-Item.c \ + ./E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c \ + ./E-RABs-ToBeModified-SgNBModReq-List.c \ + ./E-RABs-ToBeModified-SgNBModReq-Item.c \ + ./E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c \ + ./E-RABs-ToBeReleased-SgNBModReq-List.c \ + ./E-RABs-ToBeReleased-SgNBModReq-Item.c \ + ./E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c \ + ./SgNBModificationRequestAcknowledge.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAckList.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c \ + ./E-RABs-Admitted-ToBeModified-SgNBModAckList.c \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAckList.c \ + ./E-RABs-Admitted-ToReleased-SgNBModAck-Item.c \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c \ + ./SgNBModificationRequestReject.c \ + ./SgNBModificationRequired.c \ + ./E-RABs-ToBeReleased-SgNBModReqdList.c \ + ./E-RABs-ToBeReleased-SgNBModReqd-Item.c \ + ./E-RABs-ToBeModified-SgNBModReqdList.c \ + ./E-RABs-ToBeModified-SgNBModReqd-Item.c \ + ./E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c \ + ./SgNBModificationConfirm.c \ + ./E-RABs-AdmittedToBeModified-SgNBModConfList.c \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item.c \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c \ + ./SgNBModificationRefuse.c \ + ./SgNBReleaseRequest.c \ + ./E-RABs-ToBeReleased-SgNBRelReqList.c \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item.c \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c \ + ./SgNBReleaseRequestAcknowledge.c \ + ./E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c \ + ./E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c \ + ./SgNBReleaseRequestReject.c \ + ./SgNBReleaseRequired.c \ + ./E-RABs-ToBeReleased-SgNBRelReqdList.c \ + ./E-RABs-ToBeReleased-SgNBRelReqd-Item.c \ + ./SgNBReleaseConfirm.c \ + ./E-RABs-ToBeReleased-SgNBRelConfList.c \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item.c \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c \ + ./SgNBCounterCheckRequest.c \ + ./E-RABs-SubjectToSgNBCounterCheck-List.c \ + ./E-RABs-SubjectToSgNBCounterCheck-Item.c \ + ./SgNBChangeRequired.c \ + ./SgNBChangeConfirm.c \ + ./E-RABs-ToBeReleased-SgNBChaConfList.c \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item.c \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c \ + ./RRCTransfer.c \ + ./SgNBChangeRefuse.c \ + ./ENDCX2SetupRequest.c \ + ./InitiatingNodeType-EndcX2Setup.c \ + ./ServedEUTRAcellsENDCX2ManagementList.c \ + ./ServedNRcellsENDCX2ManagementList.c \ + ./ServedNRCell-Information.c \ + ./FDD-InfoServedNRCell-Information.c \ + ./FDD-InfoNeighbourServedNRCell-Information.c \ + ./TDD-InfoServedNRCell-Information.c \ + ./TDD-InfoNeighbourServedNRCell-Information.c \ + ./NRNeighbour-Information.c \ + ./CellAssistanceInformation.c \ + ./Limited-list.c \ + ./ENDCX2SetupResponse.c \ + ./RespondingNodeType-EndcX2Setup.c \ + ./ENDCX2SetupFailure.c \ + ./ENDCConfigurationUpdate.c \ + ./InitiatingNodeType-EndcConfigUpdate.c \ + ./ServedEUTRAcellsToModifyListENDCConfUpd.c \ + ./ServedEUTRAcellsToDeleteListENDCConfUpd.c \ + ./ServedNRcellsToModifyENDCConfUpdList.c \ + ./ServedNRCellsToModify-Item.c \ + ./ServedNRcellsToDeleteENDCConfUpdList.c \ + ./ENDCConfigurationUpdateAcknowledge.c \ + ./RespondingNodeType-EndcConfigUpdate.c \ + ./ENDCConfigurationUpdateFailure.c \ + ./ENDCCellActivationRequest.c \ + ./ServedNRCellsToActivate.c \ + ./ServedNRCellsToActivate-Item.c \ + ./ENDCCellActivationResponse.c \ + ./ActivatedNRCellList.c \ + ./ActivatedNRCellList-Item.c \ + ./ENDCCellActivationFailure.c \ + ./SecondaryRATDataUsageReport.c \ + ./SgNBActivityNotification.c \ + ./ENDCPartialResetRequired.c \ + ./ENDCPartialResetConfirm.c \ + ./EUTRANRCellResourceCoordinationRequest.c \ + ./InitiatingNodeType-EutranrCellResourceCoordination.c \ + ./ListofEUTRACellsinEUTRACoordinationReq.c \ + ./ListofEUTRACellsinNRCoordinationReq.c \ + ./ListofNRCellsinNRCoordinationReq.c \ + ./EUTRANRCellResourceCoordinationResponse.c \ + ./RespondingNodeType-EutranrCellResourceCoordination.c \ + ./ListofEUTRACellsinEUTRACoordinationResp.c \ + ./ListofNRCellsinNRCoordinationResp.c \ + ./ENDCX2RemovalRequest.c \ + ./InitiatingNodeType-EndcX2Removal.c \ + ./ENDCX2RemovalResponse.c \ + ./RespondingNodeType-EndcX2Removal.c \ + ./ENDCX2RemovalFailure.c \ + ./DataForwardingAddressIndication.c \ + ./E-RABs-DataForwardingAddress-List.c \ + ./E-RABs-DataForwardingAddress-Item.c \ + ./GNBStatusIndication.c \ + ./ProtocolIE-Container.c \ + ./ProtocolIE-Single-Container.c \ + ./ProtocolIE-Field.c \ + ./ProtocolIE-ContainerPair.c \ + ./ProtocolIE-FieldPair.c \ + ./ProtocolIE-ContainerList.c \ + ./ProtocolIE-ContainerPairList.c \ + ./ProtocolExtensionContainer.c \ + ./ProtocolExtensionField.c \ + ./PrivateIE-Container.c \ + ./PrivateIE-Field.c \ + ./ABSInformation.c \ + ./ABSInformationFDD.c \ + ./ABSInformationTDD.c \ + ./ABS-Status.c \ + ./ActivationID.c \ + ./AdditionalSpecialSubframe-Info.c \ + ./AdditionalSpecialSubframePatterns.c \ + ./AdditionalSpecialSubframeExtension-Info.c \ + ./AdditionalSpecialSubframePatternsExtension.c \ + ./AerialUEsubscriptionInformation.c \ + ./AllocationAndRetentionPriority.c \ + ./AreaScopeOfMDT.c \ + ./AreaScopeOfQMC.c \ + ./AS-SecurityInformation.c \ + ./BandwidthReducedSI.c \ + ./BearerType.c \ + ./BenefitMetric.c \ + ./BitRate.c \ + ./BroadcastPLMNs-Item.c \ + ./BluetoothMeasurementConfiguration.c \ + ./BluetoothMeasConfigNameList.c \ + ./BluetoothMeasConfig.c \ + ./BluetoothName.c \ + ./CapacityValue.c \ + ./Cause.c \ + ./CauseMisc.c \ + ./CauseProtocol.c \ + ./CauseRadioNetwork.c \ + ./CauseTransport.c \ + ./CellBasedMDT.c \ + ./CellBasedQMC.c \ + ./CellCapacityClassValue.c \ + ./CellDeploymentStatusIndicator.c \ + ./CellIdListforMDT.c \ + ./CellIdListforQMC.c \ + ./CellReplacingInfo.c \ + ./CellReportingIndicator.c \ + ./Cell-Size.c \ + ./CellType.c \ + ./CNTypeRestrictions.c \ + ./CNTypeRestrictionsItem.c \ + ./CoMPHypothesisSet.c \ + ./CoMPHypothesisSetItem.c \ + ./CoMPInformation.c \ + ./CoMPInformationItem.c \ + ./CoMPInformationStartTime.c \ + ./CompositeAvailableCapacity.c \ + ./CompositeAvailableCapacityGroup.c \ + ./Correlation-ID.c \ + ./COUNTvalue.c \ + ./COUNTValueExtended.c \ + ./COUNTvaluePDCP-SNlength18.c \ + ./CoverageModificationList.c \ + ./CoverageModification-Item.c \ + ./CriticalityDiagnostics.c \ + ./CriticalityDiagnostics-IE-List.c \ + ./CRNTI.c \ + ./CSGMembershipStatus.c \ + ./CSG-Id.c \ + ./CSIReportList.c \ + ./CSIReportPerCSIProcess.c \ + ./CSIReportPerCSIProcessItem.c \ + ./CyclicPrefixDL.c \ + ./CyclicPrefixUL.c \ + ./DataTrafficResources.c \ + ./DataTrafficResourceIndication.c \ + ./DeactivationIndication.c \ + ./DeliveryStatus.c \ + ./DL-ABS-status.c \ + ./DL-Forwarding.c \ + ./DL-GBR-PRB-usage.c \ + ./DL-non-GBR-PRB-usage.c \ + ./DLResourceBitmapULandDLSharing.c \ + ./DLResourcesULandDLSharing.c \ + ./DL-scheduling-PDCCH-CCE-usage.c \ + ./DL-Total-PRB-usage.c \ + ./DRB-ID.c \ + ./DuplicationActivation.c \ + ./DynamicDLTransmissionInformation.c \ + ./DynamicNAICSInformation.c \ + ./EARFCN.c \ + ./EARFCNExtension.c \ + ./ECGI.c \ + ./EnhancedRNTP.c \ + ./EnhancedRNTPStartTime.c \ + ./ENB-ID.c \ + ./EncryptionAlgorithms.c \ + ./EN-DC-ResourceConfiguration.c \ + ./EPLMNs.c \ + ./ERABActivityNotifyItemList.c \ + ./ERABActivityNotifyItem.c \ + ./E-RAB-ID.c \ + ./E-RAB-Level-QoS-Parameters.c \ + ./E-RAB-List.c \ + ./E-RAB-Item.c \ + ./E-RABUsageReportList.c \ + ./E-RABUsageReport-Item.c \ + ./EUTRA-Mode-Info.c \ + ./EUTRANCellIdentifier.c \ + ./EUTRANTraceID.c \ + ./EventType.c \ + ./ExpectedUEBehaviour.c \ + ./ExpectedUEActivityBehaviour.c \ + ./ExpectedActivityPeriod.c \ + ./ExpectedIdlePeriod.c \ + ./ExpectedHOInterval.c \ + ./ExtendedULInterferenceOverloadInfo.c \ + ./ExtendedBitRate.c \ + ./FDD-Info.c \ + ./ForbiddenInterRATs.c \ + ./ForbiddenTAs.c \ + ./ForbiddenTAs-Item.c \ + ./ForbiddenTACs.c \ + ./ForbiddenLAs.c \ + ./ForbiddenLAs-Item.c \ + ./ForbiddenLACs.c \ + ./Fourframes.c \ + ./FreqBandIndicator.c \ + ./FreqBandIndicatorPriority.c \ + ./FreqBandNrItem.c \ + ./GBR-QosInformation.c \ + ./GlobalENB-ID.c \ + ./GlobalGNB-ID.c \ + ./GNBOverloadInformation.c \ + ./GTPtunnelEndpoint.c \ + ./GTP-TEI.c \ + ./GUGroupIDList.c \ + ./GU-Group-ID.c \ + ./GUMMEI.c \ + ./GNB-ID.c \ + ./HandoverReportType.c \ + ./HandoverRestrictionList.c \ + ./HFN.c \ + ./HFNModified.c \ + ./HFNforPDCP-SNlength18.c \ + ./HWLoadIndicator.c \ + ./IntegrityProtectionAlgorithms.c \ + ./InterfacesToTrace.c \ + ./InvokeIndication.c \ + ./Key-eNodeB-Star.c \ + ./LAC.c \ + ./LastVisitedCell-Item.c \ + ./LastVisitedEUTRANCellInformation.c \ + ./LastVisitedGERANCellInformation.c \ + ./LastVisitedNGRANCellInformation.c \ + ./LastVisitedUTRANCellInformation.c \ + ./LCID.c \ + ./LHN-ID.c \ + ./Links-to-log.c \ + ./LoadIndicator.c \ + ./LocationReportingInformation.c \ + ./M1PeriodicReporting.c \ + ./M1ReportingTrigger.c \ + ./M1ThresholdEventA2.c \ + ./M3Configuration.c \ + ./M3period.c \ + ./M4Configuration.c \ + ./M4period.c \ + ./M5Configuration.c \ + ./M5period.c \ + ./M6Configuration.c \ + ./M6report-interval.c \ + ./M6delay-threshold.c \ + ./M7Configuration.c \ + ./M7period.c \ + ./MakeBeforeBreakIndicator.c \ + ./ManagementBasedMDTallowed.c \ + ./Masked-IMEISV.c \ + ./MDT-Activation.c \ + ./MDT-Configuration.c \ + ./MDTPLMNList.c \ + ./MDT-Location-Info.c \ + ./Measurement-ID.c \ + ./MeasurementsToActivate.c \ + ./MeasurementThresholdA2.c \ + ./MeNBCoordinationAssistanceInformation.c \ + ./MeNBResourceCoordinationInformation.c \ + ./MeNBtoSeNBContainer.c \ + ./MME-Group-ID.c \ + ./MME-Code.c \ + ./MBMS-Service-Area-Identity-List.c \ + ./MBMS-Service-Area-Identity.c \ + ./MBSFN-Subframe-Infolist.c \ + ./MBSFN-Subframe-Info.c \ + ./MobilityParametersModificationRange.c \ + ./MobilityParametersInformation.c \ + ./MultibandInfoList.c \ + ./BandInfo.c \ + ./MeNBtoSgNBContainer.c \ + ./SplitSRBs.c \ + ./SplitSRB.c \ + ./UENRMeasurement.c \ + ./Neighbour-Information.c \ + ./NextHopChainingCount.c \ + ./NewDRBIDrequest.c \ + ./Number-of-Antennaports.c \ + ./NRFreqInfo.c \ + ./NRCellIdentifier.c \ + ./NRCGI.c \ + ./NRPCI.c \ + ./NRrestrictioninEPSasSecondaryRAT.c \ + ./NRrestrictionin5GS.c \ + ./NRencryptionAlgorithms.c \ + ./NRintegrityProtectionAlgorithms.c \ + ./NR-TxBW.c \ + ./NRNRB.c \ + ./NRSCS.c \ + ./NRS-NSSS-PowerOffset.c \ + ./FiveGS-TAC.c \ + ./NRUESecurityCapabilities.c \ + ./NSSS-NumOccasionDifferentPrecoder.c \ + ./OffsetOfNbiotChannelNumberToEARFCN.c \ + ./Oneframe.c \ + ./Packet-LossRate.c \ + ./PA-Values.c \ + ./PDCPChangeIndication.c \ + ./PDCP-SN.c \ + ./PDCP-SNExtended.c \ + ./PDCP-SNlength18.c \ + ./PDCPSnLength.c \ + ./PCI.c \ + ./PLMN-Identity.c \ + ./Port-Number.c \ + ./PRACH-Configuration.c \ + ./PLMNAreaBasedQMC.c \ + ./PLMNListforQMC.c \ + ./Pre-emptionCapability.c \ + ./Pre-emptionVulnerability.c \ + ./PriorityLevel.c \ + ./ProSeAuthorized.c \ + ./ProSeDirectDiscovery.c \ + ./ProSeDirectCommunication.c \ + ./ProSeUEtoNetworkRelaying.c \ + ./ProtectedEUTRAResourceIndication.c \ + ./ProtectedFootprintTimePattern.c \ + ./ProtectedResourceList.c \ + ./ProtectedResourceList-Item.c \ + ./QCI.c \ + ./RadioframeAllocationOffset.c \ + ./RadioframeAllocationPeriod.c \ + ./RadioResourceStatus.c \ + ./ReceiveStatusofULPDCPSDUs.c \ + ./ReceiveStatusOfULPDCPSDUsExtended.c \ + ./ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c \ + ./Reestablishment-Indication.c \ + ./Registration-Request.c \ + ./RelativeNarrowbandTxPower.c \ + ./ReplacingCellsList.c \ + ./ReplacingCellsList-Item.c \ + ./ReportAmountMDT.c \ + ./ReportArea.c \ + ./ReportCharacteristics.c \ + ./ReportingPeriodicityCSIR.c \ + ./ReportingPeriodicityRSRPMR.c \ + ./ReportIntervalMDT.c \ + ./ReservedSubframePattern.c \ + ./ResourceType.c \ + ./ResumeID.c \ + ./RLCMode.c \ + ./RLC-Status.c \ + ./RNTP-Threshold.c \ + ./RRC-Config-Ind.c \ + ./RRC-Context.c \ + ./RRCConnReestabIndicator.c \ + ./RRCConnSetupIndicator.c \ + ./RSRPMeasurementResult.c \ + ./RSRPMRList.c \ + ./RRCContainer.c \ + ./S1TNLLoadIndicator.c \ + ./SCGChangeIndication.c \ + ./SecondaryRATUsageReportList.c \ + ./SecondaryRATUsageReport-Item.c \ + ./SeNBSecurityKey.c \ + ./SeNBtoMeNBContainer.c \ + ./ServedCells.c \ + ./ServedCell-Information.c \ + ./ServiceType.c \ + ./SgNBCoordinationAssistanceInformation.c \ + ./SgNBResourceCoordinationInformation.c \ + ./SgNB-UE-X2AP-ID.c \ + ./SIPTOBearerDeactivationIndication.c \ + ./SharedResourceType.c \ + ./ShortMAC-I.c \ + ./SGNB-Addition-Trigger-Ind.c \ + ./SourceOfUEActivityBehaviourInformation.c \ + ./SpecialSubframe-Info.c \ + ./SpecialSubframePatterns.c \ + ./SpectrumSharingGroupID.c \ + ./SubbandCQI.c \ + ./Subscription-Based-UE-DifferentiationInfo.c \ + ./ScheduledCommunicationTime.c \ + ./SRVCCOperationPossible.c \ + ./SubbandCQICodeword0.c \ + ./SubbandCQICodeword1.c \ + ./SubbandCQIList.c \ + ./SubbandCQIItem.c \ + ./SubbandSize.c \ + ./SubscriberProfileIDforRFP.c \ + ./SubframeAllocation.c \ + ./SubframeAssignment.c \ + ./SubframeType.c \ + ./SgNBSecurityKey.c \ + ./SgNBtoMeNBContainer.c \ + ./SRBType.c \ + ./SCGConfigurationQuery.c \ + ./SULInformation.c \ + ./SupportedSULFreqBandItem.c \ + ./TABasedMDT.c \ + ./TAC.c \ + ./TAIBasedMDT.c \ + ./TAIListforMDT.c \ + ./TAI-Item.c \ + ./TAListforMDT.c \ + ./TABasedQMC.c \ + ./TAListforQMC.c \ + ./TAIBasedQMC.c \ + ./TAIListforQMC.c \ + ./TargetCellInUTRAN.c \ + ./TargeteNBtoSource-eNBTransparentContainer.c \ + ./TDD-Info.c \ + ./Threshold-RSRP.c \ + ./Threshold-RSRQ.c \ + ./TimeToWait.c \ + ./Time-UE-StayedInCell.c \ + ./Time-UE-StayedInCell-EnhancedGranularity.c \ + ./TraceActivation.c \ + ./TraceCollectionEntityIPAddress.c \ + ./TraceDepth.c \ + ./Transmission-Bandwidth.c \ + ./TransportLayerAddress.c \ + ./TunnelInformation.c \ + ./TypeOfError.c \ + ./UEAggregateMaximumBitRate.c \ + ./UEAppLayerMeasConfig.c \ + ./UE-ContextKeptIndicator.c \ + ./UEID.c \ + ./UE-HistoryInformation.c \ + ./UE-HistoryInformationFromTheUE.c \ + ./UE-S1AP-ID.c \ + ./UE-X2AP-ID.c \ + ./UE-X2AP-ID-Extension.c \ + ./UE-RLF-Report-Container.c \ + ./UE-RLF-Report-Container-for-extended-bands.c \ + ./UESecurityCapabilities.c \ + ./UESidelinkAggregateMaximumBitRate.c \ + ./UEsToBeResetList.c \ + ./UEsToBeResetList-Item.c \ + ./ULandDLSharing.c \ + ./ULConfiguration.c \ + ./UL-UE-Configuration.c \ + ./UL-GBR-PRB-usage.c \ + ./UL-HighInterferenceIndicationInfo.c \ + ./UL-HighInterferenceIndicationInfo-Item.c \ + ./UL-HighInterferenceIndication.c \ + ./UL-InterferenceOverloadIndication.c \ + ./UL-InterferenceOverloadIndication-Item.c \ + ./UL-non-GBR-PRB-usage.c \ + ./ULOnlySharing.c \ + ./ULResourceBitmapULandDLSharing.c \ + ./ULResourcesULandDLSharing.c \ + ./UL-scheduling-PDCCH-CCE-usage.c \ + ./UL-Total-PRB-usage.c \ + ./UsableABSInformation.c \ + ./UsableABSInformationFDD.c \ + ./UsableABSInformationTDD.c \ + ./UserPlaneTrafficActivityReport.c \ + ./V2XServicesAuthorized.c \ + ./VehicleUE.c \ + ./PedestrianUE.c \ + ./WidebandCQI.c \ + ./WidebandCQICodeword1.c \ + ./WLANMeasurementConfiguration.c \ + ./WLANMeasConfigNameList.c \ + ./WLANMeasConfig.c \ + ./WLANName.c \ + ./WTID.c \ + ./WTID-Type1.c \ + ./WTID-Long-Type2.c \ + ./WT-UE-XwAP-ID.c \ + ./X2BenefitValue.c \ + ./Criticality.c \ + ./Presence.c \ + ./PrivateIE-ID.c \ + ./ProcedureCode.c \ + ./ProtocolIE-ID.c \ + ./TriggeringMessage.c \ + ./E2SM-gNB-X2-eventTriggerDefinition.c \ + ./E2SM-gNB-X2-actionDefinition.c \ + ./E2SM-gNB-X2-indicationHeader.c \ + ./E2SM-gNB-X2-indicationMessage.c \ + ./E2SM-gNB-X2-callProcessID.c \ + ./E2SM-gNB-X2-controlHeader.c \ + ./E2SM-gNB-X2-controlMessage.c \ + ./ActionParameter-Item.c \ + ./ActionParameter-ID.c \ + ./ActionParameter-Value.c \ + ./CallProcess-ID.c \ + ./Interface-ID.c \ + ./InterfaceDirection.c \ + ./InterfaceMessage.c \ + ./InterfaceMessageType.c \ + ./TypeOfMessage.c \ + ./InterfaceProtocolIE-Item.c \ + ./InterfaceProtocolIE-ID.c \ + ./InterfaceProtocolIE-Test.c \ + ./InterfaceProtocolIE-Value.c \ + ./Style-ID.c \ + ./TimeStamp.c + +ASN_MODULE_HDRS= \ + ./E2AP-PDU.h \ + ./InitiatingMessage.h \ + ./SuccessfulOutcome.h \ + ./UnsuccessfulOutcome.h \ + ./RICsubscriptionRequest.h \ + ./RICsubscription.h \ + ./RICactions-ToBeSetup-List.h \ + ./RICaction-ToBeSetup-Item.h \ + ./RICsubscriptionResponse.h \ + ./RICaction-Admitted-List.h \ + ./RICaction-Admitted-Item.h \ + ./RICaction-NotAdmitted-List.h \ + ./RICaction-NotAdmitted-Item.h \ + ./RICsubscriptionFailure.h \ + ./RICsubscriptionDeleteRequest.h \ + ./RICsubscriptionDeleteResponse.h \ + ./RICsubscriptionDeleteFailure.h \ + ./RICindication.h \ + ./RICcontrolRequest.h \ + ./RICcontrolAcknowledge.h \ + ./RICcontrolFailure.h \ + ./RICserviceUpdate.h \ + ./RANfunctions-List.h \ + ./RANfunction-Item.h \ + ./RANfunctionsID-List.h \ + ./RANfunctionID-Item.h \ + ./RICserviceUpdateAcknowledge.h \ + ./RANfunctionsIDcause-List.h \ + ./RANfunctionIDcause-Item.h \ + ./RICserviceUpdateFailure.h \ + ./RICserviceQuery.h \ + ./CauseRIC.h \ + ./RANfunctionDefinition.h \ + ./RANfunctionID.h \ + ./RICactionDefinition.h \ + ./RICactionID.h \ + ./RICactionType.h \ + ./RICcallProcessID.h \ + ./RICcause.h \ + ./RICcontrolAckRequest.h \ + ./RICcontrolHeader.h \ + ./RICcontrolMessage.h \ + ./RICcontrolStatus.h \ + ./RICeventTriggerDefinition.h \ + ./RICindicationHeader.h \ + ./RICindicationMessage.h \ + ./RICindicationSN.h \ + ./RICindicationType.h \ + ./RICrequestID.h \ + ./RICsubsequentAction.h \ + ./RICsubsequentActionType.h \ + ./RICtimeToWait.h \ + ./HandoverRequest.h \ + ./UE-ContextInformation.h \ + ./E-RABs-ToBeSetup-List.h \ + ./E-RABs-ToBeSetup-Item.h \ + ./MobilityInformation.h \ + ./UE-ContextReferenceAtSeNB.h \ + ./UE-ContextReferenceAtWT.h \ + ./UE-ContextReferenceAtSgNB.h \ + ./HandoverRequestAcknowledge.h \ + ./E-RABs-Admitted-List.h \ + ./E-RABs-Admitted-Item.h \ + ./HandoverPreparationFailure.h \ + ./HandoverReport.h \ + ./SNStatusTransfer.h \ + ./E-RABs-SubjectToStatusTransfer-List.h \ + ./E-RABs-SubjectToStatusTransfer-Item.h \ + ./UEContextRelease.h \ + ./HandoverCancel.h \ + ./ErrorIndication.h \ + ./ResetRequest.h \ + ./ResetResponse.h \ + ./X2SetupRequest.h \ + ./X2SetupResponse.h \ + ./X2SetupFailure.h \ + ./LoadInformation.h \ + ./CellInformation-List.h \ + ./CellInformation-Item.h \ + ./ENBConfigurationUpdate.h \ + ./ServedCellsToModify.h \ + ./ServedCellsToModify-Item.h \ + ./Old-ECGIs.h \ + ./ENBConfigurationUpdateAcknowledge.h \ + ./ENBConfigurationUpdateFailure.h \ + ./ResourceStatusRequest.h \ + ./CellToReport-List.h \ + ./CellToReport-Item.h \ + ./ReportingPeriodicity.h \ + ./PartialSuccessIndicator.h \ + ./ResourceStatusResponse.h \ + ./MeasurementInitiationResult-List.h \ + ./MeasurementInitiationResult-Item.h \ + ./MeasurementFailureCause-List.h \ + ./MeasurementFailureCause-Item.h \ + ./ResourceStatusFailure.h \ + ./CompleteFailureCauseInformation-List.h \ + ./CompleteFailureCauseInformation-Item.h \ + ./ResourceStatusUpdate.h \ + ./CellMeasurementResult-List.h \ + ./CellMeasurementResult-Item.h \ + ./PrivateMessage.h \ + ./MobilityChangeRequest.h \ + ./MobilityChangeAcknowledge.h \ + ./MobilityChangeFailure.h \ + ./RLFIndication.h \ + ./CellActivationRequest.h \ + ./ServedCellsToActivate.h \ + ./ServedCellsToActivate-Item.h \ + ./CellActivationResponse.h \ + ./ActivatedCellList.h \ + ./ActivatedCellList-Item.h \ + ./CellActivationFailure.h \ + ./X2Release.h \ + ./X2APMessageTransfer.h \ + ./RNL-Header.h \ + ./X2AP-Message.h \ + ./SeNBAdditionRequest.h \ + ./E-RABs-ToBeAdded-List.h \ + ./E-RABs-ToBeAdded-Item.h \ + ./E-RABs-ToBeAdded-Item-SCG-Bearer.h \ + ./E-RABs-ToBeAdded-Item-Split-Bearer.h \ + ./SeNBAdditionRequestAcknowledge.h \ + ./E-RABs-Admitted-ToBeAdded-List.h \ + ./E-RABs-Admitted-ToBeAdded-Item.h \ + ./E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h \ + ./E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h \ + ./SeNBAdditionRequestReject.h \ + ./SeNBReconfigurationComplete.h \ + ./ResponseInformationSeNBReconfComp.h \ + ./ResponseInformationSeNBReconfComp-SuccessItem.h \ + ./ResponseInformationSeNBReconfComp-RejectByMeNBItem.h \ + ./SeNBModificationRequest.h \ + ./UE-ContextInformationSeNBModReq.h \ + ./E-RABs-ToBeAdded-List-ModReq.h \ + ./E-RABs-ToBeAdded-ModReqItem.h \ + ./E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h \ + ./E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h \ + ./E-RABs-ToBeModified-List-ModReq.h \ + ./E-RABs-ToBeModified-ModReqItem.h \ + ./E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h \ + ./E-RABs-ToBeModified-ModReqItem-Split-Bearer.h \ + ./E-RABs-ToBeReleased-List-ModReq.h \ + ./E-RABs-ToBeReleased-ModReqItem.h \ + ./E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h \ + ./E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h \ + ./SeNBModificationRequestAcknowledge.h \ + ./E-RABs-Admitted-ToBeAdded-ModAckList.h \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem.h \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h \ + ./E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h \ + ./E-RABs-Admitted-ToBeModified-ModAckList.h \ + ./E-RABs-Admitted-ToBeModified-ModAckItem.h \ + ./E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h \ + ./E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h \ + ./E-RABs-Admitted-ToBeReleased-ModAckList.h \ + ./E-RABs-Admitted-ToReleased-ModAckItem.h \ + ./E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h \ + ./E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h \ + ./SeNBModificationRequestReject.h \ + ./SeNBModificationRequired.h \ + ./E-RABs-ToBeReleased-ModReqd.h \ + ./E-RABs-ToBeReleased-ModReqdItem.h \ + ./SeNBModificationConfirm.h \ + ./SeNBModificationRefuse.h \ + ./SeNBReleaseRequest.h \ + ./E-RABs-ToBeReleased-List-RelReq.h \ + ./E-RABs-ToBeReleased-RelReqItem.h \ + ./E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h \ + ./E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h \ + ./SeNBReleaseRequired.h \ + ./SeNBReleaseConfirm.h \ + ./E-RABs-ToBeReleased-List-RelConf.h \ + ./E-RABs-ToBeReleased-RelConfItem.h \ + ./E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h \ + ./E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h \ + ./SeNBCounterCheckRequest.h \ + ./E-RABs-SubjectToCounterCheck-List.h \ + ./E-RABs-SubjectToCounterCheckItem.h \ + ./X2RemovalRequest.h \ + ./X2RemovalResponse.h \ + ./X2RemovalFailure.h \ + ./RetrieveUEContextRequest.h \ + ./RetrieveUEContextResponse.h \ + ./UE-ContextInformationRetrieve.h \ + ./E-RABs-ToBeSetup-ListRetrieve.h \ + ./E-RABs-ToBeSetupRetrieve-Item.h \ + ./RetrieveUEContextFailure.h \ + ./SgNBAdditionRequest.h \ + ./E-RABs-ToBeAdded-SgNBAddReqList.h \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item.h \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h \ + ./SgNBAdditionRequestAcknowledge.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h \ + ./SgNBAdditionRequestReject.h \ + ./SgNBReconfigurationComplete.h \ + ./ResponseInformationSgNBReconfComp.h \ + ./ResponseInformationSgNBReconfComp-SuccessItem.h \ + ./ResponseInformationSgNBReconfComp-RejectByMeNBItem.h \ + ./SgNBModificationRequest.h \ + ./UE-ContextInformation-SgNBModReq.h \ + ./E-RABs-ToBeAdded-SgNBModReq-List.h \ + ./E-RABs-ToBeAdded-SgNBModReq-Item.h \ + ./E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h \ + ./E-RABs-ToBeModified-SgNBModReq-List.h \ + ./E-RABs-ToBeModified-SgNBModReq-Item.h \ + ./E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h \ + ./E-RABs-ToBeReleased-SgNBModReq-List.h \ + ./E-RABs-ToBeReleased-SgNBModReq-Item.h \ + ./E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h \ + ./SgNBModificationRequestAcknowledge.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAckList.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h \ + ./E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h \ + ./E-RABs-Admitted-ToBeModified-SgNBModAckList.h \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h \ + ./E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAckList.h \ + ./E-RABs-Admitted-ToReleased-SgNBModAck-Item.h \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h \ + ./E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h \ + ./SgNBModificationRequestReject.h \ + ./SgNBModificationRequired.h \ + ./E-RABs-ToBeReleased-SgNBModReqdList.h \ + ./E-RABs-ToBeReleased-SgNBModReqd-Item.h \ + ./E-RABs-ToBeModified-SgNBModReqdList.h \ + ./E-RABs-ToBeModified-SgNBModReqd-Item.h \ + ./E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h \ + ./SgNBModificationConfirm.h \ + ./E-RABs-AdmittedToBeModified-SgNBModConfList.h \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item.h \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h \ + ./E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h \ + ./SgNBModificationRefuse.h \ + ./SgNBReleaseRequest.h \ + ./E-RABs-ToBeReleased-SgNBRelReqList.h \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item.h \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h \ + ./SgNBReleaseRequestAcknowledge.h \ + ./E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h \ + ./E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h \ + ./SgNBReleaseRequestReject.h \ + ./SgNBReleaseRequired.h \ + ./E-RABs-ToBeReleased-SgNBRelReqdList.h \ + ./E-RABs-ToBeReleased-SgNBRelReqd-Item.h \ + ./SgNBReleaseConfirm.h \ + ./E-RABs-ToBeReleased-SgNBRelConfList.h \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item.h \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h \ + ./SgNBCounterCheckRequest.h \ + ./E-RABs-SubjectToSgNBCounterCheck-List.h \ + ./E-RABs-SubjectToSgNBCounterCheck-Item.h \ + ./SgNBChangeRequired.h \ + ./SgNBChangeConfirm.h \ + ./E-RABs-ToBeReleased-SgNBChaConfList.h \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item.h \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h \ + ./E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h \ + ./RRCTransfer.h \ + ./SgNBChangeRefuse.h \ + ./ENDCX2SetupRequest.h \ + ./InitiatingNodeType-EndcX2Setup.h \ + ./ServedEUTRAcellsENDCX2ManagementList.h \ + ./ServedNRcellsENDCX2ManagementList.h \ + ./ServedNRCell-Information.h \ + ./FDD-InfoServedNRCell-Information.h \ + ./FDD-InfoNeighbourServedNRCell-Information.h \ + ./TDD-InfoServedNRCell-Information.h \ + ./TDD-InfoNeighbourServedNRCell-Information.h \ + ./NRNeighbour-Information.h \ + ./CellAssistanceInformation.h \ + ./Limited-list.h \ + ./ENDCX2SetupResponse.h \ + ./RespondingNodeType-EndcX2Setup.h \ + ./ENDCX2SetupFailure.h \ + ./ENDCConfigurationUpdate.h \ + ./InitiatingNodeType-EndcConfigUpdate.h \ + ./ServedEUTRAcellsToModifyListENDCConfUpd.h \ + ./ServedEUTRAcellsToDeleteListENDCConfUpd.h \ + ./ServedNRcellsToModifyENDCConfUpdList.h \ + ./ServedNRCellsToModify-Item.h \ + ./ServedNRcellsToDeleteENDCConfUpdList.h \ + ./ENDCConfigurationUpdateAcknowledge.h \ + ./RespondingNodeType-EndcConfigUpdate.h \ + ./ENDCConfigurationUpdateFailure.h \ + ./ENDCCellActivationRequest.h \ + ./ServedNRCellsToActivate.h \ + ./ServedNRCellsToActivate-Item.h \ + ./ENDCCellActivationResponse.h \ + ./ActivatedNRCellList.h \ + ./ActivatedNRCellList-Item.h \ + ./ENDCCellActivationFailure.h \ + ./SecondaryRATDataUsageReport.h \ + ./SgNBActivityNotification.h \ + ./ENDCPartialResetRequired.h \ + ./ENDCPartialResetConfirm.h \ + ./EUTRANRCellResourceCoordinationRequest.h \ + ./InitiatingNodeType-EutranrCellResourceCoordination.h \ + ./ListofEUTRACellsinEUTRACoordinationReq.h \ + ./ListofEUTRACellsinNRCoordinationReq.h \ + ./ListofNRCellsinNRCoordinationReq.h \ + ./EUTRANRCellResourceCoordinationResponse.h \ + ./RespondingNodeType-EutranrCellResourceCoordination.h \ + ./ListofEUTRACellsinEUTRACoordinationResp.h \ + ./ListofNRCellsinNRCoordinationResp.h \ + ./ENDCX2RemovalRequest.h \ + ./InitiatingNodeType-EndcX2Removal.h \ + ./ENDCX2RemovalResponse.h \ + ./RespondingNodeType-EndcX2Removal.h \ + ./ENDCX2RemovalFailure.h \ + ./DataForwardingAddressIndication.h \ + ./E-RABs-DataForwardingAddress-List.h \ + ./E-RABs-DataForwardingAddress-Item.h \ + ./GNBStatusIndication.h \ + ./ProtocolIE-Container.h \ + ./ProtocolIE-Single-Container.h \ + ./ProtocolIE-Field.h \ + ./ProtocolIE-ContainerPair.h \ + ./ProtocolIE-FieldPair.h \ + ./ProtocolIE-ContainerList.h \ + ./ProtocolIE-ContainerPairList.h \ + ./ProtocolExtensionContainer.h \ + ./ProtocolExtensionField.h \ + ./PrivateIE-Container.h \ + ./PrivateIE-Field.h \ + ./ABSInformation.h \ + ./ABSInformationFDD.h \ + ./ABSInformationTDD.h \ + ./ABS-Status.h \ + ./ActivationID.h \ + ./AdditionalSpecialSubframe-Info.h \ + ./AdditionalSpecialSubframePatterns.h \ + ./AdditionalSpecialSubframeExtension-Info.h \ + ./AdditionalSpecialSubframePatternsExtension.h \ + ./AerialUEsubscriptionInformation.h \ + ./AllocationAndRetentionPriority.h \ + ./AreaScopeOfMDT.h \ + ./AreaScopeOfQMC.h \ + ./AS-SecurityInformation.h \ + ./BandwidthReducedSI.h \ + ./BearerType.h \ + ./BenefitMetric.h \ + ./BitRate.h \ + ./BroadcastPLMNs-Item.h \ + ./BluetoothMeasurementConfiguration.h \ + ./BluetoothMeasConfigNameList.h \ + ./BluetoothMeasConfig.h \ + ./BluetoothName.h \ + ./CapacityValue.h \ + ./Cause.h \ + ./CauseMisc.h \ + ./CauseProtocol.h \ + ./CauseRadioNetwork.h \ + ./CauseTransport.h \ + ./CellBasedMDT.h \ + ./CellBasedQMC.h \ + ./CellCapacityClassValue.h \ + ./CellDeploymentStatusIndicator.h \ + ./CellIdListforMDT.h \ + ./CellIdListforQMC.h \ + ./CellReplacingInfo.h \ + ./CellReportingIndicator.h \ + ./Cell-Size.h \ + ./CellType.h \ + ./CNTypeRestrictions.h \ + ./CNTypeRestrictionsItem.h \ + ./CoMPHypothesisSet.h \ + ./CoMPHypothesisSetItem.h \ + ./CoMPInformation.h \ + ./CoMPInformationItem.h \ + ./CoMPInformationStartTime.h \ + ./CompositeAvailableCapacity.h \ + ./CompositeAvailableCapacityGroup.h \ + ./Correlation-ID.h \ + ./COUNTvalue.h \ + ./COUNTValueExtended.h \ + ./COUNTvaluePDCP-SNlength18.h \ + ./CoverageModificationList.h \ + ./CoverageModification-Item.h \ + ./CriticalityDiagnostics.h \ + ./CriticalityDiagnostics-IE-List.h \ + ./CRNTI.h \ + ./CSGMembershipStatus.h \ + ./CSG-Id.h \ + ./CSIReportList.h \ + ./CSIReportPerCSIProcess.h \ + ./CSIReportPerCSIProcessItem.h \ + ./CyclicPrefixDL.h \ + ./CyclicPrefixUL.h \ + ./DataTrafficResources.h \ + ./DataTrafficResourceIndication.h \ + ./DeactivationIndication.h \ + ./DeliveryStatus.h \ + ./DL-ABS-status.h \ + ./DL-Forwarding.h \ + ./DL-GBR-PRB-usage.h \ + ./DL-non-GBR-PRB-usage.h \ + ./DLResourceBitmapULandDLSharing.h \ + ./DLResourcesULandDLSharing.h \ + ./DL-scheduling-PDCCH-CCE-usage.h \ + ./DL-Total-PRB-usage.h \ + ./DRB-ID.h \ + ./DuplicationActivation.h \ + ./DynamicDLTransmissionInformation.h \ + ./DynamicNAICSInformation.h \ + ./EARFCN.h \ + ./EARFCNExtension.h \ + ./ECGI.h \ + ./EnhancedRNTP.h \ + ./EnhancedRNTPStartTime.h \ + ./ENB-ID.h \ + ./EncryptionAlgorithms.h \ + ./EN-DC-ResourceConfiguration.h \ + ./EPLMNs.h \ + ./ERABActivityNotifyItemList.h \ + ./ERABActivityNotifyItem.h \ + ./E-RAB-ID.h \ + ./E-RAB-Level-QoS-Parameters.h \ + ./E-RAB-List.h \ + ./E-RAB-Item.h \ + ./E-RABUsageReportList.h \ + ./E-RABUsageReport-Item.h \ + ./EUTRA-Mode-Info.h \ + ./EUTRANCellIdentifier.h \ + ./EUTRANTraceID.h \ + ./EventType.h \ + ./ExpectedUEBehaviour.h \ + ./ExpectedUEActivityBehaviour.h \ + ./ExpectedActivityPeriod.h \ + ./ExpectedIdlePeriod.h \ + ./ExpectedHOInterval.h \ + ./ExtendedULInterferenceOverloadInfo.h \ + ./ExtendedBitRate.h \ + ./FDD-Info.h \ + ./ForbiddenInterRATs.h \ + ./ForbiddenTAs.h \ + ./ForbiddenTAs-Item.h \ + ./ForbiddenTACs.h \ + ./ForbiddenLAs.h \ + ./ForbiddenLAs-Item.h \ + ./ForbiddenLACs.h \ + ./Fourframes.h \ + ./FreqBandIndicator.h \ + ./FreqBandIndicatorPriority.h \ + ./FreqBandNrItem.h \ + ./GBR-QosInformation.h \ + ./GlobalENB-ID.h \ + ./GlobalGNB-ID.h \ + ./GNBOverloadInformation.h \ + ./GTPtunnelEndpoint.h \ + ./GTP-TEI.h \ + ./GUGroupIDList.h \ + ./GU-Group-ID.h \ + ./GUMMEI.h \ + ./GNB-ID.h \ + ./HandoverReportType.h \ + ./HandoverRestrictionList.h \ + ./HFN.h \ + ./HFNModified.h \ + ./HFNforPDCP-SNlength18.h \ + ./HWLoadIndicator.h \ + ./IntegrityProtectionAlgorithms.h \ + ./InterfacesToTrace.h \ + ./InvokeIndication.h \ + ./Key-eNodeB-Star.h \ + ./LAC.h \ + ./LastVisitedCell-Item.h \ + ./LastVisitedEUTRANCellInformation.h \ + ./LastVisitedGERANCellInformation.h \ + ./LastVisitedNGRANCellInformation.h \ + ./LastVisitedUTRANCellInformation.h \ + ./LCID.h \ + ./LHN-ID.h \ + ./Links-to-log.h \ + ./LoadIndicator.h \ + ./LocationReportingInformation.h \ + ./M1PeriodicReporting.h \ + ./M1ReportingTrigger.h \ + ./M1ThresholdEventA2.h \ + ./M3Configuration.h \ + ./M3period.h \ + ./M4Configuration.h \ + ./M4period.h \ + ./M5Configuration.h \ + ./M5period.h \ + ./M6Configuration.h \ + ./M6report-interval.h \ + ./M6delay-threshold.h \ + ./M7Configuration.h \ + ./M7period.h \ + ./MakeBeforeBreakIndicator.h \ + ./ManagementBasedMDTallowed.h \ + ./Masked-IMEISV.h \ + ./MDT-Activation.h \ + ./MDT-Configuration.h \ + ./MDTPLMNList.h \ + ./MDT-Location-Info.h \ + ./Measurement-ID.h \ + ./MeasurementsToActivate.h \ + ./MeasurementThresholdA2.h \ + ./MeNBCoordinationAssistanceInformation.h \ + ./MeNBResourceCoordinationInformation.h \ + ./MeNBtoSeNBContainer.h \ + ./MME-Group-ID.h \ + ./MME-Code.h \ + ./MBMS-Service-Area-Identity-List.h \ + ./MBMS-Service-Area-Identity.h \ + ./MBSFN-Subframe-Infolist.h \ + ./MBSFN-Subframe-Info.h \ + ./MobilityParametersModificationRange.h \ + ./MobilityParametersInformation.h \ + ./MultibandInfoList.h \ + ./BandInfo.h \ + ./MeNBtoSgNBContainer.h \ + ./SplitSRBs.h \ + ./SplitSRB.h \ + ./UENRMeasurement.h \ + ./Neighbour-Information.h \ + ./NextHopChainingCount.h \ + ./NewDRBIDrequest.h \ + ./Number-of-Antennaports.h \ + ./NRFreqInfo.h \ + ./NRCellIdentifier.h \ + ./NRCGI.h \ + ./NRPCI.h \ + ./NRrestrictioninEPSasSecondaryRAT.h \ + ./NRrestrictionin5GS.h \ + ./NRencryptionAlgorithms.h \ + ./NRintegrityProtectionAlgorithms.h \ + ./NR-TxBW.h \ + ./NRNRB.h \ + ./NRSCS.h \ + ./NRS-NSSS-PowerOffset.h \ + ./FiveGS-TAC.h \ + ./NRUESecurityCapabilities.h \ + ./NSSS-NumOccasionDifferentPrecoder.h \ + ./OffsetOfNbiotChannelNumberToEARFCN.h \ + ./Oneframe.h \ + ./Packet-LossRate.h \ + ./PA-Values.h \ + ./PDCPChangeIndication.h \ + ./PDCP-SN.h \ + ./PDCP-SNExtended.h \ + ./PDCP-SNlength18.h \ + ./PDCPSnLength.h \ + ./PCI.h \ + ./PLMN-Identity.h \ + ./Port-Number.h \ + ./PRACH-Configuration.h \ + ./PLMNAreaBasedQMC.h \ + ./PLMNListforQMC.h \ + ./Pre-emptionCapability.h \ + ./Pre-emptionVulnerability.h \ + ./PriorityLevel.h \ + ./ProSeAuthorized.h \ + ./ProSeDirectDiscovery.h \ + ./ProSeDirectCommunication.h \ + ./ProSeUEtoNetworkRelaying.h \ + ./ProtectedEUTRAResourceIndication.h \ + ./ProtectedFootprintTimePattern.h \ + ./ProtectedResourceList.h \ + ./ProtectedResourceList-Item.h \ + ./QCI.h \ + ./RadioframeAllocationOffset.h \ + ./RadioframeAllocationPeriod.h \ + ./RadioResourceStatus.h \ + ./ReceiveStatusofULPDCPSDUs.h \ + ./ReceiveStatusOfULPDCPSDUsExtended.h \ + ./ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h \ + ./Reestablishment-Indication.h \ + ./Registration-Request.h \ + ./RelativeNarrowbandTxPower.h \ + ./ReplacingCellsList.h \ + ./ReplacingCellsList-Item.h \ + ./ReportAmountMDT.h \ + ./ReportArea.h \ + ./ReportCharacteristics.h \ + ./ReportingPeriodicityCSIR.h \ + ./ReportingPeriodicityRSRPMR.h \ + ./ReportIntervalMDT.h \ + ./ReservedSubframePattern.h \ + ./ResourceType.h \ + ./ResumeID.h \ + ./RLCMode.h \ + ./RLC-Status.h \ + ./RNTP-Threshold.h \ + ./RRC-Config-Ind.h \ + ./RRC-Context.h \ + ./RRCConnReestabIndicator.h \ + ./RRCConnSetupIndicator.h \ + ./RSRPMeasurementResult.h \ + ./RSRPMRList.h \ + ./RRCContainer.h \ + ./S1TNLLoadIndicator.h \ + ./SCGChangeIndication.h \ + ./SecondaryRATUsageReportList.h \ + ./SecondaryRATUsageReport-Item.h \ + ./SeNBSecurityKey.h \ + ./SeNBtoMeNBContainer.h \ + ./ServedCells.h \ + ./ServedCell-Information.h \ + ./ServiceType.h \ + ./SgNBCoordinationAssistanceInformation.h \ + ./SgNBResourceCoordinationInformation.h \ + ./SgNB-UE-X2AP-ID.h \ + ./SIPTOBearerDeactivationIndication.h \ + ./SharedResourceType.h \ + ./ShortMAC-I.h \ + ./SGNB-Addition-Trigger-Ind.h \ + ./SourceOfUEActivityBehaviourInformation.h \ + ./SpecialSubframe-Info.h \ + ./SpecialSubframePatterns.h \ + ./SpectrumSharingGroupID.h \ + ./SubbandCQI.h \ + ./Subscription-Based-UE-DifferentiationInfo.h \ + ./ScheduledCommunicationTime.h \ + ./SRVCCOperationPossible.h \ + ./SubbandCQICodeword0.h \ + ./SubbandCQICodeword1.h \ + ./SubbandCQIList.h \ + ./SubbandCQIItem.h \ + ./SubbandSize.h \ + ./SubscriberProfileIDforRFP.h \ + ./SubframeAllocation.h \ + ./SubframeAssignment.h \ + ./SubframeType.h \ + ./SgNBSecurityKey.h \ + ./SgNBtoMeNBContainer.h \ + ./SRBType.h \ + ./SCGConfigurationQuery.h \ + ./SULInformation.h \ + ./SupportedSULFreqBandItem.h \ + ./TABasedMDT.h \ + ./TAC.h \ + ./TAIBasedMDT.h \ + ./TAIListforMDT.h \ + ./TAI-Item.h \ + ./TAListforMDT.h \ + ./TABasedQMC.h \ + ./TAListforQMC.h \ + ./TAIBasedQMC.h \ + ./TAIListforQMC.h \ + ./TargetCellInUTRAN.h \ + ./TargeteNBtoSource-eNBTransparentContainer.h \ + ./TDD-Info.h \ + ./Threshold-RSRP.h \ + ./Threshold-RSRQ.h \ + ./TimeToWait.h \ + ./Time-UE-StayedInCell.h \ + ./Time-UE-StayedInCell-EnhancedGranularity.h \ + ./TraceActivation.h \ + ./TraceCollectionEntityIPAddress.h \ + ./TraceDepth.h \ + ./Transmission-Bandwidth.h \ + ./TransportLayerAddress.h \ + ./TunnelInformation.h \ + ./TypeOfError.h \ + ./UEAggregateMaximumBitRate.h \ + ./UEAppLayerMeasConfig.h \ + ./UE-ContextKeptIndicator.h \ + ./UEID.h \ + ./UE-HistoryInformation.h \ + ./UE-HistoryInformationFromTheUE.h \ + ./UE-S1AP-ID.h \ + ./UE-X2AP-ID.h \ + ./UE-X2AP-ID-Extension.h \ + ./UE-RLF-Report-Container.h \ + ./UE-RLF-Report-Container-for-extended-bands.h \ + ./UESecurityCapabilities.h \ + ./UESidelinkAggregateMaximumBitRate.h \ + ./UEsToBeResetList.h \ + ./UEsToBeResetList-Item.h \ + ./ULandDLSharing.h \ + ./ULConfiguration.h \ + ./UL-UE-Configuration.h \ + ./UL-GBR-PRB-usage.h \ + ./UL-HighInterferenceIndicationInfo.h \ + ./UL-HighInterferenceIndicationInfo-Item.h \ + ./UL-HighInterferenceIndication.h \ + ./UL-InterferenceOverloadIndication.h \ + ./UL-InterferenceOverloadIndication-Item.h \ + ./UL-non-GBR-PRB-usage.h \ + ./ULOnlySharing.h \ + ./ULResourceBitmapULandDLSharing.h \ + ./ULResourcesULandDLSharing.h \ + ./UL-scheduling-PDCCH-CCE-usage.h \ + ./UL-Total-PRB-usage.h \ + ./UsableABSInformation.h \ + ./UsableABSInformationFDD.h \ + ./UsableABSInformationTDD.h \ + ./UserPlaneTrafficActivityReport.h \ + ./V2XServicesAuthorized.h \ + ./VehicleUE.h \ + ./PedestrianUE.h \ + ./WidebandCQI.h \ + ./WidebandCQICodeword1.h \ + ./WLANMeasurementConfiguration.h \ + ./WLANMeasConfigNameList.h \ + ./WLANMeasConfig.h \ + ./WLANName.h \ + ./WTID.h \ + ./WTID-Type1.h \ + ./WTID-Long-Type2.h \ + ./WT-UE-XwAP-ID.h \ + ./X2BenefitValue.h \ + ./Criticality.h \ + ./Presence.h \ + ./PrivateIE-ID.h \ + ./ProcedureCode.h \ + ./ProtocolIE-ID.h \ + ./TriggeringMessage.h \ + ./E2SM-gNB-X2-eventTriggerDefinition.h \ + ./E2SM-gNB-X2-actionDefinition.h \ + ./E2SM-gNB-X2-indicationHeader.h \ + ./E2SM-gNB-X2-indicationMessage.h \ + ./E2SM-gNB-X2-callProcessID.h \ + ./E2SM-gNB-X2-controlHeader.h \ + ./E2SM-gNB-X2-controlMessage.h \ + ./ActionParameter-Item.h \ + ./ActionParameter-ID.h \ + ./ActionParameter-Value.h \ + ./CallProcess-ID.h \ + ./Interface-ID.h \ + ./InterfaceDirection.h \ + ./InterfaceMessage.h \ + ./InterfaceMessageType.h \ + ./TypeOfMessage.h \ + ./InterfaceProtocolIE-Item.h \ + ./InterfaceProtocolIE-ID.h \ + ./InterfaceProtocolIE-Test.h \ + ./InterfaceProtocolIE-Value.h \ + ./Style-ID.h \ + ./TimeStamp.h + +ASN_MODULE_HDRS+=./ANY.h +ASN_MODULE_SRCS+=./ANY.c +ASN_MODULE_HDRS+=./OCTET_STRING.h +ASN_MODULE_HDRS+=./OPEN_TYPE.h +ASN_MODULE_SRCS+=./OPEN_TYPE.c +ASN_MODULE_HDRS+=./constr_CHOICE.h +ASN_MODULE_HDRS+=./BOOLEAN.h +ASN_MODULE_SRCS+=./BOOLEAN.c +ASN_MODULE_HDRS+=./INTEGER.h +ASN_MODULE_SRCS+=./INTEGER.c +ASN_MODULE_HDRS+=./NULL.h +ASN_MODULE_SRCS+=./NULL.c +ASN_MODULE_HDRS+=./NativeEnumerated.h +ASN_MODULE_SRCS+=./NativeEnumerated.c +ASN_MODULE_HDRS+=./NativeInteger.h +ASN_MODULE_SRCS+=./NativeInteger.c +ASN_MODULE_HDRS+=./OBJECT_IDENTIFIER.h +ASN_MODULE_SRCS+=./OBJECT_IDENTIFIER.c +ASN_MODULE_HDRS+=./PrintableString.h +ASN_MODULE_SRCS+=./PrintableString.c +ASN_MODULE_HDRS+=./asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./asn_SET_OF.h +ASN_MODULE_SRCS+=./asn_SET_OF.c +ASN_MODULE_SRCS+=./constr_CHOICE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE.h +ASN_MODULE_SRCS+=./constr_SEQUENCE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./constr_SET_OF.h +ASN_MODULE_SRCS+=./constr_SET_OF.c +ASN_MODULE_HDRS+=./asn_application.h +ASN_MODULE_SRCS+=./asn_application.c +ASN_MODULE_HDRS+=./asn_ioc.h +ASN_MODULE_HDRS+=./asn_system.h +ASN_MODULE_HDRS+=./asn_codecs.h +ASN_MODULE_HDRS+=./asn_internal.h +ASN_MODULE_SRCS+=./asn_internal.c +ASN_MODULE_HDRS+=./asn_random_fill.h +ASN_MODULE_SRCS+=./asn_random_fill.c +ASN_MODULE_HDRS+=./asn_bit_data.h +ASN_MODULE_SRCS+=./asn_bit_data.c +ASN_MODULE_SRCS+=./OCTET_STRING.c +ASN_MODULE_HDRS+=./BIT_STRING.h +ASN_MODULE_SRCS+=./BIT_STRING.c +ASN_MODULE_SRCS+=./asn_codecs_prim.c +ASN_MODULE_HDRS+=./asn_codecs_prim.h +ASN_MODULE_HDRS+=./ber_tlv_length.h +ASN_MODULE_SRCS+=./ber_tlv_length.c +ASN_MODULE_HDRS+=./ber_tlv_tag.h +ASN_MODULE_SRCS+=./ber_tlv_tag.c +ASN_MODULE_HDRS+=./ber_decoder.h +ASN_MODULE_SRCS+=./ber_decoder.c +ASN_MODULE_HDRS+=./der_encoder.h +ASN_MODULE_SRCS+=./der_encoder.c +ASN_MODULE_HDRS+=./constr_TYPE.h +ASN_MODULE_SRCS+=./constr_TYPE.c +ASN_MODULE_HDRS+=./constraints.h +ASN_MODULE_SRCS+=./constraints.c +ASN_MODULE_HDRS+=./xer_support.h +ASN_MODULE_SRCS+=./xer_support.c +ASN_MODULE_HDRS+=./xer_decoder.h +ASN_MODULE_SRCS+=./xer_decoder.c +ASN_MODULE_HDRS+=./xer_encoder.h +ASN_MODULE_SRCS+=./xer_encoder.c +ASN_MODULE_HDRS+=./per_support.h +ASN_MODULE_SRCS+=./per_support.c +ASN_MODULE_HDRS+=./per_decoder.h +ASN_MODULE_SRCS+=./per_decoder.c +ASN_MODULE_HDRS+=./per_encoder.h +ASN_MODULE_SRCS+=./per_encoder.c +ASN_MODULE_HDRS+=./per_opentype.h +ASN_MODULE_SRCS+=./per_opentype.c + +ASN_MODULE_CFLAGS=-DASN_DISABLE_OER_SUPPORT + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/./ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.c new file mode 100644 index 0000000..c8912f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ManagementBasedMDTallowed.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ManagementBasedMDTallowed_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ManagementBasedMDTallowed_value2enum_1[] = { + { 0, 7, "allowed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ManagementBasedMDTallowed_enum2value_1[] = { + 0 /* allowed(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ManagementBasedMDTallowed_specs_1 = { + asn_MAP_ManagementBasedMDTallowed_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ManagementBasedMDTallowed_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ManagementBasedMDTallowed_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ManagementBasedMDTallowed = { + "ManagementBasedMDTallowed", + "ManagementBasedMDTallowed", + &asn_OP_NativeEnumerated, + asn_DEF_ManagementBasedMDTallowed_tags_1, + sizeof(asn_DEF_ManagementBasedMDTallowed_tags_1) + /sizeof(asn_DEF_ManagementBasedMDTallowed_tags_1[0]), /* 1 */ + asn_DEF_ManagementBasedMDTallowed_tags_1, /* Same as above */ + sizeof(asn_DEF_ManagementBasedMDTallowed_tags_1) + /sizeof(asn_DEF_ManagementBasedMDTallowed_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ManagementBasedMDTallowed_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ManagementBasedMDTallowed_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.h new file mode 100644 index 0000000..6a74a1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ManagementBasedMDTallowed.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ManagementBasedMDTallowed_H_ +#define _ManagementBasedMDTallowed_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ManagementBasedMDTallowed { + ManagementBasedMDTallowed_allowed = 0 + /* + * Enumeration is extensible + */ +} e_ManagementBasedMDTallowed; + +/* ManagementBasedMDTallowed */ +typedef long ManagementBasedMDTallowed_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ManagementBasedMDTallowed_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ManagementBasedMDTallowed; +extern const asn_INTEGER_specifics_t asn_SPC_ManagementBasedMDTallowed_specs_1; +asn_struct_free_f ManagementBasedMDTallowed_free; +asn_struct_print_f ManagementBasedMDTallowed_print; +asn_constr_check_f ManagementBasedMDTallowed_constraint; +ber_type_decoder_f ManagementBasedMDTallowed_decode_ber; +der_type_encoder_f ManagementBasedMDTallowed_encode_der; +xer_type_decoder_f ManagementBasedMDTallowed_decode_xer; +xer_type_encoder_f ManagementBasedMDTallowed_encode_xer; +per_type_decoder_f ManagementBasedMDTallowed_decode_uper; +per_type_encoder_f ManagementBasedMDTallowed_encode_uper; +per_type_decoder_f ManagementBasedMDTallowed_decode_aper; +per_type_encoder_f ManagementBasedMDTallowed_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ManagementBasedMDTallowed_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.c new file mode 100644 index 0000000..6e1175c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Masked-IMEISV.h" + +int +Masked_IMEISV_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 64)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Masked_IMEISV_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 64, 64 } /* (SIZE(64..64)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Masked_IMEISV_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Masked_IMEISV = { + "Masked-IMEISV", + "Masked-IMEISV", + &asn_OP_BIT_STRING, + asn_DEF_Masked_IMEISV_tags_1, + sizeof(asn_DEF_Masked_IMEISV_tags_1) + /sizeof(asn_DEF_Masked_IMEISV_tags_1[0]), /* 1 */ + asn_DEF_Masked_IMEISV_tags_1, /* Same as above */ + sizeof(asn_DEF_Masked_IMEISV_tags_1) + /sizeof(asn_DEF_Masked_IMEISV_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Masked_IMEISV_constr_1, Masked_IMEISV_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.h new file mode 100644 index 0000000..9825386 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Masked-IMEISV.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Masked_IMEISV_H_ +#define _Masked_IMEISV_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Masked-IMEISV */ +typedef BIT_STRING_t Masked_IMEISV_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Masked_IMEISV_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Masked_IMEISV; +asn_struct_free_f Masked_IMEISV_free; +asn_struct_print_f Masked_IMEISV_print; +asn_constr_check_f Masked_IMEISV_constraint; +ber_type_decoder_f Masked_IMEISV_decode_ber; +der_type_encoder_f Masked_IMEISV_encode_der; +xer_type_decoder_f Masked_IMEISV_decode_xer; +xer_type_encoder_f Masked_IMEISV_encode_xer; +per_type_decoder_f Masked_IMEISV_decode_uper; +per_type_encoder_f Masked_IMEISV_encode_uper; +per_type_decoder_f Masked_IMEISV_decode_aper; +per_type_encoder_f Masked_IMEISV_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Masked_IMEISV_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c new file mode 100644 index 0000000..bf040a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeNBCoordinationAssistanceInformation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MeNBCoordinationAssistanceInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_MeNBCoordinationAssistanceInformation_value2enum_1[] = { + { 0, 25, "coordination-not-required" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_MeNBCoordinationAssistanceInformation_enum2value_1[] = { + 0 /* coordination-not-required(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_MeNBCoordinationAssistanceInformation_specs_1 = { + asn_MAP_MeNBCoordinationAssistanceInformation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MeNBCoordinationAssistanceInformation_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_MeNBCoordinationAssistanceInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeNBCoordinationAssistanceInformation = { + "MeNBCoordinationAssistanceInformation", + "MeNBCoordinationAssistanceInformation", + &asn_OP_NativeEnumerated, + asn_DEF_MeNBCoordinationAssistanceInformation_tags_1, + sizeof(asn_DEF_MeNBCoordinationAssistanceInformation_tags_1) + /sizeof(asn_DEF_MeNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */ + asn_DEF_MeNBCoordinationAssistanceInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_MeNBCoordinationAssistanceInformation_tags_1) + /sizeof(asn_DEF_MeNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeNBCoordinationAssistanceInformation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MeNBCoordinationAssistanceInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h new file mode 100644 index 0000000..691ca11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBCoordinationAssistanceInformation.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeNBCoordinationAssistanceInformation_H_ +#define _MeNBCoordinationAssistanceInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeNBCoordinationAssistanceInformation { + MeNBCoordinationAssistanceInformation_coordination_not_required = 0 + /* + * Enumeration is extensible + */ +} e_MeNBCoordinationAssistanceInformation; + +/* MeNBCoordinationAssistanceInformation */ +typedef long MeNBCoordinationAssistanceInformation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MeNBCoordinationAssistanceInformation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MeNBCoordinationAssistanceInformation; +extern const asn_INTEGER_specifics_t asn_SPC_MeNBCoordinationAssistanceInformation_specs_1; +asn_struct_free_f MeNBCoordinationAssistanceInformation_free; +asn_struct_print_f MeNBCoordinationAssistanceInformation_print; +asn_constr_check_f MeNBCoordinationAssistanceInformation_constraint; +ber_type_decoder_f MeNBCoordinationAssistanceInformation_decode_ber; +der_type_encoder_f MeNBCoordinationAssistanceInformation_encode_der; +xer_type_decoder_f MeNBCoordinationAssistanceInformation_decode_xer; +xer_type_encoder_f MeNBCoordinationAssistanceInformation_encode_xer; +per_type_decoder_f MeNBCoordinationAssistanceInformation_decode_uper; +per_type_encoder_f MeNBCoordinationAssistanceInformation_encode_uper; +per_type_decoder_f MeNBCoordinationAssistanceInformation_decode_aper; +per_type_encoder_f MeNBCoordinationAssistanceInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeNBCoordinationAssistanceInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c new file mode 100644 index 0000000..a889c89 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.c @@ -0,0 +1,173 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeNBResourceCoordinationInformation.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_uLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 4400)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 4400)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_uLCoordinationInformation_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 13, 13, 6, 4400 } /* (SIZE(6..4400,...)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dLCoordinationInformation_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 13, 13, 6, 4400 } /* (SIZE(6..4400,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeNBResourceCoordinationInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformation, eUTRA_Cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRA-Cell-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformation, uLCoordinationInformation), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_uLCoordinationInformation_constr_3, memb_uLCoordinationInformation_constraint_1 }, + 0, 0, /* No default value */ + "uLCoordinationInformation" + }, + { ATF_POINTER, 2, offsetof(struct MeNBResourceCoordinationInformation, dLCoordinationInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_dLCoordinationInformation_constr_4, memb_dLCoordinationInformation_constraint_1 }, + 0, 0, /* No default value */ + "dLCoordinationInformation" + }, + { ATF_POINTER, 1, offsetof(struct MeNBResourceCoordinationInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P167, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_MeNBResourceCoordinationInformation_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_MeNBResourceCoordinationInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeNBResourceCoordinationInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eUTRA-Cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dLCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeNBResourceCoordinationInformation_specs_1 = { + sizeof(struct MeNBResourceCoordinationInformation), + offsetof(struct MeNBResourceCoordinationInformation, _asn_ctx), + asn_MAP_MeNBResourceCoordinationInformation_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MeNBResourceCoordinationInformation_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeNBResourceCoordinationInformation = { + "MeNBResourceCoordinationInformation", + "MeNBResourceCoordinationInformation", + &asn_OP_SEQUENCE, + asn_DEF_MeNBResourceCoordinationInformation_tags_1, + sizeof(asn_DEF_MeNBResourceCoordinationInformation_tags_1) + /sizeof(asn_DEF_MeNBResourceCoordinationInformation_tags_1[0]), /* 1 */ + asn_DEF_MeNBResourceCoordinationInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_MeNBResourceCoordinationInformation_tags_1) + /sizeof(asn_DEF_MeNBResourceCoordinationInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeNBResourceCoordinationInformation_1, + 4, /* Elements count */ + &asn_SPC_MeNBResourceCoordinationInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h new file mode 100644 index 0000000..6558fcd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBResourceCoordinationInformation.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeNBResourceCoordinationInformation_H_ +#define _MeNBResourceCoordinationInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* MeNBResourceCoordinationInformation */ +typedef struct MeNBResourceCoordinationInformation { + ECGI_t eUTRA_Cell_ID; + BIT_STRING_t uLCoordinationInformation; + BIT_STRING_t *dLCoordinationInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeNBResourceCoordinationInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeNBResourceCoordinationInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_MeNBResourceCoordinationInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_MeNBResourceCoordinationInformation_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeNBResourceCoordinationInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.c new file mode 100644 index 0000000..0386f58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeNBtoSeNBContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_MeNBtoSeNBContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeNBtoSeNBContainer = { + "MeNBtoSeNBContainer", + "MeNBtoSeNBContainer", + &asn_OP_OCTET_STRING, + asn_DEF_MeNBtoSeNBContainer_tags_1, + sizeof(asn_DEF_MeNBtoSeNBContainer_tags_1) + /sizeof(asn_DEF_MeNBtoSeNBContainer_tags_1[0]), /* 1 */ + asn_DEF_MeNBtoSeNBContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_MeNBtoSeNBContainer_tags_1) + /sizeof(asn_DEF_MeNBtoSeNBContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.h new file mode 100644 index 0000000..e676644 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSeNBContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeNBtoSeNBContainer_H_ +#define _MeNBtoSeNBContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeNBtoSeNBContainer */ +typedef OCTET_STRING_t MeNBtoSeNBContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeNBtoSeNBContainer; +asn_struct_free_f MeNBtoSeNBContainer_free; +asn_struct_print_f MeNBtoSeNBContainer_print; +asn_constr_check_f MeNBtoSeNBContainer_constraint; +ber_type_decoder_f MeNBtoSeNBContainer_decode_ber; +der_type_encoder_f MeNBtoSeNBContainer_encode_der; +xer_type_decoder_f MeNBtoSeNBContainer_decode_xer; +xer_type_encoder_f MeNBtoSeNBContainer_encode_xer; +per_type_decoder_f MeNBtoSeNBContainer_decode_uper; +per_type_encoder_f MeNBtoSeNBContainer_encode_uper; +per_type_decoder_f MeNBtoSeNBContainer_decode_aper; +per_type_encoder_f MeNBtoSeNBContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeNBtoSeNBContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.c new file mode 100644 index 0000000..de426f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeNBtoSgNBContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_MeNBtoSgNBContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeNBtoSgNBContainer = { + "MeNBtoSgNBContainer", + "MeNBtoSgNBContainer", + &asn_OP_OCTET_STRING, + asn_DEF_MeNBtoSgNBContainer_tags_1, + sizeof(asn_DEF_MeNBtoSgNBContainer_tags_1) + /sizeof(asn_DEF_MeNBtoSgNBContainer_tags_1[0]), /* 1 */ + asn_DEF_MeNBtoSgNBContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_MeNBtoSgNBContainer_tags_1) + /sizeof(asn_DEF_MeNBtoSgNBContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.h new file mode 100644 index 0000000..385e081 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeNBtoSgNBContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeNBtoSgNBContainer_H_ +#define _MeNBtoSgNBContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeNBtoSgNBContainer */ +typedef OCTET_STRING_t MeNBtoSgNBContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeNBtoSgNBContainer; +asn_struct_free_f MeNBtoSgNBContainer_free; +asn_struct_print_f MeNBtoSgNBContainer_print; +asn_constr_check_f MeNBtoSgNBContainer_constraint; +ber_type_decoder_f MeNBtoSgNBContainer_decode_ber; +der_type_encoder_f MeNBtoSgNBContainer_encode_der; +xer_type_decoder_f MeNBtoSgNBContainer_decode_xer; +xer_type_encoder_f MeNBtoSgNBContainer_encode_xer; +per_type_decoder_f MeNBtoSgNBContainer_decode_uper; +per_type_encoder_f MeNBtoSgNBContainer_encode_uper; +per_type_decoder_f MeNBtoSgNBContainer_decode_aper; +per_type_encoder_f MeNBtoSgNBContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeNBtoSgNBContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.c new file mode 100644 index 0000000..c61c5a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Measurement-ID.h" + +int +Measurement_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Measurement_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 12, 12, 1, 4095 } /* (1..4095,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Measurement_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Measurement_ID = { + "Measurement-ID", + "Measurement-ID", + &asn_OP_NativeInteger, + asn_DEF_Measurement_ID_tags_1, + sizeof(asn_DEF_Measurement_ID_tags_1) + /sizeof(asn_DEF_Measurement_ID_tags_1[0]), /* 1 */ + asn_DEF_Measurement_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_Measurement_ID_tags_1) + /sizeof(asn_DEF_Measurement_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Measurement_ID_constr_1, Measurement_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.h new file mode 100644 index 0000000..8b3f406 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Measurement-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Measurement_ID_H_ +#define _Measurement_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Measurement-ID */ +typedef long Measurement_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Measurement_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Measurement_ID; +asn_struct_free_f Measurement_ID_free; +asn_struct_print_f Measurement_ID_print; +asn_constr_check_f Measurement_ID_constraint; +ber_type_decoder_f Measurement_ID_decode_ber; +der_type_encoder_f Measurement_ID_encode_der; +xer_type_decoder_f Measurement_ID_decode_xer; +xer_type_encoder_f Measurement_ID_encode_xer; +per_type_decoder_f Measurement_ID_decode_uper; +per_type_encoder_f Measurement_ID_encode_uper; +per_type_decoder_f Measurement_ID_decode_aper; +per_type_encoder_f Measurement_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Measurement_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.c new file mode 100644 index 0000000..8d09549 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementFailureCause-Item.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_MeasurementFailureCause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_Item, measurementFailedReportCharacteristics), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportCharacteristics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementFailedReportCharacteristics" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementFailureCause_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_MeasurementFailureCause_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_MeasurementFailureCause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementFailureCause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measurementFailedReportCharacteristics */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasurementFailureCause_Item_specs_1 = { + sizeof(struct MeasurementFailureCause_Item), + offsetof(struct MeasurementFailureCause_Item, _asn_ctx), + asn_MAP_MeasurementFailureCause_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasurementFailureCause_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_Item = { + "MeasurementFailureCause-Item", + "MeasurementFailureCause-Item", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementFailureCause_Item_tags_1, + sizeof(asn_DEF_MeasurementFailureCause_Item_tags_1) + /sizeof(asn_DEF_MeasurementFailureCause_Item_tags_1[0]), /* 1 */ + asn_DEF_MeasurementFailureCause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementFailureCause_Item_tags_1) + /sizeof(asn_DEF_MeasurementFailureCause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementFailureCause_Item_1, + 3, /* Elements count */ + &asn_SPC_MeasurementFailureCause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.h new file mode 100644 index 0000000..81254d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementFailureCause_Item_H_ +#define _MeasurementFailureCause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ReportCharacteristics.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* MeasurementFailureCause-Item */ +typedef struct MeasurementFailureCause_Item { + ReportCharacteristics_t measurementFailedReportCharacteristics; + Cause_t cause; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementFailureCause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementFailureCause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.c new file mode 100644 index 0000000..d526f84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementFailureCause-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_MeasurementFailureCause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementFailureCause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementFailureCause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementFailureCause_List_specs_1 = { + sizeof(struct MeasurementFailureCause_List), + offsetof(struct MeasurementFailureCause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_List = { + "MeasurementFailureCause-List", + "MeasurementFailureCause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementFailureCause_List_tags_1, + sizeof(asn_DEF_MeasurementFailureCause_List_tags_1) + /sizeof(asn_DEF_MeasurementFailureCause_List_tags_1[0]), /* 1 */ + asn_DEF_MeasurementFailureCause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementFailureCause_List_tags_1) + /sizeof(asn_DEF_MeasurementFailureCause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementFailureCause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementFailureCause_List_1, + 1, /* Single element */ + &asn_SPC_MeasurementFailureCause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.h new file mode 100644 index 0000000..ea46b5a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementFailureCause-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementFailureCause_List_H_ +#define _MeasurementFailureCause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* MeasurementFailureCause-List */ +typedef struct MeasurementFailureCause_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementFailureCause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_List; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementFailureCause_List_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementFailureCause_List_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementFailureCause_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementFailureCause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c new file mode 100644 index 0000000..f76eecb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementInitiationResult-Item.h" + +#include "MeasurementFailureCause-List.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_Item, cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cell-ID" + }, + { ATF_POINTER, 2, offsetof(struct MeasurementInitiationResult_Item, measurementFailureCause_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementFailureCause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementFailureCause-List" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementInitiationResult_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_MeasurementInitiationResult_Item_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_MeasurementInitiationResult_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementInitiationResult_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measurementFailureCause-List */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasurementInitiationResult_Item_specs_1 = { + sizeof(struct MeasurementInitiationResult_Item), + offsetof(struct MeasurementInitiationResult_Item, _asn_ctx), + asn_MAP_MeasurementInitiationResult_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasurementInitiationResult_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_Item = { + "MeasurementInitiationResult-Item", + "MeasurementInitiationResult-Item", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementInitiationResult_Item_tags_1, + sizeof(asn_DEF_MeasurementInitiationResult_Item_tags_1) + /sizeof(asn_DEF_MeasurementInitiationResult_Item_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInitiationResult_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInitiationResult_Item_tags_1) + /sizeof(asn_DEF_MeasurementInitiationResult_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInitiationResult_Item_1, + 3, /* Elements count */ + &asn_SPC_MeasurementInitiationResult_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h new file mode 100644 index 0000000..99be8ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementInitiationResult_Item_H_ +#define _MeasurementInitiationResult_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementFailureCause_List; +struct ProtocolExtensionContainer; + +/* MeasurementInitiationResult-Item */ +typedef struct MeasurementInitiationResult_Item { + ECGI_t cell_ID; + struct MeasurementFailureCause_List *measurementFailureCause_List; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInitiationResult_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInitiationResult_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.c new file mode 100644 index 0000000..09d4784 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementInitiationResult-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_MeasurementInitiationResult_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInitiationResult_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasurementInitiationResult_List_specs_1 = { + sizeof(struct MeasurementInitiationResult_List), + offsetof(struct MeasurementInitiationResult_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_List = { + "MeasurementInitiationResult-List", + "MeasurementInitiationResult-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementInitiationResult_List_tags_1, + sizeof(asn_DEF_MeasurementInitiationResult_List_tags_1) + /sizeof(asn_DEF_MeasurementInitiationResult_List_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInitiationResult_List_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInitiationResult_List_tags_1) + /sizeof(asn_DEF_MeasurementInitiationResult_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementInitiationResult_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementInitiationResult_List_1, + 1, /* Single element */ + &asn_SPC_MeasurementInitiationResult_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.h new file mode 100644 index 0000000..a869c1f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementInitiationResult-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementInitiationResult_List_H_ +#define _MeasurementInitiationResult_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* MeasurementInitiationResult-List */ +typedef struct MeasurementInitiationResult_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInitiationResult_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInitiationResult_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.c new file mode 100644 index 0000000..2794b68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementThresholdA2.h" + +asn_per_constraints_t asn_PER_type_MeasurementThresholdA2_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementThresholdA2_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementThresholdA2, choice.threshold_RSRP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Threshold_RSRP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "threshold-RSRP" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementThresholdA2, choice.threshold_RSRQ), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Threshold_RSRQ, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "threshold-RSRQ" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementThresholdA2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* threshold-RSRP */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* threshold-RSRQ */ +}; +asn_CHOICE_specifics_t asn_SPC_MeasurementThresholdA2_specs_1 = { + sizeof(struct MeasurementThresholdA2), + offsetof(struct MeasurementThresholdA2, _asn_ctx), + offsetof(struct MeasurementThresholdA2, present), + sizeof(((struct MeasurementThresholdA2 *)0)->present), + asn_MAP_MeasurementThresholdA2_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementThresholdA2 = { + "MeasurementThresholdA2", + "MeasurementThresholdA2", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_MeasurementThresholdA2_constr_1, CHOICE_constraint }, + asn_MBR_MeasurementThresholdA2_1, + 2, /* Elements count */ + &asn_SPC_MeasurementThresholdA2_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.h new file mode 100644 index 0000000..f08dcb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementThresholdA2.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementThresholdA2_H_ +#define _MeasurementThresholdA2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Threshold-RSRP.h" +#include "Threshold-RSRQ.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementThresholdA2_PR { + MeasurementThresholdA2_PR_NOTHING, /* No components present */ + MeasurementThresholdA2_PR_threshold_RSRP, + MeasurementThresholdA2_PR_threshold_RSRQ + /* Extensions may appear below */ + +} MeasurementThresholdA2_PR; + +/* MeasurementThresholdA2 */ +typedef struct MeasurementThresholdA2 { + MeasurementThresholdA2_PR present; + union MeasurementThresholdA2_u { + Threshold_RSRP_t threshold_RSRP; + Threshold_RSRQ_t threshold_RSRQ; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementThresholdA2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementThresholdA2; +extern asn_CHOICE_specifics_t asn_SPC_MeasurementThresholdA2_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementThresholdA2_1[2]; +extern asn_per_constraints_t asn_PER_type_MeasurementThresholdA2_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementThresholdA2_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.c new file mode 100644 index 0000000..100430c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MeasurementsToActivate.h" + +int +MeasurementsToActivate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MeasurementsToActivate_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MeasurementsToActivate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementsToActivate = { + "MeasurementsToActivate", + "MeasurementsToActivate", + &asn_OP_BIT_STRING, + asn_DEF_MeasurementsToActivate_tags_1, + sizeof(asn_DEF_MeasurementsToActivate_tags_1) + /sizeof(asn_DEF_MeasurementsToActivate_tags_1[0]), /* 1 */ + asn_DEF_MeasurementsToActivate_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementsToActivate_tags_1) + /sizeof(asn_DEF_MeasurementsToActivate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementsToActivate_constr_1, MeasurementsToActivate_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.h new file mode 100644 index 0000000..60abfc7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MeasurementsToActivate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MeasurementsToActivate_H_ +#define _MeasurementsToActivate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementsToActivate */ +typedef BIT_STRING_t MeasurementsToActivate_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MeasurementsToActivate_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementsToActivate; +asn_struct_free_f MeasurementsToActivate_free; +asn_struct_print_f MeasurementsToActivate_print; +asn_constr_check_f MeasurementsToActivate_constraint; +ber_type_decoder_f MeasurementsToActivate_decode_ber; +der_type_encoder_f MeasurementsToActivate_encode_der; +xer_type_decoder_f MeasurementsToActivate_decode_xer; +xer_type_encoder_f MeasurementsToActivate_encode_xer; +per_type_decoder_f MeasurementsToActivate_decode_uper; +per_type_encoder_f MeasurementsToActivate_encode_uper; +per_type_decoder_f MeasurementsToActivate_decode_aper; +per_type_encoder_f MeasurementsToActivate_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementsToActivate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.c new file mode 100644 index 0000000..ffca014 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityChangeAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_MobilityChangeAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P36, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeAcknowledge_specs_1 = { + sizeof(struct MobilityChangeAcknowledge), + offsetof(struct MobilityChangeAcknowledge, _asn_ctx), + asn_MAP_MobilityChangeAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeAcknowledge = { + "MobilityChangeAcknowledge", + "MobilityChangeAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeAcknowledge_tags_1, + sizeof(asn_DEF_MobilityChangeAcknowledge_tags_1) + /sizeof(asn_DEF_MobilityChangeAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_MobilityChangeAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityChangeAcknowledge_tags_1) + /sizeof(asn_DEF_MobilityChangeAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_MobilityChangeAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.h new file mode 100644 index 0000000..2e4c939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityChangeAcknowledge_H_ +#define _MobilityChangeAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityChangeAcknowledge */ +typedef struct MobilityChangeAcknowledge { + ProtocolIE_Container_119P36_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityChangeAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.c new file mode 100644 index 0000000..b9ec94f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityChangeFailure.h" + +static asn_TYPE_member_t asn_MBR_MobilityChangeFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P37, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeFailure_specs_1 = { + sizeof(struct MobilityChangeFailure), + offsetof(struct MobilityChangeFailure, _asn_ctx), + asn_MAP_MobilityChangeFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeFailure = { + "MobilityChangeFailure", + "MobilityChangeFailure", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeFailure_tags_1, + sizeof(asn_DEF_MobilityChangeFailure_tags_1) + /sizeof(asn_DEF_MobilityChangeFailure_tags_1[0]), /* 1 */ + asn_DEF_MobilityChangeFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityChangeFailure_tags_1) + /sizeof(asn_DEF_MobilityChangeFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeFailure_1, + 1, /* Elements count */ + &asn_SPC_MobilityChangeFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.h new file mode 100644 index 0000000..dd0b35d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityChangeFailure_H_ +#define _MobilityChangeFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityChangeFailure */ +typedef struct MobilityChangeFailure { + ProtocolIE_Container_119P37_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityChangeFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.c new file mode 100644 index 0000000..332af8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityChangeRequest.h" + +static asn_TYPE_member_t asn_MBR_MobilityChangeRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P35, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeRequest_specs_1 = { + sizeof(struct MobilityChangeRequest), + offsetof(struct MobilityChangeRequest, _asn_ctx), + asn_MAP_MobilityChangeRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeRequest = { + "MobilityChangeRequest", + "MobilityChangeRequest", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeRequest_tags_1, + sizeof(asn_DEF_MobilityChangeRequest_tags_1) + /sizeof(asn_DEF_MobilityChangeRequest_tags_1[0]), /* 1 */ + asn_DEF_MobilityChangeRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityChangeRequest_tags_1) + /sizeof(asn_DEF_MobilityChangeRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeRequest_1, + 1, /* Elements count */ + &asn_SPC_MobilityChangeRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.h new file mode 100644 index 0000000..55bfe4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityChangeRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityChangeRequest_H_ +#define _MobilityChangeRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityChangeRequest */ +typedef struct MobilityChangeRequest { + ProtocolIE_Container_119P35_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityChangeRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.c new file mode 100644 index 0000000..467c64e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityInformation.h" + +int +MobilityInformation_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_MobilityInformation_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MobilityInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MobilityInformation = { + "MobilityInformation", + "MobilityInformation", + &asn_OP_BIT_STRING, + asn_DEF_MobilityInformation_tags_1, + sizeof(asn_DEF_MobilityInformation_tags_1) + /sizeof(asn_DEF_MobilityInformation_tags_1[0]), /* 1 */ + asn_DEF_MobilityInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityInformation_tags_1) + /sizeof(asn_DEF_MobilityInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MobilityInformation_constr_1, MobilityInformation_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.h new file mode 100644 index 0000000..aa34799 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityInformation.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityInformation_H_ +#define _MobilityInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityInformation */ +typedef BIT_STRING_t MobilityInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityInformation; +asn_struct_free_f MobilityInformation_free; +asn_struct_print_f MobilityInformation_print; +asn_constr_check_f MobilityInformation_constraint; +ber_type_decoder_f MobilityInformation_decode_ber; +der_type_encoder_f MobilityInformation_encode_der; +xer_type_decoder_f MobilityInformation_decode_xer; +xer_type_encoder_f MobilityInformation_encode_xer; +per_type_decoder_f MobilityInformation_decode_uper; +per_type_encoder_f MobilityInformation_encode_uper; +per_type_decoder_f MobilityInformation_decode_aper; +per_type_encoder_f MobilityInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.c new file mode 100644 index 0000000..57f65e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.c @@ -0,0 +1,98 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityParametersInformation.h" + +static int +memb_handoverTriggerChange_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -20 && value <= 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_handoverTriggerChange_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, -20, 20 } /* (-20..20) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MobilityParametersInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityParametersInformation, handoverTriggerChange), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_handoverTriggerChange_constr_2, memb_handoverTriggerChange_constraint_1 }, + 0, 0, /* No default value */ + "handoverTriggerChange" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityParametersInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityParametersInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* handoverTriggerChange */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MobilityParametersInformation_specs_1 = { + sizeof(struct MobilityParametersInformation), + offsetof(struct MobilityParametersInformation, _asn_ctx), + asn_MAP_MobilityParametersInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityParametersInformation = { + "MobilityParametersInformation", + "MobilityParametersInformation", + &asn_OP_SEQUENCE, + asn_DEF_MobilityParametersInformation_tags_1, + sizeof(asn_DEF_MobilityParametersInformation_tags_1) + /sizeof(asn_DEF_MobilityParametersInformation_tags_1[0]), /* 1 */ + asn_DEF_MobilityParametersInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityParametersInformation_tags_1) + /sizeof(asn_DEF_MobilityParametersInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityParametersInformation_1, + 1, /* Elements count */ + &asn_SPC_MobilityParametersInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.h new file mode 100644 index 0000000..9d8450d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersInformation.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityParametersInformation_H_ +#define _MobilityParametersInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityParametersInformation */ +typedef struct MobilityParametersInformation { + long handoverTriggerChange; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityParametersInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityParametersInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_MobilityParametersInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_MobilityParametersInformation_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityParametersInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.c new file mode 100644 index 0000000..0699106 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.c @@ -0,0 +1,138 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MobilityParametersModificationRange.h" + +static int +memb_handoverTriggerChangeLowerLimit_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -20 && value <= 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_handoverTriggerChangeUpperLimit_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -20 && value <= 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_handoverTriggerChangeLowerLimit_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, -20, 20 } /* (-20..20) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_handoverTriggerChangeUpperLimit_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, -20, 20 } /* (-20..20) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MobilityParametersModificationRange_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityParametersModificationRange, handoverTriggerChangeLowerLimit), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_handoverTriggerChangeLowerLimit_constr_2, memb_handoverTriggerChangeLowerLimit_constraint_1 }, + 0, 0, /* No default value */ + "handoverTriggerChangeLowerLimit" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityParametersModificationRange, handoverTriggerChangeUpperLimit), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_handoverTriggerChangeUpperLimit_constr_3, memb_handoverTriggerChangeUpperLimit_constraint_1 }, + 0, 0, /* No default value */ + "handoverTriggerChangeUpperLimit" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityParametersModificationRange_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityParametersModificationRange_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverTriggerChangeLowerLimit */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* handoverTriggerChangeUpperLimit */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MobilityParametersModificationRange_specs_1 = { + sizeof(struct MobilityParametersModificationRange), + offsetof(struct MobilityParametersModificationRange, _asn_ctx), + asn_MAP_MobilityParametersModificationRange_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityParametersModificationRange = { + "MobilityParametersModificationRange", + "MobilityParametersModificationRange", + &asn_OP_SEQUENCE, + asn_DEF_MobilityParametersModificationRange_tags_1, + sizeof(asn_DEF_MobilityParametersModificationRange_tags_1) + /sizeof(asn_DEF_MobilityParametersModificationRange_tags_1[0]), /* 1 */ + asn_DEF_MobilityParametersModificationRange_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityParametersModificationRange_tags_1) + /sizeof(asn_DEF_MobilityParametersModificationRange_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityParametersModificationRange_1, + 2, /* Elements count */ + &asn_SPC_MobilityParametersModificationRange_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.h new file mode 100644 index 0000000..daa61f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MobilityParametersModificationRange.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MobilityParametersModificationRange_H_ +#define _MobilityParametersModificationRange_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityParametersModificationRange */ +typedef struct MobilityParametersModificationRange { + long handoverTriggerChangeLowerLimit; + long handoverTriggerChangeUpperLimit; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityParametersModificationRange_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityParametersModificationRange; +extern asn_SEQUENCE_specifics_t asn_SPC_MobilityParametersModificationRange_specs_1; +extern asn_TYPE_member_t asn_MBR_MobilityParametersModificationRange_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityParametersModificationRange_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.c new file mode 100644 index 0000000..88954e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "MultibandInfoList.h" + +#include "BandInfo.h" +asn_per_constraints_t asn_PER_type_MultibandInfoList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MultibandInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MultibandInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MultibandInfoList_specs_1 = { + sizeof(struct MultibandInfoList), + offsetof(struct MultibandInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MultibandInfoList = { + "MultibandInfoList", + "MultibandInfoList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MultibandInfoList_tags_1, + sizeof(asn_DEF_MultibandInfoList_tags_1) + /sizeof(asn_DEF_MultibandInfoList_tags_1[0]), /* 1 */ + asn_DEF_MultibandInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_MultibandInfoList_tags_1) + /sizeof(asn_DEF_MultibandInfoList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MultibandInfoList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MultibandInfoList_1, + 1, /* Single element */ + &asn_SPC_MultibandInfoList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.h new file mode 100644 index 0000000..37d794c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/MultibandInfoList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _MultibandInfoList_H_ +#define _MultibandInfoList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandInfo; + +/* MultibandInfoList */ +typedef struct MultibandInfoList { + A_SEQUENCE_OF(struct BandInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MultibandInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MultibandInfoList; +extern asn_SET_OF_specifics_t asn_SPC_MultibandInfoList_specs_1; +extern asn_TYPE_member_t asn_MBR_MultibandInfoList_1[1]; +extern asn_per_constraints_t asn_PER_type_MultibandInfoList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MultibandInfoList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.c new file mode 100644 index 0000000..35cb3b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NR-TxBW.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_NR_TxBW_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NR_TxBW, nRSCS), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRSCS, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRSCS" + }, + { ATF_NOFLAGS, 0, offsetof(struct NR_TxBW, nRNRB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRNRB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRNRB" + }, + { ATF_POINTER, 1, offsetof(struct NR_TxBW, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P175, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_NR_TxBW_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_NR_TxBW_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NR_TxBW_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRSCS */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRNRB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NR_TxBW_specs_1 = { + sizeof(struct NR_TxBW), + offsetof(struct NR_TxBW, _asn_ctx), + asn_MAP_NR_TxBW_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_NR_TxBW_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NR_TxBW = { + "NR-TxBW", + "NR-TxBW", + &asn_OP_SEQUENCE, + asn_DEF_NR_TxBW_tags_1, + sizeof(asn_DEF_NR_TxBW_tags_1) + /sizeof(asn_DEF_NR_TxBW_tags_1[0]), /* 1 */ + asn_DEF_NR_TxBW_tags_1, /* Same as above */ + sizeof(asn_DEF_NR_TxBW_tags_1) + /sizeof(asn_DEF_NR_TxBW_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NR_TxBW_1, + 3, /* Elements count */ + &asn_SPC_NR_TxBW_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.h new file mode 100644 index 0000000..a08aeb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NR-TxBW.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NR_TxBW_H_ +#define _NR_TxBW_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRSCS.h" +#include "NRNRB.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* NR-TxBW */ +typedef struct NR_TxBW { + NRSCS_t nRSCS; + NRNRB_t nRNRB; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NR_TxBW_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NR_TxBW; +extern asn_SEQUENCE_specifics_t asn_SPC_NR_TxBW_specs_1; +extern asn_TYPE_member_t asn_MBR_NR_TxBW_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NR_TxBW_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.c new file mode 100644 index 0000000..fd5b88d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRCGI.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRcellIdentifier), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentifier, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRcellIdentifier" + }, + { ATF_POINTER, 1, offsetof(struct NRCGI, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P174, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_NRCGI_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRcellIdentifier */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_NRCGI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 3, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.h new file mode 100644 index 0000000..6bafbfc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCGI.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentifier.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentifier_t nRcellIdentifier; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.c new file mode 100644 index 0000000..3147ba2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRCellIdentifier.h" + +int +NRCellIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRCellIdentifier_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentifier_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentifier = { + "NRCellIdentifier", + "NRCellIdentifier", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentifier_tags_1, + sizeof(asn_DEF_NRCellIdentifier_tags_1) + /sizeof(asn_DEF_NRCellIdentifier_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentifier_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentifier_tags_1) + /sizeof(asn_DEF_NRCellIdentifier_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRCellIdentifier_constr_1, NRCellIdentifier_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.h new file mode 100644 index 0000000..fd1b24d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRCellIdentifier.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRCellIdentifier_H_ +#define _NRCellIdentifier_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentifier */ +typedef BIT_STRING_t NRCellIdentifier_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentifier_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentifier; +asn_struct_free_f NRCellIdentifier_free; +asn_struct_print_f NRCellIdentifier_print; +asn_constr_check_f NRCellIdentifier_constraint; +ber_type_decoder_f NRCellIdentifier_decode_ber; +der_type_encoder_f NRCellIdentifier_encode_der; +xer_type_decoder_f NRCellIdentifier_decode_xer; +xer_type_encoder_f NRCellIdentifier_encode_xer; +per_type_decoder_f NRCellIdentifier_decode_uper; +per_type_encoder_f NRCellIdentifier_encode_uper; +per_type_decoder_f NRCellIdentifier_decode_aper; +per_type_encoder_f NRCellIdentifier_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentifier_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.c new file mode 100644 index 0000000..b75d9be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.c @@ -0,0 +1,206 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRFreqInfo.h" + +#include "SULInformation.h" +#include "ProtocolExtensionContainer.h" +#include "FreqBandNrItem.h" +static int +memb_nRARFCN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3279165)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_freqBandListNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_freqBandListNr_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nRARFCN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 22, -1, 0, 3279165 } /* (0..3279165) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_freqBandListNr_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_freqBandListNr_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqBandNrItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_freqBandListNr_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_freqBandListNr_specs_3 = { + sizeof(struct NRFreqInfo__freqBandListNr), + offsetof(struct NRFreqInfo__freqBandListNr, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_freqBandListNr_3 = { + "freqBandListNr", + "freqBandListNr", + &asn_OP_SEQUENCE_OF, + asn_DEF_freqBandListNr_tags_3, + sizeof(asn_DEF_freqBandListNr_tags_3) + /sizeof(asn_DEF_freqBandListNr_tags_3[0]) - 1, /* 1 */ + asn_DEF_freqBandListNr_tags_3, /* Same as above */ + sizeof(asn_DEF_freqBandListNr_tags_3) + /sizeof(asn_DEF_freqBandListNr_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_freqBandListNr_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_freqBandListNr_3, + 1, /* Single element */ + &asn_SPC_freqBandListNr_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRFreqInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRFreqInfo, nRARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_nRARFCN_constr_2, memb_nRARFCN_constraint_1 }, + 0, 0, /* No default value */ + "nRARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRFreqInfo, freqBandListNr), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_freqBandListNr_3, + 0, + { 0, &asn_PER_memb_freqBandListNr_constr_3, memb_freqBandListNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandListNr" + }, + { ATF_POINTER, 2, offsetof(struct NRFreqInfo, sULInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SULInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sULInformation" + }, + { ATF_POINTER, 1, offsetof(struct NRFreqInfo, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P173, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_NRFreqInfo_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_NRFreqInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRFreqInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* freqBandListNr */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sULInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRFreqInfo_specs_1 = { + sizeof(struct NRFreqInfo), + offsetof(struct NRFreqInfo, _asn_ctx), + asn_MAP_NRFreqInfo_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_NRFreqInfo_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRFreqInfo = { + "NRFreqInfo", + "NRFreqInfo", + &asn_OP_SEQUENCE, + asn_DEF_NRFreqInfo_tags_1, + sizeof(asn_DEF_NRFreqInfo_tags_1) + /sizeof(asn_DEF_NRFreqInfo_tags_1[0]), /* 1 */ + asn_DEF_NRFreqInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_NRFreqInfo_tags_1) + /sizeof(asn_DEF_NRFreqInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRFreqInfo_1, + 4, /* Elements count */ + &asn_SPC_NRFreqInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.h new file mode 100644 index 0000000..8f674c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRFreqInfo.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRFreqInfo_H_ +#define _NRFreqInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SULInformation; +struct ProtocolExtensionContainer; +struct FreqBandNrItem; + +/* NRFreqInfo */ +typedef struct NRFreqInfo { + long nRARFCN; + struct NRFreqInfo__freqBandListNr { + A_SEQUENCE_OF(struct FreqBandNrItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } freqBandListNr; + struct SULInformation *sULInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRFreqInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRFreqInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_NRFreqInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_NRFreqInfo_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRFreqInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.c new file mode 100644 index 0000000..9afe201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.c @@ -0,0 +1,127 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRNRB.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRNRB_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 28 } /* (0..28,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRNRB_value2enum_1[] = { + { 0, 5, "nrb11" }, + { 1, 5, "nrb18" }, + { 2, 5, "nrb24" }, + { 3, 5, "nrb25" }, + { 4, 5, "nrb31" }, + { 5, 5, "nrb32" }, + { 6, 5, "nrb38" }, + { 7, 5, "nrb51" }, + { 8, 5, "nrb52" }, + { 9, 5, "nrb65" }, + { 10, 5, "nrb66" }, + { 11, 5, "nrb78" }, + { 12, 5, "nrb79" }, + { 13, 5, "nrb93" }, + { 14, 6, "nrb106" }, + { 15, 6, "nrb107" }, + { 16, 6, "nrb121" }, + { 17, 6, "nrb132" }, + { 18, 6, "nrb133" }, + { 19, 6, "nrb135" }, + { 20, 6, "nrb160" }, + { 21, 6, "nrb162" }, + { 22, 6, "nrb189" }, + { 23, 6, "nrb216" }, + { 24, 6, "nrb217" }, + { 25, 6, "nrb245" }, + { 26, 6, "nrb264" }, + { 27, 6, "nrb270" }, + { 28, 6, "nrb273" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRNRB_enum2value_1[] = { + 14, /* nrb106(14) */ + 15, /* nrb107(15) */ + 0, /* nrb11(0) */ + 16, /* nrb121(16) */ + 17, /* nrb132(17) */ + 18, /* nrb133(18) */ + 19, /* nrb135(19) */ + 20, /* nrb160(20) */ + 21, /* nrb162(21) */ + 1, /* nrb18(1) */ + 22, /* nrb189(22) */ + 23, /* nrb216(23) */ + 24, /* nrb217(24) */ + 2, /* nrb24(2) */ + 25, /* nrb245(25) */ + 3, /* nrb25(3) */ + 26, /* nrb264(26) */ + 27, /* nrb270(27) */ + 28, /* nrb273(28) */ + 4, /* nrb31(4) */ + 5, /* nrb32(5) */ + 6, /* nrb38(6) */ + 7, /* nrb51(7) */ + 8, /* nrb52(8) */ + 9, /* nrb65(9) */ + 10, /* nrb66(10) */ + 11, /* nrb78(11) */ + 12, /* nrb79(12) */ + 13 /* nrb93(13) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRNRB_specs_1 = { + asn_MAP_NRNRB_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRNRB_enum2value_1, /* N => "tag"; sorted by N */ + 29, /* Number of elements in the maps */ + 30, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRNRB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRNRB = { + "NRNRB", + "NRNRB", + &asn_OP_NativeEnumerated, + asn_DEF_NRNRB_tags_1, + sizeof(asn_DEF_NRNRB_tags_1) + /sizeof(asn_DEF_NRNRB_tags_1[0]), /* 1 */ + asn_DEF_NRNRB_tags_1, /* Same as above */ + sizeof(asn_DEF_NRNRB_tags_1) + /sizeof(asn_DEF_NRNRB_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRNRB_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRNRB_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.h new file mode 100644 index 0000000..cdd541b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNRB.h @@ -0,0 +1,99 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRNRB_H_ +#define _NRNRB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRNRB { + NRNRB_nrb11 = 0, + NRNRB_nrb18 = 1, + NRNRB_nrb24 = 2, + NRNRB_nrb25 = 3, + NRNRB_nrb31 = 4, + NRNRB_nrb32 = 5, + NRNRB_nrb38 = 6, + NRNRB_nrb51 = 7, + NRNRB_nrb52 = 8, + NRNRB_nrb65 = 9, + NRNRB_nrb66 = 10, + NRNRB_nrb78 = 11, + NRNRB_nrb79 = 12, + NRNRB_nrb93 = 13, + NRNRB_nrb106 = 14, + NRNRB_nrb107 = 15, + NRNRB_nrb121 = 16, + NRNRB_nrb132 = 17, + NRNRB_nrb133 = 18, + NRNRB_nrb135 = 19, + NRNRB_nrb160 = 20, + NRNRB_nrb162 = 21, + NRNRB_nrb189 = 22, + NRNRB_nrb216 = 23, + NRNRB_nrb217 = 24, + NRNRB_nrb245 = 25, + NRNRB_nrb264 = 26, + NRNRB_nrb270 = 27, + NRNRB_nrb273 = 28 + /* + * Enumeration is extensible + */ +} e_NRNRB; + +/* NRNRB */ +typedef long NRNRB_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRNRB_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRNRB; +extern const asn_INTEGER_specifics_t asn_SPC_NRNRB_specs_1; +asn_struct_free_f NRNRB_free; +asn_struct_print_f NRNRB_print; +asn_constr_check_f NRNRB_constraint; +ber_type_decoder_f NRNRB_decode_ber; +der_type_encoder_f NRNRB_encode_der; +xer_type_decoder_f NRNRB_decode_xer; +xer_type_encoder_f NRNRB_encode_xer; +per_type_decoder_f NRNRB_decode_uper; +per_type_encoder_f NRNRB_encode_uper; +per_type_decoder_f NRNRB_decode_aper; +per_type_encoder_f NRNRB_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRNRB_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.c new file mode 100644 index 0000000..875f4ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.c @@ -0,0 +1,228 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRNeighbour-Information.h" + +#include "ProtocolExtensionContainer.h" +#include "FDD-InfoNeighbourServedNRCell-Information.h" +#include "TDD-InfoNeighbourServedNRCell-Information.h" +static asn_per_constraints_t asn_PER_type_nRNeighbourModeInfo_constr_8 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_NRNeighbour_Information_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_nRNeighbourModeInfo_8[] = { + { ATF_POINTER, 0, offsetof(struct NRNeighbour_Information__Member__nRNeighbourModeInfo, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FDD_InfoNeighbourServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fdd" + }, + { ATF_POINTER, 0, offsetof(struct NRNeighbour_Information__Member__nRNeighbourModeInfo, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_InfoNeighbourServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tdd" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_nRNeighbourModeInfo_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */ +}; +static asn_CHOICE_specifics_t asn_SPC_nRNeighbourModeInfo_specs_8 = { + sizeof(struct NRNeighbour_Information__Member__nRNeighbourModeInfo), + offsetof(struct NRNeighbour_Information__Member__nRNeighbourModeInfo, _asn_ctx), + offsetof(struct NRNeighbour_Information__Member__nRNeighbourModeInfo, present), + sizeof(((struct NRNeighbour_Information__Member__nRNeighbourModeInfo *)0)->present), + asn_MAP_nRNeighbourModeInfo_tag2el_8, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nRNeighbourModeInfo_8 = { + "nRNeighbourModeInfo", + "nRNeighbourModeInfo", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_nRNeighbourModeInfo_constr_8, CHOICE_constraint }, + asn_MBR_nRNeighbourModeInfo_8, + 2, /* Elements count */ + &asn_SPC_nRNeighbourModeInfo_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information__Member, nrpCI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRPCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrpCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information__Member, nrCellID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrCellID" + }, + { ATF_POINTER, 2, offsetof(struct NRNeighbour_Information__Member, fiveGS_TAC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FiveGS_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveGS-TAC" + }, + { ATF_POINTER, 1, offsetof(struct NRNeighbour_Information__Member, configured_TAC), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "configured-TAC" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information__Member, measurementTimingConfiguration), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementTimingConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information__Member, nRNeighbourModeInfo), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_nRNeighbourModeInfo_8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRNeighbourModeInfo" + }, + { ATF_POINTER, 1, offsetof(struct NRNeighbour_Information__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P97, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2, 3, 6 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrpCI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrCellID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fiveGS-TAC */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* configured-TAC */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* measurementTimingConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* nRNeighbourModeInfo */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct NRNeighbour_Information__Member), + offsetof(struct NRNeighbour_Information__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 7, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 3, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 7, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRNeighbour_Information_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRNeighbour_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_NRNeighbour_Information_specs_1 = { + sizeof(struct NRNeighbour_Information), + offsetof(struct NRNeighbour_Information, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NRNeighbour_Information = { + "NRNeighbour-Information", + "NRNeighbour-Information", + &asn_OP_SEQUENCE_OF, + asn_DEF_NRNeighbour_Information_tags_1, + sizeof(asn_DEF_NRNeighbour_Information_tags_1) + /sizeof(asn_DEF_NRNeighbour_Information_tags_1[0]), /* 1 */ + asn_DEF_NRNeighbour_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_NRNeighbour_Information_tags_1) + /sizeof(asn_DEF_NRNeighbour_Information_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRNeighbour_Information_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_NRNeighbour_Information_1, + 1, /* Single element */ + &asn_SPC_NRNeighbour_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.h new file mode 100644 index 0000000..6a9051b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRNeighbour-Information.h @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRNeighbour_Information_H_ +#define _NRNeighbour_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "NRPCI.h" +#include "NRCGI.h" +#include "FiveGS-TAC.h" +#include "TAC.h" +#include "OCTET_STRING.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRNeighbour_Information__Member__nRNeighbourModeInfo_PR { + NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_NOTHING, /* No components present */ + NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_fdd, + NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_tdd + /* Extensions may appear below */ + +} NRNeighbour_Information__Member__nRNeighbourModeInfo_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct FDD_InfoNeighbourServedNRCell_Information; +struct TDD_InfoNeighbourServedNRCell_Information; + +/* Forward definitions */ +typedef struct NRNeighbour_Information__Member { + NRPCI_t nrpCI; + NRCGI_t nrCellID; + FiveGS_TAC_t *fiveGS_TAC; /* OPTIONAL */ + TAC_t *configured_TAC; /* OPTIONAL */ + OCTET_STRING_t measurementTimingConfiguration; + struct NRNeighbour_Information__Member__nRNeighbourModeInfo { + NRNeighbour_Information__Member__nRNeighbourModeInfo_PR present; + union NRNeighbour_Information__Member__nRNeighbourModeInfo_u { + struct FDD_InfoNeighbourServedNRCell_Information *fdd; + struct TDD_InfoNeighbourServedNRCell_Information *tdd; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } nRNeighbourModeInfo; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRNeighbour_Information__Member; + +/* NRNeighbour-Information */ +typedef struct NRNeighbour_Information { + A_SEQUENCE_OF(NRNeighbour_Information__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRNeighbour_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRNeighbour_Information; +extern asn_SET_OF_specifics_t asn_SPC_NRNeighbour_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_NRNeighbour_Information_1[1]; +extern asn_per_constraints_t asn_PER_type_NRNeighbour_Information_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRNeighbour_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.c new file mode 100644 index 0000000..b7c0229 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRPCI.h" + +int +NRPCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1007)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRPCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 1007 } /* (0..1007) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRPCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRPCI = { + "NRPCI", + "NRPCI", + &asn_OP_NativeInteger, + asn_DEF_NRPCI_tags_1, + sizeof(asn_DEF_NRPCI_tags_1) + /sizeof(asn_DEF_NRPCI_tags_1[0]), /* 1 */ + asn_DEF_NRPCI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRPCI_tags_1) + /sizeof(asn_DEF_NRPCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRPCI_constr_1, NRPCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.h new file mode 100644 index 0000000..0058372 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRPCI.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRPCI_H_ +#define _NRPCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRPCI */ +typedef long NRPCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRPCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRPCI; +asn_struct_free_f NRPCI_free; +asn_struct_print_f NRPCI_print; +asn_constr_check_f NRPCI_constraint; +ber_type_decoder_f NRPCI_decode_ber; +der_type_encoder_f NRPCI_encode_der; +xer_type_decoder_f NRPCI_decode_xer; +xer_type_encoder_f NRPCI_encode_xer; +per_type_decoder_f NRPCI_decode_uper; +per_type_encoder_f NRPCI_encode_uper; +per_type_decoder_f NRPCI_decode_aper; +per_type_encoder_f NRPCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRPCI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c new file mode 100644 index 0000000..1b40408 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRS-NSSS-PowerOffset.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRS_NSSS_PowerOffset_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRS_NSSS_PowerOffset_value2enum_1[] = { + { 0, 10, "minusThree" }, + { 1, 4, "zero" }, + { 2, 5, "three" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRS_NSSS_PowerOffset_enum2value_1[] = { + 0, /* minusThree(0) */ + 2, /* three(2) */ + 1 /* zero(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRS_NSSS_PowerOffset_specs_1 = { + asn_MAP_NRS_NSSS_PowerOffset_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRS_NSSS_PowerOffset_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRS_NSSS_PowerOffset_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRS_NSSS_PowerOffset = { + "NRS-NSSS-PowerOffset", + "NRS-NSSS-PowerOffset", + &asn_OP_NativeEnumerated, + asn_DEF_NRS_NSSS_PowerOffset_tags_1, + sizeof(asn_DEF_NRS_NSSS_PowerOffset_tags_1) + /sizeof(asn_DEF_NRS_NSSS_PowerOffset_tags_1[0]), /* 1 */ + asn_DEF_NRS_NSSS_PowerOffset_tags_1, /* Same as above */ + sizeof(asn_DEF_NRS_NSSS_PowerOffset_tags_1) + /sizeof(asn_DEF_NRS_NSSS_PowerOffset_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRS_NSSS_PowerOffset_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRS_NSSS_PowerOffset_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h new file mode 100644 index 0000000..9e2f7ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRS-NSSS-PowerOffset.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRS_NSSS_PowerOffset_H_ +#define _NRS_NSSS_PowerOffset_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRS_NSSS_PowerOffset { + NRS_NSSS_PowerOffset_minusThree = 0, + NRS_NSSS_PowerOffset_zero = 1, + NRS_NSSS_PowerOffset_three = 2 + /* + * Enumeration is extensible + */ +} e_NRS_NSSS_PowerOffset; + +/* NRS-NSSS-PowerOffset */ +typedef long NRS_NSSS_PowerOffset_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRS_NSSS_PowerOffset_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRS_NSSS_PowerOffset; +extern const asn_INTEGER_specifics_t asn_SPC_NRS_NSSS_PowerOffset_specs_1; +asn_struct_free_f NRS_NSSS_PowerOffset_free; +asn_struct_print_f NRS_NSSS_PowerOffset_print; +asn_constr_check_f NRS_NSSS_PowerOffset_constraint; +ber_type_decoder_f NRS_NSSS_PowerOffset_decode_ber; +der_type_encoder_f NRS_NSSS_PowerOffset_encode_der; +xer_type_decoder_f NRS_NSSS_PowerOffset_decode_xer; +xer_type_encoder_f NRS_NSSS_PowerOffset_encode_xer; +per_type_decoder_f NRS_NSSS_PowerOffset_decode_uper; +per_type_encoder_f NRS_NSSS_PowerOffset_encode_uper; +per_type_decoder_f NRS_NSSS_PowerOffset_decode_aper; +per_type_encoder_f NRS_NSSS_PowerOffset_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRS_NSSS_PowerOffset_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.c new file mode 100644 index 0000000..c22aea1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRSCS.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRSCS_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRSCS_value2enum_1[] = { + { 0, 5, "scs15" }, + { 1, 5, "scs30" }, + { 2, 5, "scs60" }, + { 3, 6, "scs120" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRSCS_enum2value_1[] = { + 3, /* scs120(3) */ + 0, /* scs15(0) */ + 1, /* scs30(1) */ + 2 /* scs60(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRSCS_specs_1 = { + asn_MAP_NRSCS_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRSCS_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRSCS_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRSCS = { + "NRSCS", + "NRSCS", + &asn_OP_NativeEnumerated, + asn_DEF_NRSCS_tags_1, + sizeof(asn_DEF_NRSCS_tags_1) + /sizeof(asn_DEF_NRSCS_tags_1[0]), /* 1 */ + asn_DEF_NRSCS_tags_1, /* Same as above */ + sizeof(asn_DEF_NRSCS_tags_1) + /sizeof(asn_DEF_NRSCS_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRSCS_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRSCS_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.h new file mode 100644 index 0000000..ed4aea4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRSCS.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRSCS_H_ +#define _NRSCS_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRSCS { + NRSCS_scs15 = 0, + NRSCS_scs30 = 1, + NRSCS_scs60 = 2, + NRSCS_scs120 = 3 + /* + * Enumeration is extensible + */ +} e_NRSCS; + +/* NRSCS */ +typedef long NRSCS_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRSCS_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRSCS; +extern const asn_INTEGER_specifics_t asn_SPC_NRSCS_specs_1; +asn_struct_free_f NRSCS_free; +asn_struct_print_f NRSCS_print; +asn_constr_check_f NRSCS_constraint; +ber_type_decoder_f NRSCS_decode_ber; +der_type_encoder_f NRSCS_encode_der; +xer_type_decoder_f NRSCS_decode_xer; +xer_type_encoder_f NRSCS_encode_xer; +per_type_decoder_f NRSCS_decode_uper; +per_type_encoder_f NRSCS_encode_uper; +per_type_decoder_f NRSCS_decode_aper; +per_type_encoder_f NRSCS_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRSCS_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.c new file mode 100644 index 0000000..587fe22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRUESecurityCapabilities.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_NRUESecurityCapabilities_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRUESecurityCapabilities, nRencryptionAlgorithms), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRencryptionAlgorithms, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRencryptionAlgorithms" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRUESecurityCapabilities, nRintegrityProtectionAlgorithms), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRintegrityProtectionAlgorithms, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRintegrityProtectionAlgorithms" + }, + { ATF_POINTER, 1, offsetof(struct NRUESecurityCapabilities, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P176, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_NRUESecurityCapabilities_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_NRUESecurityCapabilities_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRUESecurityCapabilities_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRencryptionAlgorithms */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRintegrityProtectionAlgorithms */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRUESecurityCapabilities_specs_1 = { + sizeof(struct NRUESecurityCapabilities), + offsetof(struct NRUESecurityCapabilities, _asn_ctx), + asn_MAP_NRUESecurityCapabilities_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_NRUESecurityCapabilities_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRUESecurityCapabilities = { + "NRUESecurityCapabilities", + "NRUESecurityCapabilities", + &asn_OP_SEQUENCE, + asn_DEF_NRUESecurityCapabilities_tags_1, + sizeof(asn_DEF_NRUESecurityCapabilities_tags_1) + /sizeof(asn_DEF_NRUESecurityCapabilities_tags_1[0]), /* 1 */ + asn_DEF_NRUESecurityCapabilities_tags_1, /* Same as above */ + sizeof(asn_DEF_NRUESecurityCapabilities_tags_1) + /sizeof(asn_DEF_NRUESecurityCapabilities_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRUESecurityCapabilities_1, + 3, /* Elements count */ + &asn_SPC_NRUESecurityCapabilities_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.h new file mode 100644 index 0000000..7f75083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRUESecurityCapabilities.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRUESecurityCapabilities_H_ +#define _NRUESecurityCapabilities_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRencryptionAlgorithms.h" +#include "NRintegrityProtectionAlgorithms.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* NRUESecurityCapabilities */ +typedef struct NRUESecurityCapabilities { + NRencryptionAlgorithms_t nRencryptionAlgorithms; + NRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRUESecurityCapabilities_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRUESecurityCapabilities; +extern asn_SEQUENCE_specifics_t asn_SPC_NRUESecurityCapabilities_specs_1; +extern asn_TYPE_member_t asn_MBR_NRUESecurityCapabilities_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRUESecurityCapabilities_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.c new file mode 100644 index 0000000..84406bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRencryptionAlgorithms.h" + +int +NRencryptionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRencryptionAlgorithms_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 16, 16 } /* (SIZE(16..16,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRencryptionAlgorithms_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRencryptionAlgorithms = { + "NRencryptionAlgorithms", + "NRencryptionAlgorithms", + &asn_OP_BIT_STRING, + asn_DEF_NRencryptionAlgorithms_tags_1, + sizeof(asn_DEF_NRencryptionAlgorithms_tags_1) + /sizeof(asn_DEF_NRencryptionAlgorithms_tags_1[0]), /* 1 */ + asn_DEF_NRencryptionAlgorithms_tags_1, /* Same as above */ + sizeof(asn_DEF_NRencryptionAlgorithms_tags_1) + /sizeof(asn_DEF_NRencryptionAlgorithms_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRencryptionAlgorithms_constr_1, NRencryptionAlgorithms_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.h new file mode 100644 index 0000000..946bdc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRencryptionAlgorithms.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRencryptionAlgorithms_H_ +#define _NRencryptionAlgorithms_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRencryptionAlgorithms */ +typedef BIT_STRING_t NRencryptionAlgorithms_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRencryptionAlgorithms_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRencryptionAlgorithms; +asn_struct_free_f NRencryptionAlgorithms_free; +asn_struct_print_f NRencryptionAlgorithms_print; +asn_constr_check_f NRencryptionAlgorithms_constraint; +ber_type_decoder_f NRencryptionAlgorithms_decode_ber; +der_type_encoder_f NRencryptionAlgorithms_encode_der; +xer_type_decoder_f NRencryptionAlgorithms_decode_xer; +xer_type_encoder_f NRencryptionAlgorithms_encode_xer; +per_type_decoder_f NRencryptionAlgorithms_decode_uper; +per_type_encoder_f NRencryptionAlgorithms_encode_uper; +per_type_decoder_f NRencryptionAlgorithms_decode_aper; +per_type_encoder_f NRencryptionAlgorithms_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRencryptionAlgorithms_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c new file mode 100644 index 0000000..19cb9e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRintegrityProtectionAlgorithms.h" + +int +NRintegrityProtectionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRintegrityProtectionAlgorithms_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 16, 16 } /* (SIZE(16..16,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRintegrityProtectionAlgorithms_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRintegrityProtectionAlgorithms = { + "NRintegrityProtectionAlgorithms", + "NRintegrityProtectionAlgorithms", + &asn_OP_BIT_STRING, + asn_DEF_NRintegrityProtectionAlgorithms_tags_1, + sizeof(asn_DEF_NRintegrityProtectionAlgorithms_tags_1) + /sizeof(asn_DEF_NRintegrityProtectionAlgorithms_tags_1[0]), /* 1 */ + asn_DEF_NRintegrityProtectionAlgorithms_tags_1, /* Same as above */ + sizeof(asn_DEF_NRintegrityProtectionAlgorithms_tags_1) + /sizeof(asn_DEF_NRintegrityProtectionAlgorithms_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRintegrityProtectionAlgorithms_constr_1, NRintegrityProtectionAlgorithms_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h new file mode 100644 index 0000000..7d65014 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRintegrityProtectionAlgorithms.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRintegrityProtectionAlgorithms_H_ +#define _NRintegrityProtectionAlgorithms_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRintegrityProtectionAlgorithms */ +typedef BIT_STRING_t NRintegrityProtectionAlgorithms_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRintegrityProtectionAlgorithms_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRintegrityProtectionAlgorithms; +asn_struct_free_f NRintegrityProtectionAlgorithms_free; +asn_struct_print_f NRintegrityProtectionAlgorithms_print; +asn_constr_check_f NRintegrityProtectionAlgorithms_constraint; +ber_type_decoder_f NRintegrityProtectionAlgorithms_decode_ber; +der_type_encoder_f NRintegrityProtectionAlgorithms_encode_der; +xer_type_decoder_f NRintegrityProtectionAlgorithms_decode_xer; +xer_type_encoder_f NRintegrityProtectionAlgorithms_encode_xer; +per_type_decoder_f NRintegrityProtectionAlgorithms_decode_uper; +per_type_encoder_f NRintegrityProtectionAlgorithms_encode_uper; +per_type_decoder_f NRintegrityProtectionAlgorithms_decode_aper; +per_type_encoder_f NRintegrityProtectionAlgorithms_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRintegrityProtectionAlgorithms_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.c new file mode 100644 index 0000000..f56e1e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRrestrictionin5GS.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRrestrictionin5GS_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRrestrictionin5GS_value2enum_1[] = { + { 0, 17, "nRrestrictedin5GS" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRrestrictionin5GS_enum2value_1[] = { + 0 /* nRrestrictedin5GS(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRrestrictionin5GS_specs_1 = { + asn_MAP_NRrestrictionin5GS_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRrestrictionin5GS_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRrestrictionin5GS_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRrestrictionin5GS = { + "NRrestrictionin5GS", + "NRrestrictionin5GS", + &asn_OP_NativeEnumerated, + asn_DEF_NRrestrictionin5GS_tags_1, + sizeof(asn_DEF_NRrestrictionin5GS_tags_1) + /sizeof(asn_DEF_NRrestrictionin5GS_tags_1[0]), /* 1 */ + asn_DEF_NRrestrictionin5GS_tags_1, /* Same as above */ + sizeof(asn_DEF_NRrestrictionin5GS_tags_1) + /sizeof(asn_DEF_NRrestrictionin5GS_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRrestrictionin5GS_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRrestrictionin5GS_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.h new file mode 100644 index 0000000..779b2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictionin5GS.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRrestrictionin5GS_H_ +#define _NRrestrictionin5GS_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRrestrictionin5GS { + NRrestrictionin5GS_nRrestrictedin5GS = 0 + /* + * Enumeration is extensible + */ +} e_NRrestrictionin5GS; + +/* NRrestrictionin5GS */ +typedef long NRrestrictionin5GS_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRrestrictionin5GS_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRrestrictionin5GS; +extern const asn_INTEGER_specifics_t asn_SPC_NRrestrictionin5GS_specs_1; +asn_struct_free_f NRrestrictionin5GS_free; +asn_struct_print_f NRrestrictionin5GS_print; +asn_constr_check_f NRrestrictionin5GS_constraint; +ber_type_decoder_f NRrestrictionin5GS_decode_ber; +der_type_encoder_f NRrestrictionin5GS_encode_der; +xer_type_decoder_f NRrestrictionin5GS_decode_xer; +xer_type_encoder_f NRrestrictionin5GS_encode_xer; +per_type_decoder_f NRrestrictionin5GS_decode_uper; +per_type_encoder_f NRrestrictionin5GS_encode_uper; +per_type_decoder_f NRrestrictionin5GS_decode_aper; +per_type_encoder_f NRrestrictionin5GS_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRrestrictionin5GS_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c new file mode 100644 index 0000000..a13c070 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NRrestrictioninEPSasSecondaryRAT.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRrestrictioninEPSasSecondaryRAT_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRrestrictioninEPSasSecondaryRAT_value2enum_1[] = { + { 0, 31, "nRrestrictedinEPSasSecondaryRAT" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRrestrictioninEPSasSecondaryRAT_enum2value_1[] = { + 0 /* nRrestrictedinEPSasSecondaryRAT(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRrestrictioninEPSasSecondaryRAT_specs_1 = { + asn_MAP_NRrestrictioninEPSasSecondaryRAT_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRrestrictioninEPSasSecondaryRAT_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRrestrictioninEPSasSecondaryRAT = { + "NRrestrictioninEPSasSecondaryRAT", + "NRrestrictioninEPSasSecondaryRAT", + &asn_OP_NativeEnumerated, + asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1, + sizeof(asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1) + /sizeof(asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1[0]), /* 1 */ + asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1, /* Same as above */ + sizeof(asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1) + /sizeof(asn_DEF_NRrestrictioninEPSasSecondaryRAT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRrestrictioninEPSasSecondaryRAT_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRrestrictioninEPSasSecondaryRAT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h new file mode 100644 index 0000000..5030ec2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NRrestrictioninEPSasSecondaryRAT.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NRrestrictioninEPSasSecondaryRAT_H_ +#define _NRrestrictioninEPSasSecondaryRAT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRrestrictioninEPSasSecondaryRAT { + NRrestrictioninEPSasSecondaryRAT_nRrestrictedinEPSasSecondaryRAT = 0 + /* + * Enumeration is extensible + */ +} e_NRrestrictioninEPSasSecondaryRAT; + +/* NRrestrictioninEPSasSecondaryRAT */ +typedef long NRrestrictioninEPSasSecondaryRAT_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRrestrictioninEPSasSecondaryRAT_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRrestrictioninEPSasSecondaryRAT; +extern const asn_INTEGER_specifics_t asn_SPC_NRrestrictioninEPSasSecondaryRAT_specs_1; +asn_struct_free_f NRrestrictioninEPSasSecondaryRAT_free; +asn_struct_print_f NRrestrictioninEPSasSecondaryRAT_print; +asn_constr_check_f NRrestrictioninEPSasSecondaryRAT_constraint; +ber_type_decoder_f NRrestrictioninEPSasSecondaryRAT_decode_ber; +der_type_encoder_f NRrestrictioninEPSasSecondaryRAT_encode_der; +xer_type_decoder_f NRrestrictioninEPSasSecondaryRAT_decode_xer; +xer_type_encoder_f NRrestrictioninEPSasSecondaryRAT_encode_xer; +per_type_decoder_f NRrestrictioninEPSasSecondaryRAT_decode_uper; +per_type_encoder_f NRrestrictioninEPSasSecondaryRAT_encode_uper; +per_type_decoder_f NRrestrictioninEPSasSecondaryRAT_decode_aper; +per_type_encoder_f NRrestrictioninEPSasSecondaryRAT_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRrestrictioninEPSasSecondaryRAT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c new file mode 100644 index 0000000..f4f76a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NSSS-NumOccasionDifferentPrecoder.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NSSS_NumOccasionDifferentPrecoder_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NSSS_NumOccasionDifferentPrecoder_value2enum_1[] = { + { 0, 3, "two" }, + { 1, 4, "four" }, + { 2, 5, "eight" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NSSS_NumOccasionDifferentPrecoder_enum2value_1[] = { + 2, /* eight(2) */ + 1, /* four(1) */ + 0 /* two(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NSSS_NumOccasionDifferentPrecoder_specs_1 = { + asn_MAP_NSSS_NumOccasionDifferentPrecoder_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NSSS_NumOccasionDifferentPrecoder_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NSSS_NumOccasionDifferentPrecoder = { + "NSSS-NumOccasionDifferentPrecoder", + "NSSS-NumOccasionDifferentPrecoder", + &asn_OP_NativeEnumerated, + asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1, + sizeof(asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1) + /sizeof(asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1[0]), /* 1 */ + asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1, /* Same as above */ + sizeof(asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1) + /sizeof(asn_DEF_NSSS_NumOccasionDifferentPrecoder_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NSSS_NumOccasionDifferentPrecoder_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NSSS_NumOccasionDifferentPrecoder_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h new file mode 100644 index 0000000..92f41d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NSSS-NumOccasionDifferentPrecoder.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NSSS_NumOccasionDifferentPrecoder_H_ +#define _NSSS_NumOccasionDifferentPrecoder_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NSSS_NumOccasionDifferentPrecoder { + NSSS_NumOccasionDifferentPrecoder_two = 0, + NSSS_NumOccasionDifferentPrecoder_four = 1, + NSSS_NumOccasionDifferentPrecoder_eight = 2 + /* + * Enumeration is extensible + */ +} e_NSSS_NumOccasionDifferentPrecoder; + +/* NSSS-NumOccasionDifferentPrecoder */ +typedef long NSSS_NumOccasionDifferentPrecoder_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NSSS_NumOccasionDifferentPrecoder_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NSSS_NumOccasionDifferentPrecoder; +extern const asn_INTEGER_specifics_t asn_SPC_NSSS_NumOccasionDifferentPrecoder_specs_1; +asn_struct_free_f NSSS_NumOccasionDifferentPrecoder_free; +asn_struct_print_f NSSS_NumOccasionDifferentPrecoder_print; +asn_constr_check_f NSSS_NumOccasionDifferentPrecoder_constraint; +ber_type_decoder_f NSSS_NumOccasionDifferentPrecoder_decode_ber; +der_type_encoder_f NSSS_NumOccasionDifferentPrecoder_encode_der; +xer_type_decoder_f NSSS_NumOccasionDifferentPrecoder_decode_xer; +xer_type_encoder_f NSSS_NumOccasionDifferentPrecoder_encode_xer; +per_type_decoder_f NSSS_NumOccasionDifferentPrecoder_decode_uper; +per_type_encoder_f NSSS_NumOccasionDifferentPrecoder_encode_uper; +per_type_decoder_f NSSS_NumOccasionDifferentPrecoder_decode_aper; +per_type_encoder_f NSSS_NumOccasionDifferentPrecoder_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NSSS_NumOccasionDifferentPrecoder_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.c new file mode 100644 index 0000000..ca1a899 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.c @@ -0,0 +1,317 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Implemented in terms of BOOLEAN type */ + +/* + * NULL basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NULL_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)) +}; +asn_TYPE_operation_t asn_OP_NULL = { + BOOLEAN_free, + NULL_print, + NULL_compare, + BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ + NULL_encode_der, /* Special handling of DER encoding */ + NULL_decode_xer, + NULL_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NULL_decode_oer, + NULL_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NULL_decode_uper, /* Unaligned PER decoder */ + NULL_encode_uper, /* Unaligned PER encoder */ + NULL_decode_aper, /* Aligned PER decoder */ + NULL_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NULL_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NULL = { + "NULL", + "NULL", + &asn_OP_NULL, + asn_DEF_NULL_tags, + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + asn_DEF_NULL_tags, /* Same as above */ + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, + ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + + erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = ptr; + } + + ASN__ENCODED_OK(erval); +} + +asn_enc_rval_t +NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)ilevel; + (void)flags; + (void)cb; + (void)app_key; + + /* XMLNullValue is empty */ + er.encoded = 0; + ASN__ENCODED_OK(er); +} + + +static enum xer_pbd_rval +NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + (void)td; + (void)sptr; + (void)chunk_buf; /* Going to be empty according to the rules below. */ + + /* + * There must be no content in self-terminating tag. + */ + if(chunk_size) + return XPBD_BROKEN_ENCODING; + else + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, + NULL__xer_body_decode); +} + +int +NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) { + (void)td; + (void)a; + (void)b; + return 0; +} + +int +NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(sptr) { + return (cb("", 9, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +#ifndef ASN_DISABLE_OER_SUPPORT + +asn_dec_rval_t +NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t rv = {RC_OK, 0}; + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)ptr; + (void)size; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + return rv; +} + +asn_enc_rval_t +NULL_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)constraints; + (void)cb; + (void)app_key; + + er.encoded = 0; /* Encoding in 0 bytes. */ + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +NULL_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + + +asn_enc_rval_t +NULL_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + NULL_t *st = *sptr; + + (void)td; + (void)constr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.h new file mode 100644 index 0000000..d26a3ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NULL.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_NULL_H +#define ASN_TYPE_NULL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The value of the NULL type is meaningless: see BOOLEAN if you want to + * carry true/false semantics. + */ +typedef int NULL_t; + +extern asn_TYPE_descriptor_t asn_DEF_NULL; +extern asn_TYPE_operation_t asn_OP_NULL; + +asn_struct_print_f NULL_print; +asn_struct_compare_f NULL_compare; +der_type_encoder_f NULL_encode_der; +xer_type_decoder_f NULL_decode_xer; +xer_type_encoder_f NULL_encode_xer; +oer_type_decoder_f NULL_decode_oer; +oer_type_encoder_f NULL_encode_oer; +per_type_decoder_f NULL_decode_uper; +per_type_encoder_f NULL_encode_uper; +per_type_decoder_f NULL_decode_aper; +per_type_encoder_f NULL_encode_aper; +asn_random_fill_f NULL_random_fill; + +#define NULL_free BOOLEAN_free +#define NULL_decode_ber BOOLEAN_decode_ber +#define NULL_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* NULL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..16ffd68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.c @@ -0,0 +1,385 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; // BMC + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { // BMC + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; // BMC + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { // BMC + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { // BMC + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; // BMC + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { // BMC + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; // BMC + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { // BMC + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { // BMC + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..39ca81f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeEnumerated.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.c new file mode 100644 index 0000000..17ca0a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.c @@ -0,0 +1,568 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.h new file mode 100644 index 0000000..8666f33 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NativeInteger.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.c new file mode 100644 index 0000000..7aee8d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.c @@ -0,0 +1,142 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Neighbour-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_Neighbour_Information_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 0, 512 } /* (SIZE(0..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information__Member, eCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information__Member, pCI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information__Member, eARFCN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eARFCN" + }, + { ATF_POINTER, 1, offsetof(struct Neighbour_Information__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P172, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pCI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct Neighbour_Information__Member), + offsetof(struct Neighbour_Information__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 4, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Neighbour_Information_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_Neighbour_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_Neighbour_Information_specs_1 = { + sizeof(struct Neighbour_Information), + offsetof(struct Neighbour_Information, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_Neighbour_Information = { + "Neighbour-Information", + "Neighbour-Information", + &asn_OP_SEQUENCE_OF, + asn_DEF_Neighbour_Information_tags_1, + sizeof(asn_DEF_Neighbour_Information_tags_1) + /sizeof(asn_DEF_Neighbour_Information_tags_1[0]), /* 1 */ + asn_DEF_Neighbour_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_Neighbour_Information_tags_1) + /sizeof(asn_DEF_Neighbour_Information_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Neighbour_Information_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_Neighbour_Information_1, + 1, /* Single element */ + &asn_SPC_Neighbour_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.h new file mode 100644 index 0000000..295e149 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Neighbour-Information.h @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Neighbour_Information_H_ +#define _Neighbour_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ECGI.h" +#include "PCI.h" +#include "EARFCN.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct Neighbour_Information__Member { + ECGI_t eCGI; + PCI_t pCI; + EARFCN_t eARFCN; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Neighbour_Information__Member; + +/* Neighbour-Information */ +typedef struct Neighbour_Information { + A_SEQUENCE_OF(Neighbour_Information__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Neighbour_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Neighbour_Information; +extern asn_SET_OF_specifics_t asn_SPC_Neighbour_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_Neighbour_Information_1[1]; +extern asn_per_constraints_t asn_PER_type_Neighbour_Information_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Neighbour_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.c new file mode 100644 index 0000000..34be7fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NewDRBIDrequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NewDRBIDrequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NewDRBIDrequest_value2enum_1[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NewDRBIDrequest_enum2value_1[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NewDRBIDrequest_specs_1 = { + asn_MAP_NewDRBIDrequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NewDRBIDrequest_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NewDRBIDrequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NewDRBIDrequest = { + "NewDRBIDrequest", + "NewDRBIDrequest", + &asn_OP_NativeEnumerated, + asn_DEF_NewDRBIDrequest_tags_1, + sizeof(asn_DEF_NewDRBIDrequest_tags_1) + /sizeof(asn_DEF_NewDRBIDrequest_tags_1[0]), /* 1 */ + asn_DEF_NewDRBIDrequest_tags_1, /* Same as above */ + sizeof(asn_DEF_NewDRBIDrequest_tags_1) + /sizeof(asn_DEF_NewDRBIDrequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NewDRBIDrequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NewDRBIDrequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.h new file mode 100644 index 0000000..871c0ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NewDRBIDrequest.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NewDRBIDrequest_H_ +#define _NewDRBIDrequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NewDRBIDrequest { + NewDRBIDrequest_true = 0 + /* + * Enumeration is extensible + */ +} e_NewDRBIDrequest; + +/* NewDRBIDrequest */ +typedef long NewDRBIDrequest_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NewDRBIDrequest_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NewDRBIDrequest; +extern const asn_INTEGER_specifics_t asn_SPC_NewDRBIDrequest_specs_1; +asn_struct_free_f NewDRBIDrequest_free; +asn_struct_print_f NewDRBIDrequest_print; +asn_constr_check_f NewDRBIDrequest_constraint; +ber_type_decoder_f NewDRBIDrequest_decode_ber; +der_type_encoder_f NewDRBIDrequest_encode_der; +xer_type_decoder_f NewDRBIDrequest_decode_xer; +xer_type_encoder_f NewDRBIDrequest_encode_xer; +per_type_decoder_f NewDRBIDrequest_decode_uper; +per_type_encoder_f NewDRBIDrequest_encode_uper; +per_type_decoder_f NewDRBIDrequest_decode_aper; +per_type_encoder_f NewDRBIDrequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NewDRBIDrequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.c new file mode 100644 index 0000000..d8dcd68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "NextHopChainingCount.h" + +int +NextHopChainingCount_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NextHopChainingCount_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NextHopChainingCount_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NextHopChainingCount = { + "NextHopChainingCount", + "NextHopChainingCount", + &asn_OP_NativeInteger, + asn_DEF_NextHopChainingCount_tags_1, + sizeof(asn_DEF_NextHopChainingCount_tags_1) + /sizeof(asn_DEF_NextHopChainingCount_tags_1[0]), /* 1 */ + asn_DEF_NextHopChainingCount_tags_1, /* Same as above */ + sizeof(asn_DEF_NextHopChainingCount_tags_1) + /sizeof(asn_DEF_NextHopChainingCount_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NextHopChainingCount_constr_1, NextHopChainingCount_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.h new file mode 100644 index 0000000..545f835 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/NextHopChainingCount.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _NextHopChainingCount_H_ +#define _NextHopChainingCount_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NextHopChainingCount */ +typedef long NextHopChainingCount_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NextHopChainingCount_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NextHopChainingCount; +asn_struct_free_f NextHopChainingCount_free; +asn_struct_print_f NextHopChainingCount_print; +asn_constr_check_f NextHopChainingCount_constraint; +ber_type_decoder_f NextHopChainingCount_decode_ber; +der_type_encoder_f NextHopChainingCount_encode_der; +xer_type_decoder_f NextHopChainingCount_decode_xer; +xer_type_encoder_f NextHopChainingCount_encode_xer; +per_type_decoder_f NextHopChainingCount_decode_uper; +per_type_encoder_f NextHopChainingCount_encode_uper; +per_type_decoder_f NextHopChainingCount_decode_aper; +per_type_encoder_f NextHopChainingCount_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NextHopChainingCount_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.c new file mode 100644 index 0000000..a59cb79 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Number-of-Antennaports.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Number_of_Antennaports_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Number_of_Antennaports_value2enum_1[] = { + { 0, 3, "an1" }, + { 1, 3, "an2" }, + { 2, 3, "an4" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Number_of_Antennaports_enum2value_1[] = { + 0, /* an1(0) */ + 1, /* an2(1) */ + 2 /* an4(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Number_of_Antennaports_specs_1 = { + asn_MAP_Number_of_Antennaports_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Number_of_Antennaports_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Number_of_Antennaports_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Number_of_Antennaports = { + "Number-of-Antennaports", + "Number-of-Antennaports", + &asn_OP_NativeEnumerated, + asn_DEF_Number_of_Antennaports_tags_1, + sizeof(asn_DEF_Number_of_Antennaports_tags_1) + /sizeof(asn_DEF_Number_of_Antennaports_tags_1[0]), /* 1 */ + asn_DEF_Number_of_Antennaports_tags_1, /* Same as above */ + sizeof(asn_DEF_Number_of_Antennaports_tags_1) + /sizeof(asn_DEF_Number_of_Antennaports_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Number_of_Antennaports_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Number_of_Antennaports_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.h new file mode 100644 index 0000000..31e39eb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Number-of-Antennaports.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Number_of_Antennaports_H_ +#define _Number_of_Antennaports_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Number_of_Antennaports { + Number_of_Antennaports_an1 = 0, + Number_of_Antennaports_an2 = 1, + Number_of_Antennaports_an4 = 2 + /* + * Enumeration is extensible + */ +} e_Number_of_Antennaports; + +/* Number-of-Antennaports */ +typedef long Number_of_Antennaports_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Number_of_Antennaports_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Number_of_Antennaports; +extern const asn_INTEGER_specifics_t asn_SPC_Number_of_Antennaports_specs_1; +asn_struct_free_f Number_of_Antennaports_free; +asn_struct_print_f Number_of_Antennaports_print; +asn_constr_check_f Number_of_Antennaports_constraint; +ber_type_decoder_f Number_of_Antennaports_decode_ber; +der_type_encoder_f Number_of_Antennaports_encode_der; +xer_type_decoder_f Number_of_Antennaports_decode_xer; +xer_type_encoder_f Number_of_Antennaports_encode_xer; +per_type_decoder_f Number_of_Antennaports_decode_uper; +per_type_encoder_f Number_of_Antennaports_encode_uper; +per_type_decoder_f Number_of_Antennaports_decode_aper; +per_type_encoder_f Number_of_Antennaports_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Number_of_Antennaports_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c new file mode 100644 index 0000000..44a3b17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.c @@ -0,0 +1,674 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include /* for CHAR_BIT */ +#include + +/* + * OBJECT IDENTIFIER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OBJECT_IDENTIFIER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)) +}; +asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = { + ASN__PRIMITIVE_TYPE_free, + OBJECT_IDENTIFIER_print, + OCTET_STRING_compare, /* Implemented in terms of a string comparison */ + ber_decode_primitive, + der_encode_primitive, + OBJECT_IDENTIFIER_decode_xer, + OBJECT_IDENTIFIER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OBJECT_IDENTIFIER_decode_oer, + OBJECT_IDENTIFIER_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OBJECT_IDENTIFIER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER = { + "OBJECT IDENTIFIER", + "OBJECT_IDENTIFIER", + &asn_OP_OBJECT_IDENTIFIER, + asn_DEF_OBJECT_IDENTIFIER_tags, + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + asn_DEF_OBJECT_IDENTIFIER_tags, /* Same as above */ + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + { 0, 0, OBJECT_IDENTIFIER_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +OBJECT_IDENTIFIER_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + if(st && st->buf) { + if(st->size < 1) { + ASN__CTFAIL(app_key, td, sptr, + "%s: at least one numerical value " + "expected (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static ssize_t +OBJECT_IDENTIFIER_get_first_arcs(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *arc0, asn_oid_arc_t *arc1) { + asn_oid_arc_t value; + + ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(arcbuf, arcbuf_len, &value); + if(rd <= 0) return rd; + + if(value >= 80) { + *arc0 = 2; + *arc1 = value - 80; + } else if(value >= 40) { + *arc0 = 1; + *arc1 = value - 40; + } else { + *arc0 = 0; + *arc1 = value; + } + + return rd; +} + +ssize_t +OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *ret_value) { + const uint8_t *b = arcbuf; + const uint8_t *arcend = arcbuf + arcbuf_len; /* End of arc */ + + if(arcbuf == arcend) { + return 0; + } else { + asn_oid_arc_t accum; + asn_oid_arc_t upper_limit = (ASN_OID_ARC_MAX >> 7); + /* When the value reaches "upper_limit", it can take */ + /* at most one more digit. If it exceeds "upper_limit" */ + /* but there are more digits - it's an Overflow condition */ + /* Gather all bits into the accumulator */ + for(accum = 0; b < arcend; b++) { + accum = (accum << 7) | (*b & ~0x80); + if((*b & 0x80) == 0) { // no more digits + if(accum <= ASN_OID_ARC_MAX) { + *ret_value = accum; + return 1 + (b - arcbuf); + } else { + errno = ERANGE; /* Overflow */ + return -1; + } + } else { // to make sure we aren't wrapping around + if(accum > upper_limit) { + errno = ERANGE; /* Overflow */ + return -1; + } + } + } + errno = EINVAL; + return -1; + } + +} + +static ssize_t +OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, + asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[32]; + asn_oid_arc_t arc0, arc1; + size_t produced = 0; + size_t off = 0; + ssize_t rd; + int ret; + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + + ret = snprintf(scratch, sizeof(scratch), "%"PRIu32".%"PRIu32, arc0, arc1); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) + return -1; + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + assert(off <= st->size); + ret = snprintf(scratch, sizeof(scratch), ".%" PRIu32, arc); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) return -1; + } + } + + if(off != st->size) { + ASN_DEBUG("Could not scan to the end of Object Identifier"); + return -1; + } + + return produced; +} + +static enum xer_pbd_rval +OBJECT_IDENTIFIER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)sptr; + const char *chunk_end = (const char *)chunk_buf + chunk_size; + const char *endptr; + asn_oid_arc_t s_arcs[10]; + asn_oid_arc_t *arcs = s_arcs; + ssize_t num_arcs; + ssize_t ret; + + (void)td; + + num_arcs = OBJECT_IDENTIFIER_parse_arcs( + (const char *)chunk_buf, chunk_size, arcs, + sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr); + if(num_arcs < 0) { + /* Expecting more than zero arcs */ + return XPBD_BROKEN_ENCODING; + } else if(num_arcs == 0) { + return XPBD_NOT_BODY_IGNORE; + } + assert(endptr == chunk_end); + + if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) { + arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t)); + if(!arcs) return XPBD_SYSTEM_FAILURE; + ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size, + arcs, num_arcs, &endptr); + if(ret != num_arcs) + return XPBD_SYSTEM_FAILURE; /* assert?.. */ + } + + /* + * Convert arcs into BER representation. + */ + ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs); + if(arcs != s_arcs) FREEMEM(arcs); + + return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +OBJECT_IDENTIFIER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(OBJECT_IDENTIFIER_t), opt_mname, + buf_ptr, size, OBJECT_IDENTIFIER__xer_body_decode); +} + +asn_enc_rval_t +OBJECT_IDENTIFIER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) { + ASN__ENCODE_FAILED; + } + + er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +int +OBJECT_IDENTIFIER_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb("{ ", 2, app_key) < 0) + return -1; + + if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0) { + return -1; + } + + return (cb(" }", 2, app_key) < 0) ? -1 : 0; +} + +ssize_t +OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *st, asn_oid_arc_t *arcs, + size_t arc_slots) { + asn_oid_arc_t arc0, arc1; + size_t num_arcs = 0; + size_t off; + ssize_t rd; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + num_arcs = 2; + switch(arc_slots) { + default: + case 2: + arcs[1] = arc1; + /* Fall through */ + case 1: + arcs[0] = arc0; + /* Fall through */ + case 0: + break; + } + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + if(num_arcs < arc_slots) { + arcs[num_arcs] = arc; + } + num_arcs++; + } + } + + if(off != st->size) { + return -1; + } + + return num_arcs; +} + + +/* + * Save the single value as an object identifier arc. + */ +ssize_t +OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t value) { + /* + * The following conditions must hold: + * assert(arcbuf); + */ + uint8_t scratch[((sizeof(value) * CHAR_BIT + 6) / 7)]; + uint8_t *scratch_end = &scratch[sizeof(scratch)-1]; + uint8_t *b; + size_t result_len; + uint8_t mask; + + for(b = scratch_end, mask = 0; ; mask = 0x80, b--) { + *b = mask | (value & 0x7f); + value >>= 7; + if(!value) { + break; + } + } + + result_len = (scratch_end - b) + 1; + + if(result_len > arcbuf_len) { + return -1; + } + + memcpy(arcbuf, b, result_len); + + return result_len; +} + +int +OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *st, const asn_oid_arc_t *arcs, + size_t arc_slots) { + uint8_t *buf; + uint8_t *bp; + ssize_t wrote; + asn_oid_arc_t arc0; + asn_oid_arc_t arc1; + size_t size; + size_t i; + + if(!st || !arcs || arc_slots < 2) { + errno = EINVAL; + return -1; + } + + arc0 = arcs[0]; + arc1 = arcs[1]; + + if(arc0 <= 1) { + if(arc1 >= 40) { + /* 8.19.4: At most 39 subsequent values (including 0) */ + errno = ERANGE; + return -1; + } + } else if(arc0 == 2) { + if(arc1 > ASN_OID_ARC_MAX - 80) { + errno = ERANGE; + return -1; + } + } else if(arc0 > 2) { + /* 8.19.4: Only three values are allocated from the root node */ + errno = ERANGE; + return -1; + } + + /* + * After above tests it is known that the value of arc0 is completely + * trustworthy (0..2). However, the arc1's value is still meaningless. + */ + + /* + * Roughly estimate the maximum size necessary to encode these arcs. + * This estimation implicitly takes in account the following facts, + * that cancel each other: + * * the first two arcs are encoded in a single value. + * * the first value may require more space (+1 byte) + * * the value of the first arc which is in range (0..2) + */ + size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arc_slots; + bp = buf = (uint8_t *)MALLOC(size + 1); + if(!buf) { + /* ENOMEM */ + return -1; + } + + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arc0 * 40 + arc1); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + + for(i = 2; i < arc_slots; i++) { + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + } + + /* + * Replace buffer. + */ + st->size = bp - buf; + bp = st->buf; + st->buf = buf; + st->buf[st->size] = '\0'; + if(bp) FREEMEM(bp); + + return 0; +} + +ssize_t +OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end) { + size_t num_arcs = 0; + const char *oid_end; + enum { + ST_LEADSPACE, + ST_TAILSPACE, + ST_AFTERVALUE, /* Next character ought to be '.' or a space */ + ST_WAITDIGITS /* Next character is expected to be a digit */ + } state = ST_LEADSPACE; + + if(!oid_text || oid_txt_length < -1 || (arcs_count && !arcs)) { + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + errno = EINVAL; + return -1; + } + + if(oid_txt_length == -1) + oid_txt_length = strlen(oid_text); + +#define _OID_CAPTURE_ARC(oid_text, oid_end) \ + do { \ + const char *endp = oid_end; \ + unsigned long value; \ + switch(asn_strtoul_lim(oid_text, &endp, &value)) { \ + case ASN_STRTOX_EXTRA_DATA: \ + case ASN_STRTOX_OK: \ + if(value <= ASN_OID_ARC_MAX) { \ + if(num_arcs < arcs_count) arcs[num_arcs] = value; \ + num_arcs++; \ + oid_text = endp - 1; \ + break; \ + } \ + /* Fall through */ \ + case ASN_STRTOX_ERROR_RANGE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = ERANGE; \ + return -1; \ + case ASN_STRTOX_ERROR_INVAL: \ + case ASN_STRTOX_EXPECT_MORE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = EINVAL; \ + return -1; \ + } \ + } while(0) + + for(oid_end = oid_text + oid_txt_length; oid_text broken OID */ + return -1; + case ST_LEADSPACE: + case ST_WAITDIGITS: + _OID_CAPTURE_ARC(oid_text, oid_end); + state = ST_AFTERVALUE; + continue; + } + break; + default: + /* Unexpected symbols */ + state = ST_WAITDIGITS; + break; + } /* switch() */ + break; + } /* for() */ + + + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + + /* Finalize last arc */ + switch(state) { + case ST_LEADSPACE: + return 0; /* No OID found in input data */ + case ST_WAITDIGITS: + errno = EINVAL; /* Broken OID */ + return -1; + case ST_AFTERVALUE: + case ST_TAILSPACE: + return num_arcs; + } + + errno = EINVAL; /* Broken OID */ + return -1; +} + +/* + * Generate values from the list of interesting values, or just a random + * value up to the upper limit. + */ +static asn_oid_arc_t +OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound) { + const asn_oid_arc_t values[] = {0, 1, 127, 128, 129, 254, 255, 256}; + size_t idx; + + switch(asn_random_between(0, 2)) { + case 0: + idx = asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1); + if(values[idx] < upper_bound) { + return values[idx]; + } + /* Fall through */ + case 1: + return asn_random_between(0, upper_bound); + case 2: + default: + return upper_bound; + } +} + +asn_random_fill_result_t +OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + OBJECT_IDENTIFIER_t *st; + asn_oid_arc_t arcs[5]; + size_t arcs_len = asn_random_between(2, 5); + size_t i; + + (void)constraints; + + if(max_length < arcs_len) return result_skipped; + + if(*sptr) { + st = *sptr; + } else { + st = CALLOC(1, sizeof(*st)); + } + + arcs[0] = asn_random_between(0, 2); + arcs[1] = OBJECT_IDENTIFIER__biased_random_arc( + arcs[0] <= 1 ? 39 : (ASN_OID_ARC_MAX - 80)); + for(i = 2; i < arcs_len; i++) { + arcs[i] = OBJECT_IDENTIFIER__biased_random_arc(ASN_OID_ARC_MAX); + } + + if(OBJECT_IDENTIFIER_set_arcs(st, arcs, arcs_len)) { + if(st != *sptr) { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } + + *sptr = st; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h new file mode 100644 index 0000000..da31d68 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OBJECT_IDENTIFIER.h @@ -0,0 +1,174 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OBJECT_IDENTIFIER_H_ +#define _OBJECT_IDENTIFIER_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint32_t asn_oid_arc_t; +#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0)) + +typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t; + +extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER; +extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER; + +asn_struct_print_f OBJECT_IDENTIFIER_print; +asn_constr_check_f OBJECT_IDENTIFIER_constraint; +der_type_encoder_f OBJECT_IDENTIFIER_encode_der; +xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer; +xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer; +asn_random_fill_f OBJECT_IDENTIFIER_random_fill; + +#define OBJECT_IDENTIFIER_free ASN__PRIMITIVE_TYPE_free +#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare +#define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive +#define OBJECT_IDENTIFIER_encode_der der_encode_primitive +#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive +#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive +#define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper +#define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper +#define OBJECT_IDENTIFIER_decode_aper OCTET_STRING_decode_aper +#define OBJECT_IDENTIFIER_encode_aper OCTET_STRING_encode_aper + +/********************************** + * Some handy conversion routines * + **********************************/ + +/* + * This function fills an (arcs) array with OBJECT IDENTIFIER arcs + * up to specified (arc_slots) elements. + * + * EXAMPLE: + * void print_arcs(OBJECT_IDENTIFIER_t *oid) { + * asn_oid_arc_t fixed_arcs[10]; // Try with fixed space first + * asn_oid_arc_t *arcs = fixed_arcs; + * size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10 + * ssize_t count; // Real number of arcs. + * int i; + * + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * // If necessary, reallocate arcs array and try again. + * if(count > arc_slots) { + * arc_slots = count; + * arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots); + * if(!arcs) return; + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * assert(count == arc_slots); + * } + * + * // Print the contents of the arcs array. + * for(i = 0; i < count; i++) + * printf("%"PRIu32"\n", arcs[i]); + * + * // Avoid memory leak. + * if(arcs != fixed_arcs) free(arcs); + * } + * + * RETURN VALUES: + * -1/EINVAL: Invalid arguments (oid is missing) + * -1/ERANGE: One or more arcs have value out of array cell type range. + * >=0: Number of arcs contained in the OBJECT IDENTIFIER + * + * WARNING: The function always returns the actual number of arcs, + * even if there is no sufficient (arc_slots) provided. + */ +ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid, + asn_oid_arc_t *arcs, size_t arc_slots); + +/* + * This functions initializes the OBJECT IDENTIFIER object with + * the given set of arcs. + * The minimum of two arcs must be present; some restrictions apply. + * RETURN VALUES: + * -1/EINVAL: Invalid arguments + * -1/ERANGE: The first two arcs do not conform to ASN.1 restrictions. + * -1/ENOMEM: Memory allocation failed + * 0: The object was initialized with new arcs. + */ +int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid, + const asn_oid_arc_t *arcs, size_t arcs_count); + + +/* + * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363"). + * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX). + * This function is not specific to OBJECT IDENTIFIER, it may be used to parse + * the RELATIVE-OID data, or any other data consisting of dot-separated + * series of numeric values. + * + * If (oid_txt_length == -1), the strlen() will be invoked to determine the + * size of the (oid_text) string. + * + * After return, the optional (opt_oid_text_end) is set to the character after + * the last parsed one. (opt_oid_text_end) is never less than (oid_text). + * + * RETURN VALUES: + * -1: Parse error. + * >= 0: Number of arcs contained in the OBJECT IDENTIFIER. + * + * WARNING: The function always returns the real number of arcs, + * even if there is no sufficient (arc_slots) provided. + * This is useful for (arc_slots) value estimation. + */ +ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, + ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end); + +/* + * Internal functions. + * Used by RELATIVE-OID implementation in particular. + */ + +/* + * Retrieve a single arc of size from the (arcbuf) buffer. + * RETURN VALUES: + * -1: Failed to retrieve the value from the (arcbuf). + * >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, + size_t arcbuf_len, + asn_oid_arc_t *ret_value); + +/* + * Write the unterminated arc value into the (arcbuf) which has the size at + * least (arcbuf_len). + * RETURN VALUES: + * -1: (arcbuf_len) size is not sufficient to write the value. + * : Number of bytes appended to the arcbuf (<= arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t arc_value); + +#ifdef __cplusplus +} +#endif + +#endif /* _OBJECT_IDENTIFIER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..a805e77 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.c @@ -0,0 +1,2427 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..d3ca46e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OCTET_STRING.h @@ -0,0 +1,120 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..c569c32 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.c @@ -0,0 +1,527 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..4a8b4e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OPEN_TYPE.h @@ -0,0 +1,95 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c new file mode 100644 index 0000000..dd3c180 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "OffsetOfNbiotChannelNumberToEARFCN.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_OffsetOfNbiotChannelNumberToEARFCN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 20 } /* (0..20,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_OffsetOfNbiotChannelNumberToEARFCN_value2enum_1[] = { + { 0, 8, "minusTen" }, + { 1, 9, "minusNine" }, + { 2, 10, "minusEight" }, + { 3, 10, "minusSeven" }, + { 4, 8, "minusSix" }, + { 5, 9, "minusFive" }, + { 6, 9, "minusFour" }, + { 7, 10, "minusThree" }, + { 8, 8, "minusTwo" }, + { 9, 8, "minusOne" }, + { 10, 16, "minusZeroDotFive" }, + { 11, 4, "zero" }, + { 12, 3, "one" }, + { 13, 3, "two" }, + { 14, 5, "three" }, + { 15, 4, "four" }, + { 16, 4, "five" }, + { 17, 3, "six" }, + { 18, 5, "seven" }, + { 19, 5, "eight" }, + { 20, 4, "nine" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_OffsetOfNbiotChannelNumberToEARFCN_enum2value_1[] = { + 19, /* eight(19) */ + 16, /* five(16) */ + 15, /* four(15) */ + 2, /* minusEight(2) */ + 5, /* minusFive(5) */ + 6, /* minusFour(6) */ + 1, /* minusNine(1) */ + 9, /* minusOne(9) */ + 3, /* minusSeven(3) */ + 4, /* minusSix(4) */ + 0, /* minusTen(0) */ + 7, /* minusThree(7) */ + 8, /* minusTwo(8) */ + 10, /* minusZeroDotFive(10) */ + 20, /* nine(20) */ + 12, /* one(12) */ + 18, /* seven(18) */ + 17, /* six(17) */ + 14, /* three(14) */ + 13, /* two(13) */ + 11 /* zero(11) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_OffsetOfNbiotChannelNumberToEARFCN_specs_1 = { + asn_MAP_OffsetOfNbiotChannelNumberToEARFCN_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_OffsetOfNbiotChannelNumberToEARFCN_enum2value_1, /* N => "tag"; sorted by N */ + 21, /* Number of elements in the maps */ + 22, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_OffsetOfNbiotChannelNumberToEARFCN = { + "OffsetOfNbiotChannelNumberToEARFCN", + "OffsetOfNbiotChannelNumberToEARFCN", + &asn_OP_NativeEnumerated, + asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1, + sizeof(asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1) + /sizeof(asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1[0]), /* 1 */ + asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1, /* Same as above */ + sizeof(asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1) + /sizeof(asn_DEF_OffsetOfNbiotChannelNumberToEARFCN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_OffsetOfNbiotChannelNumberToEARFCN_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_OffsetOfNbiotChannelNumberToEARFCN_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h new file mode 100644 index 0000000..e374aea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/OffsetOfNbiotChannelNumberToEARFCN.h @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _OffsetOfNbiotChannelNumberToEARFCN_H_ +#define _OffsetOfNbiotChannelNumberToEARFCN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum OffsetOfNbiotChannelNumberToEARFCN { + OffsetOfNbiotChannelNumberToEARFCN_minusTen = 0, + OffsetOfNbiotChannelNumberToEARFCN_minusNine = 1, + OffsetOfNbiotChannelNumberToEARFCN_minusEight = 2, + OffsetOfNbiotChannelNumberToEARFCN_minusSeven = 3, + OffsetOfNbiotChannelNumberToEARFCN_minusSix = 4, + OffsetOfNbiotChannelNumberToEARFCN_minusFive = 5, + OffsetOfNbiotChannelNumberToEARFCN_minusFour = 6, + OffsetOfNbiotChannelNumberToEARFCN_minusThree = 7, + OffsetOfNbiotChannelNumberToEARFCN_minusTwo = 8, + OffsetOfNbiotChannelNumberToEARFCN_minusOne = 9, + OffsetOfNbiotChannelNumberToEARFCN_minusZeroDotFive = 10, + OffsetOfNbiotChannelNumberToEARFCN_zero = 11, + OffsetOfNbiotChannelNumberToEARFCN_one = 12, + OffsetOfNbiotChannelNumberToEARFCN_two = 13, + OffsetOfNbiotChannelNumberToEARFCN_three = 14, + OffsetOfNbiotChannelNumberToEARFCN_four = 15, + OffsetOfNbiotChannelNumberToEARFCN_five = 16, + OffsetOfNbiotChannelNumberToEARFCN_six = 17, + OffsetOfNbiotChannelNumberToEARFCN_seven = 18, + OffsetOfNbiotChannelNumberToEARFCN_eight = 19, + OffsetOfNbiotChannelNumberToEARFCN_nine = 20 + /* + * Enumeration is extensible + */ +} e_OffsetOfNbiotChannelNumberToEARFCN; + +/* OffsetOfNbiotChannelNumberToEARFCN */ +typedef long OffsetOfNbiotChannelNumberToEARFCN_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_OffsetOfNbiotChannelNumberToEARFCN_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_OffsetOfNbiotChannelNumberToEARFCN; +extern const asn_INTEGER_specifics_t asn_SPC_OffsetOfNbiotChannelNumberToEARFCN_specs_1; +asn_struct_free_f OffsetOfNbiotChannelNumberToEARFCN_free; +asn_struct_print_f OffsetOfNbiotChannelNumberToEARFCN_print; +asn_constr_check_f OffsetOfNbiotChannelNumberToEARFCN_constraint; +ber_type_decoder_f OffsetOfNbiotChannelNumberToEARFCN_decode_ber; +der_type_encoder_f OffsetOfNbiotChannelNumberToEARFCN_encode_der; +xer_type_decoder_f OffsetOfNbiotChannelNumberToEARFCN_decode_xer; +xer_type_encoder_f OffsetOfNbiotChannelNumberToEARFCN_encode_xer; +per_type_decoder_f OffsetOfNbiotChannelNumberToEARFCN_decode_uper; +per_type_encoder_f OffsetOfNbiotChannelNumberToEARFCN_encode_uper; +per_type_decoder_f OffsetOfNbiotChannelNumberToEARFCN_decode_aper; +per_type_encoder_f OffsetOfNbiotChannelNumberToEARFCN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _OffsetOfNbiotChannelNumberToEARFCN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.c new file mode 100644 index 0000000..216d390 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Old-ECGIs.h" + +#include "ECGI.h" +static asn_per_constraints_t asn_PER_type_Old_ECGIs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Old_ECGIs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_Old_ECGIs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_Old_ECGIs_specs_1 = { + sizeof(struct Old_ECGIs), + offsetof(struct Old_ECGIs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_Old_ECGIs = { + "Old-ECGIs", + "Old-ECGIs", + &asn_OP_SEQUENCE_OF, + asn_DEF_Old_ECGIs_tags_1, + sizeof(asn_DEF_Old_ECGIs_tags_1) + /sizeof(asn_DEF_Old_ECGIs_tags_1[0]), /* 1 */ + asn_DEF_Old_ECGIs_tags_1, /* Same as above */ + sizeof(asn_DEF_Old_ECGIs_tags_1) + /sizeof(asn_DEF_Old_ECGIs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Old_ECGIs_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_Old_ECGIs_1, + 1, /* Single element */ + &asn_SPC_Old_ECGIs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.h new file mode 100644 index 0000000..cb4b327 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Old-ECGIs.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Old_ECGIs_H_ +#define _Old_ECGIs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* Old-ECGIs */ +typedef struct Old_ECGIs { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Old_ECGIs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Old_ECGIs; + +#ifdef __cplusplus +} +#endif + +#endif /* _Old_ECGIs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.c new file mode 100644 index 0000000..ce00f55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Oneframe.h" + +int +Oneframe_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Oneframe_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Oneframe_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Oneframe = { + "Oneframe", + "Oneframe", + &asn_OP_BIT_STRING, + asn_DEF_Oneframe_tags_1, + sizeof(asn_DEF_Oneframe_tags_1) + /sizeof(asn_DEF_Oneframe_tags_1[0]), /* 1 */ + asn_DEF_Oneframe_tags_1, /* Same as above */ + sizeof(asn_DEF_Oneframe_tags_1) + /sizeof(asn_DEF_Oneframe_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Oneframe_constr_1, Oneframe_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.h new file mode 100644 index 0000000..e18bf75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Oneframe.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Oneframe_H_ +#define _Oneframe_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Oneframe */ +typedef BIT_STRING_t Oneframe_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Oneframe_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Oneframe; +asn_struct_free_f Oneframe_free; +asn_struct_print_f Oneframe_print; +asn_constr_check_f Oneframe_constraint; +ber_type_decoder_f Oneframe_decode_ber; +der_type_encoder_f Oneframe_encode_der; +xer_type_decoder_f Oneframe_decode_xer; +xer_type_encoder_f Oneframe_encode_xer; +per_type_decoder_f Oneframe_decode_uper; +per_type_encoder_f Oneframe_encode_uper; +per_type_decoder_f Oneframe_decode_aper; +per_type_encoder_f Oneframe_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Oneframe_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.c new file mode 100644 index 0000000..898ff52 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PA-Values.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PA_Values_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_PA_Values_value2enum_1[] = { + { 0, 4, "dB-6" }, + { 1, 9, "dB-4dot77" }, + { 2, 4, "dB-3" }, + { 3, 9, "dB-1dot77" }, + { 4, 3, "dB0" }, + { 5, 3, "dB1" }, + { 6, 3, "dB2" }, + { 7, 3, "dB3" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_PA_Values_enum2value_1[] = { + 3, /* dB-1dot77(3) */ + 2, /* dB-3(2) */ + 1, /* dB-4dot77(1) */ + 0, /* dB-6(0) */ + 4, /* dB0(4) */ + 5, /* dB1(5) */ + 6, /* dB2(6) */ + 7 /* dB3(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_PA_Values_specs_1 = { + asn_MAP_PA_Values_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PA_Values_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_PA_Values_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PA_Values = { + "PA-Values", + "PA-Values", + &asn_OP_NativeEnumerated, + asn_DEF_PA_Values_tags_1, + sizeof(asn_DEF_PA_Values_tags_1) + /sizeof(asn_DEF_PA_Values_tags_1[0]), /* 1 */ + asn_DEF_PA_Values_tags_1, /* Same as above */ + sizeof(asn_DEF_PA_Values_tags_1) + /sizeof(asn_DEF_PA_Values_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PA_Values_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PA_Values_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.h new file mode 100644 index 0000000..1ed3e92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PA-Values.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PA_Values_H_ +#define _PA_Values_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PA_Values { + PA_Values_dB_6 = 0, + PA_Values_dB_4dot77 = 1, + PA_Values_dB_3 = 2, + PA_Values_dB_1dot77 = 3, + PA_Values_dB0 = 4, + PA_Values_dB1 = 5, + PA_Values_dB2 = 6, + PA_Values_dB3 = 7 + /* + * Enumeration is extensible + */ +} e_PA_Values; + +/* PA-Values */ +typedef long PA_Values_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PA_Values_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PA_Values; +extern const asn_INTEGER_specifics_t asn_SPC_PA_Values_specs_1; +asn_struct_free_f PA_Values_free; +asn_struct_print_f PA_Values_print; +asn_constr_check_f PA_Values_constraint; +ber_type_decoder_f PA_Values_decode_ber; +der_type_encoder_f PA_Values_encode_der; +xer_type_decoder_f PA_Values_decode_xer; +xer_type_encoder_f PA_Values_encode_xer; +per_type_decoder_f PA_Values_decode_uper; +per_type_encoder_f PA_Values_encode_uper; +per_type_decoder_f PA_Values_decode_aper; +per_type_encoder_f PA_Values_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PA_Values_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.c new file mode 100644 index 0000000..2a795fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PCI.h" + +int +PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 503)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 9, 9, 0, 503 } /* (0..503,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PCI = { + "PCI", + "PCI", + &asn_OP_NativeInteger, + asn_DEF_PCI_tags_1, + sizeof(asn_DEF_PCI_tags_1) + /sizeof(asn_DEF_PCI_tags_1[0]), /* 1 */ + asn_DEF_PCI_tags_1, /* Same as above */ + sizeof(asn_DEF_PCI_tags_1) + /sizeof(asn_DEF_PCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PCI_constr_1, PCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.h new file mode 100644 index 0000000..49a0338 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PCI.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PCI_H_ +#define _PCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PCI */ +typedef long PCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PCI; +asn_struct_free_f PCI_free; +asn_struct_print_f PCI_print; +asn_constr_check_f PCI_constraint; +ber_type_decoder_f PCI_decode_ber; +der_type_encoder_f PCI_encode_der; +xer_type_decoder_f PCI_decode_xer; +xer_type_encoder_f PCI_encode_xer; +per_type_decoder_f PCI_decode_uper; +per_type_encoder_f PCI_encode_uper; +per_type_decoder_f PCI_decode_aper; +per_type_encoder_f PCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PCI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.c new file mode 100644 index 0000000..543a808 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PDCP-SN.h" + +int +PDCP_SN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PDCP_SN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PDCP_SN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PDCP_SN = { + "PDCP-SN", + "PDCP-SN", + &asn_OP_NativeInteger, + asn_DEF_PDCP_SN_tags_1, + sizeof(asn_DEF_PDCP_SN_tags_1) + /sizeof(asn_DEF_PDCP_SN_tags_1[0]), /* 1 */ + asn_DEF_PDCP_SN_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCP_SN_tags_1) + /sizeof(asn_DEF_PDCP_SN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PDCP_SN_constr_1, PDCP_SN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.h new file mode 100644 index 0000000..3033062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SN.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PDCP_SN_H_ +#define _PDCP_SN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PDCP-SN */ +typedef long PDCP_SN_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PDCP_SN_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PDCP_SN; +asn_struct_free_f PDCP_SN_free; +asn_struct_print_f PDCP_SN_print; +asn_constr_check_f PDCP_SN_constraint; +ber_type_decoder_f PDCP_SN_decode_ber; +der_type_encoder_f PDCP_SN_encode_der; +xer_type_decoder_f PDCP_SN_decode_xer; +xer_type_encoder_f PDCP_SN_encode_xer; +per_type_decoder_f PDCP_SN_decode_uper; +per_type_encoder_f PDCP_SN_encode_uper; +per_type_decoder_f PDCP_SN_decode_aper; +per_type_encoder_f PDCP_SN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCP_SN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.c new file mode 100644 index 0000000..e7ebbf3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PDCP-SNExtended.h" + +int +PDCP_SNExtended_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 32767)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PDCP_SNExtended_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 15, 15, 0, 32767 } /* (0..32767) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PDCP_SNExtended_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PDCP_SNExtended = { + "PDCP-SNExtended", + "PDCP-SNExtended", + &asn_OP_NativeInteger, + asn_DEF_PDCP_SNExtended_tags_1, + sizeof(asn_DEF_PDCP_SNExtended_tags_1) + /sizeof(asn_DEF_PDCP_SNExtended_tags_1[0]), /* 1 */ + asn_DEF_PDCP_SNExtended_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCP_SNExtended_tags_1) + /sizeof(asn_DEF_PDCP_SNExtended_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PDCP_SNExtended_constr_1, PDCP_SNExtended_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.h new file mode 100644 index 0000000..3188be1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNExtended.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PDCP_SNExtended_H_ +#define _PDCP_SNExtended_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PDCP-SNExtended */ +typedef long PDCP_SNExtended_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PDCP_SNExtended_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PDCP_SNExtended; +asn_struct_free_f PDCP_SNExtended_free; +asn_struct_print_f PDCP_SNExtended_print; +asn_constr_check_f PDCP_SNExtended_constraint; +ber_type_decoder_f PDCP_SNExtended_decode_ber; +der_type_encoder_f PDCP_SNExtended_encode_der; +xer_type_decoder_f PDCP_SNExtended_decode_xer; +xer_type_encoder_f PDCP_SNExtended_encode_xer; +per_type_decoder_f PDCP_SNExtended_decode_uper; +per_type_encoder_f PDCP_SNExtended_encode_uper; +per_type_decoder_f PDCP_SNExtended_decode_aper; +per_type_encoder_f PDCP_SNExtended_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCP_SNExtended_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.c new file mode 100644 index 0000000..f7a2f98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PDCP-SNlength18.h" + +int +PDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 262143)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PDCP_SNlength18_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 18, -1, 0, 262143 } /* (0..262143) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PDCP_SNlength18_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PDCP_SNlength18 = { + "PDCP-SNlength18", + "PDCP-SNlength18", + &asn_OP_NativeInteger, + asn_DEF_PDCP_SNlength18_tags_1, + sizeof(asn_DEF_PDCP_SNlength18_tags_1) + /sizeof(asn_DEF_PDCP_SNlength18_tags_1[0]), /* 1 */ + asn_DEF_PDCP_SNlength18_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCP_SNlength18_tags_1) + /sizeof(asn_DEF_PDCP_SNlength18_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PDCP_SNlength18_constr_1, PDCP_SNlength18_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.h new file mode 100644 index 0000000..901aca4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCP-SNlength18.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PDCP_SNlength18_H_ +#define _PDCP_SNlength18_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PDCP-SNlength18 */ +typedef long PDCP_SNlength18_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PDCP_SNlength18_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PDCP_SNlength18; +asn_struct_free_f PDCP_SNlength18_free; +asn_struct_print_f PDCP_SNlength18_print; +asn_constr_check_f PDCP_SNlength18_constraint; +ber_type_decoder_f PDCP_SNlength18_decode_ber; +der_type_encoder_f PDCP_SNlength18_encode_der; +xer_type_decoder_f PDCP_SNlength18_decode_xer; +xer_type_encoder_f PDCP_SNlength18_encode_xer; +per_type_decoder_f PDCP_SNlength18_decode_uper; +per_type_encoder_f PDCP_SNlength18_encode_uper; +per_type_decoder_f PDCP_SNlength18_decode_aper; +per_type_encoder_f PDCP_SNlength18_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCP_SNlength18_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.c new file mode 100644 index 0000000..ea96721 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PDCPChangeIndication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PDCPChangeIndication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_PDCPChangeIndication_value2enum_1[] = { + { 0, 22, "s-KgNB-update-required" }, + { 1, 27, "pDCP-data-recovery-required" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_PDCPChangeIndication_enum2value_1[] = { + 1, /* pDCP-data-recovery-required(1) */ + 0 /* s-KgNB-update-required(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_PDCPChangeIndication_specs_1 = { + asn_MAP_PDCPChangeIndication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PDCPChangeIndication_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_PDCPChangeIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PDCPChangeIndication = { + "PDCPChangeIndication", + "PDCPChangeIndication", + &asn_OP_NativeEnumerated, + asn_DEF_PDCPChangeIndication_tags_1, + sizeof(asn_DEF_PDCPChangeIndication_tags_1) + /sizeof(asn_DEF_PDCPChangeIndication_tags_1[0]), /* 1 */ + asn_DEF_PDCPChangeIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCPChangeIndication_tags_1) + /sizeof(asn_DEF_PDCPChangeIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PDCPChangeIndication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PDCPChangeIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.h new file mode 100644 index 0000000..3c8b18b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPChangeIndication.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PDCPChangeIndication_H_ +#define _PDCPChangeIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PDCPChangeIndication { + PDCPChangeIndication_s_KgNB_update_required = 0, + PDCPChangeIndication_pDCP_data_recovery_required = 1 + /* + * Enumeration is extensible + */ +} e_PDCPChangeIndication; + +/* PDCPChangeIndication */ +typedef long PDCPChangeIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PDCPChangeIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PDCPChangeIndication; +extern const asn_INTEGER_specifics_t asn_SPC_PDCPChangeIndication_specs_1; +asn_struct_free_f PDCPChangeIndication_free; +asn_struct_print_f PDCPChangeIndication_print; +asn_constr_check_f PDCPChangeIndication_constraint; +ber_type_decoder_f PDCPChangeIndication_decode_ber; +der_type_encoder_f PDCPChangeIndication_encode_der; +xer_type_decoder_f PDCPChangeIndication_decode_xer; +xer_type_encoder_f PDCPChangeIndication_encode_xer; +per_type_decoder_f PDCPChangeIndication_decode_uper; +per_type_encoder_f PDCPChangeIndication_encode_uper; +per_type_decoder_f PDCPChangeIndication_decode_aper; +per_type_encoder_f PDCPChangeIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCPChangeIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.c new file mode 100644 index 0000000..7042f83 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PDCPSnLength.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PDCPSnLength_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_PDCPSnLength_value2enum_1[] = { + { 0, 11, "twelve-bits" }, + { 1, 13, "eighteen-bits" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_PDCPSnLength_enum2value_1[] = { + 1, /* eighteen-bits(1) */ + 0 /* twelve-bits(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_PDCPSnLength_specs_1 = { + asn_MAP_PDCPSnLength_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PDCPSnLength_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_PDCPSnLength_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PDCPSnLength = { + "PDCPSnLength", + "PDCPSnLength", + &asn_OP_NativeEnumerated, + asn_DEF_PDCPSnLength_tags_1, + sizeof(asn_DEF_PDCPSnLength_tags_1) + /sizeof(asn_DEF_PDCPSnLength_tags_1[0]), /* 1 */ + asn_DEF_PDCPSnLength_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCPSnLength_tags_1) + /sizeof(asn_DEF_PDCPSnLength_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PDCPSnLength_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PDCPSnLength_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.h new file mode 100644 index 0000000..f075e9f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PDCPSnLength.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PDCPSnLength_H_ +#define _PDCPSnLength_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PDCPSnLength { + PDCPSnLength_twelve_bits = 0, + PDCPSnLength_eighteen_bits = 1 + /* + * Enumeration is extensible + */ +} e_PDCPSnLength; + +/* PDCPSnLength */ +typedef long PDCPSnLength_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PDCPSnLength_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PDCPSnLength; +extern const asn_INTEGER_specifics_t asn_SPC_PDCPSnLength_specs_1; +asn_struct_free_f PDCPSnLength_free; +asn_struct_print_f PDCPSnLength_print; +asn_constr_check_f PDCPSnLength_constraint; +ber_type_decoder_f PDCPSnLength_decode_ber; +der_type_encoder_f PDCPSnLength_encode_der; +xer_type_decoder_f PDCPSnLength_decode_xer; +xer_type_encoder_f PDCPSnLength_encode_xer; +per_type_decoder_f PDCPSnLength_decode_uper; +per_type_encoder_f PDCPSnLength_encode_uper; +per_type_decoder_f PDCPSnLength_decode_aper; +per_type_encoder_f PDCPSnLength_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCPSnLength_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..acb3a54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..d7417d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMN-Identity.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.c new file mode 100644 index 0000000..ef25747 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PLMNAreaBasedQMC.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_PLMNAreaBasedQMC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PLMNAreaBasedQMC, plmnListforQMC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNListforQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmnListforQMC" + }, + { ATF_POINTER, 1, offsetof(struct PLMNAreaBasedQMC, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P178, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_PLMNAreaBasedQMC_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_PLMNAreaBasedQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PLMNAreaBasedQMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmnListforQMC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PLMNAreaBasedQMC_specs_1 = { + sizeof(struct PLMNAreaBasedQMC), + offsetof(struct PLMNAreaBasedQMC, _asn_ctx), + asn_MAP_PLMNAreaBasedQMC_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PLMNAreaBasedQMC_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMNAreaBasedQMC = { + "PLMNAreaBasedQMC", + "PLMNAreaBasedQMC", + &asn_OP_SEQUENCE, + asn_DEF_PLMNAreaBasedQMC_tags_1, + sizeof(asn_DEF_PLMNAreaBasedQMC_tags_1) + /sizeof(asn_DEF_PLMNAreaBasedQMC_tags_1[0]), /* 1 */ + asn_DEF_PLMNAreaBasedQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMNAreaBasedQMC_tags_1) + /sizeof(asn_DEF_PLMNAreaBasedQMC_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PLMNAreaBasedQMC_1, + 2, /* Elements count */ + &asn_SPC_PLMNAreaBasedQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.h new file mode 100644 index 0000000..464dfa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNAreaBasedQMC.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PLMNAreaBasedQMC_H_ +#define _PLMNAreaBasedQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNListforQMC.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* PLMNAreaBasedQMC */ +typedef struct PLMNAreaBasedQMC { + PLMNListforQMC_t plmnListforQMC; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMNAreaBasedQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PLMNAreaBasedQMC; +extern asn_SEQUENCE_specifics_t asn_SPC_PLMNAreaBasedQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_PLMNAreaBasedQMC_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMNAreaBasedQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.c new file mode 100644 index 0000000..6a86bdb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PLMNListforQMC.h" + +asn_per_constraints_t asn_PER_type_PLMNListforQMC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PLMNListforQMC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_PLMNListforQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_PLMNListforQMC_specs_1 = { + sizeof(struct PLMNListforQMC), + offsetof(struct PLMNListforQMC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMNListforQMC = { + "PLMNListforQMC", + "PLMNListforQMC", + &asn_OP_SEQUENCE_OF, + asn_DEF_PLMNListforQMC_tags_1, + sizeof(asn_DEF_PLMNListforQMC_tags_1) + /sizeof(asn_DEF_PLMNListforQMC_tags_1[0]), /* 1 */ + asn_DEF_PLMNListforQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMNListforQMC_tags_1) + /sizeof(asn_DEF_PLMNListforQMC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PLMNListforQMC_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_PLMNListforQMC_1, + 1, /* Single element */ + &asn_SPC_PLMNListforQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.h new file mode 100644 index 0000000..f1b7dc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PLMNListforQMC.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PLMNListforQMC_H_ +#define _PLMNListforQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMNListforQMC */ +typedef struct PLMNListforQMC { + A_SEQUENCE_OF(PLMN_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMNListforQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PLMNListforQMC; +extern asn_SET_OF_specifics_t asn_SPC_PLMNListforQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_PLMNListforQMC_1[1]; +extern asn_per_constraints_t asn_PER_type_PLMNListforQMC_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMNListforQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.c new file mode 100644 index 0000000..2827357 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.c @@ -0,0 +1,241 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PRACH-Configuration.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_rootSequenceIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 837)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_zeroCorrelationIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_prach_FreqOffset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 94)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_prach_ConfigIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_rootSequenceIndex_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 837 } /* (0..837) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_zeroCorrelationIndex_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_prach_FreqOffset_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 94 } /* (0..94) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_prach_ConfigIndex_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PRACH_Configuration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration, rootSequenceIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_rootSequenceIndex_constr_2, memb_rootSequenceIndex_constraint_1 }, + 0, 0, /* No default value */ + "rootSequenceIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration, zeroCorrelationIndex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_zeroCorrelationIndex_constr_3, memb_zeroCorrelationIndex_constraint_1 }, + 0, 0, /* No default value */ + "zeroCorrelationIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration, highSpeedFlag), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "highSpeedFlag" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration, prach_FreqOffset), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_prach_FreqOffset_constr_5, memb_prach_FreqOffset_constraint_1 }, + 0, 0, /* No default value */ + "prach-FreqOffset" + }, + { ATF_POINTER, 2, offsetof(struct PRACH_Configuration, prach_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_prach_ConfigIndex_constr_6, memb_prach_ConfigIndex_constraint_1 }, + 0, 0, /* No default value */ + "prach-ConfigIndex" + }, + { ATF_POINTER, 1, offsetof(struct PRACH_Configuration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P177, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_PRACH_Configuration_oms_1[] = { 4, 5 }; +static const ber_tlv_tag_t asn_DEF_PRACH_Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PRACH_Configuration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rootSequenceIndex */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* zeroCorrelationIndex */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* highSpeedFlag */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* prach-FreqOffset */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* prach-ConfigIndex */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PRACH_Configuration_specs_1 = { + sizeof(struct PRACH_Configuration), + offsetof(struct PRACH_Configuration, _asn_ctx), + asn_MAP_PRACH_Configuration_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_PRACH_Configuration_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_Configuration = { + "PRACH-Configuration", + "PRACH-Configuration", + &asn_OP_SEQUENCE, + asn_DEF_PRACH_Configuration_tags_1, + sizeof(asn_DEF_PRACH_Configuration_tags_1) + /sizeof(asn_DEF_PRACH_Configuration_tags_1[0]), /* 1 */ + asn_DEF_PRACH_Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_PRACH_Configuration_tags_1) + /sizeof(asn_DEF_PRACH_Configuration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PRACH_Configuration_1, + 6, /* Elements count */ + &asn_SPC_PRACH_Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.h new file mode 100644 index 0000000..8a97c5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PRACH-Configuration.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PRACH_Configuration_H_ +#define _PRACH_Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "BOOLEAN.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* PRACH-Configuration */ +typedef struct PRACH_Configuration { + long rootSequenceIndex; + long zeroCorrelationIndex; + BOOLEAN_t highSpeedFlag; + long prach_FreqOffset; + long *prach_ConfigIndex; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_Configuration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PRACH_Configuration; +extern asn_SEQUENCE_specifics_t asn_SPC_PRACH_Configuration_specs_1; +extern asn_TYPE_member_t asn_MBR_PRACH_Configuration_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PRACH_Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.c new file mode 100644 index 0000000..29df7c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Packet-LossRate.h" + +int +Packet_LossRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Packet_LossRate_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 1000 } /* (0..1000) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Packet_LossRate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Packet_LossRate = { + "Packet-LossRate", + "Packet-LossRate", + &asn_OP_NativeInteger, + asn_DEF_Packet_LossRate_tags_1, + sizeof(asn_DEF_Packet_LossRate_tags_1) + /sizeof(asn_DEF_Packet_LossRate_tags_1[0]), /* 1 */ + asn_DEF_Packet_LossRate_tags_1, /* Same as above */ + sizeof(asn_DEF_Packet_LossRate_tags_1) + /sizeof(asn_DEF_Packet_LossRate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Packet_LossRate_constr_1, Packet_LossRate_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.h new file mode 100644 index 0000000..626a8f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Packet-LossRate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Packet_LossRate_H_ +#define _Packet_LossRate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Packet-LossRate */ +typedef long Packet_LossRate_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Packet_LossRate_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Packet_LossRate; +asn_struct_free_f Packet_LossRate_free; +asn_struct_print_f Packet_LossRate_print; +asn_constr_check_f Packet_LossRate_constraint; +ber_type_decoder_f Packet_LossRate_decode_ber; +der_type_encoder_f Packet_LossRate_encode_der; +xer_type_decoder_f Packet_LossRate_decode_xer; +xer_type_encoder_f Packet_LossRate_encode_xer; +per_type_decoder_f Packet_LossRate_decode_uper; +per_type_encoder_f Packet_LossRate_encode_uper; +per_type_decoder_f Packet_LossRate_decode_aper; +per_type_encoder_f Packet_LossRate_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Packet_LossRate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.c new file mode 100644 index 0000000..251c85f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PartialSuccessIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_PartialSuccessIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_PartialSuccessIndicator_value2enum_1[] = { + { 0, 23, "partial-success-allowed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_PartialSuccessIndicator_enum2value_1[] = { + 0 /* partial-success-allowed(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_PartialSuccessIndicator_specs_1 = { + asn_MAP_PartialSuccessIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PartialSuccessIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_PartialSuccessIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PartialSuccessIndicator = { + "PartialSuccessIndicator", + "PartialSuccessIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_PartialSuccessIndicator_tags_1, + sizeof(asn_DEF_PartialSuccessIndicator_tags_1) + /sizeof(asn_DEF_PartialSuccessIndicator_tags_1[0]), /* 1 */ + asn_DEF_PartialSuccessIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_PartialSuccessIndicator_tags_1) + /sizeof(asn_DEF_PartialSuccessIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PartialSuccessIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PartialSuccessIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.h new file mode 100644 index 0000000..fd15c1f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PartialSuccessIndicator.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PartialSuccessIndicator_H_ +#define _PartialSuccessIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PartialSuccessIndicator { + PartialSuccessIndicator_partial_success_allowed = 0 + /* + * Enumeration is extensible + */ +} e_PartialSuccessIndicator; + +/* PartialSuccessIndicator */ +typedef long PartialSuccessIndicator_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PartialSuccessIndicator; +asn_struct_free_f PartialSuccessIndicator_free; +asn_struct_print_f PartialSuccessIndicator_print; +asn_constr_check_f PartialSuccessIndicator_constraint; +ber_type_decoder_f PartialSuccessIndicator_decode_ber; +der_type_encoder_f PartialSuccessIndicator_encode_der; +xer_type_decoder_f PartialSuccessIndicator_decode_xer; +xer_type_encoder_f PartialSuccessIndicator_encode_xer; +per_type_decoder_f PartialSuccessIndicator_decode_uper; +per_type_encoder_f PartialSuccessIndicator_encode_uper; +per_type_decoder_f PartialSuccessIndicator_decode_aper; +per_type_encoder_f PartialSuccessIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PartialSuccessIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.c new file mode 100644 index 0000000..dd20eea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PedestrianUE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PedestrianUE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_PedestrianUE_value2enum_1[] = { + { 0, 10, "authorized" }, + { 1, 14, "not-authorized" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_PedestrianUE_enum2value_1[] = { + 0, /* authorized(0) */ + 1 /* not-authorized(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_PedestrianUE_specs_1 = { + asn_MAP_PedestrianUE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PedestrianUE_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_PedestrianUE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PedestrianUE = { + "PedestrianUE", + "PedestrianUE", + &asn_OP_NativeEnumerated, + asn_DEF_PedestrianUE_tags_1, + sizeof(asn_DEF_PedestrianUE_tags_1) + /sizeof(asn_DEF_PedestrianUE_tags_1[0]), /* 1 */ + asn_DEF_PedestrianUE_tags_1, /* Same as above */ + sizeof(asn_DEF_PedestrianUE_tags_1) + /sizeof(asn_DEF_PedestrianUE_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PedestrianUE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PedestrianUE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.h new file mode 100644 index 0000000..c579324 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PedestrianUE.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PedestrianUE_H_ +#define _PedestrianUE_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PedestrianUE { + PedestrianUE_authorized = 0, + PedestrianUE_not_authorized = 1 + /* + * Enumeration is extensible + */ +} e_PedestrianUE; + +/* PedestrianUE */ +typedef long PedestrianUE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PedestrianUE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PedestrianUE; +extern const asn_INTEGER_specifics_t asn_SPC_PedestrianUE_specs_1; +asn_struct_free_f PedestrianUE_free; +asn_struct_print_f PedestrianUE_print; +asn_constr_check_f PedestrianUE_constraint; +ber_type_decoder_f PedestrianUE_decode_ber; +der_type_encoder_f PedestrianUE_encode_der; +xer_type_decoder_f PedestrianUE_decode_xer; +xer_type_encoder_f PedestrianUE_encode_xer; +per_type_decoder_f PedestrianUE_decode_uper; +per_type_encoder_f PedestrianUE_encode_uper; +per_type_decoder_f PedestrianUE_decode_aper; +per_type_encoder_f PedestrianUE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PedestrianUE_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.c new file mode 100644 index 0000000..e8a49fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Port-Number.h" + +int +Port_Number_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Port_Number_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Port_Number_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Port_Number = { + "Port-Number", + "Port-Number", + &asn_OP_OCTET_STRING, + asn_DEF_Port_Number_tags_1, + sizeof(asn_DEF_Port_Number_tags_1) + /sizeof(asn_DEF_Port_Number_tags_1[0]), /* 1 */ + asn_DEF_Port_Number_tags_1, /* Same as above */ + sizeof(asn_DEF_Port_Number_tags_1) + /sizeof(asn_DEF_Port_Number_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Port_Number_constr_1, Port_Number_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.h new file mode 100644 index 0000000..39fe801 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Port-Number.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Port_Number_H_ +#define _Port_Number_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Port-Number */ +typedef OCTET_STRING_t Port_Number_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Port_Number_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Port_Number; +asn_struct_free_f Port_Number_free; +asn_struct_print_f Port_Number_print; +asn_constr_check_f Port_Number_constraint; +ber_type_decoder_f Port_Number_decode_ber; +der_type_encoder_f Port_Number_encode_der; +xer_type_decoder_f Port_Number_decode_xer; +xer_type_encoder_f Port_Number_encode_xer; +per_type_decoder_f Port_Number_decode_uper; +per_type_encoder_f Port_Number_encode_uper; +per_type_decoder_f Port_Number_decode_aper; +per_type_encoder_f Port_Number_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Port_Number_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.c new file mode 100644 index 0000000..16ac6af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Pre-emptionCapability.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Pre_emptionCapability_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Pre_emptionCapability_value2enum_1[] = { + { 0, 29, "shall-not-trigger-pre-emption" }, + { 1, 23, "may-trigger-pre-emption" } +}; +static const unsigned int asn_MAP_Pre_emptionCapability_enum2value_1[] = { + 1, /* may-trigger-pre-emption(1) */ + 0 /* shall-not-trigger-pre-emption(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Pre_emptionCapability_specs_1 = { + asn_MAP_Pre_emptionCapability_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Pre_emptionCapability_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Pre_emptionCapability_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Pre_emptionCapability = { + "Pre-emptionCapability", + "Pre-emptionCapability", + &asn_OP_NativeEnumerated, + asn_DEF_Pre_emptionCapability_tags_1, + sizeof(asn_DEF_Pre_emptionCapability_tags_1) + /sizeof(asn_DEF_Pre_emptionCapability_tags_1[0]), /* 1 */ + asn_DEF_Pre_emptionCapability_tags_1, /* Same as above */ + sizeof(asn_DEF_Pre_emptionCapability_tags_1) + /sizeof(asn_DEF_Pre_emptionCapability_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Pre_emptionCapability_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Pre_emptionCapability_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.h new file mode 100644 index 0000000..798eb21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionCapability.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Pre_emptionCapability_H_ +#define _Pre_emptionCapability_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Pre_emptionCapability { + Pre_emptionCapability_shall_not_trigger_pre_emption = 0, + Pre_emptionCapability_may_trigger_pre_emption = 1 +} e_Pre_emptionCapability; + +/* Pre-emptionCapability */ +typedef long Pre_emptionCapability_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Pre_emptionCapability_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Pre_emptionCapability; +extern const asn_INTEGER_specifics_t asn_SPC_Pre_emptionCapability_specs_1; +asn_struct_free_f Pre_emptionCapability_free; +asn_struct_print_f Pre_emptionCapability_print; +asn_constr_check_f Pre_emptionCapability_constraint; +ber_type_decoder_f Pre_emptionCapability_decode_ber; +der_type_encoder_f Pre_emptionCapability_encode_der; +xer_type_decoder_f Pre_emptionCapability_decode_xer; +xer_type_encoder_f Pre_emptionCapability_encode_xer; +per_type_decoder_f Pre_emptionCapability_decode_uper; +per_type_encoder_f Pre_emptionCapability_encode_uper; +per_type_decoder_f Pre_emptionCapability_decode_aper; +per_type_encoder_f Pre_emptionCapability_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Pre_emptionCapability_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.c new file mode 100644 index 0000000..2b94826 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Pre-emptionVulnerability.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Pre_emptionVulnerability_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Pre_emptionVulnerability_value2enum_1[] = { + { 0, 16, "not-pre-emptable" }, + { 1, 12, "pre-emptable" } +}; +static const unsigned int asn_MAP_Pre_emptionVulnerability_enum2value_1[] = { + 0, /* not-pre-emptable(0) */ + 1 /* pre-emptable(1) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Pre_emptionVulnerability_specs_1 = { + asn_MAP_Pre_emptionVulnerability_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Pre_emptionVulnerability_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Pre_emptionVulnerability_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Pre_emptionVulnerability = { + "Pre-emptionVulnerability", + "Pre-emptionVulnerability", + &asn_OP_NativeEnumerated, + asn_DEF_Pre_emptionVulnerability_tags_1, + sizeof(asn_DEF_Pre_emptionVulnerability_tags_1) + /sizeof(asn_DEF_Pre_emptionVulnerability_tags_1[0]), /* 1 */ + asn_DEF_Pre_emptionVulnerability_tags_1, /* Same as above */ + sizeof(asn_DEF_Pre_emptionVulnerability_tags_1) + /sizeof(asn_DEF_Pre_emptionVulnerability_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Pre_emptionVulnerability_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Pre_emptionVulnerability_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.h new file mode 100644 index 0000000..94b648a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Pre-emptionVulnerability.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Pre_emptionVulnerability_H_ +#define _Pre_emptionVulnerability_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Pre_emptionVulnerability { + Pre_emptionVulnerability_not_pre_emptable = 0, + Pre_emptionVulnerability_pre_emptable = 1 +} e_Pre_emptionVulnerability; + +/* Pre-emptionVulnerability */ +typedef long Pre_emptionVulnerability_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Pre_emptionVulnerability_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Pre_emptionVulnerability; +extern const asn_INTEGER_specifics_t asn_SPC_Pre_emptionVulnerability_specs_1; +asn_struct_free_f Pre_emptionVulnerability_free; +asn_struct_print_f Pre_emptionVulnerability_print; +asn_constr_check_f Pre_emptionVulnerability_constraint; +ber_type_decoder_f Pre_emptionVulnerability_decode_ber; +der_type_encoder_f Pre_emptionVulnerability_encode_der; +xer_type_decoder_f Pre_emptionVulnerability_decode_xer; +xer_type_encoder_f Pre_emptionVulnerability_encode_xer; +per_type_decoder_f Pre_emptionVulnerability_decode_uper; +per_type_encoder_f Pre_emptionVulnerability_encode_uper; +per_type_decoder_f Pre_emptionVulnerability_decode_aper; +per_type_encoder_f Pre_emptionVulnerability_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Pre_emptionVulnerability_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.c new file mode 100644 index 0000000..bf500d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.h new file mode 100644 index 0000000..283238d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Presence.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.c new file mode 100644 index 0000000..065bc8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.c @@ -0,0 +1,148 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.h new file mode 100644 index 0000000..a8dd2a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrintableString.h @@ -0,0 +1,55 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.c new file mode 100644 index 0000000..aa0d47c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PriorityLevel.h" + +int +PriorityLevel_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PriorityLevel_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PriorityLevel_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PriorityLevel = { + "PriorityLevel", + "PriorityLevel", + &asn_OP_NativeInteger, + asn_DEF_PriorityLevel_tags_1, + sizeof(asn_DEF_PriorityLevel_tags_1) + /sizeof(asn_DEF_PriorityLevel_tags_1[0]), /* 1 */ + asn_DEF_PriorityLevel_tags_1, /* Same as above */ + sizeof(asn_DEF_PriorityLevel_tags_1) + /sizeof(asn_DEF_PriorityLevel_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PriorityLevel_constr_1, PriorityLevel_constraint }, + 0, 0, /* Defined elsewhere */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.h new file mode 100644 index 0000000..70f6c58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PriorityLevel.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PriorityLevel_H_ +#define _PriorityLevel_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PriorityLevel { + PriorityLevel_spare = 0, + PriorityLevel_highest = 1, + PriorityLevel_lowest = 14, + PriorityLevel_no_priority = 15 +} e_PriorityLevel; + +/* PriorityLevel */ +typedef long PriorityLevel_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PriorityLevel_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PriorityLevel; +asn_struct_free_f PriorityLevel_free; +asn_struct_print_f PriorityLevel_print; +asn_constr_check_f PriorityLevel_constraint; +ber_type_decoder_f PriorityLevel_decode_ber; +der_type_encoder_f PriorityLevel_encode_der; +xer_type_decoder_f PriorityLevel_decode_xer; +xer_type_encoder_f PriorityLevel_encode_xer; +per_type_decoder_f PriorityLevel_decode_uper; +per_type_encoder_f PriorityLevel_encode_uper; +per_type_decoder_f PriorityLevel_decode_aper; +per_type_encoder_f PriorityLevel_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PriorityLevel_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.c new file mode 100644 index 0000000..2323d10 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PrivateIE-Container.h" + +#include "PrivateIE-Field.h" +asn_per_constraints_t asn_PER_type_PrivateIE_Container_186P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PrivateIE_Container_186P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PrivateMessage_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_PrivateIE_Container_186P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_PrivateIE_Container_186P0_specs_1 = { + sizeof(struct PrivateIE_Container_186P0), + offsetof(struct PrivateIE_Container_186P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PrivateIE_Container_186P0 = { + "PrivateIE-Container", + "PrivateIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_PrivateIE_Container_186P0_tags_1, + sizeof(asn_DEF_PrivateIE_Container_186P0_tags_1) + /sizeof(asn_DEF_PrivateIE_Container_186P0_tags_1[0]), /* 1 */ + asn_DEF_PrivateIE_Container_186P0_tags_1, /* Same as above */ + sizeof(asn_DEF_PrivateIE_Container_186P0_tags_1) + /sizeof(asn_DEF_PrivateIE_Container_186P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PrivateIE_Container_186P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_PrivateIE_Container_186P0_1, + 1, /* Single element */ + &asn_SPC_PrivateIE_Container_186P0_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.h new file mode 100644 index 0000000..eb393f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Container.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PrivateIE_Container_H_ +#define _PrivateIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PrivateMessage_IEs; + +/* PrivateIE-Container */ +typedef struct PrivateIE_Container_186P0 { + A_SEQUENCE_OF(struct PrivateMessage_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PrivateIE_Container_186P0_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PrivateIE_Container_186P0; +extern asn_SET_OF_specifics_t asn_SPC_PrivateIE_Container_186P0_specs_1; +extern asn_TYPE_member_t asn_MBR_PrivateIE_Container_186P0_1[1]; +extern asn_per_constraints_t asn_PER_type_PrivateIE_Container_186P0_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PrivateIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.c new file mode 100644 index 0000000..60c7f79 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.c @@ -0,0 +1,184 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PrivateIE-Field.h" + +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct PrivateMessage_IEs__value), + offsetof(struct PrivateMessage_IEs__value, _asn_ctx), + offsetof(struct PrivateMessage_IEs__value, present), + sizeof(((struct PrivateMessage_IEs__value *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_PrivateMessage_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PrivateMessage_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PrivateIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct PrivateMessage_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct PrivateMessage_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + 0, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_PrivateMessage_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PrivateMessage_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PrivateMessage_IEs_specs_1 = { + sizeof(struct PrivateMessage_IEs), + offsetof(struct PrivateMessage_IEs, _asn_ctx), + asn_MAP_PrivateMessage_IEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PrivateMessage_IEs = { + "PrivateMessage-IEs", + "PrivateMessage-IEs", + &asn_OP_SEQUENCE, + asn_DEF_PrivateMessage_IEs_tags_1, + sizeof(asn_DEF_PrivateMessage_IEs_tags_1) + /sizeof(asn_DEF_PrivateMessage_IEs_tags_1[0]), /* 1 */ + asn_DEF_PrivateMessage_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_PrivateMessage_IEs_tags_1) + /sizeof(asn_DEF_PrivateMessage_IEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PrivateMessage_IEs_1, + 3, /* Elements count */ + &asn_SPC_PrivateMessage_IEs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.h new file mode 100644 index 0000000..474cdc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-Field.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PrivateIE_Field_H_ +#define _PrivateIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PrivateIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PrivateMessage_IEs__value_PR { + PrivateMessage_IEs__value_PR_NOTHING /* No components present */ + +} PrivateMessage_IEs__value_PR; + +/* PrivateIE-Field */ +typedef struct PrivateMessage_IEs { + PrivateIE_ID_t id; + Criticality_t criticality; + struct PrivateMessage_IEs__value { + PrivateMessage_IEs__value_PR present; + union PrivateMessage_IEs__value_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PrivateMessage_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PrivateMessage_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_PrivateMessage_IEs_specs_1; +extern asn_TYPE_member_t asn_MBR_PrivateMessage_IEs_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PrivateIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.c new file mode 100644 index 0000000..824cd6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.c @@ -0,0 +1,110 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PrivateIE-ID.h" + +static int +memb_local_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_local_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_PrivateIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PrivateIE_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PrivateIE_ID, choice.local), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_local_constr_2, memb_local_constraint_1 }, + 0, 0, /* No default value */ + "local" + }, + { ATF_NOFLAGS, 0, offsetof(struct PrivateIE_ID, choice.global), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OBJECT_IDENTIFIER, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PrivateIE_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* local */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global */ +}; +asn_CHOICE_specifics_t asn_SPC_PrivateIE_ID_specs_1 = { + sizeof(struct PrivateIE_ID), + offsetof(struct PrivateIE_ID, _asn_ctx), + offsetof(struct PrivateIE_ID, present), + sizeof(((struct PrivateIE_ID *)0)->present), + asn_MAP_PrivateIE_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PrivateIE_ID = { + "PrivateIE-ID", + "PrivateIE-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_PrivateIE_ID_constr_1, CHOICE_constraint }, + asn_MBR_PrivateIE_ID_1, + 2, /* Elements count */ + &asn_SPC_PrivateIE_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.h new file mode 100644 index 0000000..50a6fd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateIE-ID.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PrivateIE_ID_H_ +#define _PrivateIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "OBJECT_IDENTIFIER.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PrivateIE_ID_PR { + PrivateIE_ID_PR_NOTHING, /* No components present */ + PrivateIE_ID_PR_local, + PrivateIE_ID_PR_global +} PrivateIE_ID_PR; + +/* PrivateIE-ID */ +typedef struct PrivateIE_ID { + PrivateIE_ID_PR present; + union PrivateIE_ID_u { + long local; + OBJECT_IDENTIFIER_t global; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PrivateIE_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PrivateIE_ID; +extern asn_CHOICE_specifics_t asn_SPC_PrivateIE_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_PrivateIE_ID_1[2]; +extern asn_per_constraints_t asn_PER_type_PrivateIE_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PrivateIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.c new file mode 100644 index 0000000..f6fc704 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "PrivateMessage.h" + +static asn_TYPE_member_t asn_MBR_PrivateMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PrivateMessage, privateIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrivateIE_Container_186P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "privateIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_PrivateMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PrivateMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* privateIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PrivateMessage_specs_1 = { + sizeof(struct PrivateMessage), + offsetof(struct PrivateMessage, _asn_ctx), + asn_MAP_PrivateMessage_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PrivateMessage = { + "PrivateMessage", + "PrivateMessage", + &asn_OP_SEQUENCE, + asn_DEF_PrivateMessage_tags_1, + sizeof(asn_DEF_PrivateMessage_tags_1) + /sizeof(asn_DEF_PrivateMessage_tags_1[0]), /* 1 */ + asn_DEF_PrivateMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_PrivateMessage_tags_1) + /sizeof(asn_DEF_PrivateMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PrivateMessage_1, + 1, /* Elements count */ + &asn_SPC_PrivateMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.h new file mode 100644 index 0000000..1f3ee5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/PrivateMessage.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _PrivateMessage_H_ +#define _PrivateMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PrivateIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PrivateMessage */ +typedef struct PrivateMessage { + PrivateIE_Container_186P0_t privateIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PrivateMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PrivateMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _PrivateMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.c new file mode 100644 index 0000000..bbebc77 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProSeAuthorized.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ProSeAuthorized_1[] = { + { ATF_POINTER, 3, offsetof(struct ProSeAuthorized, proSeDirectDiscovery), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProSeDirectDiscovery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "proSeDirectDiscovery" + }, + { ATF_POINTER, 2, offsetof(struct ProSeAuthorized, proSeDirectCommunication), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProSeDirectCommunication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "proSeDirectCommunication" + }, + { ATF_POINTER, 1, offsetof(struct ProSeAuthorized, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P179, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ProSeAuthorized_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ProSeAuthorized_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProSeAuthorized_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* proSeDirectDiscovery */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* proSeDirectCommunication */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProSeAuthorized_specs_1 = { + sizeof(struct ProSeAuthorized), + offsetof(struct ProSeAuthorized, _asn_ctx), + asn_MAP_ProSeAuthorized_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ProSeAuthorized_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProSeAuthorized = { + "ProSeAuthorized", + "ProSeAuthorized", + &asn_OP_SEQUENCE, + asn_DEF_ProSeAuthorized_tags_1, + sizeof(asn_DEF_ProSeAuthorized_tags_1) + /sizeof(asn_DEF_ProSeAuthorized_tags_1[0]), /* 1 */ + asn_DEF_ProSeAuthorized_tags_1, /* Same as above */ + sizeof(asn_DEF_ProSeAuthorized_tags_1) + /sizeof(asn_DEF_ProSeAuthorized_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProSeAuthorized_1, + 3, /* Elements count */ + &asn_SPC_ProSeAuthorized_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.h new file mode 100644 index 0000000..0a36579 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeAuthorized.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProSeAuthorized_H_ +#define _ProSeAuthorized_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProSeDirectDiscovery.h" +#include "ProSeDirectCommunication.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ProSeAuthorized */ +typedef struct ProSeAuthorized { + ProSeDirectDiscovery_t *proSeDirectDiscovery; /* OPTIONAL */ + ProSeDirectCommunication_t *proSeDirectCommunication; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProSeAuthorized_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProSeAuthorized; +extern asn_SEQUENCE_specifics_t asn_SPC_ProSeAuthorized_specs_1; +extern asn_TYPE_member_t asn_MBR_ProSeAuthorized_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProSeAuthorized_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.c new file mode 100644 index 0000000..7eba5a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProSeDirectCommunication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProSeDirectCommunication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ProSeDirectCommunication_value2enum_1[] = { + { 0, 10, "authorized" }, + { 1, 14, "not-authorized" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ProSeDirectCommunication_enum2value_1[] = { + 0, /* authorized(0) */ + 1 /* not-authorized(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ProSeDirectCommunication_specs_1 = { + asn_MAP_ProSeDirectCommunication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ProSeDirectCommunication_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ProSeDirectCommunication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProSeDirectCommunication = { + "ProSeDirectCommunication", + "ProSeDirectCommunication", + &asn_OP_NativeEnumerated, + asn_DEF_ProSeDirectCommunication_tags_1, + sizeof(asn_DEF_ProSeDirectCommunication_tags_1) + /sizeof(asn_DEF_ProSeDirectCommunication_tags_1[0]), /* 1 */ + asn_DEF_ProSeDirectCommunication_tags_1, /* Same as above */ + sizeof(asn_DEF_ProSeDirectCommunication_tags_1) + /sizeof(asn_DEF_ProSeDirectCommunication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProSeDirectCommunication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ProSeDirectCommunication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.h new file mode 100644 index 0000000..5528268 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectCommunication.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProSeDirectCommunication_H_ +#define _ProSeDirectCommunication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ProSeDirectCommunication { + ProSeDirectCommunication_authorized = 0, + ProSeDirectCommunication_not_authorized = 1 + /* + * Enumeration is extensible + */ +} e_ProSeDirectCommunication; + +/* ProSeDirectCommunication */ +typedef long ProSeDirectCommunication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProSeDirectCommunication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProSeDirectCommunication; +extern const asn_INTEGER_specifics_t asn_SPC_ProSeDirectCommunication_specs_1; +asn_struct_free_f ProSeDirectCommunication_free; +asn_struct_print_f ProSeDirectCommunication_print; +asn_constr_check_f ProSeDirectCommunication_constraint; +ber_type_decoder_f ProSeDirectCommunication_decode_ber; +der_type_encoder_f ProSeDirectCommunication_encode_der; +xer_type_decoder_f ProSeDirectCommunication_decode_xer; +xer_type_encoder_f ProSeDirectCommunication_encode_xer; +per_type_decoder_f ProSeDirectCommunication_decode_uper; +per_type_encoder_f ProSeDirectCommunication_encode_uper; +per_type_decoder_f ProSeDirectCommunication_decode_aper; +per_type_encoder_f ProSeDirectCommunication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProSeDirectCommunication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.c new file mode 100644 index 0000000..df2f637 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProSeDirectDiscovery.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProSeDirectDiscovery_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ProSeDirectDiscovery_value2enum_1[] = { + { 0, 10, "authorized" }, + { 1, 14, "not-authorized" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ProSeDirectDiscovery_enum2value_1[] = { + 0, /* authorized(0) */ + 1 /* not-authorized(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ProSeDirectDiscovery_specs_1 = { + asn_MAP_ProSeDirectDiscovery_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ProSeDirectDiscovery_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ProSeDirectDiscovery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProSeDirectDiscovery = { + "ProSeDirectDiscovery", + "ProSeDirectDiscovery", + &asn_OP_NativeEnumerated, + asn_DEF_ProSeDirectDiscovery_tags_1, + sizeof(asn_DEF_ProSeDirectDiscovery_tags_1) + /sizeof(asn_DEF_ProSeDirectDiscovery_tags_1[0]), /* 1 */ + asn_DEF_ProSeDirectDiscovery_tags_1, /* Same as above */ + sizeof(asn_DEF_ProSeDirectDiscovery_tags_1) + /sizeof(asn_DEF_ProSeDirectDiscovery_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProSeDirectDiscovery_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ProSeDirectDiscovery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.h new file mode 100644 index 0000000..6fc10b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeDirectDiscovery.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProSeDirectDiscovery_H_ +#define _ProSeDirectDiscovery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ProSeDirectDiscovery { + ProSeDirectDiscovery_authorized = 0, + ProSeDirectDiscovery_not_authorized = 1 + /* + * Enumeration is extensible + */ +} e_ProSeDirectDiscovery; + +/* ProSeDirectDiscovery */ +typedef long ProSeDirectDiscovery_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProSeDirectDiscovery_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProSeDirectDiscovery; +extern const asn_INTEGER_specifics_t asn_SPC_ProSeDirectDiscovery_specs_1; +asn_struct_free_f ProSeDirectDiscovery_free; +asn_struct_print_f ProSeDirectDiscovery_print; +asn_constr_check_f ProSeDirectDiscovery_constraint; +ber_type_decoder_f ProSeDirectDiscovery_decode_ber; +der_type_encoder_f ProSeDirectDiscovery_encode_der; +xer_type_decoder_f ProSeDirectDiscovery_decode_xer; +xer_type_encoder_f ProSeDirectDiscovery_encode_xer; +per_type_decoder_f ProSeDirectDiscovery_decode_uper; +per_type_encoder_f ProSeDirectDiscovery_encode_uper; +per_type_decoder_f ProSeDirectDiscovery_decode_aper; +per_type_encoder_f ProSeDirectDiscovery_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProSeDirectDiscovery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c new file mode 100644 index 0000000..d19fcb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProSeUEtoNetworkRelaying.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProSeUEtoNetworkRelaying_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ProSeUEtoNetworkRelaying_value2enum_1[] = { + { 0, 10, "authorized" }, + { 1, 14, "not-authorized" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ProSeUEtoNetworkRelaying_enum2value_1[] = { + 0, /* authorized(0) */ + 1 /* not-authorized(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ProSeUEtoNetworkRelaying_specs_1 = { + asn_MAP_ProSeUEtoNetworkRelaying_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ProSeUEtoNetworkRelaying_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ProSeUEtoNetworkRelaying_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProSeUEtoNetworkRelaying = { + "ProSeUEtoNetworkRelaying", + "ProSeUEtoNetworkRelaying", + &asn_OP_NativeEnumerated, + asn_DEF_ProSeUEtoNetworkRelaying_tags_1, + sizeof(asn_DEF_ProSeUEtoNetworkRelaying_tags_1) + /sizeof(asn_DEF_ProSeUEtoNetworkRelaying_tags_1[0]), /* 1 */ + asn_DEF_ProSeUEtoNetworkRelaying_tags_1, /* Same as above */ + sizeof(asn_DEF_ProSeUEtoNetworkRelaying_tags_1) + /sizeof(asn_DEF_ProSeUEtoNetworkRelaying_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProSeUEtoNetworkRelaying_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ProSeUEtoNetworkRelaying_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h new file mode 100644 index 0000000..d8c8c99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProSeUEtoNetworkRelaying.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProSeUEtoNetworkRelaying_H_ +#define _ProSeUEtoNetworkRelaying_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ProSeUEtoNetworkRelaying { + ProSeUEtoNetworkRelaying_authorized = 0, + ProSeUEtoNetworkRelaying_not_authorized = 1 + /* + * Enumeration is extensible + */ +} e_ProSeUEtoNetworkRelaying; + +/* ProSeUEtoNetworkRelaying */ +typedef long ProSeUEtoNetworkRelaying_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProSeUEtoNetworkRelaying_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProSeUEtoNetworkRelaying; +extern const asn_INTEGER_specifics_t asn_SPC_ProSeUEtoNetworkRelaying_specs_1; +asn_struct_free_f ProSeUEtoNetworkRelaying_free; +asn_struct_print_f ProSeUEtoNetworkRelaying_print; +asn_constr_check_f ProSeUEtoNetworkRelaying_constraint; +ber_type_decoder_f ProSeUEtoNetworkRelaying_decode_ber; +der_type_encoder_f ProSeUEtoNetworkRelaying_encode_der; +xer_type_decoder_f ProSeUEtoNetworkRelaying_decode_xer; +xer_type_encoder_f ProSeUEtoNetworkRelaying_encode_xer; +per_type_decoder_f ProSeUEtoNetworkRelaying_decode_uper; +per_type_encoder_f ProSeUEtoNetworkRelaying_encode_uper; +per_type_decoder_f ProSeUEtoNetworkRelaying_decode_aper; +per_type_encoder_f ProSeUEtoNetworkRelaying_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProSeUEtoNetworkRelaying_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..eaa0aa3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..63a7c81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProcedureCode.h @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +#define ProcedureCode_id_ricSubscription ((ProcedureCode_t)201) +#define ProcedureCode_id_ricSubscriptionDelete ((ProcedureCode_t)202) +#define ProcedureCode_id_ricServiceUpdate ((ProcedureCode_t)203) +#define ProcedureCode_id_ricControl ((ProcedureCode_t)204) +#define ProcedureCode_id_ricIndication ((ProcedureCode_t)205) +#define ProcedureCode_id_ricServiceQuery ((ProcedureCode_t)206) +#define ProcedureCode_id_handoverPreparation ((ProcedureCode_t)0) +#define ProcedureCode_id_handoverCancel ((ProcedureCode_t)1) +#define ProcedureCode_id_loadIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_errorIndication ((ProcedureCode_t)3) +#define ProcedureCode_id_snStatusTransfer ((ProcedureCode_t)4) +#define ProcedureCode_id_uEContextRelease ((ProcedureCode_t)5) +#define ProcedureCode_id_x2Setup ((ProcedureCode_t)6) +#define ProcedureCode_id_reset ((ProcedureCode_t)7) +#define ProcedureCode_id_eNBConfigurationUpdate ((ProcedureCode_t)8) +#define ProcedureCode_id_resourceStatusReportingInitiation ((ProcedureCode_t)9) +#define ProcedureCode_id_resourceStatusReporting ((ProcedureCode_t)10) +#define ProcedureCode_id_privateMessage ((ProcedureCode_t)11) +#define ProcedureCode_id_mobilitySettingsChange ((ProcedureCode_t)12) +#define ProcedureCode_id_rLFIndication ((ProcedureCode_t)13) +#define ProcedureCode_id_handoverReport ((ProcedureCode_t)14) +#define ProcedureCode_id_cellActivation ((ProcedureCode_t)15) +#define ProcedureCode_id_x2Release ((ProcedureCode_t)16) +#define ProcedureCode_id_x2APMessageTransfer ((ProcedureCode_t)17) +#define ProcedureCode_id_x2Removal ((ProcedureCode_t)18) +#define ProcedureCode_id_seNBAdditionPreparation ((ProcedureCode_t)19) +#define ProcedureCode_id_seNBReconfigurationCompletion ((ProcedureCode_t)20) +#define ProcedureCode_id_meNBinitiatedSeNBModificationPreparation ((ProcedureCode_t)21) +#define ProcedureCode_id_seNBinitiatedSeNBModification ((ProcedureCode_t)22) +#define ProcedureCode_id_meNBinitiatedSeNBRelease ((ProcedureCode_t)23) +#define ProcedureCode_id_seNBinitiatedSeNBRelease ((ProcedureCode_t)24) +#define ProcedureCode_id_seNBCounterCheck ((ProcedureCode_t)25) +#define ProcedureCode_id_retrieveUEContext ((ProcedureCode_t)26) +#define ProcedureCode_id_sgNBAdditionPreparation ((ProcedureCode_t)27) +#define ProcedureCode_id_sgNBReconfigurationCompletion ((ProcedureCode_t)28) +#define ProcedureCode_id_meNBinitiatedSgNBModificationPreparation ((ProcedureCode_t)29) +#define ProcedureCode_id_sgNBinitiatedSgNBModification ((ProcedureCode_t)30) +#define ProcedureCode_id_meNBinitiatedSgNBRelease ((ProcedureCode_t)31) +#define ProcedureCode_id_sgNBinitiatedSgNBRelease ((ProcedureCode_t)32) +#define ProcedureCode_id_sgNBCounterCheck ((ProcedureCode_t)33) +#define ProcedureCode_id_sgNBChange ((ProcedureCode_t)34) +#define ProcedureCode_id_rRCTransfer ((ProcedureCode_t)35) +#define ProcedureCode_id_endcX2Setup ((ProcedureCode_t)36) +#define ProcedureCode_id_endcConfigurationUpdate ((ProcedureCode_t)37) +#define ProcedureCode_id_secondaryRATDataUsageReport ((ProcedureCode_t)38) +#define ProcedureCode_id_endcCellActivation ((ProcedureCode_t)39) +#define ProcedureCode_id_endcPartialReset ((ProcedureCode_t)40) +#define ProcedureCode_id_eUTRANRCellResourceCoordination ((ProcedureCode_t)41) +#define ProcedureCode_id_SgNBActivityNotification ((ProcedureCode_t)42) +#define ProcedureCode_id_endcX2Removal ((ProcedureCode_t)43) +#define ProcedureCode_id_dataForwardingAddressIndication ((ProcedureCode_t)44) +#define ProcedureCode_id_gNBStatusIndication ((ProcedureCode_t)45) +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c new file mode 100644 index 0000000..15f23c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.c @@ -0,0 +1,201 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtectedEUTRAResourceIndication.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_activationSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_mBSFNControlRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCCHRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_activationSFN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_mBSFNControlRegionLength_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pDCCHRegionLength_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (1..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtectedEUTRAResourceIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedEUTRAResourceIndication, activationSFN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_activationSFN_constr_2, memb_activationSFN_constraint_1 }, + 0, 0, /* No default value */ + "activationSFN" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedEUTRAResourceIndication, protectedResourceList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtectedResourceList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protectedResourceList" + }, + { ATF_POINTER, 3, offsetof(struct ProtectedEUTRAResourceIndication, mBSFNControlRegionLength), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_mBSFNControlRegionLength_constr_4, memb_mBSFNControlRegionLength_constraint_1 }, + 0, 0, /* No default value */ + "mBSFNControlRegionLength" + }, + { ATF_POINTER, 2, offsetof(struct ProtectedEUTRAResourceIndication, pDCCHRegionLength), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_pDCCHRegionLength_constr_5, memb_pDCCHRegionLength_constraint_1 }, + 0, 0, /* No default value */ + "pDCCHRegionLength" + }, + { ATF_POINTER, 1, offsetof(struct ProtectedEUTRAResourceIndication, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P180, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ProtectedEUTRAResourceIndication_oms_1[] = { 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_ProtectedEUTRAResourceIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedEUTRAResourceIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* activationSFN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* protectedResourceList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mBSFNControlRegionLength */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pDCCHRegionLength */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedEUTRAResourceIndication_specs_1 = { + sizeof(struct ProtectedEUTRAResourceIndication), + offsetof(struct ProtectedEUTRAResourceIndication, _asn_ctx), + asn_MAP_ProtectedEUTRAResourceIndication_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_ProtectedEUTRAResourceIndication_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedEUTRAResourceIndication = { + "ProtectedEUTRAResourceIndication", + "ProtectedEUTRAResourceIndication", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedEUTRAResourceIndication_tags_1, + sizeof(asn_DEF_ProtectedEUTRAResourceIndication_tags_1) + /sizeof(asn_DEF_ProtectedEUTRAResourceIndication_tags_1[0]), /* 1 */ + asn_DEF_ProtectedEUTRAResourceIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtectedEUTRAResourceIndication_tags_1) + /sizeof(asn_DEF_ProtectedEUTRAResourceIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedEUTRAResourceIndication_1, + 5, /* Elements count */ + &asn_SPC_ProtectedEUTRAResourceIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h new file mode 100644 index 0000000..f3679cc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedEUTRAResourceIndication.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtectedEUTRAResourceIndication_H_ +#define _ProtectedEUTRAResourceIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "ProtectedResourceList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ProtectedEUTRAResourceIndication */ +typedef struct ProtectedEUTRAResourceIndication { + long activationSFN; + ProtectedResourceList_t protectedResourceList; + long *mBSFNControlRegionLength; /* OPTIONAL */ + long *pDCCHRegionLength; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedEUTRAResourceIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtectedEUTRAResourceIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedEUTRAResourceIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtectedEUTRAResourceIndication_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtectedEUTRAResourceIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c new file mode 100644 index 0000000..4eb1295 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.c @@ -0,0 +1,151 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtectedFootprintTimePattern.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_protectedFootprintTimePeriodicity_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 320)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_protectedFootprintStartTime_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_protectedFootprintTimePeriodicity_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 9, 9, 1, 320 } /* (1..320,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_protectedFootprintStartTime_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 1, 20 } /* (1..20,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtectedFootprintTimePattern_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedFootprintTimePattern, protectedFootprintTimePeriodicity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_protectedFootprintTimePeriodicity_constr_2, memb_protectedFootprintTimePeriodicity_constraint_1 }, + 0, 0, /* No default value */ + "protectedFootprintTimePeriodicity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedFootprintTimePattern, protectedFootprintStartTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_protectedFootprintStartTime_constr_3, memb_protectedFootprintStartTime_constraint_1 }, + 0, 0, /* No default value */ + "protectedFootprintStartTime" + }, + { ATF_POINTER, 1, offsetof(struct ProtectedFootprintTimePattern, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P181, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ProtectedFootprintTimePattern_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ProtectedFootprintTimePattern_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedFootprintTimePattern_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protectedFootprintTimePeriodicity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* protectedFootprintStartTime */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedFootprintTimePattern_specs_1 = { + sizeof(struct ProtectedFootprintTimePattern), + offsetof(struct ProtectedFootprintTimePattern, _asn_ctx), + asn_MAP_ProtectedFootprintTimePattern_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ProtectedFootprintTimePattern_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedFootprintTimePattern = { + "ProtectedFootprintTimePattern", + "ProtectedFootprintTimePattern", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedFootprintTimePattern_tags_1, + sizeof(asn_DEF_ProtectedFootprintTimePattern_tags_1) + /sizeof(asn_DEF_ProtectedFootprintTimePattern_tags_1[0]), /* 1 */ + asn_DEF_ProtectedFootprintTimePattern_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtectedFootprintTimePattern_tags_1) + /sizeof(asn_DEF_ProtectedFootprintTimePattern_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedFootprintTimePattern_1, + 3, /* Elements count */ + &asn_SPC_ProtectedFootprintTimePattern_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h new file mode 100644 index 0000000..447cc25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedFootprintTimePattern.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtectedFootprintTimePattern_H_ +#define _ProtectedFootprintTimePattern_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ProtectedFootprintTimePattern */ +typedef struct ProtectedFootprintTimePattern { + long protectedFootprintTimePeriodicity; + long protectedFootprintStartTime; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedFootprintTimePattern_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtectedFootprintTimePattern; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedFootprintTimePattern_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtectedFootprintTimePattern_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtectedFootprintTimePattern_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.c new file mode 100644 index 0000000..4d6a644 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.c @@ -0,0 +1,183 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtectedResourceList-Item.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_intraPRBProtectedResourceFootprint_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 84)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_protectedFootprintFrequencyPattern_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 110)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_intraPRBProtectedResourceFootprint_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 84, 84 } /* (SIZE(84..84,...)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_protectedFootprintFrequencyPattern_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 6, 110 } /* (SIZE(6..110,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtectedResourceList_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item, resourceType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ResourceType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "resourceType" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item, intraPRBProtectedResourceFootprint), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_intraPRBProtectedResourceFootprint_constr_3, memb_intraPRBProtectedResourceFootprint_constraint_1 }, + 0, 0, /* No default value */ + "intraPRBProtectedResourceFootprint" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item, protectedFootprintFrequencyPattern), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_protectedFootprintFrequencyPattern_constr_4, memb_protectedFootprintFrequencyPattern_constraint_1 }, + 0, 0, /* No default value */ + "protectedFootprintFrequencyPattern" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item, protectedFootprintTimePattern), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtectedFootprintTimePattern, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protectedFootprintTimePattern" + }, + { ATF_POINTER, 1, offsetof(struct ProtectedResourceList_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P182, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ProtectedResourceList_Item_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_ProtectedResourceList_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedResourceList_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resourceType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* intraPRBProtectedResourceFootprint */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protectedFootprintFrequencyPattern */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protectedFootprintTimePattern */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedResourceList_Item_specs_1 = { + sizeof(struct ProtectedResourceList_Item), + offsetof(struct ProtectedResourceList_Item, _asn_ctx), + asn_MAP_ProtectedResourceList_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_ProtectedResourceList_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList_Item = { + "ProtectedResourceList-Item", + "ProtectedResourceList-Item", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedResourceList_Item_tags_1, + sizeof(asn_DEF_ProtectedResourceList_Item_tags_1) + /sizeof(asn_DEF_ProtectedResourceList_Item_tags_1[0]), /* 1 */ + asn_DEF_ProtectedResourceList_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtectedResourceList_Item_tags_1) + /sizeof(asn_DEF_ProtectedResourceList_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedResourceList_Item_1, + 5, /* Elements count */ + &asn_SPC_ProtectedResourceList_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.h new file mode 100644 index 0000000..7732467 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList-Item.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtectedResourceList_Item_H_ +#define _ProtectedResourceList_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ResourceType.h" +#include "BIT_STRING.h" +#include "ProtectedFootprintTimePattern.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ProtectedResourceList-Item */ +typedef struct ProtectedResourceList_Item { + ResourceType_t resourceType; + BIT_STRING_t intraPRBProtectedResourceFootprint; + BIT_STRING_t protectedFootprintFrequencyPattern; + ProtectedFootprintTimePattern_t protectedFootprintTimePattern; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedResourceList_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedResourceList_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtectedResourceList_Item_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtectedResourceList_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.c new file mode 100644 index 0000000..9521e19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtectedResourceList.h" + +#include "ProtectedResourceList-Item.h" +asn_per_constraints_t asn_PER_type_ProtectedResourceList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtectedResourceList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtectedResourceList_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtectedResourceList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtectedResourceList_specs_1 = { + sizeof(struct ProtectedResourceList), + offsetof(struct ProtectedResourceList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList = { + "ProtectedResourceList", + "ProtectedResourceList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtectedResourceList_tags_1, + sizeof(asn_DEF_ProtectedResourceList_tags_1) + /sizeof(asn_DEF_ProtectedResourceList_tags_1[0]), /* 1 */ + asn_DEF_ProtectedResourceList_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtectedResourceList_tags_1) + /sizeof(asn_DEF_ProtectedResourceList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtectedResourceList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtectedResourceList_1, + 1, /* Single element */ + &asn_SPC_ProtectedResourceList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.h new file mode 100644 index 0000000..7bd9811 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtectedResourceList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtectedResourceList_H_ +#define _ProtectedResourceList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtectedResourceList_Item; + +/* ProtectedResourceList */ +typedef struct ProtectedResourceList { + A_SEQUENCE_OF(struct ProtectedResourceList_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedResourceList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList; +extern asn_SET_OF_specifics_t asn_SPC_ProtectedResourceList_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtectedResourceList_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtectedResourceList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtectedResourceList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.c new file mode 100644 index 0000000..d0a5147 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.c @@ -0,0 +1,8948 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolExtensionContainer.h" + +#include "ProtocolExtensionField.h" +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P20_constr_41 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P21_constr_43 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P22_constr_45 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P23_constr_47 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P24_constr_49 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P25_constr_51 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P26_constr_53 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P27_constr_55 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P28_constr_57 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P29_constr_59 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P30_constr_61 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P31_constr_63 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P32_constr_65 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P33_constr_67 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P34_constr_69 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P35_constr_71 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P36_constr_73 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P37_constr_75 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P38_constr_77 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P39_constr_79 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P40_constr_81 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P41_constr_83 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P42_constr_85 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P43_constr_87 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P44_constr_89 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P45_constr_91 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P46_constr_93 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P47_constr_95 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P48_constr_97 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P49_constr_99 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P50_constr_101 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P51_constr_103 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P52_constr_105 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P53_constr_107 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P54_constr_109 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P55_constr_111 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P56_constr_113 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P57_constr_115 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P58_constr_117 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P59_constr_119 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P60_constr_121 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P61_constr_123 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P62_constr_125 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P63_constr_127 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P64_constr_129 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P65_constr_131 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P66_constr_133 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P67_constr_135 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P68_constr_137 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P69_constr_139 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P70_constr_141 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P71_constr_143 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P72_constr_145 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P73_constr_147 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P74_constr_149 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P75_constr_151 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P76_constr_153 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P77_constr_155 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P78_constr_157 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P79_constr_159 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P80_constr_161 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P81_constr_163 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P82_constr_165 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P83_constr_167 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P84_constr_169 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P85_constr_171 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P86_constr_173 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P87_constr_175 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P88_constr_177 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P89_constr_179 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P90_constr_181 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P91_constr_183 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P92_constr_185 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P93_constr_187 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P94_constr_189 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P95_constr_191 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P96_constr_193 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P97_constr_195 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P98_constr_197 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P99_constr_199 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P100_constr_201 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P101_constr_203 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P102_constr_205 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P103_constr_207 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P104_constr_209 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P105_constr_211 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P106_constr_213 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P107_constr_215 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P108_constr_217 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P109_constr_219 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P110_constr_221 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P111_constr_223 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P112_constr_225 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P113_constr_227 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P114_constr_229 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P115_constr_231 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P116_constr_233 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P117_constr_235 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P118_constr_237 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P119_constr_239 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P120_constr_241 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P121_constr_243 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P122_constr_245 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P123_constr_247 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P124_constr_249 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P125_constr_251 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P126_constr_253 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P127_constr_255 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P128_constr_257 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P129_constr_259 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P130_constr_261 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P131_constr_263 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P132_constr_265 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P133_constr_267 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P134_constr_269 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P135_constr_271 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P136_constr_273 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P137_constr_275 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P138_constr_277 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P139_constr_279 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P140_constr_281 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P141_constr_283 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P142_constr_285 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P143_constr_287 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P144_constr_289 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P145_constr_291 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P146_constr_293 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P147_constr_295 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P148_constr_297 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P149_constr_299 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P150_constr_301 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P151_constr_303 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P152_constr_305 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P153_constr_307 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P154_constr_309 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P155_constr_311 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P156_constr_313 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P157_constr_315 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P158_constr_317 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P159_constr_319 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P160_constr_321 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P161_constr_323 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P162_constr_325 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P163_constr_327 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P164_constr_329 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P165_constr_331 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P166_constr_333 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P167_constr_335 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P168_constr_337 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P169_constr_339 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P170_constr_341 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P171_constr_343 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P172_constr_345 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P173_constr_347 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P174_constr_349 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P175_constr_351 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P176_constr_353 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P177_constr_355 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P178_constr_357 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P179_constr_359 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P180_constr_361 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P181_constr_363 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P182_constr_365 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P183_constr_367 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P184_constr_369 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P185_constr_371 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P186_constr_373 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P187_constr_375 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P188_constr_377 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P189_constr_379 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P190_constr_381 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P191_constr_383 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P192_constr_385 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P193_constr_387 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P194_constr_389 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P195_constr_391 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P196_constr_393 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P197_constr_395 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P198_constr_397 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P199_constr_399 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P200_constr_401 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P201_constr_403 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P202_constr_405 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P203_constr_407 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P204_constr_409 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P205_constr_411 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P206_constr_413 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P207_constr_415 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P208_constr_417 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P209_constr_419 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P210_constr_421 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P211_constr_423 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P212_constr_425 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P213_constr_427 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P214_constr_429 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P215_constr_431 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P216_constr_433 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P217_constr_435 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P218_constr_437 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P219_constr_439 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P220_constr_441 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P221_constr_443 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P222_constr_445 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P0_specs_1 = { + sizeof(struct ProtocolExtensionContainer_170P0), + offsetof(struct ProtocolExtensionContainer_170P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P0 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P0_tags_1, + sizeof(asn_DEF_ProtocolExtensionContainer_170P0_tags_1) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P0_tags_1) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeSetup_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P1_specs_3 = { + sizeof(struct ProtocolExtensionContainer_170P1), + offsetof(struct ProtocolExtensionContainer_170P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P1 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P1_tags_3, + sizeof(asn_DEF_ProtocolExtensionContainer_170P1_tags_3) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P1_tags_3) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P2_specs_5 = { + sizeof(struct ProtocolExtensionContainer_170P2), + offsetof(struct ProtocolExtensionContainer_170P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P2 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P2_tags_5, + sizeof(asn_DEF_ProtocolExtensionContainer_170P2_tags_5) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P2_tags_5) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P3_specs_7 = { + sizeof(struct ProtocolExtensionContainer_170P3), + offsetof(struct ProtocolExtensionContainer_170P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P3 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P3_tags_7, + sizeof(asn_DEF_ProtocolExtensionContainer_170P3_tags_7) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P3_tags_7) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P4_specs_9 = { + sizeof(struct ProtocolExtensionContainer_170P4), + offsetof(struct ProtocolExtensionContainer_170P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P4 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P4_tags_9, + sizeof(asn_DEF_ProtocolExtensionContainer_170P4_tags_9) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P4_tags_9) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P5_specs_11 = { + sizeof(struct ProtocolExtensionContainer_170P5), + offsetof(struct ProtocolExtensionContainer_170P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P5 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P5_tags_11, + sizeof(asn_DEF_ProtocolExtensionContainer_170P5_tags_11) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P5_tags_11) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P6_specs_13 = { + sizeof(struct ProtocolExtensionContainer_170P6), + offsetof(struct ProtocolExtensionContainer_170P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P6 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P6_tags_13, + sizeof(asn_DEF_ProtocolExtensionContainer_170P6_tags_13) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P6_tags_13) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInformation_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P7_specs_15 = { + sizeof(struct ProtocolExtensionContainer_170P7), + offsetof(struct ProtocolExtensionContainer_170P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P7 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P7_tags_15, + sizeof(asn_DEF_ProtocolExtensionContainer_170P7_tags_15) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P7_tags_15) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToModify_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P8_specs_17 = { + sizeof(struct ProtocolExtensionContainer_170P8), + offsetof(struct ProtocolExtensionContainer_170P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P8 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P8_tags_17, + sizeof(asn_DEF_ProtocolExtensionContainer_170P8_tags_17) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P8_tags_17) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellToReport_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P9_specs_19 = { + sizeof(struct ProtocolExtensionContainer_170P9), + offsetof(struct ProtocolExtensionContainer_170P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P9 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P9_tags_19, + sizeof(asn_DEF_ProtocolExtensionContainer_170P9_tags_19) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P9_tags_19) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementInitiationResult_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P10_specs_21 = { + sizeof(struct ProtocolExtensionContainer_170P10), + offsetof(struct ProtocolExtensionContainer_170P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P10 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P10_tags_21, + sizeof(asn_DEF_ProtocolExtensionContainer_170P10_tags_21) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P10_tags_21) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementFailureCause_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P11_specs_23 = { + sizeof(struct ProtocolExtensionContainer_170P11), + offsetof(struct ProtocolExtensionContainer_170P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P11 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P11_tags_23, + sizeof(asn_DEF_ProtocolExtensionContainer_170P11_tags_23) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P11_tags_23) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P12_specs_25 = { + sizeof(struct ProtocolExtensionContainer_170P12), + offsetof(struct ProtocolExtensionContainer_170P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P12 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P12_tags_25, + sizeof(asn_DEF_ProtocolExtensionContainer_170P12_tags_25) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P12_tags_25) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellMeasurementResult_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P13_specs_27 = { + sizeof(struct ProtocolExtensionContainer_170P13), + offsetof(struct ProtocolExtensionContainer_170P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P13 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P13_tags_27, + sizeof(asn_DEF_ProtocolExtensionContainer_170P13_tags_27) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P13_tags_27) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToActivate_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P14_specs_29 = { + sizeof(struct ProtocolExtensionContainer_170P14), + offsetof(struct ProtocolExtensionContainer_170P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P14 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P14_tags_29, + sizeof(asn_DEF_ProtocolExtensionContainer_170P14_tags_29) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P14_tags_29) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedCellList_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P15_specs_31 = { + sizeof(struct ProtocolExtensionContainer_170P15), + offsetof(struct ProtocolExtensionContainer_170P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P15 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P15_tags_31, + sizeof(asn_DEF_ProtocolExtensionContainer_170P15_tags_31) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P15_tags_31) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RNL_Header_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P16_specs_33 = { + sizeof(struct ProtocolExtensionContainer_170P16), + offsetof(struct ProtocolExtensionContainer_170P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P16 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P16_tags_33, + sizeof(asn_DEF_ProtocolExtensionContainer_170P16_tags_33) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P16_tags_33) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P17_specs_35 = { + sizeof(struct ProtocolExtensionContainer_170P17), + offsetof(struct ProtocolExtensionContainer_170P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P17 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P17_tags_35, + sizeof(asn_DEF_ProtocolExtensionContainer_170P17_tags_35) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P17_tags_35) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P18_specs_37 = { + sizeof(struct ProtocolExtensionContainer_170P18), + offsetof(struct ProtocolExtensionContainer_170P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P18 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P18_tags_37, + sizeof(asn_DEF_ProtocolExtensionContainer_170P18_tags_37) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P18_tags_37) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P19_specs_39 = { + sizeof(struct ProtocolExtensionContainer_170P19), + offsetof(struct ProtocolExtensionContainer_170P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P19 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P19_tags_39, + sizeof(asn_DEF_ProtocolExtensionContainer_170P19_tags_39) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P19_tags_39) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P19_specs_39 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P20_41[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P20_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P20_specs_41 = { + sizeof(struct ProtocolExtensionContainer_170P20), + offsetof(struct ProtocolExtensionContainer_170P20, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P20 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P20_tags_41, + sizeof(asn_DEF_ProtocolExtensionContainer_170P20_tags_41) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P20_tags_41[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P20_tags_41, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P20_tags_41) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P20_tags_41[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P20_constr_41, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P20_41, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P20_specs_41 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P21_43[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P21_tags_43[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P21_specs_43 = { + sizeof(struct ProtocolExtensionContainer_170P21), + offsetof(struct ProtocolExtensionContainer_170P21, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P21 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P21_tags_43, + sizeof(asn_DEF_ProtocolExtensionContainer_170P21_tags_43) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P21_tags_43[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P21_tags_43, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P21_tags_43) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P21_tags_43[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P21_constr_43, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P21_43, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P21_specs_43 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P22_45[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P22_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P22_specs_45 = { + sizeof(struct ProtocolExtensionContainer_170P22), + offsetof(struct ProtocolExtensionContainer_170P22, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P22 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P22_tags_45, + sizeof(asn_DEF_ProtocolExtensionContainer_170P22_tags_45) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P22_tags_45[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P22_tags_45, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P22_tags_45) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P22_tags_45[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P22_constr_45, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P22_45, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P22_specs_45 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P23_47[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformationSeNBModReqExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P23_tags_47[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P23_specs_47 = { + sizeof(struct ProtocolExtensionContainer_170P23), + offsetof(struct ProtocolExtensionContainer_170P23, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P23 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P23_tags_47, + sizeof(asn_DEF_ProtocolExtensionContainer_170P23_tags_47) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P23_tags_47[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P23_tags_47, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P23_tags_47) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P23_tags_47[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P23_constr_47, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P23_47, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P23_specs_47 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P24_49[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P24_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P24_specs_49 = { + sizeof(struct ProtocolExtensionContainer_170P24), + offsetof(struct ProtocolExtensionContainer_170P24, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P24 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P24_tags_49, + sizeof(asn_DEF_ProtocolExtensionContainer_170P24_tags_49) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P24_tags_49[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P24_tags_49, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P24_tags_49) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P24_tags_49[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P24_constr_49, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P24_49, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P24_specs_49 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P25_51[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P25_tags_51[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P25_specs_51 = { + sizeof(struct ProtocolExtensionContainer_170P25), + offsetof(struct ProtocolExtensionContainer_170P25, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P25 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P25_tags_51, + sizeof(asn_DEF_ProtocolExtensionContainer_170P25_tags_51) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P25_tags_51[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P25_tags_51, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P25_tags_51) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P25_tags_51[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P25_constr_51, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P25_51, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P25_specs_51 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P26_53[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P26_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P26_specs_53 = { + sizeof(struct ProtocolExtensionContainer_170P26), + offsetof(struct ProtocolExtensionContainer_170P26, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P26 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P26_tags_53, + sizeof(asn_DEF_ProtocolExtensionContainer_170P26_tags_53) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P26_tags_53[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P26_tags_53, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P26_tags_53) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P26_tags_53[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P26_constr_53, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P26_53, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P26_specs_53 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P27_55[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P27_tags_55[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P27_specs_55 = { + sizeof(struct ProtocolExtensionContainer_170P27), + offsetof(struct ProtocolExtensionContainer_170P27, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P27 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P27_tags_55, + sizeof(asn_DEF_ProtocolExtensionContainer_170P27_tags_55) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P27_tags_55[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P27_tags_55, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P27_tags_55) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P27_tags_55[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P27_constr_55, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P27_55, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P27_specs_55 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P28_57[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P28_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P28_specs_57 = { + sizeof(struct ProtocolExtensionContainer_170P28), + offsetof(struct ProtocolExtensionContainer_170P28, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P28 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P28_tags_57, + sizeof(asn_DEF_ProtocolExtensionContainer_170P28_tags_57) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P28_tags_57[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P28_tags_57, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P28_tags_57) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P28_tags_57[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P28_constr_57, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P28_57, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P28_specs_57 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P29_59[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P29_tags_59[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P29_specs_59 = { + sizeof(struct ProtocolExtensionContainer_170P29), + offsetof(struct ProtocolExtensionContainer_170P29, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P29 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P29_tags_59, + sizeof(asn_DEF_ProtocolExtensionContainer_170P29_tags_59) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P29_tags_59[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P29_tags_59, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P29_tags_59) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P29_tags_59[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P29_constr_59, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P29_59, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P29_specs_59 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P30_61[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P30_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P30_specs_61 = { + sizeof(struct ProtocolExtensionContainer_170P30), + offsetof(struct ProtocolExtensionContainer_170P30, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P30 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P30_tags_61, + sizeof(asn_DEF_ProtocolExtensionContainer_170P30_tags_61) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P30_tags_61[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P30_tags_61, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P30_tags_61) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P30_tags_61[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P30_constr_61, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P30_61, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P30_specs_61 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P31_63[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P31_tags_63[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P31_specs_63 = { + sizeof(struct ProtocolExtensionContainer_170P31), + offsetof(struct ProtocolExtensionContainer_170P31, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P31 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P31_tags_63, + sizeof(asn_DEF_ProtocolExtensionContainer_170P31_tags_63) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P31_tags_63[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P31_tags_63, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P31_tags_63) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P31_tags_63[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P31_constr_63, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P31_63, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P31_specs_63 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P32_65[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P32_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P32_specs_65 = { + sizeof(struct ProtocolExtensionContainer_170P32), + offsetof(struct ProtocolExtensionContainer_170P32, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P32 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P32_tags_65, + sizeof(asn_DEF_ProtocolExtensionContainer_170P32_tags_65) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P32_tags_65[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P32_tags_65, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P32_tags_65) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P32_tags_65[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P32_constr_65, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P32_65, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P32_specs_65 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P33_67[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P33_tags_67[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P33_specs_67 = { + sizeof(struct ProtocolExtensionContainer_170P33), + offsetof(struct ProtocolExtensionContainer_170P33, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P33 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P33_tags_67, + sizeof(asn_DEF_ProtocolExtensionContainer_170P33_tags_67) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P33_tags_67[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P33_tags_67, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P33_tags_67) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P33_tags_67[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P33_constr_67, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P33_67, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P33_specs_67 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P34_69[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P34_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P34_specs_69 = { + sizeof(struct ProtocolExtensionContainer_170P34), + offsetof(struct ProtocolExtensionContainer_170P34, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P34 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P34_tags_69, + sizeof(asn_DEF_ProtocolExtensionContainer_170P34_tags_69) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P34_tags_69[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P34_tags_69, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P34_tags_69) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P34_tags_69[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P34_constr_69, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P34_69, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P34_specs_69 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P35_71[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P35_tags_71[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P35_specs_71 = { + sizeof(struct ProtocolExtensionContainer_170P35), + offsetof(struct ProtocolExtensionContainer_170P35, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P35 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P35_tags_71, + sizeof(asn_DEF_ProtocolExtensionContainer_170P35_tags_71) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P35_tags_71[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P35_tags_71, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P35_tags_71) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P35_tags_71[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P35_constr_71, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P35_71, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P35_specs_71 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P36_73[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P36_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P36_specs_73 = { + sizeof(struct ProtocolExtensionContainer_170P36), + offsetof(struct ProtocolExtensionContainer_170P36, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P36 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P36_tags_73, + sizeof(asn_DEF_ProtocolExtensionContainer_170P36_tags_73) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P36_tags_73[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P36_tags_73, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P36_tags_73) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P36_tags_73[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P36_constr_73, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P36_73, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P36_specs_73 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P37_75[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P37_tags_75[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P37_specs_75 = { + sizeof(struct ProtocolExtensionContainer_170P37), + offsetof(struct ProtocolExtensionContainer_170P37, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P37 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P37_tags_75, + sizeof(asn_DEF_ProtocolExtensionContainer_170P37_tags_75) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P37_tags_75[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P37_tags_75, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P37_tags_75) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P37_tags_75[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P37_constr_75, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P37_75, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P37_specs_75 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P38_77[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P38_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P38_specs_77 = { + sizeof(struct ProtocolExtensionContainer_170P38), + offsetof(struct ProtocolExtensionContainer_170P38, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P38 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P38_tags_77, + sizeof(asn_DEF_ProtocolExtensionContainer_170P38_tags_77) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P38_tags_77[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P38_tags_77, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P38_tags_77) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P38_tags_77[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P38_constr_77, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P38_77, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P38_specs_77 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P39_79[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P39_tags_79[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P39_specs_79 = { + sizeof(struct ProtocolExtensionContainer_170P39), + offsetof(struct ProtocolExtensionContainer_170P39, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P39 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P39_tags_79, + sizeof(asn_DEF_ProtocolExtensionContainer_170P39_tags_79) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P39_tags_79[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P39_tags_79, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P39_tags_79) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P39_tags_79[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P39_constr_79, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P39_79, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P39_specs_79 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P40_81[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P40_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P40_specs_81 = { + sizeof(struct ProtocolExtensionContainer_170P40), + offsetof(struct ProtocolExtensionContainer_170P40, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P40 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P40_tags_81, + sizeof(asn_DEF_ProtocolExtensionContainer_170P40_tags_81) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P40_tags_81[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P40_tags_81, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P40_tags_81) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P40_tags_81[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P40_constr_81, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P40_81, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P40_specs_81 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P41_83[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P41_tags_83[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P41_specs_83 = { + sizeof(struct ProtocolExtensionContainer_170P41), + offsetof(struct ProtocolExtensionContainer_170P41, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P41 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P41_tags_83, + sizeof(asn_DEF_ProtocolExtensionContainer_170P41_tags_83) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P41_tags_83[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P41_tags_83, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P41_tags_83) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P41_tags_83[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P41_constr_83, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P41_83, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P41_specs_83 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P42_85[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformationRetrieve_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P42_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P42_specs_85 = { + sizeof(struct ProtocolExtensionContainer_170P42), + offsetof(struct ProtocolExtensionContainer_170P42, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P42 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P42_tags_85, + sizeof(asn_DEF_ProtocolExtensionContainer_170P42_tags_85) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P42_tags_85[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P42_tags_85, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P42_tags_85) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P42_tags_85[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P42_constr_85, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P42_85, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P42_specs_85 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P43_87[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P43_tags_87[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P43_specs_87 = { + sizeof(struct ProtocolExtensionContainer_170P43), + offsetof(struct ProtocolExtensionContainer_170P43, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P43 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P43_tags_87, + sizeof(asn_DEF_ProtocolExtensionContainer_170P43_tags_87) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P43_tags_87[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P43_tags_87, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P43_tags_87) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P43_tags_87[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P43_constr_87, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P43_87, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P43_specs_87 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P44_89[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P44_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P44_specs_89 = { + sizeof(struct ProtocolExtensionContainer_170P44), + offsetof(struct ProtocolExtensionContainer_170P44, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P44 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P44_tags_89, + sizeof(asn_DEF_ProtocolExtensionContainer_170P44_tags_89) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P44_tags_89[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P44_tags_89, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P44_tags_89) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P44_tags_89[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P44_constr_89, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P44_89, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P44_specs_89 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P45_91[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P45_tags_91[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P45_specs_91 = { + sizeof(struct ProtocolExtensionContainer_170P45), + offsetof(struct ProtocolExtensionContainer_170P45, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P45 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P45_tags_91, + sizeof(asn_DEF_ProtocolExtensionContainer_170P45_tags_91) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P45_tags_91[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P45_tags_91, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P45_tags_91) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P45_tags_91[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P45_constr_91, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P45_91, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P45_specs_91 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P46_93[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P46_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P46_specs_93 = { + sizeof(struct ProtocolExtensionContainer_170P46), + offsetof(struct ProtocolExtensionContainer_170P46, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P46 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P46_tags_93, + sizeof(asn_DEF_ProtocolExtensionContainer_170P46_tags_93) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P46_tags_93[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P46_tags_93, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P46_tags_93) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P46_tags_93[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P46_constr_93, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P46_93, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P46_specs_93 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P47_95[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P47_tags_95[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P47_specs_95 = { + sizeof(struct ProtocolExtensionContainer_170P47), + offsetof(struct ProtocolExtensionContainer_170P47, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P47 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P47_tags_95, + sizeof(asn_DEF_ProtocolExtensionContainer_170P47_tags_95) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P47_tags_95[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P47_tags_95, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P47_tags_95) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P47_tags_95[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P47_constr_95, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P47_95, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P47_specs_95 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P48_97[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P48_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P48_specs_97 = { + sizeof(struct ProtocolExtensionContainer_170P48), + offsetof(struct ProtocolExtensionContainer_170P48, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P48 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P48_tags_97, + sizeof(asn_DEF_ProtocolExtensionContainer_170P48_tags_97) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P48_tags_97[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P48_tags_97, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P48_tags_97) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P48_tags_97[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P48_constr_97, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P48_97, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P48_specs_97 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P49_99[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P49_tags_99[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P49_specs_99 = { + sizeof(struct ProtocolExtensionContainer_170P49), + offsetof(struct ProtocolExtensionContainer_170P49, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P49 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P49_tags_99, + sizeof(asn_DEF_ProtocolExtensionContainer_170P49_tags_99) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P49_tags_99[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P49_tags_99, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P49_tags_99) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P49_tags_99[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P49_constr_99, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P49_99, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P49_specs_99 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P50_101[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P50_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P50_specs_101 = { + sizeof(struct ProtocolExtensionContainer_170P50), + offsetof(struct ProtocolExtensionContainer_170P50, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P50 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P50_tags_101, + sizeof(asn_DEF_ProtocolExtensionContainer_170P50_tags_101) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P50_tags_101[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P50_tags_101, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P50_tags_101) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P50_tags_101[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P50_constr_101, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P50_101, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P50_specs_101 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P51_103[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P51_tags_103[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P51_specs_103 = { + sizeof(struct ProtocolExtensionContainer_170P51), + offsetof(struct ProtocolExtensionContainer_170P51, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P51 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P51_tags_103, + sizeof(asn_DEF_ProtocolExtensionContainer_170P51_tags_103) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P51_tags_103[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P51_tags_103, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P51_tags_103) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P51_tags_103[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P51_constr_103, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P51_103, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P51_specs_103 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P52_105[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformationSgNBModReqExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P52_tags_105[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P52_specs_105 = { + sizeof(struct ProtocolExtensionContainer_170P52), + offsetof(struct ProtocolExtensionContainer_170P52, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P52 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P52_tags_105, + sizeof(asn_DEF_ProtocolExtensionContainer_170P52_tags_105) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P52_tags_105[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P52_tags_105, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P52_tags_105) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P52_tags_105[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P52_constr_105, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P52_105, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P52_specs_105 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P53_107[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P53_tags_107[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P53_specs_107 = { + sizeof(struct ProtocolExtensionContainer_170P53), + offsetof(struct ProtocolExtensionContainer_170P53, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P53 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P53_tags_107, + sizeof(asn_DEF_ProtocolExtensionContainer_170P53_tags_107) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P53_tags_107[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P53_tags_107, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P53_tags_107) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P53_tags_107[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P53_constr_107, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P53_107, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P53_specs_107 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P54_109[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P54_tags_109[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P54_specs_109 = { + sizeof(struct ProtocolExtensionContainer_170P54), + offsetof(struct ProtocolExtensionContainer_170P54, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P54 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P54_tags_109, + sizeof(asn_DEF_ProtocolExtensionContainer_170P54_tags_109) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P54_tags_109[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P54_tags_109, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P54_tags_109) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P54_tags_109[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P54_constr_109, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P54_109, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P54_specs_109 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P55_111[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P55_tags_111[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P55_specs_111 = { + sizeof(struct ProtocolExtensionContainer_170P55), + offsetof(struct ProtocolExtensionContainer_170P55, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P55 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P55_tags_111, + sizeof(asn_DEF_ProtocolExtensionContainer_170P55_tags_111) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P55_tags_111[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P55_tags_111, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P55_tags_111) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P55_tags_111[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P55_constr_111, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P55_111, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P55_specs_111 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P56_113[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P56_tags_113[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P56_specs_113 = { + sizeof(struct ProtocolExtensionContainer_170P56), + offsetof(struct ProtocolExtensionContainer_170P56, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P56 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P56_tags_113, + sizeof(asn_DEF_ProtocolExtensionContainer_170P56_tags_113) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P56_tags_113[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P56_tags_113, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P56_tags_113) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P56_tags_113[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P56_constr_113, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P56_113, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P56_specs_113 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P57_115[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P57_tags_115[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P57_specs_115 = { + sizeof(struct ProtocolExtensionContainer_170P57), + offsetof(struct ProtocolExtensionContainer_170P57, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P57 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P57_tags_115, + sizeof(asn_DEF_ProtocolExtensionContainer_170P57_tags_115) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P57_tags_115[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P57_tags_115, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P57_tags_115) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P57_tags_115[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P57_constr_115, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P57_115, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P57_specs_115 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P58_117[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P58_tags_117[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P58_specs_117 = { + sizeof(struct ProtocolExtensionContainer_170P58), + offsetof(struct ProtocolExtensionContainer_170P58, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P58 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P58_tags_117, + sizeof(asn_DEF_ProtocolExtensionContainer_170P58_tags_117) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P58_tags_117[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P58_tags_117, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P58_tags_117) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P58_tags_117[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P58_constr_117, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P58_117, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P58_specs_117 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P59_119[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P59_tags_119[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P59_specs_119 = { + sizeof(struct ProtocolExtensionContainer_170P59), + offsetof(struct ProtocolExtensionContainer_170P59, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P59 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P59_tags_119, + sizeof(asn_DEF_ProtocolExtensionContainer_170P59_tags_119) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P59_tags_119[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P59_tags_119, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P59_tags_119) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P59_tags_119[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P59_constr_119, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P59_119, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P59_specs_119 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P60_121[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P60_tags_121[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P60_specs_121 = { + sizeof(struct ProtocolExtensionContainer_170P60), + offsetof(struct ProtocolExtensionContainer_170P60, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P60 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P60_tags_121, + sizeof(asn_DEF_ProtocolExtensionContainer_170P60_tags_121) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P60_tags_121[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P60_tags_121, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P60_tags_121) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P60_tags_121[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P60_constr_121, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P60_121, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P60_specs_121 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P61_123[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P61_tags_123[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P61_specs_123 = { + sizeof(struct ProtocolExtensionContainer_170P61), + offsetof(struct ProtocolExtensionContainer_170P61, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P61 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P61_tags_123, + sizeof(asn_DEF_ProtocolExtensionContainer_170P61_tags_123) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P61_tags_123[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P61_tags_123, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P61_tags_123) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P61_tags_123[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P61_constr_123, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P61_123, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P61_specs_123 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P62_125[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P62_tags_125[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P62_specs_125 = { + sizeof(struct ProtocolExtensionContainer_170P62), + offsetof(struct ProtocolExtensionContainer_170P62, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P62 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P62_tags_125, + sizeof(asn_DEF_ProtocolExtensionContainer_170P62_tags_125) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P62_tags_125[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P62_tags_125, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P62_tags_125) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P62_tags_125[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P62_constr_125, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P62_125, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P62_specs_125 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P63_127[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P63_tags_127[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P63_specs_127 = { + sizeof(struct ProtocolExtensionContainer_170P63), + offsetof(struct ProtocolExtensionContainer_170P63, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P63 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P63_tags_127, + sizeof(asn_DEF_ProtocolExtensionContainer_170P63_tags_127) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P63_tags_127[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P63_tags_127, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P63_tags_127) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P63_tags_127[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P63_constr_127, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P63_127, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P63_specs_127 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P64_129[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P64_tags_129[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P64_specs_129 = { + sizeof(struct ProtocolExtensionContainer_170P64), + offsetof(struct ProtocolExtensionContainer_170P64, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P64 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P64_tags_129, + sizeof(asn_DEF_ProtocolExtensionContainer_170P64_tags_129) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P64_tags_129[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P64_tags_129, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P64_tags_129) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P64_tags_129[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P64_constr_129, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P64_129, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P64_specs_129 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P65_131[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P65_tags_131[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P65_specs_131 = { + sizeof(struct ProtocolExtensionContainer_170P65), + offsetof(struct ProtocolExtensionContainer_170P65, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P65 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P65_tags_131, + sizeof(asn_DEF_ProtocolExtensionContainer_170P65_tags_131) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P65_tags_131[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P65_tags_131, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P65_tags_131) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P65_tags_131[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P65_constr_131, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P65_131, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P65_specs_131 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P66_133[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P66_tags_133[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P66_specs_133 = { + sizeof(struct ProtocolExtensionContainer_170P66), + offsetof(struct ProtocolExtensionContainer_170P66, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P66 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P66_tags_133, + sizeof(asn_DEF_ProtocolExtensionContainer_170P66_tags_133) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P66_tags_133[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P66_tags_133, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P66_tags_133) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P66_tags_133[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P66_constr_133, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P66_133, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P66_specs_133 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P67_135[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P67_tags_135[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P67_specs_135 = { + sizeof(struct ProtocolExtensionContainer_170P67), + offsetof(struct ProtocolExtensionContainer_170P67, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P67 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P67_tags_135, + sizeof(asn_DEF_ProtocolExtensionContainer_170P67_tags_135) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P67_tags_135[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P67_tags_135, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P67_tags_135) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P67_tags_135[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P67_constr_135, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P67_135, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P67_specs_135 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P68_137[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P68_tags_137[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P68_specs_137 = { + sizeof(struct ProtocolExtensionContainer_170P68), + offsetof(struct ProtocolExtensionContainer_170P68, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P68 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P68_tags_137, + sizeof(asn_DEF_ProtocolExtensionContainer_170P68_tags_137) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P68_tags_137[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P68_tags_137, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P68_tags_137) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P68_tags_137[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P68_constr_137, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P68_137, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P68_specs_137 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P69_139[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P69_tags_139[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P69_specs_139 = { + sizeof(struct ProtocolExtensionContainer_170P69), + offsetof(struct ProtocolExtensionContainer_170P69, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P69 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P69_tags_139, + sizeof(asn_DEF_ProtocolExtensionContainer_170P69_tags_139) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P69_tags_139[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P69_tags_139, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P69_tags_139) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P69_tags_139[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P69_constr_139, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P69_139, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P69_specs_139 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P70_141[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P70_tags_141[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P70_specs_141 = { + sizeof(struct ProtocolExtensionContainer_170P70), + offsetof(struct ProtocolExtensionContainer_170P70, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P70 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P70_tags_141, + sizeof(asn_DEF_ProtocolExtensionContainer_170P70_tags_141) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P70_tags_141[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P70_tags_141, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P70_tags_141) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P70_tags_141[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P70_constr_141, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P70_141, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P70_specs_141 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P71_143[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P71_tags_143[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P71_specs_143 = { + sizeof(struct ProtocolExtensionContainer_170P71), + offsetof(struct ProtocolExtensionContainer_170P71, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P71 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P71_tags_143, + sizeof(asn_DEF_ProtocolExtensionContainer_170P71_tags_143) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P71_tags_143[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P71_tags_143, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P71_tags_143) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P71_tags_143[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P71_constr_143, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P71_143, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P71_specs_143 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P72_145[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P72_tags_145[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P72_specs_145 = { + sizeof(struct ProtocolExtensionContainer_170P72), + offsetof(struct ProtocolExtensionContainer_170P72, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P72 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P72_tags_145, + sizeof(asn_DEF_ProtocolExtensionContainer_170P72_tags_145) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P72_tags_145[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P72_tags_145, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P72_tags_145) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P72_tags_145[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P72_constr_145, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P72_145, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P72_specs_145 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P73_147[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P73_tags_147[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P73_specs_147 = { + sizeof(struct ProtocolExtensionContainer_170P73), + offsetof(struct ProtocolExtensionContainer_170P73, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P73 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P73_tags_147, + sizeof(asn_DEF_ProtocolExtensionContainer_170P73_tags_147) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P73_tags_147[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P73_tags_147, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P73_tags_147) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P73_tags_147[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P73_constr_147, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P73_147, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P73_specs_147 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P74_149[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P74_tags_149[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P74_specs_149 = { + sizeof(struct ProtocolExtensionContainer_170P74), + offsetof(struct ProtocolExtensionContainer_170P74, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P74 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P74_tags_149, + sizeof(asn_DEF_ProtocolExtensionContainer_170P74_tags_149) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P74_tags_149[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P74_tags_149, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P74_tags_149) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P74_tags_149[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P74_constr_149, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P74_149, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P74_specs_149 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P75_151[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P75_tags_151[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P75_specs_151 = { + sizeof(struct ProtocolExtensionContainer_170P75), + offsetof(struct ProtocolExtensionContainer_170P75, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P75 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P75_tags_151, + sizeof(asn_DEF_ProtocolExtensionContainer_170P75_tags_151) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P75_tags_151[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P75_tags_151, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P75_tags_151) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P75_tags_151[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P75_constr_151, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P75_151, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P75_specs_151 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P76_153[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P76_tags_153[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P76_specs_153 = { + sizeof(struct ProtocolExtensionContainer_170P76), + offsetof(struct ProtocolExtensionContainer_170P76, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P76 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P76_tags_153, + sizeof(asn_DEF_ProtocolExtensionContainer_170P76_tags_153) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P76_tags_153[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P76_tags_153, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P76_tags_153) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P76_tags_153[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P76_constr_153, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P76_153, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P76_specs_153 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P77_155[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P77_tags_155[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P77_specs_155 = { + sizeof(struct ProtocolExtensionContainer_170P77), + offsetof(struct ProtocolExtensionContainer_170P77, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P77 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P77_tags_155, + sizeof(asn_DEF_ProtocolExtensionContainer_170P77_tags_155) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P77_tags_155[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P77_tags_155, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P77_tags_155) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P77_tags_155[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P77_constr_155, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P77_155, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P77_specs_155 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P78_157[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P78_tags_157[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P78_specs_157 = { + sizeof(struct ProtocolExtensionContainer_170P78), + offsetof(struct ProtocolExtensionContainer_170P78, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P78 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P78_tags_157, + sizeof(asn_DEF_ProtocolExtensionContainer_170P78_tags_157) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P78_tags_157[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P78_tags_157, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P78_tags_157) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P78_tags_157[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P78_constr_157, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P78_157, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P78_specs_157 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P79_159[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P79_tags_159[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P79_specs_159 = { + sizeof(struct ProtocolExtensionContainer_170P79), + offsetof(struct ProtocolExtensionContainer_170P79, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P79 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P79_tags_159, + sizeof(asn_DEF_ProtocolExtensionContainer_170P79_tags_159) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P79_tags_159[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P79_tags_159, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P79_tags_159) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P79_tags_159[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P79_constr_159, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P79_159, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P79_specs_159 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P80_161[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P80_tags_161[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P80_specs_161 = { + sizeof(struct ProtocolExtensionContainer_170P80), + offsetof(struct ProtocolExtensionContainer_170P80, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P80 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P80_tags_161, + sizeof(asn_DEF_ProtocolExtensionContainer_170P80_tags_161) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P80_tags_161[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P80_tags_161, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P80_tags_161) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P80_tags_161[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P80_constr_161, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P80_161, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P80_specs_161 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P81_163[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P81_tags_163[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P81_specs_163 = { + sizeof(struct ProtocolExtensionContainer_170P81), + offsetof(struct ProtocolExtensionContainer_170P81, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P81 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P81_tags_163, + sizeof(asn_DEF_ProtocolExtensionContainer_170P81_tags_163) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P81_tags_163[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P81_tags_163, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P81_tags_163) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P81_tags_163[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P81_constr_163, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P81_163, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P81_specs_163 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P82_165[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P82_tags_165[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P82_specs_165 = { + sizeof(struct ProtocolExtensionContainer_170P82), + offsetof(struct ProtocolExtensionContainer_170P82, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P82 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P82_tags_165, + sizeof(asn_DEF_ProtocolExtensionContainer_170P82_tags_165) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P82_tags_165[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P82_tags_165, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P82_tags_165) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P82_tags_165[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P82_constr_165, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P82_165, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P82_specs_165 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P83_167[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P83_tags_167[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P83_specs_167 = { + sizeof(struct ProtocolExtensionContainer_170P83), + offsetof(struct ProtocolExtensionContainer_170P83, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P83 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P83_tags_167, + sizeof(asn_DEF_ProtocolExtensionContainer_170P83_tags_167) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P83_tags_167[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P83_tags_167, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P83_tags_167) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P83_tags_167[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P83_constr_167, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P83_167, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P83_specs_167 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P84_169[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P84_tags_169[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P84_specs_169 = { + sizeof(struct ProtocolExtensionContainer_170P84), + offsetof(struct ProtocolExtensionContainer_170P84, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P84 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P84_tags_169, + sizeof(asn_DEF_ProtocolExtensionContainer_170P84_tags_169) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P84_tags_169[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P84_tags_169, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P84_tags_169) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P84_tags_169[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P84_constr_169, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P84_169, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P84_specs_169 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P85_171[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P85_tags_171[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P85_specs_171 = { + sizeof(struct ProtocolExtensionContainer_170P85), + offsetof(struct ProtocolExtensionContainer_170P85, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P85 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P85_tags_171, + sizeof(asn_DEF_ProtocolExtensionContainer_170P85_tags_171) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P85_tags_171[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P85_tags_171, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P85_tags_171) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P85_tags_171[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P85_constr_171, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P85_171, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P85_specs_171 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P86_173[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P86_tags_173[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P86_specs_173 = { + sizeof(struct ProtocolExtensionContainer_170P86), + offsetof(struct ProtocolExtensionContainer_170P86, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P86 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P86_tags_173, + sizeof(asn_DEF_ProtocolExtensionContainer_170P86_tags_173) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P86_tags_173[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P86_tags_173, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P86_tags_173) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P86_tags_173[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P86_constr_173, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P86_173, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P86_specs_173 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P87_175[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P87_tags_175[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P87_specs_175 = { + sizeof(struct ProtocolExtensionContainer_170P87), + offsetof(struct ProtocolExtensionContainer_170P87, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P87 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P87_tags_175, + sizeof(asn_DEF_ProtocolExtensionContainer_170P87_tags_175) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P87_tags_175[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P87_tags_175, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P87_tags_175) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P87_tags_175[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P87_constr_175, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P87_175, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P87_specs_175 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P88_177[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P88_tags_177[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P88_specs_177 = { + sizeof(struct ProtocolExtensionContainer_170P88), + offsetof(struct ProtocolExtensionContainer_170P88, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P88 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P88_tags_177, + sizeof(asn_DEF_ProtocolExtensionContainer_170P88_tags_177) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P88_tags_177[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P88_tags_177, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P88_tags_177) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P88_tags_177[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P88_constr_177, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P88_177, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P88_specs_177 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P89_179[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P89_tags_179[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P89_specs_179 = { + sizeof(struct ProtocolExtensionContainer_170P89), + offsetof(struct ProtocolExtensionContainer_170P89, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P89 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P89_tags_179, + sizeof(asn_DEF_ProtocolExtensionContainer_170P89_tags_179) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P89_tags_179[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P89_tags_179, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P89_tags_179) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P89_tags_179[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P89_constr_179, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P89_179, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P89_specs_179 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P90_181[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P90_tags_181[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P90_specs_181 = { + sizeof(struct ProtocolExtensionContainer_170P90), + offsetof(struct ProtocolExtensionContainer_170P90, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P90 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P90_tags_181, + sizeof(asn_DEF_ProtocolExtensionContainer_170P90_tags_181) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P90_tags_181[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P90_tags_181, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P90_tags_181) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P90_tags_181[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P90_constr_181, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P90_181, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P90_specs_181 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P91_183[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNBServedCells_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P91_tags_183[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P91_specs_183 = { + sizeof(struct ProtocolExtensionContainer_170P91), + offsetof(struct ProtocolExtensionContainer_170P91, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P91 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P91_tags_183, + sizeof(asn_DEF_ProtocolExtensionContainer_170P91_tags_183) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P91_tags_183[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P91_tags_183, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P91_tags_183) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P91_tags_183[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P91_constr_183, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P91_183, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P91_specs_183 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P92_185[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P92_tags_185[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P92_specs_185 = { + sizeof(struct ProtocolExtensionContainer_170P92), + offsetof(struct ProtocolExtensionContainer_170P92, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P92 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P92_tags_185, + sizeof(asn_DEF_ProtocolExtensionContainer_170P92_tags_185) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P92_tags_185[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P92_tags_185, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P92_tags_185) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P92_tags_185[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P92_constr_185, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P92_185, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P92_specs_185 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P93_187[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P93_tags_187[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P93_specs_187 = { + sizeof(struct ProtocolExtensionContainer_170P93), + offsetof(struct ProtocolExtensionContainer_170P93, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P93 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P93_tags_187, + sizeof(asn_DEF_ProtocolExtensionContainer_170P93_tags_187) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P93_tags_187[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P93_tags_187, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P93_tags_187) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P93_tags_187[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P93_constr_187, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P93_187, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P93_specs_187 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P94_189[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P94_tags_189[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P94_specs_189 = { + sizeof(struct ProtocolExtensionContainer_170P94), + offsetof(struct ProtocolExtensionContainer_170P94, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P94 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P94_tags_189, + sizeof(asn_DEF_ProtocolExtensionContainer_170P94_tags_189) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P94_tags_189[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P94_tags_189, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P94_tags_189) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P94_tags_189[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P94_constr_189, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P94_189, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P94_specs_189 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P95_191[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P95_tags_191[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P95_specs_191 = { + sizeof(struct ProtocolExtensionContainer_170P95), + offsetof(struct ProtocolExtensionContainer_170P95, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P95 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P95_tags_191, + sizeof(asn_DEF_ProtocolExtensionContainer_170P95_tags_191) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P95_tags_191[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P95_tags_191, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P95_tags_191) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P95_tags_191[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P95_constr_191, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P95_191, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P95_specs_191 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P96_193[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P96_tags_193[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P96_specs_193 = { + sizeof(struct ProtocolExtensionContainer_170P96), + offsetof(struct ProtocolExtensionContainer_170P96, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P96 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P96_tags_193, + sizeof(asn_DEF_ProtocolExtensionContainer_170P96_tags_193) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P96_tags_193[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P96_tags_193, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P96_tags_193) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P96_tags_193[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P96_constr_193, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P96_193, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P96_specs_193 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P97_195[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRNeighbour_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P97_tags_195[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P97_specs_195 = { + sizeof(struct ProtocolExtensionContainer_170P97), + offsetof(struct ProtocolExtensionContainer_170P97, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P97 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P97_tags_195, + sizeof(asn_DEF_ProtocolExtensionContainer_170P97_tags_195) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P97_tags_195[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P97_tags_195, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P97_tags_195) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P97_tags_195[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P97_constr_195, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P97_195, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P97_specs_195 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P98_197[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Limited_list_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P98_tags_197[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P98_specs_197 = { + sizeof(struct ProtocolExtensionContainer_170P98), + offsetof(struct ProtocolExtensionContainer_170P98, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P98 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P98_tags_197, + sizeof(asn_DEF_ProtocolExtensionContainer_170P98_tags_197) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P98_tags_197[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P98_tags_197, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P98_tags_197) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P98_tags_197[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P98_constr_197, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P98_197, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P98_specs_197 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P99_199[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P99_tags_199[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P99_specs_199 = { + sizeof(struct ProtocolExtensionContainer_170P99), + offsetof(struct ProtocolExtensionContainer_170P99, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P99 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P99_tags_199, + sizeof(asn_DEF_ProtocolExtensionContainer_170P99_tags_199) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P99_tags_199[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P99_tags_199, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P99_tags_199) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P99_tags_199[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P99_constr_199, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P99_199, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P99_specs_199 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P100_201[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCellsToModify_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P100_tags_201[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P100_specs_201 = { + sizeof(struct ProtocolExtensionContainer_170P100), + offsetof(struct ProtocolExtensionContainer_170P100, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P100 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P100_tags_201, + sizeof(asn_DEF_ProtocolExtensionContainer_170P100_tags_201) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P100_tags_201[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P100_tags_201, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P100_tags_201) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P100_tags_201[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P100_constr_201, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P100_201, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P100_specs_201 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P101_203[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCellsToActivate_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P101_tags_203[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P101_specs_203 = { + sizeof(struct ProtocolExtensionContainer_170P101), + offsetof(struct ProtocolExtensionContainer_170P101, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P101 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P101_tags_203, + sizeof(asn_DEF_ProtocolExtensionContainer_170P101_tags_203) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P101_tags_203[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P101_tags_203, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P101_tags_203) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P101_tags_203[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P101_constr_203, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P101_203, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P101_specs_203 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P102_205[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedNRCellList_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P102_tags_205[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P102_specs_205 = { + sizeof(struct ProtocolExtensionContainer_170P102), + offsetof(struct ProtocolExtensionContainer_170P102, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P102 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P102_tags_205, + sizeof(asn_DEF_ProtocolExtensionContainer_170P102_tags_205) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P102_tags_205[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P102_tags_205, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P102_tags_205) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P102_tags_205[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P102_constr_205, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P102_205, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P102_specs_205 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P103_207[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P103_tags_207[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P103_specs_207 = { + sizeof(struct ProtocolExtensionContainer_170P103), + offsetof(struct ProtocolExtensionContainer_170P103, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P103 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P103_tags_207, + sizeof(asn_DEF_ProtocolExtensionContainer_170P103_tags_207) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P103_tags_207[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P103_tags_207, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P103_tags_207) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P103_tags_207[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P103_constr_207, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P103_207, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P103_specs_207 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P104_209[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ABSInformationFDD_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P104_tags_209[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P104_specs_209 = { + sizeof(struct ProtocolExtensionContainer_170P104), + offsetof(struct ProtocolExtensionContainer_170P104, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P104 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P104_tags_209, + sizeof(asn_DEF_ProtocolExtensionContainer_170P104_tags_209) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P104_tags_209[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P104_tags_209, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P104_tags_209) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P104_tags_209[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P104_constr_209, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P104_209, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P104_specs_209 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P105_211[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ABSInformationTDD_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P105_tags_211[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P105_specs_211 = { + sizeof(struct ProtocolExtensionContainer_170P105), + offsetof(struct ProtocolExtensionContainer_170P105, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P105 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P105_tags_211, + sizeof(asn_DEF_ProtocolExtensionContainer_170P105_tags_211) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P105_tags_211[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P105_tags_211, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P105_tags_211) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P105_tags_211[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P105_constr_211, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P105_211, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P105_specs_211 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P106_213[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ABS_Status_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P106_tags_213[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P106_specs_213 = { + sizeof(struct ProtocolExtensionContainer_170P106), + offsetof(struct ProtocolExtensionContainer_170P106, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P106 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P106_tags_213, + sizeof(asn_DEF_ProtocolExtensionContainer_170P106_tags_213) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P106_tags_213[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P106_tags_213, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P106_tags_213) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P106_tags_213[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P106_constr_213, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P106_213, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P106_specs_213 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P107_215[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P107_tags_215[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P107_specs_215 = { + sizeof(struct ProtocolExtensionContainer_170P107), + offsetof(struct ProtocolExtensionContainer_170P107, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P107 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P107_tags_215, + sizeof(asn_DEF_ProtocolExtensionContainer_170P107_tags_215) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P107_tags_215[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P107_tags_215, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P107_tags_215) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P107_tags_215[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P107_constr_215, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P107_215, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P107_specs_215 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P108_217[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P108_tags_217[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P108_specs_217 = { + sizeof(struct ProtocolExtensionContainer_170P108), + offsetof(struct ProtocolExtensionContainer_170P108, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P108 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P108_tags_217, + sizeof(asn_DEF_ProtocolExtensionContainer_170P108_tags_217) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P108_tags_217[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P108_tags_217, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P108_tags_217) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P108_tags_217[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P108_constr_217, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P108_217, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P108_specs_217 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P109_219[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AllocationAndRetentionPriority_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P109_tags_219[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P109_specs_219 = { + sizeof(struct ProtocolExtensionContainer_170P109), + offsetof(struct ProtocolExtensionContainer_170P109, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P109 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P109_tags_219, + sizeof(asn_DEF_ProtocolExtensionContainer_170P109_tags_219) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P109_tags_219[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P109_tags_219, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P109_tags_219) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P109_tags_219[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P109_constr_219, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P109_219, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P109_specs_219 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P110_221[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AS_SecurityInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P110_tags_221[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P110_specs_221 = { + sizeof(struct ProtocolExtensionContainer_170P110), + offsetof(struct ProtocolExtensionContainer_170P110, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P110 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P110_tags_221, + sizeof(asn_DEF_ProtocolExtensionContainer_170P110_tags_221) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P110_tags_221[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P110_tags_221, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P110_tags_221) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P110_tags_221[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P110_constr_221, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P110_221, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P110_specs_221 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P111_223[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BluetoothMeasurementConfiguration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P111_tags_223[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P111_specs_223 = { + sizeof(struct ProtocolExtensionContainer_170P111), + offsetof(struct ProtocolExtensionContainer_170P111, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P111 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P111_tags_223, + sizeof(asn_DEF_ProtocolExtensionContainer_170P111_tags_223) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P111_tags_223[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P111_tags_223, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P111_tags_223) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P111_tags_223[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P111_constr_223, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P111_223, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P111_specs_223 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P112_225[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellBasedMDT_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P112_tags_225[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P112_specs_225 = { + sizeof(struct ProtocolExtensionContainer_170P112), + offsetof(struct ProtocolExtensionContainer_170P112, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P112 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P112_tags_225, + sizeof(asn_DEF_ProtocolExtensionContainer_170P112_tags_225) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P112_tags_225[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P112_tags_225, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P112_tags_225) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P112_tags_225[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P112_constr_225, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P112_225, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P112_specs_225 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P113_227[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellBasedQMC_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P113_tags_227[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P113_specs_227 = { + sizeof(struct ProtocolExtensionContainer_170P113), + offsetof(struct ProtocolExtensionContainer_170P113, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P113 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P113_tags_227, + sizeof(asn_DEF_ProtocolExtensionContainer_170P113_tags_227) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P113_tags_227[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P113_tags_227, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P113_tags_227) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P113_tags_227[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P113_constr_227, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P113_227, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P113_specs_227 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P114_229[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellReplacingInfo_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P114_tags_229[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P114_specs_229 = { + sizeof(struct ProtocolExtensionContainer_170P114), + offsetof(struct ProtocolExtensionContainer_170P114, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P114 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P114_tags_229, + sizeof(asn_DEF_ProtocolExtensionContainer_170P114_tags_229) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P114_tags_229[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P114_tags_229, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P114_tags_229) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P114_tags_229[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P114_constr_229, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P114_229, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P114_specs_229 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P115_231[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellType_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P115_tags_231[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P115_specs_231 = { + sizeof(struct ProtocolExtensionContainer_170P115), + offsetof(struct ProtocolExtensionContainer_170P115, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P115 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P115_tags_231, + sizeof(asn_DEF_ProtocolExtensionContainer_170P115_tags_231) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P115_tags_231[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P115_tags_231, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P115_tags_231) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P115_tags_231[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P115_constr_231, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P115_231, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P115_specs_231 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P116_233[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CNTypeRestrictionsItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P116_tags_233[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P116_specs_233 = { + sizeof(struct ProtocolExtensionContainer_170P116), + offsetof(struct ProtocolExtensionContainer_170P116, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P116 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P116_tags_233, + sizeof(asn_DEF_ProtocolExtensionContainer_170P116_tags_233) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P116_tags_233[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P116_tags_233, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P116_tags_233) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P116_tags_233[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P116_constr_233, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P116_233, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P116_specs_233 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P117_235[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPHypothesisSetItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P117_tags_235[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P117_specs_235 = { + sizeof(struct ProtocolExtensionContainer_170P117), + offsetof(struct ProtocolExtensionContainer_170P117, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P117 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P117_tags_235, + sizeof(asn_DEF_ProtocolExtensionContainer_170P117_tags_235) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P117_tags_235[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P117_tags_235, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P117_tags_235) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P117_tags_235[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P117_constr_235, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P117_235, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P117_specs_235 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P118_237[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P118_tags_237[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P118_specs_237 = { + sizeof(struct ProtocolExtensionContainer_170P118), + offsetof(struct ProtocolExtensionContainer_170P118, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P118 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P118_tags_237, + sizeof(asn_DEF_ProtocolExtensionContainer_170P118_tags_237) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P118_tags_237[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P118_tags_237, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P118_tags_237) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P118_tags_237[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P118_constr_237, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P118_237, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P118_specs_237 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P119_239[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPInformationItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P119_tags_239[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P119_specs_239 = { + sizeof(struct ProtocolExtensionContainer_170P119), + offsetof(struct ProtocolExtensionContainer_170P119, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P119 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P119_tags_239, + sizeof(asn_DEF_ProtocolExtensionContainer_170P119_tags_239) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P119_tags_239[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P119_tags_239, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P119_tags_239) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P119_tags_239[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P119_constr_239, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P119_239, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P119_specs_239 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P120_241[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPInformationStartTime_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P120_tags_241[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P120_specs_241 = { + sizeof(struct ProtocolExtensionContainer_170P120), + offsetof(struct ProtocolExtensionContainer_170P120, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P120 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P120_tags_241, + sizeof(asn_DEF_ProtocolExtensionContainer_170P120_tags_241) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P120_tags_241[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P120_tags_241, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P120_tags_241) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P120_tags_241[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P120_constr_241, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P120_241, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P120_specs_241 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P121_243[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompositeAvailableCapacity_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P121_tags_243[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P121_specs_243 = { + sizeof(struct ProtocolExtensionContainer_170P121), + offsetof(struct ProtocolExtensionContainer_170P121, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P121 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P121_tags_243, + sizeof(asn_DEF_ProtocolExtensionContainer_170P121_tags_243) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P121_tags_243[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P121_tags_243, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P121_tags_243) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P121_tags_243[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P121_constr_243, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P121_243, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P121_specs_243 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P122_245[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompositeAvailableCapacityGroup_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P122_tags_245[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P122_specs_245 = { + sizeof(struct ProtocolExtensionContainer_170P122), + offsetof(struct ProtocolExtensionContainer_170P122, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P122 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P122_tags_245, + sizeof(asn_DEF_ProtocolExtensionContainer_170P122_tags_245) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P122_tags_245[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P122_tags_245, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P122_tags_245) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P122_tags_245[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P122_constr_245, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P122_245, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P122_specs_245 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P123_247[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_COUNTvalue_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P123_tags_247[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P123_specs_247 = { + sizeof(struct ProtocolExtensionContainer_170P123), + offsetof(struct ProtocolExtensionContainer_170P123, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P123 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P123_tags_247, + sizeof(asn_DEF_ProtocolExtensionContainer_170P123_tags_247) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P123_tags_247[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P123_tags_247, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P123_tags_247) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P123_tags_247[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P123_constr_247, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P123_247, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P123_specs_247 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P124_249[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_COUNTValueExtended_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P124_tags_249[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P124_specs_249 = { + sizeof(struct ProtocolExtensionContainer_170P124), + offsetof(struct ProtocolExtensionContainer_170P124, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P124 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P124_tags_249, + sizeof(asn_DEF_ProtocolExtensionContainer_170P124_tags_249) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P124_tags_249[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P124_tags_249, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P124_tags_249) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P124_tags_249[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P124_constr_249, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P124_249, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P124_specs_249 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P125_251[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P125_tags_251[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P125_specs_251 = { + sizeof(struct ProtocolExtensionContainer_170P125), + offsetof(struct ProtocolExtensionContainer_170P125, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P125 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P125_tags_251, + sizeof(asn_DEF_ProtocolExtensionContainer_170P125_tags_251) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P125_tags_251[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P125_tags_251, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P125_tags_251) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P125_tags_251[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P125_constr_251, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P125_251, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P125_specs_251 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P126_253[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P126_tags_253[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P126_specs_253 = { + sizeof(struct ProtocolExtensionContainer_170P126), + offsetof(struct ProtocolExtensionContainer_170P126, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P126 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P126_tags_253, + sizeof(asn_DEF_ProtocolExtensionContainer_170P126_tags_253) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P126_tags_253[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P126_tags_253, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P126_tags_253) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P126_tags_253[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P126_constr_253, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P126_253, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P126_specs_253 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P127_255[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P127_tags_255[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P127_specs_255 = { + sizeof(struct ProtocolExtensionContainer_170P127), + offsetof(struct ProtocolExtensionContainer_170P127, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P127 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P127_tags_255, + sizeof(asn_DEF_ProtocolExtensionContainer_170P127_tags_255) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P127_tags_255[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P127_tags_255, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P127_tags_255) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P127_tags_255[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P127_constr_255, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P127_255, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P127_specs_255 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P128_257[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CSIReportList_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P128_tags_257[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P128_specs_257 = { + sizeof(struct ProtocolExtensionContainer_170P128), + offsetof(struct ProtocolExtensionContainer_170P128, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P128 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P128_tags_257, + sizeof(asn_DEF_ProtocolExtensionContainer_170P128_tags_257) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P128_tags_257[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P128_tags_257, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P128_tags_257) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P128_tags_257[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P128_constr_257, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P128_257, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P128_specs_257 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P129_259[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CSIReportPerCSIProcess_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P129_tags_259[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P129_specs_259 = { + sizeof(struct ProtocolExtensionContainer_170P129), + offsetof(struct ProtocolExtensionContainer_170P129, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P129 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P129_tags_259, + sizeof(asn_DEF_ProtocolExtensionContainer_170P129_tags_259) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P129_tags_259[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P129_tags_259, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P129_tags_259) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P129_tags_259[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P129_constr_259, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P129_259, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P129_specs_259 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P130_261[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CSIReportPerCSIProcessItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P130_tags_261[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P130_specs_261 = { + sizeof(struct ProtocolExtensionContainer_170P130), + offsetof(struct ProtocolExtensionContainer_170P130, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P130 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P130_tags_261, + sizeof(asn_DEF_ProtocolExtensionContainer_170P130_tags_261) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P130_tags_261[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P130_tags_261, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P130_tags_261) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P130_tags_261[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P130_constr_261, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P130_261, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P130_specs_261 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P131_263[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataTrafficResourceIndication_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P131_tags_263[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P131_specs_263 = { + sizeof(struct ProtocolExtensionContainer_170P131), + offsetof(struct ProtocolExtensionContainer_170P131, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P131 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P131_tags_263, + sizeof(asn_DEF_ProtocolExtensionContainer_170P131_tags_263) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P131_tags_263[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P131_tags_263, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P131_tags_263) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P131_tags_263[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P131_constr_263, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P131_263, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P131_specs_263 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P132_265[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DeliveryStatus_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P132_tags_265[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P132_specs_265 = { + sizeof(struct ProtocolExtensionContainer_170P132), + offsetof(struct ProtocolExtensionContainer_170P132, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P132 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P132_tags_265, + sizeof(asn_DEF_ProtocolExtensionContainer_170P132_tags_265) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P132_tags_265[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P132_tags_265, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P132_tags_265) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P132_tags_265[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P132_constr_265, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P132_265, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P132_specs_265 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P133_267[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DynamicNAICSInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P133_tags_267[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P133_specs_267 = { + sizeof(struct ProtocolExtensionContainer_170P133), + offsetof(struct ProtocolExtensionContainer_170P133, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P133 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P133_tags_267, + sizeof(asn_DEF_ProtocolExtensionContainer_170P133_tags_267) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P133_tags_267[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P133_tags_267, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P133_tags_267) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P133_tags_267[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P133_constr_267, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P133_267, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P133_specs_267 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P134_269[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P134_tags_269[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P134_specs_269 = { + sizeof(struct ProtocolExtensionContainer_170P134), + offsetof(struct ProtocolExtensionContainer_170P134, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P134 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P134_tags_269, + sizeof(asn_DEF_ProtocolExtensionContainer_170P134_tags_269) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P134_tags_269[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P134_tags_269, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P134_tags_269) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P134_tags_269[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P134_constr_269, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P134_269, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P134_specs_269 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P135_271[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EnhancedRNTP_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P135_tags_271[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P135_specs_271 = { + sizeof(struct ProtocolExtensionContainer_170P135), + offsetof(struct ProtocolExtensionContainer_170P135, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P135 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P135_tags_271, + sizeof(asn_DEF_ProtocolExtensionContainer_170P135_tags_271) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P135_tags_271[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P135_tags_271, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P135_tags_271) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P135_tags_271[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P135_constr_271, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P135_271, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P135_specs_271 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P136_273[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EnhancedRNTPStartTime_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P136_tags_273[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P136_specs_273 = { + sizeof(struct ProtocolExtensionContainer_170P136), + offsetof(struct ProtocolExtensionContainer_170P136, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P136 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P136_tags_273, + sizeof(asn_DEF_ProtocolExtensionContainer_170P136_tags_273) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P136_tags_273[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P136_tags_273, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P136_tags_273) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P136_tags_273[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P136_constr_273, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P136_273, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P136_specs_273 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P137_275[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EN_DC_ResourceConfigurationExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P137_tags_275[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P137_specs_275 = { + sizeof(struct ProtocolExtensionContainer_170P137), + offsetof(struct ProtocolExtensionContainer_170P137, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P137 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P137_tags_275, + sizeof(asn_DEF_ProtocolExtensionContainer_170P137_tags_275) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P137_tags_275[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P137_tags_275, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P137_tags_275) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P137_tags_275[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P137_constr_275, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P137_275, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P137_specs_275 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P138_277[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ERABActivityNotifyItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P138_tags_277[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P138_specs_277 = { + sizeof(struct ProtocolExtensionContainer_170P138), + offsetof(struct ProtocolExtensionContainer_170P138, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P138 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P138_tags_277, + sizeof(asn_DEF_ProtocolExtensionContainer_170P138_tags_277) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P138_tags_277[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P138_tags_277, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P138_tags_277) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P138_tags_277[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P138_constr_277, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P138_277, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P138_specs_277 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P139_279[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P139_tags_279[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P139_specs_279 = { + sizeof(struct ProtocolExtensionContainer_170P139), + offsetof(struct ProtocolExtensionContainer_170P139, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P139 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P139_tags_279, + sizeof(asn_DEF_ProtocolExtensionContainer_170P139_tags_279) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P139_tags_279[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P139_tags_279, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P139_tags_279) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P139_tags_279[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P139_constr_279, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P139_279, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P139_specs_279 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P140_281[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P140_tags_281[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P140_specs_281 = { + sizeof(struct ProtocolExtensionContainer_170P140), + offsetof(struct ProtocolExtensionContainer_170P140, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P140 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P140_tags_281, + sizeof(asn_DEF_ProtocolExtensionContainer_170P140_tags_281) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P140_tags_281[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P140_tags_281, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P140_tags_281) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P140_tags_281[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P140_constr_281, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P140_281, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P140_specs_281 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P141_283[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABUsageReport_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P141_tags_283[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P141_specs_283 = { + sizeof(struct ProtocolExtensionContainer_170P141), + offsetof(struct ProtocolExtensionContainer_170P141, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P141 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P141_tags_283, + sizeof(asn_DEF_ProtocolExtensionContainer_170P141_tags_283) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P141_tags_283[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P141_tags_283, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P141_tags_283) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P141_tags_283[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P141_constr_283, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P141_283, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P141_specs_283 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P142_285[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEBehaviour_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P142_tags_285[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P142_specs_285 = { + sizeof(struct ProtocolExtensionContainer_170P142), + offsetof(struct ProtocolExtensionContainer_170P142, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P142 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P142_tags_285, + sizeof(asn_DEF_ProtocolExtensionContainer_170P142_tags_285) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P142_tags_285[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P142_tags_285, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P142_tags_285) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P142_tags_285[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P142_constr_285, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P142_285, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P142_specs_285 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P143_287[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEActivityBehaviour_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P143_tags_287[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P143_specs_287 = { + sizeof(struct ProtocolExtensionContainer_170P143), + offsetof(struct ProtocolExtensionContainer_170P143, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P143 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P143_tags_287, + sizeof(asn_DEF_ProtocolExtensionContainer_170P143_tags_287) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P143_tags_287[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P143_tags_287, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P143_tags_287) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P143_tags_287[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P143_constr_287, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P143_287, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P143_specs_287 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P144_289[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P144_tags_289[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P144_specs_289 = { + sizeof(struct ProtocolExtensionContainer_170P144), + offsetof(struct ProtocolExtensionContainer_170P144, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P144 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P144_tags_289, + sizeof(asn_DEF_ProtocolExtensionContainer_170P144_tags_289) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P144_tags_289[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P144_tags_289, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P144_tags_289) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P144_tags_289[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P144_constr_289, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P144_289, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P144_specs_289 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P145_291[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FDD_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P145_tags_291[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P145_specs_291 = { + sizeof(struct ProtocolExtensionContainer_170P145), + offsetof(struct ProtocolExtensionContainer_170P145, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P145 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P145_tags_291, + sizeof(asn_DEF_ProtocolExtensionContainer_170P145_tags_291) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P145_tags_291[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P145_tags_291, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P145_tags_291) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P145_tags_291[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P145_constr_291, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P145_291, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P145_specs_291 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P146_293[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ForbiddenTAs_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P146_tags_293[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P146_specs_293 = { + sizeof(struct ProtocolExtensionContainer_170P146), + offsetof(struct ProtocolExtensionContainer_170P146, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P146 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P146_tags_293, + sizeof(asn_DEF_ProtocolExtensionContainer_170P146_tags_293) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P146_tags_293[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P146_tags_293, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P146_tags_293) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P146_tags_293[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P146_constr_293, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P146_293, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P146_specs_293 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P147_295[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ForbiddenLAs_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P147_tags_295[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P147_specs_295 = { + sizeof(struct ProtocolExtensionContainer_170P147), + offsetof(struct ProtocolExtensionContainer_170P147, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P147 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P147_tags_295, + sizeof(asn_DEF_ProtocolExtensionContainer_170P147_tags_295) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P147_tags_295[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P147_tags_295, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P147_tags_295) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P147_tags_295[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P147_constr_295, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P147_295, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P147_specs_295 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P148_297[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqBandNrItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P148_tags_297[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P148_specs_297 = { + sizeof(struct ProtocolExtensionContainer_170P148), + offsetof(struct ProtocolExtensionContainer_170P148, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P148 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P148_tags_297, + sizeof(asn_DEF_ProtocolExtensionContainer_170P148_tags_297) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P148_tags_297[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P148_tags_297, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P148_tags_297) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P148_tags_297[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P148_constr_297, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P148_297, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P148_specs_297 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P149_299[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GBR_QosInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P149_tags_299[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P149_specs_299 = { + sizeof(struct ProtocolExtensionContainer_170P149), + offsetof(struct ProtocolExtensionContainer_170P149, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P149 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P149_tags_299, + sizeof(asn_DEF_ProtocolExtensionContainer_170P149_tags_299) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P149_tags_299[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P149_tags_299, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P149_tags_299) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P149_tags_299[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P149_constr_299, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P149_299, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P149_specs_299 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P150_301[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P150_tags_301[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P150_specs_301 = { + sizeof(struct ProtocolExtensionContainer_170P150), + offsetof(struct ProtocolExtensionContainer_170P150, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P150 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P150_tags_301, + sizeof(asn_DEF_ProtocolExtensionContainer_170P150_tags_301) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P150_tags_301[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P150_tags_301, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P150_tags_301) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P150_tags_301[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P150_constr_301, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P150_301, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P150_specs_301 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P151_303[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P151_tags_303[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P151_specs_303 = { + sizeof(struct ProtocolExtensionContainer_170P151), + offsetof(struct ProtocolExtensionContainer_170P151, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P151 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P151_tags_303, + sizeof(asn_DEF_ProtocolExtensionContainer_170P151_tags_303) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P151_tags_303[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P151_tags_303, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P151_tags_303) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P151_tags_303[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P151_constr_303, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P151_303, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P151_specs_303 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P152_305[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GTPtunnelEndpoint_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P152_tags_305[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P152_specs_305 = { + sizeof(struct ProtocolExtensionContainer_170P152), + offsetof(struct ProtocolExtensionContainer_170P152, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P152 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P152_tags_305, + sizeof(asn_DEF_ProtocolExtensionContainer_170P152_tags_305) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P152_tags_305[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P152_tags_305, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P152_tags_305) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P152_tags_305[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P152_constr_305, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P152_305, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P152_specs_305 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P153_307[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GU_Group_ID_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P153_tags_307[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P153_specs_307 = { + sizeof(struct ProtocolExtensionContainer_170P153), + offsetof(struct ProtocolExtensionContainer_170P153, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P153 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P153_tags_307, + sizeof(asn_DEF_ProtocolExtensionContainer_170P153_tags_307) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P153_tags_307[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P153_tags_307, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P153_tags_307) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P153_tags_307[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P153_constr_307, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P153_307, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P153_specs_307 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P154_309[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUMMEI_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P154_tags_309[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P154_specs_309 = { + sizeof(struct ProtocolExtensionContainer_170P154), + offsetof(struct ProtocolExtensionContainer_170P154, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P154 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P154_tags_309, + sizeof(asn_DEF_ProtocolExtensionContainer_170P154_tags_309) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P154_tags_309[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P154_tags_309, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P154_tags_309) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P154_tags_309[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P154_constr_309, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P154_309, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P154_specs_309 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P155_311[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverRestrictionList_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P155_tags_311[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P155_specs_311 = { + sizeof(struct ProtocolExtensionContainer_170P155), + offsetof(struct ProtocolExtensionContainer_170P155, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P155 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P155_tags_311, + sizeof(asn_DEF_ProtocolExtensionContainer_170P155_tags_311) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P155_tags_311[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P155_tags_311, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P155_tags_311) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P155_tags_311[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P155_constr_311, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P155_311, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P155_specs_311 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P156_313[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HWLoadIndicator_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P156_tags_313[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P156_specs_313 = { + sizeof(struct ProtocolExtensionContainer_170P156), + offsetof(struct ProtocolExtensionContainer_170P156, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P156 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P156_tags_313, + sizeof(asn_DEF_ProtocolExtensionContainer_170P156_tags_313) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P156_tags_313[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P156_tags_313, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P156_tags_313) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P156_tags_313[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P156_constr_313, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P156_313, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P156_specs_313 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P157_315[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P157_tags_315[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P157_specs_315 = { + sizeof(struct ProtocolExtensionContainer_170P157), + offsetof(struct ProtocolExtensionContainer_170P157, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P157 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P157_tags_315, + sizeof(asn_DEF_ProtocolExtensionContainer_170P157_tags_315) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P157_tags_315[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P157_tags_315, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P157_tags_315) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P157_tags_315[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P157_constr_315, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P157_315, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P157_specs_315 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P158_317[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LocationReportingInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P158_tags_317[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P158_specs_317 = { + sizeof(struct ProtocolExtensionContainer_170P158), + offsetof(struct ProtocolExtensionContainer_170P158, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P158 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P158_tags_317, + sizeof(asn_DEF_ProtocolExtensionContainer_170P158_tags_317) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P158_tags_317[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P158_tags_317, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P158_tags_317) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P158_tags_317[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P158_constr_317, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P158_317, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P158_specs_317 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P159_319[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M1PeriodicReporting_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P159_tags_319[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P159_specs_319 = { + sizeof(struct ProtocolExtensionContainer_170P159), + offsetof(struct ProtocolExtensionContainer_170P159, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P159 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P159_tags_319, + sizeof(asn_DEF_ProtocolExtensionContainer_170P159_tags_319) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P159_tags_319[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P159_tags_319, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P159_tags_319) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P159_tags_319[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P159_constr_319, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P159_319, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P159_specs_319 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P160_321[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M1ThresholdEventA2_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P160_tags_321[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P160_specs_321 = { + sizeof(struct ProtocolExtensionContainer_170P160), + offsetof(struct ProtocolExtensionContainer_170P160, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P160 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P160_tags_321, + sizeof(asn_DEF_ProtocolExtensionContainer_170P160_tags_321) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P160_tags_321[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P160_tags_321, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P160_tags_321) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P160_tags_321[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P160_constr_321, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P160_321, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P160_specs_321 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P161_323[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M3Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P161_tags_323[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P161_specs_323 = { + sizeof(struct ProtocolExtensionContainer_170P161), + offsetof(struct ProtocolExtensionContainer_170P161, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P161 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P161_tags_323, + sizeof(asn_DEF_ProtocolExtensionContainer_170P161_tags_323) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P161_tags_323[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P161_tags_323, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P161_tags_323) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P161_tags_323[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P161_constr_323, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P161_323, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P161_specs_323 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P162_325[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M4Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P162_tags_325[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P162_specs_325 = { + sizeof(struct ProtocolExtensionContainer_170P162), + offsetof(struct ProtocolExtensionContainer_170P162, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P162 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P162_tags_325, + sizeof(asn_DEF_ProtocolExtensionContainer_170P162_tags_325) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P162_tags_325[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P162_tags_325, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P162_tags_325) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P162_tags_325[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P162_constr_325, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P162_325, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P162_specs_325 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P163_327[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M5Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P163_tags_327[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P163_specs_327 = { + sizeof(struct ProtocolExtensionContainer_170P163), + offsetof(struct ProtocolExtensionContainer_170P163, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P163 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P163_tags_327, + sizeof(asn_DEF_ProtocolExtensionContainer_170P163_tags_327) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P163_tags_327[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P163_tags_327, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P163_tags_327) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P163_tags_327[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P163_constr_327, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P163_327, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P163_specs_327 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P164_329[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M6Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P164_tags_329[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P164_specs_329 = { + sizeof(struct ProtocolExtensionContainer_170P164), + offsetof(struct ProtocolExtensionContainer_170P164, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P164 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P164_tags_329, + sizeof(asn_DEF_ProtocolExtensionContainer_170P164_tags_329) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P164_tags_329[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P164_tags_329, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P164_tags_329) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P164_tags_329[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P164_constr_329, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P164_329, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P164_specs_329 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P165_331[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M7Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P165_tags_331[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P165_specs_331 = { + sizeof(struct ProtocolExtensionContainer_170P165), + offsetof(struct ProtocolExtensionContainer_170P165, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P165 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P165_tags_331, + sizeof(asn_DEF_ProtocolExtensionContainer_170P165_tags_331) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P165_tags_331[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P165_tags_331, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P165_tags_331) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P165_tags_331[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P165_constr_331, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P165_331, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P165_specs_331 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P166_333[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MDT_Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P166_tags_333[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P166_specs_333 = { + sizeof(struct ProtocolExtensionContainer_170P166), + offsetof(struct ProtocolExtensionContainer_170P166, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P166 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P166_tags_333, + sizeof(asn_DEF_ProtocolExtensionContainer_170P166_tags_333) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P166_tags_333[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P166_tags_333, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P166_tags_333) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P166_tags_333[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P166_constr_333, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P166_333, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P166_specs_333 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P167_335[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeNBResourceCoordinationInformationExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P167_tags_335[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P167_specs_335 = { + sizeof(struct ProtocolExtensionContainer_170P167), + offsetof(struct ProtocolExtensionContainer_170P167, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P167 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P167_tags_335, + sizeof(asn_DEF_ProtocolExtensionContainer_170P167_tags_335) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P167_tags_335[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P167_tags_335, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P167_tags_335) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P167_tags_335[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P167_constr_335, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P167_335, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P167_specs_335 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P168_337[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_Subframe_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P168_tags_337[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P168_specs_337 = { + sizeof(struct ProtocolExtensionContainer_170P168), + offsetof(struct ProtocolExtensionContainer_170P168, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P168 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P168_tags_337, + sizeof(asn_DEF_ProtocolExtensionContainer_170P168_tags_337) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P168_tags_337[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P168_tags_337, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P168_tags_337) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P168_tags_337[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P168_constr_337, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P168_337, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P168_specs_337 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P169_339[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandInfo_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P169_tags_339[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P169_specs_339 = { + sizeof(struct ProtocolExtensionContainer_170P169), + offsetof(struct ProtocolExtensionContainer_170P169, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P169 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P169_tags_339, + sizeof(asn_DEF_ProtocolExtensionContainer_170P169_tags_339) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P169_tags_339[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P169_tags_339, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P169_tags_339) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P169_tags_339[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P169_constr_339, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P169_339, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P169_specs_339 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P170_341[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SplitSRB_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P170_tags_341[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P170_specs_341 = { + sizeof(struct ProtocolExtensionContainer_170P170), + offsetof(struct ProtocolExtensionContainer_170P170, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P170 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P170_tags_341, + sizeof(asn_DEF_ProtocolExtensionContainer_170P170_tags_341) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P170_tags_341[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P170_tags_341, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P170_tags_341) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P170_tags_341[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P170_constr_341, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P170_341, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P170_specs_341 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P171_343[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UENRMeasurement_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P171_tags_343[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P171_specs_343 = { + sizeof(struct ProtocolExtensionContainer_170P171), + offsetof(struct ProtocolExtensionContainer_170P171, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P171 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P171_tags_343, + sizeof(asn_DEF_ProtocolExtensionContainer_170P171_tags_343) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P171_tags_343[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P171_tags_343, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P171_tags_343) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P171_tags_343[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P171_constr_343, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P171_343, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P171_specs_343 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P172_345[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Neighbour_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P172_tags_345[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P172_specs_345 = { + sizeof(struct ProtocolExtensionContainer_170P172), + offsetof(struct ProtocolExtensionContainer_170P172, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P172 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P172_tags_345, + sizeof(asn_DEF_ProtocolExtensionContainer_170P172_tags_345) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P172_tags_345[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P172_tags_345, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P172_tags_345) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P172_tags_345[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P172_constr_345, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P172_345, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P172_specs_345 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P173_347[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRFreqInfo_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P173_tags_347[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P173_specs_347 = { + sizeof(struct ProtocolExtensionContainer_170P173), + offsetof(struct ProtocolExtensionContainer_170P173, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P173 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P173_tags_347, + sizeof(asn_DEF_ProtocolExtensionContainer_170P173_tags_347) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P173_tags_347[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P173_tags_347, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P173_tags_347) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P173_tags_347[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P173_constr_347, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P173_347, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P173_specs_347 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P174_349[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRCGI_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P174_tags_349[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P174_specs_349 = { + sizeof(struct ProtocolExtensionContainer_170P174), + offsetof(struct ProtocolExtensionContainer_170P174, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P174 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P174_tags_349, + sizeof(asn_DEF_ProtocolExtensionContainer_170P174_tags_349) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P174_tags_349[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P174_tags_349, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P174_tags_349) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P174_tags_349[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P174_constr_349, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P174_349, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P174_specs_349 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P175_351[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NR_TxBW_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P175_tags_351[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P175_specs_351 = { + sizeof(struct ProtocolExtensionContainer_170P175), + offsetof(struct ProtocolExtensionContainer_170P175, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P175 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P175_tags_351, + sizeof(asn_DEF_ProtocolExtensionContainer_170P175_tags_351) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P175_tags_351[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P175_tags_351, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P175_tags_351) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P175_tags_351[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P175_constr_351, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P175_351, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P175_specs_351 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P176_353[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRUESecurityCapabilities_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P176_tags_353[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P176_specs_353 = { + sizeof(struct ProtocolExtensionContainer_170P176), + offsetof(struct ProtocolExtensionContainer_170P176, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P176 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P176_tags_353, + sizeof(asn_DEF_ProtocolExtensionContainer_170P176_tags_353) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P176_tags_353[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P176_tags_353, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P176_tags_353) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P176_tags_353[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P176_constr_353, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P176_353, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P176_specs_353 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P177_355[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PRACH_Configuration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P177_tags_355[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P177_specs_355 = { + sizeof(struct ProtocolExtensionContainer_170P177), + offsetof(struct ProtocolExtensionContainer_170P177, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P177 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P177_tags_355, + sizeof(asn_DEF_ProtocolExtensionContainer_170P177_tags_355) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P177_tags_355[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P177_tags_355, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P177_tags_355) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P177_tags_355[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P177_constr_355, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P177_355, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P177_specs_355 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P178_357[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PLMNAreaBasedQMC_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P178_tags_357[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P178_specs_357 = { + sizeof(struct ProtocolExtensionContainer_170P178), + offsetof(struct ProtocolExtensionContainer_170P178, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P178 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P178_tags_357, + sizeof(asn_DEF_ProtocolExtensionContainer_170P178_tags_357) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P178_tags_357[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P178_tags_357, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P178_tags_357) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P178_tags_357[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P178_constr_357, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P178_357, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P178_specs_357 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P179_359[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProSeAuthorized_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P179_tags_359[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P179_specs_359 = { + sizeof(struct ProtocolExtensionContainer_170P179), + offsetof(struct ProtocolExtensionContainer_170P179, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P179 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P179_tags_359, + sizeof(asn_DEF_ProtocolExtensionContainer_170P179_tags_359) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P179_tags_359[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P179_tags_359, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P179_tags_359) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P179_tags_359[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P179_constr_359, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P179_359, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P179_specs_359 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P180_361[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P180_tags_361[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P180_specs_361 = { + sizeof(struct ProtocolExtensionContainer_170P180), + offsetof(struct ProtocolExtensionContainer_170P180, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P180 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P180_tags_361, + sizeof(asn_DEF_ProtocolExtensionContainer_170P180_tags_361) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P180_tags_361[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P180_tags_361, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P180_tags_361) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P180_tags_361[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P180_constr_361, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P180_361, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P180_specs_361 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P181_363[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtectedFootprintTimePattern_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P181_tags_363[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P181_specs_363 = { + sizeof(struct ProtocolExtensionContainer_170P181), + offsetof(struct ProtocolExtensionContainer_170P181, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P181 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P181_tags_363, + sizeof(asn_DEF_ProtocolExtensionContainer_170P181_tags_363) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P181_tags_363[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P181_tags_363, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P181_tags_363) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P181_tags_363[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P181_constr_363, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P181_363, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P181_specs_363 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P182_365[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtectedResourceList_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P182_tags_365[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P182_specs_365 = { + sizeof(struct ProtocolExtensionContainer_170P182), + offsetof(struct ProtocolExtensionContainer_170P182, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P182 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P182_tags_365, + sizeof(asn_DEF_ProtocolExtensionContainer_170P182_tags_365) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P182_tags_365[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P182_tags_365, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P182_tags_365) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P182_tags_365[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P182_constr_365, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P182_365, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P182_specs_365 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P183_367[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RadioResourceStatus_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P183_tags_367[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P183_specs_367 = { + sizeof(struct ProtocolExtensionContainer_170P183), + offsetof(struct ProtocolExtensionContainer_170P183, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P183 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P183_tags_367, + sizeof(asn_DEF_ProtocolExtensionContainer_170P183_tags_367) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P183_tags_367[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P183_tags_367, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P183_tags_367) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P183_tags_367[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P183_constr_367, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P183_367, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P183_specs_367 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P184_369[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RelativeNarrowbandTxPower_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P184_tags_369[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P184_specs_369 = { + sizeof(struct ProtocolExtensionContainer_170P184), + offsetof(struct ProtocolExtensionContainer_170P184, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P184 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P184_tags_369, + sizeof(asn_DEF_ProtocolExtensionContainer_170P184_tags_369) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P184_tags_369[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P184_tags_369, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P184_tags_369) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P184_tags_369[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P184_constr_369, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P184_369, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P184_specs_369 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P185_371[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ReservedSubframePattern_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P185_tags_371[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P185_specs_371 = { + sizeof(struct ProtocolExtensionContainer_170P185), + offsetof(struct ProtocolExtensionContainer_170P185, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P185 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P185_tags_371, + sizeof(asn_DEF_ProtocolExtensionContainer_170P185_tags_371) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P185_tags_371[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P185_tags_371, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P185_tags_371) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P185_tags_371[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P185_constr_371, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P185_371, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P185_specs_371 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P186_373[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RLC_Status_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P186_tags_373[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P186_specs_373 = { + sizeof(struct ProtocolExtensionContainer_170P186), + offsetof(struct ProtocolExtensionContainer_170P186, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P186 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P186_tags_373, + sizeof(asn_DEF_ProtocolExtensionContainer_170P186_tags_373) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P186_tags_373[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P186_tags_373, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P186_tags_373) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P186_tags_373[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P186_constr_373, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P186_373, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P186_specs_373 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P187_375[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RSRPMeasurementResult_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P187_tags_375[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P187_specs_375 = { + sizeof(struct ProtocolExtensionContainer_170P187), + offsetof(struct ProtocolExtensionContainer_170P187, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P187 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P187_tags_375, + sizeof(asn_DEF_ProtocolExtensionContainer_170P187_tags_375) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P187_tags_375[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P187_tags_375, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P187_tags_375) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P187_tags_375[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P187_constr_375, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P187_375, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P187_specs_375 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P188_377[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RSRPMRList_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P188_tags_377[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P188_specs_377 = { + sizeof(struct ProtocolExtensionContainer_170P188), + offsetof(struct ProtocolExtensionContainer_170P188, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P188 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P188_tags_377, + sizeof(asn_DEF_ProtocolExtensionContainer_170P188_tags_377) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P188_tags_377[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P188_tags_377, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P188_tags_377) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P188_tags_377[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P188_constr_377, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P188_377, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P188_specs_377 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P189_379[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_S1TNLLoadIndicator_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P189_tags_379[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P189_specs_379 = { + sizeof(struct ProtocolExtensionContainer_170P189), + offsetof(struct ProtocolExtensionContainer_170P189, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P189 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P189_tags_379, + sizeof(asn_DEF_ProtocolExtensionContainer_170P189_tags_379) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P189_tags_379[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P189_tags_379, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P189_tags_379) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P189_tags_379[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P189_constr_379, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P189_379, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P189_specs_379 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P190_381[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SecondaryRATUsageReport_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P190_tags_381[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P190_specs_381 = { + sizeof(struct ProtocolExtensionContainer_170P190), + offsetof(struct ProtocolExtensionContainer_170P190, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P190 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P190_tags_381, + sizeof(asn_DEF_ProtocolExtensionContainer_170P190_tags_381) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P190_tags_381[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P190_tags_381, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P190_tags_381) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P190_tags_381[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P190_constr_381, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P190_381, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P190_specs_381 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P191_383[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCell_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P191_tags_383[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P191_specs_383 = { + sizeof(struct ProtocolExtensionContainer_170P191), + offsetof(struct ProtocolExtensionContainer_170P191, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P191 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P191_tags_383, + sizeof(asn_DEF_ProtocolExtensionContainer_170P191_tags_383) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P191_tags_383[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P191_tags_383, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P191_tags_383) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P191_tags_383[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P191_constr_383, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P191_383, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P191_specs_383 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P192_385[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCell_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P192_tags_385[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P192_specs_385 = { + sizeof(struct ProtocolExtensionContainer_170P192), + offsetof(struct ProtocolExtensionContainer_170P192, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P192 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P192_tags_385, + sizeof(asn_DEF_ProtocolExtensionContainer_170P192_tags_385) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P192_tags_385[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P192_tags_385, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P192_tags_385) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P192_tags_385[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P192_constr_385, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P192_385, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P192_specs_385 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P193_387[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBResourceCoordinationInformationExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P193_tags_387[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P193_specs_387 = { + sizeof(struct ProtocolExtensionContainer_170P193), + offsetof(struct ProtocolExtensionContainer_170P193, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P193 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P193_tags_387, + sizeof(asn_DEF_ProtocolExtensionContainer_170P193_tags_387) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P193_tags_387[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P193_tags_387, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P193_tags_387) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P193_tags_387[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P193_constr_387, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P193_387, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P193_specs_387 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P194_389[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SpecialSubframe_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P194_tags_389[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P194_specs_389 = { + sizeof(struct ProtocolExtensionContainer_170P194), + offsetof(struct ProtocolExtensionContainer_170P194, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P194 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P194_tags_389, + sizeof(asn_DEF_ProtocolExtensionContainer_170P194_tags_389) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P194_tags_389[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P194_tags_389, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P194_tags_389) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P194_tags_389[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P194_constr_389, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P194_389, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P194_specs_389 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P195_391[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SubbandCQI_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P195_tags_391[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P195_specs_391 = { + sizeof(struct ProtocolExtensionContainer_170P195), + offsetof(struct ProtocolExtensionContainer_170P195, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P195 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P195_tags_391, + sizeof(asn_DEF_ProtocolExtensionContainer_170P195_tags_391) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P195_tags_391[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P195_tags_391, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P195_tags_391) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P195_tags_391[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P195_constr_391, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P195_391, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P195_specs_391 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P196_393[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P196_tags_393[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P196_specs_393 = { + sizeof(struct ProtocolExtensionContainer_170P196), + offsetof(struct ProtocolExtensionContainer_170P196, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P196 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P196_tags_393, + sizeof(asn_DEF_ProtocolExtensionContainer_170P196_tags_393) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P196_tags_393[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P196_tags_393, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P196_tags_393) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P196_tags_393[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P196_constr_393, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P196_393, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P196_specs_393 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P197_395[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ScheduledCommunicationTime_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P197_tags_395[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P197_specs_395 = { + sizeof(struct ProtocolExtensionContainer_170P197), + offsetof(struct ProtocolExtensionContainer_170P197, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P197 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P197_tags_395, + sizeof(asn_DEF_ProtocolExtensionContainer_170P197_tags_395) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P197_tags_395[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P197_tags_395, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P197_tags_395) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P197_tags_395[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P197_constr_395, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P197_395, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P197_specs_395 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P198_397[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SubbandCQIItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P198_tags_397[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P198_specs_397 = { + sizeof(struct ProtocolExtensionContainer_170P198), + offsetof(struct ProtocolExtensionContainer_170P198, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P198 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P198_tags_397, + sizeof(asn_DEF_ProtocolExtensionContainer_170P198_tags_397) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P198_tags_397[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P198_tags_397, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P198_tags_397) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P198_tags_397[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P198_constr_397, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P198_397, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P198_specs_397 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P199_399[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SULInformation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P199_tags_399[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P199_specs_399 = { + sizeof(struct ProtocolExtensionContainer_170P199), + offsetof(struct ProtocolExtensionContainer_170P199, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P199 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P199_tags_399, + sizeof(asn_DEF_ProtocolExtensionContainer_170P199_tags_399) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P199_tags_399[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P199_tags_399, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P199_tags_399) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P199_tags_399[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P199_constr_399, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P199_399, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P199_specs_399 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P200_401[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SupportedSULFreqBandItem_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P200_tags_401[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P200_specs_401 = { + sizeof(struct ProtocolExtensionContainer_170P200), + offsetof(struct ProtocolExtensionContainer_170P200, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P200 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P200_tags_401, + sizeof(asn_DEF_ProtocolExtensionContainer_170P200_tags_401) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P200_tags_401[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P200_tags_401, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P200_tags_401) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P200_tags_401[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P200_constr_401, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P200_401, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P200_specs_401 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P201_403[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TABasedMDT_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P201_tags_403[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P201_specs_403 = { + sizeof(struct ProtocolExtensionContainer_170P201), + offsetof(struct ProtocolExtensionContainer_170P201, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P201 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P201_tags_403, + sizeof(asn_DEF_ProtocolExtensionContainer_170P201_tags_403) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P201_tags_403[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P201_tags_403, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P201_tags_403) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P201_tags_403[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P201_constr_403, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P201_403, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P201_specs_403 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P202_405[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TAIBasedMDT_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P202_tags_405[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P202_specs_405 = { + sizeof(struct ProtocolExtensionContainer_170P202), + offsetof(struct ProtocolExtensionContainer_170P202, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P202 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P202_tags_405, + sizeof(asn_DEF_ProtocolExtensionContainer_170P202_tags_405) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P202_tags_405[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P202_tags_405, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P202_tags_405) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P202_tags_405[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P202_constr_405, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P202_405, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P202_specs_405 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P203_407[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TAI_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P203_tags_407[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P203_specs_407 = { + sizeof(struct ProtocolExtensionContainer_170P203), + offsetof(struct ProtocolExtensionContainer_170P203, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P203 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P203_tags_407, + sizeof(asn_DEF_ProtocolExtensionContainer_170P203_tags_407) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P203_tags_407[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P203_tags_407, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P203_tags_407) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P203_tags_407[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P203_constr_407, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P203_407, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P203_specs_407 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P204_409[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TABasedQMC_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P204_tags_409[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P204_specs_409 = { + sizeof(struct ProtocolExtensionContainer_170P204), + offsetof(struct ProtocolExtensionContainer_170P204, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P204 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P204_tags_409, + sizeof(asn_DEF_ProtocolExtensionContainer_170P204_tags_409) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P204_tags_409[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P204_tags_409, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P204_tags_409) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P204_tags_409[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P204_constr_409, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P204_409, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P204_specs_409 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P205_411[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TAIBasedQMC_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P205_tags_411[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P205_specs_411 = { + sizeof(struct ProtocolExtensionContainer_170P205), + offsetof(struct ProtocolExtensionContainer_170P205, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P205 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P205_tags_411, + sizeof(asn_DEF_ProtocolExtensionContainer_170P205_tags_411) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P205_tags_411[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P205_tags_411, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P205_tags_411) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P205_tags_411[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P205_constr_411, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P205_411, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P205_specs_411 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P206_413[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TDD_Info_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P206_tags_413[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P206_specs_413 = { + sizeof(struct ProtocolExtensionContainer_170P206), + offsetof(struct ProtocolExtensionContainer_170P206, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P206 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P206_tags_413, + sizeof(asn_DEF_ProtocolExtensionContainer_170P206_tags_413) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P206_tags_413[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P206_tags_413, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P206_tags_413) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P206_tags_413[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P206_constr_413, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P206_413, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P206_specs_413 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P207_415[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TraceActivation_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P207_tags_415[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P207_specs_415 = { + sizeof(struct ProtocolExtensionContainer_170P207), + offsetof(struct ProtocolExtensionContainer_170P207, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P207 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P207_tags_415, + sizeof(asn_DEF_ProtocolExtensionContainer_170P207_tags_415) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P207_tags_415[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P207_tags_415, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P207_tags_415) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P207_tags_415[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P207_constr_415, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P207_415, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P207_specs_415 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P208_417[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Tunnel_Information_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P208_tags_417[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P208_specs_417 = { + sizeof(struct ProtocolExtensionContainer_170P208), + offsetof(struct ProtocolExtensionContainer_170P208, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P208 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P208_tags_417, + sizeof(asn_DEF_ProtocolExtensionContainer_170P208_tags_417) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P208_tags_417[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P208_tags_417, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P208_tags_417) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P208_tags_417[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P208_constr_417, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P208_417, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P208_specs_417 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P209_419[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEAggregate_MaximumBitrate_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P209_tags_419[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P209_specs_419 = { + sizeof(struct ProtocolExtensionContainer_170P209), + offsetof(struct ProtocolExtensionContainer_170P209, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P209 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P209_tags_419, + sizeof(asn_DEF_ProtocolExtensionContainer_170P209_tags_419) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P209_tags_419[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P209_tags_419, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P209_tags_419) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P209_tags_419[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P209_constr_419, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P209_419, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P209_specs_419 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P210_421[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEAppLayerMeasConfig_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P210_tags_421[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P210_specs_421 = { + sizeof(struct ProtocolExtensionContainer_170P210), + offsetof(struct ProtocolExtensionContainer_170P210, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P210 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P210_tags_421, + sizeof(asn_DEF_ProtocolExtensionContainer_170P210_tags_421) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P210_tags_421[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P210_tags_421, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P210_tags_421) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P210_tags_421[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P210_constr_421, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P210_421, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P210_specs_421 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P211_423[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UESecurityCapabilities_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P211_tags_423[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P211_specs_423 = { + sizeof(struct ProtocolExtensionContainer_170P211), + offsetof(struct ProtocolExtensionContainer_170P211, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P211 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P211_tags_423, + sizeof(asn_DEF_ProtocolExtensionContainer_170P211_tags_423) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P211_tags_423[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P211_tags_423, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P211_tags_423) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P211_tags_423[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P211_constr_423, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P211_423, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P211_specs_423 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P212_425[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P212_tags_425[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P212_specs_425 = { + sizeof(struct ProtocolExtensionContainer_170P212), + offsetof(struct ProtocolExtensionContainer_170P212, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P212 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P212_tags_425, + sizeof(asn_DEF_ProtocolExtensionContainer_170P212_tags_425) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P212_tags_425[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P212_tags_425, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P212_tags_425) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P212_tags_425[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P212_constr_425, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P212_425, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P212_specs_425 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P213_427[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEsToBeResetList_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P213_tags_427[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P213_specs_427 = { + sizeof(struct ProtocolExtensionContainer_170P213), + offsetof(struct ProtocolExtensionContainer_170P213, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P213 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P213_tags_427, + sizeof(asn_DEF_ProtocolExtensionContainer_170P213_tags_427) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P213_tags_427[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P213_tags_427, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P213_tags_427) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P213_tags_427[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P213_constr_427, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P213_427, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P213_specs_427 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P214_429[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ULandDLSharing_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P214_tags_429[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P214_specs_429 = { + sizeof(struct ProtocolExtensionContainer_170P214), + offsetof(struct ProtocolExtensionContainer_170P214, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P214 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P214_tags_429, + sizeof(asn_DEF_ProtocolExtensionContainer_170P214_tags_429) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P214_tags_429[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P214_tags_429, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P214_tags_429) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P214_tags_429[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P214_constr_429, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P214_429, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P214_specs_429 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P215_431[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ULConfiguration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P215_tags_431[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P215_specs_431 = { + sizeof(struct ProtocolExtensionContainer_170P215), + offsetof(struct ProtocolExtensionContainer_170P215, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P215 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P215_tags_431, + sizeof(asn_DEF_ProtocolExtensionContainer_170P215_tags_431) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P215_tags_431[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P215_tags_431, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P215_tags_431) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P215_tags_431[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P215_constr_431, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P215_431, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P215_specs_431 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P216_433[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P216_tags_433[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P216_specs_433 = { + sizeof(struct ProtocolExtensionContainer_170P216), + offsetof(struct ProtocolExtensionContainer_170P216, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P216 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P216_tags_433, + sizeof(asn_DEF_ProtocolExtensionContainer_170P216_tags_433) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P216_tags_433[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P216_tags_433, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P216_tags_433) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P216_tags_433[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P216_constr_433, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P216_433, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P216_specs_433 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P217_435[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ULOnlySharing_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P217_tags_435[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P217_specs_435 = { + sizeof(struct ProtocolExtensionContainer_170P217), + offsetof(struct ProtocolExtensionContainer_170P217, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P217 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P217_tags_435, + sizeof(asn_DEF_ProtocolExtensionContainer_170P217_tags_435) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P217_tags_435[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P217_tags_435, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P217_tags_435) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P217_tags_435[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P217_constr_435, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P217_435, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P217_specs_435 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P218_437[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UsableABSInformationFDD_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P218_tags_437[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P218_specs_437 = { + sizeof(struct ProtocolExtensionContainer_170P218), + offsetof(struct ProtocolExtensionContainer_170P218, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P218 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P218_tags_437, + sizeof(asn_DEF_ProtocolExtensionContainer_170P218_tags_437) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P218_tags_437[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P218_tags_437, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P218_tags_437) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P218_tags_437[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P218_constr_437, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P218_437, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P218_specs_437 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P219_439[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UsableABSInformationTDD_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P219_tags_439[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P219_specs_439 = { + sizeof(struct ProtocolExtensionContainer_170P219), + offsetof(struct ProtocolExtensionContainer_170P219, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P219 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P219_tags_439, + sizeof(asn_DEF_ProtocolExtensionContainer_170P219_tags_439) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P219_tags_439[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P219_tags_439, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P219_tags_439) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P219_tags_439[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P219_constr_439, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P219_439, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P219_specs_439 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P220_441[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_V2XServicesAuthorized_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P220_tags_441[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P220_specs_441 = { + sizeof(struct ProtocolExtensionContainer_170P220), + offsetof(struct ProtocolExtensionContainer_170P220, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P220 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P220_tags_441, + sizeof(asn_DEF_ProtocolExtensionContainer_170P220_tags_441) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P220_tags_441[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P220_tags_441, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P220_tags_441) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P220_tags_441[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P220_constr_441, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P220_441, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P220_specs_441 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P221_443[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_WidebandCQI_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P221_tags_443[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P221_specs_443 = { + sizeof(struct ProtocolExtensionContainer_170P221), + offsetof(struct ProtocolExtensionContainer_170P221, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P221 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P221_tags_443, + sizeof(asn_DEF_ProtocolExtensionContainer_170P221_tags_443) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P221_tags_443[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P221_tags_443, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P221_tags_443) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P221_tags_443[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P221_constr_443, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P221_443, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P221_specs_443 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P222_445[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_WLANMeasurementConfiguration_ExtIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolExtensionContainer_170P222_tags_445[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P222_specs_445 = { + sizeof(struct ProtocolExtensionContainer_170P222), + offsetof(struct ProtocolExtensionContainer_170P222, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P222 = { + "ProtocolExtensionContainer", + "ProtocolExtensionContainer", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolExtensionContainer_170P222_tags_445, + sizeof(asn_DEF_ProtocolExtensionContainer_170P222_tags_445) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P222_tags_445[0]), /* 1 */ + asn_DEF_ProtocolExtensionContainer_170P222_tags_445, /* Same as above */ + sizeof(asn_DEF_ProtocolExtensionContainer_170P222_tags_445) + /sizeof(asn_DEF_ProtocolExtensionContainer_170P222_tags_445[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolExtensionContainer_170P222_constr_445, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolExtensionContainer_170P222_445, + 1, /* Single element */ + &asn_SPC_ProtocolExtensionContainer_170P222_specs_445 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.h new file mode 100644 index 0000000..daf9d14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionContainer.h @@ -0,0 +1,2504 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolExtensionContainer_H_ +#define _ProtocolExtensionContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UE_ContextInformation_ExtIEs; +struct E_RABs_ToBeSetup_ItemExtIEs; +struct UE_ContextReferenceAtSeNB_ItemExtIEs; +struct UE_ContextReferenceAtWT_ItemExtIEs; +struct UE_ContextReferenceAtSgNB_ItemExtIEs; +struct E_RABs_Admitted_Item_ExtIEs; +struct E_RABs_SubjectToStatusTransfer_ItemExtIEs; +struct CellInformation_Item_ExtIEs; +struct ServedCellsToModify_Item_ExtIEs; +struct CellToReport_Item_ExtIEs; +struct MeasurementInitiationResult_Item_ExtIEs; +struct MeasurementFailureCause_Item_ExtIEs; +struct CompleteFailureCauseInformation_Item_ExtIEs; +struct CellMeasurementResult_Item_ExtIEs; +struct ServedCellsToActivate_Item_ExtIEs; +struct ActivatedCellList_Item_ExtIEs; +struct RNL_Header_Item_ExtIEs; +struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs; +struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs; +struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs; +struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs; +struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs; +struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs; +struct UE_ContextInformationSeNBModReqExtIEs; +struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs; +struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs; +struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs; +struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs; +struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs; +struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs; +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs; +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs; +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs; +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs; +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs; +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs; +struct E_RABs_ToBeReleased_ModReqdItemExtIEs; +struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs; +struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs; +struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs; +struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs; +struct E_RABs_SubjectToCounterCheckItemExtIEs; +struct UE_ContextInformationRetrieve_ExtIEs; +struct E_RABs_ToBeSetupRetrieve_ItemExtIEs; +struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs; +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs; +struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs; +struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs; +struct UE_ContextInformationSgNBModReqExtIEs; +struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs; +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs; +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs; +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs; +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs; +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs; +struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs; +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs; +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs; +struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs; +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs; +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs; +struct ServedEUTRAcellsENDCX2Management_ExtIEs; +struct En_gNBServedCells_ExtIEs; +struct ServedNRCell_Information_ExtIEs; +struct FDD_InfoServedNRCell_Information_ExtIEs; +struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs; +struct TDD_InfoServedNRCell_Information_ExtIEs; +struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs; +struct NRNeighbour_Information_ExtIEs; +struct Limited_list_ExtIEs; +struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs; +struct ServedNRCellsToModify_Item_ExtIEs; +struct ServedNRCellsToActivate_Item_ExtIEs; +struct ActivatedNRCellList_Item_ExtIEs; +struct E_RABs_DataForwardingAddress_ItemExtIEs; +struct ABSInformationFDD_ExtIEs; +struct ABSInformationTDD_ExtIEs; +struct ABS_Status_ExtIEs; +struct AdditionalSpecialSubframe_Info_ExtIEs; +struct AdditionalSpecialSubframeExtension_Info_ExtIEs; +struct AllocationAndRetentionPriority_ExtIEs; +struct AS_SecurityInformation_ExtIEs; +struct BluetoothMeasurementConfiguration_ExtIEs; +struct CellBasedMDT_ExtIEs; +struct CellBasedQMC_ExtIEs; +struct CellReplacingInfo_ExtIEs; +struct CellType_ExtIEs; +struct CNTypeRestrictionsItem_ExtIEs; +struct CoMPHypothesisSetItem_ExtIEs; +struct CoMPInformation_ExtIEs; +struct CoMPInformationItem_ExtIEs; +struct CoMPInformationStartTime_ExtIEs; +struct CompositeAvailableCapacity_ExtIEs; +struct CompositeAvailableCapacityGroup_ExtIEs; +struct COUNTvalue_ExtIEs; +struct COUNTValueExtended_ExtIEs; +struct COUNTvaluePDCP_SNlength18_ExtIEs; +struct CriticalityDiagnostics_ExtIEs; +struct CriticalityDiagnostics_IE_List_ExtIEs; +struct CSIReportList_ExtIEs; +struct CSIReportPerCSIProcess_ExtIEs; +struct CSIReportPerCSIProcessItem_ExtIEs; +struct DataTrafficResourceIndication_ExtIEs; +struct DeliveryStatus_ExtIEs; +struct DynamicNAICSInformation_ExtIEs; +struct ECGI_ExtIEs; +struct EnhancedRNTP_ExtIEs; +struct EnhancedRNTPStartTime_ExtIEs; +struct EN_DC_ResourceConfigurationExtIEs; +struct ERABActivityNotifyItem_ExtIEs; +struct E_RAB_Level_QoS_Parameters_ExtIEs; +struct E_RAB_Item_ExtIEs; +struct E_RABUsageReport_Item_ExtIEs; +struct ExpectedUEBehaviour_ExtIEs; +struct ExpectedUEActivityBehaviour_ExtIEs; +struct ExtendedULInterferenceOverloadInfo_ExtIEs; +struct FDD_Info_ExtIEs; +struct ForbiddenTAs_Item_ExtIEs; +struct ForbiddenLAs_Item_ExtIEs; +struct FreqBandNrItem_ExtIEs; +struct GBR_QosInformation_ExtIEs; +struct GlobalENB_ID_ExtIEs; +struct GlobalGNB_ID_ExtIEs; +struct GTPtunnelEndpoint_ExtIEs; +struct GU_Group_ID_ExtIEs; +struct GUMMEI_ExtIEs; +struct HandoverRestrictionList_ExtIEs; +struct HWLoadIndicator_ExtIEs; +struct LastVisitedEUTRANCellInformation_ExtIEs; +struct LocationReportingInformation_ExtIEs; +struct M1PeriodicReporting_ExtIEs; +struct M1ThresholdEventA2_ExtIEs; +struct M3Configuration_ExtIEs; +struct M4Configuration_ExtIEs; +struct M5Configuration_ExtIEs; +struct M6Configuration_ExtIEs; +struct M7Configuration_ExtIEs; +struct MDT_Configuration_ExtIEs; +struct MeNBResourceCoordinationInformationExtIEs; +struct MBSFN_Subframe_Info_ExtIEs; +struct BandInfo_ExtIEs; +struct SplitSRB_ExtIEs; +struct UENRMeasurement_ExtIEs; +struct Neighbour_Information_ExtIEs; +struct NRFreqInfo_ExtIEs; +struct NRCGI_ExtIEs; +struct NR_TxBW_ExtIEs; +struct NRUESecurityCapabilities_ExtIEs; +struct PRACH_Configuration_ExtIEs; +struct PLMNAreaBasedQMC_ExtIEs; +struct ProSeAuthorized_ExtIEs; +struct ProtectedEUTRAResourceIndication_ExtIEs; +struct ProtectedFootprintTimePattern_ExtIEs; +struct ProtectedResourceList_Item_ExtIEs; +struct RadioResourceStatus_ExtIEs; +struct RelativeNarrowbandTxPower_ExtIEs; +struct ReservedSubframePattern_ExtIEs; +struct RLC_Status_ExtIEs; +struct RSRPMeasurementResult_ExtIEs; +struct RSRPMRList_ExtIEs; +struct S1TNLLoadIndicator_ExtIEs; +struct SecondaryRATUsageReport_Item_ExtIEs; +struct ServedCell_ExtIEs; +struct ServedCell_Information_ExtIEs; +struct SgNBResourceCoordinationInformationExtIEs; +struct SpecialSubframe_Info_ExtIEs; +struct SubbandCQI_ExtIEs; +struct Subscription_Based_UE_DifferentiationInfo_ExtIEs; +struct ScheduledCommunicationTime_ExtIEs; +struct SubbandCQIItem_ExtIEs; +struct SULInformation_ExtIEs; +struct SupportedSULFreqBandItem_ExtIEs; +struct TABasedMDT_ExtIEs; +struct TAIBasedMDT_ExtIEs; +struct TAI_Item_ExtIEs; +struct TABasedQMC_ExtIEs; +struct TAIBasedQMC_ExtIEs; +struct TDD_Info_ExtIEs; +struct TraceActivation_ExtIEs; +struct Tunnel_Information_ExtIEs; +struct UEAggregate_MaximumBitrate_ExtIEs; +struct UEAppLayerMeasConfig_ExtIEs; +struct UESecurityCapabilities_ExtIEs; +struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs; +struct UEsToBeResetList_Item_ExtIEs; +struct ULandDLSharing_ExtIEs; +struct ULConfiguration_ExtIEs; +struct UL_HighInterferenceIndicationInfo_Item_ExtIEs; +struct ULOnlySharing_ExtIEs; +struct UsableABSInformationFDD_ExtIEs; +struct UsableABSInformationTDD_ExtIEs; +struct V2XServicesAuthorized_ExtIEs; +struct WidebandCQI_ExtIEs; +struct WLANMeasurementConfiguration_ExtIEs; + +/* ProtocolExtensionContainer */ +typedef struct ProtocolExtensionContainer_170P0 { + A_SEQUENCE_OF(struct UE_ContextInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P0_t; +typedef struct ProtocolExtensionContainer_170P1 { + A_SEQUENCE_OF(struct E_RABs_ToBeSetup_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P1_t; +typedef struct ProtocolExtensionContainer_170P2 { + A_SEQUENCE_OF(struct UE_ContextReferenceAtSeNB_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P2_t; +typedef struct ProtocolExtensionContainer_170P3 { + A_SEQUENCE_OF(struct UE_ContextReferenceAtWT_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P3_t; +typedef struct ProtocolExtensionContainer_170P4 { + A_SEQUENCE_OF(struct UE_ContextReferenceAtSgNB_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P4_t; +typedef struct ProtocolExtensionContainer_170P5 { + A_SEQUENCE_OF(struct E_RABs_Admitted_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P5_t; +typedef struct ProtocolExtensionContainer_170P6 { + A_SEQUENCE_OF(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P6_t; +typedef struct ProtocolExtensionContainer_170P7 { + A_SEQUENCE_OF(struct CellInformation_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P7_t; +typedef struct ProtocolExtensionContainer_170P8 { + A_SEQUENCE_OF(struct ServedCellsToModify_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P8_t; +typedef struct ProtocolExtensionContainer_170P9 { + A_SEQUENCE_OF(struct CellToReport_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P9_t; +typedef struct ProtocolExtensionContainer_170P10 { + A_SEQUENCE_OF(struct MeasurementInitiationResult_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P10_t; +typedef struct ProtocolExtensionContainer_170P11 { + A_SEQUENCE_OF(struct MeasurementFailureCause_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P11_t; +typedef struct ProtocolExtensionContainer_170P12 { + A_SEQUENCE_OF(struct CompleteFailureCauseInformation_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P12_t; +typedef struct ProtocolExtensionContainer_170P13 { + A_SEQUENCE_OF(struct CellMeasurementResult_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P13_t; +typedef struct ProtocolExtensionContainer_170P14 { + A_SEQUENCE_OF(struct ServedCellsToActivate_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P14_t; +typedef struct ProtocolExtensionContainer_170P15 { + A_SEQUENCE_OF(struct ActivatedCellList_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P15_t; +typedef struct ProtocolExtensionContainer_170P16 { + A_SEQUENCE_OF(struct RNL_Header_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P16_t; +typedef struct ProtocolExtensionContainer_170P17 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P17_t; +typedef struct ProtocolExtensionContainer_170P18 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P18_t; +typedef struct ProtocolExtensionContainer_170P19 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P19_t; +typedef struct ProtocolExtensionContainer_170P20 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P20_t; +typedef struct ProtocolExtensionContainer_170P21 { + A_SEQUENCE_OF(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P21_t; +typedef struct ProtocolExtensionContainer_170P22 { + A_SEQUENCE_OF(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P22_t; +typedef struct ProtocolExtensionContainer_170P23 { + A_SEQUENCE_OF(struct UE_ContextInformationSeNBModReqExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P23_t; +typedef struct ProtocolExtensionContainer_170P24 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P24_t; +typedef struct ProtocolExtensionContainer_170P25 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P25_t; +typedef struct ProtocolExtensionContainer_170P26 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P26_t; +typedef struct ProtocolExtensionContainer_170P27 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P27_t; +typedef struct ProtocolExtensionContainer_170P28 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P28_t; +typedef struct ProtocolExtensionContainer_170P29 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P29_t; +typedef struct ProtocolExtensionContainer_170P30 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P30_t; +typedef struct ProtocolExtensionContainer_170P31 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P31_t; +typedef struct ProtocolExtensionContainer_170P32 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P32_t; +typedef struct ProtocolExtensionContainer_170P33 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P33_t; +typedef struct ProtocolExtensionContainer_170P34 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P34_t; +typedef struct ProtocolExtensionContainer_170P35 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P35_t; +typedef struct ProtocolExtensionContainer_170P36 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_ModReqdItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P36_t; +typedef struct ProtocolExtensionContainer_170P37 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P37_t; +typedef struct ProtocolExtensionContainer_170P38 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P38_t; +typedef struct ProtocolExtensionContainer_170P39 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P39_t; +typedef struct ProtocolExtensionContainer_170P40 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P40_t; +typedef struct ProtocolExtensionContainer_170P41 { + A_SEQUENCE_OF(struct E_RABs_SubjectToCounterCheckItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P41_t; +typedef struct ProtocolExtensionContainer_170P42 { + A_SEQUENCE_OF(struct UE_ContextInformationRetrieve_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P42_t; +typedef struct ProtocolExtensionContainer_170P43 { + A_SEQUENCE_OF(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P43_t; +typedef struct ProtocolExtensionContainer_170P44 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P44_t; +typedef struct ProtocolExtensionContainer_170P45 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P45_t; +typedef struct ProtocolExtensionContainer_170P46 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P46_t; +typedef struct ProtocolExtensionContainer_170P47 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P47_t; +typedef struct ProtocolExtensionContainer_170P48 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P48_t; +typedef struct ProtocolExtensionContainer_170P49 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P49_t; +typedef struct ProtocolExtensionContainer_170P50 { + A_SEQUENCE_OF(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P50_t; +typedef struct ProtocolExtensionContainer_170P51 { + A_SEQUENCE_OF(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P51_t; +typedef struct ProtocolExtensionContainer_170P52 { + A_SEQUENCE_OF(struct UE_ContextInformationSgNBModReqExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P52_t; +typedef struct ProtocolExtensionContainer_170P53 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P53_t; +typedef struct ProtocolExtensionContainer_170P54 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P54_t; +typedef struct ProtocolExtensionContainer_170P55 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P55_t; +typedef struct ProtocolExtensionContainer_170P56 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P56_t; +typedef struct ProtocolExtensionContainer_170P57 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P57_t; +typedef struct ProtocolExtensionContainer_170P58 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P58_t; +typedef struct ProtocolExtensionContainer_170P59 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P59_t; +typedef struct ProtocolExtensionContainer_170P60 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P60_t; +typedef struct ProtocolExtensionContainer_170P61 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P61_t; +typedef struct ProtocolExtensionContainer_170P62 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P62_t; +typedef struct ProtocolExtensionContainer_170P63 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P63_t; +typedef struct ProtocolExtensionContainer_170P64 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P64_t; +typedef struct ProtocolExtensionContainer_170P65 { + A_SEQUENCE_OF(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P65_t; +typedef struct ProtocolExtensionContainer_170P66 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P66_t; +typedef struct ProtocolExtensionContainer_170P67 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P67_t; +typedef struct ProtocolExtensionContainer_170P68 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P68_t; +typedef struct ProtocolExtensionContainer_170P69 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P69_t; +typedef struct ProtocolExtensionContainer_170P70 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P70_t; +typedef struct ProtocolExtensionContainer_170P71 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P71_t; +typedef struct ProtocolExtensionContainer_170P72 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P72_t; +typedef struct ProtocolExtensionContainer_170P73 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P73_t; +typedef struct ProtocolExtensionContainer_170P74 { + A_SEQUENCE_OF(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P74_t; +typedef struct ProtocolExtensionContainer_170P75 { + A_SEQUENCE_OF(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P75_t; +typedef struct ProtocolExtensionContainer_170P76 { + A_SEQUENCE_OF(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P76_t; +typedef struct ProtocolExtensionContainer_170P77 { + A_SEQUENCE_OF(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P77_t; +typedef struct ProtocolExtensionContainer_170P78 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P78_t; +typedef struct ProtocolExtensionContainer_170P79 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P79_t; +typedef struct ProtocolExtensionContainer_170P80 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P80_t; +typedef struct ProtocolExtensionContainer_170P81 { + A_SEQUENCE_OF(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P81_t; +typedef struct ProtocolExtensionContainer_170P82 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P82_t; +typedef struct ProtocolExtensionContainer_170P83 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P83_t; +typedef struct ProtocolExtensionContainer_170P84 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P84_t; +typedef struct ProtocolExtensionContainer_170P85 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P85_t; +typedef struct ProtocolExtensionContainer_170P86 { + A_SEQUENCE_OF(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P86_t; +typedef struct ProtocolExtensionContainer_170P87 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P87_t; +typedef struct ProtocolExtensionContainer_170P88 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P88_t; +typedef struct ProtocolExtensionContainer_170P89 { + A_SEQUENCE_OF(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P89_t; +typedef struct ProtocolExtensionContainer_170P90 { + A_SEQUENCE_OF(struct ServedEUTRAcellsENDCX2Management_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P90_t; +typedef struct ProtocolExtensionContainer_170P91 { + A_SEQUENCE_OF(struct En_gNBServedCells_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P91_t; +typedef struct ProtocolExtensionContainer_170P92 { + A_SEQUENCE_OF(struct ServedNRCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P92_t; +typedef struct ProtocolExtensionContainer_170P93 { + A_SEQUENCE_OF(struct FDD_InfoServedNRCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P93_t; +typedef struct ProtocolExtensionContainer_170P94 { + A_SEQUENCE_OF(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P94_t; +typedef struct ProtocolExtensionContainer_170P95 { + A_SEQUENCE_OF(struct TDD_InfoServedNRCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P95_t; +typedef struct ProtocolExtensionContainer_170P96 { + A_SEQUENCE_OF(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P96_t; +typedef struct ProtocolExtensionContainer_170P97 { + A_SEQUENCE_OF(struct NRNeighbour_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P97_t; +typedef struct ProtocolExtensionContainer_170P98 { + A_SEQUENCE_OF(struct Limited_list_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P98_t; +typedef struct ProtocolExtensionContainer_170P99 { + A_SEQUENCE_OF(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P99_t; +typedef struct ProtocolExtensionContainer_170P100 { + A_SEQUENCE_OF(struct ServedNRCellsToModify_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P100_t; +typedef struct ProtocolExtensionContainer_170P101 { + A_SEQUENCE_OF(struct ServedNRCellsToActivate_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P101_t; +typedef struct ProtocolExtensionContainer_170P102 { + A_SEQUENCE_OF(struct ActivatedNRCellList_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P102_t; +typedef struct ProtocolExtensionContainer_170P103 { + A_SEQUENCE_OF(struct E_RABs_DataForwardingAddress_ItemExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P103_t; +typedef struct ProtocolExtensionContainer_170P104 { + A_SEQUENCE_OF(struct ABSInformationFDD_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P104_t; +typedef struct ProtocolExtensionContainer_170P105 { + A_SEQUENCE_OF(struct ABSInformationTDD_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P105_t; +typedef struct ProtocolExtensionContainer_170P106 { + A_SEQUENCE_OF(struct ABS_Status_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P106_t; +typedef struct ProtocolExtensionContainer_170P107 { + A_SEQUENCE_OF(struct AdditionalSpecialSubframe_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P107_t; +typedef struct ProtocolExtensionContainer_170P108 { + A_SEQUENCE_OF(struct AdditionalSpecialSubframeExtension_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P108_t; +typedef struct ProtocolExtensionContainer_170P109 { + A_SEQUENCE_OF(struct AllocationAndRetentionPriority_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P109_t; +typedef struct ProtocolExtensionContainer_170P110 { + A_SEQUENCE_OF(struct AS_SecurityInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P110_t; +typedef struct ProtocolExtensionContainer_170P111 { + A_SEQUENCE_OF(struct BluetoothMeasurementConfiguration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P111_t; +typedef struct ProtocolExtensionContainer_170P112 { + A_SEQUENCE_OF(struct CellBasedMDT_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P112_t; +typedef struct ProtocolExtensionContainer_170P113 { + A_SEQUENCE_OF(struct CellBasedQMC_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P113_t; +typedef struct ProtocolExtensionContainer_170P114 { + A_SEQUENCE_OF(struct CellReplacingInfo_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P114_t; +typedef struct ProtocolExtensionContainer_170P115 { + A_SEQUENCE_OF(struct CellType_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P115_t; +typedef struct ProtocolExtensionContainer_170P116 { + A_SEQUENCE_OF(struct CNTypeRestrictionsItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P116_t; +typedef struct ProtocolExtensionContainer_170P117 { + A_SEQUENCE_OF(struct CoMPHypothesisSetItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P117_t; +typedef struct ProtocolExtensionContainer_170P118 { + A_SEQUENCE_OF(struct CoMPInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P118_t; +typedef struct ProtocolExtensionContainer_170P119 { + A_SEQUENCE_OF(struct CoMPInformationItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P119_t; +typedef struct ProtocolExtensionContainer_170P120 { + A_SEQUENCE_OF(struct CoMPInformationStartTime_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P120_t; +typedef struct ProtocolExtensionContainer_170P121 { + A_SEQUENCE_OF(struct CompositeAvailableCapacity_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P121_t; +typedef struct ProtocolExtensionContainer_170P122 { + A_SEQUENCE_OF(struct CompositeAvailableCapacityGroup_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P122_t; +typedef struct ProtocolExtensionContainer_170P123 { + A_SEQUENCE_OF(struct COUNTvalue_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P123_t; +typedef struct ProtocolExtensionContainer_170P124 { + A_SEQUENCE_OF(struct COUNTValueExtended_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P124_t; +typedef struct ProtocolExtensionContainer_170P125 { + A_SEQUENCE_OF(struct COUNTvaluePDCP_SNlength18_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P125_t; +typedef struct ProtocolExtensionContainer_170P126 { + A_SEQUENCE_OF(struct CriticalityDiagnostics_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P126_t; +typedef struct ProtocolExtensionContainer_170P127 { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_List_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P127_t; +typedef struct ProtocolExtensionContainer_170P128 { + A_SEQUENCE_OF(struct CSIReportList_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P128_t; +typedef struct ProtocolExtensionContainer_170P129 { + A_SEQUENCE_OF(struct CSIReportPerCSIProcess_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P129_t; +typedef struct ProtocolExtensionContainer_170P130 { + A_SEQUENCE_OF(struct CSIReportPerCSIProcessItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P130_t; +typedef struct ProtocolExtensionContainer_170P131 { + A_SEQUENCE_OF(struct DataTrafficResourceIndication_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P131_t; +typedef struct ProtocolExtensionContainer_170P132 { + A_SEQUENCE_OF(struct DeliveryStatus_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P132_t; +typedef struct ProtocolExtensionContainer_170P133 { + A_SEQUENCE_OF(struct DynamicNAICSInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P133_t; +typedef struct ProtocolExtensionContainer_170P134 { + A_SEQUENCE_OF(struct ECGI_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P134_t; +typedef struct ProtocolExtensionContainer_170P135 { + A_SEQUENCE_OF(struct EnhancedRNTP_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P135_t; +typedef struct ProtocolExtensionContainer_170P136 { + A_SEQUENCE_OF(struct EnhancedRNTPStartTime_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P136_t; +typedef struct ProtocolExtensionContainer_170P137 { + A_SEQUENCE_OF(struct EN_DC_ResourceConfigurationExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P137_t; +typedef struct ProtocolExtensionContainer_170P138 { + A_SEQUENCE_OF(struct ERABActivityNotifyItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P138_t; +typedef struct ProtocolExtensionContainer_170P139 { + A_SEQUENCE_OF(struct E_RAB_Level_QoS_Parameters_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P139_t; +typedef struct ProtocolExtensionContainer_170P140 { + A_SEQUENCE_OF(struct E_RAB_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P140_t; +typedef struct ProtocolExtensionContainer_170P141 { + A_SEQUENCE_OF(struct E_RABUsageReport_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P141_t; +typedef struct ProtocolExtensionContainer_170P142 { + A_SEQUENCE_OF(struct ExpectedUEBehaviour_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P142_t; +typedef struct ProtocolExtensionContainer_170P143 { + A_SEQUENCE_OF(struct ExpectedUEActivityBehaviour_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P143_t; +typedef struct ProtocolExtensionContainer_170P144 { + A_SEQUENCE_OF(struct ExtendedULInterferenceOverloadInfo_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P144_t; +typedef struct ProtocolExtensionContainer_170P145 { + A_SEQUENCE_OF(struct FDD_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P145_t; +typedef struct ProtocolExtensionContainer_170P146 { + A_SEQUENCE_OF(struct ForbiddenTAs_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P146_t; +typedef struct ProtocolExtensionContainer_170P147 { + A_SEQUENCE_OF(struct ForbiddenLAs_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P147_t; +typedef struct ProtocolExtensionContainer_170P148 { + A_SEQUENCE_OF(struct FreqBandNrItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P148_t; +typedef struct ProtocolExtensionContainer_170P149 { + A_SEQUENCE_OF(struct GBR_QosInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P149_t; +typedef struct ProtocolExtensionContainer_170P150 { + A_SEQUENCE_OF(struct GlobalENB_ID_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P150_t; +typedef struct ProtocolExtensionContainer_170P151 { + A_SEQUENCE_OF(struct GlobalGNB_ID_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P151_t; +typedef struct ProtocolExtensionContainer_170P152 { + A_SEQUENCE_OF(struct GTPtunnelEndpoint_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P152_t; +typedef struct ProtocolExtensionContainer_170P153 { + A_SEQUENCE_OF(struct GU_Group_ID_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P153_t; +typedef struct ProtocolExtensionContainer_170P154 { + A_SEQUENCE_OF(struct GUMMEI_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P154_t; +typedef struct ProtocolExtensionContainer_170P155 { + A_SEQUENCE_OF(struct HandoverRestrictionList_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P155_t; +typedef struct ProtocolExtensionContainer_170P156 { + A_SEQUENCE_OF(struct HWLoadIndicator_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P156_t; +typedef struct ProtocolExtensionContainer_170P157 { + A_SEQUENCE_OF(struct LastVisitedEUTRANCellInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P157_t; +typedef struct ProtocolExtensionContainer_170P158 { + A_SEQUENCE_OF(struct LocationReportingInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P158_t; +typedef struct ProtocolExtensionContainer_170P159 { + A_SEQUENCE_OF(struct M1PeriodicReporting_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P159_t; +typedef struct ProtocolExtensionContainer_170P160 { + A_SEQUENCE_OF(struct M1ThresholdEventA2_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P160_t; +typedef struct ProtocolExtensionContainer_170P161 { + A_SEQUENCE_OF(struct M3Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P161_t; +typedef struct ProtocolExtensionContainer_170P162 { + A_SEQUENCE_OF(struct M4Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P162_t; +typedef struct ProtocolExtensionContainer_170P163 { + A_SEQUENCE_OF(struct M5Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P163_t; +typedef struct ProtocolExtensionContainer_170P164 { + A_SEQUENCE_OF(struct M6Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P164_t; +typedef struct ProtocolExtensionContainer_170P165 { + A_SEQUENCE_OF(struct M7Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P165_t; +typedef struct ProtocolExtensionContainer_170P166 { + A_SEQUENCE_OF(struct MDT_Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P166_t; +typedef struct ProtocolExtensionContainer_170P167 { + A_SEQUENCE_OF(struct MeNBResourceCoordinationInformationExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P167_t; +typedef struct ProtocolExtensionContainer_170P168 { + A_SEQUENCE_OF(struct MBSFN_Subframe_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P168_t; +typedef struct ProtocolExtensionContainer_170P169 { + A_SEQUENCE_OF(struct BandInfo_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P169_t; +typedef struct ProtocolExtensionContainer_170P170 { + A_SEQUENCE_OF(struct SplitSRB_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P170_t; +typedef struct ProtocolExtensionContainer_170P171 { + A_SEQUENCE_OF(struct UENRMeasurement_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P171_t; +typedef struct ProtocolExtensionContainer_170P172 { + A_SEQUENCE_OF(struct Neighbour_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P172_t; +typedef struct ProtocolExtensionContainer_170P173 { + A_SEQUENCE_OF(struct NRFreqInfo_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P173_t; +typedef struct ProtocolExtensionContainer_170P174 { + A_SEQUENCE_OF(struct NRCGI_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P174_t; +typedef struct ProtocolExtensionContainer_170P175 { + A_SEQUENCE_OF(struct NR_TxBW_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P175_t; +typedef struct ProtocolExtensionContainer_170P176 { + A_SEQUENCE_OF(struct NRUESecurityCapabilities_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P176_t; +typedef struct ProtocolExtensionContainer_170P177 { + A_SEQUENCE_OF(struct PRACH_Configuration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P177_t; +typedef struct ProtocolExtensionContainer_170P178 { + A_SEQUENCE_OF(struct PLMNAreaBasedQMC_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P178_t; +typedef struct ProtocolExtensionContainer_170P179 { + A_SEQUENCE_OF(struct ProSeAuthorized_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P179_t; +typedef struct ProtocolExtensionContainer_170P180 { + A_SEQUENCE_OF(struct ProtectedEUTRAResourceIndication_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P180_t; +typedef struct ProtocolExtensionContainer_170P181 { + A_SEQUENCE_OF(struct ProtectedFootprintTimePattern_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P181_t; +typedef struct ProtocolExtensionContainer_170P182 { + A_SEQUENCE_OF(struct ProtectedResourceList_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P182_t; +typedef struct ProtocolExtensionContainer_170P183 { + A_SEQUENCE_OF(struct RadioResourceStatus_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P183_t; +typedef struct ProtocolExtensionContainer_170P184 { + A_SEQUENCE_OF(struct RelativeNarrowbandTxPower_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P184_t; +typedef struct ProtocolExtensionContainer_170P185 { + A_SEQUENCE_OF(struct ReservedSubframePattern_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P185_t; +typedef struct ProtocolExtensionContainer_170P186 { + A_SEQUENCE_OF(struct RLC_Status_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P186_t; +typedef struct ProtocolExtensionContainer_170P187 { + A_SEQUENCE_OF(struct RSRPMeasurementResult_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P187_t; +typedef struct ProtocolExtensionContainer_170P188 { + A_SEQUENCE_OF(struct RSRPMRList_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P188_t; +typedef struct ProtocolExtensionContainer_170P189 { + A_SEQUENCE_OF(struct S1TNLLoadIndicator_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P189_t; +typedef struct ProtocolExtensionContainer_170P190 { + A_SEQUENCE_OF(struct SecondaryRATUsageReport_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P190_t; +typedef struct ProtocolExtensionContainer_170P191 { + A_SEQUENCE_OF(struct ServedCell_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P191_t; +typedef struct ProtocolExtensionContainer_170P192 { + A_SEQUENCE_OF(struct ServedCell_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P192_t; +typedef struct ProtocolExtensionContainer_170P193 { + A_SEQUENCE_OF(struct SgNBResourceCoordinationInformationExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P193_t; +typedef struct ProtocolExtensionContainer_170P194 { + A_SEQUENCE_OF(struct SpecialSubframe_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P194_t; +typedef struct ProtocolExtensionContainer_170P195 { + A_SEQUENCE_OF(struct SubbandCQI_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P195_t; +typedef struct ProtocolExtensionContainer_170P196 { + A_SEQUENCE_OF(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P196_t; +typedef struct ProtocolExtensionContainer_170P197 { + A_SEQUENCE_OF(struct ScheduledCommunicationTime_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P197_t; +typedef struct ProtocolExtensionContainer_170P198 { + A_SEQUENCE_OF(struct SubbandCQIItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P198_t; +typedef struct ProtocolExtensionContainer_170P199 { + A_SEQUENCE_OF(struct SULInformation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P199_t; +typedef struct ProtocolExtensionContainer_170P200 { + A_SEQUENCE_OF(struct SupportedSULFreqBandItem_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P200_t; +typedef struct ProtocolExtensionContainer_170P201 { + A_SEQUENCE_OF(struct TABasedMDT_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P201_t; +typedef struct ProtocolExtensionContainer_170P202 { + A_SEQUENCE_OF(struct TAIBasedMDT_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P202_t; +typedef struct ProtocolExtensionContainer_170P203 { + A_SEQUENCE_OF(struct TAI_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P203_t; +typedef struct ProtocolExtensionContainer_170P204 { + A_SEQUENCE_OF(struct TABasedQMC_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P204_t; +typedef struct ProtocolExtensionContainer_170P205 { + A_SEQUENCE_OF(struct TAIBasedQMC_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P205_t; +typedef struct ProtocolExtensionContainer_170P206 { + A_SEQUENCE_OF(struct TDD_Info_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P206_t; +typedef struct ProtocolExtensionContainer_170P207 { + A_SEQUENCE_OF(struct TraceActivation_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P207_t; +typedef struct ProtocolExtensionContainer_170P208 { + A_SEQUENCE_OF(struct Tunnel_Information_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P208_t; +typedef struct ProtocolExtensionContainer_170P209 { + A_SEQUENCE_OF(struct UEAggregate_MaximumBitrate_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P209_t; +typedef struct ProtocolExtensionContainer_170P210 { + A_SEQUENCE_OF(struct UEAppLayerMeasConfig_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P210_t; +typedef struct ProtocolExtensionContainer_170P211 { + A_SEQUENCE_OF(struct UESecurityCapabilities_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P211_t; +typedef struct ProtocolExtensionContainer_170P212 { + A_SEQUENCE_OF(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P212_t; +typedef struct ProtocolExtensionContainer_170P213 { + A_SEQUENCE_OF(struct UEsToBeResetList_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P213_t; +typedef struct ProtocolExtensionContainer_170P214 { + A_SEQUENCE_OF(struct ULandDLSharing_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P214_t; +typedef struct ProtocolExtensionContainer_170P215 { + A_SEQUENCE_OF(struct ULConfiguration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P215_t; +typedef struct ProtocolExtensionContainer_170P216 { + A_SEQUENCE_OF(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P216_t; +typedef struct ProtocolExtensionContainer_170P217 { + A_SEQUENCE_OF(struct ULOnlySharing_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P217_t; +typedef struct ProtocolExtensionContainer_170P218 { + A_SEQUENCE_OF(struct UsableABSInformationFDD_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P218_t; +typedef struct ProtocolExtensionContainer_170P219 { + A_SEQUENCE_OF(struct UsableABSInformationTDD_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P219_t; +typedef struct ProtocolExtensionContainer_170P220 { + A_SEQUENCE_OF(struct V2XServicesAuthorized_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P220_t; +typedef struct ProtocolExtensionContainer_170P221 { + A_SEQUENCE_OF(struct WidebandCQI_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P221_t; +typedef struct ProtocolExtensionContainer_170P222 { + A_SEQUENCE_OF(struct WLANMeasurementConfiguration_ExtIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolExtensionContainer_170P222_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P19_constr_39; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P20; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P20_specs_41; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P20_41[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P20_constr_41; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P21; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P21_specs_43; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P21_43[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P21_constr_43; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P22; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P22_specs_45; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P22_45[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P22_constr_45; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P23; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P23_specs_47; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P23_47[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P23_constr_47; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P24; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P24_specs_49; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P24_49[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P24_constr_49; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P25; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P25_specs_51; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P25_51[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P25_constr_51; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P26; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P26_specs_53; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P26_53[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P26_constr_53; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P27; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P27_specs_55; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P27_55[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P27_constr_55; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P28; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P28_specs_57; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P28_57[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P28_constr_57; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P29; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P29_specs_59; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P29_59[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P29_constr_59; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P30; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P30_specs_61; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P30_61[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P30_constr_61; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P31; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P31_specs_63; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P31_63[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P31_constr_63; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P32; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P32_specs_65; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P32_65[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P32_constr_65; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P33; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P33_specs_67; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P33_67[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P33_constr_67; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P34; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P34_specs_69; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P34_69[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P34_constr_69; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P35; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P35_specs_71; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P35_71[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P35_constr_71; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P36; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P36_specs_73; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P36_73[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P36_constr_73; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P37; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P37_specs_75; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P37_75[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P37_constr_75; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P38; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P38_specs_77; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P38_77[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P38_constr_77; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P39; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P39_specs_79; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P39_79[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P39_constr_79; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P40; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P40_specs_81; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P40_81[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P40_constr_81; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P41; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P41_specs_83; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P41_83[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P41_constr_83; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P42; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P42_specs_85; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P42_85[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P42_constr_85; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P43; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P43_specs_87; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P43_87[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P43_constr_87; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P44; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P44_specs_89; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P44_89[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P44_constr_89; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P45; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P45_specs_91; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P45_91[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P45_constr_91; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P46; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P46_specs_93; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P46_93[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P46_constr_93; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P47; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P47_specs_95; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P47_95[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P47_constr_95; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P48; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P48_specs_97; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P48_97[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P48_constr_97; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P49; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P49_specs_99; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P49_99[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P49_constr_99; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P50; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P50_specs_101; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P50_101[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P50_constr_101; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P51; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P51_specs_103; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P51_103[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P51_constr_103; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P52; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P52_specs_105; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P52_105[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P52_constr_105; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P53; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P53_specs_107; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P53_107[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P53_constr_107; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P54; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P54_specs_109; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P54_109[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P54_constr_109; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P55; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P55_specs_111; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P55_111[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P55_constr_111; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P56; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P56_specs_113; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P56_113[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P56_constr_113; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P57; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P57_specs_115; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P57_115[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P57_constr_115; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P58; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P58_specs_117; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P58_117[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P58_constr_117; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P59; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P59_specs_119; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P59_119[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P59_constr_119; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P60; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P60_specs_121; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P60_121[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P60_constr_121; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P61; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P61_specs_123; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P61_123[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P61_constr_123; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P62; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P62_specs_125; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P62_125[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P62_constr_125; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P63; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P63_specs_127; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P63_127[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P63_constr_127; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P64; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P64_specs_129; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P64_129[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P64_constr_129; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P65; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P65_specs_131; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P65_131[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P65_constr_131; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P66; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P66_specs_133; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P66_133[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P66_constr_133; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P67; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P67_specs_135; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P67_135[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P67_constr_135; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P68; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P68_specs_137; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P68_137[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P68_constr_137; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P69; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P69_specs_139; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P69_139[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P69_constr_139; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P70; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P70_specs_141; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P70_141[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P70_constr_141; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P71; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P71_specs_143; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P71_143[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P71_constr_143; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P72; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P72_specs_145; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P72_145[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P72_constr_145; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P73; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P73_specs_147; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P73_147[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P73_constr_147; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P74; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P74_specs_149; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P74_149[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P74_constr_149; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P75; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P75_specs_151; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P75_151[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P75_constr_151; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P76; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P76_specs_153; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P76_153[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P76_constr_153; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P77; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P77_specs_155; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P77_155[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P77_constr_155; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P78; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P78_specs_157; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P78_157[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P78_constr_157; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P79; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P79_specs_159; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P79_159[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P79_constr_159; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P80; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P80_specs_161; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P80_161[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P80_constr_161; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P81; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P81_specs_163; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P81_163[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P81_constr_163; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P82; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P82_specs_165; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P82_165[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P82_constr_165; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P83; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P83_specs_167; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P83_167[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P83_constr_167; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P84; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P84_specs_169; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P84_169[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P84_constr_169; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P85; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P85_specs_171; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P85_171[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P85_constr_171; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P86; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P86_specs_173; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P86_173[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P86_constr_173; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P87; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P87_specs_175; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P87_175[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P87_constr_175; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P88; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P88_specs_177; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P88_177[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P88_constr_177; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P89; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P89_specs_179; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P89_179[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P89_constr_179; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P90; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P90_specs_181; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P90_181[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P90_constr_181; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P91; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P91_specs_183; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P91_183[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P91_constr_183; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P92; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P92_specs_185; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P92_185[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P92_constr_185; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P93; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P93_specs_187; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P93_187[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P93_constr_187; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P94; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P94_specs_189; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P94_189[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P94_constr_189; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P95; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P95_specs_191; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P95_191[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P95_constr_191; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P96; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P96_specs_193; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P96_193[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P96_constr_193; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P97; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P97_specs_195; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P97_195[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P97_constr_195; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P98; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P98_specs_197; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P98_197[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P98_constr_197; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P99; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P99_specs_199; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P99_199[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P99_constr_199; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P100; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P100_specs_201; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P100_201[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P100_constr_201; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P101; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P101_specs_203; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P101_203[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P101_constr_203; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P102; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P102_specs_205; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P102_205[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P102_constr_205; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P103; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P103_specs_207; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P103_207[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P103_constr_207; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P104; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P104_specs_209; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P104_209[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P104_constr_209; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P105; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P105_specs_211; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P105_211[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P105_constr_211; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P106; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P106_specs_213; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P106_213[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P106_constr_213; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P107; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P107_specs_215; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P107_215[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P107_constr_215; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P108; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P108_specs_217; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P108_217[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P108_constr_217; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P109; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P109_specs_219; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P109_219[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P109_constr_219; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P110; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P110_specs_221; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P110_221[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P110_constr_221; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P111; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P111_specs_223; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P111_223[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P111_constr_223; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P112; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P112_specs_225; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P112_225[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P112_constr_225; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P113; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P113_specs_227; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P113_227[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P113_constr_227; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P114; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P114_specs_229; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P114_229[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P114_constr_229; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P115; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P115_specs_231; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P115_231[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P115_constr_231; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P116; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P116_specs_233; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P116_233[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P116_constr_233; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P117; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P117_specs_235; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P117_235[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P117_constr_235; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P118; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P118_specs_237; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P118_237[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P118_constr_237; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P119; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P119_specs_239; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P119_239[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P119_constr_239; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P120; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P120_specs_241; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P120_241[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P120_constr_241; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P121; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P121_specs_243; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P121_243[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P121_constr_243; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P122; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P122_specs_245; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P122_245[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P122_constr_245; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P123; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P123_specs_247; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P123_247[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P123_constr_247; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P124; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P124_specs_249; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P124_249[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P124_constr_249; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P125; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P125_specs_251; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P125_251[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P125_constr_251; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P126; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P126_specs_253; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P126_253[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P126_constr_253; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P127; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P127_specs_255; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P127_255[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P127_constr_255; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P128; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P128_specs_257; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P128_257[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P128_constr_257; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P129; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P129_specs_259; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P129_259[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P129_constr_259; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P130; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P130_specs_261; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P130_261[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P130_constr_261; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P131; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P131_specs_263; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P131_263[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P131_constr_263; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P132; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P132_specs_265; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P132_265[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P132_constr_265; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P133; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P133_specs_267; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P133_267[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P133_constr_267; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P134; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P134_specs_269; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P134_269[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P134_constr_269; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P135; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P135_specs_271; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P135_271[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P135_constr_271; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P136; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P136_specs_273; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P136_273[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P136_constr_273; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P137; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P137_specs_275; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P137_275[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P137_constr_275; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P138; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P138_specs_277; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P138_277[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P138_constr_277; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P139; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P139_specs_279; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P139_279[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P139_constr_279; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P140; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P140_specs_281; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P140_281[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P140_constr_281; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P141; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P141_specs_283; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P141_283[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P141_constr_283; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P142; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P142_specs_285; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P142_285[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P142_constr_285; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P143; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P143_specs_287; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P143_287[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P143_constr_287; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P144; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P144_specs_289; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P144_289[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P144_constr_289; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P145; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P145_specs_291; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P145_291[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P145_constr_291; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P146; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P146_specs_293; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P146_293[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P146_constr_293; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P147; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P147_specs_295; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P147_295[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P147_constr_295; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P148; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P148_specs_297; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P148_297[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P148_constr_297; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P149; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P149_specs_299; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P149_299[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P149_constr_299; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P150; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P150_specs_301; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P150_301[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P150_constr_301; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P151; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P151_specs_303; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P151_303[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P151_constr_303; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P152; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P152_specs_305; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P152_305[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P152_constr_305; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P153; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P153_specs_307; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P153_307[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P153_constr_307; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P154; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P154_specs_309; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P154_309[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P154_constr_309; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P155; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P155_specs_311; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P155_311[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P155_constr_311; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P156; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P156_specs_313; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P156_313[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P156_constr_313; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P157; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P157_specs_315; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P157_315[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P157_constr_315; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P158; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P158_specs_317; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P158_317[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P158_constr_317; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P159; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P159_specs_319; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P159_319[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P159_constr_319; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P160; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P160_specs_321; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P160_321[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P160_constr_321; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P161; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P161_specs_323; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P161_323[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P161_constr_323; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P162; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P162_specs_325; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P162_325[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P162_constr_325; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P163; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P163_specs_327; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P163_327[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P163_constr_327; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P164; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P164_specs_329; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P164_329[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P164_constr_329; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P165; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P165_specs_331; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P165_331[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P165_constr_331; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P166; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P166_specs_333; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P166_333[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P166_constr_333; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P167; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P167_specs_335; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P167_335[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P167_constr_335; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P168; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P168_specs_337; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P168_337[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P168_constr_337; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P169; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P169_specs_339; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P169_339[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P169_constr_339; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P170; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P170_specs_341; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P170_341[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P170_constr_341; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P171; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P171_specs_343; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P171_343[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P171_constr_343; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P172; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P172_specs_345; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P172_345[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P172_constr_345; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P173; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P173_specs_347; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P173_347[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P173_constr_347; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P174; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P174_specs_349; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P174_349[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P174_constr_349; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P175; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P175_specs_351; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P175_351[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P175_constr_351; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P176; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P176_specs_353; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P176_353[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P176_constr_353; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P177; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P177_specs_355; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P177_355[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P177_constr_355; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P178; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P178_specs_357; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P178_357[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P178_constr_357; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P179; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P179_specs_359; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P179_359[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P179_constr_359; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P180; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P180_specs_361; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P180_361[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P180_constr_361; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P181; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P181_specs_363; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P181_363[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P181_constr_363; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P182; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P182_specs_365; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P182_365[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P182_constr_365; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P183; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P183_specs_367; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P183_367[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P183_constr_367; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P184; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P184_specs_369; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P184_369[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P184_constr_369; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P185; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P185_specs_371; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P185_371[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P185_constr_371; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P186; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P186_specs_373; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P186_373[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P186_constr_373; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P187; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P187_specs_375; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P187_375[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P187_constr_375; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P188; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P188_specs_377; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P188_377[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P188_constr_377; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P189; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P189_specs_379; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P189_379[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P189_constr_379; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P190; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P190_specs_381; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P190_381[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P190_constr_381; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P191; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P191_specs_383; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P191_383[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P191_constr_383; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P192; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P192_specs_385; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P192_385[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P192_constr_385; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P193; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P193_specs_387; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P193_387[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P193_constr_387; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P194; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P194_specs_389; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P194_389[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P194_constr_389; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P195; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P195_specs_391; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P195_391[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P195_constr_391; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P196; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P196_specs_393; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P196_393[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P196_constr_393; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P197; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P197_specs_395; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P197_395[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P197_constr_395; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P198; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P198_specs_397; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P198_397[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P198_constr_397; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P199; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P199_specs_399; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P199_399[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P199_constr_399; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P200; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P200_specs_401; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P200_401[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P200_constr_401; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P201; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P201_specs_403; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P201_403[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P201_constr_403; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P202; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P202_specs_405; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P202_405[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P202_constr_405; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P203; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P203_specs_407; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P203_407[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P203_constr_407; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P204; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P204_specs_409; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P204_409[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P204_constr_409; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P205; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P205_specs_411; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P205_411[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P205_constr_411; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P206; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P206_specs_413; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P206_413[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P206_constr_413; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P207; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P207_specs_415; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P207_415[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P207_constr_415; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P208; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P208_specs_417; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P208_417[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P208_constr_417; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P209; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P209_specs_419; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P209_419[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P209_constr_419; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P210; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P210_specs_421; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P210_421[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P210_constr_421; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P211; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P211_specs_423; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P211_423[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P211_constr_423; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P212; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P212_specs_425; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P212_425[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P212_constr_425; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P213; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P213_specs_427; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P213_427[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P213_constr_427; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P214; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P214_specs_429; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P214_429[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P214_constr_429; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P215; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P215_specs_431; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P215_431[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P215_constr_431; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P216; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P216_specs_433; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P216_433[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P216_constr_433; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P217; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P217_specs_435; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P217_435[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P217_constr_435; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P218; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P218_specs_437; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P218_437[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P218_constr_437; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P219; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P219_specs_439; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P219_439[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P219_constr_439; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P220; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P220_specs_441; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P220_441[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P220_constr_441; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P221; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P221_specs_443; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P221_443[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P221_constr_443; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolExtensionContainer_170P222; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolExtensionContainer_170P222_specs_445; +extern asn_TYPE_member_t asn_MBR_ProtocolExtensionContainer_170P222_445[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolExtensionContainer_170P222_constr_445; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolExtensionContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.c new file mode 100644 index 0000000..1646b37 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.c @@ -0,0 +1,40927 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolExtensionField.h" + +static const long asn_VAL_1_id_ManagementBasedMDTallowed = 74; +static const long asn_VAL_1_ignore = 1; +static const long asn_VAL_1_optional = 0; +static const long asn_VAL_2_id_ManagementBasedMDTPLMNList = 89; +static const long asn_VAL_2_ignore = 1; +static const long asn_VAL_2_optional = 0; +static const long asn_VAL_3_id_UESidelinkAggregateMaximumBitRate = 184; +static const long asn_VAL_3_ignore = 1; +static const long asn_VAL_3_optional = 0; +static const asn_ioc_cell_t asn_IOS_UE_ContextInformation_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_ManagementBasedMDTallowed }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_ignore }, + { "&Extension", aioc__type, &asn_DEF_ManagementBasedMDTallowed }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_ManagementBasedMDTPLMNList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_ignore }, + { "&Extension", aioc__type, &asn_DEF_MDTPLMNList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_UESidelinkAggregateMaximumBitRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_ignore }, + { "&Extension", aioc__type, &asn_DEF_UESidelinkAggregateMaximumBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_optional } +}; +static const asn_ioc_set_t asn_IOS_UE_ContextInformation_ExtIEs_1[] = { + { 3, 4, asn_IOS_UE_ContextInformation_ExtIEs_1_rows } +}; +static const long asn_VAL_4_id_BearerType = 171; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_4_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeSetup_ItemExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_BearerType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&Extension", aioc__type, &asn_DEF_BearerType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeSetup_ItemExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeSetup_ItemExtIEs_1_rows } +}; +static const long asn_VAL_5_id_ReceiveStatusOfULPDCPSDUsExtended = 91; +static const long asn_VAL_5_ignore = 1; +static const long asn_VAL_5_optional = 0; +static const long asn_VAL_6_id_ULCOUNTValueExtended = 92; +static const long asn_VAL_6_ignore = 1; +static const long asn_VAL_6_optional = 0; +static const long asn_VAL_7_id_DLCOUNTValueExtended = 93; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_7_optional = 0; +static const long asn_VAL_8_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_8_optional = 0; +static const long asn_VAL_9_id_ULCOUNTValuePDCP_SNlength18 = 151; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_optional = 0; +static const long asn_VAL_10_id_DLCOUNTValuePDCP_SNlength18 = 152; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_ReceiveStatusOfULPDCPSDUsExtended }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_ignore }, + { "&Extension", aioc__type, &asn_DEF_ReceiveStatusOfULPDCPSDUsExtended }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_ULCOUNTValueExtended }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_ignore }, + { "&Extension", aioc__type, &asn_DEF_COUNTValueExtended }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_DLCOUNTValueExtended }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&Extension", aioc__type, &asn_DEF_COUNTValueExtended }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&Extension", aioc__type, &asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_ULCOUNTValuePDCP_SNlength18 }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Extension", aioc__type, &asn_DEF_COUNTvaluePDCP_SNlength18 }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_DLCOUNTValuePDCP_SNlength18 }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Extension", aioc__type, &asn_DEF_COUNTvaluePDCP_SNlength18 }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1[] = { + { 6, 4, asn_IOS_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1_rows } +}; +static const long asn_VAL_11_id_ABSInformation = 61; +static const long asn_VAL_11_ignore = 1; +static const long asn_VAL_11_optional = 0; +static const long asn_VAL_12_id_InvokeIndication = 62; +static const long asn_VAL_12_ignore = 1; +static const long asn_VAL_12_optional = 0; +static const long asn_VAL_13_id_IntendedULDLConfiguration = 99; +static const long asn_VAL_13_ignore = 1; +static const long asn_VAL_13_optional = 0; +static const long asn_VAL_14_id_ExtendedULInterferenceOverloadInfo = 100; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const long asn_VAL_15_id_CoMPInformation = 108; +static const long asn_VAL_15_ignore = 1; +static const long asn_VAL_15_optional = 0; +static const long asn_VAL_16_id_DynamicDLTransmissionInformation = 106; +static const long asn_VAL_16_ignore = 1; +static const long asn_VAL_16_optional = 0; +static const asn_ioc_cell_t asn_IOS_CellInformation_Item_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_ABSInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }, + { "&Extension", aioc__type, &asn_DEF_ABSInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_InvokeIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_ignore }, + { "&Extension", aioc__type, &asn_DEF_InvokeIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_IntendedULDLConfiguration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_ignore }, + { "&Extension", aioc__type, &asn_DEF_SubframeAssignment }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_ExtendedULInterferenceOverloadInfo }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedULInterferenceOverloadInfo }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_CoMPInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_ignore }, + { "&Extension", aioc__type, &asn_DEF_CoMPInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_DynamicDLTransmissionInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_ignore }, + { "&Extension", aioc__type, &asn_DEF_DynamicDLTransmissionInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_optional } +}; +static const asn_ioc_set_t asn_IOS_CellInformation_Item_ExtIEs_1[] = { + { 6, 4, asn_IOS_CellInformation_Item_ExtIEs_1_rows } +}; +static const long asn_VAL_17_id_DeactivationIndication = 59; +static const long asn_VAL_17_ignore = 1; +static const long asn_VAL_17_optional = 0; +static const asn_ioc_cell_t asn_IOS_ServedCellsToModify_Item_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_DeactivationIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_ignore }, + { "&Extension", aioc__type, &asn_DEF_DeactivationIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_optional } +}; +static const asn_ioc_set_t asn_IOS_ServedCellsToModify_Item_ExtIEs_1[] = { + { 1, 4, asn_IOS_ServedCellsToModify_Item_ExtIEs_1_rows } +}; +static const long asn_VAL_18_id_CompositeAvailableCapacityGroup = 42; +static const long asn_VAL_18_ignore = 1; +static const long asn_VAL_18_optional = 0; +static const long asn_VAL_19_id_ABS_Status = 63; +static const long asn_VAL_19_ignore = 1; +static const long asn_VAL_19_optional = 0; +static const long asn_VAL_20_id_RSRPMRList = 110; +static const long asn_VAL_20_ignore = 1; +static const long asn_VAL_20_optional = 0; +static const long asn_VAL_21_id_CSIReportList = 146; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_optional = 0; +static const long asn_VAL_22_id_CellReportingIndicator = 170; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_CellMeasurementResult_Item_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_CompositeAvailableCapacityGroup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_ignore }, + { "&Extension", aioc__type, &asn_DEF_CompositeAvailableCapacityGroup }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_ABS_Status }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_ignore }, + { "&Extension", aioc__type, &asn_DEF_ABS_Status }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RSRPMRList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_ignore }, + { "&Extension", aioc__type, &asn_DEF_RSRPMRList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_CSIReportList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Extension", aioc__type, &asn_DEF_CSIReportList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CellReportingIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Extension", aioc__type, &asn_DEF_CellReportingIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_CellMeasurementResult_Item_ExtIEs_1[] = { + { 5, 4, asn_IOS_CellMeasurementResult_Item_ExtIEs_1_rows } +}; +static const long asn_VAL_23_id_Correlation_ID = 166; +static const long asn_VAL_23_ignore = 1; +static const long asn_VAL_23_optional = 0; +static const long asn_VAL_24_id_SIPTO_Correlation_ID = 167; +static const long asn_VAL_24_ignore = 1; +static const long asn_VAL_24_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_Correlation_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_ignore }, + { "&Extension", aioc__type, &asn_DEF_Correlation_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_SIPTO_Correlation_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_ignore }, + { "&Extension", aioc__type, &asn_DEF_Correlation_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1_rows } +}; +static const long asn_VAL_25_id_Correlation_ID = 166; +static const long asn_VAL_25_ignore = 1; +static const long asn_VAL_25_optional = 0; +static const long asn_VAL_26_id_SIPTO_Correlation_ID = 167; +static const long asn_VAL_26_ignore = 1; +static const long asn_VAL_26_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_Correlation_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_ignore }, + { "&Extension", aioc__type, &asn_DEF_Correlation_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_SIPTO_Correlation_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_ignore }, + { "&Extension", aioc__type, &asn_DEF_Correlation_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1_rows } +}; +static const long asn_VAL_27_id_UESidelinkAggregateMaximumBitRate = 184; +static const long asn_VAL_27_ignore = 1; +static const long asn_VAL_27_optional = 0; +static const asn_ioc_cell_t asn_IOS_UE_ContextInformationRetrieve_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_UESidelinkAggregateMaximumBitRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_ignore }, + { "&Extension", aioc__type, &asn_DEF_UESidelinkAggregateMaximumBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_optional } +}; +static const asn_ioc_set_t asn_IOS_UE_ContextInformationRetrieve_ExtIEs_1[] = { + { 1, 4, asn_IOS_UE_ContextInformationRetrieve_ExtIEs_1_rows } +}; +static const long asn_VAL_28_id_uL_GTPtunnelEndpoint = 185; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_dL_Forwarding = 306; +static const long asn_VAL_29_ignore = 1; +static const long asn_VAL_29_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_uL_GTPtunnelEndpoint }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Extension", aioc__type, &asn_DEF_GTPtunnelEndpoint }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_dL_Forwarding }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_ignore }, + { "&Extension", aioc__type, &asn_DEF_DL_Forwarding }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1_rows } +}; +static const long asn_VAL_30_id_RLCMode_transferred = 317; +static const long asn_VAL_30_ignore = 1; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RLCMode_transferred }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLCMode }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_31_id_uLpDCPSnLength = 302; +static const long asn_VAL_31_ignore = 1; +static const long asn_VAL_31_optional = 0; +static const long asn_VAL_32_id_dLPDCPSnLength = 311; +static const long asn_VAL_32_ignore = 1; +static const long asn_VAL_32_optional = 0; +static const long asn_VAL_33_id_duplicationActivation = 315; +static const long asn_VAL_33_ignore = 1; +static const long asn_VAL_33_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_duplicationActivation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_ignore }, + { "&Extension", aioc__type, &asn_DEF_DuplicationActivation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 3, 4, asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_34_id_uLpDCPSnLength = 302; +static const long asn_VAL_34_ignore = 1; +static const long asn_VAL_34_optional = 0; +static const long asn_VAL_35_id_dLPDCPSnLength = 311; +static const long asn_VAL_35_ignore = 1; +static const long asn_VAL_35_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_36_id_lCID = 314; +static const long asn_VAL_36_ignore = 1; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_lCID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_ignore }, + { "&Extension", aioc__type, &asn_DEF_LCID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_37_id_SubscriberProfileIDforRFP = 275; +static const long asn_VAL_37_ignore = 1; +static const long asn_VAL_37_optional = 0; +static const asn_ioc_cell_t asn_IOS_UE_ContextInformationSgNBModReqExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_SubscriberProfileIDforRFP }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_ignore }, + { "&Extension", aioc__type, &asn_DEF_SubscriberProfileIDforRFP }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_optional } +}; +static const asn_ioc_set_t asn_IOS_UE_ContextInformationSgNBModReqExtIEs_1[] = { + { 1, 4, asn_IOS_UE_ContextInformationSgNBModReqExtIEs_1_rows } +}; +static const long asn_VAL_38_id_RLCMode_transferred = 317; +static const long asn_VAL_38_ignore = 1; +static const long asn_VAL_38_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RLCMode_transferred }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLCMode }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_39_id_uLpDCPSnLength = 302; +static const long asn_VAL_39_ignore = 1; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_dLPDCPSnLength = 311; +static const long asn_VAL_40_ignore = 1; +static const long asn_VAL_40_optional = 0; +static const long asn_VAL_41_id_duplicationActivation = 315; +static const long asn_VAL_41_ignore = 1; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_duplicationActivation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_ignore }, + { "&Extension", aioc__type, &asn_DEF_DuplicationActivation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 3, 4, asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_42_id_RLC_Status = 300; +static const long asn_VAL_42_ignore = 1; +static const long asn_VAL_42_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RLC_Status }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLC_Status }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_43_id_uLpDCPSnLength = 302; +static const long asn_VAL_43_ignore = 1; +static const long asn_VAL_43_optional = 0; +static const long asn_VAL_44_id_dLPDCPSnLength = 311; +static const long asn_VAL_44_ignore = 1; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_secondarymeNBULGTPTEIDatPDCP = 313; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_secondarymeNBULGTPTEIDatPDCP }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Extension", aioc__type, &asn_DEF_GTPtunnelEndpoint }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 3, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_46_id_uLpDCPSnLength = 302; +static const long asn_VAL_46_ignore = 1; +static const long asn_VAL_46_optional = 0; +static const long asn_VAL_47_id_dLPDCPSnLength = 311; +static const long asn_VAL_47_ignore = 1; +static const long asn_VAL_47_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_48_id_lCID = 314; +static const long asn_VAL_48_ignore = 1; +static const long asn_VAL_48_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_lCID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_ignore }, + { "&Extension", aioc__type, &asn_DEF_LCID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_49_id_uLpDCPSnLength = 302; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_dLPDCPSnLength = 311; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_51_id_secondarysgNBDLGTPTEIDatPDCP = 312; +static const long asn_VAL_51_ignore = 1; +static const long asn_VAL_51_optional = 0; +static const long asn_VAL_52_id_RLC_Status = 300; +static const long asn_VAL_52_ignore = 1; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_secondarysgNBDLGTPTEIDatPDCP }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_ignore }, + { "&Extension", aioc__type, &asn_DEF_GTPtunnelEndpoint }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RLC_Status }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLC_Status }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_53_id_RLCMode_transferred = 317; +static const long asn_VAL_53_ignore = 1; +static const long asn_VAL_53_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_RLCMode_transferred }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLCMode }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1_rows } +}; +static const long asn_VAL_54_id_uLpDCPSnLength = 302; +static const long asn_VAL_54_ignore = 1; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_dLPDCPSnLength = 311; +static const long asn_VAL_55_ignore = 1; +static const long asn_VAL_55_optional = 0; +static const long asn_VAL_56_id_new_drb_ID_req = 325; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_new_drb_ID_req }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Extension", aioc__type, &asn_DEF_NewDRBIDrequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1[] = { + { 3, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1_rows } +}; +static const long asn_VAL_57_id_RLC_Status = 300; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_lCID = 314; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_RLC_Status }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Extension", aioc__type, &asn_DEF_RLC_Status }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_lCID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Extension", aioc__type, &asn_DEF_LCID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_59_id_uLpDCPSnLength = 302; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_optional = 0; +static const long asn_VAL_60_id_dLPDCPSnLength = 311; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_uLpDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_dLPDCPSnLength }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Extension", aioc__type, &asn_DEF_PDCPSnLength }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1[] = { + { 2, 4, asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1_rows } +}; +static const long asn_VAL_61_id_DownlinkPacketLossRate = 273; +static const long asn_VAL_61_ignore = 1; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_UplinkPacketLossRate = 274; +static const long asn_VAL_62_ignore = 1; +static const long asn_VAL_62_optional = 0; +static const asn_ioc_cell_t asn_IOS_E_RAB_Level_QoS_Parameters_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_DownlinkPacketLossRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_ignore }, + { "&Extension", aioc__type, &asn_DEF_Packet_LossRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_UplinkPacketLossRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_ignore }, + { "&Extension", aioc__type, &asn_DEF_Packet_LossRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional } +}; +static const asn_ioc_set_t asn_IOS_E_RAB_Level_QoS_Parameters_ExtIEs_1[] = { + { 2, 4, asn_IOS_E_RAB_Level_QoS_Parameters_ExtIEs_1_rows } +}; +static const long asn_VAL_63_id_UL_EARFCNExtension = 95; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const long asn_VAL_64_id_DL_EARFCNExtension = 96; +static const long asn_VAL_64_reject = 0; +static const long asn_VAL_64_optional = 0; +static const long asn_VAL_65_id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177; +static const long asn_VAL_65_reject = 0; +static const long asn_VAL_65_optional = 0; +static const long asn_VAL_66_id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_NRS_NSSS_PowerOffset = 282; +static const long asn_VAL_67_ignore = 1; +static const long asn_VAL_67_optional = 0; +static const long asn_VAL_68_id_NSSS_NumOccasionDifferentPrecoder = 283; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_optional = 0; +static const asn_ioc_cell_t asn_IOS_FDD_Info_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_UL_EARFCNExtension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Extension", aioc__type, &asn_DEF_EARFCNExtension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_DL_EARFCNExtension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_reject }, + { "&Extension", aioc__type, &asn_DEF_EARFCNExtension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_OffsetOfNbiotChannelNumberToDL_EARFCN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_reject }, + { "&Extension", aioc__type, &asn_DEF_OffsetOfNbiotChannelNumberToEARFCN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_OffsetOfNbiotChannelNumberToUL_EARFCN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Extension", aioc__type, &asn_DEF_OffsetOfNbiotChannelNumberToEARFCN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_NRS_NSSS_PowerOffset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_ignore }, + { "&Extension", aioc__type, &asn_DEF_NRS_NSSS_PowerOffset }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_NSSS_NumOccasionDifferentPrecoder }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Extension", aioc__type, &asn_DEF_NSSS_NumOccasionDifferentPrecoder }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_optional } +}; +static const asn_ioc_set_t asn_IOS_FDD_Info_ExtIEs_1[] = { + { 6, 4, asn_IOS_FDD_Info_ExtIEs_1_rows } +}; +static const long asn_VAL_69_id_extended_e_RAB_MaximumBitrateDL = 196; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_extended_e_RAB_MaximumBitrateUL = 197; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_extended_e_RAB_GuaranteedBitrateDL = 198; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const long asn_VAL_72_id_extended_e_RAB_GuaranteedBitrateUL = 199; +static const long asn_VAL_72_ignore = 1; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_GBR_QosInformation_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_extended_e_RAB_MaximumBitrateDL }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_extended_e_RAB_MaximumBitrateUL }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_extended_e_RAB_GuaranteedBitrateDL }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_extended_e_RAB_GuaranteedBitrateUL }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_GBR_QosInformation_ExtIEs_1[] = { + { 4, 4, asn_IOS_GBR_QosInformation_ExtIEs_1_rows } +}; +static const long asn_VAL_73_id_NRrestrictioninEPSasSecondaryRAT = 202; +static const long asn_VAL_73_ignore = 1; +static const long asn_VAL_73_optional = 0; +static const long asn_VAL_74_id_CNTypeRestrictions = 301; +static const long asn_VAL_74_ignore = 1; +static const long asn_VAL_74_optional = 0; +static const long asn_VAL_75_id_NRrestrictionin5GS = 305; +static const long asn_VAL_75_ignore = 1; +static const long asn_VAL_75_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverRestrictionList_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_73_id_NRrestrictioninEPSasSecondaryRAT }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_73_ignore }, + { "&Extension", aioc__type, &asn_DEF_NRrestrictioninEPSasSecondaryRAT }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_73_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_74_id_CNTypeRestrictions }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_74_ignore }, + { "&Extension", aioc__type, &asn_DEF_CNTypeRestrictions }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_74_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_75_id_NRrestrictionin5GS }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_75_ignore }, + { "&Extension", aioc__type, &asn_DEF_NRrestrictionin5GS }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_75_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverRestrictionList_ExtIEs_1[] = { + { 3, 4, asn_IOS_HandoverRestrictionList_ExtIEs_1_rows } +}; +static const long asn_VAL_76_id_Time_UE_StayedInCell_EnhancedGranularity = 77; +static const long asn_VAL_76_ignore = 1; +static const long asn_VAL_76_optional = 0; +static const long asn_VAL_77_id_HO_cause = 80; +static const long asn_VAL_77_ignore = 1; +static const long asn_VAL_77_optional = 0; +static const asn_ioc_cell_t asn_IOS_LastVisitedEUTRANCellInformation_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_76_id_Time_UE_StayedInCell_EnhancedGranularity }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_76_ignore }, + { "&Extension", aioc__type, &asn_DEF_Time_UE_StayedInCell_EnhancedGranularity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_76_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_77_id_HO_cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_77_ignore }, + { "&Extension", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_77_optional } +}; +static const asn_ioc_set_t asn_IOS_LastVisitedEUTRANCellInformation_ExtIEs_1[] = { + { 2, 4, asn_IOS_LastVisitedEUTRANCellInformation_ExtIEs_1_rows } +}; +static const long asn_VAL_78_id_M3Configuration = 85; +static const long asn_VAL_78_ignore = 1; +static const long asn_VAL_78_conditional = 1; +static const long asn_VAL_79_id_M4Configuration = 86; +static const long asn_VAL_79_ignore = 1; +static const long asn_VAL_79_conditional = 1; +static const long asn_VAL_80_id_M5Configuration = 87; +static const long asn_VAL_80_ignore = 1; +static const long asn_VAL_80_conditional = 1; +static const long asn_VAL_81_id_MDT_Location_Info = 88; +static const long asn_VAL_81_ignore = 1; +static const long asn_VAL_81_optional = 0; +static const long asn_VAL_82_id_SignallingBasedMDTPLMNList = 90; +static const long asn_VAL_82_ignore = 1; +static const long asn_VAL_82_optional = 0; +static const long asn_VAL_83_id_M6Configuration = 161; +static const long asn_VAL_83_ignore = 1; +static const long asn_VAL_83_conditional = 1; +static const long asn_VAL_84_id_M7Configuration = 162; +static const long asn_VAL_84_ignore = 1; +static const long asn_VAL_84_conditional = 1; +static const long asn_VAL_85_id_BluetoothMeasurementConfiguration = 303; +static const long asn_VAL_85_ignore = 1; +static const long asn_VAL_85_optional = 0; +static const long asn_VAL_86_id_WLANMeasurementConfiguration = 304; +static const long asn_VAL_86_ignore = 1; +static const long asn_VAL_86_optional = 0; +static const asn_ioc_cell_t asn_IOS_MDT_Configuration_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_78_id_M3Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_78_ignore }, + { "&Extension", aioc__type, &asn_DEF_M3Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_78_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_79_id_M4Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_79_ignore }, + { "&Extension", aioc__type, &asn_DEF_M4Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_79_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_80_id_M5Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_80_ignore }, + { "&Extension", aioc__type, &asn_DEF_M5Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_80_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_81_id_MDT_Location_Info }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_81_ignore }, + { "&Extension", aioc__type, &asn_DEF_MDT_Location_Info }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_81_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_82_id_SignallingBasedMDTPLMNList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_82_ignore }, + { "&Extension", aioc__type, &asn_DEF_MDTPLMNList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_82_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_83_id_M6Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_83_ignore }, + { "&Extension", aioc__type, &asn_DEF_M6Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_83_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_84_id_M7Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_84_ignore }, + { "&Extension", aioc__type, &asn_DEF_M7Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_84_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_85_id_BluetoothMeasurementConfiguration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_85_ignore }, + { "&Extension", aioc__type, &asn_DEF_BluetoothMeasurementConfiguration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_85_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_86_id_WLANMeasurementConfiguration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_86_ignore }, + { "&Extension", aioc__type, &asn_DEF_WLANMeasurementConfiguration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_86_optional } +}; +static const asn_ioc_set_t asn_IOS_MDT_Configuration_ExtIEs_1[] = { + { 9, 4, asn_IOS_MDT_Configuration_ExtIEs_1_rows } +}; +static const long asn_VAL_87_id_NRCGI = 322; +static const long asn_VAL_87_ignore = 1; +static const long asn_VAL_87_optional = 0; +static const long asn_VAL_88_id_MeNBCoordinationAssistanceInformation = 323; +static const long asn_VAL_88_reject = 0; +static const long asn_VAL_88_optional = 0; +static const asn_ioc_cell_t asn_IOS_MeNBResourceCoordinationInformationExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_87_id_NRCGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_87_ignore }, + { "&Extension", aioc__type, &asn_DEF_NRCGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_87_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_88_id_MeNBCoordinationAssistanceInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_88_reject }, + { "&Extension", aioc__type, &asn_DEF_MeNBCoordinationAssistanceInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_88_optional } +}; +static const asn_ioc_set_t asn_IOS_MeNBResourceCoordinationInformationExtIEs_1[] = { + { 2, 4, asn_IOS_MeNBResourceCoordinationInformationExtIEs_1_rows } +}; +static const long asn_VAL_89_id_NeighbourTAC = 76; +static const long asn_VAL_89_ignore = 1; +static const long asn_VAL_89_optional = 0; +static const long asn_VAL_90_id_eARFCNExtension = 94; +static const long asn_VAL_90_reject = 0; +static const long asn_VAL_90_optional = 0; +static const asn_ioc_cell_t asn_IOS_Neighbour_Information_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_89_id_NeighbourTAC }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_89_ignore }, + { "&Extension", aioc__type, &asn_DEF_TAC }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_89_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_90_id_eARFCNExtension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_90_reject }, + { "&Extension", aioc__type, &asn_DEF_EARFCNExtension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_90_optional } +}; +static const asn_ioc_set_t asn_IOS_Neighbour_Information_ExtIEs_1[] = { + { 2, 4, asn_IOS_Neighbour_Information_ExtIEs_1_rows } +}; +static const long asn_VAL_91_id_ProSeUEtoNetworkRelaying = 149; +static const long asn_VAL_91_ignore = 1; +static const long asn_VAL_91_optional = 0; +static const asn_ioc_cell_t asn_IOS_ProSeAuthorized_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_91_id_ProSeUEtoNetworkRelaying }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_91_ignore }, + { "&Extension", aioc__type, &asn_DEF_ProSeUEtoNetworkRelaying }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_91_optional } +}; +static const asn_ioc_set_t asn_IOS_ProSeAuthorized_ExtIEs_1[] = { + { 1, 4, asn_IOS_ProSeAuthorized_ExtIEs_1_rows } +}; +static const long asn_VAL_92_id_DL_scheduling_PDCCH_CCE_usage = 193; +static const long asn_VAL_92_ignore = 1; +static const long asn_VAL_92_optional = 0; +static const long asn_VAL_93_id_UL_scheduling_PDCCH_CCE_usage = 194; +static const long asn_VAL_93_ignore = 1; +static const long asn_VAL_93_optional = 0; +static const asn_ioc_cell_t asn_IOS_RadioResourceStatus_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_92_id_DL_scheduling_PDCCH_CCE_usage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_92_ignore }, + { "&Extension", aioc__type, &asn_DEF_DL_scheduling_PDCCH_CCE_usage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_92_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_93_id_UL_scheduling_PDCCH_CCE_usage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_93_ignore }, + { "&Extension", aioc__type, &asn_DEF_UL_scheduling_PDCCH_CCE_usage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_93_optional } +}; +static const asn_ioc_set_t asn_IOS_RadioResourceStatus_ExtIEs_1[] = { + { 2, 4, asn_IOS_RadioResourceStatus_ExtIEs_1_rows } +}; +static const long asn_VAL_94_id_enhancedRNTP = 148; +static const long asn_VAL_94_ignore = 1; +static const long asn_VAL_94_optional = 0; +static const asn_ioc_cell_t asn_IOS_RelativeNarrowbandTxPower_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_94_id_enhancedRNTP }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_94_ignore }, + { "&Extension", aioc__type, &asn_DEF_EnhancedRNTP }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_94_optional } +}; +static const asn_ioc_set_t asn_IOS_RelativeNarrowbandTxPower_ExtIEs_1[] = { + { 1, 4, asn_IOS_RelativeNarrowbandTxPower_ExtIEs_1_rows } +}; +static const long asn_VAL_95_id_UEID = 147; +static const long asn_VAL_95_ignore = 1; +static const long asn_VAL_95_optional = 0; +static const asn_ioc_cell_t asn_IOS_RSRPMRList_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_95_id_UEID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_95_ignore }, + { "&Extension", aioc__type, &asn_DEF_UEID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_95_optional } +}; +static const asn_ioc_set_t asn_IOS_RSRPMRList_ExtIEs_1[] = { + { 1, 4, asn_IOS_RSRPMRList_ExtIEs_1_rows } +}; +static const long asn_VAL_96_id_Number_of_Antennaports = 41; +static const long asn_VAL_96_ignore = 1; +static const long asn_VAL_96_optional = 0; +static const long asn_VAL_97_id_PRACH_Configuration = 55; +static const long asn_VAL_97_ignore = 1; +static const long asn_VAL_97_optional = 0; +static const long asn_VAL_98_id_MBSFN_Subframe_Info = 56; +static const long asn_VAL_98_ignore = 1; +static const long asn_VAL_98_optional = 0; +static const long asn_VAL_99_id_CSG_Id = 70; +static const long asn_VAL_99_ignore = 1; +static const long asn_VAL_99_optional = 0; +static const long asn_VAL_100_id_MBMS_Service_Area_List = 79; +static const long asn_VAL_100_ignore = 1; +static const long asn_VAL_100_optional = 0; +static const long asn_VAL_101_id_MultibandInfoList = 84; +static const long asn_VAL_101_ignore = 1; +static const long asn_VAL_101_optional = 0; +static const long asn_VAL_102_id_FreqBandIndicatorPriority = 160; +static const long asn_VAL_102_ignore = 1; +static const long asn_VAL_102_optional = 0; +static const long asn_VAL_103_id_BandwidthReducedSI = 180; +static const long asn_VAL_103_ignore = 1; +static const long asn_VAL_103_optional = 0; +static const long asn_VAL_104_id_ProtectedEUTRAResourceIndication = 284; +static const long asn_VAL_104_ignore = 1; +static const long asn_VAL_104_optional = 0; +static const asn_ioc_cell_t asn_IOS_ServedCell_Information_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_96_id_Number_of_Antennaports }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_96_ignore }, + { "&Extension", aioc__type, &asn_DEF_Number_of_Antennaports }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_96_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_97_id_PRACH_Configuration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_97_ignore }, + { "&Extension", aioc__type, &asn_DEF_PRACH_Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_97_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_98_id_MBSFN_Subframe_Info }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_98_ignore }, + { "&Extension", aioc__type, &asn_DEF_MBSFN_Subframe_Infolist }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_98_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_99_id_CSG_Id }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_99_ignore }, + { "&Extension", aioc__type, &asn_DEF_CSG_Id }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_99_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_100_id_MBMS_Service_Area_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_100_ignore }, + { "&Extension", aioc__type, &asn_DEF_MBMS_Service_Area_Identity_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_100_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_101_id_MultibandInfoList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_101_ignore }, + { "&Extension", aioc__type, &asn_DEF_MultibandInfoList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_101_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_102_id_FreqBandIndicatorPriority }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_102_ignore }, + { "&Extension", aioc__type, &asn_DEF_FreqBandIndicatorPriority }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_102_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_103_id_BandwidthReducedSI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_103_ignore }, + { "&Extension", aioc__type, &asn_DEF_BandwidthReducedSI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_103_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_104_id_ProtectedEUTRAResourceIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_104_ignore }, + { "&Extension", aioc__type, &asn_DEF_ProtectedEUTRAResourceIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_104_optional } +}; +static const asn_ioc_set_t asn_IOS_ServedCell_Information_ExtIEs_1[] = { + { 9, 4, asn_IOS_ServedCell_Information_ExtIEs_1_rows } +}; +static const long asn_VAL_105_id_ECGI = 316; +static const long asn_VAL_105_ignore = 1; +static const long asn_VAL_105_optional = 0; +static const long asn_VAL_106_id_SgNBCoordinationAssistanceInformation = 324; +static const long asn_VAL_106_reject = 0; +static const long asn_VAL_106_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBResourceCoordinationInformationExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_105_id_ECGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_105_ignore }, + { "&Extension", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_105_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_106_id_SgNBCoordinationAssistanceInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_106_reject }, + { "&Extension", aioc__type, &asn_DEF_SgNBCoordinationAssistanceInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_106_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBResourceCoordinationInformationExtIEs_1[] = { + { 2, 4, asn_IOS_SgNBResourceCoordinationInformationExtIEs_1_rows } +}; +static const long asn_VAL_107_id_AdditionalSpecialSubframe_Info = 97; +static const long asn_VAL_107_ignore = 1; +static const long asn_VAL_107_optional = 0; +static const long asn_VAL_108_id_eARFCNExtension = 94; +static const long asn_VAL_108_reject = 0; +static const long asn_VAL_108_optional = 0; +static const long asn_VAL_109_id_AdditionalSpecialSubframeExtension_Info = 179; +static const long asn_VAL_109_ignore = 1; +static const long asn_VAL_109_optional = 0; +static const asn_ioc_cell_t asn_IOS_TDD_Info_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_107_id_AdditionalSpecialSubframe_Info }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_107_ignore }, + { "&Extension", aioc__type, &asn_DEF_AdditionalSpecialSubframe_Info }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_107_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_108_id_eARFCNExtension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_108_reject }, + { "&Extension", aioc__type, &asn_DEF_EARFCNExtension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_108_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_109_id_AdditionalSpecialSubframeExtension_Info }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_109_ignore }, + { "&Extension", aioc__type, &asn_DEF_AdditionalSpecialSubframeExtension_Info }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_109_optional } +}; +static const asn_ioc_set_t asn_IOS_TDD_Info_ExtIEs_1[] = { + { 3, 4, asn_IOS_TDD_Info_ExtIEs_1_rows } +}; +static const long asn_VAL_110_id_MDTConfiguration = 72; +static const long asn_VAL_110_ignore = 1; +static const long asn_VAL_110_optional = 0; +static const long asn_VAL_111_id_UEAppLayerMeasConfig = 195; +static const long asn_VAL_111_ignore = 1; +static const long asn_VAL_111_optional = 0; +static const asn_ioc_cell_t asn_IOS_TraceActivation_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_110_id_MDTConfiguration }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_110_ignore }, + { "&Extension", aioc__type, &asn_DEF_MDT_Configuration }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_110_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_111_id_UEAppLayerMeasConfig }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_111_ignore }, + { "&Extension", aioc__type, &asn_DEF_UEAppLayerMeasConfig }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_111_optional } +}; +static const asn_ioc_set_t asn_IOS_TraceActivation_ExtIEs_1[] = { + { 2, 4, asn_IOS_TraceActivation_ExtIEs_1_rows } +}; +static const long asn_VAL_112_id_extended_uEaggregateMaximumBitRateDownlink = 200; +static const long asn_VAL_112_ignore = 1; +static const long asn_VAL_112_optional = 0; +static const long asn_VAL_113_id_extended_uEaggregateMaximumBitRateUplink = 201; +static const long asn_VAL_113_ignore = 1; +static const long asn_VAL_113_optional = 0; +static const asn_ioc_cell_t asn_IOS_UEAggregate_MaximumBitrate_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_112_id_extended_uEaggregateMaximumBitRateDownlink }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_112_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_112_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_113_id_extended_uEaggregateMaximumBitRateUplink }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_113_ignore }, + { "&Extension", aioc__type, &asn_DEF_ExtendedBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_113_optional } +}; +static const asn_ioc_set_t asn_IOS_UEAggregate_MaximumBitrate_ExtIEs_1[] = { + { 2, 4, asn_IOS_UEAggregate_MaximumBitrate_ExtIEs_1_rows } +}; +static const long asn_VAL_114_id_serviceType = 276; +static const long asn_VAL_114_ignore = 1; +static const long asn_VAL_114_optional = 0; +static const asn_ioc_cell_t asn_IOS_UEAppLayerMeasConfig_ExtIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_114_id_serviceType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_114_ignore }, + { "&Extension", aioc__type, &asn_DEF_ServiceType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_114_optional } +}; +static const asn_ioc_set_t asn_IOS_UEAppLayerMeasConfig_ExtIEs_1[] = { + { 1, 4, asn_IOS_UEAppLayerMeasConfig_ExtIEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UE_ContextInformation_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UE_ContextInformation_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetup_ItemExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetup_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetup_ItemExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetup_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellInformation_Item_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellInformation_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellInformation_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellInformation_Item_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellInformation_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellInformation_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ServedCellsToModify_Item_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ServedCellsToModify_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ServedCellsToModify_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ServedCellsToModify_Item_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ServedCellsToModify_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ServedCellsToModify_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellMeasurementResult_Item_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellMeasurementResult_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellMeasurementResult_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellMeasurementResult_Item_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellMeasurementResult_Item_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellMeasurementResult_Item_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UE_ContextInformationRetrieve_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformationRetrieve_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformationRetrieve_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UE_ContextInformationRetrieve_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformationRetrieve_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformationRetrieve_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UE_ContextInformationSgNBModReqExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformationSgNBModReqExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformationSgNBModReqExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UE_ContextInformationSgNBModReqExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UE_ContextInformationSgNBModReqExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UE_ContextInformationSgNBModReqExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RAB_Level_QoS_Parameters_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RAB_Level_QoS_Parameters_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RAB_Level_QoS_Parameters_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RAB_Level_QoS_Parameters_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_FDD_Info_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_FDD_Info_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct FDD_Info_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_FDD_Info_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_FDD_Info_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct FDD_Info_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_GBR_QosInformation_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_GBR_QosInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct GBR_QosInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_GBR_QosInformation_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_GBR_QosInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct GBR_QosInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverRestrictionList_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRestrictionList_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRestrictionList_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverRestrictionList_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRestrictionList_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRestrictionList_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_LastVisitedEUTRANCellInformation_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_LastVisitedEUTRANCellInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_LastVisitedEUTRANCellInformation_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_LastVisitedEUTRANCellInformation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MDT_Configuration_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MDT_Configuration_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MDT_Configuration_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MDT_Configuration_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MDT_Configuration_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MDT_Configuration_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MeNBResourceCoordinationInformationExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeNBResourceCoordinationInformationExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeNBResourceCoordinationInformationExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MeNBResourceCoordinationInformationExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeNBResourceCoordinationInformationExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeNBResourceCoordinationInformationExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_Neighbour_Information_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_Neighbour_Information_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct Neighbour_Information_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_Neighbour_Information_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_Neighbour_Information_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct Neighbour_Information_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ProSeAuthorized_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ProSeAuthorized_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ProSeAuthorized_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ProSeAuthorized_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ProSeAuthorized_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ProSeAuthorized_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RadioResourceStatus_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RadioResourceStatus_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RadioResourceStatus_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RadioResourceStatus_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RadioResourceStatus_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RadioResourceStatus_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RelativeNarrowbandTxPower_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RelativeNarrowbandTxPower_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RelativeNarrowbandTxPower_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RelativeNarrowbandTxPower_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RelativeNarrowbandTxPower_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RelativeNarrowbandTxPower_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RSRPMRList_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RSRPMRList_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RSRPMRList_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RSRPMRList_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RSRPMRList_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RSRPMRList_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ServedCell_Information_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ServedCell_Information_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ServedCell_Information_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ServedCell_Information_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ServedCell_Information_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ServedCell_Information_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBResourceCoordinationInformationExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBResourceCoordinationInformationExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBResourceCoordinationInformationExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBResourceCoordinationInformationExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBResourceCoordinationInformationExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBResourceCoordinationInformationExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_TDD_Info_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_TDD_Info_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct TDD_Info_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_TDD_Info_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_TDD_Info_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct TDD_Info_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_TraceActivation_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_TraceActivation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct TraceActivation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_TraceActivation_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_TraceActivation_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct TraceActivation_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UEAggregate_MaximumBitrate_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEAggregate_MaximumBitrate_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UEAggregate_MaximumBitrate_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEAggregate_MaximumBitrate_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UEAppLayerMeasConfig_ExtIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEAppLayerMeasConfig_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEAppLayerMeasConfig_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UEAppLayerMeasConfig_ExtIEs_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEAppLayerMeasConfig_ExtIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Extension */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEAppLayerMeasConfig_ExtIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_extensionValue_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_extensionValue_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_106 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_107 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_108 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_110 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_111 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_112 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_114 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_115 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_116 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_118 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_119 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_120 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_122 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_123 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_124 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_126 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_127 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_128 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_130 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_131 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_132 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_134 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_135 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_136 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_138 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_139 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_140 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_142 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_143 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_144 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_146 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_147 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_148 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_150 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_151 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_152 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_154 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_155 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_156 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_158 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_159 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_160 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_162 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_163 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_164 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_166 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_167 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_168 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_170 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_171 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_172 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_174 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_175 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_176 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_178 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_179 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_180 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_182 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_183 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_184 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_186 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_187 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_188 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_190 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_191 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_192 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_194 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_195 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_196 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_198 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_199 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_200 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_202 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_203 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_204 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_206 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_207 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_208 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_210 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_211 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_212 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_214 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_215 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_216 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_218 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_219 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_220 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_222 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_223 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_224 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_226 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_227 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_228 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_230 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_231 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_232 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_234 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_235 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_236 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_238 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_239 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_240 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_242 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_243 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_244 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_246 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_247 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_248 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_250 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_251 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_252 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_254 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_255 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_256 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_258 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_259 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_260 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_262 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_263 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_264 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_266 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_267 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_268 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_270 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_271 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_272 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_274 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_275 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_276 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_278 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_279 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_280 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_282 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_283 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_284 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_286 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_287 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_288 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_290 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_291 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_292 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_294 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_295 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_296 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_298 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_299 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_300 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_302 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_303 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_304 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_306 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_307 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_308 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_310 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_311 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_312 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_314 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_315 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_316 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_318 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_319 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_320 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_322 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_323 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_324 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_326 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_327 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_328 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_330 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_331 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_332 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_334 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_335 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_336 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_338 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_339 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_340 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_342 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_343 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_344 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_346 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_347 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_348 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_350 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_351 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_352 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_354 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_355 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_356 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_358 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_359 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_360 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_362 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_363 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_364 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_366 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_367 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_368 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_370 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_371 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_372 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_374 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_375 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_376 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_378 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_379 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_380 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_382 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_383 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_384 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_386 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_387 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_388 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_390 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_391 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_392 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_394 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_395 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_396 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_398 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_399 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_400 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_402 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_403 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_404 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_406 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_407 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_408 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_410 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_411 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_412 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_414 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_415 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_416 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_418 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_419 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_420 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_422 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_423 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_424 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_426 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_427 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_428 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_430 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_431 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_432 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_434 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_435 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_436 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_438 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_439 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_440 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_442 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_443 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_444 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_446 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_447 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_448 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_450 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_451 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_452 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_454 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_455 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_456 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_458 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_459 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_460 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_462 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_463 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_464 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_466 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_467 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_468 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_470 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_471 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_472 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_474 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_475 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_476 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_478 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_479 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_480 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_482 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_483 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_484 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_486 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_487 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_488 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_490 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_491 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_492 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_494 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_495 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_496 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_498 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_499 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_500 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_502 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_503 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_504 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_506 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_507 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_508 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_510 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_511 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_512 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_514 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_515 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_516 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_518 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_519 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_520 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_522 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_523 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_524 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_526 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_527 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_528 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_530 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_531 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_532 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_534 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_535 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_536 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_538 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_539 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_540 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_542 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_543 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_544 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_546 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_547 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_548 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_550 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_551 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_552 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_554 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_555 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_556 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_558 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_559 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_560 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_562 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_563 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_564 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_566 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_567 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_568 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_570 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_571 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_572 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_574 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_575 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_576 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_578 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_579 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_580 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_582 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_583 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_584 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_586 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_587 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_588 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_590 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_591 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_592 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_594 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_595 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_596 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_598 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_599 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_600 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_602 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_603 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_604 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_606 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_607 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_608 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_610 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_611 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_612 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_614 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_615 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_616 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_618 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_619 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_620 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_622 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_623 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_624 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_626 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_627 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_628 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_630 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_631 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_632 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_634 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_635 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_636 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_638 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_639 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_640 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_642 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_643 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_644 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_646 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_647 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_648 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_650 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_651 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_652 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_654 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_655 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_656 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_658 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_659 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_660 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_662 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_663 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_664 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_666 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_667 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_668 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_670 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_671 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_672 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_674 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_675 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_676 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_678 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_679 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_680 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_682 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_683 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_684 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_686 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_687 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_688 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_690 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_691 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_692 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_694 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_695 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_696 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_698 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_699 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_700 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_702 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_703 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_704 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_706 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_707 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_708 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_710 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_711 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_712 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_714 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_715 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_716 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_718 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_719 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_720 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_722 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_723 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_724 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_726 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_727 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_728 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_730 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_731 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_732 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_734 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_735 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_736 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_738 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_739 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_740 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_742 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_743 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_744 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_746 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_747 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_748 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_750 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_751 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_752 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_754 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_755 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_756 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_758 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_759 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_760 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_762 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_763 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_764 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_766 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_767 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_768 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_770 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_771 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_772 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_774 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_775 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_776 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_778 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_779 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_780 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_782 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_783 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_784 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_786 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_787 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_788 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_790 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_791 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_792 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_794 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_795 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_796 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_798 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_799 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_800 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_802 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_803 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_804 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_806 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_807 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_808 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_810 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_811 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_812 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_814 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_815 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_816 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_818 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_819 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_820 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_822 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_823 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_824 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_826 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_827 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_828 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_830 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_831 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_832 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_834 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_835 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_836 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_838 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_839 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_840 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_842 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_843 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_844 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_846 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_847 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_848 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_850 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_851 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_852 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_854 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_855 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_856 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_858 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_859 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_860 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_862 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_863 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_864 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_866 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_867 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_868 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_870 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_871 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_872 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_874 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_875 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_876 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_878 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_879 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_880 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_882 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_883 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_884 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_886 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_887 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_888 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_890 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_891 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_extensionValue_constr_892 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_extensionValue_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs__extensionValue, choice.ManagementBasedMDTallowed), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ManagementBasedMDTallowed, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ManagementBasedMDTallowed" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs__extensionValue, choice.MDTPLMNList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MDTPLMNList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MDTPLMNList" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs__extensionValue, choice.UESidelinkAggregateMaximumBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UESidelinkAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UESidelinkAggregateMaximumBitRate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* ManagementBasedMDTallowed */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* MDTPLMNList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* UESidelinkAggregateMaximumBitRate */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_4 = { + sizeof(struct UE_ContextInformation_ExtIEs__extensionValue), + offsetof(struct UE_ContextInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextInformation_ExtIEs__extensionValue, present), + sizeof(((struct UE_ContextInformation_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_4, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_4 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_4, + 3, /* Elements count */ + &asn_SPC_extensionValue_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextInformation_ExtIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UE_ContextInformation_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_4, + select_UE_ContextInformation_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_4, memb_extensionValue_constraint_1 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformation_ExtIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformation_ExtIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformation_ExtIEs_specs_1 = { + sizeof(struct UE_ContextInformation_ExtIEs), + offsetof(struct UE_ContextInformation_ExtIEs, _asn_ctx), + asn_MAP_UE_ContextInformation_ExtIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation_ExtIEs = { + "UE-ContextInformation-ExtIEs", + "UE-ContextInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformation_ExtIEs_tags_1, + sizeof(asn_DEF_UE_ContextInformation_ExtIEs_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_ExtIEs_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextInformation_ExtIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformation_ExtIEs_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_ExtIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformation_ExtIEs_1, + 3, /* Elements count */ + &asn_SPC_UE_ContextInformation_ExtIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue, choice.BearerType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_BearerType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "BearerType" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* BearerType */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_8 = { + sizeof(struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_8 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_8, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ItemExtIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeSetup_ItemExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_8, + select_E_RABs_ToBeSetup_ItemExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_8, memb_extensionValue_constraint_5 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetup_ItemExtIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetup_ItemExtIEs_specs_5 = { + sizeof(struct E_RABs_ToBeSetup_ItemExtIEs), + offsetof(struct E_RABs_ToBeSetup_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeSetup_ItemExtIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ItemExtIEs = { + "E-RABs-ToBeSetup-ItemExtIEs", + "E-RABs-ToBeSetup-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5, + sizeof(asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ItemExtIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetup_ItemExtIEs_5, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetup_ItemExtIEs_specs_5 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_12 = { + sizeof(struct UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue), + offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue, present), + sizeof(((struct UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_12 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSeNB_ItemExtIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_12, + 0, + { 0, &asn_PER_memb_extensionValue_constr_12, memb_extensionValue_constraint_9 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtSeNB_ItemExtIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9 = { + sizeof(struct UE_ContextReferenceAtSeNB_ItemExtIEs), + offsetof(struct UE_ContextReferenceAtSeNB_ItemExtIEs, _asn_ctx), + asn_MAP_UE_ContextReferenceAtSeNB_ItemExtIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs = { + "UE-ContextReferenceAtSeNB-ItemExtIEs", + "UE-ContextReferenceAtSeNB-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9, + sizeof(asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9) + /sizeof(asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9) + /sizeof(asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtSeNB_ItemExtIEs_9, + 3, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_16 = { + sizeof(struct UE_ContextReferenceAtWT_ItemExtIEs__extensionValue), + offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs__extensionValue, present), + sizeof(((struct UE_ContextReferenceAtWT_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_16 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtWT_ItemExtIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_16, + 0, + { 0, &asn_PER_memb_extensionValue_constr_16, memb_extensionValue_constraint_13 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtWT_ItemExtIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtWT_ItemExtIEs_specs_13 = { + sizeof(struct UE_ContextReferenceAtWT_ItemExtIEs), + offsetof(struct UE_ContextReferenceAtWT_ItemExtIEs, _asn_ctx), + asn_MAP_UE_ContextReferenceAtWT_ItemExtIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs = { + "UE-ContextReferenceAtWT-ItemExtIEs", + "UE-ContextReferenceAtWT-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13, + sizeof(asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13) + /sizeof(asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13) + /sizeof(asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtWT_ItemExtIEs_13, + 3, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtWT_ItemExtIEs_specs_13 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_20 = { + sizeof(struct UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue), + offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue, present), + sizeof(((struct UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_20 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSgNB_ItemExtIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_20, + 0, + { 0, &asn_PER_memb_extensionValue_constr_20, memb_extensionValue_constraint_17 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtSgNB_ItemExtIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17 = { + sizeof(struct UE_ContextReferenceAtSgNB_ItemExtIEs), + offsetof(struct UE_ContextReferenceAtSgNB_ItemExtIEs, _asn_ctx), + asn_MAP_UE_ContextReferenceAtSgNB_ItemExtIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs = { + "UE-ContextReferenceAtSgNB-ItemExtIEs", + "UE-ContextReferenceAtSgNB-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17, + sizeof(asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17) + /sizeof(asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17) + /sizeof(asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtSgNB_ItemExtIEs_17, + 3, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_24 = { + sizeof(struct E_RABs_Admitted_Item_ExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_Item_ExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_24 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_Item_ExtIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_24, + 0, + { 0, &asn_PER_memb_extensionValue_constr_24, memb_extensionValue_constraint_21 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_Item_ExtIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_Item_ExtIEs_specs_21 = { + sizeof(struct E_RABs_Admitted_Item_ExtIEs), + offsetof(struct E_RABs_Admitted_Item_ExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_Item_ExtIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_Item_ExtIEs = { + "E-RABs-Admitted-Item-ExtIEs", + "E-RABs-Admitted-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21, + sizeof(asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21) + /sizeof(asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21) + /sizeof(asn_DEF_E_RABs_Admitted_Item_ExtIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_Item_ExtIEs_21, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_Item_ExtIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.ReceiveStatusOfULPDCPSDUsExtended), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_ReceiveStatusOfULPDCPSDUsExtended, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReceiveStatusOfULPDCPSDUsExtended" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.COUNTValueExtended), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_COUNTValueExtended, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "COUNTValueExtended" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.ReceiveStatusOfULPDCPSDUsPDCP_SNlength18), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.COUNTvaluePDCP_SNlength18), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_COUNTvaluePDCP_SNlength18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "COUNTvaluePDCP-SNlength18" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_28[] = { 0, 2, 1, 3 }; +static const unsigned asn_MAP_extensionValue_from_canonical_28[] = { 0, 2, 1, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 1 }, /* ReceiveStatusOfULPDCPSDUsExtended */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, -1, 0 }, /* ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* COUNTValueExtended */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* COUNTvaluePDCP-SNlength18 */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_28 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_28, + 4, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_28, + asn_MAP_extensionValue_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_28 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_28, + 4, /* Elements count */ + &asn_SPC_extensionValue_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_28, + select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_28, memb_extensionValue_constraint_25 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs = { + "E-RABs-SubjectToStatusTransfer-ItemExtIEs", + "E-RABs-SubjectToStatusTransfer-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25, + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.ABSInformation), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_ABSInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ABSInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.InvokeIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_InvokeIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "InvokeIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.SubframeAssignment), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SubframeAssignment, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SubframeAssignment" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.ExtendedULInterferenceOverloadInfo), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExtendedULInterferenceOverloadInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExtendedULInterferenceOverloadInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.CoMPInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoMPInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CoMPInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs__extensionValue, choice.DynamicDLTransmissionInformation), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_DynamicDLTransmissionInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DynamicDLTransmissionInformation" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_32[] = { 1, 2, 3, 4, 0, 5 }; +static const unsigned asn_MAP_extensionValue_from_canonical_32[] = { 4, 0, 1, 2, 3, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 1 }, /* InvokeIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 0 }, /* SubframeAssignment */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 1 }, /* ExtendedULInterferenceOverloadInfo */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 }, /* CoMPInformation */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 1 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 5, -1, 0 }, /* naics-active */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 1 }, /* tdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 5, -1, 0 }, /* naics-inactive */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 } /* abs-inactive */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_32 = { + sizeof(struct CellInformation_Item_ExtIEs__extensionValue), + offsetof(struct CellInformation_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellInformation_Item_ExtIEs__extensionValue, present), + sizeof(((struct CellInformation_Item_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_32, + 9, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_32, + asn_MAP_extensionValue_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_32 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_32, + 6, /* Elements count */ + &asn_SPC_extensionValue_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellInformation_Item_ExtIEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellInformation_Item_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellInformation_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_32, + select_CellInformation_Item_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_32, memb_extensionValue_constraint_29 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellInformation_Item_ExtIEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellInformation_Item_ExtIEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellInformation_Item_ExtIEs_specs_29 = { + sizeof(struct CellInformation_Item_ExtIEs), + offsetof(struct CellInformation_Item_ExtIEs, _asn_ctx), + asn_MAP_CellInformation_Item_ExtIEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInformation_Item_ExtIEs = { + "CellInformation-Item-ExtIEs", + "CellInformation-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellInformation_Item_ExtIEs_tags_29, + sizeof(asn_DEF_CellInformation_Item_ExtIEs_tags_29) + /sizeof(asn_DEF_CellInformation_Item_ExtIEs_tags_29[0]), /* 1 */ + asn_DEF_CellInformation_Item_ExtIEs_tags_29, /* Same as above */ + sizeof(asn_DEF_CellInformation_Item_ExtIEs_tags_29) + /sizeof(asn_DEF_CellInformation_Item_ExtIEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellInformation_Item_ExtIEs_29, + 3, /* Elements count */ + &asn_SPC_CellInformation_Item_ExtIEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item_ExtIEs__extensionValue, choice.DeactivationIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_DeactivationIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DeactivationIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* DeactivationIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_36 = { + sizeof(struct ServedCellsToModify_Item_ExtIEs__extensionValue), + offsetof(struct ServedCellsToModify_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedCellsToModify_Item_ExtIEs__extensionValue, present), + sizeof(((struct ServedCellsToModify_Item_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_36, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_36 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_36, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedCellsToModify_Item_ExtIEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ServedCellsToModify_Item_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_36, + select_ServedCellsToModify_Item_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_36, memb_extensionValue_constraint_33 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCellsToModify_Item_ExtIEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToModify_Item_ExtIEs_specs_33 = { + sizeof(struct ServedCellsToModify_Item_ExtIEs), + offsetof(struct ServedCellsToModify_Item_ExtIEs, _asn_ctx), + asn_MAP_ServedCellsToModify_Item_ExtIEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify_Item_ExtIEs = { + "ServedCellsToModify-Item-ExtIEs", + "ServedCellsToModify-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33, + sizeof(asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33) + /sizeof(asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33[0]), /* 1 */ + asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33, /* Same as above */ + sizeof(asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33) + /sizeof(asn_DEF_ServedCellsToModify_Item_ExtIEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCellsToModify_Item_ExtIEs_33, + 3, /* Elements count */ + &asn_SPC_ServedCellsToModify_Item_ExtIEs_specs_33 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_40 = { + sizeof(struct CellToReport_Item_ExtIEs__extensionValue), + offsetof(struct CellToReport_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellToReport_Item_ExtIEs__extensionValue, present), + sizeof(((struct CellToReport_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_40 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellToReport_Item_ExtIEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellToReport_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_40, + 0, + { 0, &asn_PER_memb_extensionValue_constr_40, memb_extensionValue_constraint_37 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellToReport_Item_ExtIEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellToReport_Item_ExtIEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellToReport_Item_ExtIEs_specs_37 = { + sizeof(struct CellToReport_Item_ExtIEs), + offsetof(struct CellToReport_Item_ExtIEs, _asn_ctx), + asn_MAP_CellToReport_Item_ExtIEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellToReport_Item_ExtIEs = { + "CellToReport-Item-ExtIEs", + "CellToReport-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellToReport_Item_ExtIEs_tags_37, + sizeof(asn_DEF_CellToReport_Item_ExtIEs_tags_37) + /sizeof(asn_DEF_CellToReport_Item_ExtIEs_tags_37[0]), /* 1 */ + asn_DEF_CellToReport_Item_ExtIEs_tags_37, /* Same as above */ + sizeof(asn_DEF_CellToReport_Item_ExtIEs_tags_37) + /sizeof(asn_DEF_CellToReport_Item_ExtIEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellToReport_Item_ExtIEs_37, + 3, /* Elements count */ + &asn_SPC_CellToReport_Item_ExtIEs_specs_37 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_44 = { + sizeof(struct MeasurementInitiationResult_Item_ExtIEs__extensionValue), + offsetof(struct MeasurementInitiationResult_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct MeasurementInitiationResult_Item_ExtIEs__extensionValue, present), + sizeof(((struct MeasurementInitiationResult_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_44 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_Item_ExtIEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_44, + 0, + { 0, &asn_PER_memb_extensionValue_constr_44, memb_extensionValue_constraint_41 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementInitiationResult_Item_ExtIEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementInitiationResult_Item_ExtIEs_specs_41 = { + sizeof(struct MeasurementInitiationResult_Item_ExtIEs), + offsetof(struct MeasurementInitiationResult_Item_ExtIEs, _asn_ctx), + asn_MAP_MeasurementInitiationResult_Item_ExtIEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_Item_ExtIEs = { + "MeasurementInitiationResult-Item-ExtIEs", + "MeasurementInitiationResult-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41, + sizeof(asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41) + /sizeof(asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41[0]), /* 1 */ + asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41, /* Same as above */ + sizeof(asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41) + /sizeof(asn_DEF_MeasurementInitiationResult_Item_ExtIEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInitiationResult_Item_ExtIEs_41, + 3, /* Elements count */ + &asn_SPC_MeasurementInitiationResult_Item_ExtIEs_specs_41 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_48 = { + sizeof(struct MeasurementFailureCause_Item_ExtIEs__extensionValue), + offsetof(struct MeasurementFailureCause_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct MeasurementFailureCause_Item_ExtIEs__extensionValue, present), + sizeof(((struct MeasurementFailureCause_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_48 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementFailureCause_Item_ExtIEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_48, + 0, + { 0, &asn_PER_memb_extensionValue_constr_48, memb_extensionValue_constraint_45 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementFailureCause_Item_ExtIEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementFailureCause_Item_ExtIEs_specs_45 = { + sizeof(struct MeasurementFailureCause_Item_ExtIEs), + offsetof(struct MeasurementFailureCause_Item_ExtIEs, _asn_ctx), + asn_MAP_MeasurementFailureCause_Item_ExtIEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_Item_ExtIEs = { + "MeasurementFailureCause-Item-ExtIEs", + "MeasurementFailureCause-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45, + sizeof(asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45) + /sizeof(asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45[0]), /* 1 */ + asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45, /* Same as above */ + sizeof(asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45) + /sizeof(asn_DEF_MeasurementFailureCause_Item_ExtIEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementFailureCause_Item_ExtIEs_45, + 3, /* Elements count */ + &asn_SPC_MeasurementFailureCause_Item_ExtIEs_specs_45 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_52 = { + sizeof(struct CompleteFailureCauseInformation_Item_ExtIEs__extensionValue), + offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs__extensionValue, present), + sizeof(((struct CompleteFailureCauseInformation_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_52 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_Item_ExtIEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_52, + 0, + { 0, &asn_PER_memb_extensionValue_constr_52, memb_extensionValue_constraint_49 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompleteFailureCauseInformation_Item_ExtIEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompleteFailureCauseInformation_Item_ExtIEs_specs_49 = { + sizeof(struct CompleteFailureCauseInformation_Item_ExtIEs), + offsetof(struct CompleteFailureCauseInformation_Item_ExtIEs, _asn_ctx), + asn_MAP_CompleteFailureCauseInformation_Item_ExtIEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs = { + "CompleteFailureCauseInformation-Item-ExtIEs", + "CompleteFailureCauseInformation-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49, + sizeof(asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49) + /sizeof(asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[0]), /* 1 */ + asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49, /* Same as above */ + sizeof(asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49) + /sizeof(asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompleteFailureCauseInformation_Item_ExtIEs_49, + 3, /* Elements count */ + &asn_SPC_CompleteFailureCauseInformation_Item_ExtIEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CompositeAvailableCapacityGroup), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompositeAvailableCapacityGroup, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CompositeAvailableCapacityGroup" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, choice.ABS_Status), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ABS_Status, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ABS-Status" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, choice.RSRPMRList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RSRPMRList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RSRPMRList" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CSIReportList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CSIReportList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CSIReportList" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CellReportingIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_CellReportingIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellReportingIndicator" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_56[] = { 4, 0, 1, 2, 3 }; +static const unsigned asn_MAP_extensionValue_from_canonical_56[] = { 1, 2, 3, 4, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* CellReportingIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* CompositeAvailableCapacityGroup */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* ABS-Status */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* RSRPMRList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* CSIReportList */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_56 = { + sizeof(struct CellMeasurementResult_Item_ExtIEs__extensionValue), + offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellMeasurementResult_Item_ExtIEs__extensionValue, present), + sizeof(((struct CellMeasurementResult_Item_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_56, + 5, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_56, + asn_MAP_extensionValue_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_56 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_56, + 5, /* Elements count */ + &asn_SPC_extensionValue_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellMeasurementResult_Item_ExtIEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellMeasurementResult_Item_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_56, + select_CellMeasurementResult_Item_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_56, memb_extensionValue_constraint_53 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellMeasurementResult_Item_ExtIEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellMeasurementResult_Item_ExtIEs_specs_53 = { + sizeof(struct CellMeasurementResult_Item_ExtIEs), + offsetof(struct CellMeasurementResult_Item_ExtIEs, _asn_ctx), + asn_MAP_CellMeasurementResult_Item_ExtIEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_Item_ExtIEs = { + "CellMeasurementResult-Item-ExtIEs", + "CellMeasurementResult-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53, + sizeof(asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53) + /sizeof(asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53[0]), /* 1 */ + asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53, /* Same as above */ + sizeof(asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53) + /sizeof(asn_DEF_CellMeasurementResult_Item_ExtIEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellMeasurementResult_Item_ExtIEs_53, + 3, /* Elements count */ + &asn_SPC_CellMeasurementResult_Item_ExtIEs_specs_53 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_60 = { + sizeof(struct ServedCellsToActivate_Item_ExtIEs__extensionValue), + offsetof(struct ServedCellsToActivate_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedCellsToActivate_Item_ExtIEs__extensionValue, present), + sizeof(((struct ServedCellsToActivate_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_60 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedCellsToActivate_Item_ExtIEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToActivate_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToActivate_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedCellsToActivate_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_60, + 0, + { 0, &asn_PER_memb_extensionValue_constr_60, memb_extensionValue_constraint_57 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCellsToActivate_Item_ExtIEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToActivate_Item_ExtIEs_specs_57 = { + sizeof(struct ServedCellsToActivate_Item_ExtIEs), + offsetof(struct ServedCellsToActivate_Item_ExtIEs, _asn_ctx), + asn_MAP_ServedCellsToActivate_Item_ExtIEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate_Item_ExtIEs = { + "ServedCellsToActivate-Item-ExtIEs", + "ServedCellsToActivate-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57, + sizeof(asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57) + /sizeof(asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57[0]), /* 1 */ + asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57, /* Same as above */ + sizeof(asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57) + /sizeof(asn_DEF_ServedCellsToActivate_Item_ExtIEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCellsToActivate_Item_ExtIEs_57, + 3, /* Elements count */ + &asn_SPC_ServedCellsToActivate_Item_ExtIEs_specs_57 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_64 = { + sizeof(struct ActivatedCellList_Item_ExtIEs__extensionValue), + offsetof(struct ActivatedCellList_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ActivatedCellList_Item_ExtIEs__extensionValue, present), + sizeof(((struct ActivatedCellList_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_64 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ActivatedCellList_Item_ExtIEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActivatedCellList_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActivatedCellList_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ActivatedCellList_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_64, + 0, + { 0, &asn_PER_memb_extensionValue_constr_64, memb_extensionValue_constraint_61 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ActivatedCellList_Item_ExtIEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ActivatedCellList_Item_ExtIEs_specs_61 = { + sizeof(struct ActivatedCellList_Item_ExtIEs), + offsetof(struct ActivatedCellList_Item_ExtIEs, _asn_ctx), + asn_MAP_ActivatedCellList_Item_ExtIEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedCellList_Item_ExtIEs = { + "ActivatedCellList-Item-ExtIEs", + "ActivatedCellList-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61, + sizeof(asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61) + /sizeof(asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61[0]), /* 1 */ + asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61, /* Same as above */ + sizeof(asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61) + /sizeof(asn_DEF_ActivatedCellList_Item_ExtIEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ActivatedCellList_Item_ExtIEs_61, + 3, /* Elements count */ + &asn_SPC_ActivatedCellList_Item_ExtIEs_specs_61 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_68 = { + sizeof(struct RNL_Header_Item_ExtIEs__extensionValue), + offsetof(struct RNL_Header_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RNL_Header_Item_ExtIEs__extensionValue, present), + sizeof(((struct RNL_Header_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_68 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RNL_Header_Item_ExtIEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNL_Header_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNL_Header_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RNL_Header_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_68, + 0, + { 0, &asn_PER_memb_extensionValue_constr_68, memb_extensionValue_constraint_65 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RNL_Header_Item_ExtIEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RNL_Header_Item_ExtIEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RNL_Header_Item_ExtIEs_specs_65 = { + sizeof(struct RNL_Header_Item_ExtIEs), + offsetof(struct RNL_Header_Item_ExtIEs, _asn_ctx), + asn_MAP_RNL_Header_Item_ExtIEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RNL_Header_Item_ExtIEs = { + "RNL-Header-Item-ExtIEs", + "RNL-Header-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RNL_Header_Item_ExtIEs_tags_65, + sizeof(asn_DEF_RNL_Header_Item_ExtIEs_tags_65) + /sizeof(asn_DEF_RNL_Header_Item_ExtIEs_tags_65[0]), /* 1 */ + asn_DEF_RNL_Header_Item_ExtIEs_tags_65, /* Same as above */ + sizeof(asn_DEF_RNL_Header_Item_ExtIEs_tags_65) + /sizeof(asn_DEF_RNL_Header_Item_ExtIEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RNL_Header_Item_ExtIEs_65, + 3, /* Elements count */ + &asn_SPC_RNL_Header_Item_ExtIEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, choice.Correlation_ID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_Correlation_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Correlation-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* Correlation-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_72 = { + sizeof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_72, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_72 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_72, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_72, + select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_72, memb_extensionValue_constraint_69 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69 = { + sizeof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs = { + "E-RABs-ToBeAdded-Item-SCG-BearerExtIEs", + "E-RABs-ToBeAdded-Item-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69, + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_76 = { + sizeof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_76 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_76, + 0, + { 0, &asn_PER_memb_extensionValue_constr_76, memb_extensionValue_constraint_73 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73 = { + sizeof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs = { + "E-RABs-ToBeAdded-Item-Split-BearerExtIEs", + "E-RABs-ToBeAdded-Item-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73, + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73) + /sizeof(asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_80 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_80 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_80, + 0, + { 0, &asn_PER_memb_extensionValue_constr_80, memb_extensionValue_constraint_77 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs = { + "E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs", + "E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_84 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_84 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_84, + 0, + { 0, &asn_PER_memb_extensionValue_constr_84, memb_extensionValue_constraint_81 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs = { + "E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs", + "E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_88 = { + sizeof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue), + offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue, present), + sizeof(((struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_88 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_88, + 0, + { 0, &asn_PER_memb_extensionValue_constr_88, memb_extensionValue_constraint_85 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85 = { + sizeof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs), + offsetof(struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs, _asn_ctx), + asn_MAP_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs = { + "ResponseInformationSeNBReconfComp-SuccessItemExtIEs", + "ResponseInformationSeNBReconfComp-SuccessItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85, + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[0]), /* 1 */ + asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85, + 3, /* Elements count */ + &asn_SPC_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_92 = { + sizeof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue), + offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, present), + sizeof(((struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_92 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_92, + 0, + { 0, &asn_PER_memb_extensionValue_constr_92, memb_extensionValue_constraint_89 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89 = { + sizeof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs), + offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, _asn_ctx), + asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs = { + "ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs", + "ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89, + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[0]), /* 1 */ + asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89, + 3, /* Elements count */ + &asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_96 = { + sizeof(struct UE_ContextInformationSeNBModReqExtIEs__extensionValue), + offsetof(struct UE_ContextInformationSeNBModReqExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextInformationSeNBModReqExtIEs__extensionValue, present), + sizeof(((struct UE_ContextInformationSeNBModReqExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_96 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextInformationSeNBModReqExtIEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSeNBModReqExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSeNBModReqExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSeNBModReqExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_96, + 0, + { 0, &asn_PER_memb_extensionValue_constr_96, memb_extensionValue_constraint_93 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformationSeNBModReqExtIEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationSeNBModReqExtIEs_specs_93 = { + sizeof(struct UE_ContextInformationSeNBModReqExtIEs), + offsetof(struct UE_ContextInformationSeNBModReqExtIEs, _asn_ctx), + asn_MAP_UE_ContextInformationSeNBModReqExtIEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSeNBModReqExtIEs = { + "UE-ContextInformationSeNBModReqExtIEs", + "UE-ContextInformationSeNBModReqExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93, + sizeof(asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93) + /sizeof(asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93[0]), /* 1 */ + asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93) + /sizeof(asn_DEF_UE_ContextInformationSeNBModReqExtIEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformationSeNBModReqExtIEs_93, + 3, /* Elements count */ + &asn_SPC_UE_ContextInformationSeNBModReqExtIEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, choice.Correlation_ID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_Correlation_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Correlation-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* Correlation-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_100 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_100, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_100 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_100, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_100, + select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_100, memb_extensionValue_constraint_97 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs = { + "E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs", + "E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97, + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_104 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_104 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_104, + 0, + { 0, &asn_PER_memb_extensionValue_constr_104, memb_extensionValue_constraint_101 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs = { + "E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs", + "E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101, + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_108 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_108 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_108 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_106, memb_id_constraint_105 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_107, memb_criticality_constraint_105 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_108, + 0, + { 0, &asn_PER_memb_extensionValue_constr_108, memb_extensionValue_constraint_105 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tag2el_105[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tag2el_105, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs = { + "E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs", + "E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105, + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_112 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_112 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_112 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_110, memb_id_constraint_109 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_111, memb_criticality_constraint_109 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_112, + 0, + { 0, &asn_PER_memb_extensionValue_constr_112, memb_extensionValue_constraint_109 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tag2el_109[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109 = { + sizeof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tag2el_109, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs = { + "E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs", + "E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109, + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_116 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_116 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_116 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_114, memb_id_constraint_113 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_115, memb_criticality_constraint_113 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_116, + 0, + { 0, &asn_PER_memb_extensionValue_constr_116, memb_extensionValue_constraint_113 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tag2el_113[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tag2el_113, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs = { + "E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs", + "E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_120 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_120 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_120 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_118, memb_id_constraint_117 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_119, memb_criticality_constraint_117 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_120, + 0, + { 0, &asn_PER_memb_extensionValue_constr_120, memb_extensionValue_constraint_117 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tag2el_117[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tag2el_117, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs = { + "E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs", + "E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_124 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_124 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_124 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_122, memb_id_constraint_121 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_123, memb_criticality_constraint_121 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_124, + 0, + { 0, &asn_PER_memb_extensionValue_constr_124, memb_extensionValue_constraint_121 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tag2el_121[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tag2el_121, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs = { + "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs", + "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_128 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_128 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_128 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_126, memb_id_constraint_125 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_127, memb_criticality_constraint_125 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_128, + 0, + { 0, &asn_PER_memb_extensionValue_constr_128, memb_extensionValue_constraint_125 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tag2el_125[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tag2el_125, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs = { + "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs", + "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_132 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_132 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_132 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_130, memb_id_constraint_129 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_131, memb_criticality_constraint_129 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_132, + 0, + { 0, &asn_PER_memb_extensionValue_constr_132, memb_extensionValue_constraint_129 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tag2el_129[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tag2el_129, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs = { + "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs", + "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_136 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_136 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_136 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_134, memb_id_constraint_133 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_135, memb_criticality_constraint_133 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_136, + 0, + { 0, &asn_PER_memb_extensionValue_constr_136, memb_extensionValue_constraint_133 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tag2el_133[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tag2el_133, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs = { + "E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs", + "E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_140 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_140 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_140 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_138, memb_id_constraint_137 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_139, memb_criticality_constraint_137 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_140, + 0, + { 0, &asn_PER_memb_extensionValue_constr_140, memb_extensionValue_constraint_137 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tag2el_137[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tag2el_137, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs = { + "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs", + "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_144 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_144 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_144 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_142, memb_id_constraint_141 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_143, memb_criticality_constraint_141 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_144, + 0, + { 0, &asn_PER_memb_extensionValue_constr_144, memb_extensionValue_constraint_141 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tag2el_141[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tag2el_141, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs = { + "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs", + "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_148 = { + sizeof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_148 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_148 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqdItemExtIEs_145[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_146, memb_id_constraint_145 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_147, memb_criticality_constraint_145 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_148, + 0, + { 0, &asn_PER_memb_extensionValue_constr_148, memb_extensionValue_constraint_145 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqdItemExtIEs_tag2el_145[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145 = { + sizeof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqdItemExtIEs_tag2el_145, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs = { + "E-RABs-ToBeReleased-ModReqdItemExtIEs", + "E-RABs-ToBeReleased-ModReqdItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqdItemExtIEs_145, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_152 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_152 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_152 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_150, memb_id_constraint_149 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_151, memb_criticality_constraint_149 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_152, + 0, + { 0, &asn_PER_memb_extensionValue_constr_152, memb_extensionValue_constraint_149 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tag2el_149[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tag2el_149, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs = { + "E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs", + "E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_156 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_156 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_156 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_154, memb_id_constraint_153 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_155, memb_criticality_constraint_153 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_156, + 0, + { 0, &asn_PER_memb_extensionValue_constr_156, memb_extensionValue_constraint_153 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tag2el_153[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tag2el_153, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs = { + "E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs", + "E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_160 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_160 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_160 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_158, memb_id_constraint_157 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_159, memb_criticality_constraint_157 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_160, + 0, + { 0, &asn_PER_memb_extensionValue_constr_160, memb_extensionValue_constraint_157 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tag2el_157[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tag2el_157, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs = { + "E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs", + "E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_164 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_164 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_164 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_162, memb_id_constraint_161 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_163, memb_criticality_constraint_161 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_164, + 0, + { 0, &asn_PER_memb_extensionValue_constr_164, memb_extensionValue_constraint_161 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tag2el_161[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs), + offsetof(struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tag2el_161, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs = { + "E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs", + "E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_168 = { + sizeof(struct E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue), + offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_168 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_168 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheckItemExtIEs_165[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_166, memb_id_constraint_165 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_167, memb_criticality_constraint_165 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_168, + 0, + { 0, &asn_PER_memb_extensionValue_constr_168, memb_extensionValue_constraint_165 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToCounterCheckItemExtIEs_tag2el_165[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165 = { + sizeof(struct E_RABs_SubjectToCounterCheckItemExtIEs), + offsetof(struct E_RABs_SubjectToCounterCheckItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToCounterCheckItemExtIEs_tag2el_165, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs = { + "E-RABs-SubjectToCounterCheckItemExtIEs", + "E-RABs-SubjectToCounterCheckItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165, + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToCounterCheckItemExtIEs_165, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_172[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve_ExtIEs__extensionValue, choice.UESidelinkAggregateMaximumBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UESidelinkAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UESidelinkAggregateMaximumBitRate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_172[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* UESidelinkAggregateMaximumBitRate */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_172 = { + sizeof(struct UE_ContextInformationRetrieve_ExtIEs__extensionValue), + offsetof(struct UE_ContextInformationRetrieve_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextInformationRetrieve_ExtIEs__extensionValue, present), + sizeof(((struct UE_ContextInformationRetrieve_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_172, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_172 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_172, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_172 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextInformationRetrieve_ExtIEs_169[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_170, memb_id_constraint_169 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UE_ContextInformationRetrieve_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_171, memb_criticality_constraint_169 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_172, + select_UE_ContextInformationRetrieve_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_172, memb_extensionValue_constraint_169 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformationRetrieve_ExtIEs_tag2el_169[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationRetrieve_ExtIEs_specs_169 = { + sizeof(struct UE_ContextInformationRetrieve_ExtIEs), + offsetof(struct UE_ContextInformationRetrieve_ExtIEs, _asn_ctx), + asn_MAP_UE_ContextInformationRetrieve_ExtIEs_tag2el_169, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationRetrieve_ExtIEs = { + "UE-ContextInformationRetrieve-ExtIEs", + "UE-ContextInformationRetrieve-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169, + sizeof(asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169) + /sizeof(asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169[0]), /* 1 */ + asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169) + /sizeof(asn_DEF_UE_ContextInformationRetrieve_ExtIEs_tags_169[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformationRetrieve_ExtIEs_169, + 3, /* Elements count */ + &asn_SPC_UE_ContextInformationRetrieve_ExtIEs_specs_169 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_176[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, choice.GTPtunnelEndpoint), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GTPtunnelEndpoint" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, choice.DL_Forwarding), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_DL_Forwarding, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DL-Forwarding" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_176[] = { 1, 0 }; +static const unsigned asn_MAP_extensionValue_from_canonical_176[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_176[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* DL-Forwarding */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GTPtunnelEndpoint */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_176 = { + sizeof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_176, + 2, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_176, + asn_MAP_extensionValue_from_canonical_176, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_176 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_176, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_176 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_174, memb_id_constraint_173 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_175, memb_criticality_constraint_173 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_176, + select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_176, memb_extensionValue_constraint_173 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tag2el_173[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173 = { + sizeof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tag2el_173, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs = { + "E-RABs-ToBeSetupRetrieve-ItemExtIEs", + "E-RABs-ToBeSetupRetrieve-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173, + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_180 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_180 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_180 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_178, memb_id_constraint_177 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_179, memb_criticality_constraint_177 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_180, + 0, + { 0, &asn_PER_memb_extensionValue_constr_180, memb_extensionValue_constraint_177 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tag2el_177[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tag2el_177, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs = { + "E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs", + "E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_184[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLCMode), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLCMode" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_184[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_184 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_184, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_184 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_184, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_184 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_182, memb_id_constraint_181 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_183, memb_criticality_constraint_181 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_184, + select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_184, memb_extensionValue_constraint_181 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tag2el_181[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tag2el_181, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_188[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.DuplicationActivation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_DuplicationActivation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DuplicationActivation" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_188[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* DuplicationActivation */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_188 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_188, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_188 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_188, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_188 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_186, memb_id_constraint_185 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_187, memb_criticality_constraint_185 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_188, + select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_188, memb_extensionValue_constraint_185 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_185[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_185, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_192 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_192 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_192 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_190, memb_id_constraint_189 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_191, memb_criticality_constraint_189 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_192, + 0, + { 0, &asn_PER_memb_extensionValue_constr_192, memb_extensionValue_constraint_189 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tag2el_189[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tag2el_189, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs = { + "E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs", + "E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_196[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_196[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_196 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_196, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_196 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_196, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_196 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_194, memb_id_constraint_193 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_195, memb_criticality_constraint_193 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_196, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_196, memb_extensionValue_constraint_193 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tag2el_193[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tag2el_193, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_200[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_LCID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LCID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_200[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* LCID */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_200 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_200, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_200 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_200, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_200 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_198, memb_id_constraint_197 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_199, memb_criticality_constraint_197 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_200, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_200, memb_extensionValue_constraint_197 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_197[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_197, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_204 = { + sizeof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue), + offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue, present), + sizeof(((struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_204 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_204 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_202, memb_id_constraint_201 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_203, memb_criticality_constraint_201 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_204, + 0, + { 0, &asn_PER_memb_extensionValue_constr_204, memb_extensionValue_constraint_201 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tag2el_201[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201 = { + sizeof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs), + offsetof(struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs, _asn_ctx), + asn_MAP_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tag2el_201, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs = { + "ResponseInformationSgNBReconfComp-SuccessItemExtIEs", + "ResponseInformationSgNBReconfComp-SuccessItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201, + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[0]), /* 1 */ + asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201, + 3, /* Elements count */ + &asn_SPC_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_208 = { + sizeof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue), + offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, present), + sizeof(((struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_208 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_208 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_206, memb_id_constraint_205 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_207, memb_criticality_constraint_205 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_208, + 0, + { 0, &asn_PER_memb_extensionValue_constr_208, memb_extensionValue_constraint_205 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tag2el_205[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205 = { + sizeof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs), + offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, _asn_ctx), + asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tag2el_205, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs = { + "ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs", + "ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205, + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[0]), /* 1 */ + asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205, + 3, /* Elements count */ + &asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_212[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSgNBModReqExtIEs__extensionValue, choice.SubscriberProfileIDforRFP), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SubscriberProfileIDforRFP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SubscriberProfileIDforRFP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_212[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* SubscriberProfileIDforRFP */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_212 = { + sizeof(struct UE_ContextInformationSgNBModReqExtIEs__extensionValue), + offsetof(struct UE_ContextInformationSgNBModReqExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_ContextInformationSgNBModReqExtIEs__extensionValue, present), + sizeof(((struct UE_ContextInformationSgNBModReqExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_212, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_212 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_212, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_212 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_ContextInformationSgNBModReqExtIEs_209[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSgNBModReqExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_210, memb_id_constraint_209 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSgNBModReqExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UE_ContextInformationSgNBModReqExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_211, memb_criticality_constraint_209 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationSgNBModReqExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_212, + select_UE_ContextInformationSgNBModReqExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_212, memb_extensionValue_constraint_209 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformationSgNBModReqExtIEs_tag2el_209[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationSgNBModReqExtIEs_specs_209 = { + sizeof(struct UE_ContextInformationSgNBModReqExtIEs), + offsetof(struct UE_ContextInformationSgNBModReqExtIEs, _asn_ctx), + asn_MAP_UE_ContextInformationSgNBModReqExtIEs_tag2el_209, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSgNBModReqExtIEs = { + "UE-ContextInformationSgNBModReqExtIEs", + "UE-ContextInformationSgNBModReqExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209, + sizeof(asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209) + /sizeof(asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209[0]), /* 1 */ + asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209) + /sizeof(asn_DEF_UE_ContextInformationSgNBModReqExtIEs_tags_209[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformationSgNBModReqExtIEs_209, + 3, /* Elements count */ + &asn_SPC_UE_ContextInformationSgNBModReqExtIEs_specs_209 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_216 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_216 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_216 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_214, memb_id_constraint_213 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_215, memb_criticality_constraint_213 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_216, + 0, + { 0, &asn_PER_memb_extensionValue_constr_216, memb_extensionValue_constraint_213 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tag2el_213[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tag2el_213, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs = { + "E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs", + "E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_220[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLCMode), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLCMode" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_220[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_220 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_220, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_220 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_220, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_220 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_218, memb_id_constraint_217 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_219, memb_criticality_constraint_217 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_220, + select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_220, memb_extensionValue_constraint_217 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_217[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_217, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_224[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.DuplicationActivation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_DuplicationActivation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DuplicationActivation" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_224[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* DuplicationActivation */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_224 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_224, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_224 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_224, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_224 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_222, memb_id_constraint_221 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_223, memb_criticality_constraint_221 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_224, + select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_224, memb_extensionValue_constraint_221 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_221[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_221, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_228 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_228 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_228 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_226, memb_id_constraint_225 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_227, memb_criticality_constraint_225 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_228, + 0, + { 0, &asn_PER_memb_extensionValue_constr_228, memb_extensionValue_constraint_225 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tag2el_225[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tag2el_225, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs = { + "E-RABs-ToBeModified-SgNBModReq-ItemExtIEs", + "E-RABs-ToBeModified-SgNBModReq-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_232[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLC_Status), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RLC_Status, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLC-Status" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_232[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RLC-Status */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_232 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_232, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_232 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_232, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_232 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_230, memb_id_constraint_229 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_231, memb_criticality_constraint_229 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_232, + select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_232, memb_extensionValue_constraint_229 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_229[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_229, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_236[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.GTPtunnelEndpoint), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GTPtunnelEndpoint" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_236[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* PDCPSnLength */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* GTPtunnelEndpoint */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_236 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_236, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_236 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_236, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_236 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_234, memb_id_constraint_233 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_235, memb_criticality_constraint_233 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_236, + select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_236, memb_extensionValue_constraint_233 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_233[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_233, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_240 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_240 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_240 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_238, memb_id_constraint_237 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_239, memb_criticality_constraint_237 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_240, + 0, + { 0, &asn_PER_memb_extensionValue_constr_240, memb_extensionValue_constraint_237 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tag2el_237[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tag2el_237, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_244 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_244 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_244 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_242, memb_id_constraint_241 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_243, memb_criticality_constraint_241 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_244, + 0, + { 0, &asn_PER_memb_extensionValue_constr_244, memb_extensionValue_constraint_241 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_241[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_241, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_248 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_248 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_248 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_246, memb_id_constraint_245 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_247, memb_criticality_constraint_245 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_248, + 0, + { 0, &asn_PER_memb_extensionValue_constr_248, memb_extensionValue_constraint_245 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_245[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_245, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_252 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_252 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_252 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_250, memb_id_constraint_249 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_251, memb_criticality_constraint_249 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_252, + 0, + { 0, &asn_PER_memb_extensionValue_constr_252, memb_extensionValue_constraint_249 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_249[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_249, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_256[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_256[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_256 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_256, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_256 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_256, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_256 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_254, memb_id_constraint_253 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_255, memb_criticality_constraint_253 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_256, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_256, memb_extensionValue_constraint_253 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_253[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_253, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_260[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_LCID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LCID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_260[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* LCID */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_260 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_260, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_260 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_260, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_260 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_258, memb_id_constraint_257 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_259, memb_criticality_constraint_257 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_260, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_260, memb_extensionValue_constraint_257 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_257[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_257, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_264 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_264 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_264 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_262, memb_id_constraint_261 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_263, memb_criticality_constraint_261 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_264, + 0, + { 0, &asn_PER_memb_extensionValue_constr_264, memb_extensionValue_constraint_261 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_261[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_261, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs = { + "E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs", + "E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_268[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_268[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_268 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_268, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_268 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_268, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_268 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_266, memb_id_constraint_265 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_267, memb_criticality_constraint_265 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_268, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_268, memb_extensionValue_constraint_265 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_265[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_265, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_272[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.GTPtunnelEndpoint), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GTPtunnelEndpoint, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GTPtunnelEndpoint" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.RLC_Status), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RLC_Status, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLC-Status" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_272[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GTPtunnelEndpoint */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RLC-Status */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_272 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_272, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_272 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_272, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_272 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_270, memb_id_constraint_269 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_271, memb_criticality_constraint_269 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_272, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_272, memb_extensionValue_constraint_269 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_269[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_269, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_276 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_276 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_276 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_274, memb_id_constraint_273 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_275, memb_criticality_constraint_273 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_276, + 0, + { 0, &asn_PER_memb_extensionValue_constr_276, memb_extensionValue_constraint_273 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tag2el_273[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tag2el_273, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_280 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_280 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_280 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_278, memb_id_constraint_277 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_279, memb_criticality_constraint_277 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_280, + 0, + { 0, &asn_PER_memb_extensionValue_constr_280, memb_extensionValue_constraint_277 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_277[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_277, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_284 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_284 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_284 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_282, memb_id_constraint_281 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_283, memb_criticality_constraint_281 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_284, + 0, + { 0, &asn_PER_memb_extensionValue_constr_284, memb_extensionValue_constraint_281 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_281[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_281, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_288[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, choice.RLCMode), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RLCMode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLCMode" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_288[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_288 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_288, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_288 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_288, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_288 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_286, memb_id_constraint_285 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_287, memb_criticality_constraint_285 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_288, + select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_288, memb_extensionValue_constraint_285 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tag2el_285[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tag2el_285, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_292 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_292 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_292 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_290, memb_id_constraint_289 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_291, memb_criticality_constraint_289 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_292, + 0, + { 0, &asn_PER_memb_extensionValue_constr_292, memb_extensionValue_constraint_289 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tag2el_289[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tag2el_289, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs = { + "E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs", + "E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_296[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.NewDRBIDrequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_NewDRBIDrequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NewDRBIDrequest" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_296[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* NewDRBIDrequest */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_296 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_296, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_296 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_296, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_296 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_294, memb_id_constraint_293 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_295, memb_criticality_constraint_293 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_296, + select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_296, memb_extensionValue_constraint_293 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tag2el_293[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tag2el_293, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_300[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.RLC_Status), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RLC_Status, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RLC-Status" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_LCID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LCID" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_300[] = { 1, 0 }; +static const unsigned asn_MAP_extensionValue_from_canonical_300[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_300[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* LCID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RLC-Status */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_300 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_300, + 2, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_300, + asn_MAP_extensionValue_from_canonical_300, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_300 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_300, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_300 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_298, memb_id_constraint_297 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_299, memb_criticality_constraint_297 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_300, + select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_300, memb_extensionValue_constraint_297 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tag2el_297[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tag2el_297, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_304 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_304 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_304 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_302, memb_id_constraint_301 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_303, memb_criticality_constraint_301 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_304, + 0, + { 0, &asn_PER_memb_extensionValue_constr_304, memb_extensionValue_constraint_301 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tag2el_301[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tag2el_301, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs = { + "E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs", + "E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301, + 3, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_308 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_308 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_308 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_306, memb_id_constraint_305 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_307, memb_criticality_constraint_305 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_308, + 0, + { 0, &asn_PER_memb_extensionValue_constr_308, memb_extensionValue_constraint_305 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tag2el_305[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tag2el_305, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs", + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305, + 3, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_312[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPSnLength, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPSnLength" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_312[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_312 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_312, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_312 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_312, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_312 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_310, memb_id_constraint_309 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_311, memb_criticality_constraint_309 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_312, + select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_312, memb_extensionValue_constraint_309 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_309[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_309, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309, + 3, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_316 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_316 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_316 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_314, memb_id_constraint_313 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_315, memb_criticality_constraint_313 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_316, + 0, + { 0, &asn_PER_memb_extensionValue_constr_316, memb_extensionValue_constraint_313 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tag2el_313[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tag2el_313, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_320 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_320 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_320 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_318, memb_id_constraint_317 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_319, memb_criticality_constraint_317 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_320, + 0, + { 0, &asn_PER_memb_extensionValue_constr_320, memb_extensionValue_constraint_317 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tag2el_317[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tag2el_317, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_324 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_324 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_324 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_322, memb_id_constraint_321 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_323, memb_criticality_constraint_321 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_324, + 0, + { 0, &asn_PER_memb_extensionValue_constr_324, memb_extensionValue_constraint_321 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_321[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_321, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_328 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_328 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_328 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_326, memb_id_constraint_325 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_327, memb_criticality_constraint_325 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_328, + 0, + { 0, &asn_PER_memb_extensionValue_constr_328, memb_extensionValue_constraint_325 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tag2el_325[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tag2el_325, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs = { + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs", + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_332 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_332 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_332 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_330, memb_id_constraint_329 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_331, memb_criticality_constraint_329 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_332, + 0, + { 0, &asn_PER_memb_extensionValue_constr_332, memb_extensionValue_constraint_329 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tag2el_329[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tag2el_329, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_336 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_336 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_336 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_334, memb_id_constraint_333 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_335, memb_criticality_constraint_333 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_336, + 0, + { 0, &asn_PER_memb_extensionValue_constr_336, memb_extensionValue_constraint_333 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tag2el_333[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tag2el_333, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_340 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_340 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_340 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_338, memb_id_constraint_337 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_339, memb_criticality_constraint_337 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_340, + 0, + { 0, &asn_PER_memb_extensionValue_constr_340, memb_extensionValue_constraint_337 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tag2el_337[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tag2el_337, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_344 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_344 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_344 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_342, memb_id_constraint_341 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_343, memb_criticality_constraint_341 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_344, + 0, + { 0, &asn_PER_memb_extensionValue_constr_344, memb_extensionValue_constraint_341 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_341[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_341, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_348 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_348 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_348 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_346, memb_id_constraint_345 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_347, memb_criticality_constraint_345 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_348, + 0, + { 0, &asn_PER_memb_extensionValue_constr_348, memb_extensionValue_constraint_345 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tag2el_345[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tag2el_345, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs = { + "E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs", + "E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345, + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_352 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_352 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_352 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_350, memb_id_constraint_349 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_351, memb_criticality_constraint_349 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_352, + 0, + { 0, &asn_PER_memb_extensionValue_constr_352, memb_extensionValue_constraint_349 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tag2el_349[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tag2el_349, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs = { + "E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs", + "E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_356 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_356 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_356 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_354, memb_id_constraint_353 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_355, memb_criticality_constraint_353 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_356, + 0, + { 0, &asn_PER_memb_extensionValue_constr_356, memb_extensionValue_constraint_353 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tag2el_353[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tag2el_353, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs", + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_360 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_360 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_360 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_358, memb_id_constraint_357 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_359, memb_criticality_constraint_357 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_360, + 0, + { 0, &asn_PER_memb_extensionValue_constr_360, memb_extensionValue_constraint_357 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_357[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_357, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs = { + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs", + "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_364 = { + sizeof(struct ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue), + offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue, present), + sizeof(((struct ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_364 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_364 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedEUTRAcellsENDCX2Management_ExtIEs_361[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_362, memb_id_constraint_361 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_363, memb_criticality_constraint_361 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_364, + 0, + { 0, &asn_PER_memb_extensionValue_constr_364, memb_extensionValue_constraint_361 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedEUTRAcellsENDCX2Management_ExtIEs_tag2el_361[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361 = { + sizeof(struct ServedEUTRAcellsENDCX2Management_ExtIEs), + offsetof(struct ServedEUTRAcellsENDCX2Management_ExtIEs, _asn_ctx), + asn_MAP_ServedEUTRAcellsENDCX2Management_ExtIEs_tag2el_361, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs = { + "ServedEUTRAcellsENDCX2Management-ExtIEs", + "ServedEUTRAcellsENDCX2Management-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361, + sizeof(asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361) + /sizeof(asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[0]), /* 1 */ + asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361, /* Same as above */ + sizeof(asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361) + /sizeof(asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedEUTRAcellsENDCX2Management_ExtIEs_361, + 3, /* Elements count */ + &asn_SPC_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_368 = { + sizeof(struct En_gNBServedCells_ExtIEs__extensionValue), + offsetof(struct En_gNBServedCells_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct En_gNBServedCells_ExtIEs__extensionValue, present), + sizeof(((struct En_gNBServedCells_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_368 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_368 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNBServedCells_ExtIEs_365[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNBServedCells_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_366, memb_id_constraint_365 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNBServedCells_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_367, memb_criticality_constraint_365 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNBServedCells_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_368, + 0, + { 0, &asn_PER_memb_extensionValue_constr_368, memb_extensionValue_constraint_365 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNBServedCells_ExtIEs_tags_365[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNBServedCells_ExtIEs_tag2el_365[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNBServedCells_ExtIEs_specs_365 = { + sizeof(struct En_gNBServedCells_ExtIEs), + offsetof(struct En_gNBServedCells_ExtIEs, _asn_ctx), + asn_MAP_En_gNBServedCells_ExtIEs_tag2el_365, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNBServedCells_ExtIEs = { + "En-gNBServedCells-ExtIEs", + "En-gNBServedCells-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNBServedCells_ExtIEs_tags_365, + sizeof(asn_DEF_En_gNBServedCells_ExtIEs_tags_365) + /sizeof(asn_DEF_En_gNBServedCells_ExtIEs_tags_365[0]), /* 1 */ + asn_DEF_En_gNBServedCells_ExtIEs_tags_365, /* Same as above */ + sizeof(asn_DEF_En_gNBServedCells_ExtIEs_tags_365) + /sizeof(asn_DEF_En_gNBServedCells_ExtIEs_tags_365[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNBServedCells_ExtIEs_365, + 3, /* Elements count */ + &asn_SPC_En_gNBServedCells_ExtIEs_specs_365 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_372 = { + sizeof(struct ServedNRCell_Information_ExtIEs__extensionValue), + offsetof(struct ServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedNRCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct ServedNRCell_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_372 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_372 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedNRCell_Information_ExtIEs_369[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_370, memb_id_constraint_369 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_371, memb_criticality_constraint_369 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_372, + 0, + { 0, &asn_PER_memb_extensionValue_constr_372, memb_extensionValue_constraint_369 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRCell_Information_ExtIEs_tags_369[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCell_Information_ExtIEs_tag2el_369[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCell_Information_ExtIEs_specs_369 = { + sizeof(struct ServedNRCell_Information_ExtIEs), + offsetof(struct ServedNRCell_Information_ExtIEs, _asn_ctx), + asn_MAP_ServedNRCell_Information_ExtIEs_tag2el_369, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCell_Information_ExtIEs = { + "ServedNRCell-Information-ExtIEs", + "ServedNRCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCell_Information_ExtIEs_tags_369, + sizeof(asn_DEF_ServedNRCell_Information_ExtIEs_tags_369) + /sizeof(asn_DEF_ServedNRCell_Information_ExtIEs_tags_369[0]), /* 1 */ + asn_DEF_ServedNRCell_Information_ExtIEs_tags_369, /* Same as above */ + sizeof(asn_DEF_ServedNRCell_Information_ExtIEs_tags_369) + /sizeof(asn_DEF_ServedNRCell_Information_ExtIEs_tags_369[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCell_Information_ExtIEs_369, + 3, /* Elements count */ + &asn_SPC_ServedNRCell_Information_ExtIEs_specs_369 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_376 = { + sizeof(struct FDD_InfoServedNRCell_Information_ExtIEs__extensionValue), + offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct FDD_InfoServedNRCell_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_376 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_376 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FDD_InfoServedNRCell_Information_ExtIEs_373[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_374, memb_id_constraint_373 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_375, memb_criticality_constraint_373 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_376, + 0, + { 0, &asn_PER_memb_extensionValue_constr_376, memb_extensionValue_constraint_373 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_InfoServedNRCell_Information_ExtIEs_tag2el_373[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoServedNRCell_Information_ExtIEs_specs_373 = { + sizeof(struct FDD_InfoServedNRCell_Information_ExtIEs), + offsetof(struct FDD_InfoServedNRCell_Information_ExtIEs, _asn_ctx), + asn_MAP_FDD_InfoServedNRCell_Information_ExtIEs_tag2el_373, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs = { + "FDD-InfoServedNRCell-Information-ExtIEs", + "FDD-InfoServedNRCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373, + sizeof(asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373) + /sizeof(asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[0]), /* 1 */ + asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373, /* Same as above */ + sizeof(asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373) + /sizeof(asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_InfoServedNRCell_Information_ExtIEs_373, + 3, /* Elements count */ + &asn_SPC_FDD_InfoServedNRCell_Information_ExtIEs_specs_373 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_380 = { + sizeof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue), + offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_380 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_380 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_378, memb_id_constraint_377 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_379, memb_criticality_constraint_377 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_380, + 0, + { 0, &asn_PER_memb_extensionValue_constr_380, memb_extensionValue_constraint_377 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_377[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377 = { + sizeof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs), + offsetof(struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs, _asn_ctx), + asn_MAP_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_377, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs = { + "FDD-InfoNeighbourServedNRCell-Information-ExtIEs", + "FDD-InfoNeighbourServedNRCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377, + sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377) + /sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[0]), /* 1 */ + asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377, /* Same as above */ + sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377) + /sizeof(asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377, + 3, /* Elements count */ + &asn_SPC_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_384 = { + sizeof(struct TDD_InfoServedNRCell_Information_ExtIEs__extensionValue), + offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct TDD_InfoServedNRCell_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_384 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_384 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TDD_InfoServedNRCell_Information_ExtIEs_381[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_382, memb_id_constraint_381 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_383, memb_criticality_constraint_381 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_384, + 0, + { 0, &asn_PER_memb_extensionValue_constr_384, memb_extensionValue_constraint_381 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_InfoServedNRCell_Information_ExtIEs_tag2el_381[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoServedNRCell_Information_ExtIEs_specs_381 = { + sizeof(struct TDD_InfoServedNRCell_Information_ExtIEs), + offsetof(struct TDD_InfoServedNRCell_Information_ExtIEs, _asn_ctx), + asn_MAP_TDD_InfoServedNRCell_Information_ExtIEs_tag2el_381, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs = { + "TDD-InfoServedNRCell-Information-ExtIEs", + "TDD-InfoServedNRCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381, + sizeof(asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381) + /sizeof(asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[0]), /* 1 */ + asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381, /* Same as above */ + sizeof(asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381) + /sizeof(asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_InfoServedNRCell_Information_ExtIEs_381, + 3, /* Elements count */ + &asn_SPC_TDD_InfoServedNRCell_Information_ExtIEs_specs_381 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_388 = { + sizeof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue), + offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_388 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_388 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_386, memb_id_constraint_385 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_387, memb_criticality_constraint_385 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_388, + 0, + { 0, &asn_PER_memb_extensionValue_constr_388, memb_extensionValue_constraint_385 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_385[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385 = { + sizeof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs), + offsetof(struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs, _asn_ctx), + asn_MAP_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_385, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs = { + "TDD-InfoNeighbourServedNRCell-Information-ExtIEs", + "TDD-InfoNeighbourServedNRCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385, + sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385) + /sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[0]), /* 1 */ + asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385, /* Same as above */ + sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385) + /sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385, + 3, /* Elements count */ + &asn_SPC_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_392 = { + sizeof(struct NRNeighbour_Information_ExtIEs__extensionValue), + offsetof(struct NRNeighbour_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct NRNeighbour_Information_ExtIEs__extensionValue, present), + sizeof(((struct NRNeighbour_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_392 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_392 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRNeighbour_Information_ExtIEs_389[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_390, memb_id_constraint_389 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_391, memb_criticality_constraint_389 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct NRNeighbour_Information_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_392, + 0, + { 0, &asn_PER_memb_extensionValue_constr_392, memb_extensionValue_constraint_389 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRNeighbour_Information_ExtIEs_tags_389[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRNeighbour_Information_ExtIEs_tag2el_389[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRNeighbour_Information_ExtIEs_specs_389 = { + sizeof(struct NRNeighbour_Information_ExtIEs), + offsetof(struct NRNeighbour_Information_ExtIEs, _asn_ctx), + asn_MAP_NRNeighbour_Information_ExtIEs_tag2el_389, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRNeighbour_Information_ExtIEs = { + "NRNeighbour-Information-ExtIEs", + "NRNeighbour-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_NRNeighbour_Information_ExtIEs_tags_389, + sizeof(asn_DEF_NRNeighbour_Information_ExtIEs_tags_389) + /sizeof(asn_DEF_NRNeighbour_Information_ExtIEs_tags_389[0]), /* 1 */ + asn_DEF_NRNeighbour_Information_ExtIEs_tags_389, /* Same as above */ + sizeof(asn_DEF_NRNeighbour_Information_ExtIEs_tags_389) + /sizeof(asn_DEF_NRNeighbour_Information_ExtIEs_tags_389[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRNeighbour_Information_ExtIEs_389, + 3, /* Elements count */ + &asn_SPC_NRNeighbour_Information_ExtIEs_specs_389 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_396 = { + sizeof(struct Limited_list_ExtIEs__extensionValue), + offsetof(struct Limited_list_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct Limited_list_ExtIEs__extensionValue, present), + sizeof(((struct Limited_list_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_396 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_396 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Limited_list_ExtIEs_393[] = { + { ATF_NOFLAGS, 0, offsetof(struct Limited_list_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_394, memb_id_constraint_393 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct Limited_list_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_395, memb_criticality_constraint_393 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Limited_list_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_396, + 0, + { 0, &asn_PER_memb_extensionValue_constr_396, memb_extensionValue_constraint_393 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_Limited_list_ExtIEs_tags_393[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Limited_list_ExtIEs_tag2el_393[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Limited_list_ExtIEs_specs_393 = { + sizeof(struct Limited_list_ExtIEs), + offsetof(struct Limited_list_ExtIEs, _asn_ctx), + asn_MAP_Limited_list_ExtIEs_tag2el_393, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Limited_list_ExtIEs = { + "Limited-list-ExtIEs", + "Limited-list-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_Limited_list_ExtIEs_tags_393, + sizeof(asn_DEF_Limited_list_ExtIEs_tags_393) + /sizeof(asn_DEF_Limited_list_ExtIEs_tags_393[0]), /* 1 */ + asn_DEF_Limited_list_ExtIEs_tags_393, /* Same as above */ + sizeof(asn_DEF_Limited_list_ExtIEs_tags_393) + /sizeof(asn_DEF_Limited_list_ExtIEs_tags_393[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Limited_list_ExtIEs_393, + 3, /* Elements count */ + &asn_SPC_Limited_list_ExtIEs_specs_393 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_400 = { + sizeof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue), + offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue, present), + sizeof(((struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_400 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_400 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_398, memb_id_constraint_397 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_399, memb_criticality_constraint_397 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_400, + 0, + { 0, &asn_PER_memb_extensionValue_constr_400, memb_extensionValue_constraint_397 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tag2el_397[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397 = { + sizeof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs), + offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, _asn_ctx), + asn_MAP_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tag2el_397, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs = { + "ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs", + "ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397, + sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397) + /sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[0]), /* 1 */ + asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397, /* Same as above */ + sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397) + /sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397, + 3, /* Elements count */ + &asn_SPC_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_404 = { + sizeof(struct ServedNRCellsToModify_Item_ExtIEs__extensionValue), + offsetof(struct ServedNRCellsToModify_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedNRCellsToModify_Item_ExtIEs__extensionValue, present), + sizeof(((struct ServedNRCellsToModify_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_404 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_404 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedNRCellsToModify_Item_ExtIEs_401[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToModify_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_402, memb_id_constraint_401 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToModify_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_403, memb_criticality_constraint_401 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToModify_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_404, + 0, + { 0, &asn_PER_memb_extensionValue_constr_404, memb_extensionValue_constraint_401 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCellsToModify_Item_ExtIEs_tag2el_401[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToModify_Item_ExtIEs_specs_401 = { + sizeof(struct ServedNRCellsToModify_Item_ExtIEs), + offsetof(struct ServedNRCellsToModify_Item_ExtIEs, _asn_ctx), + asn_MAP_ServedNRCellsToModify_Item_ExtIEs_tag2el_401, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToModify_Item_ExtIEs = { + "ServedNRCellsToModify-Item-ExtIEs", + "ServedNRCellsToModify-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401, + sizeof(asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401) + /sizeof(asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401[0]), /* 1 */ + asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401, /* Same as above */ + sizeof(asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401) + /sizeof(asn_DEF_ServedNRCellsToModify_Item_ExtIEs_tags_401[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCellsToModify_Item_ExtIEs_401, + 3, /* Elements count */ + &asn_SPC_ServedNRCellsToModify_Item_ExtIEs_specs_401 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_408 = { + sizeof(struct ServedNRCellsToActivate_Item_ExtIEs__extensionValue), + offsetof(struct ServedNRCellsToActivate_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedNRCellsToActivate_Item_ExtIEs__extensionValue, present), + sizeof(((struct ServedNRCellsToActivate_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_408 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_408 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedNRCellsToActivate_Item_ExtIEs_405[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToActivate_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_406, memb_id_constraint_405 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToActivate_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_407, memb_criticality_constraint_405 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToActivate_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_408, + 0, + { 0, &asn_PER_memb_extensionValue_constr_408, memb_extensionValue_constraint_405 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCellsToActivate_Item_ExtIEs_tag2el_405[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToActivate_Item_ExtIEs_specs_405 = { + sizeof(struct ServedNRCellsToActivate_Item_ExtIEs), + offsetof(struct ServedNRCellsToActivate_Item_ExtIEs, _asn_ctx), + asn_MAP_ServedNRCellsToActivate_Item_ExtIEs_tag2el_405, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate_Item_ExtIEs = { + "ServedNRCellsToActivate-Item-ExtIEs", + "ServedNRCellsToActivate-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405, + sizeof(asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405) + /sizeof(asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405[0]), /* 1 */ + asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405, /* Same as above */ + sizeof(asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405) + /sizeof(asn_DEF_ServedNRCellsToActivate_Item_ExtIEs_tags_405[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCellsToActivate_Item_ExtIEs_405, + 3, /* Elements count */ + &asn_SPC_ServedNRCellsToActivate_Item_ExtIEs_specs_405 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_412 = { + sizeof(struct ActivatedNRCellList_Item_ExtIEs__extensionValue), + offsetof(struct ActivatedNRCellList_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ActivatedNRCellList_Item_ExtIEs__extensionValue, present), + sizeof(((struct ActivatedNRCellList_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_412 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_412 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ActivatedNRCellList_Item_ExtIEs_409[] = { + { ATF_NOFLAGS, 0, offsetof(struct ActivatedNRCellList_Item_ExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_410, memb_id_constraint_409 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ActivatedNRCellList_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_411, memb_criticality_constraint_409 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ActivatedNRCellList_Item_ExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_412, + 0, + { 0, &asn_PER_memb_extensionValue_constr_412, memb_extensionValue_constraint_409 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ActivatedNRCellList_Item_ExtIEs_tag2el_409[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ActivatedNRCellList_Item_ExtIEs_specs_409 = { + sizeof(struct ActivatedNRCellList_Item_ExtIEs), + offsetof(struct ActivatedNRCellList_Item_ExtIEs, _asn_ctx), + asn_MAP_ActivatedNRCellList_Item_ExtIEs_tag2el_409, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList_Item_ExtIEs = { + "ActivatedNRCellList-Item-ExtIEs", + "ActivatedNRCellList-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409, + sizeof(asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409) + /sizeof(asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409[0]), /* 1 */ + asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409, /* Same as above */ + sizeof(asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409) + /sizeof(asn_DEF_ActivatedNRCellList_Item_ExtIEs_tags_409[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ActivatedNRCellList_Item_ExtIEs_409, + 3, /* Elements count */ + &asn_SPC_ActivatedNRCellList_Item_ExtIEs_specs_409 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_416 = { + sizeof(struct E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue), + offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue, present), + sizeof(((struct E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_416 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_416 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_ItemExtIEs_413[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_414, memb_id_constraint_413 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_415, memb_criticality_constraint_413 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs, extensionValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_extensionValue_416, + 0, + { 0, &asn_PER_memb_extensionValue_constr_416, memb_extensionValue_constraint_413 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_DataForwardingAddress_ItemExtIEs_tag2el_413[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413 = { + sizeof(struct E_RABs_DataForwardingAddress_ItemExtIEs), + offsetof(struct E_RABs_DataForwardingAddress_ItemExtIEs, _asn_ctx), + asn_MAP_E_RABs_DataForwardingAddress_ItemExtIEs_tag2el_413, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs = { + "E-RABs-DataForwardingAddress-ItemExtIEs", + "E-RABs-DataForwardingAddress-ItemExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413, + sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[0]), /* 1 */ + asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413, /* Same as above */ + sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_DataForwardingAddress_ItemExtIEs_413, + 3, /* Elements count */ + &asn_SPC_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_420 = { + sizeof(struct ABSInformationFDD_ExtIEs__extensionValue), + offsetof(struct ABSInformationFDD_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ABSInformationFDD_ExtIEs__extensionValue, present), + sizeof(((struct ABSInformationFDD_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_420 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_420 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ABSInformationFDD_ExtIEs_417[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_418, memb_id_constraint_417 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_419, memb_criticality_constraint_417 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ABSInformationFDD_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_420, + 0, + { 0, &asn_PER_memb_extensionValue_constr_420, memb_extensionValue_constraint_417 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ABSInformationFDD_ExtIEs_tags_417[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABSInformationFDD_ExtIEs_tag2el_417[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABSInformationFDD_ExtIEs_specs_417 = { + sizeof(struct ABSInformationFDD_ExtIEs), + offsetof(struct ABSInformationFDD_ExtIEs, _asn_ctx), + asn_MAP_ABSInformationFDD_ExtIEs_tag2el_417, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABSInformationFDD_ExtIEs = { + "ABSInformationFDD-ExtIEs", + "ABSInformationFDD-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ABSInformationFDD_ExtIEs_tags_417, + sizeof(asn_DEF_ABSInformationFDD_ExtIEs_tags_417) + /sizeof(asn_DEF_ABSInformationFDD_ExtIEs_tags_417[0]), /* 1 */ + asn_DEF_ABSInformationFDD_ExtIEs_tags_417, /* Same as above */ + sizeof(asn_DEF_ABSInformationFDD_ExtIEs_tags_417) + /sizeof(asn_DEF_ABSInformationFDD_ExtIEs_tags_417[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABSInformationFDD_ExtIEs_417, + 3, /* Elements count */ + &asn_SPC_ABSInformationFDD_ExtIEs_specs_417 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_424 = { + sizeof(struct ABSInformationTDD_ExtIEs__extensionValue), + offsetof(struct ABSInformationTDD_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ABSInformationTDD_ExtIEs__extensionValue, present), + sizeof(((struct ABSInformationTDD_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_424 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_424 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ABSInformationTDD_ExtIEs_421[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_422, memb_id_constraint_421 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_423, memb_criticality_constraint_421 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ABSInformationTDD_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_424, + 0, + { 0, &asn_PER_memb_extensionValue_constr_424, memb_extensionValue_constraint_421 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ABSInformationTDD_ExtIEs_tags_421[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABSInformationTDD_ExtIEs_tag2el_421[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABSInformationTDD_ExtIEs_specs_421 = { + sizeof(struct ABSInformationTDD_ExtIEs), + offsetof(struct ABSInformationTDD_ExtIEs, _asn_ctx), + asn_MAP_ABSInformationTDD_ExtIEs_tag2el_421, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABSInformationTDD_ExtIEs = { + "ABSInformationTDD-ExtIEs", + "ABSInformationTDD-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ABSInformationTDD_ExtIEs_tags_421, + sizeof(asn_DEF_ABSInformationTDD_ExtIEs_tags_421) + /sizeof(asn_DEF_ABSInformationTDD_ExtIEs_tags_421[0]), /* 1 */ + asn_DEF_ABSInformationTDD_ExtIEs_tags_421, /* Same as above */ + sizeof(asn_DEF_ABSInformationTDD_ExtIEs_tags_421) + /sizeof(asn_DEF_ABSInformationTDD_ExtIEs_tags_421[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABSInformationTDD_ExtIEs_421, + 3, /* Elements count */ + &asn_SPC_ABSInformationTDD_ExtIEs_specs_421 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_428 = { + sizeof(struct ABS_Status_ExtIEs__extensionValue), + offsetof(struct ABS_Status_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ABS_Status_ExtIEs__extensionValue, present), + sizeof(((struct ABS_Status_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_428 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_428 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ABS_Status_ExtIEs_425[] = { + { ATF_NOFLAGS, 0, offsetof(struct ABS_Status_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_426, memb_id_constraint_425 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ABS_Status_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_427, memb_criticality_constraint_425 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ABS_Status_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_428, + 0, + { 0, &asn_PER_memb_extensionValue_constr_428, memb_extensionValue_constraint_425 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ABS_Status_ExtIEs_tags_425[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ABS_Status_ExtIEs_tag2el_425[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ABS_Status_ExtIEs_specs_425 = { + sizeof(struct ABS_Status_ExtIEs), + offsetof(struct ABS_Status_ExtIEs, _asn_ctx), + asn_MAP_ABS_Status_ExtIEs_tag2el_425, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ABS_Status_ExtIEs = { + "ABS-Status-ExtIEs", + "ABS-Status-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ABS_Status_ExtIEs_tags_425, + sizeof(asn_DEF_ABS_Status_ExtIEs_tags_425) + /sizeof(asn_DEF_ABS_Status_ExtIEs_tags_425[0]), /* 1 */ + asn_DEF_ABS_Status_ExtIEs_tags_425, /* Same as above */ + sizeof(asn_DEF_ABS_Status_ExtIEs_tags_425) + /sizeof(asn_DEF_ABS_Status_ExtIEs_tags_425[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ABS_Status_ExtIEs_425, + 3, /* Elements count */ + &asn_SPC_ABS_Status_ExtIEs_specs_425 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_432 = { + sizeof(struct AdditionalSpecialSubframe_Info_ExtIEs__extensionValue), + offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs__extensionValue, present), + sizeof(((struct AdditionalSpecialSubframe_Info_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_432 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_432 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframe_Info_ExtIEs_429[] = { + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_430, memb_id_constraint_429 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_431, memb_criticality_constraint_429 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_432, + 0, + { 0, &asn_PER_memb_extensionValue_constr_432, memb_extensionValue_constraint_429 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AdditionalSpecialSubframe_Info_ExtIEs_tag2el_429[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframe_Info_ExtIEs_specs_429 = { + sizeof(struct AdditionalSpecialSubframe_Info_ExtIEs), + offsetof(struct AdditionalSpecialSubframe_Info_ExtIEs, _asn_ctx), + asn_MAP_AdditionalSpecialSubframe_Info_ExtIEs_tag2el_429, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs = { + "AdditionalSpecialSubframe-Info-ExtIEs", + "AdditionalSpecialSubframe-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429, + sizeof(asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429) + /sizeof(asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429) + /sizeof(asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AdditionalSpecialSubframe_Info_ExtIEs_429, + 3, /* Elements count */ + &asn_SPC_AdditionalSpecialSubframe_Info_ExtIEs_specs_429 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_436 = { + sizeof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue), + offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue, present), + sizeof(((struct AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_436 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_436 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframeExtension_Info_ExtIEs_433[] = { + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_434, memb_id_constraint_433 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_435, memb_criticality_constraint_433 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_436, + 0, + { 0, &asn_PER_memb_extensionValue_constr_436, memb_extensionValue_constraint_433 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AdditionalSpecialSubframeExtension_Info_ExtIEs_tag2el_433[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433 = { + sizeof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs), + offsetof(struct AdditionalSpecialSubframeExtension_Info_ExtIEs, _asn_ctx), + asn_MAP_AdditionalSpecialSubframeExtension_Info_ExtIEs_tag2el_433, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs = { + "AdditionalSpecialSubframeExtension-Info-ExtIEs", + "AdditionalSpecialSubframeExtension-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433, + sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433) + /sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[0]), /* 1 */ + asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433, /* Same as above */ + sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433) + /sizeof(asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AdditionalSpecialSubframeExtension_Info_ExtIEs_433, + 3, /* Elements count */ + &asn_SPC_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_440 = { + sizeof(struct AllocationAndRetentionPriority_ExtIEs__extensionValue), + offsetof(struct AllocationAndRetentionPriority_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct AllocationAndRetentionPriority_ExtIEs__extensionValue, present), + sizeof(((struct AllocationAndRetentionPriority_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_440 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_440 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_AllocationAndRetentionPriority_ExtIEs_437[] = { + { ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_438, memb_id_constraint_437 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_439, memb_criticality_constraint_437 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct AllocationAndRetentionPriority_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_440, + 0, + { 0, &asn_PER_memb_extensionValue_constr_440, memb_extensionValue_constraint_437 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AllocationAndRetentionPriority_ExtIEs_tag2el_437[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AllocationAndRetentionPriority_ExtIEs_specs_437 = { + sizeof(struct AllocationAndRetentionPriority_ExtIEs), + offsetof(struct AllocationAndRetentionPriority_ExtIEs, _asn_ctx), + asn_MAP_AllocationAndRetentionPriority_ExtIEs_tag2el_437, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AllocationAndRetentionPriority_ExtIEs = { + "AllocationAndRetentionPriority-ExtIEs", + "AllocationAndRetentionPriority-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437, + sizeof(asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437) + /sizeof(asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437[0]), /* 1 */ + asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437, /* Same as above */ + sizeof(asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437) + /sizeof(asn_DEF_AllocationAndRetentionPriority_ExtIEs_tags_437[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AllocationAndRetentionPriority_ExtIEs_437, + 3, /* Elements count */ + &asn_SPC_AllocationAndRetentionPriority_ExtIEs_specs_437 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_444 = { + sizeof(struct AS_SecurityInformation_ExtIEs__extensionValue), + offsetof(struct AS_SecurityInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct AS_SecurityInformation_ExtIEs__extensionValue, present), + sizeof(((struct AS_SecurityInformation_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_444 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_444 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_AS_SecurityInformation_ExtIEs_441[] = { + { ATF_NOFLAGS, 0, offsetof(struct AS_SecurityInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_442, memb_id_constraint_441 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_SecurityInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_443, memb_criticality_constraint_441 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct AS_SecurityInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_444, + 0, + { 0, &asn_PER_memb_extensionValue_constr_444, memb_extensionValue_constraint_441 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_AS_SecurityInformation_ExtIEs_tags_441[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AS_SecurityInformation_ExtIEs_tag2el_441[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_AS_SecurityInformation_ExtIEs_specs_441 = { + sizeof(struct AS_SecurityInformation_ExtIEs), + offsetof(struct AS_SecurityInformation_ExtIEs, _asn_ctx), + asn_MAP_AS_SecurityInformation_ExtIEs_tag2el_441, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_AS_SecurityInformation_ExtIEs = { + "AS-SecurityInformation-ExtIEs", + "AS-SecurityInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_AS_SecurityInformation_ExtIEs_tags_441, + sizeof(asn_DEF_AS_SecurityInformation_ExtIEs_tags_441) + /sizeof(asn_DEF_AS_SecurityInformation_ExtIEs_tags_441[0]), /* 1 */ + asn_DEF_AS_SecurityInformation_ExtIEs_tags_441, /* Same as above */ + sizeof(asn_DEF_AS_SecurityInformation_ExtIEs_tags_441) + /sizeof(asn_DEF_AS_SecurityInformation_ExtIEs_tags_441[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_AS_SecurityInformation_ExtIEs_441, + 3, /* Elements count */ + &asn_SPC_AS_SecurityInformation_ExtIEs_specs_441 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_448 = { + sizeof(struct BluetoothMeasurementConfiguration_ExtIEs__extensionValue), + offsetof(struct BluetoothMeasurementConfiguration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct BluetoothMeasurementConfiguration_ExtIEs__extensionValue, present), + sizeof(((struct BluetoothMeasurementConfiguration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_448 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_448 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_BluetoothMeasurementConfiguration_ExtIEs_445[] = { + { ATF_NOFLAGS, 0, offsetof(struct BluetoothMeasurementConfiguration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_446, memb_id_constraint_445 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct BluetoothMeasurementConfiguration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_447, memb_criticality_constraint_445 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct BluetoothMeasurementConfiguration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_448, + 0, + { 0, &asn_PER_memb_extensionValue_constr_448, memb_extensionValue_constraint_445 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_BluetoothMeasurementConfiguration_ExtIEs_tag2el_445[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_BluetoothMeasurementConfiguration_ExtIEs_specs_445 = { + sizeof(struct BluetoothMeasurementConfiguration_ExtIEs), + offsetof(struct BluetoothMeasurementConfiguration_ExtIEs, _asn_ctx), + asn_MAP_BluetoothMeasurementConfiguration_ExtIEs_tag2el_445, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_BluetoothMeasurementConfiguration_ExtIEs = { + "BluetoothMeasurementConfiguration-ExtIEs", + "BluetoothMeasurementConfiguration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445, + sizeof(asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445) + /sizeof(asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445[0]), /* 1 */ + asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445, /* Same as above */ + sizeof(asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445) + /sizeof(asn_DEF_BluetoothMeasurementConfiguration_ExtIEs_tags_445[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_BluetoothMeasurementConfiguration_ExtIEs_445, + 3, /* Elements count */ + &asn_SPC_BluetoothMeasurementConfiguration_ExtIEs_specs_445 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_452 = { + sizeof(struct CellBasedMDT_ExtIEs__extensionValue), + offsetof(struct CellBasedMDT_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellBasedMDT_ExtIEs__extensionValue, present), + sizeof(((struct CellBasedMDT_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_452 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_452 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellBasedMDT_ExtIEs_449[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellBasedMDT_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_450, memb_id_constraint_449 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellBasedMDT_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_451, memb_criticality_constraint_449 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellBasedMDT_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_452, + 0, + { 0, &asn_PER_memb_extensionValue_constr_452, memb_extensionValue_constraint_449 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellBasedMDT_ExtIEs_tags_449[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellBasedMDT_ExtIEs_tag2el_449[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellBasedMDT_ExtIEs_specs_449 = { + sizeof(struct CellBasedMDT_ExtIEs), + offsetof(struct CellBasedMDT_ExtIEs, _asn_ctx), + asn_MAP_CellBasedMDT_ExtIEs_tag2el_449, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellBasedMDT_ExtIEs = { + "CellBasedMDT-ExtIEs", + "CellBasedMDT-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellBasedMDT_ExtIEs_tags_449, + sizeof(asn_DEF_CellBasedMDT_ExtIEs_tags_449) + /sizeof(asn_DEF_CellBasedMDT_ExtIEs_tags_449[0]), /* 1 */ + asn_DEF_CellBasedMDT_ExtIEs_tags_449, /* Same as above */ + sizeof(asn_DEF_CellBasedMDT_ExtIEs_tags_449) + /sizeof(asn_DEF_CellBasedMDT_ExtIEs_tags_449[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellBasedMDT_ExtIEs_449, + 3, /* Elements count */ + &asn_SPC_CellBasedMDT_ExtIEs_specs_449 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_456 = { + sizeof(struct CellBasedQMC_ExtIEs__extensionValue), + offsetof(struct CellBasedQMC_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellBasedQMC_ExtIEs__extensionValue, present), + sizeof(((struct CellBasedQMC_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_456 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_456 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellBasedQMC_ExtIEs_453[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellBasedQMC_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_454, memb_id_constraint_453 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellBasedQMC_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_455, memb_criticality_constraint_453 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellBasedQMC_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_456, + 0, + { 0, &asn_PER_memb_extensionValue_constr_456, memb_extensionValue_constraint_453 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellBasedQMC_ExtIEs_tags_453[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellBasedQMC_ExtIEs_tag2el_453[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellBasedQMC_ExtIEs_specs_453 = { + sizeof(struct CellBasedQMC_ExtIEs), + offsetof(struct CellBasedQMC_ExtIEs, _asn_ctx), + asn_MAP_CellBasedQMC_ExtIEs_tag2el_453, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellBasedQMC_ExtIEs = { + "CellBasedQMC-ExtIEs", + "CellBasedQMC-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellBasedQMC_ExtIEs_tags_453, + sizeof(asn_DEF_CellBasedQMC_ExtIEs_tags_453) + /sizeof(asn_DEF_CellBasedQMC_ExtIEs_tags_453[0]), /* 1 */ + asn_DEF_CellBasedQMC_ExtIEs_tags_453, /* Same as above */ + sizeof(asn_DEF_CellBasedQMC_ExtIEs_tags_453) + /sizeof(asn_DEF_CellBasedQMC_ExtIEs_tags_453[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellBasedQMC_ExtIEs_453, + 3, /* Elements count */ + &asn_SPC_CellBasedQMC_ExtIEs_specs_453 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_460 = { + sizeof(struct CellReplacingInfo_ExtIEs__extensionValue), + offsetof(struct CellReplacingInfo_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellReplacingInfo_ExtIEs__extensionValue, present), + sizeof(((struct CellReplacingInfo_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_460 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_460 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellReplacingInfo_ExtIEs_457[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellReplacingInfo_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_458, memb_id_constraint_457 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellReplacingInfo_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_459, memb_criticality_constraint_457 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellReplacingInfo_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_460, + 0, + { 0, &asn_PER_memb_extensionValue_constr_460, memb_extensionValue_constraint_457 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellReplacingInfo_ExtIEs_tags_457[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellReplacingInfo_ExtIEs_tag2el_457[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellReplacingInfo_ExtIEs_specs_457 = { + sizeof(struct CellReplacingInfo_ExtIEs), + offsetof(struct CellReplacingInfo_ExtIEs, _asn_ctx), + asn_MAP_CellReplacingInfo_ExtIEs_tag2el_457, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellReplacingInfo_ExtIEs = { + "CellReplacingInfo-ExtIEs", + "CellReplacingInfo-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellReplacingInfo_ExtIEs_tags_457, + sizeof(asn_DEF_CellReplacingInfo_ExtIEs_tags_457) + /sizeof(asn_DEF_CellReplacingInfo_ExtIEs_tags_457[0]), /* 1 */ + asn_DEF_CellReplacingInfo_ExtIEs_tags_457, /* Same as above */ + sizeof(asn_DEF_CellReplacingInfo_ExtIEs_tags_457) + /sizeof(asn_DEF_CellReplacingInfo_ExtIEs_tags_457[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellReplacingInfo_ExtIEs_457, + 3, /* Elements count */ + &asn_SPC_CellReplacingInfo_ExtIEs_specs_457 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_464 = { + sizeof(struct CellType_ExtIEs__extensionValue), + offsetof(struct CellType_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CellType_ExtIEs__extensionValue, present), + sizeof(((struct CellType_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_464 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_464 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellType_ExtIEs_461[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellType_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_462, memb_id_constraint_461 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellType_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_463, memb_criticality_constraint_461 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellType_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_464, + 0, + { 0, &asn_PER_memb_extensionValue_constr_464, memb_extensionValue_constraint_461 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellType_ExtIEs_tags_461[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellType_ExtIEs_tag2el_461[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellType_ExtIEs_specs_461 = { + sizeof(struct CellType_ExtIEs), + offsetof(struct CellType_ExtIEs, _asn_ctx), + asn_MAP_CellType_ExtIEs_tag2el_461, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellType_ExtIEs = { + "CellType-ExtIEs", + "CellType-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellType_ExtIEs_tags_461, + sizeof(asn_DEF_CellType_ExtIEs_tags_461) + /sizeof(asn_DEF_CellType_ExtIEs_tags_461[0]), /* 1 */ + asn_DEF_CellType_ExtIEs_tags_461, /* Same as above */ + sizeof(asn_DEF_CellType_ExtIEs_tags_461) + /sizeof(asn_DEF_CellType_ExtIEs_tags_461[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellType_ExtIEs_461, + 3, /* Elements count */ + &asn_SPC_CellType_ExtIEs_specs_461 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_468 = { + sizeof(struct CNTypeRestrictionsItem_ExtIEs__extensionValue), + offsetof(struct CNTypeRestrictionsItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CNTypeRestrictionsItem_ExtIEs__extensionValue, present), + sizeof(((struct CNTypeRestrictionsItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_468 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_468 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CNTypeRestrictionsItem_ExtIEs_465[] = { + { ATF_NOFLAGS, 0, offsetof(struct CNTypeRestrictionsItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_466, memb_id_constraint_465 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CNTypeRestrictionsItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_467, memb_criticality_constraint_465 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CNTypeRestrictionsItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_468, + 0, + { 0, &asn_PER_memb_extensionValue_constr_468, memb_extensionValue_constraint_465 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CNTypeRestrictionsItem_ExtIEs_tag2el_465[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CNTypeRestrictionsItem_ExtIEs_specs_465 = { + sizeof(struct CNTypeRestrictionsItem_ExtIEs), + offsetof(struct CNTypeRestrictionsItem_ExtIEs, _asn_ctx), + asn_MAP_CNTypeRestrictionsItem_ExtIEs_tag2el_465, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictionsItem_ExtIEs = { + "CNTypeRestrictionsItem-ExtIEs", + "CNTypeRestrictionsItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465, + sizeof(asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465) + /sizeof(asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465[0]), /* 1 */ + asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465, /* Same as above */ + sizeof(asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465) + /sizeof(asn_DEF_CNTypeRestrictionsItem_ExtIEs_tags_465[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CNTypeRestrictionsItem_ExtIEs_465, + 3, /* Elements count */ + &asn_SPC_CNTypeRestrictionsItem_ExtIEs_specs_465 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_472 = { + sizeof(struct CoMPHypothesisSetItem_ExtIEs__extensionValue), + offsetof(struct CoMPHypothesisSetItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CoMPHypothesisSetItem_ExtIEs__extensionValue, present), + sizeof(((struct CoMPHypothesisSetItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_472 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_472 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPHypothesisSetItem_ExtIEs_469[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPHypothesisSetItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_470, memb_id_constraint_469 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPHypothesisSetItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_471, memb_criticality_constraint_469 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CoMPHypothesisSetItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_472, + 0, + { 0, &asn_PER_memb_extensionValue_constr_472, memb_extensionValue_constraint_469 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPHypothesisSetItem_ExtIEs_tag2el_469[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPHypothesisSetItem_ExtIEs_specs_469 = { + sizeof(struct CoMPHypothesisSetItem_ExtIEs), + offsetof(struct CoMPHypothesisSetItem_ExtIEs, _asn_ctx), + asn_MAP_CoMPHypothesisSetItem_ExtIEs_tag2el_469, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSetItem_ExtIEs = { + "CoMPHypothesisSetItem-ExtIEs", + "CoMPHypothesisSetItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469, + sizeof(asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469) + /sizeof(asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469[0]), /* 1 */ + asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469, /* Same as above */ + sizeof(asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469) + /sizeof(asn_DEF_CoMPHypothesisSetItem_ExtIEs_tags_469[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPHypothesisSetItem_ExtIEs_469, + 3, /* Elements count */ + &asn_SPC_CoMPHypothesisSetItem_ExtIEs_specs_469 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_476 = { + sizeof(struct CoMPInformation_ExtIEs__extensionValue), + offsetof(struct CoMPInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CoMPInformation_ExtIEs__extensionValue, present), + sizeof(((struct CoMPInformation_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_476 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_476 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPInformation_ExtIEs_473[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_474, memb_id_constraint_473 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_475, memb_criticality_constraint_473 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CoMPInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_476, + 0, + { 0, &asn_PER_memb_extensionValue_constr_476, memb_extensionValue_constraint_473 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPInformation_ExtIEs_tags_473[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPInformation_ExtIEs_tag2el_473[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPInformation_ExtIEs_specs_473 = { + sizeof(struct CoMPInformation_ExtIEs), + offsetof(struct CoMPInformation_ExtIEs, _asn_ctx), + asn_MAP_CoMPInformation_ExtIEs_tag2el_473, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformation_ExtIEs = { + "CoMPInformation-ExtIEs", + "CoMPInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CoMPInformation_ExtIEs_tags_473, + sizeof(asn_DEF_CoMPInformation_ExtIEs_tags_473) + /sizeof(asn_DEF_CoMPInformation_ExtIEs_tags_473[0]), /* 1 */ + asn_DEF_CoMPInformation_ExtIEs_tags_473, /* Same as above */ + sizeof(asn_DEF_CoMPInformation_ExtIEs_tags_473) + /sizeof(asn_DEF_CoMPInformation_ExtIEs_tags_473[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPInformation_ExtIEs_473, + 3, /* Elements count */ + &asn_SPC_CoMPInformation_ExtIEs_specs_473 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_480 = { + sizeof(struct CoMPInformationItem_ExtIEs__extensionValue), + offsetof(struct CoMPInformationItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CoMPInformationItem_ExtIEs__extensionValue, present), + sizeof(((struct CoMPInformationItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_480 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_480 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPInformationItem_ExtIEs_477[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_478, memb_id_constraint_477 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_479, memb_criticality_constraint_477 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CoMPInformationItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_480, + 0, + { 0, &asn_PER_memb_extensionValue_constr_480, memb_extensionValue_constraint_477 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPInformationItem_ExtIEs_tags_477[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPInformationItem_ExtIEs_tag2el_477[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPInformationItem_ExtIEs_specs_477 = { + sizeof(struct CoMPInformationItem_ExtIEs), + offsetof(struct CoMPInformationItem_ExtIEs, _asn_ctx), + asn_MAP_CoMPInformationItem_ExtIEs_tag2el_477, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformationItem_ExtIEs = { + "CoMPInformationItem-ExtIEs", + "CoMPInformationItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CoMPInformationItem_ExtIEs_tags_477, + sizeof(asn_DEF_CoMPInformationItem_ExtIEs_tags_477) + /sizeof(asn_DEF_CoMPInformationItem_ExtIEs_tags_477[0]), /* 1 */ + asn_DEF_CoMPInformationItem_ExtIEs_tags_477, /* Same as above */ + sizeof(asn_DEF_CoMPInformationItem_ExtIEs_tags_477) + /sizeof(asn_DEF_CoMPInformationItem_ExtIEs_tags_477[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPInformationItem_ExtIEs_477, + 3, /* Elements count */ + &asn_SPC_CoMPInformationItem_ExtIEs_specs_477 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_484 = { + sizeof(struct CoMPInformationStartTime_ExtIEs__extensionValue), + offsetof(struct CoMPInformationStartTime_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CoMPInformationStartTime_ExtIEs__extensionValue, present), + sizeof(((struct CoMPInformationStartTime_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_484 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_484 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CoMPInformationStartTime_ExtIEs_481[] = { + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationStartTime_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_482, memb_id_constraint_481 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CoMPInformationStartTime_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_483, memb_criticality_constraint_481 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CoMPInformationStartTime_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_484, + 0, + { 0, &asn_PER_memb_extensionValue_constr_484, memb_extensionValue_constraint_481 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CoMPInformationStartTime_ExtIEs_tag2el_481[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CoMPInformationStartTime_ExtIEs_specs_481 = { + sizeof(struct CoMPInformationStartTime_ExtIEs), + offsetof(struct CoMPInformationStartTime_ExtIEs, _asn_ctx), + asn_MAP_CoMPInformationStartTime_ExtIEs_tag2el_481, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CoMPInformationStartTime_ExtIEs = { + "CoMPInformationStartTime-ExtIEs", + "CoMPInformationStartTime-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481, + sizeof(asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481) + /sizeof(asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481[0]), /* 1 */ + asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481, /* Same as above */ + sizeof(asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481) + /sizeof(asn_DEF_CoMPInformationStartTime_ExtIEs_tags_481[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CoMPInformationStartTime_ExtIEs_481, + 3, /* Elements count */ + &asn_SPC_CoMPInformationStartTime_ExtIEs_specs_481 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_488 = { + sizeof(struct CompositeAvailableCapacity_ExtIEs__extensionValue), + offsetof(struct CompositeAvailableCapacity_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CompositeAvailableCapacity_ExtIEs__extensionValue, present), + sizeof(((struct CompositeAvailableCapacity_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_488 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_488 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CompositeAvailableCapacity_ExtIEs_485[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacity_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_486, memb_id_constraint_485 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacity_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_487, memb_criticality_constraint_485 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacity_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_488, + 0, + { 0, &asn_PER_memb_extensionValue_constr_488, memb_extensionValue_constraint_485 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompositeAvailableCapacity_ExtIEs_tag2el_485[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacity_ExtIEs_specs_485 = { + sizeof(struct CompositeAvailableCapacity_ExtIEs), + offsetof(struct CompositeAvailableCapacity_ExtIEs, _asn_ctx), + asn_MAP_CompositeAvailableCapacity_ExtIEs_tag2el_485, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacity_ExtIEs = { + "CompositeAvailableCapacity-ExtIEs", + "CompositeAvailableCapacity-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485, + sizeof(asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485) + /sizeof(asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485[0]), /* 1 */ + asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485, /* Same as above */ + sizeof(asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485) + /sizeof(asn_DEF_CompositeAvailableCapacity_ExtIEs_tags_485[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompositeAvailableCapacity_ExtIEs_485, + 3, /* Elements count */ + &asn_SPC_CompositeAvailableCapacity_ExtIEs_specs_485 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_492 = { + sizeof(struct CompositeAvailableCapacityGroup_ExtIEs__extensionValue), + offsetof(struct CompositeAvailableCapacityGroup_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CompositeAvailableCapacityGroup_ExtIEs__extensionValue, present), + sizeof(((struct CompositeAvailableCapacityGroup_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_492 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_492 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CompositeAvailableCapacityGroup_ExtIEs_489[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacityGroup_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_490, memb_id_constraint_489 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacityGroup_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_491, memb_criticality_constraint_489 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CompositeAvailableCapacityGroup_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_492, + 0, + { 0, &asn_PER_memb_extensionValue_constr_492, memb_extensionValue_constraint_489 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompositeAvailableCapacityGroup_ExtIEs_tag2el_489[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacityGroup_ExtIEs_specs_489 = { + sizeof(struct CompositeAvailableCapacityGroup_ExtIEs), + offsetof(struct CompositeAvailableCapacityGroup_ExtIEs, _asn_ctx), + asn_MAP_CompositeAvailableCapacityGroup_ExtIEs_tag2el_489, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacityGroup_ExtIEs = { + "CompositeAvailableCapacityGroup-ExtIEs", + "CompositeAvailableCapacityGroup-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489, + sizeof(asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489) + /sizeof(asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489[0]), /* 1 */ + asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489, /* Same as above */ + sizeof(asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489) + /sizeof(asn_DEF_CompositeAvailableCapacityGroup_ExtIEs_tags_489[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompositeAvailableCapacityGroup_ExtIEs_489, + 3, /* Elements count */ + &asn_SPC_CompositeAvailableCapacityGroup_ExtIEs_specs_489 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_496 = { + sizeof(struct COUNTvalue_ExtIEs__extensionValue), + offsetof(struct COUNTvalue_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct COUNTvalue_ExtIEs__extensionValue, present), + sizeof(((struct COUNTvalue_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_496 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_496 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_COUNTvalue_ExtIEs_493[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTvalue_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_494, memb_id_constraint_493 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTvalue_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_495, memb_criticality_constraint_493 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct COUNTvalue_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_496, + 0, + { 0, &asn_PER_memb_extensionValue_constr_496, memb_extensionValue_constraint_493 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_COUNTvalue_ExtIEs_tags_493[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTvalue_ExtIEs_tag2el_493[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTvalue_ExtIEs_specs_493 = { + sizeof(struct COUNTvalue_ExtIEs), + offsetof(struct COUNTvalue_ExtIEs, _asn_ctx), + asn_MAP_COUNTvalue_ExtIEs_tag2el_493, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTvalue_ExtIEs = { + "COUNTvalue-ExtIEs", + "COUNTvalue-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_COUNTvalue_ExtIEs_tags_493, + sizeof(asn_DEF_COUNTvalue_ExtIEs_tags_493) + /sizeof(asn_DEF_COUNTvalue_ExtIEs_tags_493[0]), /* 1 */ + asn_DEF_COUNTvalue_ExtIEs_tags_493, /* Same as above */ + sizeof(asn_DEF_COUNTvalue_ExtIEs_tags_493) + /sizeof(asn_DEF_COUNTvalue_ExtIEs_tags_493[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTvalue_ExtIEs_493, + 3, /* Elements count */ + &asn_SPC_COUNTvalue_ExtIEs_specs_493 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_500 = { + sizeof(struct COUNTValueExtended_ExtIEs__extensionValue), + offsetof(struct COUNTValueExtended_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct COUNTValueExtended_ExtIEs__extensionValue, present), + sizeof(((struct COUNTValueExtended_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_500 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_500 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_COUNTValueExtended_ExtIEs_497[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTValueExtended_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_498, memb_id_constraint_497 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTValueExtended_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_499, memb_criticality_constraint_497 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct COUNTValueExtended_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_500, + 0, + { 0, &asn_PER_memb_extensionValue_constr_500, memb_extensionValue_constraint_497 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_COUNTValueExtended_ExtIEs_tags_497[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTValueExtended_ExtIEs_tag2el_497[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTValueExtended_ExtIEs_specs_497 = { + sizeof(struct COUNTValueExtended_ExtIEs), + offsetof(struct COUNTValueExtended_ExtIEs, _asn_ctx), + asn_MAP_COUNTValueExtended_ExtIEs_tag2el_497, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTValueExtended_ExtIEs = { + "COUNTValueExtended-ExtIEs", + "COUNTValueExtended-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_COUNTValueExtended_ExtIEs_tags_497, + sizeof(asn_DEF_COUNTValueExtended_ExtIEs_tags_497) + /sizeof(asn_DEF_COUNTValueExtended_ExtIEs_tags_497[0]), /* 1 */ + asn_DEF_COUNTValueExtended_ExtIEs_tags_497, /* Same as above */ + sizeof(asn_DEF_COUNTValueExtended_ExtIEs_tags_497) + /sizeof(asn_DEF_COUNTValueExtended_ExtIEs_tags_497[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTValueExtended_ExtIEs_497, + 3, /* Elements count */ + &asn_SPC_COUNTValueExtended_ExtIEs_specs_497 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_504 = { + sizeof(struct COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue), + offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue, present), + sizeof(((struct COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_504 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_504 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_COUNTvaluePDCP_SNlength18_ExtIEs_501[] = { + { ATF_NOFLAGS, 0, offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_502, memb_id_constraint_501 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_503, memb_criticality_constraint_501 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_504, + 0, + { 0, &asn_PER_memb_extensionValue_constr_504, memb_extensionValue_constraint_501 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_COUNTvaluePDCP_SNlength18_ExtIEs_tag2el_501[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501 = { + sizeof(struct COUNTvaluePDCP_SNlength18_ExtIEs), + offsetof(struct COUNTvaluePDCP_SNlength18_ExtIEs, _asn_ctx), + asn_MAP_COUNTvaluePDCP_SNlength18_ExtIEs_tag2el_501, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs = { + "COUNTvaluePDCP-SNlength18-ExtIEs", + "COUNTvaluePDCP-SNlength18-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501, + sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501) + /sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[0]), /* 1 */ + asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501, /* Same as above */ + sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501) + /sizeof(asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_COUNTvaluePDCP_SNlength18_ExtIEs_501, + 3, /* Elements count */ + &asn_SPC_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_508 = { + sizeof(struct CriticalityDiagnostics_ExtIEs__extensionValue), + offsetof(struct CriticalityDiagnostics_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CriticalityDiagnostics_ExtIEs__extensionValue, present), + sizeof(((struct CriticalityDiagnostics_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_508 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_508 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_ExtIEs_505[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_506, memb_id_constraint_505 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_507, memb_criticality_constraint_505 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_508, + 0, + { 0, &asn_PER_memb_extensionValue_constr_508, memb_extensionValue_constraint_505 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_ExtIEs_tag2el_505[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_ExtIEs_specs_505 = { + sizeof(struct CriticalityDiagnostics_ExtIEs), + offsetof(struct CriticalityDiagnostics_ExtIEs, _asn_ctx), + asn_MAP_CriticalityDiagnostics_ExtIEs_tag2el_505, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_ExtIEs = { + "CriticalityDiagnostics-ExtIEs", + "CriticalityDiagnostics-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505, + sizeof(asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505) + /sizeof(asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505) + /sizeof(asn_DEF_CriticalityDiagnostics_ExtIEs_tags_505[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_ExtIEs_505, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_ExtIEs_specs_505 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_512 = { + sizeof(struct CriticalityDiagnostics_IE_List_ExtIEs__extensionValue), + offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, present), + sizeof(((struct CriticalityDiagnostics_IE_List_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_512 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_512 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_ExtIEs_509[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_510, memb_id_constraint_509 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_511, memb_criticality_constraint_509 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_512, + 0, + { 0, &asn_PER_memb_extensionValue_constr_512, memb_extensionValue_constraint_509 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_509[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_ExtIEs_specs_509 = { + sizeof(struct CriticalityDiagnostics_IE_List_ExtIEs), + offsetof(struct CriticalityDiagnostics_IE_List_ExtIEs, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_509, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs = { + "CriticalityDiagnostics-IE-List-ExtIEs", + "CriticalityDiagnostics-IE-List-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_ExtIEs_509, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_List_ExtIEs_specs_509 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_516 = { + sizeof(struct CSIReportList_ExtIEs__extensionValue), + offsetof(struct CSIReportList_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CSIReportList_ExtIEs__extensionValue, present), + sizeof(((struct CSIReportList_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_516 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_516 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportList_ExtIEs_513[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportList_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_514, memb_id_constraint_513 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportList_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_515, memb_criticality_constraint_513 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CSIReportList_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_516, + 0, + { 0, &asn_PER_memb_extensionValue_constr_516, memb_extensionValue_constraint_513 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportList_ExtIEs_tags_513[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CSIReportList_ExtIEs_tag2el_513[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CSIReportList_ExtIEs_specs_513 = { + sizeof(struct CSIReportList_ExtIEs), + offsetof(struct CSIReportList_ExtIEs, _asn_ctx), + asn_MAP_CSIReportList_ExtIEs_tag2el_513, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportList_ExtIEs = { + "CSIReportList-ExtIEs", + "CSIReportList-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CSIReportList_ExtIEs_tags_513, + sizeof(asn_DEF_CSIReportList_ExtIEs_tags_513) + /sizeof(asn_DEF_CSIReportList_ExtIEs_tags_513[0]), /* 1 */ + asn_DEF_CSIReportList_ExtIEs_tags_513, /* Same as above */ + sizeof(asn_DEF_CSIReportList_ExtIEs_tags_513) + /sizeof(asn_DEF_CSIReportList_ExtIEs_tags_513[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CSIReportList_ExtIEs_513, + 3, /* Elements count */ + &asn_SPC_CSIReportList_ExtIEs_specs_513 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_520 = { + sizeof(struct CSIReportPerCSIProcess_ExtIEs__extensionValue), + offsetof(struct CSIReportPerCSIProcess_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CSIReportPerCSIProcess_ExtIEs__extensionValue, present), + sizeof(((struct CSIReportPerCSIProcess_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_520 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_520 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcess_ExtIEs_517[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcess_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_518, memb_id_constraint_517 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcess_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_519, memb_criticality_constraint_517 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcess_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_520, + 0, + { 0, &asn_PER_memb_extensionValue_constr_520, memb_extensionValue_constraint_517 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CSIReportPerCSIProcess_ExtIEs_tag2el_517[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CSIReportPerCSIProcess_ExtIEs_specs_517 = { + sizeof(struct CSIReportPerCSIProcess_ExtIEs), + offsetof(struct CSIReportPerCSIProcess_ExtIEs, _asn_ctx), + asn_MAP_CSIReportPerCSIProcess_ExtIEs_tag2el_517, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcess_ExtIEs = { + "CSIReportPerCSIProcess-ExtIEs", + "CSIReportPerCSIProcess-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517, + sizeof(asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517) + /sizeof(asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517[0]), /* 1 */ + asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517, /* Same as above */ + sizeof(asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517) + /sizeof(asn_DEF_CSIReportPerCSIProcess_ExtIEs_tags_517[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CSIReportPerCSIProcess_ExtIEs_517, + 3, /* Elements count */ + &asn_SPC_CSIReportPerCSIProcess_ExtIEs_specs_517 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_524 = { + sizeof(struct CSIReportPerCSIProcessItem_ExtIEs__extensionValue), + offsetof(struct CSIReportPerCSIProcessItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct CSIReportPerCSIProcessItem_ExtIEs__extensionValue, present), + sizeof(((struct CSIReportPerCSIProcessItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_524 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_524 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcessItem_ExtIEs_521[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_522, memb_id_constraint_521 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_523, memb_criticality_constraint_521 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CSIReportPerCSIProcessItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_524, + 0, + { 0, &asn_PER_memb_extensionValue_constr_524, memb_extensionValue_constraint_521 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CSIReportPerCSIProcessItem_ExtIEs_tag2el_521[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CSIReportPerCSIProcessItem_ExtIEs_specs_521 = { + sizeof(struct CSIReportPerCSIProcessItem_ExtIEs), + offsetof(struct CSIReportPerCSIProcessItem_ExtIEs, _asn_ctx), + asn_MAP_CSIReportPerCSIProcessItem_ExtIEs_tag2el_521, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcessItem_ExtIEs = { + "CSIReportPerCSIProcessItem-ExtIEs", + "CSIReportPerCSIProcessItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521, + sizeof(asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521) + /sizeof(asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521[0]), /* 1 */ + asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521, /* Same as above */ + sizeof(asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521) + /sizeof(asn_DEF_CSIReportPerCSIProcessItem_ExtIEs_tags_521[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CSIReportPerCSIProcessItem_ExtIEs_521, + 3, /* Elements count */ + &asn_SPC_CSIReportPerCSIProcessItem_ExtIEs_specs_521 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_528 = { + sizeof(struct DataTrafficResourceIndication_ExtIEs__extensionValue), + offsetof(struct DataTrafficResourceIndication_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct DataTrafficResourceIndication_ExtIEs__extensionValue, present), + sizeof(((struct DataTrafficResourceIndication_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_528 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_528 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DataTrafficResourceIndication_ExtIEs_525[] = { + { ATF_NOFLAGS, 0, offsetof(struct DataTrafficResourceIndication_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_526, memb_id_constraint_525 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct DataTrafficResourceIndication_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_527, memb_criticality_constraint_525 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct DataTrafficResourceIndication_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_528, + 0, + { 0, &asn_PER_memb_extensionValue_constr_528, memb_extensionValue_constraint_525 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DataTrafficResourceIndication_ExtIEs_tag2el_525[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DataTrafficResourceIndication_ExtIEs_specs_525 = { + sizeof(struct DataTrafficResourceIndication_ExtIEs), + offsetof(struct DataTrafficResourceIndication_ExtIEs, _asn_ctx), + asn_MAP_DataTrafficResourceIndication_ExtIEs_tag2el_525, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DataTrafficResourceIndication_ExtIEs = { + "DataTrafficResourceIndication-ExtIEs", + "DataTrafficResourceIndication-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525, + sizeof(asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525) + /sizeof(asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525[0]), /* 1 */ + asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525, /* Same as above */ + sizeof(asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525) + /sizeof(asn_DEF_DataTrafficResourceIndication_ExtIEs_tags_525[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DataTrafficResourceIndication_ExtIEs_525, + 3, /* Elements count */ + &asn_SPC_DataTrafficResourceIndication_ExtIEs_specs_525 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_532 = { + sizeof(struct DeliveryStatus_ExtIEs__extensionValue), + offsetof(struct DeliveryStatus_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct DeliveryStatus_ExtIEs__extensionValue, present), + sizeof(((struct DeliveryStatus_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_532 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_532 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DeliveryStatus_ExtIEs_529[] = { + { ATF_NOFLAGS, 0, offsetof(struct DeliveryStatus_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_530, memb_id_constraint_529 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeliveryStatus_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_531, memb_criticality_constraint_529 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct DeliveryStatus_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_532, + 0, + { 0, &asn_PER_memb_extensionValue_constr_532, memb_extensionValue_constraint_529 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_DeliveryStatus_ExtIEs_tags_529[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DeliveryStatus_ExtIEs_tag2el_529[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DeliveryStatus_ExtIEs_specs_529 = { + sizeof(struct DeliveryStatus_ExtIEs), + offsetof(struct DeliveryStatus_ExtIEs, _asn_ctx), + asn_MAP_DeliveryStatus_ExtIEs_tag2el_529, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DeliveryStatus_ExtIEs = { + "DeliveryStatus-ExtIEs", + "DeliveryStatus-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_DeliveryStatus_ExtIEs_tags_529, + sizeof(asn_DEF_DeliveryStatus_ExtIEs_tags_529) + /sizeof(asn_DEF_DeliveryStatus_ExtIEs_tags_529[0]), /* 1 */ + asn_DEF_DeliveryStatus_ExtIEs_tags_529, /* Same as above */ + sizeof(asn_DEF_DeliveryStatus_ExtIEs_tags_529) + /sizeof(asn_DEF_DeliveryStatus_ExtIEs_tags_529[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DeliveryStatus_ExtIEs_529, + 3, /* Elements count */ + &asn_SPC_DeliveryStatus_ExtIEs_specs_529 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_536 = { + sizeof(struct DynamicNAICSInformation_ExtIEs__extensionValue), + offsetof(struct DynamicNAICSInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct DynamicNAICSInformation_ExtIEs__extensionValue, present), + sizeof(((struct DynamicNAICSInformation_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_536 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_536 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DynamicNAICSInformation_ExtIEs_533[] = { + { ATF_NOFLAGS, 0, offsetof(struct DynamicNAICSInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_534, memb_id_constraint_533 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct DynamicNAICSInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_535, memb_criticality_constraint_533 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct DynamicNAICSInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_536, + 0, + { 0, &asn_PER_memb_extensionValue_constr_536, memb_extensionValue_constraint_533 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DynamicNAICSInformation_ExtIEs_tag2el_533[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DynamicNAICSInformation_ExtIEs_specs_533 = { + sizeof(struct DynamicNAICSInformation_ExtIEs), + offsetof(struct DynamicNAICSInformation_ExtIEs, _asn_ctx), + asn_MAP_DynamicNAICSInformation_ExtIEs_tag2el_533, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DynamicNAICSInformation_ExtIEs = { + "DynamicNAICSInformation-ExtIEs", + "DynamicNAICSInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533, + sizeof(asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533) + /sizeof(asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533[0]), /* 1 */ + asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533, /* Same as above */ + sizeof(asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533) + /sizeof(asn_DEF_DynamicNAICSInformation_ExtIEs_tags_533[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DynamicNAICSInformation_ExtIEs_533, + 3, /* Elements count */ + &asn_SPC_DynamicNAICSInformation_ExtIEs_specs_533 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_540 = { + sizeof(struct ECGI_ExtIEs__extensionValue), + offsetof(struct ECGI_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ECGI_ExtIEs__extensionValue, present), + sizeof(((struct ECGI_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_540 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_540 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ECGI_ExtIEs_537[] = { + { ATF_NOFLAGS, 0, offsetof(struct ECGI_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_538, memb_id_constraint_537 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ECGI_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_539, memb_criticality_constraint_537 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ECGI_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_540, + 0, + { 0, &asn_PER_memb_extensionValue_constr_540, memb_extensionValue_constraint_537 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ECGI_ExtIEs_tags_537[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ECGI_ExtIEs_tag2el_537[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ECGI_ExtIEs_specs_537 = { + sizeof(struct ECGI_ExtIEs), + offsetof(struct ECGI_ExtIEs, _asn_ctx), + asn_MAP_ECGI_ExtIEs_tag2el_537, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ECGI_ExtIEs = { + "ECGI-ExtIEs", + "ECGI-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ECGI_ExtIEs_tags_537, + sizeof(asn_DEF_ECGI_ExtIEs_tags_537) + /sizeof(asn_DEF_ECGI_ExtIEs_tags_537[0]), /* 1 */ + asn_DEF_ECGI_ExtIEs_tags_537, /* Same as above */ + sizeof(asn_DEF_ECGI_ExtIEs_tags_537) + /sizeof(asn_DEF_ECGI_ExtIEs_tags_537[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ECGI_ExtIEs_537, + 3, /* Elements count */ + &asn_SPC_ECGI_ExtIEs_specs_537 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_544 = { + sizeof(struct EnhancedRNTP_ExtIEs__extensionValue), + offsetof(struct EnhancedRNTP_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct EnhancedRNTP_ExtIEs__extensionValue, present), + sizeof(((struct EnhancedRNTP_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_544 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_544 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EnhancedRNTP_ExtIEs_541[] = { + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTP_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_542, memb_id_constraint_541 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTP_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_543, memb_criticality_constraint_541 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTP_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_544, + 0, + { 0, &asn_PER_memb_extensionValue_constr_544, memb_extensionValue_constraint_541 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_EnhancedRNTP_ExtIEs_tags_541[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EnhancedRNTP_ExtIEs_tag2el_541[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTP_ExtIEs_specs_541 = { + sizeof(struct EnhancedRNTP_ExtIEs), + offsetof(struct EnhancedRNTP_ExtIEs, _asn_ctx), + asn_MAP_EnhancedRNTP_ExtIEs_tag2el_541, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EnhancedRNTP_ExtIEs = { + "EnhancedRNTP-ExtIEs", + "EnhancedRNTP-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_EnhancedRNTP_ExtIEs_tags_541, + sizeof(asn_DEF_EnhancedRNTP_ExtIEs_tags_541) + /sizeof(asn_DEF_EnhancedRNTP_ExtIEs_tags_541[0]), /* 1 */ + asn_DEF_EnhancedRNTP_ExtIEs_tags_541, /* Same as above */ + sizeof(asn_DEF_EnhancedRNTP_ExtIEs_tags_541) + /sizeof(asn_DEF_EnhancedRNTP_ExtIEs_tags_541[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EnhancedRNTP_ExtIEs_541, + 3, /* Elements count */ + &asn_SPC_EnhancedRNTP_ExtIEs_specs_541 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_548 = { + sizeof(struct EnhancedRNTPStartTime_ExtIEs__extensionValue), + offsetof(struct EnhancedRNTPStartTime_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct EnhancedRNTPStartTime_ExtIEs__extensionValue, present), + sizeof(((struct EnhancedRNTPStartTime_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_548 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_548 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EnhancedRNTPStartTime_ExtIEs_545[] = { + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTPStartTime_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_546, memb_id_constraint_545 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTPStartTime_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_547, memb_criticality_constraint_545 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct EnhancedRNTPStartTime_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_548, + 0, + { 0, &asn_PER_memb_extensionValue_constr_548, memb_extensionValue_constraint_545 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EnhancedRNTPStartTime_ExtIEs_tag2el_545[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTPStartTime_ExtIEs_specs_545 = { + sizeof(struct EnhancedRNTPStartTime_ExtIEs), + offsetof(struct EnhancedRNTPStartTime_ExtIEs, _asn_ctx), + asn_MAP_EnhancedRNTPStartTime_ExtIEs_tag2el_545, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EnhancedRNTPStartTime_ExtIEs = { + "EnhancedRNTPStartTime-ExtIEs", + "EnhancedRNTPStartTime-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545, + sizeof(asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545) + /sizeof(asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545[0]), /* 1 */ + asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545, /* Same as above */ + sizeof(asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545) + /sizeof(asn_DEF_EnhancedRNTPStartTime_ExtIEs_tags_545[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EnhancedRNTPStartTime_ExtIEs_545, + 3, /* Elements count */ + &asn_SPC_EnhancedRNTPStartTime_ExtIEs_specs_545 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_552 = { + sizeof(struct EN_DC_ResourceConfigurationExtIEs__extensionValue), + offsetof(struct EN_DC_ResourceConfigurationExtIEs__extensionValue, _asn_ctx), + offsetof(struct EN_DC_ResourceConfigurationExtIEs__extensionValue, present), + sizeof(((struct EN_DC_ResourceConfigurationExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_552 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_552 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EN_DC_ResourceConfigurationExtIEs_549[] = { + { ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfigurationExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_550, memb_id_constraint_549 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfigurationExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_551, memb_criticality_constraint_549 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct EN_DC_ResourceConfigurationExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_552, + 0, + { 0, &asn_PER_memb_extensionValue_constr_552, memb_extensionValue_constraint_549 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EN_DC_ResourceConfigurationExtIEs_tag2el_549[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EN_DC_ResourceConfigurationExtIEs_specs_549 = { + sizeof(struct EN_DC_ResourceConfigurationExtIEs), + offsetof(struct EN_DC_ResourceConfigurationExtIEs, _asn_ctx), + asn_MAP_EN_DC_ResourceConfigurationExtIEs_tag2el_549, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EN_DC_ResourceConfigurationExtIEs = { + "EN-DC-ResourceConfigurationExtIEs", + "EN-DC-ResourceConfigurationExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549, + sizeof(asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549) + /sizeof(asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549[0]), /* 1 */ + asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549, /* Same as above */ + sizeof(asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549) + /sizeof(asn_DEF_EN_DC_ResourceConfigurationExtIEs_tags_549[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EN_DC_ResourceConfigurationExtIEs_549, + 3, /* Elements count */ + &asn_SPC_EN_DC_ResourceConfigurationExtIEs_specs_549 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_556 = { + sizeof(struct ERABActivityNotifyItem_ExtIEs__extensionValue), + offsetof(struct ERABActivityNotifyItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ERABActivityNotifyItem_ExtIEs__extensionValue, present), + sizeof(((struct ERABActivityNotifyItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_556 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_556 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ERABActivityNotifyItem_ExtIEs_553[] = { + { ATF_NOFLAGS, 0, offsetof(struct ERABActivityNotifyItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_554, memb_id_constraint_553 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ERABActivityNotifyItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_555, memb_criticality_constraint_553 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ERABActivityNotifyItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_556, + 0, + { 0, &asn_PER_memb_extensionValue_constr_556, memb_extensionValue_constraint_553 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ERABActivityNotifyItem_ExtIEs_tag2el_553[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ERABActivityNotifyItem_ExtIEs_specs_553 = { + sizeof(struct ERABActivityNotifyItem_ExtIEs), + offsetof(struct ERABActivityNotifyItem_ExtIEs, _asn_ctx), + asn_MAP_ERABActivityNotifyItem_ExtIEs_tag2el_553, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItem_ExtIEs = { + "ERABActivityNotifyItem-ExtIEs", + "ERABActivityNotifyItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553, + sizeof(asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553) + /sizeof(asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553[0]), /* 1 */ + asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553, /* Same as above */ + sizeof(asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553) + /sizeof(asn_DEF_ERABActivityNotifyItem_ExtIEs_tags_553[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ERABActivityNotifyItem_ExtIEs_553, + 3, /* Elements count */ + &asn_SPC_ERABActivityNotifyItem_ExtIEs_specs_553 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_560[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, choice.Packet_LossRate), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Packet_LossRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Packet-LossRate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_560[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* Packet-LossRate */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_560 = { + sizeof(struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue), + offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, present), + sizeof(((struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_560, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_560 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_560, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_560 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RAB_Level_QoS_Parameters_ExtIEs_557[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_558, memb_id_constraint_557 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_E_RAB_Level_QoS_Parameters_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_559, memb_criticality_constraint_557 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_560, + select_E_RAB_Level_QoS_Parameters_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_560, memb_extensionValue_constraint_557 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RAB_Level_QoS_Parameters_ExtIEs_tag2el_557[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557 = { + sizeof(struct E_RAB_Level_QoS_Parameters_ExtIEs), + offsetof(struct E_RAB_Level_QoS_Parameters_ExtIEs, _asn_ctx), + asn_MAP_E_RAB_Level_QoS_Parameters_ExtIEs_tag2el_557, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs = { + "E-RAB-Level-QoS-Parameters-ExtIEs", + "E-RAB-Level-QoS-Parameters-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557, + sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557) + /sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[0]), /* 1 */ + asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557, /* Same as above */ + sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557) + /sizeof(asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_Level_QoS_Parameters_ExtIEs_557, + 3, /* Elements count */ + &asn_SPC_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_564 = { + sizeof(struct E_RAB_Item_ExtIEs__extensionValue), + offsetof(struct E_RAB_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RAB_Item_ExtIEs__extensionValue, present), + sizeof(((struct E_RAB_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_564 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_564 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RAB_Item_ExtIEs_561[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_562, memb_id_constraint_561 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_563, memb_criticality_constraint_561 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RAB_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_564, + 0, + { 0, &asn_PER_memb_extensionValue_constr_564, memb_extensionValue_constraint_561 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RAB_Item_ExtIEs_tags_561[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RAB_Item_ExtIEs_tag2el_561[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Item_ExtIEs_specs_561 = { + sizeof(struct E_RAB_Item_ExtIEs), + offsetof(struct E_RAB_Item_ExtIEs, _asn_ctx), + asn_MAP_E_RAB_Item_ExtIEs_tag2el_561, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_Item_ExtIEs = { + "E-RAB-Item-ExtIEs", + "E-RAB-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RAB_Item_ExtIEs_tags_561, + sizeof(asn_DEF_E_RAB_Item_ExtIEs_tags_561) + /sizeof(asn_DEF_E_RAB_Item_ExtIEs_tags_561[0]), /* 1 */ + asn_DEF_E_RAB_Item_ExtIEs_tags_561, /* Same as above */ + sizeof(asn_DEF_E_RAB_Item_ExtIEs_tags_561) + /sizeof(asn_DEF_E_RAB_Item_ExtIEs_tags_561[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_Item_ExtIEs_561, + 3, /* Elements count */ + &asn_SPC_E_RAB_Item_ExtIEs_specs_561 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_568 = { + sizeof(struct E_RABUsageReport_Item_ExtIEs__extensionValue), + offsetof(struct E_RABUsageReport_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct E_RABUsageReport_Item_ExtIEs__extensionValue, present), + sizeof(((struct E_RABUsageReport_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_568 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_568 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABUsageReport_Item_ExtIEs_565[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_566, memb_id_constraint_565 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_567, memb_criticality_constraint_565 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_568, + 0, + { 0, &asn_PER_memb_extensionValue_constr_568, memb_extensionValue_constraint_565 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABUsageReport_Item_ExtIEs_tag2el_565[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_Item_ExtIEs_specs_565 = { + sizeof(struct E_RABUsageReport_Item_ExtIEs), + offsetof(struct E_RABUsageReport_Item_ExtIEs, _asn_ctx), + asn_MAP_E_RABUsageReport_Item_ExtIEs_tag2el_565, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_Item_ExtIEs = { + "E-RABUsageReport-Item-ExtIEs", + "E-RABUsageReport-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565, + sizeof(asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565) + /sizeof(asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565[0]), /* 1 */ + asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565, /* Same as above */ + sizeof(asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565) + /sizeof(asn_DEF_E_RABUsageReport_Item_ExtIEs_tags_565[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABUsageReport_Item_ExtIEs_565, + 3, /* Elements count */ + &asn_SPC_E_RABUsageReport_Item_ExtIEs_specs_565 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_572 = { + sizeof(struct ExpectedUEBehaviour_ExtIEs__extensionValue), + offsetof(struct ExpectedUEBehaviour_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ExpectedUEBehaviour_ExtIEs__extensionValue, present), + sizeof(((struct ExpectedUEBehaviour_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_572 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_572 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ExpectedUEBehaviour_ExtIEs_569[] = { + { ATF_NOFLAGS, 0, offsetof(struct ExpectedUEBehaviour_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_570, memb_id_constraint_569 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ExpectedUEBehaviour_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_571, memb_criticality_constraint_569 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ExpectedUEBehaviour_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_572, + 0, + { 0, &asn_PER_memb_extensionValue_constr_572, memb_extensionValue_constraint_569 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExpectedUEBehaviour_ExtIEs_tag2el_569[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEBehaviour_ExtIEs_specs_569 = { + sizeof(struct ExpectedUEBehaviour_ExtIEs), + offsetof(struct ExpectedUEBehaviour_ExtIEs, _asn_ctx), + asn_MAP_ExpectedUEBehaviour_ExtIEs_tag2el_569, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedUEBehaviour_ExtIEs = { + "ExpectedUEBehaviour-ExtIEs", + "ExpectedUEBehaviour-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569, + sizeof(asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569) + /sizeof(asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569[0]), /* 1 */ + asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569, /* Same as above */ + sizeof(asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569) + /sizeof(asn_DEF_ExpectedUEBehaviour_ExtIEs_tags_569[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExpectedUEBehaviour_ExtIEs_569, + 3, /* Elements count */ + &asn_SPC_ExpectedUEBehaviour_ExtIEs_specs_569 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_576 = { + sizeof(struct ExpectedUEActivityBehaviour_ExtIEs__extensionValue), + offsetof(struct ExpectedUEActivityBehaviour_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ExpectedUEActivityBehaviour_ExtIEs__extensionValue, present), + sizeof(((struct ExpectedUEActivityBehaviour_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_576 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_576 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ExpectedUEActivityBehaviour_ExtIEs_573[] = { + { ATF_NOFLAGS, 0, offsetof(struct ExpectedUEActivityBehaviour_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_574, memb_id_constraint_573 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ExpectedUEActivityBehaviour_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_575, memb_criticality_constraint_573 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ExpectedUEActivityBehaviour_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_576, + 0, + { 0, &asn_PER_memb_extensionValue_constr_576, memb_extensionValue_constraint_573 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExpectedUEActivityBehaviour_ExtIEs_tag2el_573[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEActivityBehaviour_ExtIEs_specs_573 = { + sizeof(struct ExpectedUEActivityBehaviour_ExtIEs), + offsetof(struct ExpectedUEActivityBehaviour_ExtIEs, _asn_ctx), + asn_MAP_ExpectedUEActivityBehaviour_ExtIEs_tag2el_573, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExpectedUEActivityBehaviour_ExtIEs = { + "ExpectedUEActivityBehaviour-ExtIEs", + "ExpectedUEActivityBehaviour-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573, + sizeof(asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573) + /sizeof(asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573[0]), /* 1 */ + asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573, /* Same as above */ + sizeof(asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573) + /sizeof(asn_DEF_ExpectedUEActivityBehaviour_ExtIEs_tags_573[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExpectedUEActivityBehaviour_ExtIEs_573, + 3, /* Elements count */ + &asn_SPC_ExpectedUEActivityBehaviour_ExtIEs_specs_573 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_580 = { + sizeof(struct ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue), + offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue, present), + sizeof(((struct ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_580 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_580 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ExtendedULInterferenceOverloadInfo_ExtIEs_577[] = { + { ATF_NOFLAGS, 0, offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_578, memb_id_constraint_577 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_579, memb_criticality_constraint_577 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_580, + 0, + { 0, &asn_PER_memb_extensionValue_constr_580, memb_extensionValue_constraint_577 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ExtendedULInterferenceOverloadInfo_ExtIEs_tag2el_577[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577 = { + sizeof(struct ExtendedULInterferenceOverloadInfo_ExtIEs), + offsetof(struct ExtendedULInterferenceOverloadInfo_ExtIEs, _asn_ctx), + asn_MAP_ExtendedULInterferenceOverloadInfo_ExtIEs_tag2el_577, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs = { + "ExtendedULInterferenceOverloadInfo-ExtIEs", + "ExtendedULInterferenceOverloadInfo-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577, + sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577) + /sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[0]), /* 1 */ + asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577, /* Same as above */ + sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577) + /sizeof(asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ExtendedULInterferenceOverloadInfo_ExtIEs_577, + 3, /* Elements count */ + &asn_SPC_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_584[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs__extensionValue, choice.EARFCNExtension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_EARFCNExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "EARFCNExtension" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs__extensionValue, choice.OffsetOfNbiotChannelNumberToEARFCN), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_OffsetOfNbiotChannelNumberToEARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "OffsetOfNbiotChannelNumberToEARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs__extensionValue, choice.NRS_NSSS_PowerOffset), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_NRS_NSSS_PowerOffset, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRS-NSSS-PowerOffset" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs__extensionValue, choice.NSSS_NumOccasionDifferentPrecoder), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_NSSS_NumOccasionDifferentPrecoder, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NSSS-NumOccasionDifferentPrecoder" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_584[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* EARFCNExtension */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 2 }, /* OffsetOfNbiotChannelNumberToEARFCN */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 1 }, /* NRS-NSSS-PowerOffset */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, -2, 0 } /* NSSS-NumOccasionDifferentPrecoder */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_584 = { + sizeof(struct FDD_Info_ExtIEs__extensionValue), + offsetof(struct FDD_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct FDD_Info_ExtIEs__extensionValue, present), + sizeof(((struct FDD_Info_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_584, + 4, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_584 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_584, + 4, /* Elements count */ + &asn_SPC_extensionValue_specs_584 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FDD_Info_ExtIEs_581[] = { + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_582, memb_id_constraint_581 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_FDD_Info_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_583, memb_criticality_constraint_581 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct FDD_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_584, + select_FDD_Info_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_584, memb_extensionValue_constraint_581 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_FDD_Info_ExtIEs_tags_581[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FDD_Info_ExtIEs_tag2el_581[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FDD_Info_ExtIEs_specs_581 = { + sizeof(struct FDD_Info_ExtIEs), + offsetof(struct FDD_Info_ExtIEs, _asn_ctx), + asn_MAP_FDD_Info_ExtIEs_tag2el_581, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FDD_Info_ExtIEs = { + "FDD-Info-ExtIEs", + "FDD-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_FDD_Info_ExtIEs_tags_581, + sizeof(asn_DEF_FDD_Info_ExtIEs_tags_581) + /sizeof(asn_DEF_FDD_Info_ExtIEs_tags_581[0]), /* 1 */ + asn_DEF_FDD_Info_ExtIEs_tags_581, /* Same as above */ + sizeof(asn_DEF_FDD_Info_ExtIEs_tags_581) + /sizeof(asn_DEF_FDD_Info_ExtIEs_tags_581[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FDD_Info_ExtIEs_581, + 3, /* Elements count */ + &asn_SPC_FDD_Info_ExtIEs_specs_581 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_588 = { + sizeof(struct ForbiddenTAs_Item_ExtIEs__extensionValue), + offsetof(struct ForbiddenTAs_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ForbiddenTAs_Item_ExtIEs__extensionValue, present), + sizeof(((struct ForbiddenTAs_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_588 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_588 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ForbiddenTAs_Item_ExtIEs_585[] = { + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenTAs_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_586, memb_id_constraint_585 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenTAs_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_587, memb_criticality_constraint_585 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ForbiddenTAs_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_588, + 0, + { 0, &asn_PER_memb_extensionValue_constr_588, memb_extensionValue_constraint_585 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ForbiddenTAs_Item_ExtIEs_tag2el_585[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ForbiddenTAs_Item_ExtIEs_specs_585 = { + sizeof(struct ForbiddenTAs_Item_ExtIEs), + offsetof(struct ForbiddenTAs_Item_ExtIEs, _asn_ctx), + asn_MAP_ForbiddenTAs_Item_ExtIEs_tag2el_585, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs_Item_ExtIEs = { + "ForbiddenTAs-Item-ExtIEs", + "ForbiddenTAs-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585, + sizeof(asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585) + /sizeof(asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585[0]), /* 1 */ + asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585, /* Same as above */ + sizeof(asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585) + /sizeof(asn_DEF_ForbiddenTAs_Item_ExtIEs_tags_585[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ForbiddenTAs_Item_ExtIEs_585, + 3, /* Elements count */ + &asn_SPC_ForbiddenTAs_Item_ExtIEs_specs_585 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_592 = { + sizeof(struct ForbiddenLAs_Item_ExtIEs__extensionValue), + offsetof(struct ForbiddenLAs_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ForbiddenLAs_Item_ExtIEs__extensionValue, present), + sizeof(((struct ForbiddenLAs_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_592 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_592 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ForbiddenLAs_Item_ExtIEs_589[] = { + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenLAs_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_590, memb_id_constraint_589 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ForbiddenLAs_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_591, memb_criticality_constraint_589 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ForbiddenLAs_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_592, + 0, + { 0, &asn_PER_memb_extensionValue_constr_592, memb_extensionValue_constraint_589 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ForbiddenLAs_Item_ExtIEs_tag2el_589[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ForbiddenLAs_Item_ExtIEs_specs_589 = { + sizeof(struct ForbiddenLAs_Item_ExtIEs), + offsetof(struct ForbiddenLAs_Item_ExtIEs, _asn_ctx), + asn_MAP_ForbiddenLAs_Item_ExtIEs_tag2el_589, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs_Item_ExtIEs = { + "ForbiddenLAs-Item-ExtIEs", + "ForbiddenLAs-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589, + sizeof(asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589) + /sizeof(asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589[0]), /* 1 */ + asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589, /* Same as above */ + sizeof(asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589) + /sizeof(asn_DEF_ForbiddenLAs_Item_ExtIEs_tags_589[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ForbiddenLAs_Item_ExtIEs_589, + 3, /* Elements count */ + &asn_SPC_ForbiddenLAs_Item_ExtIEs_specs_589 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_596 = { + sizeof(struct FreqBandNrItem_ExtIEs__extensionValue), + offsetof(struct FreqBandNrItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct FreqBandNrItem_ExtIEs__extensionValue, present), + sizeof(((struct FreqBandNrItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_596 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_596 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FreqBandNrItem_ExtIEs_593[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_594, memb_id_constraint_593 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_595, memb_criticality_constraint_593 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_596, + 0, + { 0, &asn_PER_memb_extensionValue_constr_596, memb_extensionValue_constraint_593 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_FreqBandNrItem_ExtIEs_tags_593[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FreqBandNrItem_ExtIEs_tag2el_593[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_ExtIEs_specs_593 = { + sizeof(struct FreqBandNrItem_ExtIEs), + offsetof(struct FreqBandNrItem_ExtIEs, _asn_ctx), + asn_MAP_FreqBandNrItem_ExtIEs_tag2el_593, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem_ExtIEs = { + "FreqBandNrItem-ExtIEs", + "FreqBandNrItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_FreqBandNrItem_ExtIEs_tags_593, + sizeof(asn_DEF_FreqBandNrItem_ExtIEs_tags_593) + /sizeof(asn_DEF_FreqBandNrItem_ExtIEs_tags_593[0]), /* 1 */ + asn_DEF_FreqBandNrItem_ExtIEs_tags_593, /* Same as above */ + sizeof(asn_DEF_FreqBandNrItem_ExtIEs_tags_593) + /sizeof(asn_DEF_FreqBandNrItem_ExtIEs_tags_593[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FreqBandNrItem_ExtIEs_593, + 3, /* Elements count */ + &asn_SPC_FreqBandNrItem_ExtIEs_specs_593 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_600[] = { + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation_ExtIEs__extensionValue, choice.ExtendedBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ExtendedBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExtendedBitRate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_600[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ExtendedBitRate */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_600 = { + sizeof(struct GBR_QosInformation_ExtIEs__extensionValue), + offsetof(struct GBR_QosInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GBR_QosInformation_ExtIEs__extensionValue, present), + sizeof(((struct GBR_QosInformation_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_600, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_600 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_600, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_600 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GBR_QosInformation_ExtIEs_597[] = { + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_598, memb_id_constraint_597 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_GBR_QosInformation_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_599, memb_criticality_constraint_597 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GBR_QosInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_600, + select_GBR_QosInformation_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_600, memb_extensionValue_constraint_597 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GBR_QosInformation_ExtIEs_tags_597[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GBR_QosInformation_ExtIEs_tag2el_597[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GBR_QosInformation_ExtIEs_specs_597 = { + sizeof(struct GBR_QosInformation_ExtIEs), + offsetof(struct GBR_QosInformation_ExtIEs, _asn_ctx), + asn_MAP_GBR_QosInformation_ExtIEs_tag2el_597, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GBR_QosInformation_ExtIEs = { + "GBR-QosInformation-ExtIEs", + "GBR-QosInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GBR_QosInformation_ExtIEs_tags_597, + sizeof(asn_DEF_GBR_QosInformation_ExtIEs_tags_597) + /sizeof(asn_DEF_GBR_QosInformation_ExtIEs_tags_597[0]), /* 1 */ + asn_DEF_GBR_QosInformation_ExtIEs_tags_597, /* Same as above */ + sizeof(asn_DEF_GBR_QosInformation_ExtIEs_tags_597) + /sizeof(asn_DEF_GBR_QosInformation_ExtIEs_tags_597[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GBR_QosInformation_ExtIEs_597, + 3, /* Elements count */ + &asn_SPC_GBR_QosInformation_ExtIEs_specs_597 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_604 = { + sizeof(struct GlobalENB_ID_ExtIEs__extensionValue), + offsetof(struct GlobalENB_ID_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GlobalENB_ID_ExtIEs__extensionValue, present), + sizeof(((struct GlobalENB_ID_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_604 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_604 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_ExtIEs_601[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_602, memb_id_constraint_601 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_603, memb_criticality_constraint_601 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_604, + 0, + { 0, &asn_PER_memb_extensionValue_constr_604, memb_extensionValue_constraint_601 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_ExtIEs_tags_601[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_ExtIEs_tag2el_601[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_ExtIEs_specs_601 = { + sizeof(struct GlobalENB_ID_ExtIEs), + offsetof(struct GlobalENB_ID_ExtIEs, _asn_ctx), + asn_MAP_GlobalENB_ID_ExtIEs_tag2el_601, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID_ExtIEs = { + "GlobalENB-ID-ExtIEs", + "GlobalENB-ID-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_ExtIEs_tags_601, + sizeof(asn_DEF_GlobalENB_ID_ExtIEs_tags_601) + /sizeof(asn_DEF_GlobalENB_ID_ExtIEs_tags_601[0]), /* 1 */ + asn_DEF_GlobalENB_ID_ExtIEs_tags_601, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_ExtIEs_tags_601) + /sizeof(asn_DEF_GlobalENB_ID_ExtIEs_tags_601[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_ExtIEs_601, + 3, /* Elements count */ + &asn_SPC_GlobalENB_ID_ExtIEs_specs_601 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_608 = { + sizeof(struct GlobalGNB_ID_ExtIEs__extensionValue), + offsetof(struct GlobalGNB_ID_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GlobalGNB_ID_ExtIEs__extensionValue, present), + sizeof(((struct GlobalGNB_ID_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_608 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_608 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GlobalGNB_ID_ExtIEs_605[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_606, memb_id_constraint_605 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_607, memb_criticality_constraint_605 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_608, + 0, + { 0, &asn_PER_memb_extensionValue_constr_608, memb_extensionValue_constraint_605 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalGNB_ID_ExtIEs_tags_605[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalGNB_ID_ExtIEs_tag2el_605[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_ExtIEs_specs_605 = { + sizeof(struct GlobalGNB_ID_ExtIEs), + offsetof(struct GlobalGNB_ID_ExtIEs, _asn_ctx), + asn_MAP_GlobalGNB_ID_ExtIEs_tag2el_605, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID_ExtIEs = { + "GlobalGNB-ID-ExtIEs", + "GlobalGNB-ID-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GlobalGNB_ID_ExtIEs_tags_605, + sizeof(asn_DEF_GlobalGNB_ID_ExtIEs_tags_605) + /sizeof(asn_DEF_GlobalGNB_ID_ExtIEs_tags_605[0]), /* 1 */ + asn_DEF_GlobalGNB_ID_ExtIEs_tags_605, /* Same as above */ + sizeof(asn_DEF_GlobalGNB_ID_ExtIEs_tags_605) + /sizeof(asn_DEF_GlobalGNB_ID_ExtIEs_tags_605[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalGNB_ID_ExtIEs_605, + 3, /* Elements count */ + &asn_SPC_GlobalGNB_ID_ExtIEs_specs_605 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_612 = { + sizeof(struct GTPtunnelEndpoint_ExtIEs__extensionValue), + offsetof(struct GTPtunnelEndpoint_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GTPtunnelEndpoint_ExtIEs__extensionValue, present), + sizeof(((struct GTPtunnelEndpoint_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_612 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_612 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GTPtunnelEndpoint_ExtIEs_609[] = { + { ATF_NOFLAGS, 0, offsetof(struct GTPtunnelEndpoint_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_610, memb_id_constraint_609 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GTPtunnelEndpoint_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_611, memb_criticality_constraint_609 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GTPtunnelEndpoint_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_612, + 0, + { 0, &asn_PER_memb_extensionValue_constr_612, memb_extensionValue_constraint_609 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GTPtunnelEndpoint_ExtIEs_tag2el_609[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GTPtunnelEndpoint_ExtIEs_specs_609 = { + sizeof(struct GTPtunnelEndpoint_ExtIEs), + offsetof(struct GTPtunnelEndpoint_ExtIEs, _asn_ctx), + asn_MAP_GTPtunnelEndpoint_ExtIEs_tag2el_609, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GTPtunnelEndpoint_ExtIEs = { + "GTPtunnelEndpoint-ExtIEs", + "GTPtunnelEndpoint-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609, + sizeof(asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609) + /sizeof(asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609[0]), /* 1 */ + asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609, /* Same as above */ + sizeof(asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609) + /sizeof(asn_DEF_GTPtunnelEndpoint_ExtIEs_tags_609[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GTPtunnelEndpoint_ExtIEs_609, + 3, /* Elements count */ + &asn_SPC_GTPtunnelEndpoint_ExtIEs_specs_609 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_616 = { + sizeof(struct GU_Group_ID_ExtIEs__extensionValue), + offsetof(struct GU_Group_ID_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GU_Group_ID_ExtIEs__extensionValue, present), + sizeof(((struct GU_Group_ID_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_616 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_616 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GU_Group_ID_ExtIEs_613[] = { + { ATF_NOFLAGS, 0, offsetof(struct GU_Group_ID_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_614, memb_id_constraint_613 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GU_Group_ID_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_615, memb_criticality_constraint_613 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GU_Group_ID_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_616, + 0, + { 0, &asn_PER_memb_extensionValue_constr_616, memb_extensionValue_constraint_613 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GU_Group_ID_ExtIEs_tags_613[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GU_Group_ID_ExtIEs_tag2el_613[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GU_Group_ID_ExtIEs_specs_613 = { + sizeof(struct GU_Group_ID_ExtIEs), + offsetof(struct GU_Group_ID_ExtIEs, _asn_ctx), + asn_MAP_GU_Group_ID_ExtIEs_tag2el_613, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GU_Group_ID_ExtIEs = { + "GU-Group-ID-ExtIEs", + "GU-Group-ID-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GU_Group_ID_ExtIEs_tags_613, + sizeof(asn_DEF_GU_Group_ID_ExtIEs_tags_613) + /sizeof(asn_DEF_GU_Group_ID_ExtIEs_tags_613[0]), /* 1 */ + asn_DEF_GU_Group_ID_ExtIEs_tags_613, /* Same as above */ + sizeof(asn_DEF_GU_Group_ID_ExtIEs_tags_613) + /sizeof(asn_DEF_GU_Group_ID_ExtIEs_tags_613[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GU_Group_ID_ExtIEs_613, + 3, /* Elements count */ + &asn_SPC_GU_Group_ID_ExtIEs_specs_613 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_620 = { + sizeof(struct GUMMEI_ExtIEs__extensionValue), + offsetof(struct GUMMEI_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct GUMMEI_ExtIEs__extensionValue, present), + sizeof(((struct GUMMEI_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_620 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_620 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GUMMEI_ExtIEs_617[] = { + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_618, memb_id_constraint_617 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_619, memb_criticality_constraint_617 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GUMMEI_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_620, + 0, + { 0, &asn_PER_memb_extensionValue_constr_620, memb_extensionValue_constraint_617 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_GUMMEI_ExtIEs_tags_617[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GUMMEI_ExtIEs_tag2el_617[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_ExtIEs_specs_617 = { + sizeof(struct GUMMEI_ExtIEs), + offsetof(struct GUMMEI_ExtIEs, _asn_ctx), + asn_MAP_GUMMEI_ExtIEs_tag2el_617, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GUMMEI_ExtIEs = { + "GUMMEI-ExtIEs", + "GUMMEI-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_GUMMEI_ExtIEs_tags_617, + sizeof(asn_DEF_GUMMEI_ExtIEs_tags_617) + /sizeof(asn_DEF_GUMMEI_ExtIEs_tags_617[0]), /* 1 */ + asn_DEF_GUMMEI_ExtIEs_tags_617, /* Same as above */ + sizeof(asn_DEF_GUMMEI_ExtIEs_tags_617) + /sizeof(asn_DEF_GUMMEI_ExtIEs_tags_617[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GUMMEI_ExtIEs_617, + 3, /* Elements count */ + &asn_SPC_GUMMEI_ExtIEs_specs_617 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_624[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs__extensionValue, choice.NRrestrictioninEPSasSecondaryRAT), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_NRrestrictioninEPSasSecondaryRAT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRrestrictioninEPSasSecondaryRAT" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs__extensionValue, choice.CNTypeRestrictions), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CNTypeRestrictions, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CNTypeRestrictions" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs__extensionValue, choice.NRrestrictionin5GS), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_NRrestrictionin5GS, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRrestrictionin5GS" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_624[] = { 0, 2, 1 }; +static const unsigned asn_MAP_extensionValue_from_canonical_624[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_624[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* NRrestrictioninEPSasSecondaryRAT */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 0 }, /* NRrestrictionin5GS */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CNTypeRestrictions */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_624 = { + sizeof(struct HandoverRestrictionList_ExtIEs__extensionValue), + offsetof(struct HandoverRestrictionList_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct HandoverRestrictionList_ExtIEs__extensionValue, present), + sizeof(((struct HandoverRestrictionList_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_624, + 3, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_624, + asn_MAP_extensionValue_from_canonical_624, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_624 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_624, + 3, /* Elements count */ + &asn_SPC_extensionValue_specs_624 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverRestrictionList_ExtIEs_621[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_622, memb_id_constraint_621 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_HandoverRestrictionList_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_623, memb_criticality_constraint_621 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverRestrictionList_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_624, + select_HandoverRestrictionList_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_624, memb_extensionValue_constraint_621 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverRestrictionList_ExtIEs_tags_621[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRestrictionList_ExtIEs_tag2el_621[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverRestrictionList_ExtIEs_specs_621 = { + sizeof(struct HandoverRestrictionList_ExtIEs), + offsetof(struct HandoverRestrictionList_ExtIEs, _asn_ctx), + asn_MAP_HandoverRestrictionList_ExtIEs_tag2el_621, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRestrictionList_ExtIEs = { + "HandoverRestrictionList-ExtIEs", + "HandoverRestrictionList-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRestrictionList_ExtIEs_tags_621, + sizeof(asn_DEF_HandoverRestrictionList_ExtIEs_tags_621) + /sizeof(asn_DEF_HandoverRestrictionList_ExtIEs_tags_621[0]), /* 1 */ + asn_DEF_HandoverRestrictionList_ExtIEs_tags_621, /* Same as above */ + sizeof(asn_DEF_HandoverRestrictionList_ExtIEs_tags_621) + /sizeof(asn_DEF_HandoverRestrictionList_ExtIEs_tags_621[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRestrictionList_ExtIEs_621, + 3, /* Elements count */ + &asn_SPC_HandoverRestrictionList_ExtIEs_specs_621 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_628 = { + sizeof(struct HWLoadIndicator_ExtIEs__extensionValue), + offsetof(struct HWLoadIndicator_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct HWLoadIndicator_ExtIEs__extensionValue, present), + sizeof(((struct HWLoadIndicator_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_628 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_628 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HWLoadIndicator_ExtIEs_625[] = { + { ATF_NOFLAGS, 0, offsetof(struct HWLoadIndicator_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_626, memb_id_constraint_625 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HWLoadIndicator_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_627, memb_criticality_constraint_625 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HWLoadIndicator_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_628, + 0, + { 0, &asn_PER_memb_extensionValue_constr_628, memb_extensionValue_constraint_625 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_HWLoadIndicator_ExtIEs_tags_625[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HWLoadIndicator_ExtIEs_tag2el_625[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HWLoadIndicator_ExtIEs_specs_625 = { + sizeof(struct HWLoadIndicator_ExtIEs), + offsetof(struct HWLoadIndicator_ExtIEs, _asn_ctx), + asn_MAP_HWLoadIndicator_ExtIEs_tag2el_625, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HWLoadIndicator_ExtIEs = { + "HWLoadIndicator-ExtIEs", + "HWLoadIndicator-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_HWLoadIndicator_ExtIEs_tags_625, + sizeof(asn_DEF_HWLoadIndicator_ExtIEs_tags_625) + /sizeof(asn_DEF_HWLoadIndicator_ExtIEs_tags_625[0]), /* 1 */ + asn_DEF_HWLoadIndicator_ExtIEs_tags_625, /* Same as above */ + sizeof(asn_DEF_HWLoadIndicator_ExtIEs_tags_625) + /sizeof(asn_DEF_HWLoadIndicator_ExtIEs_tags_625[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HWLoadIndicator_ExtIEs_625, + 3, /* Elements count */ + &asn_SPC_HWLoadIndicator_ExtIEs_specs_625 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_632[] = { + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, choice.Time_UE_StayedInCell_EnhancedGranularity), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Time_UE_StayedInCell_EnhancedGranularity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Time-UE-StayedInCell-EnhancedGranularity" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_632[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Time-UE-StayedInCell-EnhancedGranularity */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_632 = { + sizeof(struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue), + offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, present), + sizeof(((struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_632, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_632 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_632, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_632 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_LastVisitedEUTRANCellInformation_ExtIEs_629[] = { + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_630, memb_id_constraint_629 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_LastVisitedEUTRANCellInformation_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_631, memb_criticality_constraint_629 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_632, + select_LastVisitedEUTRANCellInformation_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_632, memb_extensionValue_constraint_629 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LastVisitedEUTRANCellInformation_ExtIEs_tag2el_629[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LastVisitedEUTRANCellInformation_ExtIEs_specs_629 = { + sizeof(struct LastVisitedEUTRANCellInformation_ExtIEs), + offsetof(struct LastVisitedEUTRANCellInformation_ExtIEs, _asn_ctx), + asn_MAP_LastVisitedEUTRANCellInformation_ExtIEs_tag2el_629, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs = { + "LastVisitedEUTRANCellInformation-ExtIEs", + "LastVisitedEUTRANCellInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629, + sizeof(asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629) + /sizeof(asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[0]), /* 1 */ + asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629, /* Same as above */ + sizeof(asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629) + /sizeof(asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LastVisitedEUTRANCellInformation_ExtIEs_629, + 3, /* Elements count */ + &asn_SPC_LastVisitedEUTRANCellInformation_ExtIEs_specs_629 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_636 = { + sizeof(struct LocationReportingInformation_ExtIEs__extensionValue), + offsetof(struct LocationReportingInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct LocationReportingInformation_ExtIEs__extensionValue, present), + sizeof(((struct LocationReportingInformation_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_636 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_636 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_LocationReportingInformation_ExtIEs_633[] = { + { ATF_NOFLAGS, 0, offsetof(struct LocationReportingInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_634, memb_id_constraint_633 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct LocationReportingInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_635, memb_criticality_constraint_633 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct LocationReportingInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_636, + 0, + { 0, &asn_PER_memb_extensionValue_constr_636, memb_extensionValue_constraint_633 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_LocationReportingInformation_ExtIEs_tags_633[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LocationReportingInformation_ExtIEs_tag2el_633[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LocationReportingInformation_ExtIEs_specs_633 = { + sizeof(struct LocationReportingInformation_ExtIEs), + offsetof(struct LocationReportingInformation_ExtIEs, _asn_ctx), + asn_MAP_LocationReportingInformation_ExtIEs_tag2el_633, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LocationReportingInformation_ExtIEs = { + "LocationReportingInformation-ExtIEs", + "LocationReportingInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_LocationReportingInformation_ExtIEs_tags_633, + sizeof(asn_DEF_LocationReportingInformation_ExtIEs_tags_633) + /sizeof(asn_DEF_LocationReportingInformation_ExtIEs_tags_633[0]), /* 1 */ + asn_DEF_LocationReportingInformation_ExtIEs_tags_633, /* Same as above */ + sizeof(asn_DEF_LocationReportingInformation_ExtIEs_tags_633) + /sizeof(asn_DEF_LocationReportingInformation_ExtIEs_tags_633[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LocationReportingInformation_ExtIEs_633, + 3, /* Elements count */ + &asn_SPC_LocationReportingInformation_ExtIEs_specs_633 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_640 = { + sizeof(struct M1PeriodicReporting_ExtIEs__extensionValue), + offsetof(struct M1PeriodicReporting_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M1PeriodicReporting_ExtIEs__extensionValue, present), + sizeof(((struct M1PeriodicReporting_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_640 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_640 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M1PeriodicReporting_ExtIEs_637[] = { + { ATF_NOFLAGS, 0, offsetof(struct M1PeriodicReporting_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_638, memb_id_constraint_637 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M1PeriodicReporting_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_639, memb_criticality_constraint_637 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M1PeriodicReporting_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_640, + 0, + { 0, &asn_PER_memb_extensionValue_constr_640, memb_extensionValue_constraint_637 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M1PeriodicReporting_ExtIEs_tags_637[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M1PeriodicReporting_ExtIEs_tag2el_637[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M1PeriodicReporting_ExtIEs_specs_637 = { + sizeof(struct M1PeriodicReporting_ExtIEs), + offsetof(struct M1PeriodicReporting_ExtIEs, _asn_ctx), + asn_MAP_M1PeriodicReporting_ExtIEs_tag2el_637, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M1PeriodicReporting_ExtIEs = { + "M1PeriodicReporting-ExtIEs", + "M1PeriodicReporting-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M1PeriodicReporting_ExtIEs_tags_637, + sizeof(asn_DEF_M1PeriodicReporting_ExtIEs_tags_637) + /sizeof(asn_DEF_M1PeriodicReporting_ExtIEs_tags_637[0]), /* 1 */ + asn_DEF_M1PeriodicReporting_ExtIEs_tags_637, /* Same as above */ + sizeof(asn_DEF_M1PeriodicReporting_ExtIEs_tags_637) + /sizeof(asn_DEF_M1PeriodicReporting_ExtIEs_tags_637[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M1PeriodicReporting_ExtIEs_637, + 3, /* Elements count */ + &asn_SPC_M1PeriodicReporting_ExtIEs_specs_637 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_644 = { + sizeof(struct M1ThresholdEventA2_ExtIEs__extensionValue), + offsetof(struct M1ThresholdEventA2_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M1ThresholdEventA2_ExtIEs__extensionValue, present), + sizeof(((struct M1ThresholdEventA2_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_644 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_644 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M1ThresholdEventA2_ExtIEs_641[] = { + { ATF_NOFLAGS, 0, offsetof(struct M1ThresholdEventA2_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_642, memb_id_constraint_641 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M1ThresholdEventA2_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_643, memb_criticality_constraint_641 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M1ThresholdEventA2_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_644, + 0, + { 0, &asn_PER_memb_extensionValue_constr_644, memb_extensionValue_constraint_641 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M1ThresholdEventA2_ExtIEs_tag2el_641[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M1ThresholdEventA2_ExtIEs_specs_641 = { + sizeof(struct M1ThresholdEventA2_ExtIEs), + offsetof(struct M1ThresholdEventA2_ExtIEs, _asn_ctx), + asn_MAP_M1ThresholdEventA2_ExtIEs_tag2el_641, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M1ThresholdEventA2_ExtIEs = { + "M1ThresholdEventA2-ExtIEs", + "M1ThresholdEventA2-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641, + sizeof(asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641) + /sizeof(asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641[0]), /* 1 */ + asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641, /* Same as above */ + sizeof(asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641) + /sizeof(asn_DEF_M1ThresholdEventA2_ExtIEs_tags_641[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M1ThresholdEventA2_ExtIEs_641, + 3, /* Elements count */ + &asn_SPC_M1ThresholdEventA2_ExtIEs_specs_641 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_648 = { + sizeof(struct M3Configuration_ExtIEs__extensionValue), + offsetof(struct M3Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M3Configuration_ExtIEs__extensionValue, present), + sizeof(((struct M3Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_648 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_648 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M3Configuration_ExtIEs_645[] = { + { ATF_NOFLAGS, 0, offsetof(struct M3Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_646, memb_id_constraint_645 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M3Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_647, memb_criticality_constraint_645 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M3Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_648, + 0, + { 0, &asn_PER_memb_extensionValue_constr_648, memb_extensionValue_constraint_645 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M3Configuration_ExtIEs_tags_645[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M3Configuration_ExtIEs_tag2el_645[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M3Configuration_ExtIEs_specs_645 = { + sizeof(struct M3Configuration_ExtIEs), + offsetof(struct M3Configuration_ExtIEs, _asn_ctx), + asn_MAP_M3Configuration_ExtIEs_tag2el_645, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M3Configuration_ExtIEs = { + "M3Configuration-ExtIEs", + "M3Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M3Configuration_ExtIEs_tags_645, + sizeof(asn_DEF_M3Configuration_ExtIEs_tags_645) + /sizeof(asn_DEF_M3Configuration_ExtIEs_tags_645[0]), /* 1 */ + asn_DEF_M3Configuration_ExtIEs_tags_645, /* Same as above */ + sizeof(asn_DEF_M3Configuration_ExtIEs_tags_645) + /sizeof(asn_DEF_M3Configuration_ExtIEs_tags_645[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M3Configuration_ExtIEs_645, + 3, /* Elements count */ + &asn_SPC_M3Configuration_ExtIEs_specs_645 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_652 = { + sizeof(struct M4Configuration_ExtIEs__extensionValue), + offsetof(struct M4Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M4Configuration_ExtIEs__extensionValue, present), + sizeof(((struct M4Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_652 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_652 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M4Configuration_ExtIEs_649[] = { + { ATF_NOFLAGS, 0, offsetof(struct M4Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_650, memb_id_constraint_649 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M4Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_651, memb_criticality_constraint_649 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M4Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_652, + 0, + { 0, &asn_PER_memb_extensionValue_constr_652, memb_extensionValue_constraint_649 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M4Configuration_ExtIEs_tags_649[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M4Configuration_ExtIEs_tag2el_649[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M4Configuration_ExtIEs_specs_649 = { + sizeof(struct M4Configuration_ExtIEs), + offsetof(struct M4Configuration_ExtIEs, _asn_ctx), + asn_MAP_M4Configuration_ExtIEs_tag2el_649, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M4Configuration_ExtIEs = { + "M4Configuration-ExtIEs", + "M4Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M4Configuration_ExtIEs_tags_649, + sizeof(asn_DEF_M4Configuration_ExtIEs_tags_649) + /sizeof(asn_DEF_M4Configuration_ExtIEs_tags_649[0]), /* 1 */ + asn_DEF_M4Configuration_ExtIEs_tags_649, /* Same as above */ + sizeof(asn_DEF_M4Configuration_ExtIEs_tags_649) + /sizeof(asn_DEF_M4Configuration_ExtIEs_tags_649[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M4Configuration_ExtIEs_649, + 3, /* Elements count */ + &asn_SPC_M4Configuration_ExtIEs_specs_649 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_656 = { + sizeof(struct M5Configuration_ExtIEs__extensionValue), + offsetof(struct M5Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M5Configuration_ExtIEs__extensionValue, present), + sizeof(((struct M5Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_656 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_656 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M5Configuration_ExtIEs_653[] = { + { ATF_NOFLAGS, 0, offsetof(struct M5Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_654, memb_id_constraint_653 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M5Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_655, memb_criticality_constraint_653 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M5Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_656, + 0, + { 0, &asn_PER_memb_extensionValue_constr_656, memb_extensionValue_constraint_653 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M5Configuration_ExtIEs_tags_653[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M5Configuration_ExtIEs_tag2el_653[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M5Configuration_ExtIEs_specs_653 = { + sizeof(struct M5Configuration_ExtIEs), + offsetof(struct M5Configuration_ExtIEs, _asn_ctx), + asn_MAP_M5Configuration_ExtIEs_tag2el_653, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M5Configuration_ExtIEs = { + "M5Configuration-ExtIEs", + "M5Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M5Configuration_ExtIEs_tags_653, + sizeof(asn_DEF_M5Configuration_ExtIEs_tags_653) + /sizeof(asn_DEF_M5Configuration_ExtIEs_tags_653[0]), /* 1 */ + asn_DEF_M5Configuration_ExtIEs_tags_653, /* Same as above */ + sizeof(asn_DEF_M5Configuration_ExtIEs_tags_653) + /sizeof(asn_DEF_M5Configuration_ExtIEs_tags_653[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M5Configuration_ExtIEs_653, + 3, /* Elements count */ + &asn_SPC_M5Configuration_ExtIEs_specs_653 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_660 = { + sizeof(struct M6Configuration_ExtIEs__extensionValue), + offsetof(struct M6Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M6Configuration_ExtIEs__extensionValue, present), + sizeof(((struct M6Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_660 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_660 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M6Configuration_ExtIEs_657[] = { + { ATF_NOFLAGS, 0, offsetof(struct M6Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_658, memb_id_constraint_657 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M6Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_659, memb_criticality_constraint_657 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M6Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_660, + 0, + { 0, &asn_PER_memb_extensionValue_constr_660, memb_extensionValue_constraint_657 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M6Configuration_ExtIEs_tags_657[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M6Configuration_ExtIEs_tag2el_657[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M6Configuration_ExtIEs_specs_657 = { + sizeof(struct M6Configuration_ExtIEs), + offsetof(struct M6Configuration_ExtIEs, _asn_ctx), + asn_MAP_M6Configuration_ExtIEs_tag2el_657, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M6Configuration_ExtIEs = { + "M6Configuration-ExtIEs", + "M6Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M6Configuration_ExtIEs_tags_657, + sizeof(asn_DEF_M6Configuration_ExtIEs_tags_657) + /sizeof(asn_DEF_M6Configuration_ExtIEs_tags_657[0]), /* 1 */ + asn_DEF_M6Configuration_ExtIEs_tags_657, /* Same as above */ + sizeof(asn_DEF_M6Configuration_ExtIEs_tags_657) + /sizeof(asn_DEF_M6Configuration_ExtIEs_tags_657[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M6Configuration_ExtIEs_657, + 3, /* Elements count */ + &asn_SPC_M6Configuration_ExtIEs_specs_657 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_664 = { + sizeof(struct M7Configuration_ExtIEs__extensionValue), + offsetof(struct M7Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct M7Configuration_ExtIEs__extensionValue, present), + sizeof(((struct M7Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_664 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_664 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_M7Configuration_ExtIEs_661[] = { + { ATF_NOFLAGS, 0, offsetof(struct M7Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_662, memb_id_constraint_661 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct M7Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_663, memb_criticality_constraint_661 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct M7Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_664, + 0, + { 0, &asn_PER_memb_extensionValue_constr_664, memb_extensionValue_constraint_661 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_M7Configuration_ExtIEs_tags_661[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_M7Configuration_ExtIEs_tag2el_661[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_M7Configuration_ExtIEs_specs_661 = { + sizeof(struct M7Configuration_ExtIEs), + offsetof(struct M7Configuration_ExtIEs, _asn_ctx), + asn_MAP_M7Configuration_ExtIEs_tag2el_661, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_M7Configuration_ExtIEs = { + "M7Configuration-ExtIEs", + "M7Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_M7Configuration_ExtIEs_tags_661, + sizeof(asn_DEF_M7Configuration_ExtIEs_tags_661) + /sizeof(asn_DEF_M7Configuration_ExtIEs_tags_661[0]), /* 1 */ + asn_DEF_M7Configuration_ExtIEs_tags_661, /* Same as above */ + sizeof(asn_DEF_M7Configuration_ExtIEs_tags_661) + /sizeof(asn_DEF_M7Configuration_ExtIEs_tags_661[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_M7Configuration_ExtIEs_661, + 3, /* Elements count */ + &asn_SPC_M7Configuration_ExtIEs_specs_661 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_668[] = { + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.M3Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M3Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "M3Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.M4Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M4Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "M4Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.M5Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M5Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "M5Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.MDT_Location_Info), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_MDT_Location_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MDT-Location-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.MDTPLMNList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MDTPLMNList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MDTPLMNList" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.M6Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M6Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "M6Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.M7Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_M7Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "M7Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.BluetoothMeasurementConfiguration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BluetoothMeasurementConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "BluetoothMeasurementConfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs__extensionValue, choice.WLANMeasurementConfiguration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_WLANMeasurementConfiguration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "WLANMeasurementConfiguration" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_668[] = { 3, 0, 1, 2, 4, 5, 6, 7, 8 }; +static const unsigned asn_MAP_extensionValue_from_canonical_668[] = { 1, 2, 3, 0, 4, 5, 6, 7, 8 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_668[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 0 }, /* MDT-Location-Info */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 7 }, /* M3Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 6 }, /* M4Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 5 }, /* M5Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -3, 4 }, /* MDTPLMNList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -4, 3 }, /* M6Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -5, 2 }, /* M7Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -6, 1 }, /* BluetoothMeasurementConfiguration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -7, 0 } /* WLANMeasurementConfiguration */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_668 = { + sizeof(struct MDT_Configuration_ExtIEs__extensionValue), + offsetof(struct MDT_Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct MDT_Configuration_ExtIEs__extensionValue, present), + sizeof(((struct MDT_Configuration_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_668, + 9, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_668, + asn_MAP_extensionValue_from_canonical_668, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_668 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_668, + 9, /* Elements count */ + &asn_SPC_extensionValue_specs_668 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MDT_Configuration_ExtIEs_665[] = { + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_666, memb_id_constraint_665 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_MDT_Configuration_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_667, memb_criticality_constraint_665 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MDT_Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_668, + select_MDT_Configuration_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_668, memb_extensionValue_constraint_665 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_MDT_Configuration_ExtIEs_tags_665[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MDT_Configuration_ExtIEs_tag2el_665[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MDT_Configuration_ExtIEs_specs_665 = { + sizeof(struct MDT_Configuration_ExtIEs), + offsetof(struct MDT_Configuration_ExtIEs, _asn_ctx), + asn_MAP_MDT_Configuration_ExtIEs_tag2el_665, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MDT_Configuration_ExtIEs = { + "MDT-Configuration-ExtIEs", + "MDT-Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_MDT_Configuration_ExtIEs_tags_665, + sizeof(asn_DEF_MDT_Configuration_ExtIEs_tags_665) + /sizeof(asn_DEF_MDT_Configuration_ExtIEs_tags_665[0]), /* 1 */ + asn_DEF_MDT_Configuration_ExtIEs_tags_665, /* Same as above */ + sizeof(asn_DEF_MDT_Configuration_ExtIEs_tags_665) + /sizeof(asn_DEF_MDT_Configuration_ExtIEs_tags_665[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MDT_Configuration_ExtIEs_665, + 3, /* Elements count */ + &asn_SPC_MDT_Configuration_ExtIEs_specs_665 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_672[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformationExtIEs__extensionValue, choice.NRCGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformationExtIEs__extensionValue, choice.MeNBCoordinationAssistanceInformation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_MeNBCoordinationAssistanceInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBCoordinationAssistanceInformation" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_672[] = { 1, 0 }; +static const unsigned asn_MAP_extensionValue_from_canonical_672[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_672[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* MeNBCoordinationAssistanceInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* NRCGI */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_672 = { + sizeof(struct MeNBResourceCoordinationInformationExtIEs__extensionValue), + offsetof(struct MeNBResourceCoordinationInformationExtIEs__extensionValue, _asn_ctx), + offsetof(struct MeNBResourceCoordinationInformationExtIEs__extensionValue, present), + sizeof(((struct MeNBResourceCoordinationInformationExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_672, + 2, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_672, + asn_MAP_extensionValue_from_canonical_672, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_672 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_672, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_672 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeNBResourceCoordinationInformationExtIEs_669[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformationExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_670, memb_id_constraint_669 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformationExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_MeNBResourceCoordinationInformationExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_671, memb_criticality_constraint_669 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MeNBResourceCoordinationInformationExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_672, + select_MeNBResourceCoordinationInformationExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_672, memb_extensionValue_constraint_669 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeNBResourceCoordinationInformationExtIEs_tag2el_669[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeNBResourceCoordinationInformationExtIEs_specs_669 = { + sizeof(struct MeNBResourceCoordinationInformationExtIEs), + offsetof(struct MeNBResourceCoordinationInformationExtIEs, _asn_ctx), + asn_MAP_MeNBResourceCoordinationInformationExtIEs_tag2el_669, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeNBResourceCoordinationInformationExtIEs = { + "MeNBResourceCoordinationInformationExtIEs", + "MeNBResourceCoordinationInformationExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669, + sizeof(asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669) + /sizeof(asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669[0]), /* 1 */ + asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669, /* Same as above */ + sizeof(asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669) + /sizeof(asn_DEF_MeNBResourceCoordinationInformationExtIEs_tags_669[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeNBResourceCoordinationInformationExtIEs_669, + 3, /* Elements count */ + &asn_SPC_MeNBResourceCoordinationInformationExtIEs_specs_669 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_676 = { + sizeof(struct MBSFN_Subframe_Info_ExtIEs__extensionValue), + offsetof(struct MBSFN_Subframe_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct MBSFN_Subframe_Info_ExtIEs__extensionValue, present), + sizeof(((struct MBSFN_Subframe_Info_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_676 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_676 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Info_ExtIEs_673[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_674, memb_id_constraint_673 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_675, memb_criticality_constraint_673 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MBSFN_Subframe_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_676, + 0, + { 0, &asn_PER_memb_extensionValue_constr_676, memb_extensionValue_constraint_673 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MBSFN_Subframe_Info_ExtIEs_tag2el_673[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MBSFN_Subframe_Info_ExtIEs_specs_673 = { + sizeof(struct MBSFN_Subframe_Info_ExtIEs), + offsetof(struct MBSFN_Subframe_Info_ExtIEs, _asn_ctx), + asn_MAP_MBSFN_Subframe_Info_ExtIEs_tag2el_673, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Info_ExtIEs = { + "MBSFN-Subframe-Info-ExtIEs", + "MBSFN-Subframe-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673, + sizeof(asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673) + /sizeof(asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673[0]), /* 1 */ + asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673, /* Same as above */ + sizeof(asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673) + /sizeof(asn_DEF_MBSFN_Subframe_Info_ExtIEs_tags_673[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MBSFN_Subframe_Info_ExtIEs_673, + 3, /* Elements count */ + &asn_SPC_MBSFN_Subframe_Info_ExtIEs_specs_673 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_680 = { + sizeof(struct BandInfo_ExtIEs__extensionValue), + offsetof(struct BandInfo_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct BandInfo_ExtIEs__extensionValue, present), + sizeof(((struct BandInfo_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_680 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_680 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_BandInfo_ExtIEs_677[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandInfo_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_678, memb_id_constraint_677 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct BandInfo_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_679, memb_criticality_constraint_677 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct BandInfo_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_680, + 0, + { 0, &asn_PER_memb_extensionValue_constr_680, memb_extensionValue_constraint_677 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_BandInfo_ExtIEs_tags_677[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_BandInfo_ExtIEs_tag2el_677[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_BandInfo_ExtIEs_specs_677 = { + sizeof(struct BandInfo_ExtIEs), + offsetof(struct BandInfo_ExtIEs, _asn_ctx), + asn_MAP_BandInfo_ExtIEs_tag2el_677, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_BandInfo_ExtIEs = { + "BandInfo-ExtIEs", + "BandInfo-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_BandInfo_ExtIEs_tags_677, + sizeof(asn_DEF_BandInfo_ExtIEs_tags_677) + /sizeof(asn_DEF_BandInfo_ExtIEs_tags_677[0]), /* 1 */ + asn_DEF_BandInfo_ExtIEs_tags_677, /* Same as above */ + sizeof(asn_DEF_BandInfo_ExtIEs_tags_677) + /sizeof(asn_DEF_BandInfo_ExtIEs_tags_677[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_BandInfo_ExtIEs_677, + 3, /* Elements count */ + &asn_SPC_BandInfo_ExtIEs_specs_677 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_684 = { + sizeof(struct SplitSRB_ExtIEs__extensionValue), + offsetof(struct SplitSRB_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SplitSRB_ExtIEs__extensionValue, present), + sizeof(((struct SplitSRB_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_684 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_684 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SplitSRB_ExtIEs_681[] = { + { ATF_NOFLAGS, 0, offsetof(struct SplitSRB_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_682, memb_id_constraint_681 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SplitSRB_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_683, memb_criticality_constraint_681 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SplitSRB_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_684, + 0, + { 0, &asn_PER_memb_extensionValue_constr_684, memb_extensionValue_constraint_681 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SplitSRB_ExtIEs_tags_681[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SplitSRB_ExtIEs_tag2el_681[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SplitSRB_ExtIEs_specs_681 = { + sizeof(struct SplitSRB_ExtIEs), + offsetof(struct SplitSRB_ExtIEs, _asn_ctx), + asn_MAP_SplitSRB_ExtIEs_tag2el_681, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SplitSRB_ExtIEs = { + "SplitSRB-ExtIEs", + "SplitSRB-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SplitSRB_ExtIEs_tags_681, + sizeof(asn_DEF_SplitSRB_ExtIEs_tags_681) + /sizeof(asn_DEF_SplitSRB_ExtIEs_tags_681[0]), /* 1 */ + asn_DEF_SplitSRB_ExtIEs_tags_681, /* Same as above */ + sizeof(asn_DEF_SplitSRB_ExtIEs_tags_681) + /sizeof(asn_DEF_SplitSRB_ExtIEs_tags_681[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SplitSRB_ExtIEs_681, + 3, /* Elements count */ + &asn_SPC_SplitSRB_ExtIEs_specs_681 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_688 = { + sizeof(struct UENRMeasurement_ExtIEs__extensionValue), + offsetof(struct UENRMeasurement_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UENRMeasurement_ExtIEs__extensionValue, present), + sizeof(((struct UENRMeasurement_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_688 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_688 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UENRMeasurement_ExtIEs_685[] = { + { ATF_NOFLAGS, 0, offsetof(struct UENRMeasurement_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_686, memb_id_constraint_685 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UENRMeasurement_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_687, memb_criticality_constraint_685 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UENRMeasurement_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_688, + 0, + { 0, &asn_PER_memb_extensionValue_constr_688, memb_extensionValue_constraint_685 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UENRMeasurement_ExtIEs_tags_685[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UENRMeasurement_ExtIEs_tag2el_685[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UENRMeasurement_ExtIEs_specs_685 = { + sizeof(struct UENRMeasurement_ExtIEs), + offsetof(struct UENRMeasurement_ExtIEs, _asn_ctx), + asn_MAP_UENRMeasurement_ExtIEs_tag2el_685, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UENRMeasurement_ExtIEs = { + "UENRMeasurement-ExtIEs", + "UENRMeasurement-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UENRMeasurement_ExtIEs_tags_685, + sizeof(asn_DEF_UENRMeasurement_ExtIEs_tags_685) + /sizeof(asn_DEF_UENRMeasurement_ExtIEs_tags_685[0]), /* 1 */ + asn_DEF_UENRMeasurement_ExtIEs_tags_685, /* Same as above */ + sizeof(asn_DEF_UENRMeasurement_ExtIEs_tags_685) + /sizeof(asn_DEF_UENRMeasurement_ExtIEs_tags_685[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UENRMeasurement_ExtIEs_685, + 3, /* Elements count */ + &asn_SPC_UENRMeasurement_ExtIEs_specs_685 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_692[] = { + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information_ExtIEs__extensionValue, choice.TAC), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TAC" + }, + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information_ExtIEs__extensionValue, choice.EARFCNExtension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_EARFCNExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "EARFCNExtension" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_692[] = { 1, 0 }; +static const unsigned asn_MAP_extensionValue_from_canonical_692[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_692[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* EARFCNExtension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* TAC */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_692 = { + sizeof(struct Neighbour_Information_ExtIEs__extensionValue), + offsetof(struct Neighbour_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct Neighbour_Information_ExtIEs__extensionValue, present), + sizeof(((struct Neighbour_Information_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_692, + 2, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_692, + asn_MAP_extensionValue_from_canonical_692, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_692 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_692, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_692 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Neighbour_Information_ExtIEs_689[] = { + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_690, memb_id_constraint_689 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_Neighbour_Information_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_691, memb_criticality_constraint_689 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Neighbour_Information_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_692, + select_Neighbour_Information_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_692, memb_extensionValue_constraint_689 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_Neighbour_Information_ExtIEs_tags_689[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Neighbour_Information_ExtIEs_tag2el_689[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Neighbour_Information_ExtIEs_specs_689 = { + sizeof(struct Neighbour_Information_ExtIEs), + offsetof(struct Neighbour_Information_ExtIEs, _asn_ctx), + asn_MAP_Neighbour_Information_ExtIEs_tag2el_689, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Neighbour_Information_ExtIEs = { + "Neighbour-Information-ExtIEs", + "Neighbour-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_Neighbour_Information_ExtIEs_tags_689, + sizeof(asn_DEF_Neighbour_Information_ExtIEs_tags_689) + /sizeof(asn_DEF_Neighbour_Information_ExtIEs_tags_689[0]), /* 1 */ + asn_DEF_Neighbour_Information_ExtIEs_tags_689, /* Same as above */ + sizeof(asn_DEF_Neighbour_Information_ExtIEs_tags_689) + /sizeof(asn_DEF_Neighbour_Information_ExtIEs_tags_689[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Neighbour_Information_ExtIEs_689, + 3, /* Elements count */ + &asn_SPC_Neighbour_Information_ExtIEs_specs_689 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_696 = { + sizeof(struct NRFreqInfo_ExtIEs__extensionValue), + offsetof(struct NRFreqInfo_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct NRFreqInfo_ExtIEs__extensionValue, present), + sizeof(((struct NRFreqInfo_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_696 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_696 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRFreqInfo_ExtIEs_693[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRFreqInfo_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_694, memb_id_constraint_693 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRFreqInfo_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_695, memb_criticality_constraint_693 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct NRFreqInfo_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_696, + 0, + { 0, &asn_PER_memb_extensionValue_constr_696, memb_extensionValue_constraint_693 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRFreqInfo_ExtIEs_tags_693[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRFreqInfo_ExtIEs_tag2el_693[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRFreqInfo_ExtIEs_specs_693 = { + sizeof(struct NRFreqInfo_ExtIEs), + offsetof(struct NRFreqInfo_ExtIEs, _asn_ctx), + asn_MAP_NRFreqInfo_ExtIEs_tag2el_693, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRFreqInfo_ExtIEs = { + "NRFreqInfo-ExtIEs", + "NRFreqInfo-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_NRFreqInfo_ExtIEs_tags_693, + sizeof(asn_DEF_NRFreqInfo_ExtIEs_tags_693) + /sizeof(asn_DEF_NRFreqInfo_ExtIEs_tags_693[0]), /* 1 */ + asn_DEF_NRFreqInfo_ExtIEs_tags_693, /* Same as above */ + sizeof(asn_DEF_NRFreqInfo_ExtIEs_tags_693) + /sizeof(asn_DEF_NRFreqInfo_ExtIEs_tags_693[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRFreqInfo_ExtIEs_693, + 3, /* Elements count */ + &asn_SPC_NRFreqInfo_ExtIEs_specs_693 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_700 = { + sizeof(struct NRCGI_ExtIEs__extensionValue), + offsetof(struct NRCGI_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct NRCGI_ExtIEs__extensionValue, present), + sizeof(((struct NRCGI_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_700 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_700 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRCGI_ExtIEs_697[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_698, memb_id_constraint_697 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_699, memb_criticality_constraint_697 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct NRCGI_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_700, + 0, + { 0, &asn_PER_memb_extensionValue_constr_700, memb_extensionValue_constraint_697 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_ExtIEs_tags_697[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_ExtIEs_tag2el_697[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_ExtIEs_specs_697 = { + sizeof(struct NRCGI_ExtIEs), + offsetof(struct NRCGI_ExtIEs, _asn_ctx), + asn_MAP_NRCGI_ExtIEs_tag2el_697, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI_ExtIEs = { + "NRCGI-ExtIEs", + "NRCGI-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_ExtIEs_tags_697, + sizeof(asn_DEF_NRCGI_ExtIEs_tags_697) + /sizeof(asn_DEF_NRCGI_ExtIEs_tags_697[0]), /* 1 */ + asn_DEF_NRCGI_ExtIEs_tags_697, /* Same as above */ + sizeof(asn_DEF_NRCGI_ExtIEs_tags_697) + /sizeof(asn_DEF_NRCGI_ExtIEs_tags_697[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_ExtIEs_697, + 3, /* Elements count */ + &asn_SPC_NRCGI_ExtIEs_specs_697 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_704 = { + sizeof(struct NR_TxBW_ExtIEs__extensionValue), + offsetof(struct NR_TxBW_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct NR_TxBW_ExtIEs__extensionValue, present), + sizeof(((struct NR_TxBW_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_704 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_704 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NR_TxBW_ExtIEs_701[] = { + { ATF_NOFLAGS, 0, offsetof(struct NR_TxBW_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_702, memb_id_constraint_701 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct NR_TxBW_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_703, memb_criticality_constraint_701 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct NR_TxBW_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_704, + 0, + { 0, &asn_PER_memb_extensionValue_constr_704, memb_extensionValue_constraint_701 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_NR_TxBW_ExtIEs_tags_701[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NR_TxBW_ExtIEs_tag2el_701[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NR_TxBW_ExtIEs_specs_701 = { + sizeof(struct NR_TxBW_ExtIEs), + offsetof(struct NR_TxBW_ExtIEs, _asn_ctx), + asn_MAP_NR_TxBW_ExtIEs_tag2el_701, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NR_TxBW_ExtIEs = { + "NR-TxBW-ExtIEs", + "NR-TxBW-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_NR_TxBW_ExtIEs_tags_701, + sizeof(asn_DEF_NR_TxBW_ExtIEs_tags_701) + /sizeof(asn_DEF_NR_TxBW_ExtIEs_tags_701[0]), /* 1 */ + asn_DEF_NR_TxBW_ExtIEs_tags_701, /* Same as above */ + sizeof(asn_DEF_NR_TxBW_ExtIEs_tags_701) + /sizeof(asn_DEF_NR_TxBW_ExtIEs_tags_701[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NR_TxBW_ExtIEs_701, + 3, /* Elements count */ + &asn_SPC_NR_TxBW_ExtIEs_specs_701 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_708 = { + sizeof(struct NRUESecurityCapabilities_ExtIEs__extensionValue), + offsetof(struct NRUESecurityCapabilities_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct NRUESecurityCapabilities_ExtIEs__extensionValue, present), + sizeof(((struct NRUESecurityCapabilities_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_708 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_708 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_NRUESecurityCapabilities_ExtIEs_705[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRUESecurityCapabilities_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_706, memb_id_constraint_705 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRUESecurityCapabilities_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_707, memb_criticality_constraint_705 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct NRUESecurityCapabilities_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_708, + 0, + { 0, &asn_PER_memb_extensionValue_constr_708, memb_extensionValue_constraint_705 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRUESecurityCapabilities_ExtIEs_tag2el_705[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRUESecurityCapabilities_ExtIEs_specs_705 = { + sizeof(struct NRUESecurityCapabilities_ExtIEs), + offsetof(struct NRUESecurityCapabilities_ExtIEs, _asn_ctx), + asn_MAP_NRUESecurityCapabilities_ExtIEs_tag2el_705, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRUESecurityCapabilities_ExtIEs = { + "NRUESecurityCapabilities-ExtIEs", + "NRUESecurityCapabilities-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705, + sizeof(asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705) + /sizeof(asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705[0]), /* 1 */ + asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705, /* Same as above */ + sizeof(asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705) + /sizeof(asn_DEF_NRUESecurityCapabilities_ExtIEs_tags_705[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRUESecurityCapabilities_ExtIEs_705, + 3, /* Elements count */ + &asn_SPC_NRUESecurityCapabilities_ExtIEs_specs_705 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_712 = { + sizeof(struct PRACH_Configuration_ExtIEs__extensionValue), + offsetof(struct PRACH_Configuration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct PRACH_Configuration_ExtIEs__extensionValue, present), + sizeof(((struct PRACH_Configuration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_712 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_712 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_PRACH_Configuration_ExtIEs_709[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_710, memb_id_constraint_709 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_711, memb_criticality_constraint_709 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct PRACH_Configuration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_712, + 0, + { 0, &asn_PER_memb_extensionValue_constr_712, memb_extensionValue_constraint_709 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_PRACH_Configuration_ExtIEs_tags_709[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PRACH_Configuration_ExtIEs_tag2el_709[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PRACH_Configuration_ExtIEs_specs_709 = { + sizeof(struct PRACH_Configuration_ExtIEs), + offsetof(struct PRACH_Configuration_ExtIEs, _asn_ctx), + asn_MAP_PRACH_Configuration_ExtIEs_tag2el_709, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_Configuration_ExtIEs = { + "PRACH-Configuration-ExtIEs", + "PRACH-Configuration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_PRACH_Configuration_ExtIEs_tags_709, + sizeof(asn_DEF_PRACH_Configuration_ExtIEs_tags_709) + /sizeof(asn_DEF_PRACH_Configuration_ExtIEs_tags_709[0]), /* 1 */ + asn_DEF_PRACH_Configuration_ExtIEs_tags_709, /* Same as above */ + sizeof(asn_DEF_PRACH_Configuration_ExtIEs_tags_709) + /sizeof(asn_DEF_PRACH_Configuration_ExtIEs_tags_709[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PRACH_Configuration_ExtIEs_709, + 3, /* Elements count */ + &asn_SPC_PRACH_Configuration_ExtIEs_specs_709 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_716 = { + sizeof(struct PLMNAreaBasedQMC_ExtIEs__extensionValue), + offsetof(struct PLMNAreaBasedQMC_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct PLMNAreaBasedQMC_ExtIEs__extensionValue, present), + sizeof(((struct PLMNAreaBasedQMC_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_716 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_716 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_PLMNAreaBasedQMC_ExtIEs_713[] = { + { ATF_NOFLAGS, 0, offsetof(struct PLMNAreaBasedQMC_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_714, memb_id_constraint_713 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct PLMNAreaBasedQMC_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_715, memb_criticality_constraint_713 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct PLMNAreaBasedQMC_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_716, + 0, + { 0, &asn_PER_memb_extensionValue_constr_716, memb_extensionValue_constraint_713 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PLMNAreaBasedQMC_ExtIEs_tag2el_713[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PLMNAreaBasedQMC_ExtIEs_specs_713 = { + sizeof(struct PLMNAreaBasedQMC_ExtIEs), + offsetof(struct PLMNAreaBasedQMC_ExtIEs, _asn_ctx), + asn_MAP_PLMNAreaBasedQMC_ExtIEs_tag2el_713, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMNAreaBasedQMC_ExtIEs = { + "PLMNAreaBasedQMC-ExtIEs", + "PLMNAreaBasedQMC-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713, + sizeof(asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713) + /sizeof(asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713[0]), /* 1 */ + asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713, /* Same as above */ + sizeof(asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713) + /sizeof(asn_DEF_PLMNAreaBasedQMC_ExtIEs_tags_713[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PLMNAreaBasedQMC_ExtIEs_713, + 3, /* Elements count */ + &asn_SPC_PLMNAreaBasedQMC_ExtIEs_specs_713 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_720[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProSeAuthorized_ExtIEs__extensionValue, choice.ProSeUEtoNetworkRelaying), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ProSeUEtoNetworkRelaying, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ProSeUEtoNetworkRelaying" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_720[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* ProSeUEtoNetworkRelaying */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_720 = { + sizeof(struct ProSeAuthorized_ExtIEs__extensionValue), + offsetof(struct ProSeAuthorized_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ProSeAuthorized_ExtIEs__extensionValue, present), + sizeof(((struct ProSeAuthorized_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_720, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_720 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_720, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_720 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProSeAuthorized_ExtIEs_717[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProSeAuthorized_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_718, memb_id_constraint_717 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProSeAuthorized_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_ProSeAuthorized_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_719, memb_criticality_constraint_717 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ProSeAuthorized_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_720, + select_ProSeAuthorized_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_720, memb_extensionValue_constraint_717 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProSeAuthorized_ExtIEs_tags_717[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProSeAuthorized_ExtIEs_tag2el_717[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProSeAuthorized_ExtIEs_specs_717 = { + sizeof(struct ProSeAuthorized_ExtIEs), + offsetof(struct ProSeAuthorized_ExtIEs, _asn_ctx), + asn_MAP_ProSeAuthorized_ExtIEs_tag2el_717, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProSeAuthorized_ExtIEs = { + "ProSeAuthorized-ExtIEs", + "ProSeAuthorized-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ProSeAuthorized_ExtIEs_tags_717, + sizeof(asn_DEF_ProSeAuthorized_ExtIEs_tags_717) + /sizeof(asn_DEF_ProSeAuthorized_ExtIEs_tags_717[0]), /* 1 */ + asn_DEF_ProSeAuthorized_ExtIEs_tags_717, /* Same as above */ + sizeof(asn_DEF_ProSeAuthorized_ExtIEs_tags_717) + /sizeof(asn_DEF_ProSeAuthorized_ExtIEs_tags_717[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProSeAuthorized_ExtIEs_717, + 3, /* Elements count */ + &asn_SPC_ProSeAuthorized_ExtIEs_specs_717 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_724 = { + sizeof(struct ProtectedEUTRAResourceIndication_ExtIEs__extensionValue), + offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs__extensionValue, present), + sizeof(((struct ProtectedEUTRAResourceIndication_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_724 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_724 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtectedEUTRAResourceIndication_ExtIEs_721[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_722, memb_id_constraint_721 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_723, memb_criticality_constraint_721 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_724, + 0, + { 0, &asn_PER_memb_extensionValue_constr_724, memb_extensionValue_constraint_721 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedEUTRAResourceIndication_ExtIEs_tag2el_721[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedEUTRAResourceIndication_ExtIEs_specs_721 = { + sizeof(struct ProtectedEUTRAResourceIndication_ExtIEs), + offsetof(struct ProtectedEUTRAResourceIndication_ExtIEs, _asn_ctx), + asn_MAP_ProtectedEUTRAResourceIndication_ExtIEs_tag2el_721, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs = { + "ProtectedEUTRAResourceIndication-ExtIEs", + "ProtectedEUTRAResourceIndication-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721, + sizeof(asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721) + /sizeof(asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[0]), /* 1 */ + asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721, /* Same as above */ + sizeof(asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721) + /sizeof(asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedEUTRAResourceIndication_ExtIEs_721, + 3, /* Elements count */ + &asn_SPC_ProtectedEUTRAResourceIndication_ExtIEs_specs_721 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_728 = { + sizeof(struct ProtectedFootprintTimePattern_ExtIEs__extensionValue), + offsetof(struct ProtectedFootprintTimePattern_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ProtectedFootprintTimePattern_ExtIEs__extensionValue, present), + sizeof(((struct ProtectedFootprintTimePattern_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_728 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_728 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtectedFootprintTimePattern_ExtIEs_725[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedFootprintTimePattern_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_726, memb_id_constraint_725 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedFootprintTimePattern_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_727, memb_criticality_constraint_725 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ProtectedFootprintTimePattern_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_728, + 0, + { 0, &asn_PER_memb_extensionValue_constr_728, memb_extensionValue_constraint_725 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedFootprintTimePattern_ExtIEs_tag2el_725[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedFootprintTimePattern_ExtIEs_specs_725 = { + sizeof(struct ProtectedFootprintTimePattern_ExtIEs), + offsetof(struct ProtectedFootprintTimePattern_ExtIEs, _asn_ctx), + asn_MAP_ProtectedFootprintTimePattern_ExtIEs_tag2el_725, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedFootprintTimePattern_ExtIEs = { + "ProtectedFootprintTimePattern-ExtIEs", + "ProtectedFootprintTimePattern-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725, + sizeof(asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725) + /sizeof(asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725[0]), /* 1 */ + asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725, /* Same as above */ + sizeof(asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725) + /sizeof(asn_DEF_ProtectedFootprintTimePattern_ExtIEs_tags_725[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedFootprintTimePattern_ExtIEs_725, + 3, /* Elements count */ + &asn_SPC_ProtectedFootprintTimePattern_ExtIEs_specs_725 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_732 = { + sizeof(struct ProtectedResourceList_Item_ExtIEs__extensionValue), + offsetof(struct ProtectedResourceList_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ProtectedResourceList_Item_ExtIEs__extensionValue, present), + sizeof(((struct ProtectedResourceList_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_732 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_732 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtectedResourceList_Item_ExtIEs_729[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_730, memb_id_constraint_729 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_731, memb_criticality_constraint_729 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ProtectedResourceList_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_732, + 0, + { 0, &asn_PER_memb_extensionValue_constr_732, memb_extensionValue_constraint_729 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ProtectedResourceList_Item_ExtIEs_tag2el_729[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ProtectedResourceList_Item_ExtIEs_specs_729 = { + sizeof(struct ProtectedResourceList_Item_ExtIEs), + offsetof(struct ProtectedResourceList_Item_ExtIEs, _asn_ctx), + asn_MAP_ProtectedResourceList_Item_ExtIEs_tag2el_729, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList_Item_ExtIEs = { + "ProtectedResourceList-Item-ExtIEs", + "ProtectedResourceList-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729, + sizeof(asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729) + /sizeof(asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729[0]), /* 1 */ + asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729, /* Same as above */ + sizeof(asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729) + /sizeof(asn_DEF_ProtectedResourceList_Item_ExtIEs_tags_729[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ProtectedResourceList_Item_ExtIEs_729, + 3, /* Elements count */ + &asn_SPC_ProtectedResourceList_Item_ExtIEs_specs_729 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_736[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus_ExtIEs__extensionValue, choice.DL_scheduling_PDCCH_CCE_usage), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_DL_scheduling_PDCCH_CCE_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DL-scheduling-PDCCH-CCE-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus_ExtIEs__extensionValue, choice.UL_scheduling_PDCCH_CCE_usage), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UL_scheduling_PDCCH_CCE_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UL-scheduling-PDCCH-CCE-usage" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_736[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* DL-scheduling-PDCCH-CCE-usage */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* UL-scheduling-PDCCH-CCE-usage */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_736 = { + sizeof(struct RadioResourceStatus_ExtIEs__extensionValue), + offsetof(struct RadioResourceStatus_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RadioResourceStatus_ExtIEs__extensionValue, present), + sizeof(((struct RadioResourceStatus_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_736, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_736 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_736, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_736 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RadioResourceStatus_ExtIEs_733[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_734, memb_id_constraint_733 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_RadioResourceStatus_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_735, memb_criticality_constraint_733 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_736, + select_RadioResourceStatus_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_736, memb_extensionValue_constraint_733 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RadioResourceStatus_ExtIEs_tags_733[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RadioResourceStatus_ExtIEs_tag2el_733[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RadioResourceStatus_ExtIEs_specs_733 = { + sizeof(struct RadioResourceStatus_ExtIEs), + offsetof(struct RadioResourceStatus_ExtIEs, _asn_ctx), + asn_MAP_RadioResourceStatus_ExtIEs_tag2el_733, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceStatus_ExtIEs = { + "RadioResourceStatus-ExtIEs", + "RadioResourceStatus-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RadioResourceStatus_ExtIEs_tags_733, + sizeof(asn_DEF_RadioResourceStatus_ExtIEs_tags_733) + /sizeof(asn_DEF_RadioResourceStatus_ExtIEs_tags_733[0]), /* 1 */ + asn_DEF_RadioResourceStatus_ExtIEs_tags_733, /* Same as above */ + sizeof(asn_DEF_RadioResourceStatus_ExtIEs_tags_733) + /sizeof(asn_DEF_RadioResourceStatus_ExtIEs_tags_733[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RadioResourceStatus_ExtIEs_733, + 3, /* Elements count */ + &asn_SPC_RadioResourceStatus_ExtIEs_specs_733 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_740[] = { + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower_ExtIEs__extensionValue, choice.EnhancedRNTP), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EnhancedRNTP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "EnhancedRNTP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_740[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* EnhancedRNTP */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_740 = { + sizeof(struct RelativeNarrowbandTxPower_ExtIEs__extensionValue), + offsetof(struct RelativeNarrowbandTxPower_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RelativeNarrowbandTxPower_ExtIEs__extensionValue, present), + sizeof(((struct RelativeNarrowbandTxPower_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_740, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_740 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_740, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_740 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RelativeNarrowbandTxPower_ExtIEs_737[] = { + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_738, memb_id_constraint_737 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_RelativeNarrowbandTxPower_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_739, memb_criticality_constraint_737 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_740, + select_RelativeNarrowbandTxPower_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_740, memb_extensionValue_constraint_737 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RelativeNarrowbandTxPower_ExtIEs_tag2el_737[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RelativeNarrowbandTxPower_ExtIEs_specs_737 = { + sizeof(struct RelativeNarrowbandTxPower_ExtIEs), + offsetof(struct RelativeNarrowbandTxPower_ExtIEs, _asn_ctx), + asn_MAP_RelativeNarrowbandTxPower_ExtIEs_tag2el_737, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RelativeNarrowbandTxPower_ExtIEs = { + "RelativeNarrowbandTxPower-ExtIEs", + "RelativeNarrowbandTxPower-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737, + sizeof(asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737) + /sizeof(asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737[0]), /* 1 */ + asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737, /* Same as above */ + sizeof(asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737) + /sizeof(asn_DEF_RelativeNarrowbandTxPower_ExtIEs_tags_737[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RelativeNarrowbandTxPower_ExtIEs_737, + 3, /* Elements count */ + &asn_SPC_RelativeNarrowbandTxPower_ExtIEs_specs_737 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_744 = { + sizeof(struct ReservedSubframePattern_ExtIEs__extensionValue), + offsetof(struct ReservedSubframePattern_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ReservedSubframePattern_ExtIEs__extensionValue, present), + sizeof(((struct ReservedSubframePattern_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_744 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_744 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ReservedSubframePattern_ExtIEs_741[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_742, memb_id_constraint_741 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_743, memb_criticality_constraint_741 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_744, + 0, + { 0, &asn_PER_memb_extensionValue_constr_744, memb_extensionValue_constraint_741 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ReservedSubframePattern_ExtIEs_tags_741[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ReservedSubframePattern_ExtIEs_tag2el_741[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ReservedSubframePattern_ExtIEs_specs_741 = { + sizeof(struct ReservedSubframePattern_ExtIEs), + offsetof(struct ReservedSubframePattern_ExtIEs, _asn_ctx), + asn_MAP_ReservedSubframePattern_ExtIEs_tag2el_741, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ReservedSubframePattern_ExtIEs = { + "ReservedSubframePattern-ExtIEs", + "ReservedSubframePattern-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ReservedSubframePattern_ExtIEs_tags_741, + sizeof(asn_DEF_ReservedSubframePattern_ExtIEs_tags_741) + /sizeof(asn_DEF_ReservedSubframePattern_ExtIEs_tags_741[0]), /* 1 */ + asn_DEF_ReservedSubframePattern_ExtIEs_tags_741, /* Same as above */ + sizeof(asn_DEF_ReservedSubframePattern_ExtIEs_tags_741) + /sizeof(asn_DEF_ReservedSubframePattern_ExtIEs_tags_741[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ReservedSubframePattern_ExtIEs_741, + 3, /* Elements count */ + &asn_SPC_ReservedSubframePattern_ExtIEs_specs_741 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_748 = { + sizeof(struct RLC_Status_ExtIEs__extensionValue), + offsetof(struct RLC_Status_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RLC_Status_ExtIEs__extensionValue, present), + sizeof(((struct RLC_Status_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_748 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_748 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RLC_Status_ExtIEs_745[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Status_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_746, memb_id_constraint_745 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Status_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_747, memb_criticality_constraint_745 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RLC_Status_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_748, + 0, + { 0, &asn_PER_memb_extensionValue_constr_748, memb_extensionValue_constraint_745 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RLC_Status_ExtIEs_tags_745[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RLC_Status_ExtIEs_tag2el_745[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RLC_Status_ExtIEs_specs_745 = { + sizeof(struct RLC_Status_ExtIEs), + offsetof(struct RLC_Status_ExtIEs, _asn_ctx), + asn_MAP_RLC_Status_ExtIEs_tag2el_745, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RLC_Status_ExtIEs = { + "RLC-Status-ExtIEs", + "RLC-Status-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RLC_Status_ExtIEs_tags_745, + sizeof(asn_DEF_RLC_Status_ExtIEs_tags_745) + /sizeof(asn_DEF_RLC_Status_ExtIEs_tags_745[0]), /* 1 */ + asn_DEF_RLC_Status_ExtIEs_tags_745, /* Same as above */ + sizeof(asn_DEF_RLC_Status_ExtIEs_tags_745) + /sizeof(asn_DEF_RLC_Status_ExtIEs_tags_745[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RLC_Status_ExtIEs_745, + 3, /* Elements count */ + &asn_SPC_RLC_Status_ExtIEs_specs_745 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_752 = { + sizeof(struct RSRPMeasurementResult_ExtIEs__extensionValue), + offsetof(struct RSRPMeasurementResult_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RSRPMeasurementResult_ExtIEs__extensionValue, present), + sizeof(((struct RSRPMeasurementResult_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_752 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_752 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RSRPMeasurementResult_ExtIEs_749[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSRPMeasurementResult_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_750, memb_id_constraint_749 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RSRPMeasurementResult_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_751, memb_criticality_constraint_749 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RSRPMeasurementResult_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_752, + 0, + { 0, &asn_PER_memb_extensionValue_constr_752, memb_extensionValue_constraint_749 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RSRPMeasurementResult_ExtIEs_tag2el_749[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RSRPMeasurementResult_ExtIEs_specs_749 = { + sizeof(struct RSRPMeasurementResult_ExtIEs), + offsetof(struct RSRPMeasurementResult_ExtIEs, _asn_ctx), + asn_MAP_RSRPMeasurementResult_ExtIEs_tag2el_749, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RSRPMeasurementResult_ExtIEs = { + "RSRPMeasurementResult-ExtIEs", + "RSRPMeasurementResult-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749, + sizeof(asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749) + /sizeof(asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749[0]), /* 1 */ + asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749, /* Same as above */ + sizeof(asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749) + /sizeof(asn_DEF_RSRPMeasurementResult_ExtIEs_tags_749[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RSRPMeasurementResult_ExtIEs_749, + 3, /* Elements count */ + &asn_SPC_RSRPMeasurementResult_ExtIEs_specs_749 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_756[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSRPMRList_ExtIEs__extensionValue, choice.UEID), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_UEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_756[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* UEID */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_756 = { + sizeof(struct RSRPMRList_ExtIEs__extensionValue), + offsetof(struct RSRPMRList_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct RSRPMRList_ExtIEs__extensionValue, present), + sizeof(((struct RSRPMRList_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_756, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_756 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_756, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_756 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RSRPMRList_ExtIEs_753[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSRPMRList_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_754, memb_id_constraint_753 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RSRPMRList_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_RSRPMRList_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_755, memb_criticality_constraint_753 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RSRPMRList_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_756, + select_RSRPMRList_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_756, memb_extensionValue_constraint_753 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_RSRPMRList_ExtIEs_tags_753[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RSRPMRList_ExtIEs_tag2el_753[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RSRPMRList_ExtIEs_specs_753 = { + sizeof(struct RSRPMRList_ExtIEs), + offsetof(struct RSRPMRList_ExtIEs, _asn_ctx), + asn_MAP_RSRPMRList_ExtIEs_tag2el_753, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RSRPMRList_ExtIEs = { + "RSRPMRList-ExtIEs", + "RSRPMRList-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_RSRPMRList_ExtIEs_tags_753, + sizeof(asn_DEF_RSRPMRList_ExtIEs_tags_753) + /sizeof(asn_DEF_RSRPMRList_ExtIEs_tags_753[0]), /* 1 */ + asn_DEF_RSRPMRList_ExtIEs_tags_753, /* Same as above */ + sizeof(asn_DEF_RSRPMRList_ExtIEs_tags_753) + /sizeof(asn_DEF_RSRPMRList_ExtIEs_tags_753[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RSRPMRList_ExtIEs_753, + 3, /* Elements count */ + &asn_SPC_RSRPMRList_ExtIEs_specs_753 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_760 = { + sizeof(struct S1TNLLoadIndicator_ExtIEs__extensionValue), + offsetof(struct S1TNLLoadIndicator_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct S1TNLLoadIndicator_ExtIEs__extensionValue, present), + sizeof(((struct S1TNLLoadIndicator_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_760 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_760 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_S1TNLLoadIndicator_ExtIEs_757[] = { + { ATF_NOFLAGS, 0, offsetof(struct S1TNLLoadIndicator_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_758, memb_id_constraint_757 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct S1TNLLoadIndicator_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_759, memb_criticality_constraint_757 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct S1TNLLoadIndicator_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_760, + 0, + { 0, &asn_PER_memb_extensionValue_constr_760, memb_extensionValue_constraint_757 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_S1TNLLoadIndicator_ExtIEs_tag2el_757[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_S1TNLLoadIndicator_ExtIEs_specs_757 = { + sizeof(struct S1TNLLoadIndicator_ExtIEs), + offsetof(struct S1TNLLoadIndicator_ExtIEs, _asn_ctx), + asn_MAP_S1TNLLoadIndicator_ExtIEs_tag2el_757, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_S1TNLLoadIndicator_ExtIEs = { + "S1TNLLoadIndicator-ExtIEs", + "S1TNLLoadIndicator-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757, + sizeof(asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757) + /sizeof(asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757[0]), /* 1 */ + asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757, /* Same as above */ + sizeof(asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757) + /sizeof(asn_DEF_S1TNLLoadIndicator_ExtIEs_tags_757[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_S1TNLLoadIndicator_ExtIEs_757, + 3, /* Elements count */ + &asn_SPC_S1TNLLoadIndicator_ExtIEs_specs_757 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_764 = { + sizeof(struct SecondaryRATUsageReport_Item_ExtIEs__extensionValue), + offsetof(struct SecondaryRATUsageReport_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SecondaryRATUsageReport_Item_ExtIEs__extensionValue, present), + sizeof(((struct SecondaryRATUsageReport_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_764 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_764 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_Item_ExtIEs_761[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_762, memb_id_constraint_761 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_763, memb_criticality_constraint_761 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_764, + 0, + { 0, &asn_PER_memb_extensionValue_constr_764, memb_extensionValue_constraint_761 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SecondaryRATUsageReport_Item_ExtIEs_tag2el_761[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_Item_ExtIEs_specs_761 = { + sizeof(struct SecondaryRATUsageReport_Item_ExtIEs), + offsetof(struct SecondaryRATUsageReport_Item_ExtIEs, _asn_ctx), + asn_MAP_SecondaryRATUsageReport_Item_ExtIEs_tag2el_761, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_Item_ExtIEs = { + "SecondaryRATUsageReport-Item-ExtIEs", + "SecondaryRATUsageReport-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761, + sizeof(asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761) + /sizeof(asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761[0]), /* 1 */ + asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761, /* Same as above */ + sizeof(asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761) + /sizeof(asn_DEF_SecondaryRATUsageReport_Item_ExtIEs_tags_761[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATUsageReport_Item_ExtIEs_761, + 3, /* Elements count */ + &asn_SPC_SecondaryRATUsageReport_Item_ExtIEs_specs_761 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_768 = { + sizeof(struct ServedCell_ExtIEs__extensionValue), + offsetof(struct ServedCell_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedCell_ExtIEs__extensionValue, present), + sizeof(((struct ServedCell_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_768 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_768 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedCell_ExtIEs_765[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_766, memb_id_constraint_765 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_767, memb_criticality_constraint_765 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedCell_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_768, + 0, + { 0, &asn_PER_memb_extensionValue_constr_768, memb_extensionValue_constraint_765 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCell_ExtIEs_tags_765[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCell_ExtIEs_tag2el_765[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCell_ExtIEs_specs_765 = { + sizeof(struct ServedCell_ExtIEs), + offsetof(struct ServedCell_ExtIEs, _asn_ctx), + asn_MAP_ServedCell_ExtIEs_tag2el_765, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCell_ExtIEs = { + "ServedCell-ExtIEs", + "ServedCell-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedCell_ExtIEs_tags_765, + sizeof(asn_DEF_ServedCell_ExtIEs_tags_765) + /sizeof(asn_DEF_ServedCell_ExtIEs_tags_765[0]), /* 1 */ + asn_DEF_ServedCell_ExtIEs_tags_765, /* Same as above */ + sizeof(asn_DEF_ServedCell_ExtIEs_tags_765) + /sizeof(asn_DEF_ServedCell_ExtIEs_tags_765[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCell_ExtIEs_765, + 3, /* Elements count */ + &asn_SPC_ServedCell_ExtIEs_specs_765 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_772[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.Number_of_Antennaports), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Number_of_Antennaports, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Number-of-Antennaports" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.PRACH_Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PRACH_Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PRACH-Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.MBSFN_Subframe_Infolist), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_Subframe_Infolist, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MBSFN-Subframe-Infolist" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.CSG_Id), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_CSG_Id, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CSG-Id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.MBMS_Service_Area_Identity_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBMS_Service_Area_Identity_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MBMS-Service-Area-Identity-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.MultibandInfoList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MultibandInfoList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MultibandInfoList" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.FreqBandIndicatorPriority), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_FreqBandIndicatorPriority, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "FreqBandIndicatorPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.BandwidthReducedSI), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_BandwidthReducedSI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "BandwidthReducedSI" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs__extensionValue, choice.ProtectedEUTRAResourceIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtectedEUTRAResourceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ProtectedEUTRAResourceIndication" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_772[] = { 3, 0, 6, 7, 1, 2, 4, 5, 8 }; +static const unsigned asn_MAP_extensionValue_from_canonical_772[] = { 1, 4, 5, 0, 6, 7, 2, 3, 8 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_772[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 0 }, /* CSG-Id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 2 }, /* Number-of-Antennaports */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 1 }, /* FreqBandIndicatorPriority */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, -2, 0 }, /* BandwidthReducedSI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 4 }, /* PRACH-Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 3 }, /* MBSFN-Subframe-Infolist */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 2 }, /* MBMS-Service-Area-Identity-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 1 }, /* MultibandInfoList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -4, 0 } /* ProtectedEUTRAResourceIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_772 = { + sizeof(struct ServedCell_Information_ExtIEs__extensionValue), + offsetof(struct ServedCell_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ServedCell_Information_ExtIEs__extensionValue, present), + sizeof(((struct ServedCell_Information_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_772, + 9, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_772, + asn_MAP_extensionValue_from_canonical_772, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_772 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_772, + 9, /* Elements count */ + &asn_SPC_extensionValue_specs_772 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedCell_Information_ExtIEs_769[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_770, memb_id_constraint_769 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_ServedCell_Information_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_771, memb_criticality_constraint_769 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_772, + select_ServedCell_Information_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_772, memb_extensionValue_constraint_769 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCell_Information_ExtIEs_tags_769[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCell_Information_ExtIEs_tag2el_769[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCell_Information_ExtIEs_specs_769 = { + sizeof(struct ServedCell_Information_ExtIEs), + offsetof(struct ServedCell_Information_ExtIEs, _asn_ctx), + asn_MAP_ServedCell_Information_ExtIEs_tag2el_769, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCell_Information_ExtIEs = { + "ServedCell-Information-ExtIEs", + "ServedCell-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ServedCell_Information_ExtIEs_tags_769, + sizeof(asn_DEF_ServedCell_Information_ExtIEs_tags_769) + /sizeof(asn_DEF_ServedCell_Information_ExtIEs_tags_769[0]), /* 1 */ + asn_DEF_ServedCell_Information_ExtIEs_tags_769, /* Same as above */ + sizeof(asn_DEF_ServedCell_Information_ExtIEs_tags_769) + /sizeof(asn_DEF_ServedCell_Information_ExtIEs_tags_769[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCell_Information_ExtIEs_769, + 3, /* Elements count */ + &asn_SPC_ServedCell_Information_ExtIEs_specs_769 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_776[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformationExtIEs__extensionValue, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformationExtIEs__extensionValue, choice.SgNBCoordinationAssistanceInformation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SgNBCoordinationAssistanceInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBCoordinationAssistanceInformation" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_776[] = { 1, 0 }; +static const unsigned asn_MAP_extensionValue_from_canonical_776[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_776[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* SgNBCoordinationAssistanceInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ECGI */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_776 = { + sizeof(struct SgNBResourceCoordinationInformationExtIEs__extensionValue), + offsetof(struct SgNBResourceCoordinationInformationExtIEs__extensionValue, _asn_ctx), + offsetof(struct SgNBResourceCoordinationInformationExtIEs__extensionValue, present), + sizeof(((struct SgNBResourceCoordinationInformationExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_776, + 2, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_776, + asn_MAP_extensionValue_from_canonical_776, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_776 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_776, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_776 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBResourceCoordinationInformationExtIEs_773[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformationExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_774, memb_id_constraint_773 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformationExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_SgNBResourceCoordinationInformationExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_775, memb_criticality_constraint_773 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformationExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_776, + select_SgNBResourceCoordinationInformationExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_776, memb_extensionValue_constraint_773 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBResourceCoordinationInformationExtIEs_tag2el_773[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBResourceCoordinationInformationExtIEs_specs_773 = { + sizeof(struct SgNBResourceCoordinationInformationExtIEs), + offsetof(struct SgNBResourceCoordinationInformationExtIEs, _asn_ctx), + asn_MAP_SgNBResourceCoordinationInformationExtIEs_tag2el_773, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBResourceCoordinationInformationExtIEs = { + "SgNBResourceCoordinationInformationExtIEs", + "SgNBResourceCoordinationInformationExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773, + sizeof(asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773) + /sizeof(asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773[0]), /* 1 */ + asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773, /* Same as above */ + sizeof(asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773) + /sizeof(asn_DEF_SgNBResourceCoordinationInformationExtIEs_tags_773[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBResourceCoordinationInformationExtIEs_773, + 3, /* Elements count */ + &asn_SPC_SgNBResourceCoordinationInformationExtIEs_specs_773 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_780 = { + sizeof(struct SpecialSubframe_Info_ExtIEs__extensionValue), + offsetof(struct SpecialSubframe_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SpecialSubframe_Info_ExtIEs__extensionValue, present), + sizeof(((struct SpecialSubframe_Info_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_780 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_780 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SpecialSubframe_Info_ExtIEs_777[] = { + { ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_778, memb_id_constraint_777 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_779, memb_criticality_constraint_777 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_780, + 0, + { 0, &asn_PER_memb_extensionValue_constr_780, memb_extensionValue_constraint_777 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SpecialSubframe_Info_ExtIEs_tag2el_777[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SpecialSubframe_Info_ExtIEs_specs_777 = { + sizeof(struct SpecialSubframe_Info_ExtIEs), + offsetof(struct SpecialSubframe_Info_ExtIEs, _asn_ctx), + asn_MAP_SpecialSubframe_Info_ExtIEs_tag2el_777, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SpecialSubframe_Info_ExtIEs = { + "SpecialSubframe-Info-ExtIEs", + "SpecialSubframe-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777, + sizeof(asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777) + /sizeof(asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777[0]), /* 1 */ + asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777, /* Same as above */ + sizeof(asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777) + /sizeof(asn_DEF_SpecialSubframe_Info_ExtIEs_tags_777[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SpecialSubframe_Info_ExtIEs_777, + 3, /* Elements count */ + &asn_SPC_SpecialSubframe_Info_ExtIEs_specs_777 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_784 = { + sizeof(struct SubbandCQI_ExtIEs__extensionValue), + offsetof(struct SubbandCQI_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SubbandCQI_ExtIEs__extensionValue, present), + sizeof(((struct SubbandCQI_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_784 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_784 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SubbandCQI_ExtIEs_781[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQI_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_782, memb_id_constraint_781 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQI_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_783, memb_criticality_constraint_781 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SubbandCQI_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_784, + 0, + { 0, &asn_PER_memb_extensionValue_constr_784, memb_extensionValue_constraint_781 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SubbandCQI_ExtIEs_tags_781[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQI_ExtIEs_tag2el_781[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SubbandCQI_ExtIEs_specs_781 = { + sizeof(struct SubbandCQI_ExtIEs), + offsetof(struct SubbandCQI_ExtIEs, _asn_ctx), + asn_MAP_SubbandCQI_ExtIEs_tag2el_781, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQI_ExtIEs = { + "SubbandCQI-ExtIEs", + "SubbandCQI-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SubbandCQI_ExtIEs_tags_781, + sizeof(asn_DEF_SubbandCQI_ExtIEs_tags_781) + /sizeof(asn_DEF_SubbandCQI_ExtIEs_tags_781[0]), /* 1 */ + asn_DEF_SubbandCQI_ExtIEs_tags_781, /* Same as above */ + sizeof(asn_DEF_SubbandCQI_ExtIEs_tags_781) + /sizeof(asn_DEF_SubbandCQI_ExtIEs_tags_781[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SubbandCQI_ExtIEs_781, + 3, /* Elements count */ + &asn_SPC_SubbandCQI_ExtIEs_specs_781 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_788 = { + sizeof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue), + offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue, present), + sizeof(((struct Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_788 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_788 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785[] = { + { ATF_NOFLAGS, 0, offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_786, memb_id_constraint_785 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_787, memb_criticality_constraint_785 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_788, + 0, + { 0, &asn_PER_memb_extensionValue_constr_788, memb_extensionValue_constraint_785 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tag2el_785[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785 = { + sizeof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs), + offsetof(struct Subscription_Based_UE_DifferentiationInfo_ExtIEs, _asn_ctx), + asn_MAP_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tag2el_785, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs = { + "Subscription-Based-UE-DifferentiationInfo-ExtIEs", + "Subscription-Based-UE-DifferentiationInfo-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785, + sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785) + /sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[0]), /* 1 */ + asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785, /* Same as above */ + sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785) + /sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785, + 3, /* Elements count */ + &asn_SPC_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_792 = { + sizeof(struct ScheduledCommunicationTime_ExtIEs__extensionValue), + offsetof(struct ScheduledCommunicationTime_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ScheduledCommunicationTime_ExtIEs__extensionValue, present), + sizeof(((struct ScheduledCommunicationTime_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_792 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_792 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ScheduledCommunicationTime_ExtIEs_789[] = { + { ATF_NOFLAGS, 0, offsetof(struct ScheduledCommunicationTime_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_790, memb_id_constraint_789 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ScheduledCommunicationTime_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_791, memb_criticality_constraint_789 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ScheduledCommunicationTime_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_792, + 0, + { 0, &asn_PER_memb_extensionValue_constr_792, memb_extensionValue_constraint_789 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ScheduledCommunicationTime_ExtIEs_tag2el_789[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ScheduledCommunicationTime_ExtIEs_specs_789 = { + sizeof(struct ScheduledCommunicationTime_ExtIEs), + offsetof(struct ScheduledCommunicationTime_ExtIEs, _asn_ctx), + asn_MAP_ScheduledCommunicationTime_ExtIEs_tag2el_789, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ScheduledCommunicationTime_ExtIEs = { + "ScheduledCommunicationTime-ExtIEs", + "ScheduledCommunicationTime-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789, + sizeof(asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789) + /sizeof(asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789[0]), /* 1 */ + asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789, /* Same as above */ + sizeof(asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789) + /sizeof(asn_DEF_ScheduledCommunicationTime_ExtIEs_tags_789[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ScheduledCommunicationTime_ExtIEs_789, + 3, /* Elements count */ + &asn_SPC_ScheduledCommunicationTime_ExtIEs_specs_789 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_796 = { + sizeof(struct SubbandCQIItem_ExtIEs__extensionValue), + offsetof(struct SubbandCQIItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SubbandCQIItem_ExtIEs__extensionValue, present), + sizeof(((struct SubbandCQIItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_796 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_796 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SubbandCQIItem_ExtIEs_793[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQIItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_794, memb_id_constraint_793 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQIItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_795, memb_criticality_constraint_793 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SubbandCQIItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_796, + 0, + { 0, &asn_PER_memb_extensionValue_constr_796, memb_extensionValue_constraint_793 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SubbandCQIItem_ExtIEs_tags_793[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQIItem_ExtIEs_tag2el_793[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SubbandCQIItem_ExtIEs_specs_793 = { + sizeof(struct SubbandCQIItem_ExtIEs), + offsetof(struct SubbandCQIItem_ExtIEs, _asn_ctx), + asn_MAP_SubbandCQIItem_ExtIEs_tag2el_793, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQIItem_ExtIEs = { + "SubbandCQIItem-ExtIEs", + "SubbandCQIItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SubbandCQIItem_ExtIEs_tags_793, + sizeof(asn_DEF_SubbandCQIItem_ExtIEs_tags_793) + /sizeof(asn_DEF_SubbandCQIItem_ExtIEs_tags_793[0]), /* 1 */ + asn_DEF_SubbandCQIItem_ExtIEs_tags_793, /* Same as above */ + sizeof(asn_DEF_SubbandCQIItem_ExtIEs_tags_793) + /sizeof(asn_DEF_SubbandCQIItem_ExtIEs_tags_793[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SubbandCQIItem_ExtIEs_793, + 3, /* Elements count */ + &asn_SPC_SubbandCQIItem_ExtIEs_specs_793 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_800 = { + sizeof(struct SULInformation_ExtIEs__extensionValue), + offsetof(struct SULInformation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SULInformation_ExtIEs__extensionValue, present), + sizeof(((struct SULInformation_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_800 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_800 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SULInformation_ExtIEs_797[] = { + { ATF_NOFLAGS, 0, offsetof(struct SULInformation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_798, memb_id_constraint_797 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SULInformation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_799, memb_criticality_constraint_797 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SULInformation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_800, + 0, + { 0, &asn_PER_memb_extensionValue_constr_800, memb_extensionValue_constraint_797 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SULInformation_ExtIEs_tags_797[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SULInformation_ExtIEs_tag2el_797[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SULInformation_ExtIEs_specs_797 = { + sizeof(struct SULInformation_ExtIEs), + offsetof(struct SULInformation_ExtIEs, _asn_ctx), + asn_MAP_SULInformation_ExtIEs_tag2el_797, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SULInformation_ExtIEs = { + "SULInformation-ExtIEs", + "SULInformation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SULInformation_ExtIEs_tags_797, + sizeof(asn_DEF_SULInformation_ExtIEs_tags_797) + /sizeof(asn_DEF_SULInformation_ExtIEs_tags_797[0]), /* 1 */ + asn_DEF_SULInformation_ExtIEs_tags_797, /* Same as above */ + sizeof(asn_DEF_SULInformation_ExtIEs_tags_797) + /sizeof(asn_DEF_SULInformation_ExtIEs_tags_797[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SULInformation_ExtIEs_797, + 3, /* Elements count */ + &asn_SPC_SULInformation_ExtIEs_specs_797 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_804 = { + sizeof(struct SupportedSULFreqBandItem_ExtIEs__extensionValue), + offsetof(struct SupportedSULFreqBandItem_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct SupportedSULFreqBandItem_ExtIEs__extensionValue, present), + sizeof(((struct SupportedSULFreqBandItem_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_804 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_804 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_ExtIEs_801[] = { + { ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_802, memb_id_constraint_801 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_803, memb_criticality_constraint_801 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_804, + 0, + { 0, &asn_PER_memb_extensionValue_constr_804, memb_extensionValue_constraint_801 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SupportedSULFreqBandItem_ExtIEs_tag2el_801[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_ExtIEs_specs_801 = { + sizeof(struct SupportedSULFreqBandItem_ExtIEs), + offsetof(struct SupportedSULFreqBandItem_ExtIEs, _asn_ctx), + asn_MAP_SupportedSULFreqBandItem_ExtIEs_tag2el_801, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem_ExtIEs = { + "SupportedSULFreqBandItem-ExtIEs", + "SupportedSULFreqBandItem-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801, + sizeof(asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801) + /sizeof(asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801[0]), /* 1 */ + asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801, /* Same as above */ + sizeof(asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801) + /sizeof(asn_DEF_SupportedSULFreqBandItem_ExtIEs_tags_801[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SupportedSULFreqBandItem_ExtIEs_801, + 3, /* Elements count */ + &asn_SPC_SupportedSULFreqBandItem_ExtIEs_specs_801 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_808 = { + sizeof(struct TABasedMDT_ExtIEs__extensionValue), + offsetof(struct TABasedMDT_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TABasedMDT_ExtIEs__extensionValue, present), + sizeof(((struct TABasedMDT_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_808 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_808 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TABasedMDT_ExtIEs_805[] = { + { ATF_NOFLAGS, 0, offsetof(struct TABasedMDT_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_806, memb_id_constraint_805 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TABasedMDT_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_807, memb_criticality_constraint_805 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TABasedMDT_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_808, + 0, + { 0, &asn_PER_memb_extensionValue_constr_808, memb_extensionValue_constraint_805 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TABasedMDT_ExtIEs_tags_805[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TABasedMDT_ExtIEs_tag2el_805[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TABasedMDT_ExtIEs_specs_805 = { + sizeof(struct TABasedMDT_ExtIEs), + offsetof(struct TABasedMDT_ExtIEs, _asn_ctx), + asn_MAP_TABasedMDT_ExtIEs_tag2el_805, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TABasedMDT_ExtIEs = { + "TABasedMDT-ExtIEs", + "TABasedMDT-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TABasedMDT_ExtIEs_tags_805, + sizeof(asn_DEF_TABasedMDT_ExtIEs_tags_805) + /sizeof(asn_DEF_TABasedMDT_ExtIEs_tags_805[0]), /* 1 */ + asn_DEF_TABasedMDT_ExtIEs_tags_805, /* Same as above */ + sizeof(asn_DEF_TABasedMDT_ExtIEs_tags_805) + /sizeof(asn_DEF_TABasedMDT_ExtIEs_tags_805[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TABasedMDT_ExtIEs_805, + 3, /* Elements count */ + &asn_SPC_TABasedMDT_ExtIEs_specs_805 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_812 = { + sizeof(struct TAIBasedMDT_ExtIEs__extensionValue), + offsetof(struct TAIBasedMDT_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TAIBasedMDT_ExtIEs__extensionValue, present), + sizeof(((struct TAIBasedMDT_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_812 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_812 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TAIBasedMDT_ExtIEs_809[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedMDT_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_810, memb_id_constraint_809 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedMDT_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_811, memb_criticality_constraint_809 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TAIBasedMDT_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_812, + 0, + { 0, &asn_PER_memb_extensionValue_constr_812, memb_extensionValue_constraint_809 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAIBasedMDT_ExtIEs_tags_809[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAIBasedMDT_ExtIEs_tag2el_809[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAIBasedMDT_ExtIEs_specs_809 = { + sizeof(struct TAIBasedMDT_ExtIEs), + offsetof(struct TAIBasedMDT_ExtIEs, _asn_ctx), + asn_MAP_TAIBasedMDT_ExtIEs_tag2el_809, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIBasedMDT_ExtIEs = { + "TAIBasedMDT-ExtIEs", + "TAIBasedMDT-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TAIBasedMDT_ExtIEs_tags_809, + sizeof(asn_DEF_TAIBasedMDT_ExtIEs_tags_809) + /sizeof(asn_DEF_TAIBasedMDT_ExtIEs_tags_809[0]), /* 1 */ + asn_DEF_TAIBasedMDT_ExtIEs_tags_809, /* Same as above */ + sizeof(asn_DEF_TAIBasedMDT_ExtIEs_tags_809) + /sizeof(asn_DEF_TAIBasedMDT_ExtIEs_tags_809[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAIBasedMDT_ExtIEs_809, + 3, /* Elements count */ + &asn_SPC_TAIBasedMDT_ExtIEs_specs_809 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_816 = { + sizeof(struct TAI_Item_ExtIEs__extensionValue), + offsetof(struct TAI_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TAI_Item_ExtIEs__extensionValue, present), + sizeof(((struct TAI_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_816 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_816 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TAI_Item_ExtIEs_813[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAI_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_814, memb_id_constraint_813 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TAI_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_815, memb_criticality_constraint_813 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TAI_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_816, + 0, + { 0, &asn_PER_memb_extensionValue_constr_816, memb_extensionValue_constraint_813 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAI_Item_ExtIEs_tags_813[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAI_Item_ExtIEs_tag2el_813[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAI_Item_ExtIEs_specs_813 = { + sizeof(struct TAI_Item_ExtIEs), + offsetof(struct TAI_Item_ExtIEs, _asn_ctx), + asn_MAP_TAI_Item_ExtIEs_tag2el_813, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAI_Item_ExtIEs = { + "TAI-Item-ExtIEs", + "TAI-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TAI_Item_ExtIEs_tags_813, + sizeof(asn_DEF_TAI_Item_ExtIEs_tags_813) + /sizeof(asn_DEF_TAI_Item_ExtIEs_tags_813[0]), /* 1 */ + asn_DEF_TAI_Item_ExtIEs_tags_813, /* Same as above */ + sizeof(asn_DEF_TAI_Item_ExtIEs_tags_813) + /sizeof(asn_DEF_TAI_Item_ExtIEs_tags_813[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAI_Item_ExtIEs_813, + 3, /* Elements count */ + &asn_SPC_TAI_Item_ExtIEs_specs_813 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_820 = { + sizeof(struct TABasedQMC_ExtIEs__extensionValue), + offsetof(struct TABasedQMC_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TABasedQMC_ExtIEs__extensionValue, present), + sizeof(((struct TABasedQMC_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_820 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_820 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TABasedQMC_ExtIEs_817[] = { + { ATF_NOFLAGS, 0, offsetof(struct TABasedQMC_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_818, memb_id_constraint_817 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TABasedQMC_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_819, memb_criticality_constraint_817 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TABasedQMC_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_820, + 0, + { 0, &asn_PER_memb_extensionValue_constr_820, memb_extensionValue_constraint_817 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TABasedQMC_ExtIEs_tags_817[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TABasedQMC_ExtIEs_tag2el_817[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TABasedQMC_ExtIEs_specs_817 = { + sizeof(struct TABasedQMC_ExtIEs), + offsetof(struct TABasedQMC_ExtIEs, _asn_ctx), + asn_MAP_TABasedQMC_ExtIEs_tag2el_817, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TABasedQMC_ExtIEs = { + "TABasedQMC-ExtIEs", + "TABasedQMC-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TABasedQMC_ExtIEs_tags_817, + sizeof(asn_DEF_TABasedQMC_ExtIEs_tags_817) + /sizeof(asn_DEF_TABasedQMC_ExtIEs_tags_817[0]), /* 1 */ + asn_DEF_TABasedQMC_ExtIEs_tags_817, /* Same as above */ + sizeof(asn_DEF_TABasedQMC_ExtIEs_tags_817) + /sizeof(asn_DEF_TABasedQMC_ExtIEs_tags_817[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TABasedQMC_ExtIEs_817, + 3, /* Elements count */ + &asn_SPC_TABasedQMC_ExtIEs_specs_817 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_824 = { + sizeof(struct TAIBasedQMC_ExtIEs__extensionValue), + offsetof(struct TAIBasedQMC_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TAIBasedQMC_ExtIEs__extensionValue, present), + sizeof(((struct TAIBasedQMC_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_824 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_824 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TAIBasedQMC_ExtIEs_821[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedQMC_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_822, memb_id_constraint_821 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedQMC_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_823, memb_criticality_constraint_821 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TAIBasedQMC_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_824, + 0, + { 0, &asn_PER_memb_extensionValue_constr_824, memb_extensionValue_constraint_821 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAIBasedQMC_ExtIEs_tags_821[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAIBasedQMC_ExtIEs_tag2el_821[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAIBasedQMC_ExtIEs_specs_821 = { + sizeof(struct TAIBasedQMC_ExtIEs), + offsetof(struct TAIBasedQMC_ExtIEs, _asn_ctx), + asn_MAP_TAIBasedQMC_ExtIEs_tag2el_821, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIBasedQMC_ExtIEs = { + "TAIBasedQMC-ExtIEs", + "TAIBasedQMC-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TAIBasedQMC_ExtIEs_tags_821, + sizeof(asn_DEF_TAIBasedQMC_ExtIEs_tags_821) + /sizeof(asn_DEF_TAIBasedQMC_ExtIEs_tags_821[0]), /* 1 */ + asn_DEF_TAIBasedQMC_ExtIEs_tags_821, /* Same as above */ + sizeof(asn_DEF_TAIBasedQMC_ExtIEs_tags_821) + /sizeof(asn_DEF_TAIBasedQMC_ExtIEs_tags_821[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAIBasedQMC_ExtIEs_821, + 3, /* Elements count */ + &asn_SPC_TAIBasedQMC_ExtIEs_specs_821 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_828[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs__extensionValue, choice.AdditionalSpecialSubframe_Info), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AdditionalSpecialSubframe_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "AdditionalSpecialSubframe-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs__extensionValue, choice.EARFCNExtension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_EARFCNExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "EARFCNExtension" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs__extensionValue, choice.AdditionalSpecialSubframeExtension_Info), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AdditionalSpecialSubframeExtension_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "AdditionalSpecialSubframeExtension-Info" + }, +}; +static const unsigned asn_MAP_extensionValue_to_canonical_828[] = { 1, 0, 2 }; +static const unsigned asn_MAP_extensionValue_from_canonical_828[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_828[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* EARFCNExtension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* AdditionalSpecialSubframe-Info */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* AdditionalSpecialSubframeExtension-Info */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_828 = { + sizeof(struct TDD_Info_ExtIEs__extensionValue), + offsetof(struct TDD_Info_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TDD_Info_ExtIEs__extensionValue, present), + sizeof(((struct TDD_Info_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_828, + 3, /* Count of tags in the map */ + asn_MAP_extensionValue_to_canonical_828, + asn_MAP_extensionValue_from_canonical_828, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_828 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_828, + 3, /* Elements count */ + &asn_SPC_extensionValue_specs_828 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TDD_Info_ExtIEs_825[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_826, memb_id_constraint_825 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_TDD_Info_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_827, memb_criticality_constraint_825 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TDD_Info_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_828, + select_TDD_Info_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_828, memb_extensionValue_constraint_825 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TDD_Info_ExtIEs_tags_825[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_Info_ExtIEs_tag2el_825[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_Info_ExtIEs_specs_825 = { + sizeof(struct TDD_Info_ExtIEs), + offsetof(struct TDD_Info_ExtIEs, _asn_ctx), + asn_MAP_TDD_Info_ExtIEs_tag2el_825, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_Info_ExtIEs = { + "TDD-Info-ExtIEs", + "TDD-Info-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TDD_Info_ExtIEs_tags_825, + sizeof(asn_DEF_TDD_Info_ExtIEs_tags_825) + /sizeof(asn_DEF_TDD_Info_ExtIEs_tags_825[0]), /* 1 */ + asn_DEF_TDD_Info_ExtIEs_tags_825, /* Same as above */ + sizeof(asn_DEF_TDD_Info_ExtIEs_tags_825) + /sizeof(asn_DEF_TDD_Info_ExtIEs_tags_825[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_Info_ExtIEs_825, + 3, /* Elements count */ + &asn_SPC_TDD_Info_ExtIEs_specs_825 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_832[] = { + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation_ExtIEs__extensionValue, choice.MDT_Configuration), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MDT_Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MDT-Configuration" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation_ExtIEs__extensionValue, choice.UEAppLayerMeasConfig), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEAppLayerMeasConfig, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEAppLayerMeasConfig" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_832[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* MDT-Configuration */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* UEAppLayerMeasConfig */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_832 = { + sizeof(struct TraceActivation_ExtIEs__extensionValue), + offsetof(struct TraceActivation_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct TraceActivation_ExtIEs__extensionValue, present), + sizeof(((struct TraceActivation_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_832, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_832 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_832, + 2, /* Elements count */ + &asn_SPC_extensionValue_specs_832 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TraceActivation_ExtIEs_829[] = { + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_830, memb_id_constraint_829 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_TraceActivation_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_831, memb_criticality_constraint_829 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TraceActivation_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_832, + select_TraceActivation_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_832, memb_extensionValue_constraint_829 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TraceActivation_ExtIEs_tags_829[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TraceActivation_ExtIEs_tag2el_829[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TraceActivation_ExtIEs_specs_829 = { + sizeof(struct TraceActivation_ExtIEs), + offsetof(struct TraceActivation_ExtIEs, _asn_ctx), + asn_MAP_TraceActivation_ExtIEs_tag2el_829, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TraceActivation_ExtIEs = { + "TraceActivation-ExtIEs", + "TraceActivation-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_TraceActivation_ExtIEs_tags_829, + sizeof(asn_DEF_TraceActivation_ExtIEs_tags_829) + /sizeof(asn_DEF_TraceActivation_ExtIEs_tags_829[0]), /* 1 */ + asn_DEF_TraceActivation_ExtIEs_tags_829, /* Same as above */ + sizeof(asn_DEF_TraceActivation_ExtIEs_tags_829) + /sizeof(asn_DEF_TraceActivation_ExtIEs_tags_829[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TraceActivation_ExtIEs_829, + 3, /* Elements count */ + &asn_SPC_TraceActivation_ExtIEs_specs_829 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_836 = { + sizeof(struct Tunnel_Information_ExtIEs__extensionValue), + offsetof(struct Tunnel_Information_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct Tunnel_Information_ExtIEs__extensionValue, present), + sizeof(((struct Tunnel_Information_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_836 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_836 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Tunnel_Information_ExtIEs_833[] = { + { ATF_NOFLAGS, 0, offsetof(struct Tunnel_Information_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_834, memb_id_constraint_833 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct Tunnel_Information_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_835, memb_criticality_constraint_833 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Tunnel_Information_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_836, + 0, + { 0, &asn_PER_memb_extensionValue_constr_836, memb_extensionValue_constraint_833 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_Tunnel_Information_ExtIEs_tags_833[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Tunnel_Information_ExtIEs_tag2el_833[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Tunnel_Information_ExtIEs_specs_833 = { + sizeof(struct Tunnel_Information_ExtIEs), + offsetof(struct Tunnel_Information_ExtIEs, _asn_ctx), + asn_MAP_Tunnel_Information_ExtIEs_tag2el_833, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Tunnel_Information_ExtIEs = { + "Tunnel-Information-ExtIEs", + "Tunnel-Information-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_Tunnel_Information_ExtIEs_tags_833, + sizeof(asn_DEF_Tunnel_Information_ExtIEs_tags_833) + /sizeof(asn_DEF_Tunnel_Information_ExtIEs_tags_833[0]), /* 1 */ + asn_DEF_Tunnel_Information_ExtIEs_tags_833, /* Same as above */ + sizeof(asn_DEF_Tunnel_Information_ExtIEs_tags_833) + /sizeof(asn_DEF_Tunnel_Information_ExtIEs_tags_833[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Tunnel_Information_ExtIEs_833, + 3, /* Elements count */ + &asn_SPC_Tunnel_Information_ExtIEs_specs_833 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_840[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue, choice.ExtendedBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ExtendedBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExtendedBitRate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_840[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ExtendedBitRate */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_840 = { + sizeof(struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue), + offsetof(struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue, present), + sizeof(((struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_840, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_840 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_840, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_840 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UEAggregate_MaximumBitrate_ExtIEs_837[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_838, memb_id_constraint_837 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_UEAggregate_MaximumBitrate_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_839, memb_criticality_constraint_837 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_840, + select_UEAggregate_MaximumBitrate_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_840, memb_extensionValue_constraint_837 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEAggregate_MaximumBitrate_ExtIEs_tag2el_837[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEAggregate_MaximumBitrate_ExtIEs_specs_837 = { + sizeof(struct UEAggregate_MaximumBitrate_ExtIEs), + offsetof(struct UEAggregate_MaximumBitrate_ExtIEs, _asn_ctx), + asn_MAP_UEAggregate_MaximumBitrate_ExtIEs_tag2el_837, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEAggregate_MaximumBitrate_ExtIEs = { + "UEAggregate-MaximumBitrate-ExtIEs", + "UEAggregate-MaximumBitrate-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837, + sizeof(asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837) + /sizeof(asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837[0]), /* 1 */ + asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837, /* Same as above */ + sizeof(asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837) + /sizeof(asn_DEF_UEAggregate_MaximumBitrate_ExtIEs_tags_837[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEAggregate_MaximumBitrate_ExtIEs_837, + 3, /* Elements count */ + &asn_SPC_UEAggregate_MaximumBitrate_ExtIEs_specs_837 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_extensionValue_844[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig_ExtIEs__extensionValue, choice.ServiceType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ServiceType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServiceType" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_extensionValue_tag2el_844[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* ServiceType */ +}; +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_844 = { + sizeof(struct UEAppLayerMeasConfig_ExtIEs__extensionValue), + offsetof(struct UEAppLayerMeasConfig_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UEAppLayerMeasConfig_ExtIEs__extensionValue, present), + sizeof(((struct UEAppLayerMeasConfig_ExtIEs__extensionValue *)0)->present), + asn_MAP_extensionValue_tag2el_844, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_844 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_extensionValue_844, + 1, /* Elements count */ + &asn_SPC_extensionValue_specs_844 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UEAppLayerMeasConfig_ExtIEs_841[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_842, memb_id_constraint_841 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_UEAppLayerMeasConfig_ExtIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_843, memb_criticality_constraint_841 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_844, + select_UEAppLayerMeasConfig_ExtIEs_extensionValue_type, + { 0, &asn_PER_memb_extensionValue_constr_844, memb_extensionValue_constraint_841 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEAppLayerMeasConfig_ExtIEs_tag2el_841[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEAppLayerMeasConfig_ExtIEs_specs_841 = { + sizeof(struct UEAppLayerMeasConfig_ExtIEs), + offsetof(struct UEAppLayerMeasConfig_ExtIEs, _asn_ctx), + asn_MAP_UEAppLayerMeasConfig_ExtIEs_tag2el_841, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEAppLayerMeasConfig_ExtIEs = { + "UEAppLayerMeasConfig-ExtIEs", + "UEAppLayerMeasConfig-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841, + sizeof(asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841) + /sizeof(asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841[0]), /* 1 */ + asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841, /* Same as above */ + sizeof(asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841) + /sizeof(asn_DEF_UEAppLayerMeasConfig_ExtIEs_tags_841[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEAppLayerMeasConfig_ExtIEs_841, + 3, /* Elements count */ + &asn_SPC_UEAppLayerMeasConfig_ExtIEs_specs_841 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_848 = { + sizeof(struct UESecurityCapabilities_ExtIEs__extensionValue), + offsetof(struct UESecurityCapabilities_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UESecurityCapabilities_ExtIEs__extensionValue, present), + sizeof(((struct UESecurityCapabilities_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_848 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_848 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UESecurityCapabilities_ExtIEs_845[] = { + { ATF_NOFLAGS, 0, offsetof(struct UESecurityCapabilities_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_846, memb_id_constraint_845 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UESecurityCapabilities_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_847, memb_criticality_constraint_845 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UESecurityCapabilities_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_848, + 0, + { 0, &asn_PER_memb_extensionValue_constr_848, memb_extensionValue_constraint_845 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UESecurityCapabilities_ExtIEs_tags_845[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UESecurityCapabilities_ExtIEs_tag2el_845[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UESecurityCapabilities_ExtIEs_specs_845 = { + sizeof(struct UESecurityCapabilities_ExtIEs), + offsetof(struct UESecurityCapabilities_ExtIEs, _asn_ctx), + asn_MAP_UESecurityCapabilities_ExtIEs_tag2el_845, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UESecurityCapabilities_ExtIEs = { + "UESecurityCapabilities-ExtIEs", + "UESecurityCapabilities-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UESecurityCapabilities_ExtIEs_tags_845, + sizeof(asn_DEF_UESecurityCapabilities_ExtIEs_tags_845) + /sizeof(asn_DEF_UESecurityCapabilities_ExtIEs_tags_845[0]), /* 1 */ + asn_DEF_UESecurityCapabilities_ExtIEs_tags_845, /* Same as above */ + sizeof(asn_DEF_UESecurityCapabilities_ExtIEs_tags_845) + /sizeof(asn_DEF_UESecurityCapabilities_ExtIEs_tags_845[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UESecurityCapabilities_ExtIEs_845, + 3, /* Elements count */ + &asn_SPC_UESecurityCapabilities_ExtIEs_specs_845 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_852 = { + sizeof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue), + offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue, present), + sizeof(((struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_852 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_852 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_850, memb_id_constraint_849 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_851, memb_criticality_constraint_849 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_852, + 0, + { 0, &asn_PER_memb_extensionValue_constr_852, memb_extensionValue_constraint_849 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tag2el_849[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849 = { + sizeof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs), + offsetof(struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, _asn_ctx), + asn_MAP_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tag2el_849, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs = { + "UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs", + "UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849, + sizeof(asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849) + /sizeof(asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[0]), /* 1 */ + asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849, /* Same as above */ + sizeof(asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849) + /sizeof(asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849, + 3, /* Elements count */ + &asn_SPC_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_856 = { + sizeof(struct UEsToBeResetList_Item_ExtIEs__extensionValue), + offsetof(struct UEsToBeResetList_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UEsToBeResetList_Item_ExtIEs__extensionValue, present), + sizeof(((struct UEsToBeResetList_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_856 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_856 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UEsToBeResetList_Item_ExtIEs_853[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEsToBeResetList_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_854, memb_id_constraint_853 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEsToBeResetList_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_855, memb_criticality_constraint_853 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UEsToBeResetList_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_856, + 0, + { 0, &asn_PER_memb_extensionValue_constr_856, memb_extensionValue_constraint_853 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEsToBeResetList_Item_ExtIEs_tag2el_853[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEsToBeResetList_Item_ExtIEs_specs_853 = { + sizeof(struct UEsToBeResetList_Item_ExtIEs), + offsetof(struct UEsToBeResetList_Item_ExtIEs, _asn_ctx), + asn_MAP_UEsToBeResetList_Item_ExtIEs_tag2el_853, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList_Item_ExtIEs = { + "UEsToBeResetList-Item-ExtIEs", + "UEsToBeResetList-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853, + sizeof(asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853) + /sizeof(asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853[0]), /* 1 */ + asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853, /* Same as above */ + sizeof(asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853) + /sizeof(asn_DEF_UEsToBeResetList_Item_ExtIEs_tags_853[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEsToBeResetList_Item_ExtIEs_853, + 3, /* Elements count */ + &asn_SPC_UEsToBeResetList_Item_ExtIEs_specs_853 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_860 = { + sizeof(struct ULandDLSharing_ExtIEs__extensionValue), + offsetof(struct ULandDLSharing_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ULandDLSharing_ExtIEs__extensionValue, present), + sizeof(((struct ULandDLSharing_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_860 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_860 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ULandDLSharing_ExtIEs_857[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULandDLSharing_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_858, memb_id_constraint_857 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULandDLSharing_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_859, memb_criticality_constraint_857 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ULandDLSharing_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_860, + 0, + { 0, &asn_PER_memb_extensionValue_constr_860, memb_extensionValue_constraint_857 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ULandDLSharing_ExtIEs_tags_857[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULandDLSharing_ExtIEs_tag2el_857[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULandDLSharing_ExtIEs_specs_857 = { + sizeof(struct ULandDLSharing_ExtIEs), + offsetof(struct ULandDLSharing_ExtIEs, _asn_ctx), + asn_MAP_ULandDLSharing_ExtIEs_tag2el_857, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULandDLSharing_ExtIEs = { + "ULandDLSharing-ExtIEs", + "ULandDLSharing-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ULandDLSharing_ExtIEs_tags_857, + sizeof(asn_DEF_ULandDLSharing_ExtIEs_tags_857) + /sizeof(asn_DEF_ULandDLSharing_ExtIEs_tags_857[0]), /* 1 */ + asn_DEF_ULandDLSharing_ExtIEs_tags_857, /* Same as above */ + sizeof(asn_DEF_ULandDLSharing_ExtIEs_tags_857) + /sizeof(asn_DEF_ULandDLSharing_ExtIEs_tags_857[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULandDLSharing_ExtIEs_857, + 3, /* Elements count */ + &asn_SPC_ULandDLSharing_ExtIEs_specs_857 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_864 = { + sizeof(struct ULConfiguration_ExtIEs__extensionValue), + offsetof(struct ULConfiguration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ULConfiguration_ExtIEs__extensionValue, present), + sizeof(((struct ULConfiguration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_864 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_864 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ULConfiguration_ExtIEs_861[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULConfiguration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_862, memb_id_constraint_861 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULConfiguration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_863, memb_criticality_constraint_861 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ULConfiguration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_864, + 0, + { 0, &asn_PER_memb_extensionValue_constr_864, memb_extensionValue_constraint_861 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ULConfiguration_ExtIEs_tags_861[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULConfiguration_ExtIEs_tag2el_861[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULConfiguration_ExtIEs_specs_861 = { + sizeof(struct ULConfiguration_ExtIEs), + offsetof(struct ULConfiguration_ExtIEs, _asn_ctx), + asn_MAP_ULConfiguration_ExtIEs_tag2el_861, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULConfiguration_ExtIEs = { + "ULConfiguration-ExtIEs", + "ULConfiguration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ULConfiguration_ExtIEs_tags_861, + sizeof(asn_DEF_ULConfiguration_ExtIEs_tags_861) + /sizeof(asn_DEF_ULConfiguration_ExtIEs_tags_861[0]), /* 1 */ + asn_DEF_ULConfiguration_ExtIEs_tags_861, /* Same as above */ + sizeof(asn_DEF_ULConfiguration_ExtIEs_tags_861) + /sizeof(asn_DEF_ULConfiguration_ExtIEs_tags_861[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULConfiguration_ExtIEs_861, + 3, /* Elements count */ + &asn_SPC_ULConfiguration_ExtIEs_specs_861 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_868 = { + sizeof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue), + offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue, present), + sizeof(((struct UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_868 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_868 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_866, memb_id_constraint_865 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_867, memb_criticality_constraint_865 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_868, + 0, + { 0, &asn_PER_memb_extensionValue_constr_868, memb_extensionValue_constraint_865 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tag2el_865[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865 = { + sizeof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs), + offsetof(struct UL_HighInterferenceIndicationInfo_Item_ExtIEs, _asn_ctx), + asn_MAP_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tag2el_865, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs = { + "UL-HighInterferenceIndicationInfo-Item-ExtIEs", + "UL-HighInterferenceIndicationInfo-Item-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865, + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[0]), /* 1 */ + asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865, /* Same as above */ + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865, + 3, /* Elements count */ + &asn_SPC_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_872 = { + sizeof(struct ULOnlySharing_ExtIEs__extensionValue), + offsetof(struct ULOnlySharing_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct ULOnlySharing_ExtIEs__extensionValue, present), + sizeof(((struct ULOnlySharing_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_872 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_872 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ULOnlySharing_ExtIEs_869[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULOnlySharing_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_870, memb_id_constraint_869 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULOnlySharing_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_871, memb_criticality_constraint_869 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ULOnlySharing_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_872, + 0, + { 0, &asn_PER_memb_extensionValue_constr_872, memb_extensionValue_constraint_869 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_ULOnlySharing_ExtIEs_tags_869[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULOnlySharing_ExtIEs_tag2el_869[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULOnlySharing_ExtIEs_specs_869 = { + sizeof(struct ULOnlySharing_ExtIEs), + offsetof(struct ULOnlySharing_ExtIEs, _asn_ctx), + asn_MAP_ULOnlySharing_ExtIEs_tag2el_869, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULOnlySharing_ExtIEs = { + "ULOnlySharing-ExtIEs", + "ULOnlySharing-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_ULOnlySharing_ExtIEs_tags_869, + sizeof(asn_DEF_ULOnlySharing_ExtIEs_tags_869) + /sizeof(asn_DEF_ULOnlySharing_ExtIEs_tags_869[0]), /* 1 */ + asn_DEF_ULOnlySharing_ExtIEs_tags_869, /* Same as above */ + sizeof(asn_DEF_ULOnlySharing_ExtIEs_tags_869) + /sizeof(asn_DEF_ULOnlySharing_ExtIEs_tags_869[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULOnlySharing_ExtIEs_869, + 3, /* Elements count */ + &asn_SPC_ULOnlySharing_ExtIEs_specs_869 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_876 = { + sizeof(struct UsableABSInformationFDD_ExtIEs__extensionValue), + offsetof(struct UsableABSInformationFDD_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UsableABSInformationFDD_ExtIEs__extensionValue, present), + sizeof(((struct UsableABSInformationFDD_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_876 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_876 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UsableABSInformationFDD_ExtIEs_873[] = { + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationFDD_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_874, memb_id_constraint_873 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationFDD_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_875, memb_criticality_constraint_873 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationFDD_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_876, + 0, + { 0, &asn_PER_memb_extensionValue_constr_876, memb_extensionValue_constraint_873 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UsableABSInformationFDD_ExtIEs_tag2el_873[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationFDD_ExtIEs_specs_873 = { + sizeof(struct UsableABSInformationFDD_ExtIEs), + offsetof(struct UsableABSInformationFDD_ExtIEs, _asn_ctx), + asn_MAP_UsableABSInformationFDD_ExtIEs_tag2el_873, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UsableABSInformationFDD_ExtIEs = { + "UsableABSInformationFDD-ExtIEs", + "UsableABSInformationFDD-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873, + sizeof(asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873) + /sizeof(asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873[0]), /* 1 */ + asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873, /* Same as above */ + sizeof(asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873) + /sizeof(asn_DEF_UsableABSInformationFDD_ExtIEs_tags_873[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UsableABSInformationFDD_ExtIEs_873, + 3, /* Elements count */ + &asn_SPC_UsableABSInformationFDD_ExtIEs_specs_873 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_880 = { + sizeof(struct UsableABSInformationTDD_ExtIEs__extensionValue), + offsetof(struct UsableABSInformationTDD_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct UsableABSInformationTDD_ExtIEs__extensionValue, present), + sizeof(((struct UsableABSInformationTDD_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_880 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_880 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UsableABSInformationTDD_ExtIEs_877[] = { + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationTDD_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_878, memb_id_constraint_877 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationTDD_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_879, memb_criticality_constraint_877 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationTDD_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_880, + 0, + { 0, &asn_PER_memb_extensionValue_constr_880, memb_extensionValue_constraint_877 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UsableABSInformationTDD_ExtIEs_tag2el_877[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationTDD_ExtIEs_specs_877 = { + sizeof(struct UsableABSInformationTDD_ExtIEs), + offsetof(struct UsableABSInformationTDD_ExtIEs, _asn_ctx), + asn_MAP_UsableABSInformationTDD_ExtIEs_tag2el_877, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UsableABSInformationTDD_ExtIEs = { + "UsableABSInformationTDD-ExtIEs", + "UsableABSInformationTDD-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877, + sizeof(asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877) + /sizeof(asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877[0]), /* 1 */ + asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877, /* Same as above */ + sizeof(asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877) + /sizeof(asn_DEF_UsableABSInformationTDD_ExtIEs_tags_877[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UsableABSInformationTDD_ExtIEs_877, + 3, /* Elements count */ + &asn_SPC_UsableABSInformationTDD_ExtIEs_specs_877 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_884 = { + sizeof(struct V2XServicesAuthorized_ExtIEs__extensionValue), + offsetof(struct V2XServicesAuthorized_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct V2XServicesAuthorized_ExtIEs__extensionValue, present), + sizeof(((struct V2XServicesAuthorized_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_884 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_884 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_V2XServicesAuthorized_ExtIEs_881[] = { + { ATF_NOFLAGS, 0, offsetof(struct V2XServicesAuthorized_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_882, memb_id_constraint_881 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct V2XServicesAuthorized_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_883, memb_criticality_constraint_881 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct V2XServicesAuthorized_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_884, + 0, + { 0, &asn_PER_memb_extensionValue_constr_884, memb_extensionValue_constraint_881 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_V2XServicesAuthorized_ExtIEs_tag2el_881[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_V2XServicesAuthorized_ExtIEs_specs_881 = { + sizeof(struct V2XServicesAuthorized_ExtIEs), + offsetof(struct V2XServicesAuthorized_ExtIEs, _asn_ctx), + asn_MAP_V2XServicesAuthorized_ExtIEs_tag2el_881, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_V2XServicesAuthorized_ExtIEs = { + "V2XServicesAuthorized-ExtIEs", + "V2XServicesAuthorized-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881, + sizeof(asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881) + /sizeof(asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881[0]), /* 1 */ + asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881, /* Same as above */ + sizeof(asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881) + /sizeof(asn_DEF_V2XServicesAuthorized_ExtIEs_tags_881[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_V2XServicesAuthorized_ExtIEs_881, + 3, /* Elements count */ + &asn_SPC_V2XServicesAuthorized_ExtIEs_specs_881 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_888 = { + sizeof(struct WidebandCQI_ExtIEs__extensionValue), + offsetof(struct WidebandCQI_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct WidebandCQI_ExtIEs__extensionValue, present), + sizeof(((struct WidebandCQI_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_888 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_888 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_WidebandCQI_ExtIEs_885[] = { + { ATF_NOFLAGS, 0, offsetof(struct WidebandCQI_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_886, memb_id_constraint_885 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct WidebandCQI_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_887, memb_criticality_constraint_885 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct WidebandCQI_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_888, + 0, + { 0, &asn_PER_memb_extensionValue_constr_888, memb_extensionValue_constraint_885 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_WidebandCQI_ExtIEs_tags_885[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_WidebandCQI_ExtIEs_tag2el_885[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_WidebandCQI_ExtIEs_specs_885 = { + sizeof(struct WidebandCQI_ExtIEs), + offsetof(struct WidebandCQI_ExtIEs, _asn_ctx), + asn_MAP_WidebandCQI_ExtIEs_tag2el_885, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_WidebandCQI_ExtIEs = { + "WidebandCQI-ExtIEs", + "WidebandCQI-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_WidebandCQI_ExtIEs_tags_885, + sizeof(asn_DEF_WidebandCQI_ExtIEs_tags_885) + /sizeof(asn_DEF_WidebandCQI_ExtIEs_tags_885[0]), /* 1 */ + asn_DEF_WidebandCQI_ExtIEs_tags_885, /* Same as above */ + sizeof(asn_DEF_WidebandCQI_ExtIEs_tags_885) + /sizeof(asn_DEF_WidebandCQI_ExtIEs_tags_885[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_WidebandCQI_ExtIEs_885, + 3, /* Elements count */ + &asn_SPC_WidebandCQI_ExtIEs_specs_885 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_extensionValue_specs_892 = { + sizeof(struct WLANMeasurementConfiguration_ExtIEs__extensionValue), + offsetof(struct WLANMeasurementConfiguration_ExtIEs__extensionValue, _asn_ctx), + offsetof(struct WLANMeasurementConfiguration_ExtIEs__extensionValue, present), + sizeof(((struct WLANMeasurementConfiguration_ExtIEs__extensionValue *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extensionValue_892 = { + "extensionValue", + "extensionValue", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_extensionValue_specs_892 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_WLANMeasurementConfiguration_ExtIEs_889[] = { + { ATF_NOFLAGS, 0, offsetof(struct WLANMeasurementConfiguration_ExtIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_890, memb_id_constraint_889 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct WLANMeasurementConfiguration_ExtIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_891, memb_criticality_constraint_889 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct WLANMeasurementConfiguration_ExtIEs, extensionValue), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_extensionValue_892, + 0, + { 0, &asn_PER_memb_extensionValue_constr_892, memb_extensionValue_constraint_889 }, + 0, 0, /* No default value */ + "extensionValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_WLANMeasurementConfiguration_ExtIEs_tag2el_889[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_WLANMeasurementConfiguration_ExtIEs_specs_889 = { + sizeof(struct WLANMeasurementConfiguration_ExtIEs), + offsetof(struct WLANMeasurementConfiguration_ExtIEs, _asn_ctx), + asn_MAP_WLANMeasurementConfiguration_ExtIEs_tag2el_889, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_WLANMeasurementConfiguration_ExtIEs = { + "WLANMeasurementConfiguration-ExtIEs", + "WLANMeasurementConfiguration-ExtIEs", + &asn_OP_SEQUENCE, + asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889, + sizeof(asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889) + /sizeof(asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889[0]), /* 1 */ + asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889, /* Same as above */ + sizeof(asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889) + /sizeof(asn_DEF_WLANMeasurementConfiguration_ExtIEs_tags_889[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_WLANMeasurementConfiguration_ExtIEs_889, + 3, /* Elements count */ + &asn_SPC_WLANMeasurementConfiguration_ExtIEs_specs_889 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.h new file mode 100644 index 0000000..339409d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolExtensionField.h @@ -0,0 +1,5181 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolExtensionField_H_ +#define _ProtocolExtensionField_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "ManagementBasedMDTallowed.h" +#include "Presence.h" +#include "MDTPLMNList.h" +#include "UESidelinkAggregateMaximumBitRate.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "BearerType.h" +#include "ReceiveStatusOfULPDCPSDUsExtended.h" +#include "COUNTValueExtended.h" +#include "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h" +#include "COUNTvaluePDCP-SNlength18.h" +#include "ABSInformation.h" +#include "InvokeIndication.h" +#include "SubframeAssignment.h" +#include "ExtendedULInterferenceOverloadInfo.h" +#include "CoMPInformation.h" +#include "DynamicDLTransmissionInformation.h" +#include "DeactivationIndication.h" +#include "CompositeAvailableCapacityGroup.h" +#include "ABS-Status.h" +#include "RSRPMRList.h" +#include "CSIReportList.h" +#include "CellReportingIndicator.h" +#include "Correlation-ID.h" +#include "GTPtunnelEndpoint.h" +#include "DL-Forwarding.h" +#include "RLCMode.h" +#include "PDCPSnLength.h" +#include "DuplicationActivation.h" +#include "LCID.h" +#include "SubscriberProfileIDforRFP.h" +#include "RLC-Status.h" +#include "NewDRBIDrequest.h" +#include "Packet-LossRate.h" +#include "EARFCNExtension.h" +#include "OffsetOfNbiotChannelNumberToEARFCN.h" +#include "NRS-NSSS-PowerOffset.h" +#include "NSSS-NumOccasionDifferentPrecoder.h" +#include "ExtendedBitRate.h" +#include "NRrestrictioninEPSasSecondaryRAT.h" +#include "CNTypeRestrictions.h" +#include "NRrestrictionin5GS.h" +#include "Time-UE-StayedInCell-EnhancedGranularity.h" +#include "Cause.h" +#include "M3Configuration.h" +#include "M4Configuration.h" +#include "M5Configuration.h" +#include "MDT-Location-Info.h" +#include "M6Configuration.h" +#include "M7Configuration.h" +#include "BluetoothMeasurementConfiguration.h" +#include "WLANMeasurementConfiguration.h" +#include "NRCGI.h" +#include "MeNBCoordinationAssistanceInformation.h" +#include "TAC.h" +#include "ProSeUEtoNetworkRelaying.h" +#include "DL-scheduling-PDCCH-CCE-usage.h" +#include "UL-scheduling-PDCCH-CCE-usage.h" +#include "EnhancedRNTP.h" +#include "UEID.h" +#include "Number-of-Antennaports.h" +#include "PRACH-Configuration.h" +#include "MBSFN-Subframe-Infolist.h" +#include "CSG-Id.h" +#include "MBMS-Service-Area-Identity-List.h" +#include "MultibandInfoList.h" +#include "FreqBandIndicatorPriority.h" +#include "BandwidthReducedSI.h" +#include "ProtectedEUTRAResourceIndication.h" +#include "ECGI.h" +#include "SgNBCoordinationAssistanceInformation.h" +#include "AdditionalSpecialSubframe-Info.h" +#include "AdditionalSpecialSubframeExtension-Info.h" +#include "MDT-Configuration.h" +#include "UEAppLayerMeasConfig.h" +#include "ServiceType.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_ContextInformation_ExtIEs__extensionValue_PR { + UE_ContextInformation_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + UE_ContextInformation_ExtIEs__extensionValue_PR_ManagementBasedMDTallowed, + UE_ContextInformation_ExtIEs__extensionValue_PR_MDTPLMNList, + UE_ContextInformation_ExtIEs__extensionValue_PR_UESidelinkAggregateMaximumBitRate +} UE_ContextInformation_ExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR_BearerType +} E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR; +typedef enum UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR { + UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR; +typedef enum UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR { + UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR; +typedef enum UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR { + UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_Item_ExtIEs__extensionValue_PR { + E_RABs_Admitted_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_Item_ExtIEs__extensionValue_PR; +typedef enum E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR { + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsExtended, + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTValueExtended, + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18, + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTvaluePDCP_SNlength18 +} E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR; +typedef enum CellInformation_Item_ExtIEs__extensionValue_PR { + CellInformation_Item_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + CellInformation_Item_ExtIEs__extensionValue_PR_ABSInformation, + CellInformation_Item_ExtIEs__extensionValue_PR_InvokeIndication, + CellInformation_Item_ExtIEs__extensionValue_PR_SubframeAssignment, + CellInformation_Item_ExtIEs__extensionValue_PR_ExtendedULInterferenceOverloadInfo, + CellInformation_Item_ExtIEs__extensionValue_PR_CoMPInformation, + CellInformation_Item_ExtIEs__extensionValue_PR_DynamicDLTransmissionInformation +} CellInformation_Item_ExtIEs__extensionValue_PR; +typedef enum ServedCellsToModify_Item_ExtIEs__extensionValue_PR { + ServedCellsToModify_Item_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + ServedCellsToModify_Item_ExtIEs__extensionValue_PR_DeactivationIndication +} ServedCellsToModify_Item_ExtIEs__extensionValue_PR; +typedef enum CellToReport_Item_ExtIEs__extensionValue_PR { + CellToReport_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CellToReport_Item_ExtIEs__extensionValue_PR; +typedef enum MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR { + MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR; +typedef enum MeasurementFailureCause_Item_ExtIEs__extensionValue_PR { + MeasurementFailureCause_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} MeasurementFailureCause_Item_ExtIEs__extensionValue_PR; +typedef enum CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR { + CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR; +typedef enum CellMeasurementResult_Item_ExtIEs__extensionValue_PR { + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CompositeAvailableCapacityGroup, + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_ABS_Status, + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_RSRPMRList, + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CSIReportList, + CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CellReportingIndicator +} CellMeasurementResult_Item_ExtIEs__extensionValue_PR; +typedef enum ServedCellsToActivate_Item_ExtIEs__extensionValue_PR { + ServedCellsToActivate_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedCellsToActivate_Item_ExtIEs__extensionValue_PR; +typedef enum ActivatedCellList_Item_ExtIEs__extensionValue_PR { + ActivatedCellList_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ActivatedCellList_Item_ExtIEs__extensionValue_PR; +typedef enum RNL_Header_Item_ExtIEs__extensionValue_PR { + RNL_Header_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} RNL_Header_Item_ExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID +} E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR; +typedef enum ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR { + ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR; +typedef enum ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR { + ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR; +typedef enum UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR { + UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID +} E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR; +typedef enum E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR { + E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR; +typedef enum UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR { + UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR_UESidelinkAggregateMaximumBitRate +} UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_GTPtunnelEndpoint, + E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_DL_Forwarding +} E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLCMode +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength, + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR { + ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR; +typedef enum ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR { + ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR; +typedef enum UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR { + UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR_NOTHING, /* No components present */ + UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR_SubscriberProfileIDforRFP +} UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLCMode +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength, + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLC_Status +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength, + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_GTPtunnelEndpoint +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_GTPtunnelEndpoint, + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_RLC_Status +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR_RLCMode +} E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength, + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NewDRBIDrequest +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_RLC_Status, + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR { + E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR { + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR { + E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR; +typedef enum E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR { + E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR; +typedef enum ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR { + ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR; +typedef enum En_gNBServedCells_ExtIEs__extensionValue_PR { + En_gNBServedCells_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} En_gNBServedCells_ExtIEs__extensionValue_PR; +typedef enum ServedNRCell_Information_ExtIEs__extensionValue_PR { + ServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedNRCell_Information_ExtIEs__extensionValue_PR; +typedef enum FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR { + FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR; +typedef enum FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR { + FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR; +typedef enum TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR { + TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR; +typedef enum TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR { + TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR; +typedef enum NRNeighbour_Information_ExtIEs__extensionValue_PR { + NRNeighbour_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} NRNeighbour_Information_ExtIEs__extensionValue_PR; +typedef enum Limited_list_ExtIEs__extensionValue_PR { + Limited_list_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} Limited_list_ExtIEs__extensionValue_PR; +typedef enum ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR { + ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR; +typedef enum ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR { + ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR; +typedef enum ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR { + ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR; +typedef enum ActivatedNRCellList_Item_ExtIEs__extensionValue_PR { + ActivatedNRCellList_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ActivatedNRCellList_Item_ExtIEs__extensionValue_PR; +typedef enum E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR { + E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR; +typedef enum ABSInformationFDD_ExtIEs__extensionValue_PR { + ABSInformationFDD_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ABSInformationFDD_ExtIEs__extensionValue_PR; +typedef enum ABSInformationTDD_ExtIEs__extensionValue_PR { + ABSInformationTDD_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ABSInformationTDD_ExtIEs__extensionValue_PR; +typedef enum ABS_Status_ExtIEs__extensionValue_PR { + ABS_Status_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ABS_Status_ExtIEs__extensionValue_PR; +typedef enum AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR { + AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR; +typedef enum AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR { + AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR; +typedef enum AllocationAndRetentionPriority_ExtIEs__extensionValue_PR { + AllocationAndRetentionPriority_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} AllocationAndRetentionPriority_ExtIEs__extensionValue_PR; +typedef enum AS_SecurityInformation_ExtIEs__extensionValue_PR { + AS_SecurityInformation_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} AS_SecurityInformation_ExtIEs__extensionValue_PR; +typedef enum BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR { + BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR; +typedef enum CellBasedMDT_ExtIEs__extensionValue_PR { + CellBasedMDT_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CellBasedMDT_ExtIEs__extensionValue_PR; +typedef enum CellBasedQMC_ExtIEs__extensionValue_PR { + CellBasedQMC_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CellBasedQMC_ExtIEs__extensionValue_PR; +typedef enum CellReplacingInfo_ExtIEs__extensionValue_PR { + CellReplacingInfo_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CellReplacingInfo_ExtIEs__extensionValue_PR; +typedef enum CellType_ExtIEs__extensionValue_PR { + CellType_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CellType_ExtIEs__extensionValue_PR; +typedef enum CNTypeRestrictionsItem_ExtIEs__extensionValue_PR { + CNTypeRestrictionsItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CNTypeRestrictionsItem_ExtIEs__extensionValue_PR; +typedef enum CoMPHypothesisSetItem_ExtIEs__extensionValue_PR { + CoMPHypothesisSetItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CoMPHypothesisSetItem_ExtIEs__extensionValue_PR; +typedef enum CoMPInformation_ExtIEs__extensionValue_PR { + CoMPInformation_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CoMPInformation_ExtIEs__extensionValue_PR; +typedef enum CoMPInformationItem_ExtIEs__extensionValue_PR { + CoMPInformationItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CoMPInformationItem_ExtIEs__extensionValue_PR; +typedef enum CoMPInformationStartTime_ExtIEs__extensionValue_PR { + CoMPInformationStartTime_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CoMPInformationStartTime_ExtIEs__extensionValue_PR; +typedef enum CompositeAvailableCapacity_ExtIEs__extensionValue_PR { + CompositeAvailableCapacity_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CompositeAvailableCapacity_ExtIEs__extensionValue_PR; +typedef enum CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR { + CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR; +typedef enum COUNTvalue_ExtIEs__extensionValue_PR { + COUNTvalue_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} COUNTvalue_ExtIEs__extensionValue_PR; +typedef enum COUNTValueExtended_ExtIEs__extensionValue_PR { + COUNTValueExtended_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} COUNTValueExtended_ExtIEs__extensionValue_PR; +typedef enum COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR { + COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR; +typedef enum CriticalityDiagnostics_ExtIEs__extensionValue_PR { + CriticalityDiagnostics_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CriticalityDiagnostics_ExtIEs__extensionValue_PR; +typedef enum CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR { + CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR; +typedef enum CSIReportList_ExtIEs__extensionValue_PR { + CSIReportList_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CSIReportList_ExtIEs__extensionValue_PR; +typedef enum CSIReportPerCSIProcess_ExtIEs__extensionValue_PR { + CSIReportPerCSIProcess_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CSIReportPerCSIProcess_ExtIEs__extensionValue_PR; +typedef enum CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR { + CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR; +typedef enum DataTrafficResourceIndication_ExtIEs__extensionValue_PR { + DataTrafficResourceIndication_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} DataTrafficResourceIndication_ExtIEs__extensionValue_PR; +typedef enum DeliveryStatus_ExtIEs__extensionValue_PR { + DeliveryStatus_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} DeliveryStatus_ExtIEs__extensionValue_PR; +typedef enum DynamicNAICSInformation_ExtIEs__extensionValue_PR { + DynamicNAICSInformation_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} DynamicNAICSInformation_ExtIEs__extensionValue_PR; +typedef enum ECGI_ExtIEs__extensionValue_PR { + ECGI_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ECGI_ExtIEs__extensionValue_PR; +typedef enum EnhancedRNTP_ExtIEs__extensionValue_PR { + EnhancedRNTP_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} EnhancedRNTP_ExtIEs__extensionValue_PR; +typedef enum EnhancedRNTPStartTime_ExtIEs__extensionValue_PR { + EnhancedRNTPStartTime_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} EnhancedRNTPStartTime_ExtIEs__extensionValue_PR; +typedef enum EN_DC_ResourceConfigurationExtIEs__extensionValue_PR { + EN_DC_ResourceConfigurationExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} EN_DC_ResourceConfigurationExtIEs__extensionValue_PR; +typedef enum ERABActivityNotifyItem_ExtIEs__extensionValue_PR { + ERABActivityNotifyItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ERABActivityNotifyItem_ExtIEs__extensionValue_PR; +typedef enum E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR { + E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_Packet_LossRate +} E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR; +typedef enum E_RAB_Item_ExtIEs__extensionValue_PR { + E_RAB_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RAB_Item_ExtIEs__extensionValue_PR; +typedef enum E_RABUsageReport_Item_ExtIEs__extensionValue_PR { + E_RABUsageReport_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} E_RABUsageReport_Item_ExtIEs__extensionValue_PR; +typedef enum ExpectedUEBehaviour_ExtIEs__extensionValue_PR { + ExpectedUEBehaviour_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ExpectedUEBehaviour_ExtIEs__extensionValue_PR; +typedef enum ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR { + ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR; +typedef enum ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR { + ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR; +typedef enum FDD_Info_ExtIEs__extensionValue_PR { + FDD_Info_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + FDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension, + FDD_Info_ExtIEs__extensionValue_PR_OffsetOfNbiotChannelNumberToEARFCN, + FDD_Info_ExtIEs__extensionValue_PR_NRS_NSSS_PowerOffset, + FDD_Info_ExtIEs__extensionValue_PR_NSSS_NumOccasionDifferentPrecoder +} FDD_Info_ExtIEs__extensionValue_PR; +typedef enum ForbiddenTAs_Item_ExtIEs__extensionValue_PR { + ForbiddenTAs_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ForbiddenTAs_Item_ExtIEs__extensionValue_PR; +typedef enum ForbiddenLAs_Item_ExtIEs__extensionValue_PR { + ForbiddenLAs_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ForbiddenLAs_Item_ExtIEs__extensionValue_PR; +typedef enum FreqBandNrItem_ExtIEs__extensionValue_PR { + FreqBandNrItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} FreqBandNrItem_ExtIEs__extensionValue_PR; +typedef enum GBR_QosInformation_ExtIEs__extensionValue_PR { + GBR_QosInformation_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate +} GBR_QosInformation_ExtIEs__extensionValue_PR; +typedef enum GlobalENB_ID_ExtIEs__extensionValue_PR { + GlobalENB_ID_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} GlobalENB_ID_ExtIEs__extensionValue_PR; +typedef enum GlobalGNB_ID_ExtIEs__extensionValue_PR { + GlobalGNB_ID_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} GlobalGNB_ID_ExtIEs__extensionValue_PR; +typedef enum GTPtunnelEndpoint_ExtIEs__extensionValue_PR { + GTPtunnelEndpoint_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} GTPtunnelEndpoint_ExtIEs__extensionValue_PR; +typedef enum GU_Group_ID_ExtIEs__extensionValue_PR { + GU_Group_ID_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} GU_Group_ID_ExtIEs__extensionValue_PR; +typedef enum GUMMEI_ExtIEs__extensionValue_PR { + GUMMEI_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} GUMMEI_ExtIEs__extensionValue_PR; +typedef enum HandoverRestrictionList_ExtIEs__extensionValue_PR { + HandoverRestrictionList_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + HandoverRestrictionList_ExtIEs__extensionValue_PR_NRrestrictioninEPSasSecondaryRAT, + HandoverRestrictionList_ExtIEs__extensionValue_PR_CNTypeRestrictions, + HandoverRestrictionList_ExtIEs__extensionValue_PR_NRrestrictionin5GS +} HandoverRestrictionList_ExtIEs__extensionValue_PR; +typedef enum HWLoadIndicator_ExtIEs__extensionValue_PR { + HWLoadIndicator_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} HWLoadIndicator_ExtIEs__extensionValue_PR; +typedef enum LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR { + LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_Time_UE_StayedInCell_EnhancedGranularity, + LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_Cause +} LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR; +typedef enum LocationReportingInformation_ExtIEs__extensionValue_PR { + LocationReportingInformation_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} LocationReportingInformation_ExtIEs__extensionValue_PR; +typedef enum M1PeriodicReporting_ExtIEs__extensionValue_PR { + M1PeriodicReporting_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M1PeriodicReporting_ExtIEs__extensionValue_PR; +typedef enum M1ThresholdEventA2_ExtIEs__extensionValue_PR { + M1ThresholdEventA2_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M1ThresholdEventA2_ExtIEs__extensionValue_PR; +typedef enum M3Configuration_ExtIEs__extensionValue_PR { + M3Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M3Configuration_ExtIEs__extensionValue_PR; +typedef enum M4Configuration_ExtIEs__extensionValue_PR { + M4Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M4Configuration_ExtIEs__extensionValue_PR; +typedef enum M5Configuration_ExtIEs__extensionValue_PR { + M5Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M5Configuration_ExtIEs__extensionValue_PR; +typedef enum M6Configuration_ExtIEs__extensionValue_PR { + M6Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M6Configuration_ExtIEs__extensionValue_PR; +typedef enum M7Configuration_ExtIEs__extensionValue_PR { + M7Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} M7Configuration_ExtIEs__extensionValue_PR; +typedef enum MDT_Configuration_ExtIEs__extensionValue_PR { + MDT_Configuration_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + MDT_Configuration_ExtIEs__extensionValue_PR_M3Configuration, + MDT_Configuration_ExtIEs__extensionValue_PR_M4Configuration, + MDT_Configuration_ExtIEs__extensionValue_PR_M5Configuration, + MDT_Configuration_ExtIEs__extensionValue_PR_MDT_Location_Info, + MDT_Configuration_ExtIEs__extensionValue_PR_MDTPLMNList, + MDT_Configuration_ExtIEs__extensionValue_PR_M6Configuration, + MDT_Configuration_ExtIEs__extensionValue_PR_M7Configuration, + MDT_Configuration_ExtIEs__extensionValue_PR_BluetoothMeasurementConfiguration, + MDT_Configuration_ExtIEs__extensionValue_PR_WLANMeasurementConfiguration +} MDT_Configuration_ExtIEs__extensionValue_PR; +typedef enum MeNBResourceCoordinationInformationExtIEs__extensionValue_PR { + MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_NOTHING, /* No components present */ + MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_NRCGI, + MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_MeNBCoordinationAssistanceInformation +} MeNBResourceCoordinationInformationExtIEs__extensionValue_PR; +typedef enum MBSFN_Subframe_Info_ExtIEs__extensionValue_PR { + MBSFN_Subframe_Info_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} MBSFN_Subframe_Info_ExtIEs__extensionValue_PR; +typedef enum BandInfo_ExtIEs__extensionValue_PR { + BandInfo_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} BandInfo_ExtIEs__extensionValue_PR; +typedef enum SplitSRB_ExtIEs__extensionValue_PR { + SplitSRB_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SplitSRB_ExtIEs__extensionValue_PR; +typedef enum UENRMeasurement_ExtIEs__extensionValue_PR { + UENRMeasurement_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UENRMeasurement_ExtIEs__extensionValue_PR; +typedef enum Neighbour_Information_ExtIEs__extensionValue_PR { + Neighbour_Information_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + Neighbour_Information_ExtIEs__extensionValue_PR_TAC, + Neighbour_Information_ExtIEs__extensionValue_PR_EARFCNExtension +} Neighbour_Information_ExtIEs__extensionValue_PR; +typedef enum NRFreqInfo_ExtIEs__extensionValue_PR { + NRFreqInfo_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} NRFreqInfo_ExtIEs__extensionValue_PR; +typedef enum NRCGI_ExtIEs__extensionValue_PR { + NRCGI_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} NRCGI_ExtIEs__extensionValue_PR; +typedef enum NR_TxBW_ExtIEs__extensionValue_PR { + NR_TxBW_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} NR_TxBW_ExtIEs__extensionValue_PR; +typedef enum NRUESecurityCapabilities_ExtIEs__extensionValue_PR { + NRUESecurityCapabilities_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} NRUESecurityCapabilities_ExtIEs__extensionValue_PR; +typedef enum PRACH_Configuration_ExtIEs__extensionValue_PR { + PRACH_Configuration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} PRACH_Configuration_ExtIEs__extensionValue_PR; +typedef enum PLMNAreaBasedQMC_ExtIEs__extensionValue_PR { + PLMNAreaBasedQMC_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} PLMNAreaBasedQMC_ExtIEs__extensionValue_PR; +typedef enum ProSeAuthorized_ExtIEs__extensionValue_PR { + ProSeAuthorized_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + ProSeAuthorized_ExtIEs__extensionValue_PR_ProSeUEtoNetworkRelaying +} ProSeAuthorized_ExtIEs__extensionValue_PR; +typedef enum ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR { + ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR; +typedef enum ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR { + ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR; +typedef enum ProtectedResourceList_Item_ExtIEs__extensionValue_PR { + ProtectedResourceList_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ProtectedResourceList_Item_ExtIEs__extensionValue_PR; +typedef enum RadioResourceStatus_ExtIEs__extensionValue_PR { + RadioResourceStatus_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + RadioResourceStatus_ExtIEs__extensionValue_PR_DL_scheduling_PDCCH_CCE_usage, + RadioResourceStatus_ExtIEs__extensionValue_PR_UL_scheduling_PDCCH_CCE_usage +} RadioResourceStatus_ExtIEs__extensionValue_PR; +typedef enum RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR { + RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR_EnhancedRNTP +} RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR; +typedef enum ReservedSubframePattern_ExtIEs__extensionValue_PR { + ReservedSubframePattern_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ReservedSubframePattern_ExtIEs__extensionValue_PR; +typedef enum RLC_Status_ExtIEs__extensionValue_PR { + RLC_Status_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} RLC_Status_ExtIEs__extensionValue_PR; +typedef enum RSRPMeasurementResult_ExtIEs__extensionValue_PR { + RSRPMeasurementResult_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} RSRPMeasurementResult_ExtIEs__extensionValue_PR; +typedef enum RSRPMRList_ExtIEs__extensionValue_PR { + RSRPMRList_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + RSRPMRList_ExtIEs__extensionValue_PR_UEID +} RSRPMRList_ExtIEs__extensionValue_PR; +typedef enum S1TNLLoadIndicator_ExtIEs__extensionValue_PR { + S1TNLLoadIndicator_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} S1TNLLoadIndicator_ExtIEs__extensionValue_PR; +typedef enum SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR { + SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR; +typedef enum ServedCell_ExtIEs__extensionValue_PR { + ServedCell_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ServedCell_ExtIEs__extensionValue_PR; +typedef enum ServedCell_Information_ExtIEs__extensionValue_PR { + ServedCell_Information_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + ServedCell_Information_ExtIEs__extensionValue_PR_Number_of_Antennaports, + ServedCell_Information_ExtIEs__extensionValue_PR_PRACH_Configuration, + ServedCell_Information_ExtIEs__extensionValue_PR_MBSFN_Subframe_Infolist, + ServedCell_Information_ExtIEs__extensionValue_PR_CSG_Id, + ServedCell_Information_ExtIEs__extensionValue_PR_MBMS_Service_Area_Identity_List, + ServedCell_Information_ExtIEs__extensionValue_PR_MultibandInfoList, + ServedCell_Information_ExtIEs__extensionValue_PR_FreqBandIndicatorPriority, + ServedCell_Information_ExtIEs__extensionValue_PR_BandwidthReducedSI, + ServedCell_Information_ExtIEs__extensionValue_PR_ProtectedEUTRAResourceIndication +} ServedCell_Information_ExtIEs__extensionValue_PR; +typedef enum SgNBResourceCoordinationInformationExtIEs__extensionValue_PR { + SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_NOTHING, /* No components present */ + SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_ECGI, + SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_SgNBCoordinationAssistanceInformation +} SgNBResourceCoordinationInformationExtIEs__extensionValue_PR; +typedef enum SpecialSubframe_Info_ExtIEs__extensionValue_PR { + SpecialSubframe_Info_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SpecialSubframe_Info_ExtIEs__extensionValue_PR; +typedef enum SubbandCQI_ExtIEs__extensionValue_PR { + SubbandCQI_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SubbandCQI_ExtIEs__extensionValue_PR; +typedef enum Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR { + Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR; +typedef enum ScheduledCommunicationTime_ExtIEs__extensionValue_PR { + ScheduledCommunicationTime_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ScheduledCommunicationTime_ExtIEs__extensionValue_PR; +typedef enum SubbandCQIItem_ExtIEs__extensionValue_PR { + SubbandCQIItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SubbandCQIItem_ExtIEs__extensionValue_PR; +typedef enum SULInformation_ExtIEs__extensionValue_PR { + SULInformation_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SULInformation_ExtIEs__extensionValue_PR; +typedef enum SupportedSULFreqBandItem_ExtIEs__extensionValue_PR { + SupportedSULFreqBandItem_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} SupportedSULFreqBandItem_ExtIEs__extensionValue_PR; +typedef enum TABasedMDT_ExtIEs__extensionValue_PR { + TABasedMDT_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TABasedMDT_ExtIEs__extensionValue_PR; +typedef enum TAIBasedMDT_ExtIEs__extensionValue_PR { + TAIBasedMDT_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TAIBasedMDT_ExtIEs__extensionValue_PR; +typedef enum TAI_Item_ExtIEs__extensionValue_PR { + TAI_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TAI_Item_ExtIEs__extensionValue_PR; +typedef enum TABasedQMC_ExtIEs__extensionValue_PR { + TABasedQMC_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TABasedQMC_ExtIEs__extensionValue_PR; +typedef enum TAIBasedQMC_ExtIEs__extensionValue_PR { + TAIBasedQMC_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} TAIBasedQMC_ExtIEs__extensionValue_PR; +typedef enum TDD_Info_ExtIEs__extensionValue_PR { + TDD_Info_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + TDD_Info_ExtIEs__extensionValue_PR_AdditionalSpecialSubframe_Info, + TDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension, + TDD_Info_ExtIEs__extensionValue_PR_AdditionalSpecialSubframeExtension_Info +} TDD_Info_ExtIEs__extensionValue_PR; +typedef enum TraceActivation_ExtIEs__extensionValue_PR { + TraceActivation_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + TraceActivation_ExtIEs__extensionValue_PR_MDT_Configuration, + TraceActivation_ExtIEs__extensionValue_PR_UEAppLayerMeasConfig +} TraceActivation_ExtIEs__extensionValue_PR; +typedef enum Tunnel_Information_ExtIEs__extensionValue_PR { + Tunnel_Information_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} Tunnel_Information_ExtIEs__extensionValue_PR; +typedef enum UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR { + UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_ExtendedBitRate +} UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR; +typedef enum UEAppLayerMeasConfig_ExtIEs__extensionValue_PR { + UEAppLayerMeasConfig_ExtIEs__extensionValue_PR_NOTHING, /* No components present */ + UEAppLayerMeasConfig_ExtIEs__extensionValue_PR_ServiceType +} UEAppLayerMeasConfig_ExtIEs__extensionValue_PR; +typedef enum UESecurityCapabilities_ExtIEs__extensionValue_PR { + UESecurityCapabilities_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UESecurityCapabilities_ExtIEs__extensionValue_PR; +typedef enum UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR { + UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR; +typedef enum UEsToBeResetList_Item_ExtIEs__extensionValue_PR { + UEsToBeResetList_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UEsToBeResetList_Item_ExtIEs__extensionValue_PR; +typedef enum ULandDLSharing_ExtIEs__extensionValue_PR { + ULandDLSharing_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ULandDLSharing_ExtIEs__extensionValue_PR; +typedef enum ULConfiguration_ExtIEs__extensionValue_PR { + ULConfiguration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ULConfiguration_ExtIEs__extensionValue_PR; +typedef enum UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR { + UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR; +typedef enum ULOnlySharing_ExtIEs__extensionValue_PR { + ULOnlySharing_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} ULOnlySharing_ExtIEs__extensionValue_PR; +typedef enum UsableABSInformationFDD_ExtIEs__extensionValue_PR { + UsableABSInformationFDD_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UsableABSInformationFDD_ExtIEs__extensionValue_PR; +typedef enum UsableABSInformationTDD_ExtIEs__extensionValue_PR { + UsableABSInformationTDD_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} UsableABSInformationTDD_ExtIEs__extensionValue_PR; +typedef enum V2XServicesAuthorized_ExtIEs__extensionValue_PR { + V2XServicesAuthorized_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} V2XServicesAuthorized_ExtIEs__extensionValue_PR; +typedef enum WidebandCQI_ExtIEs__extensionValue_PR { + WidebandCQI_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} WidebandCQI_ExtIEs__extensionValue_PR; +typedef enum WLANMeasurementConfiguration_ExtIEs__extensionValue_PR { + WLANMeasurementConfiguration_ExtIEs__extensionValue_PR_NOTHING /* No components present */ + +} WLANMeasurementConfiguration_ExtIEs__extensionValue_PR; + +/* ProtocolExtensionField */ +typedef struct UE_ContextInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextInformation_ExtIEs__extensionValue { + UE_ContextInformation_ExtIEs__extensionValue_PR present; + union UE_ContextInformation_ExtIEs__extensionValue_u { + ManagementBasedMDTallowed_t ManagementBasedMDTallowed; + MDTPLMNList_t MDTPLMNList; + UESidelinkAggregateMaximumBitRate_t UESidelinkAggregateMaximumBitRate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformation_ExtIEs_t; +typedef struct E_RABs_ToBeSetup_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeSetup_ItemExtIEs__extensionValue { + E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeSetup_ItemExtIEs__extensionValue_u { + BearerType_t BearerType; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetup_ItemExtIEs_t; +typedef struct UE_ContextReferenceAtSeNB_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue { + UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR present; + union UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtSeNB_ItemExtIEs_t; +typedef struct UE_ContextReferenceAtWT_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextReferenceAtWT_ItemExtIEs__extensionValue { + UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR present; + union UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtWT_ItemExtIEs_t; +typedef struct UE_ContextReferenceAtSgNB_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue { + UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR present; + union UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtSgNB_ItemExtIEs_t; +typedef struct E_RABs_Admitted_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_Item_ExtIEs__extensionValue { + E_RABs_Admitted_Item_ExtIEs__extensionValue_PR present; + union E_RABs_Admitted_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_Item_ExtIEs_t; +typedef struct E_RABs_SubjectToStatusTransfer_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue { + E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR present; + union E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_u { + ReceiveStatusOfULPDCPSDUsExtended_t ReceiveStatusOfULPDCPSDUsExtended; + COUNTValueExtended_t COUNTValueExtended; + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_t ReceiveStatusOfULPDCPSDUsPDCP_SNlength18; + COUNTvaluePDCP_SNlength18_t COUNTvaluePDCP_SNlength18; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToStatusTransfer_ItemExtIEs_t; +typedef struct CellInformation_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellInformation_Item_ExtIEs__extensionValue { + CellInformation_Item_ExtIEs__extensionValue_PR present; + union CellInformation_Item_ExtIEs__extensionValue_u { + ABSInformation_t ABSInformation; + InvokeIndication_t InvokeIndication; + SubframeAssignment_t SubframeAssignment; + ExtendedULInterferenceOverloadInfo_t ExtendedULInterferenceOverloadInfo; + CoMPInformation_t CoMPInformation; + DynamicDLTransmissionInformation_t DynamicDLTransmissionInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInformation_Item_ExtIEs_t; +typedef struct ServedCellsToModify_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedCellsToModify_Item_ExtIEs__extensionValue { + ServedCellsToModify_Item_ExtIEs__extensionValue_PR present; + union ServedCellsToModify_Item_ExtIEs__extensionValue_u { + DeactivationIndication_t DeactivationIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToModify_Item_ExtIEs_t; +typedef struct CellToReport_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellToReport_Item_ExtIEs__extensionValue { + CellToReport_Item_ExtIEs__extensionValue_PR present; + union CellToReport_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellToReport_Item_ExtIEs_t; +typedef struct MeasurementInitiationResult_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MeasurementInitiationResult_Item_ExtIEs__extensionValue { + MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR present; + union MeasurementInitiationResult_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInitiationResult_Item_ExtIEs_t; +typedef struct MeasurementFailureCause_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MeasurementFailureCause_Item_ExtIEs__extensionValue { + MeasurementFailureCause_Item_ExtIEs__extensionValue_PR present; + union MeasurementFailureCause_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementFailureCause_Item_ExtIEs_t; +typedef struct CompleteFailureCauseInformation_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CompleteFailureCauseInformation_Item_ExtIEs__extensionValue { + CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR present; + union CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompleteFailureCauseInformation_Item_ExtIEs_t; +typedef struct CellMeasurementResult_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellMeasurementResult_Item_ExtIEs__extensionValue { + CellMeasurementResult_Item_ExtIEs__extensionValue_PR present; + union CellMeasurementResult_Item_ExtIEs__extensionValue_u { + CompositeAvailableCapacityGroup_t CompositeAvailableCapacityGroup; + ABS_Status_t ABS_Status; + RSRPMRList_t RSRPMRList; + CSIReportList_t CSIReportList; + CellReportingIndicator_t CellReportingIndicator; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellMeasurementResult_Item_ExtIEs_t; +typedef struct ServedCellsToActivate_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedCellsToActivate_Item_ExtIEs__extensionValue { + ServedCellsToActivate_Item_ExtIEs__extensionValue_PR present; + union ServedCellsToActivate_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToActivate_Item_ExtIEs_t; +typedef struct ActivatedCellList_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ActivatedCellList_Item_ExtIEs__extensionValue { + ActivatedCellList_Item_ExtIEs__extensionValue_PR present; + union ActivatedCellList_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedCellList_Item_ExtIEs_t; +typedef struct RNL_Header_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RNL_Header_Item_ExtIEs__extensionValue { + RNL_Header_Item_ExtIEs__extensionValue_PR present; + union RNL_Header_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNL_Header_Item_ExtIEs_t; +typedef struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_u { + Correlation_ID_t Correlation_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_Item_Split_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_t; +typedef struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue { + ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR present; + union ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSeNBReconfComp_SuccessItemExtIEs_t; +typedef struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue { + ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR present; + union ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_t; +typedef struct UE_ContextInformationSeNBModReqExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextInformationSeNBModReqExtIEs__extensionValue { + UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR present; + union UE_ContextInformationSeNBModReqExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformationSeNBModReqExtIEs_t; +typedef struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_u { + Correlation_ID_t Correlation_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_t; +typedef struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue { + E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_ModReqdItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue { + E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqdItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_t; +typedef struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue { + E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_t; +typedef struct E_RABs_SubjectToCounterCheckItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue { + E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR present; + union E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToCounterCheckItemExtIEs_t; +typedef struct UE_ContextInformationRetrieve_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextInformationRetrieve_ExtIEs__extensionValue { + UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR present; + union UE_ContextInformationRetrieve_ExtIEs__extensionValue_u { + UESidelinkAggregateMaximumBitRate_t UESidelinkAggregateMaximumBitRate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformationRetrieve_ExtIEs_t; +typedef struct E_RABs_ToBeSetupRetrieve_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue { + E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_u { + GTPtunnelEndpoint_t GTPtunnelEndpoint; + DL_Forwarding_t DL_Forwarding; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetupRetrieve_ItemExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + RLCMode_t RLCMode; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + DuplicationActivation_t DuplicationActivation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + LCID_t LCID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue { + ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR present; + union ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSgNBReconfComp_SuccessItemExtIEs_t; +typedef struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue { + ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR present; + union ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_t; +typedef struct UE_ContextInformationSgNBModReqExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_ContextInformationSgNBModReqExtIEs__extensionValue { + UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR present; + union UE_ContextInformationSgNBModReqExtIEs__extensionValue_u { + SubscriberProfileIDforRFP_t SubscriberProfileIDforRFP; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformationSgNBModReqExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + RLCMode_t RLCMode; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + DuplicationActivation_t DuplicationActivation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + RLC_Status_t RLC_Status; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + GTPtunnelEndpoint_t GTPtunnelEndpoint; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + LCID_t LCID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue { + E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + GTPtunnelEndpoint_t GTPtunnelEndpoint; + RLC_Status_t RLC_Status; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_u { + RLCMode_t RLCMode; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + NewDRBIDrequest_t NewDRBIDrequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + RLC_Status_t RLC_Status; + LCID_t LCID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue { + E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR present; + union E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_t; +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + PDCPSnLength_t PDCPSnLength; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue { + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR present; + union E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue { + E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR present; + union E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue { + E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present; + union E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_t; +typedef struct ServedEUTRAcellsENDCX2Management_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue { + ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR present; + union ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsENDCX2Management_ExtIEs_t; +typedef struct En_gNBServedCells_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNBServedCells_ExtIEs__extensionValue { + En_gNBServedCells_ExtIEs__extensionValue_PR present; + union En_gNBServedCells_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNBServedCells_ExtIEs_t; +typedef struct ServedNRCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedNRCell_Information_ExtIEs__extensionValue { + ServedNRCell_Information_ExtIEs__extensionValue_PR present; + union ServedNRCell_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCell_Information_ExtIEs_t; +typedef struct FDD_InfoServedNRCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct FDD_InfoServedNRCell_Information_ExtIEs__extensionValue { + FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR present; + union FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_InfoServedNRCell_Information_ExtIEs_t; +typedef struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue { + FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR present; + union FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_InfoNeighbourServedNRCell_Information_ExtIEs_t; +typedef struct TDD_InfoServedNRCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TDD_InfoServedNRCell_Information_ExtIEs__extensionValue { + TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR present; + union TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_InfoServedNRCell_Information_ExtIEs_t; +typedef struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue { + TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR present; + union TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_InfoNeighbourServedNRCell_Information_ExtIEs_t; +typedef struct NRNeighbour_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct NRNeighbour_Information_ExtIEs__extensionValue { + NRNeighbour_Information_ExtIEs__extensionValue_PR present; + union NRNeighbour_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRNeighbour_Information_ExtIEs_t; +typedef struct Limited_list_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct Limited_list_ExtIEs__extensionValue { + Limited_list_ExtIEs__extensionValue_PR present; + union Limited_list_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Limited_list_ExtIEs_t; +typedef struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue { + ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR present; + union ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_t; +typedef struct ServedNRCellsToModify_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedNRCellsToModify_Item_ExtIEs__extensionValue { + ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR present; + union ServedNRCellsToModify_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCellsToModify_Item_ExtIEs_t; +typedef struct ServedNRCellsToActivate_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedNRCellsToActivate_Item_ExtIEs__extensionValue { + ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR present; + union ServedNRCellsToActivate_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCellsToActivate_Item_ExtIEs_t; +typedef struct ActivatedNRCellList_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ActivatedNRCellList_Item_ExtIEs__extensionValue { + ActivatedNRCellList_Item_ExtIEs__extensionValue_PR present; + union ActivatedNRCellList_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ActivatedNRCellList_Item_ExtIEs_t; +typedef struct E_RABs_DataForwardingAddress_ItemExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue { + E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR present; + union E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_DataForwardingAddress_ItemExtIEs_t; +typedef struct ABSInformationFDD_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ABSInformationFDD_ExtIEs__extensionValue { + ABSInformationFDD_ExtIEs__extensionValue_PR present; + union ABSInformationFDD_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABSInformationFDD_ExtIEs_t; +typedef struct ABSInformationTDD_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ABSInformationTDD_ExtIEs__extensionValue { + ABSInformationTDD_ExtIEs__extensionValue_PR present; + union ABSInformationTDD_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABSInformationTDD_ExtIEs_t; +typedef struct ABS_Status_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ABS_Status_ExtIEs__extensionValue { + ABS_Status_ExtIEs__extensionValue_PR present; + union ABS_Status_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ABS_Status_ExtIEs_t; +typedef struct AdditionalSpecialSubframe_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct AdditionalSpecialSubframe_Info_ExtIEs__extensionValue { + AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR present; + union AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalSpecialSubframe_Info_ExtIEs_t; +typedef struct AdditionalSpecialSubframeExtension_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue { + AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR present; + union AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalSpecialSubframeExtension_Info_ExtIEs_t; +typedef struct AllocationAndRetentionPriority_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct AllocationAndRetentionPriority_ExtIEs__extensionValue { + AllocationAndRetentionPriority_ExtIEs__extensionValue_PR present; + union AllocationAndRetentionPriority_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AllocationAndRetentionPriority_ExtIEs_t; +typedef struct AS_SecurityInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct AS_SecurityInformation_ExtIEs__extensionValue { + AS_SecurityInformation_ExtIEs__extensionValue_PR present; + union AS_SecurityInformation_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AS_SecurityInformation_ExtIEs_t; +typedef struct BluetoothMeasurementConfiguration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct BluetoothMeasurementConfiguration_ExtIEs__extensionValue { + BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR present; + union BluetoothMeasurementConfiguration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BluetoothMeasurementConfiguration_ExtIEs_t; +typedef struct CellBasedMDT_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellBasedMDT_ExtIEs__extensionValue { + CellBasedMDT_ExtIEs__extensionValue_PR present; + union CellBasedMDT_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellBasedMDT_ExtIEs_t; +typedef struct CellBasedQMC_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellBasedQMC_ExtIEs__extensionValue { + CellBasedQMC_ExtIEs__extensionValue_PR present; + union CellBasedQMC_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellBasedQMC_ExtIEs_t; +typedef struct CellReplacingInfo_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellReplacingInfo_ExtIEs__extensionValue { + CellReplacingInfo_ExtIEs__extensionValue_PR present; + union CellReplacingInfo_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellReplacingInfo_ExtIEs_t; +typedef struct CellType_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellType_ExtIEs__extensionValue { + CellType_ExtIEs__extensionValue_PR present; + union CellType_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellType_ExtIEs_t; +typedef struct CNTypeRestrictionsItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CNTypeRestrictionsItem_ExtIEs__extensionValue { + CNTypeRestrictionsItem_ExtIEs__extensionValue_PR present; + union CNTypeRestrictionsItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CNTypeRestrictionsItem_ExtIEs_t; +typedef struct CoMPHypothesisSetItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CoMPHypothesisSetItem_ExtIEs__extensionValue { + CoMPHypothesisSetItem_ExtIEs__extensionValue_PR present; + union CoMPHypothesisSetItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPHypothesisSetItem_ExtIEs_t; +typedef struct CoMPInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CoMPInformation_ExtIEs__extensionValue { + CoMPInformation_ExtIEs__extensionValue_PR present; + union CoMPInformation_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformation_ExtIEs_t; +typedef struct CoMPInformationItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CoMPInformationItem_ExtIEs__extensionValue { + CoMPInformationItem_ExtIEs__extensionValue_PR present; + union CoMPInformationItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationItem_ExtIEs_t; +typedef struct CoMPInformationStartTime_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CoMPInformationStartTime_ExtIEs__extensionValue { + CoMPInformationStartTime_ExtIEs__extensionValue_PR present; + union CoMPInformationStartTime_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoMPInformationStartTime_ExtIEs_t; +typedef struct CompositeAvailableCapacity_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CompositeAvailableCapacity_ExtIEs__extensionValue { + CompositeAvailableCapacity_ExtIEs__extensionValue_PR present; + union CompositeAvailableCapacity_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompositeAvailableCapacity_ExtIEs_t; +typedef struct CompositeAvailableCapacityGroup_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CompositeAvailableCapacityGroup_ExtIEs__extensionValue { + CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR present; + union CompositeAvailableCapacityGroup_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompositeAvailableCapacityGroup_ExtIEs_t; +typedef struct COUNTvalue_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct COUNTvalue_ExtIEs__extensionValue { + COUNTvalue_ExtIEs__extensionValue_PR present; + union COUNTvalue_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTvalue_ExtIEs_t; +typedef struct COUNTValueExtended_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct COUNTValueExtended_ExtIEs__extensionValue { + COUNTValueExtended_ExtIEs__extensionValue_PR present; + union COUNTValueExtended_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTValueExtended_ExtIEs_t; +typedef struct COUNTvaluePDCP_SNlength18_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue { + COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR present; + union COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} COUNTvaluePDCP_SNlength18_ExtIEs_t; +typedef struct CriticalityDiagnostics_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CriticalityDiagnostics_ExtIEs__extensionValue { + CriticalityDiagnostics_ExtIEs__extensionValue_PR present; + union CriticalityDiagnostics_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_ExtIEs_t; +typedef struct CriticalityDiagnostics_IE_List_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CriticalityDiagnostics_IE_List_ExtIEs__extensionValue { + CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR present; + union CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_ExtIEs_t; +typedef struct CSIReportList_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CSIReportList_ExtIEs__extensionValue { + CSIReportList_ExtIEs__extensionValue_PR present; + union CSIReportList_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportList_ExtIEs_t; +typedef struct CSIReportPerCSIProcess_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CSIReportPerCSIProcess_ExtIEs__extensionValue { + CSIReportPerCSIProcess_ExtIEs__extensionValue_PR present; + union CSIReportPerCSIProcess_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcess_ExtIEs_t; +typedef struct CSIReportPerCSIProcessItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CSIReportPerCSIProcessItem_ExtIEs__extensionValue { + CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR present; + union CSIReportPerCSIProcessItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSIReportPerCSIProcessItem_ExtIEs_t; +typedef struct DataTrafficResourceIndication_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct DataTrafficResourceIndication_ExtIEs__extensionValue { + DataTrafficResourceIndication_ExtIEs__extensionValue_PR present; + union DataTrafficResourceIndication_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DataTrafficResourceIndication_ExtIEs_t; +typedef struct DeliveryStatus_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct DeliveryStatus_ExtIEs__extensionValue { + DeliveryStatus_ExtIEs__extensionValue_PR present; + union DeliveryStatus_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DeliveryStatus_ExtIEs_t; +typedef struct DynamicNAICSInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct DynamicNAICSInformation_ExtIEs__extensionValue { + DynamicNAICSInformation_ExtIEs__extensionValue_PR present; + union DynamicNAICSInformation_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DynamicNAICSInformation_ExtIEs_t; +typedef struct ECGI_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ECGI_ExtIEs__extensionValue { + ECGI_ExtIEs__extensionValue_PR present; + union ECGI_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ECGI_ExtIEs_t; +typedef struct EnhancedRNTP_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct EnhancedRNTP_ExtIEs__extensionValue { + EnhancedRNTP_ExtIEs__extensionValue_PR present; + union EnhancedRNTP_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EnhancedRNTP_ExtIEs_t; +typedef struct EnhancedRNTPStartTime_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct EnhancedRNTPStartTime_ExtIEs__extensionValue { + EnhancedRNTPStartTime_ExtIEs__extensionValue_PR present; + union EnhancedRNTPStartTime_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EnhancedRNTPStartTime_ExtIEs_t; +typedef struct EN_DC_ResourceConfigurationExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct EN_DC_ResourceConfigurationExtIEs__extensionValue { + EN_DC_ResourceConfigurationExtIEs__extensionValue_PR present; + union EN_DC_ResourceConfigurationExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EN_DC_ResourceConfigurationExtIEs_t; +typedef struct ERABActivityNotifyItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ERABActivityNotifyItem_ExtIEs__extensionValue { + ERABActivityNotifyItem_ExtIEs__extensionValue_PR present; + union ERABActivityNotifyItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ERABActivityNotifyItem_ExtIEs_t; +typedef struct E_RAB_Level_QoS_Parameters_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue { + E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR present; + union E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_u { + Packet_LossRate_t Packet_LossRate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_Level_QoS_Parameters_ExtIEs_t; +typedef struct E_RAB_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RAB_Item_ExtIEs__extensionValue { + E_RAB_Item_ExtIEs__extensionValue_PR present; + union E_RAB_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_Item_ExtIEs_t; +typedef struct E_RABUsageReport_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABUsageReport_Item_ExtIEs__extensionValue { + E_RABUsageReport_Item_ExtIEs__extensionValue_PR present; + union E_RABUsageReport_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABUsageReport_Item_ExtIEs_t; +typedef struct ExpectedUEBehaviour_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ExpectedUEBehaviour_ExtIEs__extensionValue { + ExpectedUEBehaviour_ExtIEs__extensionValue_PR present; + union ExpectedUEBehaviour_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExpectedUEBehaviour_ExtIEs_t; +typedef struct ExpectedUEActivityBehaviour_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ExpectedUEActivityBehaviour_ExtIEs__extensionValue { + ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR present; + union ExpectedUEActivityBehaviour_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExpectedUEActivityBehaviour_ExtIEs_t; +typedef struct ExtendedULInterferenceOverloadInfo_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue { + ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR present; + union ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExtendedULInterferenceOverloadInfo_ExtIEs_t; +typedef struct FDD_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct FDD_Info_ExtIEs__extensionValue { + FDD_Info_ExtIEs__extensionValue_PR present; + union FDD_Info_ExtIEs__extensionValue_u { + EARFCNExtension_t EARFCNExtension; + OffsetOfNbiotChannelNumberToEARFCN_t OffsetOfNbiotChannelNumberToEARFCN; + NRS_NSSS_PowerOffset_t NRS_NSSS_PowerOffset; + NSSS_NumOccasionDifferentPrecoder_t NSSS_NumOccasionDifferentPrecoder; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FDD_Info_ExtIEs_t; +typedef struct ForbiddenTAs_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ForbiddenTAs_Item_ExtIEs__extensionValue { + ForbiddenTAs_Item_ExtIEs__extensionValue_PR present; + union ForbiddenTAs_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenTAs_Item_ExtIEs_t; +typedef struct ForbiddenLAs_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ForbiddenLAs_Item_ExtIEs__extensionValue { + ForbiddenLAs_Item_ExtIEs__extensionValue_PR present; + union ForbiddenLAs_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ForbiddenLAs_Item_ExtIEs_t; +typedef struct FreqBandNrItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct FreqBandNrItem_ExtIEs__extensionValue { + FreqBandNrItem_ExtIEs__extensionValue_PR present; + union FreqBandNrItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqBandNrItem_ExtIEs_t; +typedef struct GBR_QosInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GBR_QosInformation_ExtIEs__extensionValue { + GBR_QosInformation_ExtIEs__extensionValue_PR present; + union GBR_QosInformation_ExtIEs__extensionValue_u { + ExtendedBitRate_t ExtendedBitRate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GBR_QosInformation_ExtIEs_t; +typedef struct GlobalENB_ID_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GlobalENB_ID_ExtIEs__extensionValue { + GlobalENB_ID_ExtIEs__extensionValue_PR present; + union GlobalENB_ID_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_ExtIEs_t; +typedef struct GlobalGNB_ID_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GlobalGNB_ID_ExtIEs__extensionValue { + GlobalGNB_ID_ExtIEs__extensionValue_PR present; + union GlobalGNB_ID_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalGNB_ID_ExtIEs_t; +typedef struct GTPtunnelEndpoint_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GTPtunnelEndpoint_ExtIEs__extensionValue { + GTPtunnelEndpoint_ExtIEs__extensionValue_PR present; + union GTPtunnelEndpoint_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GTPtunnelEndpoint_ExtIEs_t; +typedef struct GU_Group_ID_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GU_Group_ID_ExtIEs__extensionValue { + GU_Group_ID_ExtIEs__extensionValue_PR present; + union GU_Group_ID_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GU_Group_ID_ExtIEs_t; +typedef struct GUMMEI_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GUMMEI_ExtIEs__extensionValue { + GUMMEI_ExtIEs__extensionValue_PR present; + union GUMMEI_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GUMMEI_ExtIEs_t; +typedef struct HandoverRestrictionList_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverRestrictionList_ExtIEs__extensionValue { + HandoverRestrictionList_ExtIEs__extensionValue_PR present; + union HandoverRestrictionList_ExtIEs__extensionValue_u { + NRrestrictioninEPSasSecondaryRAT_t NRrestrictioninEPSasSecondaryRAT; + CNTypeRestrictions_t CNTypeRestrictions; + NRrestrictionin5GS_t NRrestrictionin5GS; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRestrictionList_ExtIEs_t; +typedef struct HWLoadIndicator_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HWLoadIndicator_ExtIEs__extensionValue { + HWLoadIndicator_ExtIEs__extensionValue_PR present; + union HWLoadIndicator_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HWLoadIndicator_ExtIEs_t; +typedef struct LastVisitedEUTRANCellInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct LastVisitedEUTRANCellInformation_ExtIEs__extensionValue { + LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR present; + union LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_u { + Time_UE_StayedInCell_EnhancedGranularity_t Time_UE_StayedInCell_EnhancedGranularity; + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LastVisitedEUTRANCellInformation_ExtIEs_t; +typedef struct LocationReportingInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct LocationReportingInformation_ExtIEs__extensionValue { + LocationReportingInformation_ExtIEs__extensionValue_PR present; + union LocationReportingInformation_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LocationReportingInformation_ExtIEs_t; +typedef struct M1PeriodicReporting_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M1PeriodicReporting_ExtIEs__extensionValue { + M1PeriodicReporting_ExtIEs__extensionValue_PR present; + union M1PeriodicReporting_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M1PeriodicReporting_ExtIEs_t; +typedef struct M1ThresholdEventA2_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M1ThresholdEventA2_ExtIEs__extensionValue { + M1ThresholdEventA2_ExtIEs__extensionValue_PR present; + union M1ThresholdEventA2_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M1ThresholdEventA2_ExtIEs_t; +typedef struct M3Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M3Configuration_ExtIEs__extensionValue { + M3Configuration_ExtIEs__extensionValue_PR present; + union M3Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M3Configuration_ExtIEs_t; +typedef struct M4Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M4Configuration_ExtIEs__extensionValue { + M4Configuration_ExtIEs__extensionValue_PR present; + union M4Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M4Configuration_ExtIEs_t; +typedef struct M5Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M5Configuration_ExtIEs__extensionValue { + M5Configuration_ExtIEs__extensionValue_PR present; + union M5Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M5Configuration_ExtIEs_t; +typedef struct M6Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M6Configuration_ExtIEs__extensionValue { + M6Configuration_ExtIEs__extensionValue_PR present; + union M6Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M6Configuration_ExtIEs_t; +typedef struct M7Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct M7Configuration_ExtIEs__extensionValue { + M7Configuration_ExtIEs__extensionValue_PR present; + union M7Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} M7Configuration_ExtIEs_t; +typedef struct MDT_Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MDT_Configuration_ExtIEs__extensionValue { + MDT_Configuration_ExtIEs__extensionValue_PR present; + union MDT_Configuration_ExtIEs__extensionValue_u { + M3Configuration_t M3Configuration; + M4Configuration_t M4Configuration; + M5Configuration_t M5Configuration; + MDT_Location_Info_t MDT_Location_Info; + MDTPLMNList_t MDTPLMNList; + M6Configuration_t M6Configuration; + M7Configuration_t M7Configuration; + BluetoothMeasurementConfiguration_t BluetoothMeasurementConfiguration; + WLANMeasurementConfiguration_t WLANMeasurementConfiguration; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MDT_Configuration_ExtIEs_t; +typedef struct MeNBResourceCoordinationInformationExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MeNBResourceCoordinationInformationExtIEs__extensionValue { + MeNBResourceCoordinationInformationExtIEs__extensionValue_PR present; + union MeNBResourceCoordinationInformationExtIEs__extensionValue_u { + NRCGI_t NRCGI; + MeNBCoordinationAssistanceInformation_t MeNBCoordinationAssistanceInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeNBResourceCoordinationInformationExtIEs_t; +typedef struct MBSFN_Subframe_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MBSFN_Subframe_Info_ExtIEs__extensionValue { + MBSFN_Subframe_Info_ExtIEs__extensionValue_PR present; + union MBSFN_Subframe_Info_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_Subframe_Info_ExtIEs_t; +typedef struct BandInfo_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct BandInfo_ExtIEs__extensionValue { + BandInfo_ExtIEs__extensionValue_PR present; + union BandInfo_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandInfo_ExtIEs_t; +typedef struct SplitSRB_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SplitSRB_ExtIEs__extensionValue { + SplitSRB_ExtIEs__extensionValue_PR present; + union SplitSRB_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SplitSRB_ExtIEs_t; +typedef struct UENRMeasurement_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UENRMeasurement_ExtIEs__extensionValue { + UENRMeasurement_ExtIEs__extensionValue_PR present; + union UENRMeasurement_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UENRMeasurement_ExtIEs_t; +typedef struct Neighbour_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct Neighbour_Information_ExtIEs__extensionValue { + Neighbour_Information_ExtIEs__extensionValue_PR present; + union Neighbour_Information_ExtIEs__extensionValue_u { + TAC_t TAC; + EARFCNExtension_t EARFCNExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Neighbour_Information_ExtIEs_t; +typedef struct NRFreqInfo_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct NRFreqInfo_ExtIEs__extensionValue { + NRFreqInfo_ExtIEs__extensionValue_PR present; + union NRFreqInfo_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRFreqInfo_ExtIEs_t; +typedef struct NRCGI_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct NRCGI_ExtIEs__extensionValue { + NRCGI_ExtIEs__extensionValue_PR present; + union NRCGI_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_ExtIEs_t; +typedef struct NR_TxBW_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct NR_TxBW_ExtIEs__extensionValue { + NR_TxBW_ExtIEs__extensionValue_PR present; + union NR_TxBW_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NR_TxBW_ExtIEs_t; +typedef struct NRUESecurityCapabilities_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct NRUESecurityCapabilities_ExtIEs__extensionValue { + NRUESecurityCapabilities_ExtIEs__extensionValue_PR present; + union NRUESecurityCapabilities_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRUESecurityCapabilities_ExtIEs_t; +typedef struct PRACH_Configuration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct PRACH_Configuration_ExtIEs__extensionValue { + PRACH_Configuration_ExtIEs__extensionValue_PR present; + union PRACH_Configuration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_Configuration_ExtIEs_t; +typedef struct PLMNAreaBasedQMC_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct PLMNAreaBasedQMC_ExtIEs__extensionValue { + PLMNAreaBasedQMC_ExtIEs__extensionValue_PR present; + union PLMNAreaBasedQMC_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMNAreaBasedQMC_ExtIEs_t; +typedef struct ProSeAuthorized_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ProSeAuthorized_ExtIEs__extensionValue { + ProSeAuthorized_ExtIEs__extensionValue_PR present; + union ProSeAuthorized_ExtIEs__extensionValue_u { + ProSeUEtoNetworkRelaying_t ProSeUEtoNetworkRelaying; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProSeAuthorized_ExtIEs_t; +typedef struct ProtectedEUTRAResourceIndication_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ProtectedEUTRAResourceIndication_ExtIEs__extensionValue { + ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR present; + union ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedEUTRAResourceIndication_ExtIEs_t; +typedef struct ProtectedFootprintTimePattern_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ProtectedFootprintTimePattern_ExtIEs__extensionValue { + ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR present; + union ProtectedFootprintTimePattern_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedFootprintTimePattern_ExtIEs_t; +typedef struct ProtectedResourceList_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ProtectedResourceList_Item_ExtIEs__extensionValue { + ProtectedResourceList_Item_ExtIEs__extensionValue_PR present; + union ProtectedResourceList_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtectedResourceList_Item_ExtIEs_t; +typedef struct RadioResourceStatus_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RadioResourceStatus_ExtIEs__extensionValue { + RadioResourceStatus_ExtIEs__extensionValue_PR present; + union RadioResourceStatus_ExtIEs__extensionValue_u { + DL_scheduling_PDCCH_CCE_usage_t DL_scheduling_PDCCH_CCE_usage; + UL_scheduling_PDCCH_CCE_usage_t UL_scheduling_PDCCH_CCE_usage; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceStatus_ExtIEs_t; +typedef struct RelativeNarrowbandTxPower_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RelativeNarrowbandTxPower_ExtIEs__extensionValue { + RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR present; + union RelativeNarrowbandTxPower_ExtIEs__extensionValue_u { + EnhancedRNTP_t EnhancedRNTP; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RelativeNarrowbandTxPower_ExtIEs_t; +typedef struct ReservedSubframePattern_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ReservedSubframePattern_ExtIEs__extensionValue { + ReservedSubframePattern_ExtIEs__extensionValue_PR present; + union ReservedSubframePattern_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReservedSubframePattern_ExtIEs_t; +typedef struct RLC_Status_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RLC_Status_ExtIEs__extensionValue { + RLC_Status_ExtIEs__extensionValue_PR present; + union RLC_Status_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLC_Status_ExtIEs_t; +typedef struct RSRPMeasurementResult_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RSRPMeasurementResult_ExtIEs__extensionValue { + RSRPMeasurementResult_ExtIEs__extensionValue_PR present; + union RSRPMeasurementResult_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMeasurementResult_ExtIEs_t; +typedef struct RSRPMRList_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RSRPMRList_ExtIEs__extensionValue { + RSRPMRList_ExtIEs__extensionValue_PR present; + union RSRPMRList_ExtIEs__extensionValue_u { + UEID_t UEID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMRList_ExtIEs_t; +typedef struct S1TNLLoadIndicator_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct S1TNLLoadIndicator_ExtIEs__extensionValue { + S1TNLLoadIndicator_ExtIEs__extensionValue_PR present; + union S1TNLLoadIndicator_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} S1TNLLoadIndicator_ExtIEs_t; +typedef struct SecondaryRATUsageReport_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SecondaryRATUsageReport_Item_ExtIEs__extensionValue { + SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR present; + union SecondaryRATUsageReport_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATUsageReport_Item_ExtIEs_t; +typedef struct ServedCell_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedCell_ExtIEs__extensionValue { + ServedCell_ExtIEs__extensionValue_PR present; + union ServedCell_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCell_ExtIEs_t; +typedef struct ServedCell_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ServedCell_Information_ExtIEs__extensionValue { + ServedCell_Information_ExtIEs__extensionValue_PR present; + union ServedCell_Information_ExtIEs__extensionValue_u { + Number_of_Antennaports_t Number_of_Antennaports; + PRACH_Configuration_t PRACH_Configuration; + MBSFN_Subframe_Infolist_t MBSFN_Subframe_Infolist; + CSG_Id_t CSG_Id; + MBMS_Service_Area_Identity_List_t MBMS_Service_Area_Identity_List; + MultibandInfoList_t MultibandInfoList; + FreqBandIndicatorPriority_t FreqBandIndicatorPriority; + BandwidthReducedSI_t BandwidthReducedSI; + ProtectedEUTRAResourceIndication_t ProtectedEUTRAResourceIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCell_Information_ExtIEs_t; +typedef struct SgNBResourceCoordinationInformationExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBResourceCoordinationInformationExtIEs__extensionValue { + SgNBResourceCoordinationInformationExtIEs__extensionValue_PR present; + union SgNBResourceCoordinationInformationExtIEs__extensionValue_u { + ECGI_t ECGI; + SgNBCoordinationAssistanceInformation_t SgNBCoordinationAssistanceInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBResourceCoordinationInformationExtIEs_t; +typedef struct SpecialSubframe_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SpecialSubframe_Info_ExtIEs__extensionValue { + SpecialSubframe_Info_ExtIEs__extensionValue_PR present; + union SpecialSubframe_Info_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SpecialSubframe_Info_ExtIEs_t; +typedef struct SubbandCQI_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SubbandCQI_ExtIEs__extensionValue { + SubbandCQI_ExtIEs__extensionValue_PR present; + union SubbandCQI_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQI_ExtIEs_t; +typedef struct Subscription_Based_UE_DifferentiationInfo_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue { + Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR present; + union Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Subscription_Based_UE_DifferentiationInfo_ExtIEs_t; +typedef struct ScheduledCommunicationTime_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ScheduledCommunicationTime_ExtIEs__extensionValue { + ScheduledCommunicationTime_ExtIEs__extensionValue_PR present; + union ScheduledCommunicationTime_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ScheduledCommunicationTime_ExtIEs_t; +typedef struct SubbandCQIItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SubbandCQIItem_ExtIEs__extensionValue { + SubbandCQIItem_ExtIEs__extensionValue_PR present; + union SubbandCQIItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQIItem_ExtIEs_t; +typedef struct SULInformation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SULInformation_ExtIEs__extensionValue { + SULInformation_ExtIEs__extensionValue_PR present; + union SULInformation_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SULInformation_ExtIEs_t; +typedef struct SupportedSULFreqBandItem_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SupportedSULFreqBandItem_ExtIEs__extensionValue { + SupportedSULFreqBandItem_ExtIEs__extensionValue_PR present; + union SupportedSULFreqBandItem_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedSULFreqBandItem_ExtIEs_t; +typedef struct TABasedMDT_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TABasedMDT_ExtIEs__extensionValue { + TABasedMDT_ExtIEs__extensionValue_PR present; + union TABasedMDT_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TABasedMDT_ExtIEs_t; +typedef struct TAIBasedMDT_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TAIBasedMDT_ExtIEs__extensionValue { + TAIBasedMDT_ExtIEs__extensionValue_PR present; + union TAIBasedMDT_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIBasedMDT_ExtIEs_t; +typedef struct TAI_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TAI_Item_ExtIEs__extensionValue { + TAI_Item_ExtIEs__extensionValue_PR present; + union TAI_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAI_Item_ExtIEs_t; +typedef struct TABasedQMC_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TABasedQMC_ExtIEs__extensionValue { + TABasedQMC_ExtIEs__extensionValue_PR present; + union TABasedQMC_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TABasedQMC_ExtIEs_t; +typedef struct TAIBasedQMC_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TAIBasedQMC_ExtIEs__extensionValue { + TAIBasedQMC_ExtIEs__extensionValue_PR present; + union TAIBasedQMC_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIBasedQMC_ExtIEs_t; +typedef struct TDD_Info_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TDD_Info_ExtIEs__extensionValue { + TDD_Info_ExtIEs__extensionValue_PR present; + union TDD_Info_ExtIEs__extensionValue_u { + AdditionalSpecialSubframe_Info_t AdditionalSpecialSubframe_Info; + EARFCNExtension_t EARFCNExtension; + AdditionalSpecialSubframeExtension_Info_t AdditionalSpecialSubframeExtension_Info; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_Info_ExtIEs_t; +typedef struct TraceActivation_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct TraceActivation_ExtIEs__extensionValue { + TraceActivation_ExtIEs__extensionValue_PR present; + union TraceActivation_ExtIEs__extensionValue_u { + MDT_Configuration_t MDT_Configuration; + UEAppLayerMeasConfig_t UEAppLayerMeasConfig; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TraceActivation_ExtIEs_t; +typedef struct Tunnel_Information_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct Tunnel_Information_ExtIEs__extensionValue { + Tunnel_Information_ExtIEs__extensionValue_PR present; + union Tunnel_Information_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Tunnel_Information_ExtIEs_t; +typedef struct UEAggregate_MaximumBitrate_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UEAggregate_MaximumBitrate_ExtIEs__extensionValue { + UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR present; + union UEAggregate_MaximumBitrate_ExtIEs__extensionValue_u { + ExtendedBitRate_t ExtendedBitRate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEAggregate_MaximumBitrate_ExtIEs_t; +typedef struct UEAppLayerMeasConfig_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UEAppLayerMeasConfig_ExtIEs__extensionValue { + UEAppLayerMeasConfig_ExtIEs__extensionValue_PR present; + union UEAppLayerMeasConfig_ExtIEs__extensionValue_u { + ServiceType_t ServiceType; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEAppLayerMeasConfig_ExtIEs_t; +typedef struct UESecurityCapabilities_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UESecurityCapabilities_ExtIEs__extensionValue { + UESecurityCapabilities_ExtIEs__extensionValue_PR present; + union UESecurityCapabilities_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UESecurityCapabilities_ExtIEs_t; +typedef struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue { + UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR present; + union UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_t; +typedef struct UEsToBeResetList_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UEsToBeResetList_Item_ExtIEs__extensionValue { + UEsToBeResetList_Item_ExtIEs__extensionValue_PR present; + union UEsToBeResetList_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEsToBeResetList_Item_ExtIEs_t; +typedef struct ULandDLSharing_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ULandDLSharing_ExtIEs__extensionValue { + ULandDLSharing_ExtIEs__extensionValue_PR present; + union ULandDLSharing_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULandDLSharing_ExtIEs_t; +typedef struct ULConfiguration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ULConfiguration_ExtIEs__extensionValue { + ULConfiguration_ExtIEs__extensionValue_PR present; + union ULConfiguration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULConfiguration_ExtIEs_t; +typedef struct UL_HighInterferenceIndicationInfo_Item_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue { + UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR present; + union UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_HighInterferenceIndicationInfo_Item_ExtIEs_t; +typedef struct ULOnlySharing_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ULOnlySharing_ExtIEs__extensionValue { + ULOnlySharing_ExtIEs__extensionValue_PR present; + union ULOnlySharing_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULOnlySharing_ExtIEs_t; +typedef struct UsableABSInformationFDD_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UsableABSInformationFDD_ExtIEs__extensionValue { + UsableABSInformationFDD_ExtIEs__extensionValue_PR present; + union UsableABSInformationFDD_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UsableABSInformationFDD_ExtIEs_t; +typedef struct UsableABSInformationTDD_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UsableABSInformationTDD_ExtIEs__extensionValue { + UsableABSInformationTDD_ExtIEs__extensionValue_PR present; + union UsableABSInformationTDD_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UsableABSInformationTDD_ExtIEs_t; +typedef struct V2XServicesAuthorized_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct V2XServicesAuthorized_ExtIEs__extensionValue { + V2XServicesAuthorized_ExtIEs__extensionValue_PR present; + union V2XServicesAuthorized_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} V2XServicesAuthorized_ExtIEs_t; +typedef struct WidebandCQI_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct WidebandCQI_ExtIEs__extensionValue { + WidebandCQI_ExtIEs__extensionValue_PR present; + union WidebandCQI_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WidebandCQI_ExtIEs_t; +typedef struct WLANMeasurementConfiguration_ExtIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct WLANMeasurementConfiguration_ExtIEs__extensionValue { + WLANMeasurementConfiguration_ExtIEs__extensionValue_PR present; + union WLANMeasurementConfiguration_ExtIEs__extensionValue_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } extensionValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WLANMeasurementConfiguration_ExtIEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformation_ExtIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_UE_ContextInformation_ExtIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetup_ItemExtIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ItemExtIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSeNB_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSeNB_ItemExtIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtWT_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtWT_ItemExtIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtWT_ItemExtIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSgNB_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSgNB_ItemExtIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_Item_ExtIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_Item_ExtIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellInformation_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellInformation_Item_ExtIEs_specs_29; +extern asn_TYPE_member_t asn_MBR_CellInformation_Item_ExtIEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToModify_Item_ExtIEs_specs_33; +extern asn_TYPE_member_t asn_MBR_ServedCellsToModify_Item_ExtIEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellToReport_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellToReport_Item_ExtIEs_specs_37; +extern asn_TYPE_member_t asn_MBR_CellToReport_Item_ExtIEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementInitiationResult_Item_ExtIEs_specs_41; +extern asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_Item_ExtIEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementFailureCause_Item_ExtIEs_specs_45; +extern asn_TYPE_member_t asn_MBR_MeasurementFailureCause_Item_ExtIEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CompleteFailureCauseInformation_Item_ExtIEs_specs_49; +extern asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_Item_ExtIEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellMeasurementResult_Item_ExtIEs_specs_53; +extern asn_TYPE_member_t asn_MBR_CellMeasurementResult_Item_ExtIEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToActivate_Item_ExtIEs_specs_57; +extern asn_TYPE_member_t asn_MBR_ServedCellsToActivate_Item_ExtIEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_ActivatedCellList_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ActivatedCellList_Item_ExtIEs_specs_61; +extern asn_TYPE_member_t asn_MBR_ActivatedCellList_Item_ExtIEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_RNL_Header_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RNL_Header_Item_ExtIEs_specs_65; +extern asn_TYPE_member_t asn_MBR_RNL_Header_Item_ExtIEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSeNBModReqExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationSeNBModReqExtIEs_specs_93; +extern asn_TYPE_member_t asn_MBR_UE_ContextInformationSeNBModReqExtIEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqdItemExtIEs_145[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheckItemExtIEs_165[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationRetrieve_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationRetrieve_ExtIEs_specs_169; +extern asn_TYPE_member_t asn_MBR_UE_ContextInformationRetrieve_ExtIEs_169[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSgNBModReqExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationSgNBModReqExtIEs_specs_209; +extern asn_TYPE_member_t asn_MBR_UE_ContextInformationSgNBModReqExtIEs_209[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsENDCX2Management_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361; +extern asn_TYPE_member_t asn_MBR_ServedEUTRAcellsENDCX2Management_ExtIEs_361[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNBServedCells_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNBServedCells_ExtIEs_specs_365; +extern asn_TYPE_member_t asn_MBR_En_gNBServedCells_ExtIEs_365[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCell_Information_ExtIEs_specs_369; +extern asn_TYPE_member_t asn_MBR_ServedNRCell_Information_ExtIEs_369[3]; +extern asn_TYPE_descriptor_t asn_DEF_FDD_InfoServedNRCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoServedNRCell_Information_ExtIEs_specs_373; +extern asn_TYPE_member_t asn_MBR_FDD_InfoServedNRCell_Information_ExtIEs_373[3]; +extern asn_TYPE_descriptor_t asn_DEF_FDD_InfoNeighbourServedNRCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377; +extern asn_TYPE_member_t asn_MBR_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377[3]; +extern asn_TYPE_descriptor_t asn_DEF_TDD_InfoServedNRCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoServedNRCell_Information_ExtIEs_specs_381; +extern asn_TYPE_member_t asn_MBR_TDD_InfoServedNRCell_Information_ExtIEs_381[3]; +extern asn_TYPE_descriptor_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385; +extern asn_TYPE_member_t asn_MBR_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385[3]; +extern asn_TYPE_descriptor_t asn_DEF_NRNeighbour_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_NRNeighbour_Information_ExtIEs_specs_389; +extern asn_TYPE_member_t asn_MBR_NRNeighbour_Information_ExtIEs_389[3]; +extern asn_TYPE_descriptor_t asn_DEF_Limited_list_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_Limited_list_ExtIEs_specs_393; +extern asn_TYPE_member_t asn_MBR_Limited_list_ExtIEs_393[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397; +extern asn_TYPE_member_t asn_MBR_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToModify_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToModify_Item_ExtIEs_specs_401; +extern asn_TYPE_member_t asn_MBR_ServedNRCellsToModify_Item_ExtIEs_401[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToActivate_Item_ExtIEs_specs_405; +extern asn_TYPE_member_t asn_MBR_ServedNRCellsToActivate_Item_ExtIEs_405[3]; +extern asn_TYPE_descriptor_t asn_DEF_ActivatedNRCellList_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ActivatedNRCellList_Item_ExtIEs_specs_409; +extern asn_TYPE_member_t asn_MBR_ActivatedNRCellList_Item_ExtIEs_409[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_ItemExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413; +extern asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_ItemExtIEs_413[3]; +extern asn_TYPE_descriptor_t asn_DEF_ABSInformationFDD_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ABSInformationFDD_ExtIEs_specs_417; +extern asn_TYPE_member_t asn_MBR_ABSInformationFDD_ExtIEs_417[3]; +extern asn_TYPE_descriptor_t asn_DEF_ABSInformationTDD_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ABSInformationTDD_ExtIEs_specs_421; +extern asn_TYPE_member_t asn_MBR_ABSInformationTDD_ExtIEs_421[3]; +extern asn_TYPE_descriptor_t asn_DEF_ABS_Status_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ABS_Status_ExtIEs_specs_425; +extern asn_TYPE_member_t asn_MBR_ABS_Status_ExtIEs_425[3]; +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframe_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframe_Info_ExtIEs_specs_429; +extern asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframe_Info_ExtIEs_429[3]; +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpecialSubframeExtension_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433; +extern asn_TYPE_member_t asn_MBR_AdditionalSpecialSubframeExtension_Info_ExtIEs_433[3]; +extern asn_TYPE_descriptor_t asn_DEF_AllocationAndRetentionPriority_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_AllocationAndRetentionPriority_ExtIEs_specs_437; +extern asn_TYPE_member_t asn_MBR_AllocationAndRetentionPriority_ExtIEs_437[3]; +extern asn_TYPE_descriptor_t asn_DEF_AS_SecurityInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_AS_SecurityInformation_ExtIEs_specs_441; +extern asn_TYPE_member_t asn_MBR_AS_SecurityInformation_ExtIEs_441[3]; +extern asn_TYPE_descriptor_t asn_DEF_BluetoothMeasurementConfiguration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_BluetoothMeasurementConfiguration_ExtIEs_specs_445; +extern asn_TYPE_member_t asn_MBR_BluetoothMeasurementConfiguration_ExtIEs_445[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellBasedMDT_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellBasedMDT_ExtIEs_specs_449; +extern asn_TYPE_member_t asn_MBR_CellBasedMDT_ExtIEs_449[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellBasedQMC_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellBasedQMC_ExtIEs_specs_453; +extern asn_TYPE_member_t asn_MBR_CellBasedQMC_ExtIEs_453[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellReplacingInfo_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellReplacingInfo_ExtIEs_specs_457; +extern asn_TYPE_member_t asn_MBR_CellReplacingInfo_ExtIEs_457[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellType_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellType_ExtIEs_specs_461; +extern asn_TYPE_member_t asn_MBR_CellType_ExtIEs_461[3]; +extern asn_TYPE_descriptor_t asn_DEF_CNTypeRestrictionsItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CNTypeRestrictionsItem_ExtIEs_specs_465; +extern asn_TYPE_member_t asn_MBR_CNTypeRestrictionsItem_ExtIEs_465[3]; +extern asn_TYPE_descriptor_t asn_DEF_CoMPHypothesisSetItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPHypothesisSetItem_ExtIEs_specs_469; +extern asn_TYPE_member_t asn_MBR_CoMPHypothesisSetItem_ExtIEs_469[3]; +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPInformation_ExtIEs_specs_473; +extern asn_TYPE_member_t asn_MBR_CoMPInformation_ExtIEs_473[3]; +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformationItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPInformationItem_ExtIEs_specs_477; +extern asn_TYPE_member_t asn_MBR_CoMPInformationItem_ExtIEs_477[3]; +extern asn_TYPE_descriptor_t asn_DEF_CoMPInformationStartTime_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CoMPInformationStartTime_ExtIEs_specs_481; +extern asn_TYPE_member_t asn_MBR_CoMPInformationStartTime_ExtIEs_481[3]; +extern asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacity_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacity_ExtIEs_specs_485; +extern asn_TYPE_member_t asn_MBR_CompositeAvailableCapacity_ExtIEs_485[3]; +extern asn_TYPE_descriptor_t asn_DEF_CompositeAvailableCapacityGroup_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CompositeAvailableCapacityGroup_ExtIEs_specs_489; +extern asn_TYPE_member_t asn_MBR_CompositeAvailableCapacityGroup_ExtIEs_489[3]; +extern asn_TYPE_descriptor_t asn_DEF_COUNTvalue_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTvalue_ExtIEs_specs_493; +extern asn_TYPE_member_t asn_MBR_COUNTvalue_ExtIEs_493[3]; +extern asn_TYPE_descriptor_t asn_DEF_COUNTValueExtended_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTValueExtended_ExtIEs_specs_497; +extern asn_TYPE_member_t asn_MBR_COUNTValueExtended_ExtIEs_497[3]; +extern asn_TYPE_descriptor_t asn_DEF_COUNTvaluePDCP_SNlength18_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501; +extern asn_TYPE_member_t asn_MBR_COUNTvaluePDCP_SNlength18_ExtIEs_501[3]; +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_ExtIEs_specs_505; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_ExtIEs_505[3]; +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_ExtIEs_specs_509; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_ExtIEs_509[3]; +extern asn_TYPE_descriptor_t asn_DEF_CSIReportList_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CSIReportList_ExtIEs_specs_513; +extern asn_TYPE_member_t asn_MBR_CSIReportList_ExtIEs_513[3]; +extern asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcess_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CSIReportPerCSIProcess_ExtIEs_specs_517; +extern asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcess_ExtIEs_517[3]; +extern asn_TYPE_descriptor_t asn_DEF_CSIReportPerCSIProcessItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CSIReportPerCSIProcessItem_ExtIEs_specs_521; +extern asn_TYPE_member_t asn_MBR_CSIReportPerCSIProcessItem_ExtIEs_521[3]; +extern asn_TYPE_descriptor_t asn_DEF_DataTrafficResourceIndication_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_DataTrafficResourceIndication_ExtIEs_specs_525; +extern asn_TYPE_member_t asn_MBR_DataTrafficResourceIndication_ExtIEs_525[3]; +extern asn_TYPE_descriptor_t asn_DEF_DeliveryStatus_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_DeliveryStatus_ExtIEs_specs_529; +extern asn_TYPE_member_t asn_MBR_DeliveryStatus_ExtIEs_529[3]; +extern asn_TYPE_descriptor_t asn_DEF_DynamicNAICSInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_DynamicNAICSInformation_ExtIEs_specs_533; +extern asn_TYPE_member_t asn_MBR_DynamicNAICSInformation_ExtIEs_533[3]; +extern asn_TYPE_descriptor_t asn_DEF_ECGI_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ECGI_ExtIEs_specs_537; +extern asn_TYPE_member_t asn_MBR_ECGI_ExtIEs_537[3]; +extern asn_TYPE_descriptor_t asn_DEF_EnhancedRNTP_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTP_ExtIEs_specs_541; +extern asn_TYPE_member_t asn_MBR_EnhancedRNTP_ExtIEs_541[3]; +extern asn_TYPE_descriptor_t asn_DEF_EnhancedRNTPStartTime_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_EnhancedRNTPStartTime_ExtIEs_specs_545; +extern asn_TYPE_member_t asn_MBR_EnhancedRNTPStartTime_ExtIEs_545[3]; +extern asn_TYPE_descriptor_t asn_DEF_EN_DC_ResourceConfigurationExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_EN_DC_ResourceConfigurationExtIEs_specs_549; +extern asn_TYPE_member_t asn_MBR_EN_DC_ResourceConfigurationExtIEs_549[3]; +extern asn_TYPE_descriptor_t asn_DEF_ERABActivityNotifyItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ERABActivityNotifyItem_ExtIEs_specs_553; +extern asn_TYPE_member_t asn_MBR_ERABActivityNotifyItem_ExtIEs_553[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_Level_QoS_Parameters_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557; +extern asn_TYPE_member_t asn_MBR_E_RAB_Level_QoS_Parameters_ExtIEs_557[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RAB_Item_ExtIEs_specs_561; +extern asn_TYPE_member_t asn_MBR_E_RAB_Item_ExtIEs_561[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_Item_ExtIEs_specs_565; +extern asn_TYPE_member_t asn_MBR_E_RABUsageReport_Item_ExtIEs_565[3]; +extern asn_TYPE_descriptor_t asn_DEF_ExpectedUEBehaviour_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEBehaviour_ExtIEs_specs_569; +extern asn_TYPE_member_t asn_MBR_ExpectedUEBehaviour_ExtIEs_569[3]; +extern asn_TYPE_descriptor_t asn_DEF_ExpectedUEActivityBehaviour_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ExpectedUEActivityBehaviour_ExtIEs_specs_573; +extern asn_TYPE_member_t asn_MBR_ExpectedUEActivityBehaviour_ExtIEs_573[3]; +extern asn_TYPE_descriptor_t asn_DEF_ExtendedULInterferenceOverloadInfo_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577; +extern asn_TYPE_member_t asn_MBR_ExtendedULInterferenceOverloadInfo_ExtIEs_577[3]; +extern asn_TYPE_descriptor_t asn_DEF_FDD_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_FDD_Info_ExtIEs_specs_581; +extern asn_TYPE_member_t asn_MBR_FDD_Info_ExtIEs_581[3]; +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenTAs_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ForbiddenTAs_Item_ExtIEs_specs_585; +extern asn_TYPE_member_t asn_MBR_ForbiddenTAs_Item_ExtIEs_585[3]; +extern asn_TYPE_descriptor_t asn_DEF_ForbiddenLAs_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ForbiddenLAs_Item_ExtIEs_specs_589; +extern asn_TYPE_member_t asn_MBR_ForbiddenLAs_Item_ExtIEs_589[3]; +extern asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_ExtIEs_specs_593; +extern asn_TYPE_member_t asn_MBR_FreqBandNrItem_ExtIEs_593[3]; +extern asn_TYPE_descriptor_t asn_DEF_GBR_QosInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GBR_QosInformation_ExtIEs_specs_597; +extern asn_TYPE_member_t asn_MBR_GBR_QosInformation_ExtIEs_597[3]; +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_ExtIEs_specs_601; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_ExtIEs_601[3]; +extern asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_ExtIEs_specs_605; +extern asn_TYPE_member_t asn_MBR_GlobalGNB_ID_ExtIEs_605[3]; +extern asn_TYPE_descriptor_t asn_DEF_GTPtunnelEndpoint_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GTPtunnelEndpoint_ExtIEs_specs_609; +extern asn_TYPE_member_t asn_MBR_GTPtunnelEndpoint_ExtIEs_609[3]; +extern asn_TYPE_descriptor_t asn_DEF_GU_Group_ID_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GU_Group_ID_ExtIEs_specs_613; +extern asn_TYPE_member_t asn_MBR_GU_Group_ID_ExtIEs_613[3]; +extern asn_TYPE_descriptor_t asn_DEF_GUMMEI_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_ExtIEs_specs_617; +extern asn_TYPE_member_t asn_MBR_GUMMEI_ExtIEs_617[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverRestrictionList_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverRestrictionList_ExtIEs_specs_621; +extern asn_TYPE_member_t asn_MBR_HandoverRestrictionList_ExtIEs_621[3]; +extern asn_TYPE_descriptor_t asn_DEF_HWLoadIndicator_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HWLoadIndicator_ExtIEs_specs_625; +extern asn_TYPE_member_t asn_MBR_HWLoadIndicator_ExtIEs_625[3]; +extern asn_TYPE_descriptor_t asn_DEF_LastVisitedEUTRANCellInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_LastVisitedEUTRANCellInformation_ExtIEs_specs_629; +extern asn_TYPE_member_t asn_MBR_LastVisitedEUTRANCellInformation_ExtIEs_629[3]; +extern asn_TYPE_descriptor_t asn_DEF_LocationReportingInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_LocationReportingInformation_ExtIEs_specs_633; +extern asn_TYPE_member_t asn_MBR_LocationReportingInformation_ExtIEs_633[3]; +extern asn_TYPE_descriptor_t asn_DEF_M1PeriodicReporting_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M1PeriodicReporting_ExtIEs_specs_637; +extern asn_TYPE_member_t asn_MBR_M1PeriodicReporting_ExtIEs_637[3]; +extern asn_TYPE_descriptor_t asn_DEF_M1ThresholdEventA2_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M1ThresholdEventA2_ExtIEs_specs_641; +extern asn_TYPE_member_t asn_MBR_M1ThresholdEventA2_ExtIEs_641[3]; +extern asn_TYPE_descriptor_t asn_DEF_M3Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M3Configuration_ExtIEs_specs_645; +extern asn_TYPE_member_t asn_MBR_M3Configuration_ExtIEs_645[3]; +extern asn_TYPE_descriptor_t asn_DEF_M4Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M4Configuration_ExtIEs_specs_649; +extern asn_TYPE_member_t asn_MBR_M4Configuration_ExtIEs_649[3]; +extern asn_TYPE_descriptor_t asn_DEF_M5Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M5Configuration_ExtIEs_specs_653; +extern asn_TYPE_member_t asn_MBR_M5Configuration_ExtIEs_653[3]; +extern asn_TYPE_descriptor_t asn_DEF_M6Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M6Configuration_ExtIEs_specs_657; +extern asn_TYPE_member_t asn_MBR_M6Configuration_ExtIEs_657[3]; +extern asn_TYPE_descriptor_t asn_DEF_M7Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_M7Configuration_ExtIEs_specs_661; +extern asn_TYPE_member_t asn_MBR_M7Configuration_ExtIEs_661[3]; +extern asn_TYPE_descriptor_t asn_DEF_MDT_Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MDT_Configuration_ExtIEs_specs_665; +extern asn_TYPE_member_t asn_MBR_MDT_Configuration_ExtIEs_665[3]; +extern asn_TYPE_descriptor_t asn_DEF_MeNBResourceCoordinationInformationExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MeNBResourceCoordinationInformationExtIEs_specs_669; +extern asn_TYPE_member_t asn_MBR_MeNBResourceCoordinationInformationExtIEs_669[3]; +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_Subframe_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MBSFN_Subframe_Info_ExtIEs_specs_673; +extern asn_TYPE_member_t asn_MBR_MBSFN_Subframe_Info_ExtIEs_673[3]; +extern asn_TYPE_descriptor_t asn_DEF_BandInfo_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_BandInfo_ExtIEs_specs_677; +extern asn_TYPE_member_t asn_MBR_BandInfo_ExtIEs_677[3]; +extern asn_TYPE_descriptor_t asn_DEF_SplitSRB_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SplitSRB_ExtIEs_specs_681; +extern asn_TYPE_member_t asn_MBR_SplitSRB_ExtIEs_681[3]; +extern asn_TYPE_descriptor_t asn_DEF_UENRMeasurement_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UENRMeasurement_ExtIEs_specs_685; +extern asn_TYPE_member_t asn_MBR_UENRMeasurement_ExtIEs_685[3]; +extern asn_TYPE_descriptor_t asn_DEF_Neighbour_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_Neighbour_Information_ExtIEs_specs_689; +extern asn_TYPE_member_t asn_MBR_Neighbour_Information_ExtIEs_689[3]; +extern asn_TYPE_descriptor_t asn_DEF_NRFreqInfo_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_NRFreqInfo_ExtIEs_specs_693; +extern asn_TYPE_member_t asn_MBR_NRFreqInfo_ExtIEs_693[3]; +extern asn_TYPE_descriptor_t asn_DEF_NRCGI_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_ExtIEs_specs_697; +extern asn_TYPE_member_t asn_MBR_NRCGI_ExtIEs_697[3]; +extern asn_TYPE_descriptor_t asn_DEF_NR_TxBW_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_NR_TxBW_ExtIEs_specs_701; +extern asn_TYPE_member_t asn_MBR_NR_TxBW_ExtIEs_701[3]; +extern asn_TYPE_descriptor_t asn_DEF_NRUESecurityCapabilities_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_NRUESecurityCapabilities_ExtIEs_specs_705; +extern asn_TYPE_member_t asn_MBR_NRUESecurityCapabilities_ExtIEs_705[3]; +extern asn_TYPE_descriptor_t asn_DEF_PRACH_Configuration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_PRACH_Configuration_ExtIEs_specs_709; +extern asn_TYPE_member_t asn_MBR_PRACH_Configuration_ExtIEs_709[3]; +extern asn_TYPE_descriptor_t asn_DEF_PLMNAreaBasedQMC_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_PLMNAreaBasedQMC_ExtIEs_specs_713; +extern asn_TYPE_member_t asn_MBR_PLMNAreaBasedQMC_ExtIEs_713[3]; +extern asn_TYPE_descriptor_t asn_DEF_ProSeAuthorized_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ProSeAuthorized_ExtIEs_specs_717; +extern asn_TYPE_member_t asn_MBR_ProSeAuthorized_ExtIEs_717[3]; +extern asn_TYPE_descriptor_t asn_DEF_ProtectedEUTRAResourceIndication_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedEUTRAResourceIndication_ExtIEs_specs_721; +extern asn_TYPE_member_t asn_MBR_ProtectedEUTRAResourceIndication_ExtIEs_721[3]; +extern asn_TYPE_descriptor_t asn_DEF_ProtectedFootprintTimePattern_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedFootprintTimePattern_ExtIEs_specs_725; +extern asn_TYPE_member_t asn_MBR_ProtectedFootprintTimePattern_ExtIEs_725[3]; +extern asn_TYPE_descriptor_t asn_DEF_ProtectedResourceList_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ProtectedResourceList_Item_ExtIEs_specs_729; +extern asn_TYPE_member_t asn_MBR_ProtectedResourceList_Item_ExtIEs_729[3]; +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceStatus_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RadioResourceStatus_ExtIEs_specs_733; +extern asn_TYPE_member_t asn_MBR_RadioResourceStatus_ExtIEs_733[3]; +extern asn_TYPE_descriptor_t asn_DEF_RelativeNarrowbandTxPower_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RelativeNarrowbandTxPower_ExtIEs_specs_737; +extern asn_TYPE_member_t asn_MBR_RelativeNarrowbandTxPower_ExtIEs_737[3]; +extern asn_TYPE_descriptor_t asn_DEF_ReservedSubframePattern_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ReservedSubframePattern_ExtIEs_specs_741; +extern asn_TYPE_member_t asn_MBR_ReservedSubframePattern_ExtIEs_741[3]; +extern asn_TYPE_descriptor_t asn_DEF_RLC_Status_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RLC_Status_ExtIEs_specs_745; +extern asn_TYPE_member_t asn_MBR_RLC_Status_ExtIEs_745[3]; +extern asn_TYPE_descriptor_t asn_DEF_RSRPMeasurementResult_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RSRPMeasurementResult_ExtIEs_specs_749; +extern asn_TYPE_member_t asn_MBR_RSRPMeasurementResult_ExtIEs_749[3]; +extern asn_TYPE_descriptor_t asn_DEF_RSRPMRList_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RSRPMRList_ExtIEs_specs_753; +extern asn_TYPE_member_t asn_MBR_RSRPMRList_ExtIEs_753[3]; +extern asn_TYPE_descriptor_t asn_DEF_S1TNLLoadIndicator_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_S1TNLLoadIndicator_ExtIEs_specs_757; +extern asn_TYPE_member_t asn_MBR_S1TNLLoadIndicator_ExtIEs_757[3]; +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_Item_ExtIEs_specs_761; +extern asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_Item_ExtIEs_761[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedCell_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCell_ExtIEs_specs_765; +extern asn_TYPE_member_t asn_MBR_ServedCell_ExtIEs_765[3]; +extern asn_TYPE_descriptor_t asn_DEF_ServedCell_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCell_Information_ExtIEs_specs_769; +extern asn_TYPE_member_t asn_MBR_ServedCell_Information_ExtIEs_769[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBResourceCoordinationInformationExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBResourceCoordinationInformationExtIEs_specs_773; +extern asn_TYPE_member_t asn_MBR_SgNBResourceCoordinationInformationExtIEs_773[3]; +extern asn_TYPE_descriptor_t asn_DEF_SpecialSubframe_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SpecialSubframe_Info_ExtIEs_specs_777; +extern asn_TYPE_member_t asn_MBR_SpecialSubframe_Info_ExtIEs_777[3]; +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQI_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SubbandCQI_ExtIEs_specs_781; +extern asn_TYPE_member_t asn_MBR_SubbandCQI_ExtIEs_781[3]; +extern asn_TYPE_descriptor_t asn_DEF_Subscription_Based_UE_DifferentiationInfo_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785; +extern asn_TYPE_member_t asn_MBR_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785[3]; +extern asn_TYPE_descriptor_t asn_DEF_ScheduledCommunicationTime_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ScheduledCommunicationTime_ExtIEs_specs_789; +extern asn_TYPE_member_t asn_MBR_ScheduledCommunicationTime_ExtIEs_789[3]; +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQIItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SubbandCQIItem_ExtIEs_specs_793; +extern asn_TYPE_member_t asn_MBR_SubbandCQIItem_ExtIEs_793[3]; +extern asn_TYPE_descriptor_t asn_DEF_SULInformation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SULInformation_ExtIEs_specs_797; +extern asn_TYPE_member_t asn_MBR_SULInformation_ExtIEs_797[3]; +extern asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_ExtIEs_specs_801; +extern asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_ExtIEs_801[3]; +extern asn_TYPE_descriptor_t asn_DEF_TABasedMDT_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TABasedMDT_ExtIEs_specs_805; +extern asn_TYPE_member_t asn_MBR_TABasedMDT_ExtIEs_805[3]; +extern asn_TYPE_descriptor_t asn_DEF_TAIBasedMDT_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TAIBasedMDT_ExtIEs_specs_809; +extern asn_TYPE_member_t asn_MBR_TAIBasedMDT_ExtIEs_809[3]; +extern asn_TYPE_descriptor_t asn_DEF_TAI_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TAI_Item_ExtIEs_specs_813; +extern asn_TYPE_member_t asn_MBR_TAI_Item_ExtIEs_813[3]; +extern asn_TYPE_descriptor_t asn_DEF_TABasedQMC_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TABasedQMC_ExtIEs_specs_817; +extern asn_TYPE_member_t asn_MBR_TABasedQMC_ExtIEs_817[3]; +extern asn_TYPE_descriptor_t asn_DEF_TAIBasedQMC_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TAIBasedQMC_ExtIEs_specs_821; +extern asn_TYPE_member_t asn_MBR_TAIBasedQMC_ExtIEs_821[3]; +extern asn_TYPE_descriptor_t asn_DEF_TDD_Info_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_Info_ExtIEs_specs_825; +extern asn_TYPE_member_t asn_MBR_TDD_Info_ExtIEs_825[3]; +extern asn_TYPE_descriptor_t asn_DEF_TraceActivation_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_TraceActivation_ExtIEs_specs_829; +extern asn_TYPE_member_t asn_MBR_TraceActivation_ExtIEs_829[3]; +extern asn_TYPE_descriptor_t asn_DEF_Tunnel_Information_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_Tunnel_Information_ExtIEs_specs_833; +extern asn_TYPE_member_t asn_MBR_Tunnel_Information_ExtIEs_833[3]; +extern asn_TYPE_descriptor_t asn_DEF_UEAggregate_MaximumBitrate_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UEAggregate_MaximumBitrate_ExtIEs_specs_837; +extern asn_TYPE_member_t asn_MBR_UEAggregate_MaximumBitrate_ExtIEs_837[3]; +extern asn_TYPE_descriptor_t asn_DEF_UEAppLayerMeasConfig_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UEAppLayerMeasConfig_ExtIEs_specs_841; +extern asn_TYPE_member_t asn_MBR_UEAppLayerMeasConfig_ExtIEs_841[3]; +extern asn_TYPE_descriptor_t asn_DEF_UESecurityCapabilities_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UESecurityCapabilities_ExtIEs_specs_845; +extern asn_TYPE_member_t asn_MBR_UESecurityCapabilities_ExtIEs_845[3]; +extern asn_TYPE_descriptor_t asn_DEF_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849; +extern asn_TYPE_member_t asn_MBR_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849[3]; +extern asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UEsToBeResetList_Item_ExtIEs_specs_853; +extern asn_TYPE_member_t asn_MBR_UEsToBeResetList_Item_ExtIEs_853[3]; +extern asn_TYPE_descriptor_t asn_DEF_ULandDLSharing_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ULandDLSharing_ExtIEs_specs_857; +extern asn_TYPE_member_t asn_MBR_ULandDLSharing_ExtIEs_857[3]; +extern asn_TYPE_descriptor_t asn_DEF_ULConfiguration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ULConfiguration_ExtIEs_specs_861; +extern asn_TYPE_member_t asn_MBR_ULConfiguration_ExtIEs_861[3]; +extern asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo_Item_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865; +extern asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865[3]; +extern asn_TYPE_descriptor_t asn_DEF_ULOnlySharing_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ULOnlySharing_ExtIEs_specs_869; +extern asn_TYPE_member_t asn_MBR_ULOnlySharing_ExtIEs_869[3]; +extern asn_TYPE_descriptor_t asn_DEF_UsableABSInformationFDD_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationFDD_ExtIEs_specs_873; +extern asn_TYPE_member_t asn_MBR_UsableABSInformationFDD_ExtIEs_873[3]; +extern asn_TYPE_descriptor_t asn_DEF_UsableABSInformationTDD_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationTDD_ExtIEs_specs_877; +extern asn_TYPE_member_t asn_MBR_UsableABSInformationTDD_ExtIEs_877[3]; +extern asn_TYPE_descriptor_t asn_DEF_V2XServicesAuthorized_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_V2XServicesAuthorized_ExtIEs_specs_881; +extern asn_TYPE_member_t asn_MBR_V2XServicesAuthorized_ExtIEs_881[3]; +extern asn_TYPE_descriptor_t asn_DEF_WidebandCQI_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_WidebandCQI_ExtIEs_specs_885; +extern asn_TYPE_member_t asn_MBR_WidebandCQI_ExtIEs_885[3]; +extern asn_TYPE_descriptor_t asn_DEF_WLANMeasurementConfiguration_ExtIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_WLANMeasurementConfiguration_ExtIEs_specs_889; +extern asn_TYPE_member_t asn_MBR_WLANMeasurementConfiguration_ExtIEs_889[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolExtensionField_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..3e49d91 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,4828 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P20_constr_41 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P21_constr_43 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P22_constr_45 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P23_constr_47 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P24_constr_49 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P25_constr_51 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P26_constr_53 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P27_constr_55 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P28_constr_57 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P29_constr_59 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P30_constr_61 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P31_constr_63 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P32_constr_65 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P33_constr_67 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P34_constr_69 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P35_constr_71 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P36_constr_73 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P37_constr_75 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P38_constr_77 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P39_constr_79 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P40_constr_81 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P41_constr_83 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P42_constr_85 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P43_constr_87 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P44_constr_89 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P45_constr_91 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P46_constr_93 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P47_constr_95 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P48_constr_97 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P49_constr_99 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P50_constr_101 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P51_constr_103 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P52_constr_105 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P53_constr_107 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P54_constr_109 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P55_constr_111 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P56_constr_113 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P57_constr_115 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P58_constr_117 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P59_constr_119 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P60_constr_121 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P61_constr_123 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P62_constr_125 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P63_constr_127 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P64_constr_129 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P65_constr_131 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P66_constr_133 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P67_constr_135 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P68_constr_137 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P69_constr_139 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P70_constr_141 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P71_constr_143 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P72_constr_145 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P73_constr_147 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P74_constr_149 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P75_constr_151 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P76_constr_153 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P77_constr_155 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P78_constr_157 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P79_constr_159 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P80_constr_161 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P81_constr_163 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P82_constr_165 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P83_constr_167 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P84_constr_169 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P85_constr_171 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P86_constr_173 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P87_constr_175 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P88_constr_177 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P89_constr_179 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P90_constr_181 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P91_constr_183 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P92_constr_185 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P93_constr_187 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P94_constr_189 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P95_constr_191 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P96_constr_193 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P97_constr_195 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P98_constr_197 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P99_constr_199 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P100_constr_201 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P101_constr_203 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P102_constr_205 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P103_constr_207 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P104_constr_209 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P105_constr_211 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P106_constr_213 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P107_constr_215 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P108_constr_217 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P109_constr_219 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P110_constr_221 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P111_constr_223 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P112_constr_225 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P113_constr_227 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P114_constr_229 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P115_constr_231 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P116_constr_233 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P117_constr_235 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P118_constr_237 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P119_constr_239 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P0_specs_1 = { + sizeof(struct ProtocolIE_Container_119P0), + offsetof(struct ProtocolIE_Container_119P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_119P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_119P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_119P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P1_specs_3 = { + sizeof(struct ProtocolIE_Container_119P1), + offsetof(struct ProtocolIE_Container_119P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_119P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_119P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_119P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P2_specs_5 = { + sizeof(struct ProtocolIE_Container_119P2), + offsetof(struct ProtocolIE_Container_119P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_119P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_119P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_119P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P3_specs_7 = { + sizeof(struct ProtocolIE_Container_119P3), + offsetof(struct ProtocolIE_Container_119P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_119P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_119P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_119P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P4_specs_9 = { + sizeof(struct ProtocolIE_Container_119P4), + offsetof(struct ProtocolIE_Container_119P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_119P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_119P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_119P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P5_specs_11 = { + sizeof(struct ProtocolIE_Container_119P5), + offsetof(struct ProtocolIE_Container_119P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_119P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_119P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_119P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P6_specs_13 = { + sizeof(struct ProtocolIE_Container_119P6), + offsetof(struct ProtocolIE_Container_119P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_119P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_119P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_119P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P7_specs_15 = { + sizeof(struct ProtocolIE_Container_119P7), + offsetof(struct ProtocolIE_Container_119P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_119P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_119P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_119P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P8_specs_17 = { + sizeof(struct ProtocolIE_Container_119P8), + offsetof(struct ProtocolIE_Container_119P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_119P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_119P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_119P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P9_specs_19 = { + sizeof(struct ProtocolIE_Container_119P9), + offsetof(struct ProtocolIE_Container_119P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_119P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_119P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_119P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P10_specs_21 = { + sizeof(struct ProtocolIE_Container_119P10), + offsetof(struct ProtocolIE_Container_119P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_119P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_119P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_119P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P11_specs_23 = { + sizeof(struct ProtocolIE_Container_119P11), + offsetof(struct ProtocolIE_Container_119P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_119P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_119P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_119P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P12_specs_25 = { + sizeof(struct ProtocolIE_Container_119P12), + offsetof(struct ProtocolIE_Container_119P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_119P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_119P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_119P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P13_specs_27 = { + sizeof(struct ProtocolIE_Container_119P13), + offsetof(struct ProtocolIE_Container_119P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_119P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_119P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_119P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P14_specs_29 = { + sizeof(struct ProtocolIE_Container_119P14), + offsetof(struct ProtocolIE_Container_119P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_119P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_119P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_119P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P15_specs_31 = { + sizeof(struct ProtocolIE_Container_119P15), + offsetof(struct ProtocolIE_Container_119P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_119P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_119P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_119P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverPreparationFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P16_specs_33 = { + sizeof(struct ProtocolIE_Container_119P16), + offsetof(struct ProtocolIE_Container_119P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_119P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_119P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_119P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverReport_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P17_specs_35 = { + sizeof(struct ProtocolIE_Container_119P17), + offsetof(struct ProtocolIE_Container_119P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_119P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_119P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_119P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SNStatusTransfer_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P18_specs_37 = { + sizeof(struct ProtocolIE_Container_119P18), + offsetof(struct ProtocolIE_Container_119P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_119P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_119P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_119P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEContextRelease_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P19_specs_39 = { + sizeof(struct ProtocolIE_Container_119P19), + offsetof(struct ProtocolIE_Container_119P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_119P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_119P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_119P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P19_specs_39 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P20_41[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverCancel_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P20_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P20_specs_41 = { + sizeof(struct ProtocolIE_Container_119P20), + offsetof(struct ProtocolIE_Container_119P20, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P20 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P20_tags_41, + sizeof(asn_DEF_ProtocolIE_Container_119P20_tags_41) + /sizeof(asn_DEF_ProtocolIE_Container_119P20_tags_41[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P20_tags_41, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P20_tags_41) + /sizeof(asn_DEF_ProtocolIE_Container_119P20_tags_41[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P20_constr_41, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P20_41, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P20_specs_41 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P21_43[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P21_tags_43[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P21_specs_43 = { + sizeof(struct ProtocolIE_Container_119P21), + offsetof(struct ProtocolIE_Container_119P21, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P21 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P21_tags_43, + sizeof(asn_DEF_ProtocolIE_Container_119P21_tags_43) + /sizeof(asn_DEF_ProtocolIE_Container_119P21_tags_43[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P21_tags_43, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P21_tags_43) + /sizeof(asn_DEF_ProtocolIE_Container_119P21_tags_43[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P21_constr_43, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P21_43, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P21_specs_43 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P22_45[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P22_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P22_specs_45 = { + sizeof(struct ProtocolIE_Container_119P22), + offsetof(struct ProtocolIE_Container_119P22, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P22 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P22_tags_45, + sizeof(asn_DEF_ProtocolIE_Container_119P22_tags_45) + /sizeof(asn_DEF_ProtocolIE_Container_119P22_tags_45[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P22_tags_45, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P22_tags_45) + /sizeof(asn_DEF_ProtocolIE_Container_119P22_tags_45[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P22_constr_45, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P22_45, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P22_specs_45 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P23_47[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P23_tags_47[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P23_specs_47 = { + sizeof(struct ProtocolIE_Container_119P23), + offsetof(struct ProtocolIE_Container_119P23, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P23 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P23_tags_47, + sizeof(asn_DEF_ProtocolIE_Container_119P23_tags_47) + /sizeof(asn_DEF_ProtocolIE_Container_119P23_tags_47[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P23_tags_47, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P23_tags_47) + /sizeof(asn_DEF_ProtocolIE_Container_119P23_tags_47[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P23_constr_47, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P23_47, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P23_specs_47 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P24_49[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P24_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P24_specs_49 = { + sizeof(struct ProtocolIE_Container_119P24), + offsetof(struct ProtocolIE_Container_119P24, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P24 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P24_tags_49, + sizeof(asn_DEF_ProtocolIE_Container_119P24_tags_49) + /sizeof(asn_DEF_ProtocolIE_Container_119P24_tags_49[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P24_tags_49, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P24_tags_49) + /sizeof(asn_DEF_ProtocolIE_Container_119P24_tags_49[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P24_constr_49, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P24_49, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P24_specs_49 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P25_51[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P25_tags_51[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P25_specs_51 = { + sizeof(struct ProtocolIE_Container_119P25), + offsetof(struct ProtocolIE_Container_119P25, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P25 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P25_tags_51, + sizeof(asn_DEF_ProtocolIE_Container_119P25_tags_51) + /sizeof(asn_DEF_ProtocolIE_Container_119P25_tags_51[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P25_tags_51, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P25_tags_51) + /sizeof(asn_DEF_ProtocolIE_Container_119P25_tags_51[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P25_constr_51, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P25_51, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P25_specs_51 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P26_53[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P26_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P26_specs_53 = { + sizeof(struct ProtocolIE_Container_119P26), + offsetof(struct ProtocolIE_Container_119P26, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P26 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P26_tags_53, + sizeof(asn_DEF_ProtocolIE_Container_119P26_tags_53) + /sizeof(asn_DEF_ProtocolIE_Container_119P26_tags_53[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P26_tags_53, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P26_tags_53) + /sizeof(asn_DEF_ProtocolIE_Container_119P26_tags_53[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P26_constr_53, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P26_53, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P26_specs_53 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P27_55[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LoadInformation_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P27_tags_55[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P27_specs_55 = { + sizeof(struct ProtocolIE_Container_119P27), + offsetof(struct ProtocolIE_Container_119P27, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P27 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P27_tags_55, + sizeof(asn_DEF_ProtocolIE_Container_119P27_tags_55) + /sizeof(asn_DEF_ProtocolIE_Container_119P27_tags_55[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P27_tags_55, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P27_tags_55) + /sizeof(asn_DEF_ProtocolIE_Container_119P27_tags_55[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P27_constr_55, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P27_55, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P27_specs_55 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P28_57[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P28_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P28_specs_57 = { + sizeof(struct ProtocolIE_Container_119P28), + offsetof(struct ProtocolIE_Container_119P28, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P28 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P28_tags_57, + sizeof(asn_DEF_ProtocolIE_Container_119P28_tags_57) + /sizeof(asn_DEF_ProtocolIE_Container_119P28_tags_57[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P28_tags_57, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P28_tags_57) + /sizeof(asn_DEF_ProtocolIE_Container_119P28_tags_57[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P28_constr_57, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P28_57, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P28_specs_57 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P29_59[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P29_tags_59[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P29_specs_59 = { + sizeof(struct ProtocolIE_Container_119P29), + offsetof(struct ProtocolIE_Container_119P29, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P29 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P29_tags_59, + sizeof(asn_DEF_ProtocolIE_Container_119P29_tags_59) + /sizeof(asn_DEF_ProtocolIE_Container_119P29_tags_59[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P29_tags_59, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P29_tags_59) + /sizeof(asn_DEF_ProtocolIE_Container_119P29_tags_59[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P29_constr_59, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P29_59, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P29_specs_59 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P30_61[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P30_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P30_specs_61 = { + sizeof(struct ProtocolIE_Container_119P30), + offsetof(struct ProtocolIE_Container_119P30, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P30 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P30_tags_61, + sizeof(asn_DEF_ProtocolIE_Container_119P30_tags_61) + /sizeof(asn_DEF_ProtocolIE_Container_119P30_tags_61[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P30_tags_61, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P30_tags_61) + /sizeof(asn_DEF_ProtocolIE_Container_119P30_tags_61[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P30_constr_61, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P30_61, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P30_specs_61 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P31_63[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P31_tags_63[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P31_specs_63 = { + sizeof(struct ProtocolIE_Container_119P31), + offsetof(struct ProtocolIE_Container_119P31, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P31 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P31_tags_63, + sizeof(asn_DEF_ProtocolIE_Container_119P31_tags_63) + /sizeof(asn_DEF_ProtocolIE_Container_119P31_tags_63[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P31_tags_63, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P31_tags_63) + /sizeof(asn_DEF_ProtocolIE_Container_119P31_tags_63[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P31_constr_63, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P31_63, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P31_specs_63 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P32_65[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P32_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P32_specs_65 = { + sizeof(struct ProtocolIE_Container_119P32), + offsetof(struct ProtocolIE_Container_119P32, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P32 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P32_tags_65, + sizeof(asn_DEF_ProtocolIE_Container_119P32_tags_65) + /sizeof(asn_DEF_ProtocolIE_Container_119P32_tags_65[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P32_tags_65, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P32_tags_65) + /sizeof(asn_DEF_ProtocolIE_Container_119P32_tags_65[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P32_constr_65, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P32_65, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P32_specs_65 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P33_67[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P33_tags_67[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P33_specs_67 = { + sizeof(struct ProtocolIE_Container_119P33), + offsetof(struct ProtocolIE_Container_119P33, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P33 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P33_tags_67, + sizeof(asn_DEF_ProtocolIE_Container_119P33_tags_67) + /sizeof(asn_DEF_ProtocolIE_Container_119P33_tags_67[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P33_tags_67, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P33_tags_67) + /sizeof(asn_DEF_ProtocolIE_Container_119P33_tags_67[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P33_constr_67, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P33_67, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P33_specs_67 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P34_69[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P34_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P34_specs_69 = { + sizeof(struct ProtocolIE_Container_119P34), + offsetof(struct ProtocolIE_Container_119P34, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P34 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P34_tags_69, + sizeof(asn_DEF_ProtocolIE_Container_119P34_tags_69) + /sizeof(asn_DEF_ProtocolIE_Container_119P34_tags_69[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P34_tags_69, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P34_tags_69) + /sizeof(asn_DEF_ProtocolIE_Container_119P34_tags_69[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P34_constr_69, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P34_69, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P34_specs_69 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P35_71[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MobilityChangeRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P35_tags_71[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P35_specs_71 = { + sizeof(struct ProtocolIE_Container_119P35), + offsetof(struct ProtocolIE_Container_119P35, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P35 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P35_tags_71, + sizeof(asn_DEF_ProtocolIE_Container_119P35_tags_71) + /sizeof(asn_DEF_ProtocolIE_Container_119P35_tags_71[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P35_tags_71, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P35_tags_71) + /sizeof(asn_DEF_ProtocolIE_Container_119P35_tags_71[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P35_constr_71, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P35_71, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P35_specs_71 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P36_73[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MobilityChangeAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P36_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P36_specs_73 = { + sizeof(struct ProtocolIE_Container_119P36), + offsetof(struct ProtocolIE_Container_119P36, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P36 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P36_tags_73, + sizeof(asn_DEF_ProtocolIE_Container_119P36_tags_73) + /sizeof(asn_DEF_ProtocolIE_Container_119P36_tags_73[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P36_tags_73, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P36_tags_73) + /sizeof(asn_DEF_ProtocolIE_Container_119P36_tags_73[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P36_constr_73, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P36_73, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P36_specs_73 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P37_75[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MobilityChangeFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P37_tags_75[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P37_specs_75 = { + sizeof(struct ProtocolIE_Container_119P37), + offsetof(struct ProtocolIE_Container_119P37, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P37 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P37_tags_75, + sizeof(asn_DEF_ProtocolIE_Container_119P37_tags_75) + /sizeof(asn_DEF_ProtocolIE_Container_119P37_tags_75[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P37_tags_75, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P37_tags_75) + /sizeof(asn_DEF_ProtocolIE_Container_119P37_tags_75[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P37_constr_75, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P37_75, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P37_specs_75 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P38_77[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RLFIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P38_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P38_specs_77 = { + sizeof(struct ProtocolIE_Container_119P38), + offsetof(struct ProtocolIE_Container_119P38, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P38 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P38_tags_77, + sizeof(asn_DEF_ProtocolIE_Container_119P38_tags_77) + /sizeof(asn_DEF_ProtocolIE_Container_119P38_tags_77[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P38_tags_77, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P38_tags_77) + /sizeof(asn_DEF_ProtocolIE_Container_119P38_tags_77[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P38_constr_77, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P38_77, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P38_specs_77 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P39_79[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellActivationRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P39_tags_79[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P39_specs_79 = { + sizeof(struct ProtocolIE_Container_119P39), + offsetof(struct ProtocolIE_Container_119P39, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P39 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P39_tags_79, + sizeof(asn_DEF_ProtocolIE_Container_119P39_tags_79) + /sizeof(asn_DEF_ProtocolIE_Container_119P39_tags_79[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P39_tags_79, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P39_tags_79) + /sizeof(asn_DEF_ProtocolIE_Container_119P39_tags_79[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P39_constr_79, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P39_79, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P39_specs_79 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P40_81[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellActivationResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P40_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P40_specs_81 = { + sizeof(struct ProtocolIE_Container_119P40), + offsetof(struct ProtocolIE_Container_119P40, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P40 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P40_tags_81, + sizeof(asn_DEF_ProtocolIE_Container_119P40_tags_81) + /sizeof(asn_DEF_ProtocolIE_Container_119P40_tags_81[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P40_tags_81, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P40_tags_81) + /sizeof(asn_DEF_ProtocolIE_Container_119P40_tags_81[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P40_constr_81, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P40_81, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P40_specs_81 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P41_83[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellActivationFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P41_tags_83[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P41_specs_83 = { + sizeof(struct ProtocolIE_Container_119P41), + offsetof(struct ProtocolIE_Container_119P41, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P41 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P41_tags_83, + sizeof(asn_DEF_ProtocolIE_Container_119P41_tags_83) + /sizeof(asn_DEF_ProtocolIE_Container_119P41_tags_83[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P41_tags_83, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P41_tags_83) + /sizeof(asn_DEF_ProtocolIE_Container_119P41_tags_83[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P41_constr_83, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P41_83, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P41_specs_83 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P42_85[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2Release_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P42_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P42_specs_85 = { + sizeof(struct ProtocolIE_Container_119P42), + offsetof(struct ProtocolIE_Container_119P42, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P42 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P42_tags_85, + sizeof(asn_DEF_ProtocolIE_Container_119P42_tags_85) + /sizeof(asn_DEF_ProtocolIE_Container_119P42_tags_85[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P42_tags_85, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P42_tags_85) + /sizeof(asn_DEF_ProtocolIE_Container_119P42_tags_85[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P42_constr_85, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P42_85, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P42_specs_85 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P43_87[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2APMessageTransfer_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P43_tags_87[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P43_specs_87 = { + sizeof(struct ProtocolIE_Container_119P43), + offsetof(struct ProtocolIE_Container_119P43, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P43 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P43_tags_87, + sizeof(asn_DEF_ProtocolIE_Container_119P43_tags_87) + /sizeof(asn_DEF_ProtocolIE_Container_119P43_tags_87[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P43_tags_87, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P43_tags_87) + /sizeof(asn_DEF_ProtocolIE_Container_119P43_tags_87[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P43_constr_87, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P43_87, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P43_specs_87 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P44_89[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBAdditionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P44_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P44_specs_89 = { + sizeof(struct ProtocolIE_Container_119P44), + offsetof(struct ProtocolIE_Container_119P44, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P44 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P44_tags_89, + sizeof(asn_DEF_ProtocolIE_Container_119P44_tags_89) + /sizeof(asn_DEF_ProtocolIE_Container_119P44_tags_89[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P44_tags_89, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P44_tags_89) + /sizeof(asn_DEF_ProtocolIE_Container_119P44_tags_89[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P44_constr_89, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P44_89, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P44_specs_89 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P45_91[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBAdditionRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P45_tags_91[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P45_specs_91 = { + sizeof(struct ProtocolIE_Container_119P45), + offsetof(struct ProtocolIE_Container_119P45, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P45 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P45_tags_91, + sizeof(asn_DEF_ProtocolIE_Container_119P45_tags_91) + /sizeof(asn_DEF_ProtocolIE_Container_119P45_tags_91[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P45_tags_91, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P45_tags_91) + /sizeof(asn_DEF_ProtocolIE_Container_119P45_tags_91[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P45_constr_91, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P45_91, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P45_specs_91 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P46_93[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBAdditionRequestReject_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P46_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P46_specs_93 = { + sizeof(struct ProtocolIE_Container_119P46), + offsetof(struct ProtocolIE_Container_119P46, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P46 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P46_tags_93, + sizeof(asn_DEF_ProtocolIE_Container_119P46_tags_93) + /sizeof(asn_DEF_ProtocolIE_Container_119P46_tags_93[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P46_tags_93, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P46_tags_93) + /sizeof(asn_DEF_ProtocolIE_Container_119P46_tags_93[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P46_constr_93, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P46_93, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P46_specs_93 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P47_95[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBReconfigurationComplete_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P47_tags_95[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P47_specs_95 = { + sizeof(struct ProtocolIE_Container_119P47), + offsetof(struct ProtocolIE_Container_119P47, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P47 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P47_tags_95, + sizeof(asn_DEF_ProtocolIE_Container_119P47_tags_95) + /sizeof(asn_DEF_ProtocolIE_Container_119P47_tags_95[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P47_tags_95, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P47_tags_95) + /sizeof(asn_DEF_ProtocolIE_Container_119P47_tags_95[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P47_constr_95, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P47_95, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P47_specs_95 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P48_97[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P48_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P48_specs_97 = { + sizeof(struct ProtocolIE_Container_119P48), + offsetof(struct ProtocolIE_Container_119P48, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P48 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P48_tags_97, + sizeof(asn_DEF_ProtocolIE_Container_119P48_tags_97) + /sizeof(asn_DEF_ProtocolIE_Container_119P48_tags_97[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P48_tags_97, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P48_tags_97) + /sizeof(asn_DEF_ProtocolIE_Container_119P48_tags_97[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P48_constr_97, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P48_97, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P48_specs_97 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P49_99[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P49_tags_99[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P49_specs_99 = { + sizeof(struct ProtocolIE_Container_119P49), + offsetof(struct ProtocolIE_Container_119P49, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P49 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P49_tags_99, + sizeof(asn_DEF_ProtocolIE_Container_119P49_tags_99) + /sizeof(asn_DEF_ProtocolIE_Container_119P49_tags_99[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P49_tags_99, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P49_tags_99) + /sizeof(asn_DEF_ProtocolIE_Container_119P49_tags_99[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P49_constr_99, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P49_99, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P49_specs_99 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P50_101[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationRequestReject_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P50_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P50_specs_101 = { + sizeof(struct ProtocolIE_Container_119P50), + offsetof(struct ProtocolIE_Container_119P50, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P50 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P50_tags_101, + sizeof(asn_DEF_ProtocolIE_Container_119P50_tags_101) + /sizeof(asn_DEF_ProtocolIE_Container_119P50_tags_101[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P50_tags_101, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P50_tags_101) + /sizeof(asn_DEF_ProtocolIE_Container_119P50_tags_101[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P50_constr_101, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P50_101, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P50_specs_101 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P51_103[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P51_tags_103[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P51_specs_103 = { + sizeof(struct ProtocolIE_Container_119P51), + offsetof(struct ProtocolIE_Container_119P51, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P51 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P51_tags_103, + sizeof(asn_DEF_ProtocolIE_Container_119P51_tags_103) + /sizeof(asn_DEF_ProtocolIE_Container_119P51_tags_103[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P51_tags_103, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P51_tags_103) + /sizeof(asn_DEF_ProtocolIE_Container_119P51_tags_103[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P51_constr_103, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P51_103, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P51_specs_103 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P52_105[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P52_tags_105[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P52_specs_105 = { + sizeof(struct ProtocolIE_Container_119P52), + offsetof(struct ProtocolIE_Container_119P52, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P52 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P52_tags_105, + sizeof(asn_DEF_ProtocolIE_Container_119P52_tags_105) + /sizeof(asn_DEF_ProtocolIE_Container_119P52_tags_105[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P52_tags_105, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P52_tags_105) + /sizeof(asn_DEF_ProtocolIE_Container_119P52_tags_105[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P52_constr_105, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P52_105, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P52_specs_105 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P53_107[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBModificationRefuse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P53_tags_107[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P53_specs_107 = { + sizeof(struct ProtocolIE_Container_119P53), + offsetof(struct ProtocolIE_Container_119P53, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P53 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P53_tags_107, + sizeof(asn_DEF_ProtocolIE_Container_119P53_tags_107) + /sizeof(asn_DEF_ProtocolIE_Container_119P53_tags_107[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P53_tags_107, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P53_tags_107) + /sizeof(asn_DEF_ProtocolIE_Container_119P53_tags_107[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P53_constr_107, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P53_107, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P53_specs_107 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P54_109[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBReleaseRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P54_tags_109[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P54_specs_109 = { + sizeof(struct ProtocolIE_Container_119P54), + offsetof(struct ProtocolIE_Container_119P54, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P54 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P54_tags_109, + sizeof(asn_DEF_ProtocolIE_Container_119P54_tags_109) + /sizeof(asn_DEF_ProtocolIE_Container_119P54_tags_109[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P54_tags_109, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P54_tags_109) + /sizeof(asn_DEF_ProtocolIE_Container_119P54_tags_109[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P54_constr_109, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P54_109, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P54_specs_109 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P55_111[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBReleaseRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P55_tags_111[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P55_specs_111 = { + sizeof(struct ProtocolIE_Container_119P55), + offsetof(struct ProtocolIE_Container_119P55, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P55 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P55_tags_111, + sizeof(asn_DEF_ProtocolIE_Container_119P55_tags_111) + /sizeof(asn_DEF_ProtocolIE_Container_119P55_tags_111[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P55_tags_111, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P55_tags_111) + /sizeof(asn_DEF_ProtocolIE_Container_119P55_tags_111[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P55_constr_111, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P55_111, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P55_specs_111 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P56_113[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBReleaseConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P56_tags_113[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P56_specs_113 = { + sizeof(struct ProtocolIE_Container_119P56), + offsetof(struct ProtocolIE_Container_119P56, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P56 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P56_tags_113, + sizeof(asn_DEF_ProtocolIE_Container_119P56_tags_113) + /sizeof(asn_DEF_ProtocolIE_Container_119P56_tags_113[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P56_tags_113, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P56_tags_113) + /sizeof(asn_DEF_ProtocolIE_Container_119P56_tags_113[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P56_constr_113, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P56_113, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P56_specs_113 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P57_115[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SeNBCounterCheckRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P57_tags_115[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P57_specs_115 = { + sizeof(struct ProtocolIE_Container_119P57), + offsetof(struct ProtocolIE_Container_119P57, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P57 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P57_tags_115, + sizeof(asn_DEF_ProtocolIE_Container_119P57_tags_115) + /sizeof(asn_DEF_ProtocolIE_Container_119P57_tags_115[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P57_tags_115, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P57_tags_115) + /sizeof(asn_DEF_ProtocolIE_Container_119P57_tags_115[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P57_constr_115, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P57_115, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P57_specs_115 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P58_117[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2RemovalRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P58_tags_117[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P58_specs_117 = { + sizeof(struct ProtocolIE_Container_119P58), + offsetof(struct ProtocolIE_Container_119P58, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P58 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P58_tags_117, + sizeof(asn_DEF_ProtocolIE_Container_119P58_tags_117) + /sizeof(asn_DEF_ProtocolIE_Container_119P58_tags_117[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P58_tags_117, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P58_tags_117) + /sizeof(asn_DEF_ProtocolIE_Container_119P58_tags_117[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P58_constr_117, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P58_117, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P58_specs_117 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P59_119[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2RemovalResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P59_tags_119[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P59_specs_119 = { + sizeof(struct ProtocolIE_Container_119P59), + offsetof(struct ProtocolIE_Container_119P59, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P59 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P59_tags_119, + sizeof(asn_DEF_ProtocolIE_Container_119P59_tags_119) + /sizeof(asn_DEF_ProtocolIE_Container_119P59_tags_119[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P59_tags_119, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P59_tags_119) + /sizeof(asn_DEF_ProtocolIE_Container_119P59_tags_119[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P59_constr_119, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P59_119, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P59_specs_119 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P60_121[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2RemovalFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P60_tags_121[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P60_specs_121 = { + sizeof(struct ProtocolIE_Container_119P60), + offsetof(struct ProtocolIE_Container_119P60, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P60 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P60_tags_121, + sizeof(asn_DEF_ProtocolIE_Container_119P60_tags_121) + /sizeof(asn_DEF_ProtocolIE_Container_119P60_tags_121[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P60_tags_121, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P60_tags_121) + /sizeof(asn_DEF_ProtocolIE_Container_119P60_tags_121[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P60_constr_121, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P60_121, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P60_specs_121 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P61_123[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RetrieveUEContextRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P61_tags_123[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P61_specs_123 = { + sizeof(struct ProtocolIE_Container_119P61), + offsetof(struct ProtocolIE_Container_119P61, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P61 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P61_tags_123, + sizeof(asn_DEF_ProtocolIE_Container_119P61_tags_123) + /sizeof(asn_DEF_ProtocolIE_Container_119P61_tags_123[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P61_tags_123, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P61_tags_123) + /sizeof(asn_DEF_ProtocolIE_Container_119P61_tags_123[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P61_constr_123, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P61_123, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P61_specs_123 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P62_125[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RetrieveUEContextResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P62_tags_125[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P62_specs_125 = { + sizeof(struct ProtocolIE_Container_119P62), + offsetof(struct ProtocolIE_Container_119P62, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P62 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P62_tags_125, + sizeof(asn_DEF_ProtocolIE_Container_119P62_tags_125) + /sizeof(asn_DEF_ProtocolIE_Container_119P62_tags_125[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P62_tags_125, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P62_tags_125) + /sizeof(asn_DEF_ProtocolIE_Container_119P62_tags_125[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P62_constr_125, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P62_125, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P62_specs_125 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P63_127[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RetrieveUEContextFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P63_tags_127[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P63_specs_127 = { + sizeof(struct ProtocolIE_Container_119P63), + offsetof(struct ProtocolIE_Container_119P63, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P63 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P63_tags_127, + sizeof(asn_DEF_ProtocolIE_Container_119P63_tags_127) + /sizeof(asn_DEF_ProtocolIE_Container_119P63_tags_127[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P63_tags_127, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P63_tags_127) + /sizeof(asn_DEF_ProtocolIE_Container_119P63_tags_127[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P63_constr_127, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P63_127, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P63_specs_127 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P64_129[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBAdditionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P64_tags_129[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P64_specs_129 = { + sizeof(struct ProtocolIE_Container_119P64), + offsetof(struct ProtocolIE_Container_119P64, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P64 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P64_tags_129, + sizeof(asn_DEF_ProtocolIE_Container_119P64_tags_129) + /sizeof(asn_DEF_ProtocolIE_Container_119P64_tags_129[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P64_tags_129, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P64_tags_129) + /sizeof(asn_DEF_ProtocolIE_Container_119P64_tags_129[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P64_constr_129, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P64_129, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P64_specs_129 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P65_131[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBAdditionRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P65_tags_131[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P65_specs_131 = { + sizeof(struct ProtocolIE_Container_119P65), + offsetof(struct ProtocolIE_Container_119P65, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P65 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P65_tags_131, + sizeof(asn_DEF_ProtocolIE_Container_119P65_tags_131) + /sizeof(asn_DEF_ProtocolIE_Container_119P65_tags_131[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P65_tags_131, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P65_tags_131) + /sizeof(asn_DEF_ProtocolIE_Container_119P65_tags_131[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P65_constr_131, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P65_131, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P65_specs_131 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P66_133[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBAdditionRequestReject_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P66_tags_133[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P66_specs_133 = { + sizeof(struct ProtocolIE_Container_119P66), + offsetof(struct ProtocolIE_Container_119P66, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P66 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P66_tags_133, + sizeof(asn_DEF_ProtocolIE_Container_119P66_tags_133) + /sizeof(asn_DEF_ProtocolIE_Container_119P66_tags_133[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P66_tags_133, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P66_tags_133) + /sizeof(asn_DEF_ProtocolIE_Container_119P66_tags_133[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P66_constr_133, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P66_133, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P66_specs_133 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P67_135[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReconfigurationComplete_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P67_tags_135[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P67_specs_135 = { + sizeof(struct ProtocolIE_Container_119P67), + offsetof(struct ProtocolIE_Container_119P67, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P67 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P67_tags_135, + sizeof(asn_DEF_ProtocolIE_Container_119P67_tags_135) + /sizeof(asn_DEF_ProtocolIE_Container_119P67_tags_135[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P67_tags_135, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P67_tags_135) + /sizeof(asn_DEF_ProtocolIE_Container_119P67_tags_135[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P67_constr_135, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P67_135, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P67_specs_135 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P68_137[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P68_tags_137[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P68_specs_137 = { + sizeof(struct ProtocolIE_Container_119P68), + offsetof(struct ProtocolIE_Container_119P68, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P68 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P68_tags_137, + sizeof(asn_DEF_ProtocolIE_Container_119P68_tags_137) + /sizeof(asn_DEF_ProtocolIE_Container_119P68_tags_137[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P68_tags_137, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P68_tags_137) + /sizeof(asn_DEF_ProtocolIE_Container_119P68_tags_137[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P68_constr_137, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P68_137, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P68_specs_137 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P69_139[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P69_tags_139[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P69_specs_139 = { + sizeof(struct ProtocolIE_Container_119P69), + offsetof(struct ProtocolIE_Container_119P69, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P69 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P69_tags_139, + sizeof(asn_DEF_ProtocolIE_Container_119P69_tags_139) + /sizeof(asn_DEF_ProtocolIE_Container_119P69_tags_139[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P69_tags_139, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P69_tags_139) + /sizeof(asn_DEF_ProtocolIE_Container_119P69_tags_139[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P69_constr_139, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P69_139, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P69_specs_139 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P70_141[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationRequestReject_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P70_tags_141[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P70_specs_141 = { + sizeof(struct ProtocolIE_Container_119P70), + offsetof(struct ProtocolIE_Container_119P70, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P70 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P70_tags_141, + sizeof(asn_DEF_ProtocolIE_Container_119P70_tags_141) + /sizeof(asn_DEF_ProtocolIE_Container_119P70_tags_141[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P70_tags_141, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P70_tags_141) + /sizeof(asn_DEF_ProtocolIE_Container_119P70_tags_141[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P70_constr_141, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P70_141, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P70_specs_141 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P71_143[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P71_tags_143[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P71_specs_143 = { + sizeof(struct ProtocolIE_Container_119P71), + offsetof(struct ProtocolIE_Container_119P71, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P71 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P71_tags_143, + sizeof(asn_DEF_ProtocolIE_Container_119P71_tags_143) + /sizeof(asn_DEF_ProtocolIE_Container_119P71_tags_143[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P71_tags_143, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P71_tags_143) + /sizeof(asn_DEF_ProtocolIE_Container_119P71_tags_143[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P71_constr_143, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P71_143, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P71_specs_143 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P72_145[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P72_tags_145[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P72_specs_145 = { + sizeof(struct ProtocolIE_Container_119P72), + offsetof(struct ProtocolIE_Container_119P72, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P72 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P72_tags_145, + sizeof(asn_DEF_ProtocolIE_Container_119P72_tags_145) + /sizeof(asn_DEF_ProtocolIE_Container_119P72_tags_145[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P72_tags_145, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P72_tags_145) + /sizeof(asn_DEF_ProtocolIE_Container_119P72_tags_145[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P72_constr_145, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P72_145, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P72_specs_145 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P73_147[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBModificationRefuse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P73_tags_147[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P73_specs_147 = { + sizeof(struct ProtocolIE_Container_119P73), + offsetof(struct ProtocolIE_Container_119P73, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P73 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P73_tags_147, + sizeof(asn_DEF_ProtocolIE_Container_119P73_tags_147) + /sizeof(asn_DEF_ProtocolIE_Container_119P73_tags_147[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P73_tags_147, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P73_tags_147) + /sizeof(asn_DEF_ProtocolIE_Container_119P73_tags_147[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P73_constr_147, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P73_147, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P73_specs_147 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P74_149[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReleaseRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P74_tags_149[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P74_specs_149 = { + sizeof(struct ProtocolIE_Container_119P74), + offsetof(struct ProtocolIE_Container_119P74, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P74 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P74_tags_149, + sizeof(asn_DEF_ProtocolIE_Container_119P74_tags_149) + /sizeof(asn_DEF_ProtocolIE_Container_119P74_tags_149[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P74_tags_149, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P74_tags_149) + /sizeof(asn_DEF_ProtocolIE_Container_119P74_tags_149[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P74_constr_149, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P74_149, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P74_specs_149 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P75_151[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReleaseRequestAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P75_tags_151[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P75_specs_151 = { + sizeof(struct ProtocolIE_Container_119P75), + offsetof(struct ProtocolIE_Container_119P75, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P75 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P75_tags_151, + sizeof(asn_DEF_ProtocolIE_Container_119P75_tags_151) + /sizeof(asn_DEF_ProtocolIE_Container_119P75_tags_151[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P75_tags_151, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P75_tags_151) + /sizeof(asn_DEF_ProtocolIE_Container_119P75_tags_151[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P75_constr_151, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P75_151, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P75_specs_151 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P76_153[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReleaseRequestReject_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P76_tags_153[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P76_specs_153 = { + sizeof(struct ProtocolIE_Container_119P76), + offsetof(struct ProtocolIE_Container_119P76, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P76 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P76_tags_153, + sizeof(asn_DEF_ProtocolIE_Container_119P76_tags_153) + /sizeof(asn_DEF_ProtocolIE_Container_119P76_tags_153[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P76_tags_153, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P76_tags_153) + /sizeof(asn_DEF_ProtocolIE_Container_119P76_tags_153[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P76_constr_153, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P76_153, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P76_specs_153 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P77_155[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReleaseRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P77_tags_155[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P77_specs_155 = { + sizeof(struct ProtocolIE_Container_119P77), + offsetof(struct ProtocolIE_Container_119P77, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P77 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P77_tags_155, + sizeof(asn_DEF_ProtocolIE_Container_119P77_tags_155) + /sizeof(asn_DEF_ProtocolIE_Container_119P77_tags_155[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P77_tags_155, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P77_tags_155) + /sizeof(asn_DEF_ProtocolIE_Container_119P77_tags_155[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P77_constr_155, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P77_155, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P77_specs_155 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P78_157[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBReleaseConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P78_tags_157[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P78_specs_157 = { + sizeof(struct ProtocolIE_Container_119P78), + offsetof(struct ProtocolIE_Container_119P78, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P78 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P78_tags_157, + sizeof(asn_DEF_ProtocolIE_Container_119P78_tags_157) + /sizeof(asn_DEF_ProtocolIE_Container_119P78_tags_157[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P78_tags_157, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P78_tags_157) + /sizeof(asn_DEF_ProtocolIE_Container_119P78_tags_157[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P78_constr_157, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P78_157, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P78_specs_157 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P79_159[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBCounterCheckRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P79_tags_159[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P79_specs_159 = { + sizeof(struct ProtocolIE_Container_119P79), + offsetof(struct ProtocolIE_Container_119P79, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P79 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P79_tags_159, + sizeof(asn_DEF_ProtocolIE_Container_119P79_tags_159) + /sizeof(asn_DEF_ProtocolIE_Container_119P79_tags_159[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P79_tags_159, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P79_tags_159) + /sizeof(asn_DEF_ProtocolIE_Container_119P79_tags_159[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P79_constr_159, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P79_159, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P79_specs_159 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P80_161[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBChangeRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P80_tags_161[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P80_specs_161 = { + sizeof(struct ProtocolIE_Container_119P80), + offsetof(struct ProtocolIE_Container_119P80, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P80 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P80_tags_161, + sizeof(asn_DEF_ProtocolIE_Container_119P80_tags_161) + /sizeof(asn_DEF_ProtocolIE_Container_119P80_tags_161[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P80_tags_161, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P80_tags_161) + /sizeof(asn_DEF_ProtocolIE_Container_119P80_tags_161[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P80_constr_161, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P80_161, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P80_specs_161 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P81_163[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBChangeConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P81_tags_163[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P81_specs_163 = { + sizeof(struct ProtocolIE_Container_119P81), + offsetof(struct ProtocolIE_Container_119P81, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P81 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P81_tags_163, + sizeof(asn_DEF_ProtocolIE_Container_119P81_tags_163) + /sizeof(asn_DEF_ProtocolIE_Container_119P81_tags_163[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P81_tags_163, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P81_tags_163) + /sizeof(asn_DEF_ProtocolIE_Container_119P81_tags_163[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P81_constr_163, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P81_163, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P81_specs_163 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P82_165[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RRCTransfer_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P82_tags_165[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P82_specs_165 = { + sizeof(struct ProtocolIE_Container_119P82), + offsetof(struct ProtocolIE_Container_119P82, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P82 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P82_tags_165, + sizeof(asn_DEF_ProtocolIE_Container_119P82_tags_165) + /sizeof(asn_DEF_ProtocolIE_Container_119P82_tags_165[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P82_tags_165, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P82_tags_165) + /sizeof(asn_DEF_ProtocolIE_Container_119P82_tags_165[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P82_constr_165, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P82_165, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P82_specs_165 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P83_167[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBChangeRefuse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P83_tags_167[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P83_specs_167 = { + sizeof(struct ProtocolIE_Container_119P83), + offsetof(struct ProtocolIE_Container_119P83, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P83 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P83_tags_167, + sizeof(asn_DEF_ProtocolIE_Container_119P83_tags_167) + /sizeof(asn_DEF_ProtocolIE_Container_119P83_tags_167[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P83_tags_167, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P83_tags_167) + /sizeof(asn_DEF_ProtocolIE_Container_119P83_tags_167[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P83_constr_167, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P83_167, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P83_specs_167 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P84_169[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P84_tags_169[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P84_specs_169 = { + sizeof(struct ProtocolIE_Container_119P84), + offsetof(struct ProtocolIE_Container_119P84, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P84 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P84_tags_169, + sizeof(asn_DEF_ProtocolIE_Container_119P84_tags_169) + /sizeof(asn_DEF_ProtocolIE_Container_119P84_tags_169[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P84_tags_169, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P84_tags_169) + /sizeof(asn_DEF_ProtocolIE_Container_119P84_tags_169[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P84_constr_169, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P84_169, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P84_specs_169 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P85_171[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCX2SetupReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P85_tags_171[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P85_specs_171 = { + sizeof(struct ProtocolIE_Container_119P85), + offsetof(struct ProtocolIE_Container_119P85, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P85 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P85_tags_171, + sizeof(asn_DEF_ProtocolIE_Container_119P85_tags_171) + /sizeof(asn_DEF_ProtocolIE_Container_119P85_tags_171[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P85_tags_171, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P85_tags_171) + /sizeof(asn_DEF_ProtocolIE_Container_119P85_tags_171[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P85_constr_171, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P85_171, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P85_specs_171 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P86_173[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCX2SetupReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P86_tags_173[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P86_specs_173 = { + sizeof(struct ProtocolIE_Container_119P86), + offsetof(struct ProtocolIE_Container_119P86, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P86 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P86_tags_173, + sizeof(asn_DEF_ProtocolIE_Container_119P86_tags_173) + /sizeof(asn_DEF_ProtocolIE_Container_119P86_tags_173[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P86_tags_173, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P86_tags_173) + /sizeof(asn_DEF_ProtocolIE_Container_119P86_tags_173[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P86_constr_173, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P86_173, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P86_specs_173 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P87_175[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P87_tags_175[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P87_specs_175 = { + sizeof(struct ProtocolIE_Container_119P87), + offsetof(struct ProtocolIE_Container_119P87, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P87 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P87_tags_175, + sizeof(asn_DEF_ProtocolIE_Container_119P87_tags_175) + /sizeof(asn_DEF_ProtocolIE_Container_119P87_tags_175[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P87_tags_175, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P87_tags_175) + /sizeof(asn_DEF_ProtocolIE_Container_119P87_tags_175[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P87_constr_175, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P87_175, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P87_specs_175 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P88_177[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCX2SetupReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P88_tags_177[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P88_specs_177 = { + sizeof(struct ProtocolIE_Container_119P88), + offsetof(struct ProtocolIE_Container_119P88, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P88 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P88_tags_177, + sizeof(asn_DEF_ProtocolIE_Container_119P88_tags_177) + /sizeof(asn_DEF_ProtocolIE_Container_119P88_tags_177[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P88_tags_177, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P88_tags_177) + /sizeof(asn_DEF_ProtocolIE_Container_119P88_tags_177[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P88_constr_177, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P88_177, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P88_specs_177 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P89_179[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCX2SetupReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P89_tags_179[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P89_specs_179 = { + sizeof(struct ProtocolIE_Container_119P89), + offsetof(struct ProtocolIE_Container_119P89, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P89 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P89_tags_179, + sizeof(asn_DEF_ProtocolIE_Container_119P89_tags_179) + /sizeof(asn_DEF_ProtocolIE_Container_119P89_tags_179[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P89_tags_179, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P89_tags_179) + /sizeof(asn_DEF_ProtocolIE_Container_119P89_tags_179[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P89_constr_179, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P89_179, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P89_specs_179 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P90_181[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P90_tags_181[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P90_specs_181 = { + sizeof(struct ProtocolIE_Container_119P90), + offsetof(struct ProtocolIE_Container_119P90, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P90 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P90_tags_181, + sizeof(asn_DEF_ProtocolIE_Container_119P90_tags_181) + /sizeof(asn_DEF_ProtocolIE_Container_119P90_tags_181[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P90_tags_181, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P90_tags_181) + /sizeof(asn_DEF_ProtocolIE_Container_119P90_tags_181[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P90_constr_181, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P90_181, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P90_specs_181 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P91_183[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P91_tags_183[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P91_specs_183 = { + sizeof(struct ProtocolIE_Container_119P91), + offsetof(struct ProtocolIE_Container_119P91, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P91 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P91_tags_183, + sizeof(asn_DEF_ProtocolIE_Container_119P91_tags_183) + /sizeof(asn_DEF_ProtocolIE_Container_119P91_tags_183[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P91_tags_183, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P91_tags_183) + /sizeof(asn_DEF_ProtocolIE_Container_119P91_tags_183[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P91_constr_183, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P91_183, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P91_specs_183 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P92_185[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCConfigUpdateIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P92_tags_185[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P92_specs_185 = { + sizeof(struct ProtocolIE_Container_119P92), + offsetof(struct ProtocolIE_Container_119P92, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P92 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P92_tags_185, + sizeof(asn_DEF_ProtocolIE_Container_119P92_tags_185) + /sizeof(asn_DEF_ProtocolIE_Container_119P92_tags_185[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P92_tags_185, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P92_tags_185) + /sizeof(asn_DEF_ProtocolIE_Container_119P92_tags_185[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P92_constr_185, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P92_185, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P92_specs_185 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P93_187[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCConfigUpdateIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P93_tags_187[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P93_specs_187 = { + sizeof(struct ProtocolIE_Container_119P93), + offsetof(struct ProtocolIE_Container_119P93, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P93 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P93_tags_187, + sizeof(asn_DEF_ProtocolIE_Container_119P93_tags_187) + /sizeof(asn_DEF_ProtocolIE_Container_119P93_tags_187[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P93_tags_187, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P93_tags_187) + /sizeof(asn_DEF_ProtocolIE_Container_119P93_tags_187[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P93_constr_187, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P93_187, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P93_specs_187 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P94_189[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P94_tags_189[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P94_specs_189 = { + sizeof(struct ProtocolIE_Container_119P94), + offsetof(struct ProtocolIE_Container_119P94, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P94 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P94_tags_189, + sizeof(asn_DEF_ProtocolIE_Container_119P94_tags_189) + /sizeof(asn_DEF_ProtocolIE_Container_119P94_tags_189[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P94_tags_189, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P94_tags_189) + /sizeof(asn_DEF_ProtocolIE_Container_119P94_tags_189[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P94_constr_189, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P94_189, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P94_specs_189 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P95_191[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCConfigUpdateAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P95_tags_191[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P95_specs_191 = { + sizeof(struct ProtocolIE_Container_119P95), + offsetof(struct ProtocolIE_Container_119P95, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P95 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P95_tags_191, + sizeof(asn_DEF_ProtocolIE_Container_119P95_tags_191) + /sizeof(asn_DEF_ProtocolIE_Container_119P95_tags_191[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P95_tags_191, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P95_tags_191) + /sizeof(asn_DEF_ProtocolIE_Container_119P95_tags_191[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P95_constr_191, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P95_191, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P95_specs_191 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P96_193[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCConfigUpdateAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P96_tags_193[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P96_specs_193 = { + sizeof(struct ProtocolIE_Container_119P96), + offsetof(struct ProtocolIE_Container_119P96, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P96 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P96_tags_193, + sizeof(asn_DEF_ProtocolIE_Container_119P96_tags_193) + /sizeof(asn_DEF_ProtocolIE_Container_119P96_tags_193[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P96_tags_193, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P96_tags_193) + /sizeof(asn_DEF_ProtocolIE_Container_119P96_tags_193[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P96_constr_193, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P96_193, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P96_specs_193 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P97_195[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P97_tags_195[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P97_specs_195 = { + sizeof(struct ProtocolIE_Container_119P97), + offsetof(struct ProtocolIE_Container_119P97, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P97 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P97_tags_195, + sizeof(asn_DEF_ProtocolIE_Container_119P97_tags_195) + /sizeof(asn_DEF_ProtocolIE_Container_119P97_tags_195[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P97_tags_195, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P97_tags_195) + /sizeof(asn_DEF_ProtocolIE_Container_119P97_tags_195[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P97_constr_195, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P97_195, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P97_specs_195 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P98_197[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCCellActivationRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P98_tags_197[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P98_specs_197 = { + sizeof(struct ProtocolIE_Container_119P98), + offsetof(struct ProtocolIE_Container_119P98, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P98 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P98_tags_197, + sizeof(asn_DEF_ProtocolIE_Container_119P98_tags_197) + /sizeof(asn_DEF_ProtocolIE_Container_119P98_tags_197[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P98_tags_197, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P98_tags_197) + /sizeof(asn_DEF_ProtocolIE_Container_119P98_tags_197[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P98_constr_197, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P98_197, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P98_specs_197 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P99_199[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCCellActivationResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P99_tags_199[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P99_specs_199 = { + sizeof(struct ProtocolIE_Container_119P99), + offsetof(struct ProtocolIE_Container_119P99, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P99 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P99_tags_199, + sizeof(asn_DEF_ProtocolIE_Container_119P99_tags_199) + /sizeof(asn_DEF_ProtocolIE_Container_119P99_tags_199[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P99_tags_199, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P99_tags_199) + /sizeof(asn_DEF_ProtocolIE_Container_119P99_tags_199[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P99_constr_199, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P99_199, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P99_specs_199 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P100_201[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCCellActivationFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P100_tags_201[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P100_specs_201 = { + sizeof(struct ProtocolIE_Container_119P100), + offsetof(struct ProtocolIE_Container_119P100, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P100 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P100_tags_201, + sizeof(asn_DEF_ProtocolIE_Container_119P100_tags_201) + /sizeof(asn_DEF_ProtocolIE_Container_119P100_tags_201[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P100_tags_201, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P100_tags_201) + /sizeof(asn_DEF_ProtocolIE_Container_119P100_tags_201[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P100_constr_201, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P100_201, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P100_specs_201 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P101_203[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SecondaryRATDataUsageReport_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P101_tags_203[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P101_specs_203 = { + sizeof(struct ProtocolIE_Container_119P101), + offsetof(struct ProtocolIE_Container_119P101, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P101 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P101_tags_203, + sizeof(asn_DEF_ProtocolIE_Container_119P101_tags_203) + /sizeof(asn_DEF_ProtocolIE_Container_119P101_tags_203[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P101_tags_203, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P101_tags_203) + /sizeof(asn_DEF_ProtocolIE_Container_119P101_tags_203[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P101_constr_203, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P101_203, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P101_specs_203 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P102_205[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBActivityNotification_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P102_tags_205[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P102_specs_205 = { + sizeof(struct ProtocolIE_Container_119P102), + offsetof(struct ProtocolIE_Container_119P102, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P102 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P102_tags_205, + sizeof(asn_DEF_ProtocolIE_Container_119P102_tags_205) + /sizeof(asn_DEF_ProtocolIE_Container_119P102_tags_205[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P102_tags_205, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P102_tags_205) + /sizeof(asn_DEF_ProtocolIE_Container_119P102_tags_205[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P102_constr_205, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P102_205, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P102_specs_205 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P103_207[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCPartialResetRequired_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P103_tags_207[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P103_specs_207 = { + sizeof(struct ProtocolIE_Container_119P103), + offsetof(struct ProtocolIE_Container_119P103, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P103 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P103_tags_207, + sizeof(asn_DEF_ProtocolIE_Container_119P103_tags_207) + /sizeof(asn_DEF_ProtocolIE_Container_119P103_tags_207[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P103_tags_207, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P103_tags_207) + /sizeof(asn_DEF_ProtocolIE_Container_119P103_tags_207[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P103_constr_207, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P103_207, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P103_specs_207 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P104_209[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCPartialResetConfirm_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P104_tags_209[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P104_specs_209 = { + sizeof(struct ProtocolIE_Container_119P104), + offsetof(struct ProtocolIE_Container_119P104, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P104 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P104_tags_209, + sizeof(asn_DEF_ProtocolIE_Container_119P104_tags_209) + /sizeof(asn_DEF_ProtocolIE_Container_119P104_tags_209[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P104_tags_209, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P104_tags_209) + /sizeof(asn_DEF_ProtocolIE_Container_119P104_tags_209[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P104_constr_209, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P104_209, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P104_specs_209 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P105_211[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P105_tags_211[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P105_specs_211 = { + sizeof(struct ProtocolIE_Container_119P105), + offsetof(struct ProtocolIE_Container_119P105, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P105 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P105_tags_211, + sizeof(asn_DEF_ProtocolIE_Container_119P105_tags_211) + /sizeof(asn_DEF_ProtocolIE_Container_119P105_tags_211[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P105_tags_211, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P105_tags_211) + /sizeof(asn_DEF_ProtocolIE_Container_119P105_tags_211[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P105_constr_211, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P105_211, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P105_specs_211 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P106_213[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P106_tags_213[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P106_specs_213 = { + sizeof(struct ProtocolIE_Container_119P106), + offsetof(struct ProtocolIE_Container_119P106, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P106 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P106_tags_213, + sizeof(asn_DEF_ProtocolIE_Container_119P106_tags_213) + /sizeof(asn_DEF_ProtocolIE_Container_119P106_tags_213[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P106_tags_213, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P106_tags_213) + /sizeof(asn_DEF_ProtocolIE_Container_119P106_tags_213[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P106_constr_213, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P106_213, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P106_specs_213 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P107_215[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P107_tags_215[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P107_specs_215 = { + sizeof(struct ProtocolIE_Container_119P107), + offsetof(struct ProtocolIE_Container_119P107, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P107 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P107_tags_215, + sizeof(asn_DEF_ProtocolIE_Container_119P107_tags_215) + /sizeof(asn_DEF_ProtocolIE_Container_119P107_tags_215[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P107_tags_215, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P107_tags_215) + /sizeof(asn_DEF_ProtocolIE_Container_119P107_tags_215[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P107_constr_215, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P107_215, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P107_specs_215 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P108_217[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P108_tags_217[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P108_specs_217 = { + sizeof(struct ProtocolIE_Container_119P108), + offsetof(struct ProtocolIE_Container_119P108, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P108 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P108_tags_217, + sizeof(asn_DEF_ProtocolIE_Container_119P108_tags_217) + /sizeof(asn_DEF_ProtocolIE_Container_119P108_tags_217[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P108_tags_217, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P108_tags_217) + /sizeof(asn_DEF_ProtocolIE_Container_119P108_tags_217[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P108_constr_217, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P108_217, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P108_specs_217 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P109_219[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P109_tags_219[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P109_specs_219 = { + sizeof(struct ProtocolIE_Container_119P109), + offsetof(struct ProtocolIE_Container_119P109, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P109 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P109_tags_219, + sizeof(asn_DEF_ProtocolIE_Container_119P109_tags_219) + /sizeof(asn_DEF_ProtocolIE_Container_119P109_tags_219[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P109_tags_219, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P109_tags_219) + /sizeof(asn_DEF_ProtocolIE_Container_119P109_tags_219[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P109_constr_219, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P109_219, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P109_specs_219 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P110_221[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P110_tags_221[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P110_specs_221 = { + sizeof(struct ProtocolIE_Container_119P110), + offsetof(struct ProtocolIE_Container_119P110, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P110 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P110_tags_221, + sizeof(asn_DEF_ProtocolIE_Container_119P110_tags_221) + /sizeof(asn_DEF_ProtocolIE_Container_119P110_tags_221[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P110_tags_221, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P110_tags_221) + /sizeof(asn_DEF_ProtocolIE_Container_119P110_tags_221[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P110_constr_221, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P110_221, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P110_specs_221 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P111_223[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2RemovalRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P111_tags_223[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P111_specs_223 = { + sizeof(struct ProtocolIE_Container_119P111), + offsetof(struct ProtocolIE_Container_119P111, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P111 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P111_tags_223, + sizeof(asn_DEF_ProtocolIE_Container_119P111_tags_223) + /sizeof(asn_DEF_ProtocolIE_Container_119P111_tags_223[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P111_tags_223, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P111_tags_223) + /sizeof(asn_DEF_ProtocolIE_Container_119P111_tags_223[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P111_constr_223, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P111_223, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P111_specs_223 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P112_225[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCX2RemovalReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P112_tags_225[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P112_specs_225 = { + sizeof(struct ProtocolIE_Container_119P112), + offsetof(struct ProtocolIE_Container_119P112, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P112 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P112_tags_225, + sizeof(asn_DEF_ProtocolIE_Container_119P112_tags_225) + /sizeof(asn_DEF_ProtocolIE_Container_119P112_tags_225[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P112_tags_225, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P112_tags_225) + /sizeof(asn_DEF_ProtocolIE_Container_119P112_tags_225[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P112_constr_225, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P112_225, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P112_specs_225 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P113_227[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCX2RemovalReqIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P113_tags_227[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P113_specs_227 = { + sizeof(struct ProtocolIE_Container_119P113), + offsetof(struct ProtocolIE_Container_119P113, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P113 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P113_tags_227, + sizeof(asn_DEF_ProtocolIE_Container_119P113_tags_227) + /sizeof(asn_DEF_ProtocolIE_Container_119P113_tags_227[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P113_tags_227, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P113_tags_227) + /sizeof(asn_DEF_ProtocolIE_Container_119P113_tags_227[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P113_constr_227, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P113_227, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P113_specs_227 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P114_229[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2RemovalResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P114_tags_229[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P114_specs_229 = { + sizeof(struct ProtocolIE_Container_119P114), + offsetof(struct ProtocolIE_Container_119P114, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P114 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P114_tags_229, + sizeof(asn_DEF_ProtocolIE_Container_119P114_tags_229) + /sizeof(asn_DEF_ProtocolIE_Container_119P114_tags_229[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P114_tags_229, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P114_tags_229) + /sizeof(asn_DEF_ProtocolIE_Container_119P114_tags_229[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P114_constr_229, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P114_229, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P114_specs_229 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P115_231[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENB_ENDCX2RemovalReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P115_tags_231[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P115_specs_231 = { + sizeof(struct ProtocolIE_Container_119P115), + offsetof(struct ProtocolIE_Container_119P115, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P115 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P115_tags_231, + sizeof(asn_DEF_ProtocolIE_Container_119P115_tags_231) + /sizeof(asn_DEF_ProtocolIE_Container_119P115_tags_231[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P115_tags_231, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P115_tags_231) + /sizeof(asn_DEF_ProtocolIE_Container_119P115_tags_231[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P115_constr_231, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P115_231, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P115_specs_231 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P116_233[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P116_tags_233[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P116_specs_233 = { + sizeof(struct ProtocolIE_Container_119P116), + offsetof(struct ProtocolIE_Container_119P116, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P116 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P116_tags_233, + sizeof(asn_DEF_ProtocolIE_Container_119P116_tags_233) + /sizeof(asn_DEF_ProtocolIE_Container_119P116_tags_233[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P116_tags_233, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P116_tags_233) + /sizeof(asn_DEF_ProtocolIE_Container_119P116_tags_233[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P116_constr_233, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P116_233, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P116_specs_233 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P117_235[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2RemovalFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P117_tags_235[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P117_specs_235 = { + sizeof(struct ProtocolIE_Container_119P117), + offsetof(struct ProtocolIE_Container_119P117, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P117 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P117_tags_235, + sizeof(asn_DEF_ProtocolIE_Container_119P117_tags_235) + /sizeof(asn_DEF_ProtocolIE_Container_119P117_tags_235[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P117_tags_235, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P117_tags_235) + /sizeof(asn_DEF_ProtocolIE_Container_119P117_tags_235[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P117_constr_235, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P117_235, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P117_specs_235 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P118_237[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataForwardingAddressIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P118_tags_237[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P118_specs_237 = { + sizeof(struct ProtocolIE_Container_119P118), + offsetof(struct ProtocolIE_Container_119P118, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P118 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P118_tags_237, + sizeof(asn_DEF_ProtocolIE_Container_119P118_tags_237) + /sizeof(asn_DEF_ProtocolIE_Container_119P118_tags_237[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P118_tags_237, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P118_tags_237) + /sizeof(asn_DEF_ProtocolIE_Container_119P118_tags_237[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P118_constr_237, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P118_237, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P118_specs_237 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P119_239[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GNBStatusIndicationIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_119P119_tags_239[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P119_specs_239 = { + sizeof(struct ProtocolIE_Container_119P119), + offsetof(struct ProtocolIE_Container_119P119, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P119 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_119P119_tags_239, + sizeof(asn_DEF_ProtocolIE_Container_119P119_tags_239) + /sizeof(asn_DEF_ProtocolIE_Container_119P119_tags_239[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_119P119_tags_239, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_119P119_tags_239) + /sizeof(asn_DEF_ProtocolIE_Container_119P119_tags_239[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_119P119_constr_239, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_119P119_239, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_119P119_specs_239 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..c25461a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,1371 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; +struct HandoverRequest_IEs; +struct HandoverRequestAcknowledge_IEs; +struct HandoverPreparationFailure_IEs; +struct HandoverReport_IEs; +struct SNStatusTransfer_IEs; +struct UEContextRelease_IEs; +struct HandoverCancel_IEs; +struct ErrorIndication_IEs; +struct ResetRequest_IEs; +struct ResetResponse_IEs; +struct X2SetupRequest_IEs; +struct X2SetupResponse_IEs; +struct X2SetupFailure_IEs; +struct LoadInformation_IEs; +struct ENBConfigurationUpdate_IEs; +struct ENBConfigurationUpdateAcknowledge_IEs; +struct ENBConfigurationUpdateFailure_IEs; +struct ResourceStatusRequest_IEs; +struct ResourceStatusResponse_IEs; +struct ResourceStatusFailure_IEs; +struct ResourceStatusUpdate_IEs; +struct MobilityChangeRequest_IEs; +struct MobilityChangeAcknowledge_IEs; +struct MobilityChangeFailure_IEs; +struct RLFIndication_IEs; +struct CellActivationRequest_IEs; +struct CellActivationResponse_IEs; +struct CellActivationFailure_IEs; +struct X2Release_IEs; +struct X2APMessageTransfer_IEs; +struct SeNBAdditionRequest_IEs; +struct SeNBAdditionRequestAcknowledge_IEs; +struct SeNBAdditionRequestReject_IEs; +struct SeNBReconfigurationComplete_IEs; +struct SeNBModificationRequest_IEs; +struct SeNBModificationRequestAcknowledge_IEs; +struct SeNBModificationRequestReject_IEs; +struct SeNBModificationRequired_IEs; +struct SeNBModificationConfirm_IEs; +struct SeNBModificationRefuse_IEs; +struct SeNBReleaseRequest_IEs; +struct SeNBReleaseRequired_IEs; +struct SeNBReleaseConfirm_IEs; +struct SeNBCounterCheckRequest_IEs; +struct X2RemovalRequest_IEs; +struct X2RemovalResponse_IEs; +struct X2RemovalFailure_IEs; +struct RetrieveUEContextRequest_IEs; +struct RetrieveUEContextResponse_IEs; +struct RetrieveUEContextFailure_IEs; +struct SgNBAdditionRequest_IEs; +struct SgNBAdditionRequestAcknowledge_IEs; +struct SgNBAdditionRequestReject_IEs; +struct SgNBReconfigurationComplete_IEs; +struct SgNBModificationRequest_IEs; +struct SgNBModificationRequestAcknowledge_IEs; +struct SgNBModificationRequestReject_IEs; +struct SgNBModificationRequired_IEs; +struct SgNBModificationConfirm_IEs; +struct SgNBModificationRefuse_IEs; +struct SgNBReleaseRequest_IEs; +struct SgNBReleaseRequestAcknowledge_IEs; +struct SgNBReleaseRequestReject_IEs; +struct SgNBReleaseRequired_IEs; +struct SgNBReleaseConfirm_IEs; +struct SgNBCounterCheckRequest_IEs; +struct SgNBChangeRequired_IEs; +struct SgNBChangeConfirm_IEs; +struct RRCTransfer_IEs; +struct SgNBChangeRefuse_IEs; +struct ENDCX2SetupRequest_IEs; +struct ENB_ENDCX2SetupReqIEs; +struct En_gNB_ENDCX2SetupReqIEs; +struct ENDCX2SetupResponse_IEs; +struct ENB_ENDCX2SetupReqAckIEs; +struct En_gNB_ENDCX2SetupReqAckIEs; +struct ENDCX2SetupFailure_IEs; +struct ENDCConfigurationUpdate_IEs; +struct ENB_ENDCConfigUpdateIEs; +struct En_gNB_ENDCConfigUpdateIEs; +struct ENDCConfigurationUpdateAcknowledge_IEs; +struct ENB_ENDCConfigUpdateAckIEs; +struct En_gNB_ENDCConfigUpdateAckIEs; +struct ENDCConfigurationUpdateFailure_IEs; +struct ENDCCellActivationRequest_IEs; +struct ENDCCellActivationResponse_IEs; +struct ENDCCellActivationFailure_IEs; +struct SecondaryRATDataUsageReport_IEs; +struct SgNBActivityNotification_IEs; +struct ENDCPartialResetRequired_IEs; +struct ENDCPartialResetConfirm_IEs; +struct EUTRANRCellResourceCoordinationRequest_IEs; +struct ENB_EUTRA_NRCellResourceCoordinationReqIEs; +struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs; +struct EUTRANRCellResourceCoordinationResponse_IEs; +struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs; +struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs; +struct ENDCX2RemovalRequest_IEs; +struct ENB_ENDCX2RemovalReqIEs; +struct En_gNB_ENDCX2RemovalReqIEs; +struct ENDCX2RemovalResponse_IEs; +struct ENB_ENDCX2RemovalReqAckIEs; +struct En_gNB_ENDCX2RemovalReqAckIEs; +struct ENDCX2RemovalFailure_IEs; +struct DataForwardingAddressIndication_IEs; +struct GNBStatusIndicationIEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_119P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P0_t; +typedef struct ProtocolIE_Container_119P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P1_t; +typedef struct ProtocolIE_Container_119P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P2_t; +typedef struct ProtocolIE_Container_119P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P3_t; +typedef struct ProtocolIE_Container_119P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P4_t; +typedef struct ProtocolIE_Container_119P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P5_t; +typedef struct ProtocolIE_Container_119P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P6_t; +typedef struct ProtocolIE_Container_119P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P7_t; +typedef struct ProtocolIE_Container_119P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P8_t; +typedef struct ProtocolIE_Container_119P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P9_t; +typedef struct ProtocolIE_Container_119P10 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P10_t; +typedef struct ProtocolIE_Container_119P11 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P11_t; +typedef struct ProtocolIE_Container_119P12 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P12_t; +typedef struct ProtocolIE_Container_119P13 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P13_t; +typedef struct ProtocolIE_Container_119P14 { + A_SEQUENCE_OF(struct HandoverRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P14_t; +typedef struct ProtocolIE_Container_119P15 { + A_SEQUENCE_OF(struct HandoverRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P15_t; +typedef struct ProtocolIE_Container_119P16 { + A_SEQUENCE_OF(struct HandoverPreparationFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P16_t; +typedef struct ProtocolIE_Container_119P17 { + A_SEQUENCE_OF(struct HandoverReport_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P17_t; +typedef struct ProtocolIE_Container_119P18 { + A_SEQUENCE_OF(struct SNStatusTransfer_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P18_t; +typedef struct ProtocolIE_Container_119P19 { + A_SEQUENCE_OF(struct UEContextRelease_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P19_t; +typedef struct ProtocolIE_Container_119P20 { + A_SEQUENCE_OF(struct HandoverCancel_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P20_t; +typedef struct ProtocolIE_Container_119P21 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P21_t; +typedef struct ProtocolIE_Container_119P22 { + A_SEQUENCE_OF(struct ResetRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P22_t; +typedef struct ProtocolIE_Container_119P23 { + A_SEQUENCE_OF(struct ResetResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P23_t; +typedef struct ProtocolIE_Container_119P24 { + A_SEQUENCE_OF(struct X2SetupRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P24_t; +typedef struct ProtocolIE_Container_119P25 { + A_SEQUENCE_OF(struct X2SetupResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P25_t; +typedef struct ProtocolIE_Container_119P26 { + A_SEQUENCE_OF(struct X2SetupFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P26_t; +typedef struct ProtocolIE_Container_119P27 { + A_SEQUENCE_OF(struct LoadInformation_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P27_t; +typedef struct ProtocolIE_Container_119P28 { + A_SEQUENCE_OF(struct ENBConfigurationUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P28_t; +typedef struct ProtocolIE_Container_119P29 { + A_SEQUENCE_OF(struct ENBConfigurationUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P29_t; +typedef struct ProtocolIE_Container_119P30 { + A_SEQUENCE_OF(struct ENBConfigurationUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P30_t; +typedef struct ProtocolIE_Container_119P31 { + A_SEQUENCE_OF(struct ResourceStatusRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P31_t; +typedef struct ProtocolIE_Container_119P32 { + A_SEQUENCE_OF(struct ResourceStatusResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P32_t; +typedef struct ProtocolIE_Container_119P33 { + A_SEQUENCE_OF(struct ResourceStatusFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P33_t; +typedef struct ProtocolIE_Container_119P34 { + A_SEQUENCE_OF(struct ResourceStatusUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P34_t; +typedef struct ProtocolIE_Container_119P35 { + A_SEQUENCE_OF(struct MobilityChangeRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P35_t; +typedef struct ProtocolIE_Container_119P36 { + A_SEQUENCE_OF(struct MobilityChangeAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P36_t; +typedef struct ProtocolIE_Container_119P37 { + A_SEQUENCE_OF(struct MobilityChangeFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P37_t; +typedef struct ProtocolIE_Container_119P38 { + A_SEQUENCE_OF(struct RLFIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P38_t; +typedef struct ProtocolIE_Container_119P39 { + A_SEQUENCE_OF(struct CellActivationRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P39_t; +typedef struct ProtocolIE_Container_119P40 { + A_SEQUENCE_OF(struct CellActivationResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P40_t; +typedef struct ProtocolIE_Container_119P41 { + A_SEQUENCE_OF(struct CellActivationFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P41_t; +typedef struct ProtocolIE_Container_119P42 { + A_SEQUENCE_OF(struct X2Release_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P42_t; +typedef struct ProtocolIE_Container_119P43 { + A_SEQUENCE_OF(struct X2APMessageTransfer_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P43_t; +typedef struct ProtocolIE_Container_119P44 { + A_SEQUENCE_OF(struct SeNBAdditionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P44_t; +typedef struct ProtocolIE_Container_119P45 { + A_SEQUENCE_OF(struct SeNBAdditionRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P45_t; +typedef struct ProtocolIE_Container_119P46 { + A_SEQUENCE_OF(struct SeNBAdditionRequestReject_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P46_t; +typedef struct ProtocolIE_Container_119P47 { + A_SEQUENCE_OF(struct SeNBReconfigurationComplete_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P47_t; +typedef struct ProtocolIE_Container_119P48 { + A_SEQUENCE_OF(struct SeNBModificationRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P48_t; +typedef struct ProtocolIE_Container_119P49 { + A_SEQUENCE_OF(struct SeNBModificationRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P49_t; +typedef struct ProtocolIE_Container_119P50 { + A_SEQUENCE_OF(struct SeNBModificationRequestReject_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P50_t; +typedef struct ProtocolIE_Container_119P51 { + A_SEQUENCE_OF(struct SeNBModificationRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P51_t; +typedef struct ProtocolIE_Container_119P52 { + A_SEQUENCE_OF(struct SeNBModificationConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P52_t; +typedef struct ProtocolIE_Container_119P53 { + A_SEQUENCE_OF(struct SeNBModificationRefuse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P53_t; +typedef struct ProtocolIE_Container_119P54 { + A_SEQUENCE_OF(struct SeNBReleaseRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P54_t; +typedef struct ProtocolIE_Container_119P55 { + A_SEQUENCE_OF(struct SeNBReleaseRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P55_t; +typedef struct ProtocolIE_Container_119P56 { + A_SEQUENCE_OF(struct SeNBReleaseConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P56_t; +typedef struct ProtocolIE_Container_119P57 { + A_SEQUENCE_OF(struct SeNBCounterCheckRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P57_t; +typedef struct ProtocolIE_Container_119P58 { + A_SEQUENCE_OF(struct X2RemovalRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P58_t; +typedef struct ProtocolIE_Container_119P59 { + A_SEQUENCE_OF(struct X2RemovalResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P59_t; +typedef struct ProtocolIE_Container_119P60 { + A_SEQUENCE_OF(struct X2RemovalFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P60_t; +typedef struct ProtocolIE_Container_119P61 { + A_SEQUENCE_OF(struct RetrieveUEContextRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P61_t; +typedef struct ProtocolIE_Container_119P62 { + A_SEQUENCE_OF(struct RetrieveUEContextResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P62_t; +typedef struct ProtocolIE_Container_119P63 { + A_SEQUENCE_OF(struct RetrieveUEContextFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P63_t; +typedef struct ProtocolIE_Container_119P64 { + A_SEQUENCE_OF(struct SgNBAdditionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P64_t; +typedef struct ProtocolIE_Container_119P65 { + A_SEQUENCE_OF(struct SgNBAdditionRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P65_t; +typedef struct ProtocolIE_Container_119P66 { + A_SEQUENCE_OF(struct SgNBAdditionRequestReject_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P66_t; +typedef struct ProtocolIE_Container_119P67 { + A_SEQUENCE_OF(struct SgNBReconfigurationComplete_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P67_t; +typedef struct ProtocolIE_Container_119P68 { + A_SEQUENCE_OF(struct SgNBModificationRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P68_t; +typedef struct ProtocolIE_Container_119P69 { + A_SEQUENCE_OF(struct SgNBModificationRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P69_t; +typedef struct ProtocolIE_Container_119P70 { + A_SEQUENCE_OF(struct SgNBModificationRequestReject_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P70_t; +typedef struct ProtocolIE_Container_119P71 { + A_SEQUENCE_OF(struct SgNBModificationRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P71_t; +typedef struct ProtocolIE_Container_119P72 { + A_SEQUENCE_OF(struct SgNBModificationConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P72_t; +typedef struct ProtocolIE_Container_119P73 { + A_SEQUENCE_OF(struct SgNBModificationRefuse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P73_t; +typedef struct ProtocolIE_Container_119P74 { + A_SEQUENCE_OF(struct SgNBReleaseRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P74_t; +typedef struct ProtocolIE_Container_119P75 { + A_SEQUENCE_OF(struct SgNBReleaseRequestAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P75_t; +typedef struct ProtocolIE_Container_119P76 { + A_SEQUENCE_OF(struct SgNBReleaseRequestReject_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P76_t; +typedef struct ProtocolIE_Container_119P77 { + A_SEQUENCE_OF(struct SgNBReleaseRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P77_t; +typedef struct ProtocolIE_Container_119P78 { + A_SEQUENCE_OF(struct SgNBReleaseConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P78_t; +typedef struct ProtocolIE_Container_119P79 { + A_SEQUENCE_OF(struct SgNBCounterCheckRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P79_t; +typedef struct ProtocolIE_Container_119P80 { + A_SEQUENCE_OF(struct SgNBChangeRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P80_t; +typedef struct ProtocolIE_Container_119P81 { + A_SEQUENCE_OF(struct SgNBChangeConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P81_t; +typedef struct ProtocolIE_Container_119P82 { + A_SEQUENCE_OF(struct RRCTransfer_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P82_t; +typedef struct ProtocolIE_Container_119P83 { + A_SEQUENCE_OF(struct SgNBChangeRefuse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P83_t; +typedef struct ProtocolIE_Container_119P84 { + A_SEQUENCE_OF(struct ENDCX2SetupRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P84_t; +typedef struct ProtocolIE_Container_119P85 { + A_SEQUENCE_OF(struct ENB_ENDCX2SetupReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P85_t; +typedef struct ProtocolIE_Container_119P86 { + A_SEQUENCE_OF(struct En_gNB_ENDCX2SetupReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P86_t; +typedef struct ProtocolIE_Container_119P87 { + A_SEQUENCE_OF(struct ENDCX2SetupResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P87_t; +typedef struct ProtocolIE_Container_119P88 { + A_SEQUENCE_OF(struct ENB_ENDCX2SetupReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P88_t; +typedef struct ProtocolIE_Container_119P89 { + A_SEQUENCE_OF(struct En_gNB_ENDCX2SetupReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P89_t; +typedef struct ProtocolIE_Container_119P90 { + A_SEQUENCE_OF(struct ENDCX2SetupFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P90_t; +typedef struct ProtocolIE_Container_119P91 { + A_SEQUENCE_OF(struct ENDCConfigurationUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P91_t; +typedef struct ProtocolIE_Container_119P92 { + A_SEQUENCE_OF(struct ENB_ENDCConfigUpdateIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P92_t; +typedef struct ProtocolIE_Container_119P93 { + A_SEQUENCE_OF(struct En_gNB_ENDCConfigUpdateIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P93_t; +typedef struct ProtocolIE_Container_119P94 { + A_SEQUENCE_OF(struct ENDCConfigurationUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P94_t; +typedef struct ProtocolIE_Container_119P95 { + A_SEQUENCE_OF(struct ENB_ENDCConfigUpdateAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P95_t; +typedef struct ProtocolIE_Container_119P96 { + A_SEQUENCE_OF(struct En_gNB_ENDCConfigUpdateAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P96_t; +typedef struct ProtocolIE_Container_119P97 { + A_SEQUENCE_OF(struct ENDCConfigurationUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P97_t; +typedef struct ProtocolIE_Container_119P98 { + A_SEQUENCE_OF(struct ENDCCellActivationRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P98_t; +typedef struct ProtocolIE_Container_119P99 { + A_SEQUENCE_OF(struct ENDCCellActivationResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P99_t; +typedef struct ProtocolIE_Container_119P100 { + A_SEQUENCE_OF(struct ENDCCellActivationFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P100_t; +typedef struct ProtocolIE_Container_119P101 { + A_SEQUENCE_OF(struct SecondaryRATDataUsageReport_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P101_t; +typedef struct ProtocolIE_Container_119P102 { + A_SEQUENCE_OF(struct SgNBActivityNotification_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P102_t; +typedef struct ProtocolIE_Container_119P103 { + A_SEQUENCE_OF(struct ENDCPartialResetRequired_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P103_t; +typedef struct ProtocolIE_Container_119P104 { + A_SEQUENCE_OF(struct ENDCPartialResetConfirm_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P104_t; +typedef struct ProtocolIE_Container_119P105 { + A_SEQUENCE_OF(struct EUTRANRCellResourceCoordinationRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P105_t; +typedef struct ProtocolIE_Container_119P106 { + A_SEQUENCE_OF(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P106_t; +typedef struct ProtocolIE_Container_119P107 { + A_SEQUENCE_OF(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P107_t; +typedef struct ProtocolIE_Container_119P108 { + A_SEQUENCE_OF(struct EUTRANRCellResourceCoordinationResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P108_t; +typedef struct ProtocolIE_Container_119P109 { + A_SEQUENCE_OF(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P109_t; +typedef struct ProtocolIE_Container_119P110 { + A_SEQUENCE_OF(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P110_t; +typedef struct ProtocolIE_Container_119P111 { + A_SEQUENCE_OF(struct ENDCX2RemovalRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P111_t; +typedef struct ProtocolIE_Container_119P112 { + A_SEQUENCE_OF(struct ENB_ENDCX2RemovalReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P112_t; +typedef struct ProtocolIE_Container_119P113 { + A_SEQUENCE_OF(struct En_gNB_ENDCX2RemovalReqIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P113_t; +typedef struct ProtocolIE_Container_119P114 { + A_SEQUENCE_OF(struct ENDCX2RemovalResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P114_t; +typedef struct ProtocolIE_Container_119P115 { + A_SEQUENCE_OF(struct ENB_ENDCX2RemovalReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P115_t; +typedef struct ProtocolIE_Container_119P116 { + A_SEQUENCE_OF(struct En_gNB_ENDCX2RemovalReqAckIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P116_t; +typedef struct ProtocolIE_Container_119P117 { + A_SEQUENCE_OF(struct ENDCX2RemovalFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P117_t; +typedef struct ProtocolIE_Container_119P118 { + A_SEQUENCE_OF(struct DataForwardingAddressIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P118_t; +typedef struct ProtocolIE_Container_119P119 { + A_SEQUENCE_OF(struct GNBStatusIndicationIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_119P119_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P19_constr_39; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P20; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P20_specs_41; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P20_41[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P20_constr_41; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P21; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P21_specs_43; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P21_43[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P21_constr_43; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P22; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P22_specs_45; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P22_45[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P22_constr_45; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P23; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P23_specs_47; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P23_47[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P23_constr_47; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P24; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P24_specs_49; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P24_49[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P24_constr_49; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P25; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P25_specs_51; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P25_51[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P25_constr_51; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P26; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P26_specs_53; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P26_53[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P26_constr_53; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P27; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P27_specs_55; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P27_55[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P27_constr_55; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P28; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P28_specs_57; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P28_57[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P28_constr_57; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P29; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P29_specs_59; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P29_59[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P29_constr_59; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P30; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P30_specs_61; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P30_61[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P30_constr_61; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P31; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P31_specs_63; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P31_63[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P31_constr_63; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P32; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P32_specs_65; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P32_65[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P32_constr_65; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P33; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P33_specs_67; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P33_67[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P33_constr_67; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P34; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P34_specs_69; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P34_69[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P34_constr_69; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P35; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P35_specs_71; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P35_71[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P35_constr_71; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P36; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P36_specs_73; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P36_73[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P36_constr_73; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P37; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P37_specs_75; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P37_75[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P37_constr_75; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P38; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P38_specs_77; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P38_77[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P38_constr_77; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P39; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P39_specs_79; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P39_79[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P39_constr_79; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P40; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P40_specs_81; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P40_81[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P40_constr_81; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P41; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P41_specs_83; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P41_83[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P41_constr_83; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P42; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P42_specs_85; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P42_85[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P42_constr_85; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P43; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P43_specs_87; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P43_87[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P43_constr_87; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P44; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P44_specs_89; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P44_89[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P44_constr_89; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P45; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P45_specs_91; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P45_91[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P45_constr_91; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P46; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P46_specs_93; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P46_93[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P46_constr_93; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P47; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P47_specs_95; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P47_95[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P47_constr_95; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P48; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P48_specs_97; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P48_97[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P48_constr_97; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P49; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P49_specs_99; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P49_99[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P49_constr_99; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P50; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P50_specs_101; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P50_101[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P50_constr_101; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P51; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P51_specs_103; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P51_103[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P51_constr_103; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P52; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P52_specs_105; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P52_105[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P52_constr_105; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P53; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P53_specs_107; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P53_107[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P53_constr_107; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P54; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P54_specs_109; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P54_109[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P54_constr_109; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P55; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P55_specs_111; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P55_111[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P55_constr_111; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P56; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P56_specs_113; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P56_113[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P56_constr_113; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P57; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P57_specs_115; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P57_115[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P57_constr_115; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P58; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P58_specs_117; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P58_117[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P58_constr_117; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P59; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P59_specs_119; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P59_119[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P59_constr_119; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P60; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P60_specs_121; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P60_121[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P60_constr_121; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P61; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P61_specs_123; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P61_123[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P61_constr_123; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P62; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P62_specs_125; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P62_125[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P62_constr_125; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P63; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P63_specs_127; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P63_127[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P63_constr_127; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P64; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P64_specs_129; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P64_129[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P64_constr_129; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P65; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P65_specs_131; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P65_131[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P65_constr_131; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P66; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P66_specs_133; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P66_133[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P66_constr_133; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P67; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P67_specs_135; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P67_135[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P67_constr_135; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P68; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P68_specs_137; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P68_137[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P68_constr_137; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P69; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P69_specs_139; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P69_139[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P69_constr_139; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P70; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P70_specs_141; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P70_141[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P70_constr_141; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P71; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P71_specs_143; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P71_143[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P71_constr_143; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P72; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P72_specs_145; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P72_145[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P72_constr_145; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P73; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P73_specs_147; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P73_147[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P73_constr_147; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P74; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P74_specs_149; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P74_149[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P74_constr_149; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P75; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P75_specs_151; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P75_151[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P75_constr_151; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P76; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P76_specs_153; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P76_153[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P76_constr_153; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P77; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P77_specs_155; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P77_155[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P77_constr_155; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P78; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P78_specs_157; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P78_157[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P78_constr_157; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P79; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P79_specs_159; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P79_159[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P79_constr_159; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P80; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P80_specs_161; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P80_161[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P80_constr_161; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P81; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P81_specs_163; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P81_163[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P81_constr_163; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P82; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P82_specs_165; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P82_165[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P82_constr_165; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P83; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P83_specs_167; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P83_167[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P83_constr_167; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P84; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P84_specs_169; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P84_169[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P84_constr_169; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P85; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P85_specs_171; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P85_171[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P85_constr_171; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P86; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P86_specs_173; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P86_173[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P86_constr_173; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P87; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P87_specs_175; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P87_175[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P87_constr_175; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P88; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P88_specs_177; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P88_177[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P88_constr_177; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P89; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P89_specs_179; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P89_179[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P89_constr_179; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P90; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P90_specs_181; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P90_181[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P90_constr_181; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P91; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P91_specs_183; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P91_183[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P91_constr_183; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P92; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P92_specs_185; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P92_185[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P92_constr_185; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P93; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P93_specs_187; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P93_187[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P93_constr_187; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P94; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P94_specs_189; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P94_189[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P94_constr_189; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P95; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P95_specs_191; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P95_191[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P95_constr_191; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P96; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P96_specs_193; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P96_193[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P96_constr_193; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P97; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P97_specs_195; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P97_195[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P97_constr_195; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P98; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P98_specs_197; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P98_197[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P98_constr_197; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P99; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P99_specs_199; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P99_199[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P99_constr_199; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P100; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P100_specs_201; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P100_201[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P100_constr_201; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P101; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P101_specs_203; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P101_203[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P101_constr_203; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P102; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P102_specs_205; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P102_205[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P102_constr_205; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P103; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P103_specs_207; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P103_207[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P103_constr_207; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P104; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P104_specs_209; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P104_209[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P104_constr_209; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P105; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P105_specs_211; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P105_211[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P105_constr_211; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P106; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P106_specs_213; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P106_213[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P106_constr_213; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P107; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P107_specs_215; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P107_215[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P107_constr_215; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P108; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P108_specs_217; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P108_217[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P108_constr_217; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P109; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P109_specs_219; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P109_219[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P109_constr_219; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P110; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P110_specs_221; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P110_221[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P110_constr_221; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P111; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P111_specs_223; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P111_223[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P111_constr_223; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P112; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P112_specs_225; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P112_225[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P112_constr_225; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P113; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P113_specs_227; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P113_227[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P113_constr_227; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P114; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P114_specs_229; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P114_229[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P114_constr_229; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P115; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P115_specs_231; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P115_231[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P115_constr_231; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P116; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P116_specs_233; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P116_233[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P116_constr_233; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P117; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P117_specs_235; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P117_235[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P117_constr_235; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P118; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P118_specs_237; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P118_237[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P118_constr_237; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_119P119; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_119P119_specs_239; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_119P119_239[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_119P119_constr_239; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..a52ddee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,27 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..ea70da6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..fb16e45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,27 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..fa29ee5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..40a99b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,27 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..c5a91f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..8cc02f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,48581 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 60011; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 60013; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 60015; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_48_id_RANfunction_Item = 60001; +static const long asn_VAL_48_ignore = 1; +static const long asn_VAL_48_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_49_id_RANfunctionID_Item = 60004; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_52_id_RANfunctionIEcause_Item = 60005; +static const long asn_VAL_52_ignore = 1; +static const long asn_VAL_52_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_79_id_E_RABs_ToBeSetup_Item = 4; +static const long asn_VAL_79_ignore = 1; +static const long asn_VAL_79_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_79_id_E_RABs_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_79_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_79_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_91_id_E_RABs_Admitted_Item = 0; +static const long asn_VAL_91_ignore = 1; +static const long asn_VAL_91_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_91_id_E_RABs_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_91_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_91_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_112_id_E_RABs_SubjectToStatusTransfer_Item = 19; +static const long asn_VAL_112_ignore = 1; +static const long asn_VAL_112_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_SubjectToStatusTransfer_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_112_id_E_RABs_SubjectToStatusTransfer_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_112_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToStatusTransfer_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_112_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_SubjectToStatusTransfer_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_SubjectToStatusTransfer_ItemIEs_1_rows } +}; +static const long asn_VAL_146_id_CellInformation_Item = 7; +static const long asn_VAL_146_ignore = 1; +static const long asn_VAL_146_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_CellInformation_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_146_id_CellInformation_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_146_ignore }, + { "&Value", aioc__type, &asn_DEF_CellInformation_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_146_mandatory } +}; +static const asn_ioc_set_t asn_IOS_CellInformation_ItemIEs_1[] = { + { 1, 4, asn_IOS_CellInformation_ItemIEs_1_rows } +}; +static const long asn_VAL_166_id_CellToReport_Item = 31; +static const long asn_VAL_166_ignore = 1; +static const long asn_VAL_166_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_CellToReport_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_166_id_CellToReport_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_166_ignore }, + { "&Value", aioc__type, &asn_DEF_CellToReport_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_166_mandatory } +}; +static const asn_ioc_set_t asn_IOS_CellToReport_ItemIEs_1[] = { + { 1, 4, asn_IOS_CellToReport_ItemIEs_1_rows } +}; +static const long asn_VAL_171_id_MeasurementInitiationResult_Item = 66; +static const long asn_VAL_171_ignore = 1; +static const long asn_VAL_171_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_MeasurementInitiationResult_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_171_id_MeasurementInitiationResult_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_171_ignore }, + { "&Value", aioc__type, &asn_DEF_MeasurementInitiationResult_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_171_mandatory } +}; +static const asn_ioc_set_t asn_IOS_MeasurementInitiationResult_ItemIEs_1[] = { + { 1, 4, asn_IOS_MeasurementInitiationResult_ItemIEs_1_rows } +}; +static const long asn_VAL_172_id_MeasurementFailureCause_Item = 67; +static const long asn_VAL_172_ignore = 1; +static const long asn_VAL_172_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_MeasurementFailureCause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_172_id_MeasurementFailureCause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_172_ignore }, + { "&Value", aioc__type, &asn_DEF_MeasurementFailureCause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_172_mandatory } +}; +static const asn_ioc_set_t asn_IOS_MeasurementFailureCause_ItemIEs_1[] = { + { 1, 4, asn_IOS_MeasurementFailureCause_ItemIEs_1_rows } +}; +static const long asn_VAL_178_id_CompleteFailureCauseInformation_Item = 69; +static const long asn_VAL_178_ignore = 1; +static const long asn_VAL_178_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_CompleteFailureCauseInformation_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_178_id_CompleteFailureCauseInformation_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_178_ignore }, + { "&Value", aioc__type, &asn_DEF_CompleteFailureCauseInformation_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_178_mandatory } +}; +static const asn_ioc_set_t asn_IOS_CompleteFailureCauseInformation_ItemIEs_1[] = { + { 1, 4, asn_IOS_CompleteFailureCauseInformation_ItemIEs_1_rows } +}; +static const long asn_VAL_182_id_CellMeasurementResult_Item = 33; +static const long asn_VAL_182_ignore = 1; +static const long asn_VAL_182_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_CellMeasurementResult_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_182_id_CellMeasurementResult_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_182_ignore }, + { "&Value", aioc__type, &asn_DEF_CellMeasurementResult_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_182_mandatory } +}; +static const asn_ioc_set_t asn_IOS_CellMeasurementResult_ItemIEs_1[] = { + { 1, 4, asn_IOS_CellMeasurementResult_ItemIEs_1_rows } +}; +static const long asn_VAL_224_id_E_RABs_ToBeAdded_Item = 118; +static const long asn_VAL_224_reject = 0; +static const long asn_VAL_224_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_224_id_E_RABs_ToBeAdded_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_224_reject }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_224_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_ItemIEs_1_rows } +}; +static const long asn_VAL_236_id_E_RABs_Admitted_ToBeAdded_Item = 121; +static const long asn_VAL_236_ignore = 1; +static const long asn_VAL_236_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_236_id_E_RABs_Admitted_ToBeAdded_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_236_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_236_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_ItemIEs_1_rows } +}; +static const long asn_VAL_258_id_E_RABs_ToBeAdded_ModReqItem = 125; +static const long asn_VAL_258_ignore = 1; +static const long asn_VAL_258_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_ModReqItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_258_id_E_RABs_ToBeAdded_ModReqItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_258_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_ModReqItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_258_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_ModReqItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_ModReqItemIEs_1_rows } +}; +static const long asn_VAL_259_id_E_RABs_ToBeModified_ModReqItem = 126; +static const long asn_VAL_259_ignore = 1; +static const long asn_VAL_259_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_ModReqItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_259_id_E_RABs_ToBeModified_ModReqItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_259_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeModified_ModReqItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_259_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_ModReqItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeModified_ModReqItemIEs_1_rows } +}; +static const long asn_VAL_260_id_E_RABs_ToBeReleased_ModReqItem = 127; +static const long asn_VAL_260_ignore = 1; +static const long asn_VAL_260_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_ModReqItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_260_id_E_RABs_ToBeReleased_ModReqItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_260_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_ModReqItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_260_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_ModReqItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_ModReqItemIEs_1_rows } +}; +static const long asn_VAL_271_id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131; +static const long asn_VAL_271_ignore = 1; +static const long asn_VAL_271_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_271_id_E_RABs_Admitted_ToBeAdded_ModAckItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_271_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_271_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1_rows } +}; +static const long asn_VAL_272_id_E_RABs_Admitted_ToBeModified_ModAckItem = 132; +static const long asn_VAL_272_ignore = 1; +static const long asn_VAL_272_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_272_id_E_RABs_Admitted_ToBeModified_ModAckItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_272_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_272_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1_rows } +}; +static const long asn_VAL_273_id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133; +static const long asn_VAL_273_ignore = 1; +static const long asn_VAL_273_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_273_id_E_RABs_Admitted_ToBeReleased_ModAckItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_273_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToReleased_ModAckItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_273_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1_rows } +}; +static const long asn_VAL_288_id_E_RABs_ToBeReleased_ModReqdItem = 135; +static const long asn_VAL_288_ignore = 1; +static const long asn_VAL_288_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_ModReqdItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_288_id_E_RABs_ToBeReleased_ModReqdItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_288_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_ModReqdItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_288_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_ModReqdItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_ModReqdItemIEs_1_rows } +}; +static const long asn_VAL_310_id_E_RABs_ToBeReleased_RelReqItem = 138; +static const long asn_VAL_310_ignore = 1; +static const long asn_VAL_310_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_RelReqItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_310_id_E_RABs_ToBeReleased_RelReqItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_310_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_RelReqItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_310_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_RelReqItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_RelReqItemIEs_1_rows } +}; +static const long asn_VAL_322_id_E_RABs_ToBeReleased_RelConfItem = 140; +static const long asn_VAL_322_ignore = 1; +static const long asn_VAL_322_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_RelConfItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_322_id_E_RABs_ToBeReleased_RelConfItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_322_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_RelConfItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_322_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_RelConfItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_RelConfItemIEs_1_rows } +}; +static const long asn_VAL_328_id_E_RABs_SubjectToCounterCheckItem = 142; +static const long asn_VAL_328_ignore = 1; +static const long asn_VAL_328_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_SubjectToCounterCheckItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_328_id_E_RABs_SubjectToCounterCheckItem }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_328_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToCounterCheckItem }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_328_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_SubjectToCounterCheckItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_SubjectToCounterCheckItemIEs_1_rows } +}; +static const long asn_VAL_357_id_E_RABs_ToBeSetupRetrieve_Item = 174; +static const long asn_VAL_357_ignore = 1; +static const long asn_VAL_357_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeSetupRetrieve_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_357_id_E_RABs_ToBeSetupRetrieve_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_357_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeSetupRetrieve_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_357_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeSetupRetrieve_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeSetupRetrieve_ItemIEs_1_rows } +}; +static const long asn_VAL_378_id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209; +static const long asn_VAL_378_reject = 0; +static const long asn_VAL_378_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_378_id_E_RABs_ToBeAdded_SgNBAddReq_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_378_reject }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_378_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1_rows } +}; +static const long asn_VAL_389_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213; +static const long asn_VAL_389_ignore = 1; +static const long asn_VAL_389_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_389_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_389_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_389_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1_rows } +}; +static const long asn_VAL_411_id_E_RABs_ToBeAdded_SgNBModReq_Item = 216; +static const long asn_VAL_411_ignore = 1; +static const long asn_VAL_411_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_411_id_E_RABs_ToBeAdded_SgNBModReq_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_411_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_411_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1_rows } +}; +static const long asn_VAL_412_id_E_RABs_ToBeModified_SgNBModReq_Item = 217; +static const long asn_VAL_412_ignore = 1; +static const long asn_VAL_412_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_412_id_E_RABs_ToBeModified_SgNBModReq_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_412_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_412_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1_rows } +}; +static const long asn_VAL_413_id_E_RABs_ToBeReleased_SgNBModReq_Item = 218; +static const long asn_VAL_413_ignore = 1; +static const long asn_VAL_413_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_413_id_E_RABs_ToBeReleased_SgNBModReq_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_413_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_413_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1_rows } +}; +static const long asn_VAL_427_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222; +static const long asn_VAL_427_ignore = 1; +static const long asn_VAL_427_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_427_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_427_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_427_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1_rows } +}; +static const long asn_VAL_428_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223; +static const long asn_VAL_428_ignore = 1; +static const long asn_VAL_428_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_428_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_428_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_428_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1_rows } +}; +static const long asn_VAL_429_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224; +static const long asn_VAL_429_ignore = 1; +static const long asn_VAL_429_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_429_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_429_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_429_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1_rows } +}; +static const long asn_VAL_445_id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227; +static const long asn_VAL_445_ignore = 1; +static const long asn_VAL_445_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_445_id_E_RABs_ToBeReleased_SgNBModReqd_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_445_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_445_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1_rows } +}; +static const long asn_VAL_446_id_E_RABs_ToBeModified_SgNBModReqd_Item = 228; +static const long asn_VAL_446_ignore = 1; +static const long asn_VAL_446_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_446_id_E_RABs_ToBeModified_SgNBModReqd_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_446_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_446_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1_rows } +}; +static const long asn_VAL_454_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295; +static const long asn_VAL_454_ignore = 1; +static const long asn_VAL_454_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_454_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_454_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_454_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1_rows } +}; +static const long asn_VAL_468_id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232; +static const long asn_VAL_468_ignore = 1; +static const long asn_VAL_468_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_468_id_E_RABs_ToBeReleased_SgNBRelReq_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_468_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_468_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1_rows } +}; +static const long asn_VAL_474_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319; +static const long asn_VAL_474_ignore = 1; +static const long asn_VAL_474_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_474_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_474_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_474_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1_rows } +}; +static const long asn_VAL_485_id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321; +static const long asn_VAL_485_ignore = 1; +static const long asn_VAL_485_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_485_id_E_RABs_ToBeReleased_SgNBRelReqd_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_485_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_485_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1_rows } +}; +static const long asn_VAL_491_id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234; +static const long asn_VAL_491_ignore = 1; +static const long asn_VAL_491_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_491_id_E_RABs_ToBeReleased_SgNBRelConf_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_491_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_491_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1_rows } +}; +static const long asn_VAL_496_id_E_RABs_SubjectToSgNBCounterCheck_Item = 236; +static const long asn_VAL_496_ignore = 1; +static const long asn_VAL_496_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_496_id_E_RABs_SubjectToSgNBCounterCheck_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_496_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_496_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1_rows } +}; +static const long asn_VAL_508_id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230; +static const long asn_VAL_508_ignore = 1; +static const long asn_VAL_508_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_508_id_E_RABs_ToBeReleased_SgNBChaConf_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_508_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_508_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1_rows } +}; +static const long asn_VAL_592_id_E_RABs_DataForwardingAddress_Item = 308; +static const long asn_VAL_592_ignore = 1; +static const long asn_VAL_592_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABs_DataForwardingAddress_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_592_id_E_RABs_DataForwardingAddress_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_592_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_DataForwardingAddress_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_592_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABs_DataForwardingAddress_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABs_DataForwardingAddress_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 60030; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 60003; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscription = 60033; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscription }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 60030; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 60003; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 60012; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 60014; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 60030; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 60003; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 60014; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 17; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 60030; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 60003; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 60030; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 60003; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 60030; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 60003; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_RICcause = 60020; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 17; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_RICcause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_RICcause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 60030; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 60003; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 60017; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 60028; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_mandatory = 2; +static const long asn_VAL_27_id_RICindicationType = 60029; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 60026; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 60027; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 60019; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 60030; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 60003; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 60019; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 60022; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 60023; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 60021; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 60030; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 60003; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 60019; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 60024; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 4, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_41_id_RICrequestID = 60030; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_mandatory = 2; +static const long asn_VAL_42_id_RANfunctionID = 60003; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RICcallProcessID = 60019; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_optional = 0; +static const long asn_VAL_44_id_RICcause = 60020; +static const long asn_VAL_44_ignore = 1; +static const long asn_VAL_44_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_ignore }, + { "&Value", aioc__type, &asn_DEF_RICcause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_45_id_RANfunctionsAdded = 60007; +static const long asn_VAL_45_reject = 0; +static const long asn_VAL_45_optional = 0; +static const long asn_VAL_46_id_RANfunctionsModified = 60009; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const long asn_VAL_47_id_RANfunctionsDeleted = 60008; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_50_id_RANfunctionsAccepted = 60006; +static const long asn_VAL_50_reject = 0; +static const long asn_VAL_50_optional = 0; +static const long asn_VAL_51_id_RANfunctionsRejected = 60010; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_53_id_RANfunctionsRejected = 60010; +static const long asn_VAL_53_ignore = 1; +static const long asn_VAL_53_optional = 0; +static const long asn_VAL_54_id_TimeToWait = 22; +static const long asn_VAL_54_ignore = 1; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_CriticalityDiagnostics = 17; +static const long asn_VAL_55_ignore = 1; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_56_id_RANfunctionsAccepted = 60006; +static const long asn_VAL_56_reject = 0; +static const long asn_VAL_56_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static const long asn_VAL_57_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_57_reject = 0; +static const long asn_VAL_57_mandatory = 2; +static const long asn_VAL_58_id_Cause = 5; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_mandatory = 2; +static const long asn_VAL_59_id_TargetCell_ID = 11; +static const long asn_VAL_59_reject = 0; +static const long asn_VAL_59_mandatory = 2; +static const long asn_VAL_60_id_GUMMEI_ID = 23; +static const long asn_VAL_60_reject = 0; +static const long asn_VAL_60_mandatory = 2; +static const long asn_VAL_61_id_UE_ContextInformation = 14; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_mandatory = 2; +static const long asn_VAL_62_id_UE_HistoryInformation = 15; +static const long asn_VAL_62_ignore = 1; +static const long asn_VAL_62_mandatory = 2; +static const long asn_VAL_63_id_TraceActivation = 13; +static const long asn_VAL_63_ignore = 1; +static const long asn_VAL_63_optional = 0; +static const long asn_VAL_64_id_SRVCCOperationPossible = 36; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_optional = 0; +static const long asn_VAL_65_id_CSGMembershipStatus = 71; +static const long asn_VAL_65_reject = 0; +static const long asn_VAL_65_optional = 0; +static const long asn_VAL_66_id_MobilityInformation = 82; +static const long asn_VAL_66_ignore = 1; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_Masked_IMEISV = 98; +static const long asn_VAL_67_ignore = 1; +static const long asn_VAL_67_optional = 0; +static const long asn_VAL_68_id_UE_HistoryInformationFromTheUE = 105; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_optional = 0; +static const long asn_VAL_69_id_ExpectedUEBehaviour = 104; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_ProSeAuthorized = 103; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_UE_ContextReferenceAtSeNB = 153; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const long asn_VAL_72_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const long asn_VAL_73_id_V2XServicesAuthorized = 176; +static const long asn_VAL_73_ignore = 1; +static const long asn_VAL_73_optional = 0; +static const long asn_VAL_74_id_UE_ContextReferenceAtWT = 182; +static const long asn_VAL_74_ignore = 1; +static const long asn_VAL_74_optional = 0; +static const long asn_VAL_75_id_NRUESecurityCapabilities = 248; +static const long asn_VAL_75_ignore = 1; +static const long asn_VAL_75_optional = 0; +static const long asn_VAL_76_id_UE_ContextReferenceAtSgNB = 254; +static const long asn_VAL_76_ignore = 1; +static const long asn_VAL_76_optional = 0; +static const long asn_VAL_77_id_AerialUEsubscriptionInformation = 277; +static const long asn_VAL_77_ignore = 1; +static const long asn_VAL_77_optional = 0; +static const long asn_VAL_78_id_Subscription_Based_UE_DifferentiationInfo = 309; +static const long asn_VAL_78_ignore = 1; +static const long asn_VAL_78_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_TargetCell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_GUMMEI_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_reject }, + { "&Value", aioc__type, &asn_DEF_GUMMEI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_UE_ContextInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_UE_ContextInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_UE_HistoryInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_HistoryInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_TraceActivation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_ignore }, + { "&Value", aioc__type, &asn_DEF_TraceActivation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_SRVCCOperationPossible }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_SRVCCOperationPossible }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_CSGMembershipStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_reject }, + { "&Value", aioc__type, &asn_DEF_CSGMembershipStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_MobilityInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_ignore }, + { "&Value", aioc__type, &asn_DEF_MobilityInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_Masked_IMEISV }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_ignore }, + { "&Value", aioc__type, &asn_DEF_Masked_IMEISV }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_UE_HistoryInformationFromTheUE }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_HistoryInformationFromTheUE }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_ExpectedUEBehaviour }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_ExpectedUEBehaviour }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_ProSeAuthorized }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_ProSeAuthorized }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_UE_ContextReferenceAtSeNB }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextReferenceAtSeNB }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_73_id_V2XServicesAuthorized }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_73_ignore }, + { "&Value", aioc__type, &asn_DEF_V2XServicesAuthorized }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_73_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_74_id_UE_ContextReferenceAtWT }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_74_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextReferenceAtWT }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_74_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_75_id_NRUESecurityCapabilities }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_75_ignore }, + { "&Value", aioc__type, &asn_DEF_NRUESecurityCapabilities }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_75_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_76_id_UE_ContextReferenceAtSgNB }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_76_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextReferenceAtSgNB }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_76_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_77_id_AerialUEsubscriptionInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_77_ignore }, + { "&Value", aioc__type, &asn_DEF_AerialUEsubscriptionInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_77_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_78_id_Subscription_Based_UE_DifferentiationInfo }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_78_ignore }, + { "&Value", aioc__type, &asn_DEF_Subscription_Based_UE_DifferentiationInfo }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_78_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverRequest_IEs_1[] = { + { 22, 4, asn_IOS_HandoverRequest_IEs_1_rows } +}; +static const long asn_VAL_80_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_80_ignore = 1; +static const long asn_VAL_80_mandatory = 2; +static const long asn_VAL_81_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_81_ignore = 1; +static const long asn_VAL_81_mandatory = 2; +static const long asn_VAL_82_id_E_RABs_Admitted_List = 1; +static const long asn_VAL_82_ignore = 1; +static const long asn_VAL_82_mandatory = 2; +static const long asn_VAL_83_id_E_RABs_NotAdmitted_List = 3; +static const long asn_VAL_83_ignore = 1; +static const long asn_VAL_83_optional = 0; +static const long asn_VAL_84_id_TargeteNBtoSource_eNBTransparentContainer = 12; +static const long asn_VAL_84_ignore = 1; +static const long asn_VAL_84_mandatory = 2; +static const long asn_VAL_85_id_CriticalityDiagnostics = 17; +static const long asn_VAL_85_ignore = 1; +static const long asn_VAL_85_optional = 0; +static const long asn_VAL_86_id_UE_ContextKeptIndicator = 154; +static const long asn_VAL_86_ignore = 1; +static const long asn_VAL_86_optional = 0; +static const long asn_VAL_87_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_87_ignore = 1; +static const long asn_VAL_87_optional = 0; +static const long asn_VAL_88_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_88_ignore = 1; +static const long asn_VAL_88_optional = 0; +static const long asn_VAL_89_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_89_reject = 0; +static const long asn_VAL_89_optional = 0; +static const long asn_VAL_90_id_WT_UE_ContextKeptIndicator = 183; +static const long asn_VAL_90_ignore = 1; +static const long asn_VAL_90_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_80_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_80_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_80_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_81_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_81_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_81_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_82_id_E_RABs_Admitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_82_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_82_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_83_id_E_RABs_NotAdmitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_83_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_83_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_84_id_TargeteNBtoSource_eNBTransparentContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_84_ignore }, + { "&Value", aioc__type, &asn_DEF_TargeteNBtoSource_eNBTransparentContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_84_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_85_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_85_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_85_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_86_id_UE_ContextKeptIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_86_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextKeptIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_86_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_87_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_87_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_87_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_88_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_88_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_88_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_89_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_89_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_89_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_90_id_WT_UE_ContextKeptIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_90_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextKeptIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_90_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverRequestAcknowledge_IEs_1[] = { + { 11, 4, asn_IOS_HandoverRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_92_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_92_ignore = 1; +static const long asn_VAL_92_mandatory = 2; +static const long asn_VAL_93_id_Cause = 5; +static const long asn_VAL_93_ignore = 1; +static const long asn_VAL_93_mandatory = 2; +static const long asn_VAL_94_id_CriticalityDiagnostics = 17; +static const long asn_VAL_94_ignore = 1; +static const long asn_VAL_94_optional = 0; +static const long asn_VAL_95_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_95_ignore = 1; +static const long asn_VAL_95_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverPreparationFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_92_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_92_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_92_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_93_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_93_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_93_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_94_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_94_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_94_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_95_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_95_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_95_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverPreparationFailure_IEs_1[] = { + { 4, 4, asn_IOS_HandoverPreparationFailure_IEs_1_rows } +}; +static const long asn_VAL_96_id_HandoverReportType = 54; +static const long asn_VAL_96_ignore = 1; +static const long asn_VAL_96_mandatory = 2; +static const long asn_VAL_97_id_Cause = 5; +static const long asn_VAL_97_ignore = 1; +static const long asn_VAL_97_mandatory = 2; +static const long asn_VAL_98_id_SourceCellECGI = 52; +static const long asn_VAL_98_ignore = 1; +static const long asn_VAL_98_mandatory = 2; +static const long asn_VAL_99_id_FailureCellECGI = 53; +static const long asn_VAL_99_ignore = 1; +static const long asn_VAL_99_mandatory = 2; +static const long asn_VAL_100_id_Re_establishmentCellECGI = 49; +static const long asn_VAL_100_ignore = 1; +static const long asn_VAL_100_conditional = 1; +static const long asn_VAL_101_id_TargetCellInUTRAN = 81; +static const long asn_VAL_101_ignore = 1; +static const long asn_VAL_101_conditional = 1; +static const long asn_VAL_102_id_SourceCellCRNTI = 83; +static const long asn_VAL_102_ignore = 1; +static const long asn_VAL_102_optional = 0; +static const long asn_VAL_103_id_MobilityInformation = 82; +static const long asn_VAL_103_ignore = 1; +static const long asn_VAL_103_optional = 0; +static const long asn_VAL_104_id_UE_RLF_Report_Container = 60; +static const long asn_VAL_104_ignore = 1; +static const long asn_VAL_104_optional = 0; +static const long asn_VAL_105_id_UE_RLF_Report_Container_for_extended_bands = 107; +static const long asn_VAL_105_ignore = 1; +static const long asn_VAL_105_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverReport_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_96_id_HandoverReportType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_96_ignore }, + { "&Value", aioc__type, &asn_DEF_HandoverReportType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_96_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_97_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_97_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_97_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_98_id_SourceCellECGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_98_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_98_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_99_id_FailureCellECGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_99_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_99_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_100_id_Re_establishmentCellECGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_100_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_100_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_101_id_TargetCellInUTRAN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_101_ignore }, + { "&Value", aioc__type, &asn_DEF_TargetCellInUTRAN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_101_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_102_id_SourceCellCRNTI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_102_ignore }, + { "&Value", aioc__type, &asn_DEF_CRNTI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_102_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_103_id_MobilityInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_103_ignore }, + { "&Value", aioc__type, &asn_DEF_MobilityInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_103_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_104_id_UE_RLF_Report_Container }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_104_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_RLF_Report_Container }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_104_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_105_id_UE_RLF_Report_Container_for_extended_bands }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_105_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_RLF_Report_Container_for_extended_bands }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_105_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverReport_IEs_1[] = { + { 10, 4, asn_IOS_HandoverReport_IEs_1_rows } +}; +static const long asn_VAL_106_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_106_reject = 0; +static const long asn_VAL_106_mandatory = 2; +static const long asn_VAL_107_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_107_reject = 0; +static const long asn_VAL_107_mandatory = 2; +static const long asn_VAL_108_id_E_RABs_SubjectToStatusTransfer_List = 18; +static const long asn_VAL_108_ignore = 1; +static const long asn_VAL_108_mandatory = 2; +static const long asn_VAL_109_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_109_reject = 0; +static const long asn_VAL_109_optional = 0; +static const long asn_VAL_110_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_110_reject = 0; +static const long asn_VAL_110_optional = 0; +static const long asn_VAL_111_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_111_ignore = 1; +static const long asn_VAL_111_optional = 0; +static const asn_ioc_cell_t asn_IOS_SNStatusTransfer_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_106_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_106_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_106_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_107_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_107_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_107_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_108_id_E_RABs_SubjectToStatusTransfer_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_108_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToStatusTransfer_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_108_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_109_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_109_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_109_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_110_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_110_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_110_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_111_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_111_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_111_optional } +}; +static const asn_ioc_set_t asn_IOS_SNStatusTransfer_IEs_1[] = { + { 6, 4, asn_IOS_SNStatusTransfer_IEs_1_rows } +}; +static const long asn_VAL_113_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_113_reject = 0; +static const long asn_VAL_113_mandatory = 2; +static const long asn_VAL_114_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_114_reject = 0; +static const long asn_VAL_114_mandatory = 2; +static const long asn_VAL_115_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_115_reject = 0; +static const long asn_VAL_115_optional = 0; +static const long asn_VAL_116_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_116_reject = 0; +static const long asn_VAL_116_optional = 0; +static const long asn_VAL_117_id_SIPTO_BearerDeactivationIndication = 164; +static const long asn_VAL_117_ignore = 1; +static const long asn_VAL_117_optional = 0; +static const long asn_VAL_118_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_118_ignore = 1; +static const long asn_VAL_118_optional = 0; +static const asn_ioc_cell_t asn_IOS_UEContextRelease_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_113_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_113_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_113_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_114_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_114_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_114_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_115_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_115_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_115_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_116_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_116_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_116_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_117_id_SIPTO_BearerDeactivationIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_117_ignore }, + { "&Value", aioc__type, &asn_DEF_SIPTOBearerDeactivationIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_117_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_118_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_118_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_118_optional } +}; +static const asn_ioc_set_t asn_IOS_UEContextRelease_IEs_1[] = { + { 6, 4, asn_IOS_UEContextRelease_IEs_1_rows } +}; +static const long asn_VAL_119_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_119_reject = 0; +static const long asn_VAL_119_mandatory = 2; +static const long asn_VAL_120_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_120_ignore = 1; +static const long asn_VAL_120_optional = 0; +static const long asn_VAL_121_id_Cause = 5; +static const long asn_VAL_121_ignore = 1; +static const long asn_VAL_121_mandatory = 2; +static const long asn_VAL_122_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_122_reject = 0; +static const long asn_VAL_122_optional = 0; +static const long asn_VAL_123_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_123_ignore = 1; +static const long asn_VAL_123_optional = 0; +static const asn_ioc_cell_t asn_IOS_HandoverCancel_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_119_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_119_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_119_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_120_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_120_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_120_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_121_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_121_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_121_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_122_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_122_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_122_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_123_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_123_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_123_optional } +}; +static const asn_ioc_set_t asn_IOS_HandoverCancel_IEs_1[] = { + { 5, 4, asn_IOS_HandoverCancel_IEs_1_rows } +}; +static const long asn_VAL_124_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_124_ignore = 1; +static const long asn_VAL_124_optional = 0; +static const long asn_VAL_125_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_125_ignore = 1; +static const long asn_VAL_125_optional = 0; +static const long asn_VAL_126_id_Cause = 5; +static const long asn_VAL_126_ignore = 1; +static const long asn_VAL_126_optional = 0; +static const long asn_VAL_127_id_CriticalityDiagnostics = 17; +static const long asn_VAL_127_ignore = 1; +static const long asn_VAL_127_optional = 0; +static const long asn_VAL_128_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_128_ignore = 1; +static const long asn_VAL_128_optional = 0; +static const long asn_VAL_129_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_129_ignore = 1; +static const long asn_VAL_129_optional = 0; +static const long asn_VAL_130_id_Old_SgNB_UE_X2AP_ID = 264; +static const long asn_VAL_130_ignore = 1; +static const long asn_VAL_130_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_124_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_124_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_124_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_125_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_125_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_125_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_126_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_126_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_126_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_127_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_127_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_127_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_128_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_128_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_128_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_129_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_129_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_129_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_130_id_Old_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_130_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_130_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 7, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_131_id_Cause = 5; +static const long asn_VAL_131_ignore = 1; +static const long asn_VAL_131_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_131_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_131_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_131_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequest_IEs_1[] = { + { 1, 4, asn_IOS_ResetRequest_IEs_1_rows } +}; +static const long asn_VAL_132_id_CriticalityDiagnostics = 17; +static const long asn_VAL_132_ignore = 1; +static const long asn_VAL_132_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_132_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_132_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_132_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponse_IEs_1[] = { + { 1, 4, asn_IOS_ResetResponse_IEs_1_rows } +}; +static const long asn_VAL_133_id_GlobalENB_ID = 21; +static const long asn_VAL_133_reject = 0; +static const long asn_VAL_133_mandatory = 2; +static const long asn_VAL_134_id_ServedCells = 20; +static const long asn_VAL_134_reject = 0; +static const long asn_VAL_134_mandatory = 2; +static const long asn_VAL_135_id_GUGroupIDList = 24; +static const long asn_VAL_135_reject = 0; +static const long asn_VAL_135_optional = 0; +static const long asn_VAL_136_id_LHN_ID = 159; +static const long asn_VAL_136_ignore = 1; +static const long asn_VAL_136_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2SetupRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_133_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_133_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_133_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_134_id_ServedCells }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_134_reject }, + { "&Value", aioc__type, &asn_DEF_ServedCells }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_134_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_135_id_GUGroupIDList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_135_reject }, + { "&Value", aioc__type, &asn_DEF_GUGroupIDList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_135_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_136_id_LHN_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_136_ignore }, + { "&Value", aioc__type, &asn_DEF_LHN_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_136_optional } +}; +static const asn_ioc_set_t asn_IOS_X2SetupRequest_IEs_1[] = { + { 4, 4, asn_IOS_X2SetupRequest_IEs_1_rows } +}; +static const long asn_VAL_137_id_GlobalENB_ID = 21; +static const long asn_VAL_137_reject = 0; +static const long asn_VAL_137_mandatory = 2; +static const long asn_VAL_138_id_ServedCells = 20; +static const long asn_VAL_138_reject = 0; +static const long asn_VAL_138_mandatory = 2; +static const long asn_VAL_139_id_GUGroupIDList = 24; +static const long asn_VAL_139_reject = 0; +static const long asn_VAL_139_optional = 0; +static const long asn_VAL_140_id_CriticalityDiagnostics = 17; +static const long asn_VAL_140_ignore = 1; +static const long asn_VAL_140_optional = 0; +static const long asn_VAL_141_id_LHN_ID = 159; +static const long asn_VAL_141_ignore = 1; +static const long asn_VAL_141_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2SetupResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_137_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_137_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_137_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_138_id_ServedCells }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_138_reject }, + { "&Value", aioc__type, &asn_DEF_ServedCells }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_138_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_139_id_GUGroupIDList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_139_reject }, + { "&Value", aioc__type, &asn_DEF_GUGroupIDList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_139_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_140_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_140_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_140_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_141_id_LHN_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_141_ignore }, + { "&Value", aioc__type, &asn_DEF_LHN_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_141_optional } +}; +static const asn_ioc_set_t asn_IOS_X2SetupResponse_IEs_1[] = { + { 5, 4, asn_IOS_X2SetupResponse_IEs_1_rows } +}; +static const long asn_VAL_142_id_Cause = 5; +static const long asn_VAL_142_ignore = 1; +static const long asn_VAL_142_mandatory = 2; +static const long asn_VAL_143_id_TimeToWait = 22; +static const long asn_VAL_143_ignore = 1; +static const long asn_VAL_143_optional = 0; +static const long asn_VAL_144_id_CriticalityDiagnostics = 17; +static const long asn_VAL_144_ignore = 1; +static const long asn_VAL_144_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2SetupFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_142_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_142_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_142_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_143_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_143_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_143_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_144_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_144_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_144_optional } +}; +static const asn_ioc_set_t asn_IOS_X2SetupFailure_IEs_1[] = { + { 3, 4, asn_IOS_X2SetupFailure_IEs_1_rows } +}; +static const long asn_VAL_145_id_CellInformation = 6; +static const long asn_VAL_145_ignore = 1; +static const long asn_VAL_145_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_LoadInformation_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_145_id_CellInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_145_ignore }, + { "&Value", aioc__type, &asn_DEF_CellInformation_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_145_mandatory } +}; +static const asn_ioc_set_t asn_IOS_LoadInformation_IEs_1[] = { + { 1, 4, asn_IOS_LoadInformation_IEs_1_rows } +}; +static const long asn_VAL_147_id_ServedCellsToAdd = 25; +static const long asn_VAL_147_reject = 0; +static const long asn_VAL_147_optional = 0; +static const long asn_VAL_148_id_ServedCellsToModify = 26; +static const long asn_VAL_148_reject = 0; +static const long asn_VAL_148_optional = 0; +static const long asn_VAL_149_id_ServedCellsToDelete = 27; +static const long asn_VAL_149_reject = 0; +static const long asn_VAL_149_optional = 0; +static const long asn_VAL_150_id_GUGroupIDToAddList = 34; +static const long asn_VAL_150_reject = 0; +static const long asn_VAL_150_optional = 0; +static const long asn_VAL_151_id_GUGroupIDToDeleteList = 35; +static const long asn_VAL_151_reject = 0; +static const long asn_VAL_151_optional = 0; +static const long asn_VAL_152_id_CoverageModificationList = 143; +static const long asn_VAL_152_reject = 0; +static const long asn_VAL_152_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENBConfigurationUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_147_id_ServedCellsToAdd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_147_reject }, + { "&Value", aioc__type, &asn_DEF_ServedCells }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_147_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_148_id_ServedCellsToModify }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_148_reject }, + { "&Value", aioc__type, &asn_DEF_ServedCellsToModify }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_148_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_149_id_ServedCellsToDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_149_reject }, + { "&Value", aioc__type, &asn_DEF_Old_ECGIs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_149_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_150_id_GUGroupIDToAddList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_150_reject }, + { "&Value", aioc__type, &asn_DEF_GUGroupIDList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_150_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_151_id_GUGroupIDToDeleteList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_151_reject }, + { "&Value", aioc__type, &asn_DEF_GUGroupIDList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_151_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_152_id_CoverageModificationList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_152_reject }, + { "&Value", aioc__type, &asn_DEF_CoverageModificationList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_152_optional } +}; +static const asn_ioc_set_t asn_IOS_ENBConfigurationUpdate_IEs_1[] = { + { 6, 4, asn_IOS_ENBConfigurationUpdate_IEs_1_rows } +}; +static const long asn_VAL_153_id_CriticalityDiagnostics = 17; +static const long asn_VAL_153_ignore = 1; +static const long asn_VAL_153_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENBConfigurationUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_153_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_153_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_153_optional } +}; +static const asn_ioc_set_t asn_IOS_ENBConfigurationUpdateAcknowledge_IEs_1[] = { + { 1, 4, asn_IOS_ENBConfigurationUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_154_id_Cause = 5; +static const long asn_VAL_154_ignore = 1; +static const long asn_VAL_154_mandatory = 2; +static const long asn_VAL_155_id_TimeToWait = 22; +static const long asn_VAL_155_ignore = 1; +static const long asn_VAL_155_optional = 0; +static const long asn_VAL_156_id_CriticalityDiagnostics = 17; +static const long asn_VAL_156_ignore = 1; +static const long asn_VAL_156_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENBConfigurationUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_154_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_154_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_154_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_155_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_155_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_155_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_156_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_156_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_156_optional } +}; +static const asn_ioc_set_t asn_IOS_ENBConfigurationUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_ENBConfigurationUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_157_id_ENB1_Measurement_ID = 39; +static const long asn_VAL_157_reject = 0; +static const long asn_VAL_157_mandatory = 2; +static const long asn_VAL_158_id_ENB2_Measurement_ID = 40; +static const long asn_VAL_158_ignore = 1; +static const long asn_VAL_158_conditional = 1; +static const long asn_VAL_159_id_Registration_Request = 28; +static const long asn_VAL_159_reject = 0; +static const long asn_VAL_159_mandatory = 2; +static const long asn_VAL_160_id_ReportCharacteristics = 38; +static const long asn_VAL_160_reject = 0; +static const long asn_VAL_160_optional = 0; +static const long asn_VAL_161_id_CellToReport = 29; +static const long asn_VAL_161_ignore = 1; +static const long asn_VAL_161_mandatory = 2; +static const long asn_VAL_162_id_ReportingPeriodicity = 30; +static const long asn_VAL_162_ignore = 1; +static const long asn_VAL_162_optional = 0; +static const long asn_VAL_163_id_PartialSuccessIndicator = 64; +static const long asn_VAL_163_ignore = 1; +static const long asn_VAL_163_optional = 0; +static const long asn_VAL_164_id_ReportingPeriodicityRSRPMR = 109; +static const long asn_VAL_164_ignore = 1; +static const long asn_VAL_164_optional = 0; +static const long asn_VAL_165_id_ReportingPeriodicityCSIR = 145; +static const long asn_VAL_165_ignore = 1; +static const long asn_VAL_165_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResourceStatusRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_157_id_ENB1_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_157_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_157_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_158_id_ENB2_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_158_ignore }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_158_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_159_id_Registration_Request }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_159_reject }, + { "&Value", aioc__type, &asn_DEF_Registration_Request }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_159_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_160_id_ReportCharacteristics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_160_reject }, + { "&Value", aioc__type, &asn_DEF_ReportCharacteristics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_160_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_161_id_CellToReport }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_161_ignore }, + { "&Value", aioc__type, &asn_DEF_CellToReport_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_161_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_162_id_ReportingPeriodicity }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_162_ignore }, + { "&Value", aioc__type, &asn_DEF_ReportingPeriodicity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_162_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_163_id_PartialSuccessIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_163_ignore }, + { "&Value", aioc__type, &asn_DEF_PartialSuccessIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_163_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_164_id_ReportingPeriodicityRSRPMR }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_164_ignore }, + { "&Value", aioc__type, &asn_DEF_ReportingPeriodicityRSRPMR }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_164_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_165_id_ReportingPeriodicityCSIR }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_165_ignore }, + { "&Value", aioc__type, &asn_DEF_ReportingPeriodicityCSIR }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_165_optional } +}; +static const asn_ioc_set_t asn_IOS_ResourceStatusRequest_IEs_1[] = { + { 9, 4, asn_IOS_ResourceStatusRequest_IEs_1_rows } +}; +static const long asn_VAL_167_id_ENB1_Measurement_ID = 39; +static const long asn_VAL_167_reject = 0; +static const long asn_VAL_167_mandatory = 2; +static const long asn_VAL_168_id_ENB2_Measurement_ID = 40; +static const long asn_VAL_168_reject = 0; +static const long asn_VAL_168_mandatory = 2; +static const long asn_VAL_169_id_CriticalityDiagnostics = 17; +static const long asn_VAL_169_ignore = 1; +static const long asn_VAL_169_optional = 0; +static const long asn_VAL_170_id_MeasurementInitiationResult_List = 65; +static const long asn_VAL_170_ignore = 1; +static const long asn_VAL_170_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResourceStatusResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_167_id_ENB1_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_167_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_167_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_168_id_ENB2_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_168_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_168_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_169_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_169_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_169_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_170_id_MeasurementInitiationResult_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_170_ignore }, + { "&Value", aioc__type, &asn_DEF_MeasurementInitiationResult_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_170_optional } +}; +static const asn_ioc_set_t asn_IOS_ResourceStatusResponse_IEs_1[] = { + { 4, 4, asn_IOS_ResourceStatusResponse_IEs_1_rows } +}; +static const long asn_VAL_173_id_ENB1_Measurement_ID = 39; +static const long asn_VAL_173_reject = 0; +static const long asn_VAL_173_mandatory = 2; +static const long asn_VAL_174_id_ENB2_Measurement_ID = 40; +static const long asn_VAL_174_reject = 0; +static const long asn_VAL_174_mandatory = 2; +static const long asn_VAL_175_id_Cause = 5; +static const long asn_VAL_175_ignore = 1; +static const long asn_VAL_175_mandatory = 2; +static const long asn_VAL_176_id_CriticalityDiagnostics = 17; +static const long asn_VAL_176_ignore = 1; +static const long asn_VAL_176_optional = 0; +static const long asn_VAL_177_id_CompleteFailureCauseInformation_List = 68; +static const long asn_VAL_177_ignore = 1; +static const long asn_VAL_177_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResourceStatusFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_173_id_ENB1_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_173_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_173_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_174_id_ENB2_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_174_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_174_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_175_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_175_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_175_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_176_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_176_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_176_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_177_id_CompleteFailureCauseInformation_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_177_ignore }, + { "&Value", aioc__type, &asn_DEF_CompleteFailureCauseInformation_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_177_optional } +}; +static const asn_ioc_set_t asn_IOS_ResourceStatusFailure_IEs_1[] = { + { 5, 4, asn_IOS_ResourceStatusFailure_IEs_1_rows } +}; +static const long asn_VAL_179_id_ENB1_Measurement_ID = 39; +static const long asn_VAL_179_reject = 0; +static const long asn_VAL_179_mandatory = 2; +static const long asn_VAL_180_id_ENB2_Measurement_ID = 40; +static const long asn_VAL_180_reject = 0; +static const long asn_VAL_180_mandatory = 2; +static const long asn_VAL_181_id_CellMeasurementResult = 32; +static const long asn_VAL_181_ignore = 1; +static const long asn_VAL_181_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResourceStatusUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_179_id_ENB1_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_179_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_179_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_180_id_ENB2_Measurement_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_180_reject }, + { "&Value", aioc__type, &asn_DEF_Measurement_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_180_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_181_id_CellMeasurementResult }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_181_ignore }, + { "&Value", aioc__type, &asn_DEF_CellMeasurementResult_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_181_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResourceStatusUpdate_IEs_1[] = { + { 3, 4, asn_IOS_ResourceStatusUpdate_IEs_1_rows } +}; +static const long asn_VAL_183_id_ENB1_Cell_ID = 43; +static const long asn_VAL_183_reject = 0; +static const long asn_VAL_183_mandatory = 2; +static const long asn_VAL_184_id_ENB2_Cell_ID = 44; +static const long asn_VAL_184_reject = 0; +static const long asn_VAL_184_mandatory = 2; +static const long asn_VAL_185_id_ENB1_Mobility_Parameters = 46; +static const long asn_VAL_185_ignore = 1; +static const long asn_VAL_185_optional = 0; +static const long asn_VAL_186_id_ENB2_Proposed_Mobility_Parameters = 45; +static const long asn_VAL_186_reject = 0; +static const long asn_VAL_186_mandatory = 2; +static const long asn_VAL_187_id_Cause = 5; +static const long asn_VAL_187_reject = 0; +static const long asn_VAL_187_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_MobilityChangeRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_183_id_ENB1_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_183_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_183_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_184_id_ENB2_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_184_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_184_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_185_id_ENB1_Mobility_Parameters }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_185_ignore }, + { "&Value", aioc__type, &asn_DEF_MobilityParametersInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_185_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_186_id_ENB2_Proposed_Mobility_Parameters }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_186_reject }, + { "&Value", aioc__type, &asn_DEF_MobilityParametersInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_186_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_187_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_187_reject }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_187_mandatory } +}; +static const asn_ioc_set_t asn_IOS_MobilityChangeRequest_IEs_1[] = { + { 5, 4, asn_IOS_MobilityChangeRequest_IEs_1_rows } +}; +static const long asn_VAL_188_id_ENB1_Cell_ID = 43; +static const long asn_VAL_188_reject = 0; +static const long asn_VAL_188_mandatory = 2; +static const long asn_VAL_189_id_ENB2_Cell_ID = 44; +static const long asn_VAL_189_reject = 0; +static const long asn_VAL_189_mandatory = 2; +static const long asn_VAL_190_id_CriticalityDiagnostics = 17; +static const long asn_VAL_190_ignore = 1; +static const long asn_VAL_190_optional = 0; +static const asn_ioc_cell_t asn_IOS_MobilityChangeAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_188_id_ENB1_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_188_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_188_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_189_id_ENB2_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_189_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_189_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_190_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_190_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_190_optional } +}; +static const asn_ioc_set_t asn_IOS_MobilityChangeAcknowledge_IEs_1[] = { + { 3, 4, asn_IOS_MobilityChangeAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_191_id_ENB1_Cell_ID = 43; +static const long asn_VAL_191_ignore = 1; +static const long asn_VAL_191_mandatory = 2; +static const long asn_VAL_192_id_ENB2_Cell_ID = 44; +static const long asn_VAL_192_ignore = 1; +static const long asn_VAL_192_mandatory = 2; +static const long asn_VAL_193_id_Cause = 5; +static const long asn_VAL_193_ignore = 1; +static const long asn_VAL_193_mandatory = 2; +static const long asn_VAL_194_id_ENB2_Mobility_Parameters_Modification_Range = 47; +static const long asn_VAL_194_ignore = 1; +static const long asn_VAL_194_optional = 0; +static const long asn_VAL_195_id_CriticalityDiagnostics = 17; +static const long asn_VAL_195_ignore = 1; +static const long asn_VAL_195_optional = 0; +static const asn_ioc_cell_t asn_IOS_MobilityChangeFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_191_id_ENB1_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_191_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_191_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_192_id_ENB2_Cell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_192_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_192_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_193_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_193_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_193_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_194_id_ENB2_Mobility_Parameters_Modification_Range }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_194_ignore }, + { "&Value", aioc__type, &asn_DEF_MobilityParametersModificationRange }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_194_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_195_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_195_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_195_optional } +}; +static const asn_ioc_set_t asn_IOS_MobilityChangeFailure_IEs_1[] = { + { 5, 4, asn_IOS_MobilityChangeFailure_IEs_1_rows } +}; +static const long asn_VAL_196_id_FailureCellPCI = 48; +static const long asn_VAL_196_ignore = 1; +static const long asn_VAL_196_mandatory = 2; +static const long asn_VAL_197_id_Re_establishmentCellECGI = 49; +static const long asn_VAL_197_ignore = 1; +static const long asn_VAL_197_mandatory = 2; +static const long asn_VAL_198_id_FailureCellCRNTI = 50; +static const long asn_VAL_198_ignore = 1; +static const long asn_VAL_198_mandatory = 2; +static const long asn_VAL_199_id_ShortMAC_I = 51; +static const long asn_VAL_199_ignore = 1; +static const long asn_VAL_199_optional = 0; +static const long asn_VAL_200_id_UE_RLF_Report_Container = 60; +static const long asn_VAL_200_ignore = 1; +static const long asn_VAL_200_optional = 0; +static const long asn_VAL_201_id_RRCConnSetupIndicator = 75; +static const long asn_VAL_201_reject = 0; +static const long asn_VAL_201_optional = 0; +static const long asn_VAL_202_id_RRCConnReestabIndicator = 78; +static const long asn_VAL_202_ignore = 1; +static const long asn_VAL_202_optional = 0; +static const long asn_VAL_203_id_UE_RLF_Report_Container_for_extended_bands = 107; +static const long asn_VAL_203_ignore = 1; +static const long asn_VAL_203_optional = 0; +static const asn_ioc_cell_t asn_IOS_RLFIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_196_id_FailureCellPCI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_196_ignore }, + { "&Value", aioc__type, &asn_DEF_PCI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_196_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_197_id_Re_establishmentCellECGI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_197_ignore }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_197_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_198_id_FailureCellCRNTI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_198_ignore }, + { "&Value", aioc__type, &asn_DEF_CRNTI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_198_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_199_id_ShortMAC_I }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_199_ignore }, + { "&Value", aioc__type, &asn_DEF_ShortMAC_I }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_199_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_200_id_UE_RLF_Report_Container }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_200_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_RLF_Report_Container }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_200_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_201_id_RRCConnSetupIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_201_reject }, + { "&Value", aioc__type, &asn_DEF_RRCConnSetupIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_201_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_202_id_RRCConnReestabIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_202_ignore }, + { "&Value", aioc__type, &asn_DEF_RRCConnReestabIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_202_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_203_id_UE_RLF_Report_Container_for_extended_bands }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_203_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_RLF_Report_Container_for_extended_bands }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_203_optional } +}; +static const asn_ioc_set_t asn_IOS_RLFIndication_IEs_1[] = { + { 8, 4, asn_IOS_RLFIndication_IEs_1_rows } +}; +static const long asn_VAL_204_id_ServedCellsToActivate = 57; +static const long asn_VAL_204_reject = 0; +static const long asn_VAL_204_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_CellActivationRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_204_id_ServedCellsToActivate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_204_reject }, + { "&Value", aioc__type, &asn_DEF_ServedCellsToActivate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_204_mandatory } +}; +static const asn_ioc_set_t asn_IOS_CellActivationRequest_IEs_1[] = { + { 1, 4, asn_IOS_CellActivationRequest_IEs_1_rows } +}; +static const long asn_VAL_205_id_ActivatedCellList = 58; +static const long asn_VAL_205_ignore = 1; +static const long asn_VAL_205_mandatory = 2; +static const long asn_VAL_206_id_CriticalityDiagnostics = 17; +static const long asn_VAL_206_ignore = 1; +static const long asn_VAL_206_optional = 0; +static const asn_ioc_cell_t asn_IOS_CellActivationResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_205_id_ActivatedCellList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_205_ignore }, + { "&Value", aioc__type, &asn_DEF_ActivatedCellList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_205_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_206_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_206_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_206_optional } +}; +static const asn_ioc_set_t asn_IOS_CellActivationResponse_IEs_1[] = { + { 2, 4, asn_IOS_CellActivationResponse_IEs_1_rows } +}; +static const long asn_VAL_207_id_Cause = 5; +static const long asn_VAL_207_ignore = 1; +static const long asn_VAL_207_mandatory = 2; +static const long asn_VAL_208_id_CriticalityDiagnostics = 17; +static const long asn_VAL_208_ignore = 1; +static const long asn_VAL_208_optional = 0; +static const asn_ioc_cell_t asn_IOS_CellActivationFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_207_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_207_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_207_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_208_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_208_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_208_optional } +}; +static const asn_ioc_set_t asn_IOS_CellActivationFailure_IEs_1[] = { + { 2, 4, asn_IOS_CellActivationFailure_IEs_1_rows } +}; +static const long asn_VAL_209_id_GlobalENB_ID = 21; +static const long asn_VAL_209_reject = 0; +static const long asn_VAL_209_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_X2Release_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_209_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_209_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_209_mandatory } +}; +static const asn_ioc_set_t asn_IOS_X2Release_IEs_1[] = { + { 1, 4, asn_IOS_X2Release_IEs_1_rows } +}; +static const long asn_VAL_210_id_RNL_Header = 101; +static const long asn_VAL_210_reject = 0; +static const long asn_VAL_210_mandatory = 2; +static const long asn_VAL_211_id_x2APMessage = 102; +static const long asn_VAL_211_reject = 0; +static const long asn_VAL_211_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2APMessageTransfer_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_210_id_RNL_Header }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_210_reject }, + { "&Value", aioc__type, &asn_DEF_RNL_Header }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_210_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_211_id_x2APMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_211_reject }, + { "&Value", aioc__type, &asn_DEF_X2AP_Message }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_211_optional } +}; +static const asn_ioc_set_t asn_IOS_X2APMessageTransfer_IEs_1[] = { + { 2, 4, asn_IOS_X2APMessageTransfer_IEs_1_rows } +}; +static const long asn_VAL_212_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_212_reject = 0; +static const long asn_VAL_212_mandatory = 2; +static const long asn_VAL_213_id_UE_SecurityCapabilities = 113; +static const long asn_VAL_213_reject = 0; +static const long asn_VAL_213_conditional = 1; +static const long asn_VAL_214_id_SeNBSecurityKey = 114; +static const long asn_VAL_214_reject = 0; +static const long asn_VAL_214_conditional = 1; +static const long asn_VAL_215_id_SeNBUEAggregateMaximumBitRate = 115; +static const long asn_VAL_215_reject = 0; +static const long asn_VAL_215_mandatory = 2; +static const long asn_VAL_216_id_ServingPLMN = 116; +static const long asn_VAL_216_ignore = 1; +static const long asn_VAL_216_optional = 0; +static const long asn_VAL_217_id_E_RABs_ToBeAdded_List = 117; +static const long asn_VAL_217_reject = 0; +static const long asn_VAL_217_mandatory = 2; +static const long asn_VAL_218_id_MeNBtoSeNBContainer = 119; +static const long asn_VAL_218_reject = 0; +static const long asn_VAL_218_mandatory = 2; +static const long asn_VAL_219_id_CSGMembershipStatus = 71; +static const long asn_VAL_219_reject = 0; +static const long asn_VAL_219_optional = 0; +static const long asn_VAL_220_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_220_reject = 0; +static const long asn_VAL_220_optional = 0; +static const long asn_VAL_221_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_221_reject = 0; +static const long asn_VAL_221_optional = 0; +static const long asn_VAL_222_id_ExpectedUEBehaviour = 104; +static const long asn_VAL_222_ignore = 1; +static const long asn_VAL_222_optional = 0; +static const long asn_VAL_223_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_223_reject = 0; +static const long asn_VAL_223_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBAdditionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_212_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_212_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_212_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_213_id_UE_SecurityCapabilities }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_213_reject }, + { "&Value", aioc__type, &asn_DEF_UESecurityCapabilities }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_213_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_214_id_SeNBSecurityKey }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_214_reject }, + { "&Value", aioc__type, &asn_DEF_SeNBSecurityKey }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_214_conditional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_215_id_SeNBUEAggregateMaximumBitRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_215_reject }, + { "&Value", aioc__type, &asn_DEF_UEAggregateMaximumBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_215_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_216_id_ServingPLMN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_216_ignore }, + { "&Value", aioc__type, &asn_DEF_PLMN_Identity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_216_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_217_id_E_RABs_ToBeAdded_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_217_reject }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_217_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_218_id_MeNBtoSeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_218_reject }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_218_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_219_id_CSGMembershipStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_219_reject }, + { "&Value", aioc__type, &asn_DEF_CSGMembershipStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_219_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_220_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_220_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_220_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_221_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_221_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_221_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_222_id_ExpectedUEBehaviour }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_222_ignore }, + { "&Value", aioc__type, &asn_DEF_ExpectedUEBehaviour }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_222_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_223_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_223_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_223_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBAdditionRequest_IEs_1[] = { + { 12, 4, asn_IOS_SeNBAdditionRequest_IEs_1_rows } +}; +static const long asn_VAL_225_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_225_reject = 0; +static const long asn_VAL_225_mandatory = 2; +static const long asn_VAL_226_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_226_reject = 0; +static const long asn_VAL_226_mandatory = 2; +static const long asn_VAL_227_id_E_RABs_Admitted_ToBeAdded_List = 120; +static const long asn_VAL_227_ignore = 1; +static const long asn_VAL_227_mandatory = 2; +static const long asn_VAL_228_id_E_RABs_NotAdmitted_List = 3; +static const long asn_VAL_228_ignore = 1; +static const long asn_VAL_228_optional = 0; +static const long asn_VAL_229_id_SeNBtoMeNBContainer = 122; +static const long asn_VAL_229_reject = 0; +static const long asn_VAL_229_mandatory = 2; +static const long asn_VAL_230_id_CriticalityDiagnostics = 17; +static const long asn_VAL_230_ignore = 1; +static const long asn_VAL_230_optional = 0; +static const long asn_VAL_231_id_GW_TransportLayerAddress = 165; +static const long asn_VAL_231_ignore = 1; +static const long asn_VAL_231_optional = 0; +static const long asn_VAL_232_id_SIPTO_L_GW_TransportLayerAddress = 168; +static const long asn_VAL_232_ignore = 1; +static const long asn_VAL_232_optional = 0; +static const long asn_VAL_233_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_233_reject = 0; +static const long asn_VAL_233_optional = 0; +static const long asn_VAL_234_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_234_reject = 0; +static const long asn_VAL_234_optional = 0; +static const long asn_VAL_235_id_Tunnel_Information_for_BBF = 163; +static const long asn_VAL_235_ignore = 1; +static const long asn_VAL_235_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBAdditionRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_225_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_225_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_225_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_226_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_226_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_226_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_227_id_E_RABs_Admitted_ToBeAdded_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_227_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_227_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_228_id_E_RABs_NotAdmitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_228_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_228_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_229_id_SeNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_229_reject }, + { "&Value", aioc__type, &asn_DEF_SeNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_229_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_230_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_230_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_230_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_231_id_GW_TransportLayerAddress }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_231_ignore }, + { "&Value", aioc__type, &asn_DEF_TransportLayerAddress }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_231_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_232_id_SIPTO_L_GW_TransportLayerAddress }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_232_ignore }, + { "&Value", aioc__type, &asn_DEF_TransportLayerAddress }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_232_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_233_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_233_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_233_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_234_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_234_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_234_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_235_id_Tunnel_Information_for_BBF }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_235_ignore }, + { "&Value", aioc__type, &asn_DEF_TunnelInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_235_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBAdditionRequestAcknowledge_IEs_1[] = { + { 11, 4, asn_IOS_SeNBAdditionRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_237_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_237_reject = 0; +static const long asn_VAL_237_mandatory = 2; +static const long asn_VAL_238_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_238_reject = 0; +static const long asn_VAL_238_mandatory = 2; +static const long asn_VAL_239_id_Cause = 5; +static const long asn_VAL_239_ignore = 1; +static const long asn_VAL_239_mandatory = 2; +static const long asn_VAL_240_id_CriticalityDiagnostics = 17; +static const long asn_VAL_240_ignore = 1; +static const long asn_VAL_240_optional = 0; +static const long asn_VAL_241_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_241_reject = 0; +static const long asn_VAL_241_optional = 0; +static const long asn_VAL_242_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_242_reject = 0; +static const long asn_VAL_242_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBAdditionRequestReject_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_237_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_237_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_237_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_238_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_238_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_238_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_239_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_239_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_239_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_240_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_240_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_240_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_241_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_241_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_241_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_242_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_242_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_242_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBAdditionRequestReject_IEs_1[] = { + { 6, 4, asn_IOS_SeNBAdditionRequestReject_IEs_1_rows } +}; +static const long asn_VAL_243_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_243_reject = 0; +static const long asn_VAL_243_mandatory = 2; +static const long asn_VAL_244_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_244_reject = 0; +static const long asn_VAL_244_mandatory = 2; +static const long asn_VAL_245_id_ResponseInformationSeNBReconfComp = 123; +static const long asn_VAL_245_ignore = 1; +static const long asn_VAL_245_mandatory = 2; +static const long asn_VAL_246_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_246_reject = 0; +static const long asn_VAL_246_optional = 0; +static const long asn_VAL_247_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_247_reject = 0; +static const long asn_VAL_247_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBReconfigurationComplete_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_243_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_243_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_243_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_244_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_244_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_244_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_245_id_ResponseInformationSeNBReconfComp }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_245_ignore }, + { "&Value", aioc__type, &asn_DEF_ResponseInformationSeNBReconfComp }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_245_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_246_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_246_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_246_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_247_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_247_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_247_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBReconfigurationComplete_IEs_1[] = { + { 5, 4, asn_IOS_SeNBReconfigurationComplete_IEs_1_rows } +}; +static const long asn_VAL_248_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_248_reject = 0; +static const long asn_VAL_248_mandatory = 2; +static const long asn_VAL_249_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_249_reject = 0; +static const long asn_VAL_249_mandatory = 2; +static const long asn_VAL_250_id_Cause = 5; +static const long asn_VAL_250_ignore = 1; +static const long asn_VAL_250_mandatory = 2; +static const long asn_VAL_251_id_SCGChangeIndication = 136; +static const long asn_VAL_251_ignore = 1; +static const long asn_VAL_251_optional = 0; +static const long asn_VAL_252_id_ServingPLMN = 116; +static const long asn_VAL_252_ignore = 1; +static const long asn_VAL_252_optional = 0; +static const long asn_VAL_253_id_UE_ContextInformationSeNBModReq = 124; +static const long asn_VAL_253_reject = 0; +static const long asn_VAL_253_optional = 0; +static const long asn_VAL_254_id_MeNBtoSeNBContainer = 119; +static const long asn_VAL_254_ignore = 1; +static const long asn_VAL_254_optional = 0; +static const long asn_VAL_255_id_CSGMembershipStatus = 71; +static const long asn_VAL_255_reject = 0; +static const long asn_VAL_255_optional = 0; +static const long asn_VAL_256_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_256_reject = 0; +static const long asn_VAL_256_optional = 0; +static const long asn_VAL_257_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_257_reject = 0; +static const long asn_VAL_257_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_248_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_248_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_248_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_249_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_249_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_249_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_250_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_250_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_250_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_251_id_SCGChangeIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_251_ignore }, + { "&Value", aioc__type, &asn_DEF_SCGChangeIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_251_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_252_id_ServingPLMN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_252_ignore }, + { "&Value", aioc__type, &asn_DEF_PLMN_Identity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_252_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_253_id_UE_ContextInformationSeNBModReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_253_reject }, + { "&Value", aioc__type, &asn_DEF_UE_ContextInformationSeNBModReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_253_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_254_id_MeNBtoSeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_254_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_254_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_255_id_CSGMembershipStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_255_reject }, + { "&Value", aioc__type, &asn_DEF_CSGMembershipStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_255_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_256_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_256_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_256_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_257_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_257_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_257_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationRequest_IEs_1[] = { + { 10, 4, asn_IOS_SeNBModificationRequest_IEs_1_rows } +}; +static const long asn_VAL_261_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_261_ignore = 1; +static const long asn_VAL_261_mandatory = 2; +static const long asn_VAL_262_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_262_ignore = 1; +static const long asn_VAL_262_mandatory = 2; +static const long asn_VAL_263_id_E_RABs_Admitted_ToBeAdded_ModAckList = 128; +static const long asn_VAL_263_ignore = 1; +static const long asn_VAL_263_optional = 0; +static const long asn_VAL_264_id_E_RABs_Admitted_ToBeModified_ModAckList = 129; +static const long asn_VAL_264_ignore = 1; +static const long asn_VAL_264_optional = 0; +static const long asn_VAL_265_id_E_RABs_Admitted_ToBeReleased_ModAckList = 130; +static const long asn_VAL_265_ignore = 1; +static const long asn_VAL_265_optional = 0; +static const long asn_VAL_266_id_E_RABs_NotAdmitted_List = 3; +static const long asn_VAL_266_ignore = 1; +static const long asn_VAL_266_optional = 0; +static const long asn_VAL_267_id_SeNBtoMeNBContainer = 122; +static const long asn_VAL_267_ignore = 1; +static const long asn_VAL_267_optional = 0; +static const long asn_VAL_268_id_CriticalityDiagnostics = 17; +static const long asn_VAL_268_ignore = 1; +static const long asn_VAL_268_optional = 0; +static const long asn_VAL_269_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_269_ignore = 1; +static const long asn_VAL_269_optional = 0; +static const long asn_VAL_270_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_270_ignore = 1; +static const long asn_VAL_270_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_261_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_261_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_261_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_262_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_262_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_262_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_263_id_E_RABs_Admitted_ToBeAdded_ModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_263_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_263_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_264_id_E_RABs_Admitted_ToBeModified_ModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_264_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_264_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_265_id_E_RABs_Admitted_ToBeReleased_ModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_265_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_265_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_266_id_E_RABs_NotAdmitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_266_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_266_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_267_id_SeNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_267_ignore }, + { "&Value", aioc__type, &asn_DEF_SeNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_267_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_268_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_268_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_268_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_269_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_269_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_269_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_270_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_270_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_270_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationRequestAcknowledge_IEs_1[] = { + { 10, 4, asn_IOS_SeNBModificationRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_274_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_274_ignore = 1; +static const long asn_VAL_274_mandatory = 2; +static const long asn_VAL_275_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_275_ignore = 1; +static const long asn_VAL_275_mandatory = 2; +static const long asn_VAL_276_id_Cause = 5; +static const long asn_VAL_276_ignore = 1; +static const long asn_VAL_276_mandatory = 2; +static const long asn_VAL_277_id_CriticalityDiagnostics = 17; +static const long asn_VAL_277_ignore = 1; +static const long asn_VAL_277_optional = 0; +static const long asn_VAL_278_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_278_ignore = 1; +static const long asn_VAL_278_optional = 0; +static const long asn_VAL_279_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_279_ignore = 1; +static const long asn_VAL_279_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationRequestReject_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_274_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_274_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_274_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_275_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_275_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_275_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_276_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_276_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_276_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_277_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_277_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_277_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_278_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_278_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_278_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_279_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_279_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_279_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationRequestReject_IEs_1[] = { + { 6, 4, asn_IOS_SeNBModificationRequestReject_IEs_1_rows } +}; +static const long asn_VAL_280_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_280_reject = 0; +static const long asn_VAL_280_mandatory = 2; +static const long asn_VAL_281_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_281_reject = 0; +static const long asn_VAL_281_mandatory = 2; +static const long asn_VAL_282_id_Cause = 5; +static const long asn_VAL_282_ignore = 1; +static const long asn_VAL_282_mandatory = 2; +static const long asn_VAL_283_id_SCGChangeIndication = 136; +static const long asn_VAL_283_ignore = 1; +static const long asn_VAL_283_optional = 0; +static const long asn_VAL_284_id_E_RABs_ToBeReleased_ModReqd = 134; +static const long asn_VAL_284_ignore = 1; +static const long asn_VAL_284_optional = 0; +static const long asn_VAL_285_id_SeNBtoMeNBContainer = 122; +static const long asn_VAL_285_ignore = 1; +static const long asn_VAL_285_optional = 0; +static const long asn_VAL_286_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_286_reject = 0; +static const long asn_VAL_286_optional = 0; +static const long asn_VAL_287_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_287_reject = 0; +static const long asn_VAL_287_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_280_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_280_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_280_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_281_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_281_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_281_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_282_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_282_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_282_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_283_id_SCGChangeIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_283_ignore }, + { "&Value", aioc__type, &asn_DEF_SCGChangeIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_283_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_284_id_E_RABs_ToBeReleased_ModReqd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_284_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_ModReqd }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_284_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_285_id_SeNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_285_ignore }, + { "&Value", aioc__type, &asn_DEF_SeNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_285_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_286_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_286_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_286_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_287_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_287_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_287_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationRequired_IEs_1[] = { + { 8, 4, asn_IOS_SeNBModificationRequired_IEs_1_rows } +}; +static const long asn_VAL_289_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_289_ignore = 1; +static const long asn_VAL_289_mandatory = 2; +static const long asn_VAL_290_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_290_ignore = 1; +static const long asn_VAL_290_mandatory = 2; +static const long asn_VAL_291_id_MeNBtoSeNBContainer = 119; +static const long asn_VAL_291_ignore = 1; +static const long asn_VAL_291_optional = 0; +static const long asn_VAL_292_id_CriticalityDiagnostics = 17; +static const long asn_VAL_292_ignore = 1; +static const long asn_VAL_292_optional = 0; +static const long asn_VAL_293_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_293_ignore = 1; +static const long asn_VAL_293_optional = 0; +static const long asn_VAL_294_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_294_ignore = 1; +static const long asn_VAL_294_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_289_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_289_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_289_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_290_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_290_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_290_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_291_id_MeNBtoSeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_291_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_291_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_292_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_292_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_292_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_293_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_293_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_293_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_294_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_294_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_294_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationConfirm_IEs_1[] = { + { 6, 4, asn_IOS_SeNBModificationConfirm_IEs_1_rows } +}; +static const long asn_VAL_295_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_295_ignore = 1; +static const long asn_VAL_295_mandatory = 2; +static const long asn_VAL_296_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_296_ignore = 1; +static const long asn_VAL_296_mandatory = 2; +static const long asn_VAL_297_id_Cause = 5; +static const long asn_VAL_297_ignore = 1; +static const long asn_VAL_297_mandatory = 2; +static const long asn_VAL_298_id_MeNBtoSeNBContainer = 119; +static const long asn_VAL_298_ignore = 1; +static const long asn_VAL_298_optional = 0; +static const long asn_VAL_299_id_CriticalityDiagnostics = 17; +static const long asn_VAL_299_ignore = 1; +static const long asn_VAL_299_optional = 0; +static const long asn_VAL_300_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_300_ignore = 1; +static const long asn_VAL_300_optional = 0; +static const long asn_VAL_301_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_301_ignore = 1; +static const long asn_VAL_301_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBModificationRefuse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_295_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_295_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_295_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_296_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_296_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_296_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_297_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_297_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_297_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_298_id_MeNBtoSeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_298_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_298_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_299_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_299_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_299_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_300_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_300_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_300_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_301_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_301_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_301_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBModificationRefuse_IEs_1[] = { + { 7, 4, asn_IOS_SeNBModificationRefuse_IEs_1_rows } +}; +static const long asn_VAL_302_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_302_reject = 0; +static const long asn_VAL_302_mandatory = 2; +static const long asn_VAL_303_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_303_reject = 0; +static const long asn_VAL_303_optional = 0; +static const long asn_VAL_304_id_Cause = 5; +static const long asn_VAL_304_ignore = 1; +static const long asn_VAL_304_optional = 0; +static const long asn_VAL_305_id_E_RABs_ToBeReleased_List_RelReq = 137; +static const long asn_VAL_305_ignore = 1; +static const long asn_VAL_305_optional = 0; +static const long asn_VAL_306_id_UE_ContextKeptIndicator = 154; +static const long asn_VAL_306_ignore = 1; +static const long asn_VAL_306_optional = 0; +static const long asn_VAL_307_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_307_reject = 0; +static const long asn_VAL_307_optional = 0; +static const long asn_VAL_308_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_308_reject = 0; +static const long asn_VAL_308_optional = 0; +static const long asn_VAL_309_id_MakeBeforeBreakIndicator = 181; +static const long asn_VAL_309_ignore = 1; +static const long asn_VAL_309_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBReleaseRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_302_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_302_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_302_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_303_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_303_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_303_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_304_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_304_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_304_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_305_id_E_RABs_ToBeReleased_List_RelReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_305_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_List_RelReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_305_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_306_id_UE_ContextKeptIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_306_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextKeptIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_306_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_307_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_307_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_307_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_308_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_308_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_308_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_309_id_MakeBeforeBreakIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_309_ignore }, + { "&Value", aioc__type, &asn_DEF_MakeBeforeBreakIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_309_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBReleaseRequest_IEs_1[] = { + { 8, 4, asn_IOS_SeNBReleaseRequest_IEs_1_rows } +}; +static const long asn_VAL_311_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_311_reject = 0; +static const long asn_VAL_311_mandatory = 2; +static const long asn_VAL_312_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_312_reject = 0; +static const long asn_VAL_312_mandatory = 2; +static const long asn_VAL_313_id_Cause = 5; +static const long asn_VAL_313_ignore = 1; +static const long asn_VAL_313_mandatory = 2; +static const long asn_VAL_314_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_314_reject = 0; +static const long asn_VAL_314_optional = 0; +static const long asn_VAL_315_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_315_reject = 0; +static const long asn_VAL_315_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBReleaseRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_311_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_311_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_311_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_312_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_312_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_312_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_313_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_313_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_313_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_314_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_314_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_314_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_315_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_315_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_315_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBReleaseRequired_IEs_1[] = { + { 5, 4, asn_IOS_SeNBReleaseRequired_IEs_1_rows } +}; +static const long asn_VAL_316_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_316_ignore = 1; +static const long asn_VAL_316_mandatory = 2; +static const long asn_VAL_317_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_317_ignore = 1; +static const long asn_VAL_317_mandatory = 2; +static const long asn_VAL_318_id_E_RABs_ToBeReleased_List_RelConf = 139; +static const long asn_VAL_318_ignore = 1; +static const long asn_VAL_318_optional = 0; +static const long asn_VAL_319_id_CriticalityDiagnostics = 17; +static const long asn_VAL_319_ignore = 1; +static const long asn_VAL_319_optional = 0; +static const long asn_VAL_320_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_320_ignore = 1; +static const long asn_VAL_320_optional = 0; +static const long asn_VAL_321_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_321_ignore = 1; +static const long asn_VAL_321_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBReleaseConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_316_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_316_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_316_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_317_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_317_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_317_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_318_id_E_RABs_ToBeReleased_List_RelConf }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_318_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_List_RelConf }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_318_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_319_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_319_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_319_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_320_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_320_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_320_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_321_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_321_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_321_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBReleaseConfirm_IEs_1[] = { + { 6, 4, asn_IOS_SeNBReleaseConfirm_IEs_1_rows } +}; +static const long asn_VAL_323_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_323_reject = 0; +static const long asn_VAL_323_mandatory = 2; +static const long asn_VAL_324_id_SeNB_UE_X2AP_ID = 112; +static const long asn_VAL_324_reject = 0; +static const long asn_VAL_324_mandatory = 2; +static const long asn_VAL_325_id_E_RABs_SubjectToCounterCheck_List = 141; +static const long asn_VAL_325_ignore = 1; +static const long asn_VAL_325_mandatory = 2; +static const long asn_VAL_326_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_326_ignore = 1; +static const long asn_VAL_326_optional = 0; +static const long asn_VAL_327_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_327_ignore = 1; +static const long asn_VAL_327_optional = 0; +static const asn_ioc_cell_t asn_IOS_SeNBCounterCheckRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_323_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_323_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_323_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_324_id_SeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_324_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_324_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_325_id_E_RABs_SubjectToCounterCheck_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_325_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToCounterCheck_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_325_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_326_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_326_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_326_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_327_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_327_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_327_optional } +}; +static const asn_ioc_set_t asn_IOS_SeNBCounterCheckRequest_IEs_1[] = { + { 5, 4, asn_IOS_SeNBCounterCheckRequest_IEs_1_rows } +}; +static const long asn_VAL_329_id_GlobalENB_ID = 21; +static const long asn_VAL_329_reject = 0; +static const long asn_VAL_329_mandatory = 2; +static const long asn_VAL_330_id_X2RemovalThreshold = 169; +static const long asn_VAL_330_reject = 0; +static const long asn_VAL_330_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2RemovalRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_329_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_329_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_329_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_330_id_X2RemovalThreshold }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_330_reject }, + { "&Value", aioc__type, &asn_DEF_X2BenefitValue }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_330_optional } +}; +static const asn_ioc_set_t asn_IOS_X2RemovalRequest_IEs_1[] = { + { 2, 4, asn_IOS_X2RemovalRequest_IEs_1_rows } +}; +static const long asn_VAL_331_id_GlobalENB_ID = 21; +static const long asn_VAL_331_reject = 0; +static const long asn_VAL_331_mandatory = 2; +static const long asn_VAL_332_id_CriticalityDiagnostics = 17; +static const long asn_VAL_332_ignore = 1; +static const long asn_VAL_332_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2RemovalResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_331_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_331_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_331_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_332_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_332_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_332_optional } +}; +static const asn_ioc_set_t asn_IOS_X2RemovalResponse_IEs_1[] = { + { 2, 4, asn_IOS_X2RemovalResponse_IEs_1_rows } +}; +static const long asn_VAL_333_id_Cause = 5; +static const long asn_VAL_333_ignore = 1; +static const long asn_VAL_333_mandatory = 2; +static const long asn_VAL_334_id_CriticalityDiagnostics = 17; +static const long asn_VAL_334_ignore = 1; +static const long asn_VAL_334_optional = 0; +static const asn_ioc_cell_t asn_IOS_X2RemovalFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_333_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_333_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_333_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_334_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_334_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_334_optional } +}; +static const asn_ioc_set_t asn_IOS_X2RemovalFailure_IEs_1[] = { + { 2, 4, asn_IOS_X2RemovalFailure_IEs_1_rows } +}; +static const long asn_VAL_335_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_335_reject = 0; +static const long asn_VAL_335_mandatory = 2; +static const long asn_VAL_336_id_SeNB_UE_X2AP_ID_Extension = 158; +static const long asn_VAL_336_reject = 0; +static const long asn_VAL_336_optional = 0; +static const long asn_VAL_337_id_resumeID = 172; +static const long asn_VAL_337_reject = 0; +static const long asn_VAL_337_mandatory = 2; +static const long asn_VAL_338_id_ShortMAC_I = 51; +static const long asn_VAL_338_reject = 0; +static const long asn_VAL_338_mandatory = 2; +static const long asn_VAL_339_id_NewEUTRANCellIdentifier = 175; +static const long asn_VAL_339_reject = 0; +static const long asn_VAL_339_mandatory = 2; +static const long asn_VAL_340_id_FailureCellCRNTI = 50; +static const long asn_VAL_340_reject = 0; +static const long asn_VAL_340_optional = 0; +static const long asn_VAL_341_id_FailureCellPCI = 48; +static const long asn_VAL_341_reject = 0; +static const long asn_VAL_341_optional = 0; +static const asn_ioc_cell_t asn_IOS_RetrieveUEContextRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_335_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_335_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_335_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_336_id_SeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_336_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_336_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_337_id_resumeID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_337_reject }, + { "&Value", aioc__type, &asn_DEF_ResumeID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_337_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_338_id_ShortMAC_I }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_338_reject }, + { "&Value", aioc__type, &asn_DEF_ShortMAC_I }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_338_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_339_id_NewEUTRANCellIdentifier }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_339_reject }, + { "&Value", aioc__type, &asn_DEF_EUTRANCellIdentifier }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_339_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_340_id_FailureCellCRNTI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_340_reject }, + { "&Value", aioc__type, &asn_DEF_CRNTI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_340_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_341_id_FailureCellPCI }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_341_reject }, + { "&Value", aioc__type, &asn_DEF_PCI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_341_optional } +}; +static const asn_ioc_set_t asn_IOS_RetrieveUEContextRequest_IEs_1[] = { + { 7, 4, asn_IOS_RetrieveUEContextRequest_IEs_1_rows } +}; +static const long asn_VAL_342_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_342_ignore = 1; +static const long asn_VAL_342_mandatory = 2; +static const long asn_VAL_343_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_343_ignore = 1; +static const long asn_VAL_343_optional = 0; +static const long asn_VAL_344_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_344_ignore = 1; +static const long asn_VAL_344_mandatory = 2; +static const long asn_VAL_345_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_345_ignore = 1; +static const long asn_VAL_345_optional = 0; +static const long asn_VAL_346_id_GUMMEI_ID = 23; +static const long asn_VAL_346_reject = 0; +static const long asn_VAL_346_mandatory = 2; +static const long asn_VAL_347_id_UE_ContextInformationRetrieve = 173; +static const long asn_VAL_347_reject = 0; +static const long asn_VAL_347_mandatory = 2; +static const long asn_VAL_348_id_TraceActivation = 13; +static const long asn_VAL_348_ignore = 1; +static const long asn_VAL_348_optional = 0; +static const long asn_VAL_349_id_SRVCCOperationPossible = 36; +static const long asn_VAL_349_ignore = 1; +static const long asn_VAL_349_optional = 0; +static const long asn_VAL_350_id_Masked_IMEISV = 98; +static const long asn_VAL_350_ignore = 1; +static const long asn_VAL_350_optional = 0; +static const long asn_VAL_351_id_ExpectedUEBehaviour = 104; +static const long asn_VAL_351_ignore = 1; +static const long asn_VAL_351_optional = 0; +static const long asn_VAL_352_id_ProSeAuthorized = 103; +static const long asn_VAL_352_ignore = 1; +static const long asn_VAL_352_optional = 0; +static const long asn_VAL_353_id_CriticalityDiagnostics = 17; +static const long asn_VAL_353_ignore = 1; +static const long asn_VAL_353_optional = 0; +static const long asn_VAL_354_id_V2XServicesAuthorized = 176; +static const long asn_VAL_354_ignore = 1; +static const long asn_VAL_354_optional = 0; +static const long asn_VAL_355_id_AerialUEsubscriptionInformation = 277; +static const long asn_VAL_355_ignore = 1; +static const long asn_VAL_355_optional = 0; +static const long asn_VAL_356_id_Subscription_Based_UE_DifferentiationInfo = 309; +static const long asn_VAL_356_ignore = 1; +static const long asn_VAL_356_optional = 0; +static const asn_ioc_cell_t asn_IOS_RetrieveUEContextResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_342_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_342_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_342_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_343_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_343_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_343_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_344_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_344_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_344_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_345_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_345_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_345_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_346_id_GUMMEI_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_346_reject }, + { "&Value", aioc__type, &asn_DEF_GUMMEI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_346_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_347_id_UE_ContextInformationRetrieve }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_347_reject }, + { "&Value", aioc__type, &asn_DEF_UE_ContextInformationRetrieve }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_347_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_348_id_TraceActivation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_348_ignore }, + { "&Value", aioc__type, &asn_DEF_TraceActivation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_348_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_349_id_SRVCCOperationPossible }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_349_ignore }, + { "&Value", aioc__type, &asn_DEF_SRVCCOperationPossible }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_349_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_350_id_Masked_IMEISV }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_350_ignore }, + { "&Value", aioc__type, &asn_DEF_Masked_IMEISV }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_350_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_351_id_ExpectedUEBehaviour }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_351_ignore }, + { "&Value", aioc__type, &asn_DEF_ExpectedUEBehaviour }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_351_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_352_id_ProSeAuthorized }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_352_ignore }, + { "&Value", aioc__type, &asn_DEF_ProSeAuthorized }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_352_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_353_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_353_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_353_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_354_id_V2XServicesAuthorized }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_354_ignore }, + { "&Value", aioc__type, &asn_DEF_V2XServicesAuthorized }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_354_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_355_id_AerialUEsubscriptionInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_355_ignore }, + { "&Value", aioc__type, &asn_DEF_AerialUEsubscriptionInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_355_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_356_id_Subscription_Based_UE_DifferentiationInfo }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_356_ignore }, + { "&Value", aioc__type, &asn_DEF_Subscription_Based_UE_DifferentiationInfo }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_356_optional } +}; +static const asn_ioc_set_t asn_IOS_RetrieveUEContextResponse_IEs_1[] = { + { 15, 4, asn_IOS_RetrieveUEContextResponse_IEs_1_rows } +}; +static const long asn_VAL_358_id_New_eNB_UE_X2AP_ID = 9; +static const long asn_VAL_358_ignore = 1; +static const long asn_VAL_358_mandatory = 2; +static const long asn_VAL_359_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_359_ignore = 1; +static const long asn_VAL_359_optional = 0; +static const long asn_VAL_360_id_Cause = 5; +static const long asn_VAL_360_ignore = 1; +static const long asn_VAL_360_mandatory = 2; +static const long asn_VAL_361_id_CriticalityDiagnostics = 17; +static const long asn_VAL_361_ignore = 1; +static const long asn_VAL_361_optional = 0; +static const asn_ioc_cell_t asn_IOS_RetrieveUEContextFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_358_id_New_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_358_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_358_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_359_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_359_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_359_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_360_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_360_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_360_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_361_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_361_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_361_optional } +}; +static const asn_ioc_set_t asn_IOS_RetrieveUEContextFailure_IEs_1[] = { + { 4, 4, asn_IOS_RetrieveUEContextFailure_IEs_1_rows } +}; +static const long asn_VAL_362_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_362_reject = 0; +static const long asn_VAL_362_mandatory = 2; +static const long asn_VAL_363_id_NRUESecurityCapabilities = 248; +static const long asn_VAL_363_reject = 0; +static const long asn_VAL_363_mandatory = 2; +static const long asn_VAL_364_id_SgNBSecurityKey = 203; +static const long asn_VAL_364_reject = 0; +static const long asn_VAL_364_mandatory = 2; +static const long asn_VAL_365_id_SgNBUEAggregateMaximumBitRate = 204; +static const long asn_VAL_365_reject = 0; +static const long asn_VAL_365_mandatory = 2; +static const long asn_VAL_366_id_SelectedPLMN = 269; +static const long asn_VAL_366_ignore = 1; +static const long asn_VAL_366_optional = 0; +static const long asn_VAL_367_id_HandoverRestrictionList = 240; +static const long asn_VAL_367_ignore = 1; +static const long asn_VAL_367_optional = 0; +static const long asn_VAL_368_id_E_RABs_ToBeAdded_SgNBAddReqList = 205; +static const long asn_VAL_368_reject = 0; +static const long asn_VAL_368_mandatory = 2; +static const long asn_VAL_369_id_MeNBtoSgNBContainer = 206; +static const long asn_VAL_369_reject = 0; +static const long asn_VAL_369_mandatory = 2; +static const long asn_VAL_370_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_370_reject = 0; +static const long asn_VAL_370_optional = 0; +static const long asn_VAL_371_id_ExpectedUEBehaviour = 104; +static const long asn_VAL_371_ignore = 1; +static const long asn_VAL_371_optional = 0; +static const long asn_VAL_372_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_372_reject = 0; +static const long asn_VAL_372_optional = 0; +static const long asn_VAL_373_id_RequestedSplitSRBs = 208; +static const long asn_VAL_373_reject = 0; +static const long asn_VAL_373_optional = 0; +static const long asn_VAL_374_id_MeNBResourceCoordinationInformation = 257; +static const long asn_VAL_374_ignore = 1; +static const long asn_VAL_374_optional = 0; +static const long asn_VAL_375_id_SGNB_Addition_Trigger_Ind = 278; +static const long asn_VAL_375_reject = 0; +static const long asn_VAL_375_optional = 0; +static const long asn_VAL_376_id_SubscriberProfileIDforRFP = 275; +static const long asn_VAL_376_ignore = 1; +static const long asn_VAL_376_optional = 0; +static const long asn_VAL_377_id_MeNBCell_ID = 279; +static const long asn_VAL_377_reject = 0; +static const long asn_VAL_377_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_SgNBAdditionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_362_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_362_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_362_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_363_id_NRUESecurityCapabilities }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_363_reject }, + { "&Value", aioc__type, &asn_DEF_NRUESecurityCapabilities }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_363_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_364_id_SgNBSecurityKey }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_364_reject }, + { "&Value", aioc__type, &asn_DEF_SgNBSecurityKey }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_364_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_365_id_SgNBUEAggregateMaximumBitRate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_365_reject }, + { "&Value", aioc__type, &asn_DEF_UEAggregateMaximumBitRate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_365_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_366_id_SelectedPLMN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_366_ignore }, + { "&Value", aioc__type, &asn_DEF_PLMN_Identity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_366_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_367_id_HandoverRestrictionList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_367_ignore }, + { "&Value", aioc__type, &asn_DEF_HandoverRestrictionList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_367_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_368_id_E_RABs_ToBeAdded_SgNBAddReqList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_368_reject }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_368_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_369_id_MeNBtoSgNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_369_reject }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSgNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_369_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_370_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_370_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_370_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_371_id_ExpectedUEBehaviour }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_371_ignore }, + { "&Value", aioc__type, &asn_DEF_ExpectedUEBehaviour }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_371_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_372_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_372_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_372_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_373_id_RequestedSplitSRBs }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_373_reject }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_373_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_374_id_MeNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_374_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_374_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_375_id_SGNB_Addition_Trigger_Ind }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_375_reject }, + { "&Value", aioc__type, &asn_DEF_SGNB_Addition_Trigger_Ind }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_375_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_376_id_SubscriberProfileIDforRFP }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_376_ignore }, + { "&Value", aioc__type, &asn_DEF_SubscriberProfileIDforRFP }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_376_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_377_id_MeNBCell_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_377_reject }, + { "&Value", aioc__type, &asn_DEF_ECGI }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_377_mandatory } +}; +static const asn_ioc_set_t asn_IOS_SgNBAdditionRequest_IEs_1[] = { + { 16, 4, asn_IOS_SgNBAdditionRequest_IEs_1_rows } +}; +static const long asn_VAL_379_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_379_reject = 0; +static const long asn_VAL_379_mandatory = 2; +static const long asn_VAL_380_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_380_reject = 0; +static const long asn_VAL_380_mandatory = 2; +static const long asn_VAL_381_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210; +static const long asn_VAL_381_ignore = 1; +static const long asn_VAL_381_mandatory = 2; +static const long asn_VAL_382_id_E_RABs_NotAdmitted_List = 3; +static const long asn_VAL_382_ignore = 1; +static const long asn_VAL_382_optional = 0; +static const long asn_VAL_383_id_SgNBtoMeNBContainer = 211; +static const long asn_VAL_383_reject = 0; +static const long asn_VAL_383_mandatory = 2; +static const long asn_VAL_384_id_CriticalityDiagnostics = 17; +static const long asn_VAL_384_ignore = 1; +static const long asn_VAL_384_optional = 0; +static const long asn_VAL_385_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_385_reject = 0; +static const long asn_VAL_385_optional = 0; +static const long asn_VAL_386_id_AdmittedSplitSRBs = 212; +static const long asn_VAL_386_reject = 0; +static const long asn_VAL_386_optional = 0; +static const long asn_VAL_387_id_SgNBResourceCoordinationInformation = 258; +static const long asn_VAL_387_ignore = 1; +static const long asn_VAL_387_optional = 0; +static const long asn_VAL_388_id_RRCConfigIndication = 272; +static const long asn_VAL_388_reject = 0; +static const long asn_VAL_388_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBAdditionRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_379_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_379_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_379_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_380_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_380_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_380_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_381_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_381_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_381_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_382_id_E_RABs_NotAdmitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_382_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_382_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_383_id_SgNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_383_reject }, + { "&Value", aioc__type, &asn_DEF_SgNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_383_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_384_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_384_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_384_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_385_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_385_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_385_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_386_id_AdmittedSplitSRBs }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_386_reject }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_386_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_387_id_SgNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_387_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_387_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_388_id_RRCConfigIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_388_reject }, + { "&Value", aioc__type, &asn_DEF_RRC_Config_Ind }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_388_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBAdditionRequestAcknowledge_IEs_1[] = { + { 10, 4, asn_IOS_SgNBAdditionRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_390_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_390_reject = 0; +static const long asn_VAL_390_mandatory = 2; +static const long asn_VAL_391_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_391_reject = 0; +static const long asn_VAL_391_optional = 0; +static const long asn_VAL_392_id_Cause = 5; +static const long asn_VAL_392_ignore = 1; +static const long asn_VAL_392_mandatory = 2; +static const long asn_VAL_393_id_CriticalityDiagnostics = 17; +static const long asn_VAL_393_ignore = 1; +static const long asn_VAL_393_optional = 0; +static const long asn_VAL_394_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_394_reject = 0; +static const long asn_VAL_394_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBAdditionRequestReject_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_390_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_390_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_390_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_391_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_391_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_391_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_392_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_392_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_392_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_393_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_393_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_393_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_394_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_394_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_394_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBAdditionRequestReject_IEs_1[] = { + { 5, 4, asn_IOS_SgNBAdditionRequestReject_IEs_1_rows } +}; +static const long asn_VAL_395_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_395_reject = 0; +static const long asn_VAL_395_mandatory = 2; +static const long asn_VAL_396_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_396_reject = 0; +static const long asn_VAL_396_mandatory = 2; +static const long asn_VAL_397_id_ResponseInformationSgNBReconfComp = 214; +static const long asn_VAL_397_ignore = 1; +static const long asn_VAL_397_mandatory = 2; +static const long asn_VAL_398_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_398_reject = 0; +static const long asn_VAL_398_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReconfigurationComplete_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_395_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_395_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_395_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_396_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_396_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_396_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_397_id_ResponseInformationSgNBReconfComp }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_397_ignore }, + { "&Value", aioc__type, &asn_DEF_ResponseInformationSgNBReconfComp }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_397_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_398_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_398_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_398_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReconfigurationComplete_IEs_1[] = { + { 4, 4, asn_IOS_SgNBReconfigurationComplete_IEs_1_rows } +}; +static const long asn_VAL_399_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_399_reject = 0; +static const long asn_VAL_399_mandatory = 2; +static const long asn_VAL_400_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_400_reject = 0; +static const long asn_VAL_400_mandatory = 2; +static const long asn_VAL_401_id_Cause = 5; +static const long asn_VAL_401_ignore = 1; +static const long asn_VAL_401_mandatory = 2; +static const long asn_VAL_402_id_SelectedPLMN = 269; +static const long asn_VAL_402_ignore = 1; +static const long asn_VAL_402_optional = 0; +static const long asn_VAL_403_id_HandoverRestrictionList = 240; +static const long asn_VAL_403_ignore = 1; +static const long asn_VAL_403_optional = 0; +static const long asn_VAL_404_id_SCGConfigurationQuery = 241; +static const long asn_VAL_404_ignore = 1; +static const long asn_VAL_404_optional = 0; +static const long asn_VAL_405_id_UE_ContextInformation_SgNBModReq = 215; +static const long asn_VAL_405_reject = 0; +static const long asn_VAL_405_optional = 0; +static const long asn_VAL_406_id_MeNBtoSgNBContainer = 206; +static const long asn_VAL_406_reject = 0; +static const long asn_VAL_406_optional = 0; +static const long asn_VAL_407_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_407_reject = 0; +static const long asn_VAL_407_optional = 0; +static const long asn_VAL_408_id_MeNBResourceCoordinationInformation = 257; +static const long asn_VAL_408_ignore = 1; +static const long asn_VAL_408_optional = 0; +static const long asn_VAL_409_id_RequestedSplitSRBs = 208; +static const long asn_VAL_409_ignore = 1; +static const long asn_VAL_409_optional = 0; +static const long asn_VAL_410_id_RequestedSplitSRBsrelease = 280; +static const long asn_VAL_410_ignore = 1; +static const long asn_VAL_410_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_399_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_399_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_399_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_400_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_400_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_400_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_401_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_401_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_401_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_402_id_SelectedPLMN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_402_ignore }, + { "&Value", aioc__type, &asn_DEF_PLMN_Identity }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_402_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_403_id_HandoverRestrictionList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_403_ignore }, + { "&Value", aioc__type, &asn_DEF_HandoverRestrictionList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_403_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_404_id_SCGConfigurationQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_404_ignore }, + { "&Value", aioc__type, &asn_DEF_SCGConfigurationQuery }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_404_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_405_id_UE_ContextInformation_SgNBModReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_405_reject }, + { "&Value", aioc__type, &asn_DEF_UE_ContextInformation_SgNBModReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_405_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_406_id_MeNBtoSgNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_406_reject }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSgNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_406_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_407_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_407_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_407_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_408_id_MeNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_408_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_408_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_409_id_RequestedSplitSRBs }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_409_ignore }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_409_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_410_id_RequestedSplitSRBsrelease }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_410_ignore }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_410_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationRequest_IEs_1[] = { + { 12, 4, asn_IOS_SgNBModificationRequest_IEs_1_rows } +}; +static const long asn_VAL_414_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_414_ignore = 1; +static const long asn_VAL_414_mandatory = 2; +static const long asn_VAL_415_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_415_ignore = 1; +static const long asn_VAL_415_mandatory = 2; +static const long asn_VAL_416_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219; +static const long asn_VAL_416_ignore = 1; +static const long asn_VAL_416_optional = 0; +static const long asn_VAL_417_id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220; +static const long asn_VAL_417_ignore = 1; +static const long asn_VAL_417_optional = 0; +static const long asn_VAL_418_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221; +static const long asn_VAL_418_ignore = 1; +static const long asn_VAL_418_optional = 0; +static const long asn_VAL_419_id_E_RABs_NotAdmitted_List = 3; +static const long asn_VAL_419_ignore = 1; +static const long asn_VAL_419_optional = 0; +static const long asn_VAL_420_id_SgNBtoMeNBContainer = 211; +static const long asn_VAL_420_ignore = 1; +static const long asn_VAL_420_optional = 0; +static const long asn_VAL_421_id_CriticalityDiagnostics = 17; +static const long asn_VAL_421_ignore = 1; +static const long asn_VAL_421_optional = 0; +static const long asn_VAL_422_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_422_ignore = 1; +static const long asn_VAL_422_optional = 0; +static const long asn_VAL_423_id_SgNBResourceCoordinationInformation = 258; +static const long asn_VAL_423_ignore = 1; +static const long asn_VAL_423_optional = 0; +static const long asn_VAL_424_id_AdmittedSplitSRBs = 212; +static const long asn_VAL_424_ignore = 1; +static const long asn_VAL_424_optional = 0; +static const long asn_VAL_425_id_AdmittedSplitSRBsrelease = 281; +static const long asn_VAL_425_ignore = 1; +static const long asn_VAL_425_optional = 0; +static const long asn_VAL_426_id_RRCConfigIndication = 272; +static const long asn_VAL_426_reject = 0; +static const long asn_VAL_426_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_414_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_414_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_414_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_415_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_415_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_415_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_416_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_416_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_416_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_417_id_E_RABs_Admitted_ToBeModified_SgNBModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_417_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_417_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_418_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_418_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_418_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_419_id_E_RABs_NotAdmitted_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_419_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_419_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_420_id_SgNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_420_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_420_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_421_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_421_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_421_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_422_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_422_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_422_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_423_id_SgNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_423_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_423_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_424_id_AdmittedSplitSRBs }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_424_ignore }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_424_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_425_id_AdmittedSplitSRBsrelease }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_425_ignore }, + { "&Value", aioc__type, &asn_DEF_SplitSRBs }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_425_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_426_id_RRCConfigIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_426_reject }, + { "&Value", aioc__type, &asn_DEF_RRC_Config_Ind }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_426_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationRequestAcknowledge_IEs_1[] = { + { 13, 4, asn_IOS_SgNBModificationRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_430_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_430_ignore = 1; +static const long asn_VAL_430_mandatory = 2; +static const long asn_VAL_431_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_431_ignore = 1; +static const long asn_VAL_431_mandatory = 2; +static const long asn_VAL_432_id_Cause = 5; +static const long asn_VAL_432_ignore = 1; +static const long asn_VAL_432_mandatory = 2; +static const long asn_VAL_433_id_CriticalityDiagnostics = 17; +static const long asn_VAL_433_ignore = 1; +static const long asn_VAL_433_optional = 0; +static const long asn_VAL_434_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_434_ignore = 1; +static const long asn_VAL_434_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationRequestReject_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_430_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_430_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_430_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_431_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_431_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_431_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_432_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_432_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_432_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_433_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_433_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_433_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_434_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_434_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_434_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationRequestReject_IEs_1[] = { + { 5, 4, asn_IOS_SgNBModificationRequestReject_IEs_1_rows } +}; +static const long asn_VAL_435_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_435_reject = 0; +static const long asn_VAL_435_mandatory = 2; +static const long asn_VAL_436_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_436_reject = 0; +static const long asn_VAL_436_mandatory = 2; +static const long asn_VAL_437_id_Cause = 5; +static const long asn_VAL_437_ignore = 1; +static const long asn_VAL_437_mandatory = 2; +static const long asn_VAL_438_id_PDCPChangeIndication = 249; +static const long asn_VAL_438_ignore = 1; +static const long asn_VAL_438_optional = 0; +static const long asn_VAL_439_id_E_RABs_ToBeReleased_SgNBModReqdList = 225; +static const long asn_VAL_439_ignore = 1; +static const long asn_VAL_439_optional = 0; +static const long asn_VAL_440_id_SgNBtoMeNBContainer = 211; +static const long asn_VAL_440_ignore = 1; +static const long asn_VAL_440_optional = 0; +static const long asn_VAL_441_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_441_reject = 0; +static const long asn_VAL_441_optional = 0; +static const long asn_VAL_442_id_E_RABs_ToBeModified_SgNBModReqdList = 226; +static const long asn_VAL_442_ignore = 1; +static const long asn_VAL_442_optional = 0; +static const long asn_VAL_443_id_SgNBResourceCoordinationInformation = 258; +static const long asn_VAL_443_ignore = 1; +static const long asn_VAL_443_optional = 0; +static const long asn_VAL_444_id_RRCConfigIndication = 272; +static const long asn_VAL_444_reject = 0; +static const long asn_VAL_444_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_435_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_435_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_435_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_436_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_436_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_436_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_437_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_437_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_437_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_438_id_PDCPChangeIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_438_ignore }, + { "&Value", aioc__type, &asn_DEF_PDCPChangeIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_438_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_439_id_E_RABs_ToBeReleased_SgNBModReqdList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_439_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_439_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_440_id_SgNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_440_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_440_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_441_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_441_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_441_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_442_id_E_RABs_ToBeModified_SgNBModReqdList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_442_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeModified_SgNBModReqdList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_442_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_443_id_SgNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_443_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_443_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_444_id_RRCConfigIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_444_reject }, + { "&Value", aioc__type, &asn_DEF_RRC_Config_Ind }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_444_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationRequired_IEs_1[] = { + { 10, 4, asn_IOS_SgNBModificationRequired_IEs_1_rows } +}; +static const long asn_VAL_447_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_447_ignore = 1; +static const long asn_VAL_447_mandatory = 2; +static const long asn_VAL_448_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_448_ignore = 1; +static const long asn_VAL_448_mandatory = 2; +static const long asn_VAL_449_id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294; +static const long asn_VAL_449_ignore = 1; +static const long asn_VAL_449_optional = 0; +static const long asn_VAL_450_id_MeNBtoSgNBContainer = 206; +static const long asn_VAL_450_ignore = 1; +static const long asn_VAL_450_optional = 0; +static const long asn_VAL_451_id_CriticalityDiagnostics = 17; +static const long asn_VAL_451_ignore = 1; +static const long asn_VAL_451_optional = 0; +static const long asn_VAL_452_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_452_ignore = 1; +static const long asn_VAL_452_optional = 0; +static const long asn_VAL_453_id_MeNBResourceCoordinationInformation = 257; +static const long asn_VAL_453_ignore = 1; +static const long asn_VAL_453_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_447_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_447_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_447_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_448_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_448_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_448_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_449_id_E_RABs_AdmittedToBeModified_SgNBModConfList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_449_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_449_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_450_id_MeNBtoSgNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_450_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSgNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_450_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_451_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_451_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_451_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_452_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_452_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_452_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_453_id_MeNBResourceCoordinationInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_453_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBResourceCoordinationInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_453_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationConfirm_IEs_1[] = { + { 7, 4, asn_IOS_SgNBModificationConfirm_IEs_1_rows } +}; +static const long asn_VAL_455_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_455_ignore = 1; +static const long asn_VAL_455_mandatory = 2; +static const long asn_VAL_456_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_456_ignore = 1; +static const long asn_VAL_456_mandatory = 2; +static const long asn_VAL_457_id_Cause = 5; +static const long asn_VAL_457_ignore = 1; +static const long asn_VAL_457_mandatory = 2; +static const long asn_VAL_458_id_MeNBtoSgNBContainer = 206; +static const long asn_VAL_458_ignore = 1; +static const long asn_VAL_458_optional = 0; +static const long asn_VAL_459_id_CriticalityDiagnostics = 17; +static const long asn_VAL_459_ignore = 1; +static const long asn_VAL_459_optional = 0; +static const long asn_VAL_460_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_460_ignore = 1; +static const long asn_VAL_460_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBModificationRefuse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_455_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_455_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_455_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_456_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_456_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_456_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_457_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_457_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_457_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_458_id_MeNBtoSgNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_458_ignore }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSgNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_458_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_459_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_459_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_459_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_460_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_460_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_460_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBModificationRefuse_IEs_1[] = { + { 6, 4, asn_IOS_SgNBModificationRefuse_IEs_1_rows } +}; +static const long asn_VAL_461_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_461_reject = 0; +static const long asn_VAL_461_mandatory = 2; +static const long asn_VAL_462_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_462_reject = 0; +static const long asn_VAL_462_optional = 0; +static const long asn_VAL_463_id_Cause = 5; +static const long asn_VAL_463_ignore = 1; +static const long asn_VAL_463_mandatory = 2; +static const long asn_VAL_464_id_E_RABs_ToBeReleased_SgNBRelReqList = 231; +static const long asn_VAL_464_ignore = 1; +static const long asn_VAL_464_optional = 0; +static const long asn_VAL_465_id_UE_ContextKeptIndicator = 154; +static const long asn_VAL_465_ignore = 1; +static const long asn_VAL_465_optional = 0; +static const long asn_VAL_466_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_466_reject = 0; +static const long asn_VAL_466_optional = 0; +static const long asn_VAL_467_id_MeNBtoSgNBContainer = 206; +static const long asn_VAL_467_reject = 0; +static const long asn_VAL_467_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReleaseRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_461_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_461_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_461_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_462_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_462_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_462_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_463_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_463_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_463_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_464_id_E_RABs_ToBeReleased_SgNBRelReqList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_464_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_464_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_465_id_UE_ContextKeptIndicator }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_465_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_ContextKeptIndicator }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_465_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_466_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_466_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_466_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_467_id_MeNBtoSgNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_467_reject }, + { "&Value", aioc__type, &asn_DEF_MeNBtoSgNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_467_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReleaseRequest_IEs_1[] = { + { 7, 4, asn_IOS_SgNBReleaseRequest_IEs_1_rows } +}; +static const long asn_VAL_469_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_469_ignore = 1; +static const long asn_VAL_469_mandatory = 2; +static const long asn_VAL_470_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_470_ignore = 1; +static const long asn_VAL_470_mandatory = 2; +static const long asn_VAL_471_id_CriticalityDiagnostics = 17; +static const long asn_VAL_471_ignore = 1; +static const long asn_VAL_471_optional = 0; +static const long asn_VAL_472_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_472_reject = 0; +static const long asn_VAL_472_optional = 0; +static const long asn_VAL_473_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318; +static const long asn_VAL_473_ignore = 1; +static const long asn_VAL_473_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReleaseRequestAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_469_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_469_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_469_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_470_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_470_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_470_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_471_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_471_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_471_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_472_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_472_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_472_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_473_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_473_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_473_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReleaseRequestAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_SgNBReleaseRequestAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_475_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_475_ignore = 1; +static const long asn_VAL_475_mandatory = 2; +static const long asn_VAL_476_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_476_ignore = 1; +static const long asn_VAL_476_mandatory = 2; +static const long asn_VAL_477_id_Cause = 5; +static const long asn_VAL_477_ignore = 1; +static const long asn_VAL_477_mandatory = 2; +static const long asn_VAL_478_id_CriticalityDiagnostics = 17; +static const long asn_VAL_478_ignore = 1; +static const long asn_VAL_478_optional = 0; +static const long asn_VAL_479_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_479_reject = 0; +static const long asn_VAL_479_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReleaseRequestReject_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_475_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_475_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_475_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_476_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_476_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_476_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_477_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_477_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_477_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_478_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_478_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_478_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_479_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_479_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_479_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReleaseRequestReject_IEs_1[] = { + { 5, 4, asn_IOS_SgNBReleaseRequestReject_IEs_1_rows } +}; +static const long asn_VAL_480_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_480_reject = 0; +static const long asn_VAL_480_mandatory = 2; +static const long asn_VAL_481_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_481_reject = 0; +static const long asn_VAL_481_mandatory = 2; +static const long asn_VAL_482_id_Cause = 5; +static const long asn_VAL_482_ignore = 1; +static const long asn_VAL_482_mandatory = 2; +static const long asn_VAL_483_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_483_reject = 0; +static const long asn_VAL_483_optional = 0; +static const long asn_VAL_484_id_E_RABs_ToBeReleased_SgNBRelReqdList = 320; +static const long asn_VAL_484_ignore = 1; +static const long asn_VAL_484_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReleaseRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_480_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_480_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_480_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_481_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_481_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_481_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_482_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_482_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_482_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_483_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_483_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_483_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_484_id_E_RABs_ToBeReleased_SgNBRelReqdList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_484_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_484_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReleaseRequired_IEs_1[] = { + { 5, 4, asn_IOS_SgNBReleaseRequired_IEs_1_rows } +}; +static const long asn_VAL_486_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_486_ignore = 1; +static const long asn_VAL_486_mandatory = 2; +static const long asn_VAL_487_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_487_ignore = 1; +static const long asn_VAL_487_mandatory = 2; +static const long asn_VAL_488_id_E_RABs_ToBeReleased_SgNBRelConfList = 233; +static const long asn_VAL_488_ignore = 1; +static const long asn_VAL_488_optional = 0; +static const long asn_VAL_489_id_CriticalityDiagnostics = 17; +static const long asn_VAL_489_ignore = 1; +static const long asn_VAL_489_optional = 0; +static const long asn_VAL_490_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_490_ignore = 1; +static const long asn_VAL_490_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBReleaseConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_486_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_486_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_486_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_487_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_487_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_487_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_488_id_E_RABs_ToBeReleased_SgNBRelConfList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_488_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_488_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_489_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_489_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_489_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_490_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_490_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_490_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBReleaseConfirm_IEs_1[] = { + { 5, 4, asn_IOS_SgNBReleaseConfirm_IEs_1_rows } +}; +static const long asn_VAL_492_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_492_reject = 0; +static const long asn_VAL_492_mandatory = 2; +static const long asn_VAL_493_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_493_reject = 0; +static const long asn_VAL_493_mandatory = 2; +static const long asn_VAL_494_id_E_RABs_SubjectToSgNBCounterCheck_List = 235; +static const long asn_VAL_494_ignore = 1; +static const long asn_VAL_494_mandatory = 2; +static const long asn_VAL_495_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_495_ignore = 1; +static const long asn_VAL_495_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBCounterCheckRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_492_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_492_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_492_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_493_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_493_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_493_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_494_id_E_RABs_SubjectToSgNBCounterCheck_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_494_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_494_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_495_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_495_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_495_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBCounterCheckRequest_IEs_1[] = { + { 4, 4, asn_IOS_SgNBCounterCheckRequest_IEs_1_rows } +}; +static const long asn_VAL_497_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_497_reject = 0; +static const long asn_VAL_497_mandatory = 2; +static const long asn_VAL_498_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_498_reject = 0; +static const long asn_VAL_498_mandatory = 2; +static const long asn_VAL_499_id_Target_SgNB_ID = 239; +static const long asn_VAL_499_reject = 0; +static const long asn_VAL_499_mandatory = 2; +static const long asn_VAL_500_id_Cause = 5; +static const long asn_VAL_500_ignore = 1; +static const long asn_VAL_500_mandatory = 2; +static const long asn_VAL_501_id_SgNBtoMeNBContainer = 211; +static const long asn_VAL_501_reject = 0; +static const long asn_VAL_501_optional = 0; +static const long asn_VAL_502_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_502_reject = 0; +static const long asn_VAL_502_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBChangeRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_497_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_497_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_497_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_498_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_498_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_498_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_499_id_Target_SgNB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_499_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalGNB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_499_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_500_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_500_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_500_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_501_id_SgNBtoMeNBContainer }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_501_reject }, + { "&Value", aioc__type, &asn_DEF_SgNBtoMeNBContainer }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_501_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_502_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_502_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_502_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBChangeRequired_IEs_1[] = { + { 6, 4, asn_IOS_SgNBChangeRequired_IEs_1_rows } +}; +static const long asn_VAL_503_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_503_ignore = 1; +static const long asn_VAL_503_mandatory = 2; +static const long asn_VAL_504_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_504_ignore = 1; +static const long asn_VAL_504_mandatory = 2; +static const long asn_VAL_505_id_E_RABs_ToBeReleased_SgNBChaConfList = 229; +static const long asn_VAL_505_ignore = 1; +static const long asn_VAL_505_optional = 0; +static const long asn_VAL_506_id_CriticalityDiagnostics = 17; +static const long asn_VAL_506_ignore = 1; +static const long asn_VAL_506_optional = 0; +static const long asn_VAL_507_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_507_ignore = 1; +static const long asn_VAL_507_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBChangeConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_503_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_503_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_503_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_504_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_504_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_504_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_505_id_E_RABs_ToBeReleased_SgNBChaConfList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_505_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_505_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_506_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_506_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_506_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_507_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_507_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_507_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBChangeConfirm_IEs_1[] = { + { 5, 4, asn_IOS_SgNBChangeConfirm_IEs_1_rows } +}; +static const long asn_VAL_509_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_509_reject = 0; +static const long asn_VAL_509_mandatory = 2; +static const long asn_VAL_510_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_510_reject = 0; +static const long asn_VAL_510_mandatory = 2; +static const long asn_VAL_511_id_SplitSRB = 242; +static const long asn_VAL_511_reject = 0; +static const long asn_VAL_511_optional = 0; +static const long asn_VAL_512_id_UENRMeasurement = 243; +static const long asn_VAL_512_reject = 0; +static const long asn_VAL_512_optional = 0; +static const long asn_VAL_513_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_513_reject = 0; +static const long asn_VAL_513_optional = 0; +static const asn_ioc_cell_t asn_IOS_RRCTransfer_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_509_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_509_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_509_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_510_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_510_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_510_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_511_id_SplitSRB }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_511_reject }, + { "&Value", aioc__type, &asn_DEF_SplitSRB }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_511_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_512_id_UENRMeasurement }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_512_reject }, + { "&Value", aioc__type, &asn_DEF_UENRMeasurement }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_512_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_513_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_513_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_513_optional } +}; +static const asn_ioc_set_t asn_IOS_RRCTransfer_IEs_1[] = { + { 5, 4, asn_IOS_RRCTransfer_IEs_1_rows } +}; +static const long asn_VAL_514_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_514_ignore = 1; +static const long asn_VAL_514_mandatory = 2; +static const long asn_VAL_515_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_515_ignore = 1; +static const long asn_VAL_515_mandatory = 2; +static const long asn_VAL_516_id_Cause = 5; +static const long asn_VAL_516_ignore = 1; +static const long asn_VAL_516_mandatory = 2; +static const long asn_VAL_517_id_CriticalityDiagnostics = 17; +static const long asn_VAL_517_ignore = 1; +static const long asn_VAL_517_optional = 0; +static const long asn_VAL_518_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_518_reject = 0; +static const long asn_VAL_518_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBChangeRefuse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_514_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_514_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_514_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_515_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_515_ignore }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_515_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_516_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_516_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_516_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_517_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_517_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_517_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_518_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_518_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_518_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBChangeRefuse_IEs_1[] = { + { 5, 4, asn_IOS_SgNBChangeRefuse_IEs_1_rows } +}; +static const long asn_VAL_519_id_InitiatingNodeType_EndcX2Setup = 244; +static const long asn_VAL_519_reject = 0; +static const long asn_VAL_519_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCX2SetupRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_519_id_InitiatingNodeType_EndcX2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_519_reject }, + { "&Value", aioc__type, &asn_DEF_InitiatingNodeType_EndcX2Setup }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_519_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2SetupRequest_IEs_1[] = { + { 1, 4, asn_IOS_ENDCX2SetupRequest_IEs_1_rows } +}; +static const long asn_VAL_520_id_GlobalENB_ID = 21; +static const long asn_VAL_520_reject = 0; +static const long asn_VAL_520_mandatory = 2; +static const long asn_VAL_521_id_ServedEUTRAcellsENDCX2ManagementList = 250; +static const long asn_VAL_521_reject = 0; +static const long asn_VAL_521_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_ENDCX2SetupReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_520_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_520_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_520_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_521_id_ServedEUTRAcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_521_reject }, + { "&Value", aioc__type, &asn_DEF_ServedEUTRAcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_521_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_ENDCX2SetupReqIEs_1[] = { + { 2, 4, asn_IOS_ENB_ENDCX2SetupReqIEs_1_rows } +}; +static const long asn_VAL_522_id_Globalen_gNB_ID = 252; +static const long asn_VAL_522_reject = 0; +static const long asn_VAL_522_mandatory = 2; +static const long asn_VAL_523_id_ServedNRcellsENDCX2ManagementList = 253; +static const long asn_VAL_523_reject = 0; +static const long asn_VAL_523_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCX2SetupReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_522_id_Globalen_gNB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_522_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalGNB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_522_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_523_id_ServedNRcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_523_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_523_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCX2SetupReqIEs_1[] = { + { 2, 4, asn_IOS_En_gNB_ENDCX2SetupReqIEs_1_rows } +}; +static const long asn_VAL_524_id_RespondingNodeType_EndcX2Setup = 246; +static const long asn_VAL_524_reject = 0; +static const long asn_VAL_524_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCX2SetupResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_524_id_RespondingNodeType_EndcX2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_524_reject }, + { "&Value", aioc__type, &asn_DEF_RespondingNodeType_EndcX2Setup }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_524_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2SetupResponse_IEs_1[] = { + { 1, 4, asn_IOS_ENDCX2SetupResponse_IEs_1_rows } +}; +static const long asn_VAL_525_id_GlobalENB_ID = 21; +static const long asn_VAL_525_reject = 0; +static const long asn_VAL_525_mandatory = 2; +static const long asn_VAL_526_id_ServedEUTRAcellsENDCX2ManagementList = 250; +static const long asn_VAL_526_reject = 0; +static const long asn_VAL_526_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_ENDCX2SetupReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_525_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_525_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_525_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_526_id_ServedEUTRAcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_526_reject }, + { "&Value", aioc__type, &asn_DEF_ServedEUTRAcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_526_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_ENDCX2SetupReqAckIEs_1[] = { + { 2, 4, asn_IOS_ENB_ENDCX2SetupReqAckIEs_1_rows } +}; +static const long asn_VAL_527_id_Globalen_gNB_ID = 252; +static const long asn_VAL_527_reject = 0; +static const long asn_VAL_527_mandatory = 2; +static const long asn_VAL_528_id_ServedNRcellsENDCX2ManagementList = 253; +static const long asn_VAL_528_reject = 0; +static const long asn_VAL_528_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCX2SetupReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_527_id_Globalen_gNB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_527_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalGNB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_527_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_528_id_ServedNRcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_528_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_528_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCX2SetupReqAckIEs_1[] = { + { 2, 4, asn_IOS_En_gNB_ENDCX2SetupReqAckIEs_1_rows } +}; +static const long asn_VAL_529_id_Cause = 5; +static const long asn_VAL_529_ignore = 1; +static const long asn_VAL_529_mandatory = 2; +static const long asn_VAL_530_id_CriticalityDiagnostics = 17; +static const long asn_VAL_530_ignore = 1; +static const long asn_VAL_530_optional = 0; +static const long asn_VAL_531_id_TimeToWait = 22; +static const long asn_VAL_531_ignore = 1; +static const long asn_VAL_531_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENDCX2SetupFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_529_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_529_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_529_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_530_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_530_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_530_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_531_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_531_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_531_optional } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2SetupFailure_IEs_1[] = { + { 3, 4, asn_IOS_ENDCX2SetupFailure_IEs_1_rows } +}; +static const long asn_VAL_532_id_InitiatingNodeType_EndcConfigUpdate = 245; +static const long asn_VAL_532_reject = 0; +static const long asn_VAL_532_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCConfigurationUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_532_id_InitiatingNodeType_EndcConfigUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_532_reject }, + { "&Value", aioc__type, &asn_DEF_InitiatingNodeType_EndcConfigUpdate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_532_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCConfigurationUpdate_IEs_1[] = { + { 1, 4, asn_IOS_ENDCConfigurationUpdate_IEs_1_rows } +}; +static const long asn_VAL_533_id_CellAssistanceInformation = 251; +static const long asn_VAL_533_reject = 0; +static const long asn_VAL_533_optional = 0; +static const long asn_VAL_534_id_ServedEUTRAcellsENDCX2ManagementList = 250; +static const long asn_VAL_534_reject = 0; +static const long asn_VAL_534_optional = 0; +static const long asn_VAL_535_id_ServedEUTRAcellsToModifyListENDCConfUpd = 259; +static const long asn_VAL_535_reject = 0; +static const long asn_VAL_535_optional = 0; +static const long asn_VAL_536_id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260; +static const long asn_VAL_536_reject = 0; +static const long asn_VAL_536_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENB_ENDCConfigUpdateIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_533_id_CellAssistanceInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_533_reject }, + { "&Value", aioc__type, &asn_DEF_CellAssistanceInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_533_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_534_id_ServedEUTRAcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_534_reject }, + { "&Value", aioc__type, &asn_DEF_ServedEUTRAcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_534_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_535_id_ServedEUTRAcellsToModifyListENDCConfUpd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_535_reject }, + { "&Value", aioc__type, &asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_535_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_536_id_ServedEUTRAcellsToDeleteListENDCConfUpd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_536_reject }, + { "&Value", aioc__type, &asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_536_optional } +}; +static const asn_ioc_set_t asn_IOS_ENB_ENDCConfigUpdateIEs_1[] = { + { 4, 4, asn_IOS_ENB_ENDCConfigUpdateIEs_1_rows } +}; +static const long asn_VAL_537_id_ServedNRcellsENDCX2ManagementList = 253; +static const long asn_VAL_537_reject = 0; +static const long asn_VAL_537_optional = 0; +static const long asn_VAL_538_id_ServedNRcellsToModifyListENDCConfUpd = 261; +static const long asn_VAL_538_reject = 0; +static const long asn_VAL_538_optional = 0; +static const long asn_VAL_539_id_ServedNRcellsToDeleteListENDCConfUpd = 262; +static const long asn_VAL_539_reject = 0; +static const long asn_VAL_539_optional = 0; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCConfigUpdateIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_537_id_ServedNRcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_537_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_537_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_538_id_ServedNRcellsToModifyListENDCConfUpd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_538_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsToModifyENDCConfUpdList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_538_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_539_id_ServedNRcellsToDeleteListENDCConfUpd }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_539_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsToDeleteENDCConfUpdList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_539_optional } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCConfigUpdateIEs_1[] = { + { 3, 4, asn_IOS_En_gNB_ENDCConfigUpdateIEs_1_rows } +}; +static const long asn_VAL_540_id_RespondingNodeType_EndcConfigUpdate = 247; +static const long asn_VAL_540_reject = 0; +static const long asn_VAL_540_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCConfigurationUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_540_id_RespondingNodeType_EndcConfigUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_540_reject }, + { "&Value", aioc__type, &asn_DEF_RespondingNodeType_EndcConfigUpdate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_540_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCConfigurationUpdateAcknowledge_IEs_1[] = { + { 1, 4, asn_IOS_ENDCConfigurationUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_541_id_ServedNRcellsENDCX2ManagementList = 253; +static const long asn_VAL_541_reject = 0; +static const long asn_VAL_541_optional = 0; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCConfigUpdateAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_541_id_ServedNRcellsENDCX2ManagementList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_541_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRcellsENDCX2ManagementList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_541_optional } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCConfigUpdateAckIEs_1[] = { + { 1, 4, asn_IOS_En_gNB_ENDCConfigUpdateAckIEs_1_rows } +}; +static const long asn_VAL_542_id_Cause = 5; +static const long asn_VAL_542_ignore = 1; +static const long asn_VAL_542_mandatory = 2; +static const long asn_VAL_543_id_CriticalityDiagnostics = 17; +static const long asn_VAL_543_ignore = 1; +static const long asn_VAL_543_optional = 0; +static const long asn_VAL_544_id_TimeToWait = 22; +static const long asn_VAL_544_ignore = 1; +static const long asn_VAL_544_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENDCConfigurationUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_542_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_542_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_542_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_543_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_543_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_543_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_544_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_544_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_544_optional } +}; +static const asn_ioc_set_t asn_IOS_ENDCConfigurationUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_ENDCConfigurationUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_545_id_ServedNRCellsToActivate = 267; +static const long asn_VAL_545_reject = 0; +static const long asn_VAL_545_mandatory = 2; +static const long asn_VAL_546_id_ActivationID = 256; +static const long asn_VAL_546_reject = 0; +static const long asn_VAL_546_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCCellActivationRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_545_id_ServedNRCellsToActivate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_545_reject }, + { "&Value", aioc__type, &asn_DEF_ServedNRCellsToActivate }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_545_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_546_id_ActivationID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_546_reject }, + { "&Value", aioc__type, &asn_DEF_ActivationID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_546_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCCellActivationRequest_IEs_1[] = { + { 2, 4, asn_IOS_ENDCCellActivationRequest_IEs_1_rows } +}; +static const long asn_VAL_547_id_ActivatedNRCellList = 268; +static const long asn_VAL_547_ignore = 1; +static const long asn_VAL_547_mandatory = 2; +static const long asn_VAL_548_id_ActivationID = 256; +static const long asn_VAL_548_reject = 0; +static const long asn_VAL_548_mandatory = 2; +static const long asn_VAL_549_id_CriticalityDiagnostics = 17; +static const long asn_VAL_549_ignore = 1; +static const long asn_VAL_549_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENDCCellActivationResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_547_id_ActivatedNRCellList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_547_ignore }, + { "&Value", aioc__type, &asn_DEF_ActivatedNRCellList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_547_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_548_id_ActivationID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_548_reject }, + { "&Value", aioc__type, &asn_DEF_ActivationID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_548_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_549_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_549_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_549_optional } +}; +static const asn_ioc_set_t asn_IOS_ENDCCellActivationResponse_IEs_1[] = { + { 3, 4, asn_IOS_ENDCCellActivationResponse_IEs_1_rows } +}; +static const long asn_VAL_550_id_ActivationID = 256; +static const long asn_VAL_550_reject = 0; +static const long asn_VAL_550_mandatory = 2; +static const long asn_VAL_551_id_Cause = 5; +static const long asn_VAL_551_ignore = 1; +static const long asn_VAL_551_mandatory = 2; +static const long asn_VAL_552_id_CriticalityDiagnostics = 17; +static const long asn_VAL_552_ignore = 1; +static const long asn_VAL_552_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENDCCellActivationFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_550_id_ActivationID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_550_reject }, + { "&Value", aioc__type, &asn_DEF_ActivationID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_550_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_551_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_551_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_551_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_552_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_552_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_552_optional } +}; +static const asn_ioc_set_t asn_IOS_ENDCCellActivationFailure_IEs_1[] = { + { 3, 4, asn_IOS_ENDCCellActivationFailure_IEs_1_rows } +}; +static const long asn_VAL_553_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_553_reject = 0; +static const long asn_VAL_553_mandatory = 2; +static const long asn_VAL_554_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_554_reject = 0; +static const long asn_VAL_554_mandatory = 2; +static const long asn_VAL_555_id_SecondaryRATUsageReportList = 265; +static const long asn_VAL_555_reject = 0; +static const long asn_VAL_555_mandatory = 2; +static const long asn_VAL_556_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_556_reject = 0; +static const long asn_VAL_556_optional = 0; +static const asn_ioc_cell_t asn_IOS_SecondaryRATDataUsageReport_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_553_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_553_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_553_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_554_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_554_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_554_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_555_id_SecondaryRATUsageReportList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_555_reject }, + { "&Value", aioc__type, &asn_DEF_SecondaryRATUsageReportList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_555_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_556_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_556_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_556_optional } +}; +static const asn_ioc_set_t asn_IOS_SecondaryRATDataUsageReport_IEs_1[] = { + { 4, 4, asn_IOS_SecondaryRATDataUsageReport_IEs_1_rows } +}; +static const long asn_VAL_557_id_MeNB_UE_X2AP_ID = 111; +static const long asn_VAL_557_reject = 0; +static const long asn_VAL_557_mandatory = 2; +static const long asn_VAL_558_id_SgNB_UE_X2AP_ID = 207; +static const long asn_VAL_558_reject = 0; +static const long asn_VAL_558_mandatory = 2; +static const long asn_VAL_559_id_UEContextLevelUserPlaneActivity = 296; +static const long asn_VAL_559_ignore = 1; +static const long asn_VAL_559_optional = 0; +static const long asn_VAL_560_id_ERABActivityNotifyItemList = 297; +static const long asn_VAL_560_ignore = 1; +static const long asn_VAL_560_optional = 0; +static const long asn_VAL_561_id_MeNB_UE_X2AP_ID_Extension = 157; +static const long asn_VAL_561_reject = 0; +static const long asn_VAL_561_optional = 0; +static const asn_ioc_cell_t asn_IOS_SgNBActivityNotification_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_557_id_MeNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_557_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_557_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_558_id_SgNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_558_reject }, + { "&Value", aioc__type, &asn_DEF_SgNB_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_558_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_559_id_UEContextLevelUserPlaneActivity }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_559_ignore }, + { "&Value", aioc__type, &asn_DEF_UserPlaneTrafficActivityReport }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_559_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_560_id_ERABActivityNotifyItemList }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_560_ignore }, + { "&Value", aioc__type, &asn_DEF_ERABActivityNotifyItemList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_560_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_561_id_MeNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_561_reject }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_561_optional } +}; +static const asn_ioc_set_t asn_IOS_SgNBActivityNotification_IEs_1[] = { + { 5, 4, asn_IOS_SgNBActivityNotification_IEs_1_rows } +}; +static const long asn_VAL_562_id_UEs_ToBeReset = 270; +static const long asn_VAL_562_reject = 0; +static const long asn_VAL_562_mandatory = 2; +static const long asn_VAL_563_id_Cause = 5; +static const long asn_VAL_563_ignore = 1; +static const long asn_VAL_563_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCPartialResetRequired_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_562_id_UEs_ToBeReset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_562_reject }, + { "&Value", aioc__type, &asn_DEF_UEsToBeResetList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_562_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_563_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_563_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_563_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCPartialResetRequired_IEs_1[] = { + { 2, 4, asn_IOS_ENDCPartialResetRequired_IEs_1_rows } +}; +static const long asn_VAL_564_id_UEs_Admitted_ToBeReset = 271; +static const long asn_VAL_564_reject = 0; +static const long asn_VAL_564_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCPartialResetConfirm_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_564_id_UEs_Admitted_ToBeReset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_564_reject }, + { "&Value", aioc__type, &asn_DEF_UEsToBeResetList }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_564_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCPartialResetConfirm_IEs_1[] = { + { 1, 4, asn_IOS_ENDCPartialResetConfirm_IEs_1_rows } +}; +static const long asn_VAL_565_id_InitiatingNodeType_EutranrCellResourceCoordination = 285; +static const long asn_VAL_565_reject = 0; +static const long asn_VAL_565_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_EUTRANRCellResourceCoordinationRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_565_id_InitiatingNodeType_EutranrCellResourceCoordination }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_565_reject }, + { "&Value", aioc__type, &asn_DEF_InitiatingNodeType_EutranrCellResourceCoordination }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_565_mandatory } +}; +static const asn_ioc_set_t asn_IOS_EUTRANRCellResourceCoordinationRequest_IEs_1[] = { + { 1, 4, asn_IOS_EUTRANRCellResourceCoordinationRequest_IEs_1_rows } +}; +static const long asn_VAL_566_id_DataTrafficResourceIndication = 287; +static const long asn_VAL_566_reject = 0; +static const long asn_VAL_566_mandatory = 2; +static const long asn_VAL_567_id_SpectrumSharingGroupID = 288; +static const long asn_VAL_567_reject = 0; +static const long asn_VAL_567_mandatory = 2; +static const long asn_VAL_568_id_ListofEUTRACellsinEUTRACoordinationReq = 289; +static const long asn_VAL_568_reject = 0; +static const long asn_VAL_568_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_566_id_DataTrafficResourceIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_566_reject }, + { "&Value", aioc__type, &asn_DEF_DataTrafficResourceIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_566_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_567_id_SpectrumSharingGroupID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_567_reject }, + { "&Value", aioc__type, &asn_DEF_SpectrumSharingGroupID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_567_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_568_id_ListofEUTRACellsinEUTRACoordinationReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_568_reject }, + { "&Value", aioc__type, &asn_DEF_ListofEUTRACellsinEUTRACoordinationReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_568_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1[] = { + { 3, 4, asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows } +}; +static const long asn_VAL_569_id_DataTrafficResourceIndication = 287; +static const long asn_VAL_569_reject = 0; +static const long asn_VAL_569_mandatory = 2; +static const long asn_VAL_570_id_ListofEUTRACellsinNRCoordinationReq = 291; +static const long asn_VAL_570_reject = 0; +static const long asn_VAL_570_mandatory = 2; +static const long asn_VAL_571_id_SpectrumSharingGroupID = 288; +static const long asn_VAL_571_reject = 0; +static const long asn_VAL_571_mandatory = 2; +static const long asn_VAL_572_id_ListofNRCellsinNRCoordinationReq = 292; +static const long asn_VAL_572_reject = 0; +static const long asn_VAL_572_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_569_id_DataTrafficResourceIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_569_reject }, + { "&Value", aioc__type, &asn_DEF_DataTrafficResourceIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_569_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_570_id_ListofEUTRACellsinNRCoordinationReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_570_reject }, + { "&Value", aioc__type, &asn_DEF_ListofEUTRACellsinNRCoordinationReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_570_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_571_id_SpectrumSharingGroupID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_571_reject }, + { "&Value", aioc__type, &asn_DEF_SpectrumSharingGroupID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_571_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_572_id_ListofNRCellsinNRCoordinationReq }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_572_reject }, + { "&Value", aioc__type, &asn_DEF_ListofNRCellsinNRCoordinationReq }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_572_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1[] = { + { 4, 4, asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows } +}; +static const long asn_VAL_573_id_RespondingNodeType_EutranrCellResourceCoordination = 286; +static const long asn_VAL_573_reject = 0; +static const long asn_VAL_573_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_EUTRANRCellResourceCoordinationResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_573_id_RespondingNodeType_EutranrCellResourceCoordination }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_573_reject }, + { "&Value", aioc__type, &asn_DEF_RespondingNodeType_EutranrCellResourceCoordination }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_573_mandatory } +}; +static const asn_ioc_set_t asn_IOS_EUTRANRCellResourceCoordinationResponse_IEs_1[] = { + { 1, 4, asn_IOS_EUTRANRCellResourceCoordinationResponse_IEs_1_rows } +}; +static const long asn_VAL_574_id_DataTrafficResourceIndication = 287; +static const long asn_VAL_574_reject = 0; +static const long asn_VAL_574_mandatory = 2; +static const long asn_VAL_575_id_SpectrumSharingGroupID = 288; +static const long asn_VAL_575_reject = 0; +static const long asn_VAL_575_mandatory = 2; +static const long asn_VAL_576_id_ListofEUTRACellsinEUTRACoordinationResp = 290; +static const long asn_VAL_576_reject = 0; +static const long asn_VAL_576_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_574_id_DataTrafficResourceIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_574_reject }, + { "&Value", aioc__type, &asn_DEF_DataTrafficResourceIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_574_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_575_id_SpectrumSharingGroupID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_575_reject }, + { "&Value", aioc__type, &asn_DEF_SpectrumSharingGroupID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_575_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_576_id_ListofEUTRACellsinEUTRACoordinationResp }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_576_reject }, + { "&Value", aioc__type, &asn_DEF_ListofEUTRACellsinEUTRACoordinationResp }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_576_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1[] = { + { 3, 4, asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows } +}; +static const long asn_VAL_577_id_DataTrafficResourceIndication = 287; +static const long asn_VAL_577_reject = 0; +static const long asn_VAL_577_mandatory = 2; +static const long asn_VAL_578_id_SpectrumSharingGroupID = 288; +static const long asn_VAL_578_reject = 0; +static const long asn_VAL_578_mandatory = 2; +static const long asn_VAL_579_id_ListofNRCellsinNRCoordinationResp = 293; +static const long asn_VAL_579_reject = 0; +static const long asn_VAL_579_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_577_id_DataTrafficResourceIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_577_reject }, + { "&Value", aioc__type, &asn_DEF_DataTrafficResourceIndication }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_577_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_578_id_SpectrumSharingGroupID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_578_reject }, + { "&Value", aioc__type, &asn_DEF_SpectrumSharingGroupID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_578_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_579_id_ListofNRCellsinNRCoordinationResp }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_579_reject }, + { "&Value", aioc__type, &asn_DEF_ListofNRCellsinNRCoordinationResp }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_579_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1[] = { + { 3, 4, asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows } +}; +static const long asn_VAL_580_id_InitiatingNodeType_EndcX2Removal = 298; +static const long asn_VAL_580_reject = 0; +static const long asn_VAL_580_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCX2RemovalRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_580_id_InitiatingNodeType_EndcX2Removal }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_580_reject }, + { "&Value", aioc__type, &asn_DEF_InitiatingNodeType_EndcX2Removal }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_580_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2RemovalRequest_IEs_1[] = { + { 1, 4, asn_IOS_ENDCX2RemovalRequest_IEs_1_rows } +}; +static const long asn_VAL_581_id_GlobalENB_ID = 21; +static const long asn_VAL_581_reject = 0; +static const long asn_VAL_581_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_ENDCX2RemovalReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_581_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_581_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_581_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_ENDCX2RemovalReqIEs_1[] = { + { 1, 4, asn_IOS_ENB_ENDCX2RemovalReqIEs_1_rows } +}; +static const long asn_VAL_582_id_Globalen_gNB_ID = 252; +static const long asn_VAL_582_reject = 0; +static const long asn_VAL_582_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCX2RemovalReqIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_582_id_Globalen_gNB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_582_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalGNB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_582_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCX2RemovalReqIEs_1[] = { + { 1, 4, asn_IOS_En_gNB_ENDCX2RemovalReqIEs_1_rows } +}; +static const long asn_VAL_583_id_RespondingNodeType_EndcX2Removal = 299; +static const long asn_VAL_583_reject = 0; +static const long asn_VAL_583_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENDCX2RemovalResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_583_id_RespondingNodeType_EndcX2Removal }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_583_reject }, + { "&Value", aioc__type, &asn_DEF_RespondingNodeType_EndcX2Removal }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_583_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2RemovalResponse_IEs_1[] = { + { 1, 4, asn_IOS_ENDCX2RemovalResponse_IEs_1_rows } +}; +static const long asn_VAL_584_id_GlobalENB_ID = 21; +static const long asn_VAL_584_reject = 0; +static const long asn_VAL_584_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ENB_ENDCX2RemovalReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_584_id_GlobalENB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_584_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalENB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_584_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ENB_ENDCX2RemovalReqAckIEs_1[] = { + { 1, 4, asn_IOS_ENB_ENDCX2RemovalReqAckIEs_1_rows } +}; +static const long asn_VAL_585_id_Globalen_gNB_ID = 252; +static const long asn_VAL_585_reject = 0; +static const long asn_VAL_585_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_En_gNB_ENDCX2RemovalReqAckIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_585_id_Globalen_gNB_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_585_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalGNB_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_585_mandatory } +}; +static const asn_ioc_set_t asn_IOS_En_gNB_ENDCX2RemovalReqAckIEs_1[] = { + { 1, 4, asn_IOS_En_gNB_ENDCX2RemovalReqAckIEs_1_rows } +}; +static const long asn_VAL_586_id_Cause = 5; +static const long asn_VAL_586_ignore = 1; +static const long asn_VAL_586_mandatory = 2; +static const long asn_VAL_587_id_CriticalityDiagnostics = 17; +static const long asn_VAL_587_ignore = 1; +static const long asn_VAL_587_optional = 0; +static const asn_ioc_cell_t asn_IOS_ENDCX2RemovalFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_586_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_586_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_586_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_587_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_587_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_587_optional } +}; +static const asn_ioc_set_t asn_IOS_ENDCX2RemovalFailure_IEs_1[] = { + { 2, 4, asn_IOS_ENDCX2RemovalFailure_IEs_1_rows } +}; +static const long asn_VAL_588_id_New_eNB_UE_X2AP_ID_Extension = 155; +static const long asn_VAL_588_ignore = 1; +static const long asn_VAL_588_optional = 0; +static const long asn_VAL_589_id_Old_eNB_UE_X2AP_ID = 10; +static const long asn_VAL_589_ignore = 1; +static const long asn_VAL_589_mandatory = 2; +static const long asn_VAL_590_id_Old_eNB_UE_X2AP_ID_Extension = 156; +static const long asn_VAL_590_ignore = 1; +static const long asn_VAL_590_optional = 0; +static const long asn_VAL_591_id_E_RABs_DataForwardingAddress_List = 307; +static const long asn_VAL_591_ignore = 1; +static const long asn_VAL_591_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_DataForwardingAddressIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_588_id_New_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_588_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_588_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_589_id_Old_eNB_UE_X2AP_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_589_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_589_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_590_id_Old_eNB_UE_X2AP_ID_Extension }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_590_ignore }, + { "&Value", aioc__type, &asn_DEF_UE_X2AP_ID_Extension }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_590_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_591_id_E_RABs_DataForwardingAddress_List }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_591_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABs_DataForwardingAddress_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_591_mandatory } +}; +static const asn_ioc_set_t asn_IOS_DataForwardingAddressIndication_IEs_1[] = { + { 4, 4, asn_IOS_DataForwardingAddressIndication_IEs_1_rows } +}; +static const long asn_VAL_593_id_GNBOverloadInformation = 310; +static const long asn_VAL_593_ignore = 1; +static const long asn_VAL_593_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_GNBStatusIndicationIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_593_id_GNBOverloadInformation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_593_ignore }, + { "&Value", aioc__type, &asn_DEF_GNBOverloadInformation }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_593_mandatory } +}; +static const asn_ioc_set_t asn_IOS_GNBStatusIndicationIEs_1[] = { + { 1, 4, asn_IOS_GNBStatusIndicationIEs_1_rows } +}; +static const long asn_VAL_594_id_E_RAB_Item = 2; +static const long asn_VAL_594_ignore = 1; +static const long asn_VAL_594_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RAB_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_594_id_E_RAB_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_594_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RAB_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_594_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RAB_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RAB_ItemIEs_1_rows } +}; +static const long asn_VAL_595_id_E_RABUsageReport_Item = 263; +static const long asn_VAL_595_ignore = 1; +static const long asn_VAL_595_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_E_RABUsageReport_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_595_id_E_RABUsageReport_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_595_ignore }, + { "&Value", aioc__type, &asn_DEF_E_RABUsageReport_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_595_mandatory } +}; +static const asn_ioc_set_t asn_IOS_E_RABUsageReport_ItemIEs_1[] = { + { 1, 4, asn_IOS_E_RABUsageReport_ItemIEs_1_rows } +}; +static const long asn_VAL_596_id_SecondaryRATUsageReport_Item = 266; +static const long asn_VAL_596_reject = 0; +static const long asn_VAL_596_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_SecondaryRATUsageReport_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_596_id_SecondaryRATUsageReport_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_596_reject }, + { "&Value", aioc__type, &asn_DEF_SecondaryRATUsageReport_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_596_mandatory } +}; +static const asn_ioc_set_t asn_IOS_SecondaryRATUsageReport_ItemIEs_1[] = { + { 1, 4, asn_IOS_SecondaryRATUsageReport_ItemIEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToStatusTransfer_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToStatusTransfer_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToStatusTransfer_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToStatusTransfer_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellInformation_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellInformation_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellInformation_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellInformation_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellInformation_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellInformation_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellToReport_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellToReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellToReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellToReport_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellToReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellToReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MeasurementInitiationResult_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeasurementInitiationResult_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeasurementInitiationResult_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MeasurementInitiationResult_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeasurementInitiationResult_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeasurementInitiationResult_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MeasurementFailureCause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeasurementFailureCause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeasurementFailureCause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MeasurementFailureCause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MeasurementFailureCause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MeasurementFailureCause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CompleteFailureCauseInformation_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CompleteFailureCauseInformation_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CompleteFailureCauseInformation_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CompleteFailureCauseInformation_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CompleteFailureCauseInformation_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CompleteFailureCauseInformation_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellMeasurementResult_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellMeasurementResult_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellMeasurementResult_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellMeasurementResult_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellMeasurementResult_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellMeasurementResult_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ModReqItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_ModReqItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_ModReqItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_ModReqItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_ModReqItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_ModReqItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_ModReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_ModReqdItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_ModReqdItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_ModReqdItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_ModReqdItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_RelReqItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_RelReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_RelReqItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_RelReqItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_RelConfItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_RelConfItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_RelConfItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_RelConfItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToCounterCheckItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToCounterCheckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToCounterCheckItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToCounterCheckItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetupRetrieve_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetupRetrieve_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeSetupRetrieve_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeSetupRetrieve_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABs_DataForwardingAddress_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_DataForwardingAddress_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABs_DataForwardingAddress_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABs_DataForwardingAddress_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + static const int indexToPresent[] = { RICserviceUpdate_IEs__value_PR_NOTHING, + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverRequestAcknowledge_IEs, id)); + static const int indexToPresent[] = {HandoverRequestAcknowledge_IEs__value_PR_NOTHING, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + HandoverRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_List, + HandoverRequestAcknowledge_IEs__value_PR_E_RAB_List, + HandoverRequestAcknowledge_IEs__value_PR_TargeteNBtoSource_eNBTransparentContainer, + HandoverRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverPreparationFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverPreparationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverPreparationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverPreparationFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverPreparationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverPreparationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverReport_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverReport_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverReport_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverReport_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverReport_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverReport_IEs, id)); + static const int indexToPresent[] = { HandoverReport_IEs__value_PR_NOTHING, + HandoverReport_IEs__value_PR_HandoverReportType, + HandoverReport_IEs__value_PR_Cause, + HandoverReport_IEs__value_PR_ECGI, + HandoverReport_IEs__value_PR_ECGI, + HandoverReport_IEs__value_PR_ECGI, + HandoverReport_IEs__value_PR_TargetCellInUTRAN, + HandoverReport_IEs__value_PR_CRNTI, + HandoverReport_IEs__value_PR_MobilityInformation, + HandoverReport_IEs__value_PR_UE_RLF_Report_Container, + HandoverReport_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SNStatusTransfer_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SNStatusTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SNStatusTransfer_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SNStatusTransfer_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SNStatusTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SNStatusTransfer_IEs, id)); +// EB Patch. + static const int indexToPresent[] = { SNStatusTransfer_IEs__value_PR_NOTHING, + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID, + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID, + SNStatusTransfer_IEs__value_PR_E_RABs_SubjectToStatusTransfer_List, + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension, + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension, + SNStatusTransfer_IEs__value_PR_SgNB_UE_X2AP_ID + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UEContextRelease_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEContextRelease_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEContextRelease_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UEContextRelease_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_UEContextRelease_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UEContextRelease_IEs, id)); + static const int indexToPresent[] = { UEContextRelease_IEs__value_PR_NOTHING, + UEContextRelease_IEs__value_PR_UE_X2AP_ID, + UEContextRelease_IEs__value_PR_UE_X2AP_ID, + UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension, + UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension, + UEContextRelease_IEs__value_PR_SIPTOBearerDeactivationIndication, + UEContextRelease_IEs__value_PR_SgNB_UE_X2AP_ID + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_HandoverCancel_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverCancel_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverCancel_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_HandoverCancel_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_HandoverCancel_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct HandoverCancel_IEs, id)); + static const int indexToPresent[] = { HandoverCancel_IEs__value_PR_NOTHING, + HandoverCancel_IEs__value_PR_UE_X2AP_ID, + HandoverCancel_IEs__value_PR_UE_X2AP_ID, + HandoverCancel_IEs__value_PR_Cause, + HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension, + HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + static const int indexToPresent[] = {ErrorIndication_IEs__value_PR_NOTHING, + ErrorIndication_IEs__value_PR_UE_X2AP_ID, + ErrorIndication_IEs__value_PR_UE_X2AP_ID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics, + ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension, + ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension, + ErrorIndication_IEs__value_PR_SgNB_UE_X2AP_ID + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2SetupRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2SetupRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2SetupResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2SetupResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2SetupFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2SetupFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2SetupFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2SetupFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_LoadInformation_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_LoadInformation_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct LoadInformation_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_LoadInformation_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_LoadInformation_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct LoadInformation_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdate_IEs, id)); + static const int indexToPresent[] = {ENBConfigurationUpdate_IEs__value_PR_NOTHING, + ENBConfigurationUpdate_IEs__value_PR_ServedCells, + ENBConfigurationUpdate_IEs__value_PR_ServedCellsToModify, + ENBConfigurationUpdate_IEs__value_PR_Old_ECGIs, + ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList, + ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList, + ENBConfigurationUpdate_IEs__value_PR_CoverageModificationList + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENBConfigurationUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENBConfigurationUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENBConfigurationUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResourceStatusRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResourceStatusRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusRequest_IEs, id)); + static const int indexToPresent[] = { ResourceStatusRequest_IEs__value_PR_NOTHING, + ResourceStatusRequest_IEs__value_PR_Measurement_ID, + ResourceStatusRequest_IEs__value_PR_Measurement_ID, + ResourceStatusRequest_IEs__value_PR_Registration_Request, + ResourceStatusRequest_IEs__value_PR_ReportCharacteristics, + ResourceStatusRequest_IEs__value_PR_CellToReport_List, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicity, + ResourceStatusRequest_IEs__value_PR_PartialSuccessIndicator, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityRSRPMR, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityCSIR + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResourceStatusResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResourceStatusResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusResponse_IEs, id)); + static const int indexToPresent[] = {ResourceStatusResponse_IEs__value_PR_NOTHING, + ResourceStatusResponse_IEs__value_PR_Measurement_ID, + ResourceStatusResponse_IEs__value_PR_Measurement_ID, + ResourceStatusResponse_IEs__value_PR_CriticalityDiagnostics, + ResourceStatusResponse_IEs__value_PR_MeasurementInitiationResult_List + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResourceStatusFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResourceStatusFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusFailure_IEs, id)); + + static const int indexToPresent[] = {ResourceStatusFailure_IEs__value_PR_NOTHING, + ResourceStatusFailure_IEs__value_PR_Measurement_ID, + ResourceStatusFailure_IEs__value_PR_Measurement_ID, + ResourceStatusFailure_IEs__value_PR_Cause, + ResourceStatusFailure_IEs__value_PR_CriticalityDiagnostics, + ResourceStatusFailure_IEs__value_PR_CompleteFailureCauseInformation_List + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResourceStatusUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResourceStatusUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResourceStatusUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResourceStatusUpdate_IEs, id)); + static const int indexToPresent[] = {ResourceStatusUpdate_IEs__value_PR_NOTHING, + ResourceStatusUpdate_IEs__value_PR_Measurement_ID, + ResourceStatusUpdate_IEs__value_PR_Measurement_ID, + ResourceStatusUpdate_IEs__value_PR_CellMeasurementResult_List + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MobilityChangeRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MobilityChangeRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeRequest_IEs, id)); + static const int indexToPresent[] = {MobilityChangeRequest_IEs__value_PR_NOTHING, + MobilityChangeRequest_IEs__value_PR_ECGI, + MobilityChangeRequest_IEs__value_PR_ECGI, + MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation, + MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation, + MobilityChangeRequest_IEs__value_PR_Cause + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MobilityChangeAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MobilityChangeAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeAcknowledge_IEs, id)); + static const int indexToPresent[] = {MobilityChangeAcknowledge_IEs__value_PR_NOTHING, + MobilityChangeAcknowledge_IEs__value_PR_ECGI, + MobilityChangeAcknowledge_IEs__value_PR_ECGI, + MobilityChangeAcknowledge_IEs__value_PR_CriticalityDiagnostics + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_MobilityChangeFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_MobilityChangeFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_MobilityChangeFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct MobilityChangeFailure_IEs, id)); + static const int indexToPresent[] = {MobilityChangeFailure_IEs__value_PR_NOTHING, + MobilityChangeFailure_IEs__value_PR_ECGI, + MobilityChangeFailure_IEs__value_PR_ECGI, + MobilityChangeFailure_IEs__value_PR_Cause, + MobilityChangeFailure_IEs__value_PR_MobilityParametersModificationRange, + MobilityChangeFailure_IEs__value_PR_CriticalityDiagnostics + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + + break; + } + } + + return result; +} + +static int +memb_value_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RLFIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RLFIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RLFIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RLFIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RLFIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RLFIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellActivationRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellActivationRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellActivationResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellActivationResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_CellActivationFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_CellActivationFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_CellActivationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct CellActivationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2Release_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2Release_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2Release_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2Release_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2Release_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2Release_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2APMessageTransfer_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2APMessageTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2APMessageTransfer_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2APMessageTransfer_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2APMessageTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2APMessageTransfer_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBAdditionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBAdditionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequest_IEs, id)); + static const int indexToPresent[] = {SeNBAdditionRequest_IEs__value_PR_NOTHING, + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequest_IEs__value_PR_UESecurityCapabilities, + SeNBAdditionRequest_IEs__value_PR_SeNBSecurityKey, + SeNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate, + SeNBAdditionRequest_IEs__value_PR_PLMN_Identity, + SeNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_List, + SeNBAdditionRequest_IEs__value_PR_MeNBtoSeNBContainer, + SeNBAdditionRequest_IEs__value_PR_CSGMembershipStatus, + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour, + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBAdditionRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBAdditionRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequestAcknowledge_IEs, id)); + static const int indexToPresent[] = {SeNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING, + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_List, + SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List, + SeNBAdditionRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer, + SeNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress, + SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress, + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequestAcknowledge_IEs__value_PR_TunnelInformation + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + + break; + } + } + + return result; +} + +static int +memb_value_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBAdditionRequestReject_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBAdditionRequestReject_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBAdditionRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBAdditionRequestReject_IEs, id)); + static const int indexToPresent[] = {SeNBAdditionRequestReject_IEs__value_PR_NOTHING, + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestReject_IEs__value_PR_Cause, + SeNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics, + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBReconfigurationComplete_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReconfigurationComplete_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReconfigurationComplete_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBReconfigurationComplete_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReconfigurationComplete_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReconfigurationComplete_IEs, id)); + static const int indexToPresent[] = {SeNBReconfigurationComplete_IEs__value_PR_NOTHING, + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID, + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID, + SeNBReconfigurationComplete_IEs__value_PR_ResponseInformationSeNBReconfComp, + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequest_IEs, id)); + static const int indexToPresent[] = {SeNBModificationRequest_IEs__value_PR_NOTHING, + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequest_IEs__value_PR_Cause, + SeNBModificationRequest_IEs__value_PR_SCGChangeIndication, + SeNBModificationRequest_IEs__value_PR_PLMN_Identity, + SeNBModificationRequest_IEs__value_PR_UE_ContextInformationSeNBModReq, + SeNBModificationRequest_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationRequest_IEs__value_PR_CSGMembershipStatus, + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequestAcknowledge_IEs, id)); + static const int indexToPresent[] = {SeNBModificationRequestAcknowledge_IEs__value_PR_NOTHING, + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List, + SeNBModificationRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer, + SeNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationRequestReject_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationRequestReject_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequestReject_IEs, id)); + static const int indexToPresent[] = {SeNBModificationRequestReject_IEs__value_PR_NOTHING, + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestReject_IEs__value_PR_Cause, + SeNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRequired_IEs, id)); + static const int indexToPresent[] = {SeNBModificationRequired_IEs__value_PR_NOTHING, + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequired_IEs__value_PR_Cause, + SeNBModificationRequired_IEs__value_PR_SCGChangeIndication, + SeNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_ModReqd, + SeNBModificationRequired_IEs__value_PR_SeNBtoMeNBContainer, + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationConfirm_IEs, id)); + static const int indexToPresent[] = {SeNBModificationConfirm_IEs__value_PR_NOTHING, + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBModificationConfirm_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBModificationRefuse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRefuse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBModificationRefuse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBModificationRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBModificationRefuse_IEs, id)); + static const int indexToPresent[] = {SeNBModificationRefuse_IEs__value_PR_NOTHING, + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRefuse_IEs__value_PR_Cause, + SeNBModificationRefuse_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBReleaseRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBReleaseRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseRequest_IEs, id)); + static const int indexToPresent[] = {SeNBReleaseRequest_IEs__value_PR_NOTHING, + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequest_IEs__value_PR_Cause, + SeNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_List_RelReq, + SeNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator, + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReleaseRequest_IEs__value_PR_MakeBeforeBreakIndicator + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBReleaseRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBReleaseRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseRequired_IEs, id)); + static const int indexToPresent[] = {SeNBReleaseRequired_IEs__value_PR_NOTHING, + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequired_IEs__value_PR_Cause, + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBReleaseConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBReleaseConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBReleaseConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBReleaseConfirm_IEs, id)); + static const int indexToPresent[] = {SeNBReleaseConfirm_IEs__value_PR_NOTHING, + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_List_RelConf, + SeNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics, + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension + }; + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SeNBCounterCheckRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBCounterCheckRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBCounterCheckRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SeNBCounterCheckRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SeNBCounterCheckRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SeNBCounterCheckRequest_IEs, id)); + static const int indexToPresent[] = {SeNBCounterCheckRequest_IEs__value_PR_NOTHING, + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID, + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID, + SeNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToCounterCheck_List, + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2RemovalRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2RemovalRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2RemovalResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2RemovalResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_X2RemovalFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_X2RemovalFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_X2RemovalFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2RemovalFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RetrieveUEContextRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RetrieveUEContextRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RetrieveUEContextResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RetrieveUEContextResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextResponse_IEs, id)); + static const int indexToPresent[] = {RetrieveUEContextResponse_IEs__value_PR_NOTHING, + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID, + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension, + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID, + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension, + RetrieveUEContextResponse_IEs__value_PR_GUMMEI, + RetrieveUEContextResponse_IEs__value_PR_UE_ContextInformationRetrieve, + RetrieveUEContextResponse_IEs__value_PR_TraceActivation, + RetrieveUEContextResponse_IEs__value_PR_SRVCCOperationPossible, + RetrieveUEContextResponse_IEs__value_PR_Masked_IMEISV, + RetrieveUEContextResponse_IEs__value_PR_ExpectedUEBehaviour, + RetrieveUEContextResponse_IEs__value_PR_ProSeAuthorized, + RetrieveUEContextResponse_IEs__value_PR_CriticalityDiagnostics, + RetrieveUEContextResponse_IEs__value_PR_V2XServicesAuthorized, + RetrieveUEContextResponse_IEs__value_PR_AerialUEsubscriptionInformation, + RetrieveUEContextResponse_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RetrieveUEContextFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RetrieveUEContextFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RetrieveUEContextFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RetrieveUEContextFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBAdditionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBAdditionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBAdditionRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBAdditionRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBAdditionRequestReject_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBAdditionRequestReject_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBAdditionRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBAdditionRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReconfigurationComplete_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReconfigurationComplete_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReconfigurationComplete_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReconfigurationComplete_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReconfigurationComplete_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReconfigurationComplete_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequest_IEs, id)); + static const int indexToPresent[] = {SgNBModificationRequest_IEs__value_PR_NOTHING, + SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequest_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequest_IEs__value_PR_Cause, + SgNBModificationRequest_IEs__value_PR_PLMN_Identity, + SgNBModificationRequest_IEs__value_PR_HandoverRestrictionList, + SgNBModificationRequest_IEs__value_PR_SCGConfigurationQuery, + SgNBModificationRequest_IEs__value_PR_UE_ContextInformation_SgNBModReq, + SgNBModificationRequest_IEs__value_PR_MeNBtoSgNBContainer, + SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationRequest_IEs__value_PR_MeNBResourceCoordinationInformation, + SgNBModificationRequest_IEs__value_PR_SplitSRBs, + SgNBModificationRequest_IEs__value_PR_SplitSRBs + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequestAcknowledge_IEs, id)); + static const int indexToPresent[] = {SgNBModificationRequestAcknowledge_IEs__value_PR_NOTHING, + SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer, + SgNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation, + SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs, + SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs, + SgNBModificationRequestAcknowledge_IEs__value_PR_RRC_Config_Ind + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationRequestReject_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationRequestReject_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBModificationRefuse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRefuse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBModificationRefuse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBModificationRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBModificationRefuse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReleaseRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReleaseRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReleaseRequestAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReleaseRequestAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequestAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequestAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReleaseRequestReject_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReleaseRequestReject_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequestReject_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequestReject_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReleaseRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReleaseRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBReleaseConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBReleaseConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBReleaseConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBReleaseConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBCounterCheckRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBCounterCheckRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBCounterCheckRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBCounterCheckRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBCounterCheckRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBCounterCheckRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBChangeRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBChangeRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBChangeConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBChangeConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RRCTransfer_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RRCTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RRCTransfer_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RRCTransfer_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RRCTransfer_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RRCTransfer_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBChangeRefuse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeRefuse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBChangeRefuse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBChangeRefuse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBChangeRefuse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2SetupRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2SetupRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_ENDCX2SetupReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2SetupReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2SetupReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_ENDCX2SetupReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2SetupReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2SetupReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2SetupReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2SetupReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2SetupReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2SetupReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2SetupReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2SetupReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2SetupResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2SetupResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_ENDCX2SetupReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2SetupReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2SetupReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_ENDCX2SetupReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2SetupReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2SetupReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2SetupReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2SetupReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2SetupReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2SetupReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2SetupFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2SetupFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2SetupFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2SetupFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_ENDCConfigUpdateIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCConfigUpdateIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCConfigUpdateIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_ENDCConfigUpdateIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCConfigUpdateIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCConfigUpdateIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCConfigUpdateIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCConfigUpdateIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCConfigUpdateIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCConfigUpdateIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCConfigUpdateIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCConfigUpdateIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_criticality_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_value_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCConfigUpdateAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCConfigUpdateAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCConfigUpdateAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCConfigUpdateAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCConfigurationUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCConfigurationUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCConfigurationUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCCellActivationRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCCellActivationRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCCellActivationResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCCellActivationResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCCellActivationFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCCellActivationFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCCellActivationFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCCellActivationFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SecondaryRATDataUsageReport_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SecondaryRATDataUsageReport_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SecondaryRATDataUsageReport_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SecondaryRATDataUsageReport_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SecondaryRATDataUsageReport_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SecondaryRATDataUsageReport_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SgNBActivityNotification_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBActivityNotification_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBActivityNotification_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SgNBActivityNotification_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SgNBActivityNotification_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SgNBActivityNotification_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCPartialResetRequired_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCPartialResetRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCPartialResetRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCPartialResetRequired_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCPartialResetRequired_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCPartialResetRequired_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCPartialResetConfirm_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCPartialResetConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCPartialResetConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCPartialResetConfirm_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCPartialResetConfirm_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCPartialResetConfirm_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_EUTRANRCellResourceCoordinationRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_EUTRANRCellResourceCoordinationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_EUTRANRCellResourceCoordinationRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_EUTRANRCellResourceCoordinationRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_EUTRANRCellResourceCoordinationResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_EUTRANRCellResourceCoordinationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_EUTRANRCellResourceCoordinationResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_EUTRANRCellResourceCoordinationResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2RemovalRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2RemovalRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_ENDCX2RemovalReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2RemovalReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2RemovalReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_ENDCX2RemovalReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2RemovalReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2RemovalReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2RemovalReqIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2RemovalReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2RemovalReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2RemovalReqIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2RemovalReqIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2RemovalReqIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2RemovalResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2RemovalResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENB_ENDCX2RemovalReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2RemovalReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2RemovalReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENB_ENDCX2RemovalReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENB_ENDCX2RemovalReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENB_ENDCX2RemovalReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2RemovalReqAckIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2RemovalReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_En_gNB_ENDCX2RemovalReqAckIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_En_gNB_ENDCX2RemovalReqAckIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ENDCX2RemovalFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ENDCX2RemovalFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ENDCX2RemovalFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ENDCX2RemovalFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_DataForwardingAddressIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_DataForwardingAddressIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct DataForwardingAddressIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_DataForwardingAddressIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_DataForwardingAddressIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct DataForwardingAddressIndication_IEs, id)); + static const int indexToPresent[] = {DataForwardingAddressIndication_IEs__value_PR_NOTHING, + DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension, + DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID, + DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension, + DataForwardingAddressIndication_IEs__value_PR_E_RABs_DataForwardingAddress_List + }; + + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = indexToPresent[presence_index]; + break; + } + } + + return result; +} + +static int +memb_value_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_GNBStatusIndicationIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_GNBStatusIndicationIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct GNBStatusIndicationIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_GNBStatusIndicationIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_GNBStatusIndicationIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct GNBStatusIndicationIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RAB_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RAB_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RAB_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RAB_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RAB_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RAB_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E_RABUsageReport_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABUsageReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABUsageReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E_RABUsageReport_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E_RABUsageReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E_RABUsageReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SecondaryRATUsageReport_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SecondaryRATUsageReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SecondaryRATUsageReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SecondaryRATUsageReport_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_SecondaryRATUsageReport_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SecondaryRATUsageReport_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_106 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_107 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_108 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_110 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_111 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_112 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_114 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_115 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_116 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_118 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_119 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_120 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_122 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_123 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_124 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_126 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_127 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_128 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_130 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_131 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_132 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_134 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_135 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_136 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_138 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_139 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_140 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_142 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_143 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_144 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_146 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_147 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_148 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_150 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_151 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_152 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_154 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_155 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_156 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_158 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_159 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_160 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_162 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_163 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_164 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_166 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_167 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_168 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_170 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_171 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_172 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_174 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_175 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_176 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_178 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_179 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_180 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_182 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_183 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_184 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_186 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_187 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_188 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_190 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_191 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_192 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_194 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_195 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_196 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_198 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_199 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_200 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_202 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_203 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_204 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_206 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_207 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_208 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_210 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_211 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_212 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_214 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_215 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_216 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_218 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_219 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_220 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_222 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_223 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_224 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_226 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_227 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_228 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_230 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_231 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_232 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_234 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_235 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_236 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_238 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_239 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_240 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_242 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_243 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_244 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_246 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_247 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_248 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_250 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_251 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_252 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_254 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_255 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_256 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_258 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_259 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_260 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_262 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_263 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_264 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_266 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_267 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_268 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_270 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_271 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_272 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_274 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_275 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_276 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_278 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_279 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_280 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_282 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_283 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_284 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_286 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_287 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_288 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_290 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_291 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_292 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_294 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_295 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_296 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_298 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_299 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_300 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_302 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_303 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_304 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_306 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_307 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_308 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_310 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_311 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_312 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_314 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_315 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_316 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_318 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_319 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_320 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_322 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_323 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_324 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_326 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_327 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_328 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_330 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_331 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_332 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_334 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_335 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_336 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_338 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_339 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_340 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_342 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_343 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_344 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_346 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_347 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_348 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_350 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_351 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_352 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_354 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_355 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_356 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_358 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_359 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_360 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_362 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_363 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_364 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_366 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_367 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_368 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_370 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_371 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_372 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_374 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_375 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_376 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_378 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_379 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_380 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_382 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_383 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_384 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_386 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_387 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_388 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_390 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_391 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_392 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_394 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_395 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_396 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_398 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_399 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_400 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_402 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_403 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_404 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_406 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_407 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_408 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_410 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_411 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_412 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_414 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_415 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_416 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_418 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_419 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_420 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_422 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_423 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_424 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_426 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_427 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_428 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_430 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_431 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_432 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_434 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_435 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_436 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_438 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_439 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_440 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_442 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_443 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_444 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_446 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_447 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_448 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_450 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_451 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_452 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_454 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_455 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_456 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_458 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_459 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_460 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_462 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_463 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_464 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_466 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_467 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_468 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_470 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_471 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_472 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_474 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_475 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_476 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_478 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_479 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_480 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_482 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_483 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_484 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_486 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_487 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_488 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_490 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_491 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_492 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_494 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_495 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_496 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_498 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_499 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_500 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_502 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_503 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_504 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_506 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_507 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_508 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_510 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_511 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_512 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_514 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_515 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_516 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_518 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_519 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_520 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_522 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_523 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_524 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_526 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_527 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_528 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_530 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_531 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_532 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_534 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_535 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_536 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_538 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_539 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_540 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_542 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_543 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_544 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_546 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_547 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_548 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_550 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_551 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_552 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_554 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_555 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_556 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_558 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_559 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_560 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_562 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_563 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_564 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_566 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_567 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_568 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_570 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_571 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_572 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_574 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_575 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_576 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_578 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_579 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_580 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_582 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_583 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_584 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_586 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_587 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_588 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_590 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_591 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_592 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_594 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_595 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_596 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_598 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_599 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_600 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_602 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_603 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_604 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_606 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_607 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_608 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_610 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_611 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_612 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_614 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_615 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_616 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_618 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_619 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_620 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_622 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_623 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_624 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_626 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_627 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_628 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_630 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_631 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_632 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_634 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_635 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_636 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_638 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_639 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_640 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_642 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_643 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_644 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_646 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_647 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_648 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_650 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_651 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_652 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_654 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_655 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_656 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_658 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_659 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_660 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_662 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_663 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_664 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_666 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_667 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_668 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_670 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_671 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_672 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_674 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_675 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_676 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemIEs__value, choice.E_RABs_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct E_RABs_ToBeSetup_ItemIEs__value), + offsetof(struct E_RABs_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeSetup_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 1, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ItemIEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_E_RABs_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetup_ItemIEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetup_ItemIEs_specs_25 = { + sizeof(struct E_RABs_ToBeSetup_ItemIEs), + offsetof(struct E_RABs_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeSetup_ItemIEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ItemIEs = { + "E-RABs-ToBeSetup-ItemIEs", + "E-RABs-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25, + sizeof(asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25) + /sizeof(asn_DEF_E_RABs_ToBeSetup_ItemIEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetup_ItemIEs_25, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetup_ItemIEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ItemIEs__value, choice.E_RABs_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct E_RABs_Admitted_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 1, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ItemIEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_E_RABs_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ItemIEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ItemIEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ItemIEs_specs_29 = { + sizeof(struct E_RABs_Admitted_ItemIEs), + offsetof(struct E_RABs_Admitted_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ItemIEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ItemIEs = { + "E-RABs-Admitted-ItemIEs", + "E-RABs-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ItemIEs_tags_29, + sizeof(asn_DEF_E_RABs_Admitted_ItemIEs_tags_29) + /sizeof(asn_DEF_E_RABs_Admitted_ItemIEs_tags_29[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ItemIEs_tags_29, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ItemIEs_tags_29) + /sizeof(asn_DEF_E_RABs_Admitted_ItemIEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ItemIEs_29, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ItemIEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs__value, choice.E_RABs_SubjectToStatusTransfer_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToStatusTransfer_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToStatusTransfer-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToStatusTransfer-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_ItemIEs__value), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs__value, present), + sizeof(((struct E_RABs_SubjectToStatusTransfer_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 1, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_ItemIEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_SubjectToStatusTransfer_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_E_RABs_SubjectToStatusTransfer_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToStatusTransfer_ItemIEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_33 = { + sizeof(struct E_RABs_SubjectToStatusTransfer_ItemIEs), + offsetof(struct E_RABs_SubjectToStatusTransfer_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToStatusTransfer_ItemIEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs = { + "E-RABs-SubjectToStatusTransfer-ItemIEs", + "E-RABs-SubjectToStatusTransfer-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33, + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33) + /sizeof(asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToStatusTransfer_ItemIEs_33, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_ItemIEs__value, choice.CellInformation_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInformation_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellInformation-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellInformation-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct CellInformation_ItemIEs__value), + offsetof(struct CellInformation_ItemIEs__value, _asn_ctx), + offsetof(struct CellInformation_ItemIEs__value, present), + sizeof(((struct CellInformation_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 1, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellInformation_ItemIEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInformation_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellInformation_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellInformation_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_CellInformation_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellInformation_ItemIEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellInformation_ItemIEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellInformation_ItemIEs_specs_37 = { + sizeof(struct CellInformation_ItemIEs), + offsetof(struct CellInformation_ItemIEs, _asn_ctx), + asn_MAP_CellInformation_ItemIEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInformation_ItemIEs = { + "CellInformation-ItemIEs", + "CellInformation-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellInformation_ItemIEs_tags_37, + sizeof(asn_DEF_CellInformation_ItemIEs_tags_37) + /sizeof(asn_DEF_CellInformation_ItemIEs_tags_37[0]), /* 1 */ + asn_DEF_CellInformation_ItemIEs_tags_37, /* Same as above */ + sizeof(asn_DEF_CellInformation_ItemIEs_tags_37) + /sizeof(asn_DEF_CellInformation_ItemIEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellInformation_ItemIEs_37, + 3, /* Elements count */ + &asn_SPC_CellInformation_ItemIEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_ItemIEs__value, choice.CellToReport_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellToReport_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellToReport-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellToReport-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct CellToReport_ItemIEs__value), + offsetof(struct CellToReport_ItemIEs__value, _asn_ctx), + offsetof(struct CellToReport_ItemIEs__value, present), + sizeof(((struct CellToReport_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 1, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellToReport_ItemIEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellToReport_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellToReport_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellToReport_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_CellToReport_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellToReport_ItemIEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellToReport_ItemIEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellToReport_ItemIEs_specs_41 = { + sizeof(struct CellToReport_ItemIEs), + offsetof(struct CellToReport_ItemIEs, _asn_ctx), + asn_MAP_CellToReport_ItemIEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellToReport_ItemIEs = { + "CellToReport-ItemIEs", + "CellToReport-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellToReport_ItemIEs_tags_41, + sizeof(asn_DEF_CellToReport_ItemIEs_tags_41) + /sizeof(asn_DEF_CellToReport_ItemIEs_tags_41[0]), /* 1 */ + asn_DEF_CellToReport_ItemIEs_tags_41, /* Same as above */ + sizeof(asn_DEF_CellToReport_ItemIEs_tags_41) + /sizeof(asn_DEF_CellToReport_ItemIEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellToReport_ItemIEs_41, + 3, /* Elements count */ + &asn_SPC_CellToReport_ItemIEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_ItemIEs__value, choice.MeasurementInitiationResult_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementInitiationResult_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeasurementInitiationResult-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* MeasurementInitiationResult-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct MeasurementInitiationResult_ItemIEs__value), + offsetof(struct MeasurementInitiationResult_ItemIEs__value, _asn_ctx), + offsetof(struct MeasurementInitiationResult_ItemIEs__value, present), + sizeof(((struct MeasurementInitiationResult_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 1, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_ItemIEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_MeasurementInitiationResult_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MeasurementInitiationResult_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_MeasurementInitiationResult_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementInitiationResult_ItemIEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementInitiationResult_ItemIEs_specs_45 = { + sizeof(struct MeasurementInitiationResult_ItemIEs), + offsetof(struct MeasurementInitiationResult_ItemIEs, _asn_ctx), + asn_MAP_MeasurementInitiationResult_ItemIEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_ItemIEs = { + "MeasurementInitiationResult-ItemIEs", + "MeasurementInitiationResult-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45, + sizeof(asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45) + /sizeof(asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45[0]), /* 1 */ + asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45, /* Same as above */ + sizeof(asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45) + /sizeof(asn_DEF_MeasurementInitiationResult_ItemIEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInitiationResult_ItemIEs_45, + 3, /* Elements count */ + &asn_SPC_MeasurementInitiationResult_ItemIEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_ItemIEs__value, choice.MeasurementFailureCause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementFailureCause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeasurementFailureCause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* MeasurementFailureCause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct MeasurementFailureCause_ItemIEs__value), + offsetof(struct MeasurementFailureCause_ItemIEs__value, _asn_ctx), + offsetof(struct MeasurementFailureCause_ItemIEs__value, present), + sizeof(((struct MeasurementFailureCause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 1, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementFailureCause_ItemIEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_MeasurementFailureCause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MeasurementFailureCause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_MeasurementFailureCause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementFailureCause_ItemIEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementFailureCause_ItemIEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementFailureCause_ItemIEs_specs_49 = { + sizeof(struct MeasurementFailureCause_ItemIEs), + offsetof(struct MeasurementFailureCause_ItemIEs, _asn_ctx), + asn_MAP_MeasurementFailureCause_ItemIEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_ItemIEs = { + "MeasurementFailureCause-ItemIEs", + "MeasurementFailureCause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementFailureCause_ItemIEs_tags_49, + sizeof(asn_DEF_MeasurementFailureCause_ItemIEs_tags_49) + /sizeof(asn_DEF_MeasurementFailureCause_ItemIEs_tags_49[0]), /* 1 */ + asn_DEF_MeasurementFailureCause_ItemIEs_tags_49, /* Same as above */ + sizeof(asn_DEF_MeasurementFailureCause_ItemIEs_tags_49) + /sizeof(asn_DEF_MeasurementFailureCause_ItemIEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementFailureCause_ItemIEs_49, + 3, /* Elements count */ + &asn_SPC_MeasurementFailureCause_ItemIEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_ItemIEs__value, choice.CompleteFailureCauseInformation_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompleteFailureCauseInformation_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CompleteFailureCauseInformation-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CompleteFailureCauseInformation-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct CompleteFailureCauseInformation_ItemIEs__value), + offsetof(struct CompleteFailureCauseInformation_ItemIEs__value, _asn_ctx), + offsetof(struct CompleteFailureCauseInformation_ItemIEs__value, present), + sizeof(((struct CompleteFailureCauseInformation_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 1, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_ItemIEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CompleteFailureCauseInformation_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CompleteFailureCauseInformation_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_CompleteFailureCauseInformation_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CompleteFailureCauseInformation_ItemIEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_53 = { + sizeof(struct CompleteFailureCauseInformation_ItemIEs), + offsetof(struct CompleteFailureCauseInformation_ItemIEs, _asn_ctx), + asn_MAP_CompleteFailureCauseInformation_ItemIEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_ItemIEs = { + "CompleteFailureCauseInformation-ItemIEs", + "CompleteFailureCauseInformation-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53, + sizeof(asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53) + /sizeof(asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53[0]), /* 1 */ + asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53, /* Same as above */ + sizeof(asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53) + /sizeof(asn_DEF_CompleteFailureCauseInformation_ItemIEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompleteFailureCauseInformation_ItemIEs_53, + 3, /* Elements count */ + &asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_ItemIEs__value, choice.CellMeasurementResult_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellMeasurementResult_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellMeasurementResult-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellMeasurementResult-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct CellMeasurementResult_ItemIEs__value), + offsetof(struct CellMeasurementResult_ItemIEs__value, _asn_ctx), + offsetof(struct CellMeasurementResult_ItemIEs__value, present), + sizeof(((struct CellMeasurementResult_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 1, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellMeasurementResult_ItemIEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellMeasurementResult_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellMeasurementResult_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_CellMeasurementResult_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellMeasurementResult_ItemIEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellMeasurementResult_ItemIEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellMeasurementResult_ItemIEs_specs_57 = { + sizeof(struct CellMeasurementResult_ItemIEs), + offsetof(struct CellMeasurementResult_ItemIEs, _asn_ctx), + asn_MAP_CellMeasurementResult_ItemIEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_ItemIEs = { + "CellMeasurementResult-ItemIEs", + "CellMeasurementResult-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_CellMeasurementResult_ItemIEs_tags_57, + sizeof(asn_DEF_CellMeasurementResult_ItemIEs_tags_57) + /sizeof(asn_DEF_CellMeasurementResult_ItemIEs_tags_57[0]), /* 1 */ + asn_DEF_CellMeasurementResult_ItemIEs_tags_57, /* Same as above */ + sizeof(asn_DEF_CellMeasurementResult_ItemIEs_tags_57) + /sizeof(asn_DEF_CellMeasurementResult_ItemIEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellMeasurementResult_ItemIEs_57, + 3, /* Elements count */ + &asn_SPC_CellMeasurementResult_ItemIEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ItemIEs__value, choice.E_RABs_ToBeAdded_Item), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeAdded_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct E_RABs_ToBeAdded_ItemIEs__value), + offsetof(struct E_RABs_ToBeAdded_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeAdded_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 1, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ItemIEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_E_RABs_ToBeAdded_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ItemIEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ItemIEs_specs_61 = { + sizeof(struct E_RABs_ToBeAdded_ItemIEs), + offsetof(struct E_RABs_ToBeAdded_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ItemIEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ItemIEs = { + "E-RABs-ToBeAdded-ItemIEs", + "E-RABs-ToBeAdded-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61, + sizeof(asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ItemIEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ItemIEs_61, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ItemIEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_Item), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 1, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ItemIEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_E_RABs_Admitted_ToBeAdded_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ItemIEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_65 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ItemIEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs = { + "E-RABs-Admitted-ToBeAdded-ItemIEs", + "E-RABs-Admitted-ToBeAdded-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ItemIEs_65, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs__value, choice.E_RABs_ToBeAdded_ModReqItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeAdded_ModReqItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-ModReqItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItemIEs__value), + offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs__value, present), + sizeof(((struct E_RABs_ToBeAdded_ModReqItemIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 1, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItemIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_ModReqItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E_RABs_ToBeAdded_ModReqItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_ModReqItemIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItemIEs_specs_69 = { + sizeof(struct E_RABs_ToBeAdded_ModReqItemIEs), + offsetof(struct E_RABs_ToBeAdded_ModReqItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_ModReqItemIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs = { + "E-RABs-ToBeAdded-ModReqItemIEs", + "E-RABs-ToBeAdded-ModReqItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69, + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69) + /sizeof(asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItemIEs_69, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItemIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItemIEs__value, choice.E_RABs_ToBeModified_ModReqItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeModified_ModReqItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeModified-ModReqItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E_RABs_ToBeModified_ModReqItemIEs__value), + offsetof(struct E_RABs_ToBeModified_ModReqItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_ModReqItemIEs__value, present), + sizeof(((struct E_RABs_ToBeModified_ModReqItemIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 1, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItemIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_ModReqItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E_RABs_ToBeModified_ModReqItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_ModReqItemIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItemIEs_specs_73 = { + sizeof(struct E_RABs_ToBeModified_ModReqItemIEs), + offsetof(struct E_RABs_ToBeModified_ModReqItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_ModReqItemIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItemIEs = { + "E-RABs-ToBeModified-ModReqItemIEs", + "E-RABs-ToBeModified-ModReqItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73, + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73) + /sizeof(asn_DEF_E_RABs_ToBeModified_ModReqItemIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItemIEs_73, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItemIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs__value, choice.E_RABs_ToBeReleased_ModReqItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-ModReqItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqItemIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 1, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItemIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_ModReqItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E_RABs_ToBeReleased_ModReqItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqItemIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItemIEs_specs_77 = { + sizeof(struct E_RABs_ToBeReleased_ModReqItemIEs), + offsetof(struct E_RABs_ToBeReleased_ModReqItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqItemIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs = { + "E-RABs-ToBeReleased-ModReqItemIEs", + "E-RABs-ToBeReleased-ModReqItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItemIEs_77, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItemIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_ModAckItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-ModAckItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_81 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs = { + "E-RABs-Admitted-ToBeAdded-ModAckItemIEs", + "E-RABs-Admitted-ToBeAdded-ModAckItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_81, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, choice.E_RABs_Admitted_ToBeModified_ModAckItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeModified-ModAckItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItemIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_85 = { + sizeof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_ModAckItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs = { + "E-RABs-Admitted-ToBeModified-ModAckItemIEs", + "E-RABs-Admitted-ToBeModified-ModAckItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItemIEs_85, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, choice.E_RABs_Admitted_ToReleased_ModAckItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_Admitted_ToReleased_ModAckItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToReleased-ModAckItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 1, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_89 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs = { + "E-RABs-Admitted-ToBeReleased-ModAckItemIEs", + "E-RABs-Admitted-ToBeReleased-ModAckItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_89, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs__value, choice.E_RABs_ToBeReleased_ModReqdItem), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqdItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-ModReqdItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-ModReqdItem */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct E_RABs_ToBeReleased_ModReqdItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_ModReqdItemIEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 1, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqdItemIEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_ModReqdItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_E_RABs_ToBeReleased_ModReqdItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_ModReqdItemIEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqdItemIEs_specs_93 = { + sizeof(struct E_RABs_ToBeReleased_ModReqdItemIEs), + offsetof(struct E_RABs_ToBeReleased_ModReqdItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_ModReqdItemIEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs = { + "E-RABs-ToBeReleased-ModReqdItemIEs", + "E-RABs-ToBeReleased-ModReqdItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93, + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93) + /sizeof(asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqdItemIEs_93, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqdItemIEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs__value, choice.E_RABs_ToBeReleased_RelReqItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeReleased_RelReqItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-RelReqItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_RelReqItemIEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 1, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItemIEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_RelReqItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_E_RABs_ToBeReleased_RelReqItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelReqItemIEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItemIEs_specs_97 = { + sizeof(struct E_RABs_ToBeReleased_RelReqItemIEs), + offsetof(struct E_RABs_ToBeReleased_RelReqItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelReqItemIEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs = { + "E-RABs-ToBeReleased-RelReqItemIEs", + "E-RABs-ToBeReleased-RelReqItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItemIEs_97, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItemIEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs__value, choice.E_RABs_ToBeReleased_RelConfItem), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_E_RABs_ToBeReleased_RelConfItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-RelConfItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_RelConfItemIEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItemIEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_RelConfItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_E_RABs_ToBeReleased_RelConfItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_RelConfItemIEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItemIEs_specs_101 = { + sizeof(struct E_RABs_ToBeReleased_RelConfItemIEs), + offsetof(struct E_RABs_ToBeReleased_RelConfItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_RelConfItemIEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs = { + "E-RABs-ToBeReleased-RelConfItemIEs", + "E-RABs-ToBeReleased-RelConfItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101, + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101) + /sizeof(asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItemIEs_101, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItemIEs_specs_101 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_108[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemIEs__value, choice.E_RABs_SubjectToCounterCheckItem), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToCounterCheckItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToCounterCheckItem" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_108[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToCounterCheckItem */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_108 = { + sizeof(struct E_RABs_SubjectToCounterCheckItemIEs__value), + offsetof(struct E_RABs_SubjectToCounterCheckItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_SubjectToCounterCheckItemIEs__value, present), + sizeof(((struct E_RABs_SubjectToCounterCheckItemIEs__value *)0)->present), + asn_MAP_value_tag2el_108, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_108 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_108, + 1, /* Elements count */ + &asn_SPC_value_specs_108 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheckItemIEs_105[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_106, memb_id_constraint_105 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_SubjectToCounterCheckItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_107, memb_criticality_constraint_105 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_108, + select_E_RABs_SubjectToCounterCheckItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_108, memb_value_constraint_105 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToCounterCheckItemIEs_tag2el_105[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToCounterCheckItemIEs_specs_105 = { + sizeof(struct E_RABs_SubjectToCounterCheckItemIEs), + offsetof(struct E_RABs_SubjectToCounterCheckItemIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToCounterCheckItemIEs_tag2el_105, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItemIEs = { + "E-RABs-SubjectToCounterCheckItemIEs", + "E-RABs-SubjectToCounterCheckItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105, + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105) + /sizeof(asn_DEF_E_RABs_SubjectToCounterCheckItemIEs_tags_105[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToCounterCheckItemIEs_105, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToCounterCheckItemIEs_specs_105 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_112[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs__value, choice.E_RABs_ToBeSetupRetrieve_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeSetupRetrieve_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeSetupRetrieve-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_112[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeSetupRetrieve-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_112 = { + sizeof(struct E_RABs_ToBeSetupRetrieve_ItemIEs__value), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeSetupRetrieve_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_112, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_112 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_112, + 1, /* Elements count */ + &asn_SPC_value_specs_112 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetupRetrieve_ItemIEs_109[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_110, memb_id_constraint_109 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeSetupRetrieve_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_111, memb_criticality_constraint_109 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_112, + select_E_RABs_ToBeSetupRetrieve_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_112, memb_value_constraint_109 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeSetupRetrieve_ItemIEs_tag2el_109[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_109 = { + sizeof(struct E_RABs_ToBeSetupRetrieve_ItemIEs), + offsetof(struct E_RABs_ToBeSetupRetrieve_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeSetupRetrieve_ItemIEs_tag2el_109, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs = { + "E-RABs-ToBeSetupRetrieve-ItemIEs", + "E-RABs-ToBeSetupRetrieve-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109, + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109[0]), /* 1 */ + asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109) + /sizeof(asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_109[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetupRetrieve_ItemIEs_109, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_109 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_116[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, choice.E_RABs_ToBeAdded_SgNBAddReq_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-SgNBAddReq-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_116[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeAdded-SgNBAddReq-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_116 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_116, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_116 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_116, + 1, /* Elements count */ + &asn_SPC_value_specs_116 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_113[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_114, memb_id_constraint_113 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_115, memb_criticality_constraint_113 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_116, + select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_116, memb_value_constraint_113 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tag2el_113[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_113 = { + sizeof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tag2el_113, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs = { + "E-RABs-ToBeAdded-SgNBAddReq-ItemIEs", + "E-RABs-ToBeAdded-SgNBAddReq-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_113[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_113, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_113 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_120[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_120[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_120 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_120, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_120 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_120, + 1, /* Elements count */ + &asn_SPC_value_specs_120 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_117[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_118, memb_id_constraint_117 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_119, memb_criticality_constraint_117 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_120, + select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_120, memb_value_constraint_117 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tag2el_117[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_117 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tag2el_117, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs", + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_117[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_117, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_117 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_124[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeAdded_SgNBModReq_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-SgNBModReq-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_124[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeAdded-SgNBModReq-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_124 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_124, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_124 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_124, + 1, /* Elements count */ + &asn_SPC_value_specs_124 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_121[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_122, memb_id_constraint_121 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_123, memb_criticality_constraint_121 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_124, + select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_124, memb_value_constraint_121 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tag2el_121[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_121 = { + sizeof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs), + offsetof(struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tag2el_121, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs = { + "E-RABs-ToBeAdded-SgNBModReq-ItemIEs", + "E-RABs-ToBeAdded-SgNBModReq-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121, + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121[0]), /* 1 */ + asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121) + /sizeof(asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_121[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_121, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_121 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_128[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeModified_SgNBModReq_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeModified-SgNBModReq-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_128[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeModified-SgNBModReq-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_128 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_128, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_128 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_128, + 1, /* Elements count */ + &asn_SPC_value_specs_128 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemIEs_125[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_126, memb_id_constraint_125 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_127, memb_criticality_constraint_125 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_128, + select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_128, memb_value_constraint_125 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tag2el_125[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_125 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReq_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tag2el_125, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs = { + "E-RABs-ToBeModified-SgNBModReq-ItemIEs", + "E-RABs-ToBeModified-SgNBModReq-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_125[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemIEs_125, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_125 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_132[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBModReq_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBModReq-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_132[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBModReq-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_132 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_132, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_132 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_132, + 1, /* Elements count */ + &asn_SPC_value_specs_132 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_129[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_130, memb_id_constraint_129 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_131, memb_criticality_constraint_129 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_132, + select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_132, memb_value_constraint_129 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tag2el_129[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_129 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tag2el_129, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs = { + "E-RABs-ToBeReleased-SgNBModReq-ItemIEs", + "E-RABs-ToBeReleased-SgNBModReq-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_129[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_129, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_129 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_136[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBModAck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_136[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_136 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_136, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_136 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_136, + 1, /* Elements count */ + &asn_SPC_value_specs_136 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_133[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_134, memb_id_constraint_133 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_135, memb_criticality_constraint_133 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_136, + select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_136, memb_value_constraint_133 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tag2el_133[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_133 = { + sizeof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tag2el_133, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs = { + "E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs", + "E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133, + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_133[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_133, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_133 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_140[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeModified_SgNBModAck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeModified-SgNBModAck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_140[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_140 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_140, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_140 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_140, + 1, /* Elements count */ + &asn_SPC_value_specs_140 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_137[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_138, memb_id_constraint_137 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_139, memb_criticality_constraint_137 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_140, + select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_140, memb_value_constraint_137 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tag2el_137[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_137 = { + sizeof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tag2el_137, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs = { + "E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs", + "E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137, + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_137[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_137, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_137 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_144[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToReleased_SgNBModAck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToReleased_SgNBModAck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToReleased-SgNBModAck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_144[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToReleased-SgNBModAck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_144 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_144, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_144 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_144, + 1, /* Elements count */ + &asn_SPC_value_specs_144 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_141[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_142, memb_id_constraint_141 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_143, memb_criticality_constraint_141 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_144, + select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_144, memb_value_constraint_141 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tag2el_141[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_141 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tag2el_141, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs = { + "E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs", + "E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_141[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_141, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_141 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_148[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBModReqd_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBModReqd-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_148[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBModReqd-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_148 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_148, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_148 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_148, + 1, /* Elements count */ + &asn_SPC_value_specs_148 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_145[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_146, memb_id_constraint_145 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_147, memb_criticality_constraint_145 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_148, + select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_148, memb_value_constraint_145 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tag2el_145[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_145 = { + sizeof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tag2el_145, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs = { + "E-RABs-ToBeReleased-SgNBModReqd-ItemIEs", + "E-RABs-ToBeReleased-SgNBModReqd-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_145[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_145, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_145 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_152[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, choice.E_RABs_ToBeModified_SgNBModReqd_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReqd_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeModified-SgNBModReqd-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_152[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeModified-SgNBModReqd-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_152 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_152, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_152 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_152, + 1, /* Elements count */ + &asn_SPC_value_specs_152 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_149[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_150, memb_id_constraint_149 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_151, memb_criticality_constraint_149 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_152, + select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_152, memb_value_constraint_149 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tag2el_149[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_149 = { + sizeof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs), + offsetof(struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tag2el_149, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs = { + "E-RABs-ToBeModified-SgNBModReqd-ItemIEs", + "E-RABs-ToBeModified-SgNBModReqd-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149, + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149[0]), /* 1 */ + asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149) + /sizeof(asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_149[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_149, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_149 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_156[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, choice.E_RABs_AdmittedToBeModified_SgNBModConf_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-AdmittedToBeModified-SgNBModConf-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_156[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-AdmittedToBeModified-SgNBModConf-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_156 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, present), + sizeof(((struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_156, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_156 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_156, + 1, /* Elements count */ + &asn_SPC_value_specs_156 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_153[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_154, memb_id_constraint_153 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_155, memb_criticality_constraint_153 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_156, + select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_156, memb_value_constraint_153 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tag2el_153[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_153 = { + sizeof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs), + offsetof(struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tag2el_153, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs = { + "E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs", + "E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153, + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153[0]), /* 1 */ + asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153, /* Same as above */ + sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153) + /sizeof(asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_153[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_153, + 3, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_153 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_160[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelReq_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelReq-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_160[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelReq-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_160 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_160, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_160 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_160, + 1, /* Elements count */ + &asn_SPC_value_specs_160 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_157[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_158, memb_id_constraint_157 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_159, memb_criticality_constraint_157 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_160, + select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_160, memb_value_constraint_157 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tag2el_157[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_157 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tag2el_157, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs = { + "E-RABs-ToBeReleased-SgNBRelReq-ItemIEs", + "E-RABs-ToBeReleased-SgNBRelReq-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_157[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_157, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_157 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_164[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_164[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_164 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, present), + sizeof(((struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_164, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_164 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_164, + 1, /* Elements count */ + &asn_SPC_value_specs_164 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_161[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_162, memb_id_constraint_161 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_163, memb_criticality_constraint_161 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_164, + select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_164, memb_value_constraint_161 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tag2el_161[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_161 = { + sizeof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs), + offsetof(struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tag2el_161, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs = { + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs", + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161, + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161[0]), /* 1 */ + asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161, /* Same as above */ + sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161) + /sizeof(asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_161[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_161, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_161 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_168[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqd_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelReqd-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_168[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelReqd-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_168 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_168, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_168 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_168, + 1, /* Elements count */ + &asn_SPC_value_specs_168 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_165[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_166, memb_id_constraint_165 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_167, memb_criticality_constraint_165 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_168, + select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_168, memb_value_constraint_165 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tag2el_165[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_165 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tag2el_165, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs = { + "E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs", + "E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_165[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_165, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_165 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_172[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelConf_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelConf-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_172[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelConf-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_172 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_172, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_172 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_172, + 1, /* Elements count */ + &asn_SPC_value_specs_172 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_169[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_170, memb_id_constraint_169 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_171, memb_criticality_constraint_169 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_172, + select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_172, memb_value_constraint_169 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tag2el_169[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_169 = { + sizeof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tag2el_169, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs = { + "E-RABs-ToBeReleased-SgNBRelConf-ItemIEs", + "E-RABs-ToBeReleased-SgNBRelConf-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_169[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_169, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_169 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_176[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, choice.E_RABs_SubjectToSgNBCounterCheck_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToSgNBCounterCheck_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToSgNBCounterCheck-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_176[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToSgNBCounterCheck-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_176 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, present), + sizeof(((struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_176, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_176 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_176, + 1, /* Elements count */ + &asn_SPC_value_specs_176 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_173[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_174, memb_id_constraint_173 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_175, memb_criticality_constraint_173 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_176, + select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_176, memb_value_constraint_173 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tag2el_173[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_173 = { + sizeof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs), + offsetof(struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tag2el_173, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs = { + "E-RABs-SubjectToSgNBCounterCheck-ItemIEs", + "E-RABs-SubjectToSgNBCounterCheck-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173, + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173[0]), /* 1 */ + asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173, /* Same as above */ + sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173) + /sizeof(asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_173[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_173, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_173 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_180[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBChaConf_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBChaConf-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_180[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBChaConf-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_180 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, present), + sizeof(((struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_180, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_180 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_180, + 1, /* Elements count */ + &asn_SPC_value_specs_180 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_177[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_178, memb_id_constraint_177 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_179, memb_criticality_constraint_177 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_180, + select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_180, memb_value_constraint_177 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tag2el_177[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_177 = { + sizeof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs), + offsetof(struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tag2el_177, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs = { + "E-RABs-ToBeReleased-SgNBChaConf-ItemIEs", + "E-RABs-ToBeReleased-SgNBChaConf-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177, + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177[0]), /* 1 */ + asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177, /* Same as above */ + sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177) + /sizeof(asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_177[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_177, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_177 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_184[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemIEs__value, choice.E_RABs_DataForwardingAddress_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_DataForwardingAddress_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-DataForwardingAddress-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_184[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-DataForwardingAddress-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_184 = { + sizeof(struct E_RABs_DataForwardingAddress_ItemIEs__value), + offsetof(struct E_RABs_DataForwardingAddress_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABs_DataForwardingAddress_ItemIEs__value, present), + sizeof(((struct E_RABs_DataForwardingAddress_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_184, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_184 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_184, + 1, /* Elements count */ + &asn_SPC_value_specs_184 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_ItemIEs_181[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_182, memb_id_constraint_181 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E_RABs_DataForwardingAddress_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_183, memb_criticality_constraint_181 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_184, + select_E_RABs_DataForwardingAddress_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_184, memb_value_constraint_181 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABs_DataForwardingAddress_ItemIEs_tag2el_181[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABs_DataForwardingAddress_ItemIEs_specs_181 = { + sizeof(struct E_RABs_DataForwardingAddress_ItemIEs), + offsetof(struct E_RABs_DataForwardingAddress_ItemIEs, _asn_ctx), + asn_MAP_E_RABs_DataForwardingAddress_ItemIEs_tag2el_181, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_ItemIEs = { + "E-RABs-DataForwardingAddress-ItemIEs", + "E-RABs-DataForwardingAddress-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181, + sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181[0]), /* 1 */ + asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181, /* Same as above */ + sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181) + /sizeof(asn_DEF_E_RABs_DataForwardingAddress_ItemIEs_tags_181[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_DataForwardingAddress_ItemIEs_181, + 3, /* Elements count */ + &asn_SPC_E_RABs_DataForwardingAddress_ItemIEs_specs_181 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_188[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscription), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscription, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscription" + }, +}; +static const unsigned asn_MAP_value_to_canonical_188[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_188[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_188[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscription */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_188 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_188, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_188, + asn_MAP_value_from_canonical_188, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_188 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_188, + 3, /* Elements count */ + &asn_SPC_value_specs_188 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_185[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_186, memb_id_constraint_185 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_187, memb_criticality_constraint_185 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_188, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_188, memb_value_constraint_185 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_185[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_185[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_185 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_185, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_185, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_185) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_185[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_185, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_185) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_185[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_185, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_185 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_192[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_192[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_192[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_192[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_192 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_192, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_192, + asn_MAP_value_from_canonical_192, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_192 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_192, + 4, /* Elements count */ + &asn_SPC_value_specs_192 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_189[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_190, memb_id_constraint_189 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_191, memb_criticality_constraint_189 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_192, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_192, memb_value_constraint_189 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_189[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_189[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_189 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_189, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_189, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_189) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_189[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_189, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_189) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_189[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_189, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_189 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_196[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_196[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_196[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_196[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_196 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_196, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_196, + asn_MAP_value_from_canonical_196, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_196 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_196, + 4, /* Elements count */ + &asn_SPC_value_specs_196 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_193[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_194, memb_id_constraint_193 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_195, memb_criticality_constraint_193 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_196, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_196, memb_value_constraint_193 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_193[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_193[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_193 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_193, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_193, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_193) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_193[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_193, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_193) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_193[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_193, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_193 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_200[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_200[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_200[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_200[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_200 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_200, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_200, + asn_MAP_value_from_canonical_200, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_200 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_200, + 2, /* Elements count */ + &asn_SPC_value_specs_200 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_197[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_198, memb_id_constraint_197 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_199, memb_criticality_constraint_197 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_200, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_200, memb_value_constraint_197 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_197[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_197 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_197, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_197[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_197, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_197 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_204[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_204[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_204[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_204[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_204 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_204, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_204, + asn_MAP_value_from_canonical_204, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_204 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_204, + 2, /* Elements count */ + &asn_SPC_value_specs_204 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_201[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_202, memb_id_constraint_201 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_203, memb_criticality_constraint_201 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_204, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_204, memb_value_constraint_201 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_201[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_201 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_201, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_201[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_201, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_201 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_208[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICcause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RICcause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_208[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_208[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_208[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* misc */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* ric */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_208 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_208, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_208, + asn_MAP_value_from_canonical_208, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_208 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_208, + 4, /* Elements count */ + &asn_SPC_value_specs_208 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_205[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_206, memb_id_constraint_205 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_207, memb_criticality_constraint_205 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_208, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_208, memb_value_constraint_205 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_205[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_205 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_205, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_205[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_205, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_205 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_212[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_212[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_212[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_212[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_212 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_212, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_212, + asn_MAP_value_from_canonical_212, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_212 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_212, + 8, /* Elements count */ + &asn_SPC_value_specs_212 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_209[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_210, memb_id_constraint_209 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_211, memb_criticality_constraint_209 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_212, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_212, memb_value_constraint_209 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_209[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_209[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_209 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_209, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_209, + sizeof(asn_DEF_RICindication_IEs_tags_209) + /sizeof(asn_DEF_RICindication_IEs_tags_209[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_209, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_209) + /sizeof(asn_DEF_RICindication_IEs_tags_209[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_209, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_209 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_216[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_216[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_216[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_216[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_216 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_216, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_216, + asn_MAP_value_from_canonical_216, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_216 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_216, + 6, /* Elements count */ + &asn_SPC_value_specs_216 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_213[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_214, memb_id_constraint_213 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_215, memb_criticality_constraint_213 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_216, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_216, memb_value_constraint_213 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_213[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_213[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_213 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_213, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_213, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_213) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_213[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_213, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_213) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_213[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_213, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_213 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_220[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, +}; +static const unsigned asn_MAP_value_to_canonical_220[] = { 1, 2, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_220[] = { 3, 0, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_220[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_220 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_220, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_220, + asn_MAP_value_from_canonical_220, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_220 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_220, + 4, /* Elements count */ + &asn_SPC_value_specs_220 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_217[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_218, memb_id_constraint_217 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_219, memb_criticality_constraint_217 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_220, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_220, memb_value_constraint_217 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_217[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_217[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_217 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_217, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_217, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_217) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_217[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_217, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_217) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_217[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_217, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_217 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_224[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RICcause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcause" + }, +}; +static const unsigned asn_MAP_value_to_canonical_224[] = { 1, 2, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_224[] = { 2, 0, 1, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_224[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* misc */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* ric */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_224 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_224, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_224, + asn_MAP_value_from_canonical_224, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_224 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_224, + 4, /* Elements count */ + &asn_SPC_value_specs_224 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_221[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_222, memb_id_constraint_221 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_223, memb_criticality_constraint_221 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_224, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_224, memb_value_constraint_221 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_221[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_221[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_221 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_221, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_221, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_221) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_221[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_221, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_221) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_221[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_221, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_221 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_228[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_228[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_228 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_228, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_228 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_228, + 2, /* Elements count */ + &asn_SPC_value_specs_228 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_225[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_226, memb_id_constraint_225 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_227, memb_criticality_constraint_225 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_228, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_228, memb_value_constraint_225 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_225[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_225[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_225 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_225, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_225, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_225) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_225[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_225, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_225) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_225[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_225, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_225 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_232[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_232[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_232 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_232, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_232 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_232, + 2, /* Elements count */ + &asn_SPC_value_specs_232 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_229[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_230, memb_id_constraint_229 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_231, memb_criticality_constraint_229 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_232, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_232, memb_value_constraint_229 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_229[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_229 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_229, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_229[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_229, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_229 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_236[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_236[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_236[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_236[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_236 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_236, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_236, + asn_MAP_value_from_canonical_236, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_236 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_236, + 3, /* Elements count */ + &asn_SPC_value_specs_236 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_233[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_234, memb_id_constraint_233 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_235, memb_criticality_constraint_233 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_236, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_236, memb_value_constraint_233 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_233[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_233[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_233 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_233, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_233, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_233) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_233[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_233, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_233) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_233[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_233, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_233 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_240[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_240[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_240 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_240, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_240 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_240, + 1, /* Elements count */ + &asn_SPC_value_specs_240 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_237[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_238, memb_id_constraint_237 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_239, memb_criticality_constraint_237 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_240, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_240, memb_value_constraint_237 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_237[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_237[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_237 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_237, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_237, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_237) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_237[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_237, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_237) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_237[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_237, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_237 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_244[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.GUMMEI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUMMEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GUMMEI" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_ContextInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_HistoryInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_HistoryInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-HistoryInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.TraceActivation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TraceActivation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TraceActivation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.SRVCCOperationPossible), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SRVCCOperationPossible, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SRVCCOperationPossible" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.CSGMembershipStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_CSGMembershipStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CSGMembershipStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.MobilityInformation), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_MobilityInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MobilityInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.Masked_IMEISV), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_Masked_IMEISV, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Masked-IMEISV" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_HistoryInformationFromTheUE), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_UE_HistoryInformationFromTheUE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-HistoryInformationFromTheUE" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.ExpectedUEBehaviour), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEBehaviour, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExpectedUEBehaviour" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.ProSeAuthorized), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProSeAuthorized, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ProSeAuthorized" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_ContextReferenceAtSeNB), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtSeNB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextReferenceAtSeNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.V2XServicesAuthorized), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_V2XServicesAuthorized, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "V2XServicesAuthorized" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_ContextReferenceAtWT), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtWT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextReferenceAtWT" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.NRUESecurityCapabilities), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRUESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRUESecurityCapabilities" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.UE_ContextReferenceAtSgNB), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextReferenceAtSgNB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextReferenceAtSgNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.AerialUEsubscriptionInformation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_AerialUEsubscriptionInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "AerialUEsubscriptionInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs__value, choice.Subscription_Based_UE_DifferentiationInfo), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Subscription_Based_UE_DifferentiationInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Subscription-Based-UE-DifferentiationInfo" + }, +}; +static const unsigned asn_MAP_value_to_canonical_244[] = { 0, 15, 9, 10, 11, 7, 8, 20, 2, 3, 4, 5, 6, 12, 13, 14, 16, 17, 18, 19, 21, 1 }; +static const unsigned asn_MAP_value_from_canonical_244[] = { 0, 21, 8, 9, 10, 11, 12, 5, 6, 2, 3, 4, 13, 14, 15, 1, 16, 17, 18, 19, 7, 20 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_244[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 15, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 9, 0, 1 }, /* MobilityInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 10, -1, 0 }, /* Masked-IMEISV */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 11, 0, 0 }, /* UE-HistoryInformationFromTheUE */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 2 }, /* SRVCCOperationPossible */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 8, -1, 1 }, /* CSGMembershipStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 20, -2, 0 }, /* AerialUEsubscriptionInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 12 }, /* ECGI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 11 }, /* GUMMEI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 10 }, /* UE-ContextInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 9 }, /* UE-HistoryInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -4, 8 }, /* TraceActivation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -5, 7 }, /* ExpectedUEBehaviour */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -6, 6 }, /* ProSeAuthorized */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -7, 5 }, /* UE-ContextReferenceAtSeNB */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 16, -8, 4 }, /* V2XServicesAuthorized */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 17, -9, 3 }, /* UE-ContextReferenceAtWT */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 18, -10, 2 }, /* NRUESecurityCapabilities */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 19, -11, 1 }, /* UE-ContextReferenceAtSgNB */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 21, -12, 0 }, /* Subscription-Based-UE-DifferentiationInfo */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_244 = { + sizeof(struct HandoverRequest_IEs__value), + offsetof(struct HandoverRequest_IEs__value, _asn_ctx), + offsetof(struct HandoverRequest_IEs__value, present), + sizeof(((struct HandoverRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_244, + 25, /* Count of tags in the map */ + asn_MAP_value_to_canonical_244, + asn_MAP_value_from_canonical_244, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_244 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_244, + 22, /* Elements count */ + &asn_SPC_value_specs_244 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverRequest_IEs_241[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_242, memb_id_constraint_241 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_HandoverRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_243, memb_criticality_constraint_241 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_244, + select_HandoverRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_244, memb_value_constraint_241 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverRequest_IEs_tags_241[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRequest_IEs_tag2el_241[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverRequest_IEs_specs_241 = { + sizeof(struct HandoverRequest_IEs), + offsetof(struct HandoverRequest_IEs, _asn_ctx), + asn_MAP_HandoverRequest_IEs_tag2el_241, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRequest_IEs = { + "HandoverRequest-IEs", + "HandoverRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRequest_IEs_tags_241, + sizeof(asn_DEF_HandoverRequest_IEs_tags_241) + /sizeof(asn_DEF_HandoverRequest_IEs_tags_241[0]), /* 1 */ + asn_DEF_HandoverRequest_IEs_tags_241, /* Same as above */ + sizeof(asn_DEF_HandoverRequest_IEs_tags_241) + /sizeof(asn_DEF_HandoverRequest_IEs_tags_241[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRequest_IEs_241, + 3, /* Elements count */ + &asn_SPC_HandoverRequest_IEs_specs_241 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_248[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.E_RAB_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.TargeteNBtoSource_eNBTransparentContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TargeteNBtoSource_eNBTransparentContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TargeteNBtoSource-eNBTransparentContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.UE_ContextKeptIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_UE_ContextKeptIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextKeptIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_248[] = { 0, 6, 3, 5, 1, 2, 4 }; +static const unsigned asn_MAP_value_from_canonical_248[] = { 0, 4, 5, 2, 6, 3, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_248[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* TargeteNBtoSource-eNBTransparentContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* UE-ContextKeptIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 2 }, /* E-RABs-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* E-RAB-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_248 = { + sizeof(struct HandoverRequestAcknowledge_IEs__value), + offsetof(struct HandoverRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct HandoverRequestAcknowledge_IEs__value, present), + sizeof(((struct HandoverRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_248, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_248, + asn_MAP_value_from_canonical_248, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_248 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_248, + 7, /* Elements count */ + &asn_SPC_value_specs_248 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverRequestAcknowledge_IEs_245[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_246, memb_id_constraint_245 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_HandoverRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_247, memb_criticality_constraint_245 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_248, + select_HandoverRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_248, memb_value_constraint_245 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverRequestAcknowledge_IEs_tags_245[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverRequestAcknowledge_IEs_tag2el_245[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverRequestAcknowledge_IEs_specs_245 = { + sizeof(struct HandoverRequestAcknowledge_IEs), + offsetof(struct HandoverRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_HandoverRequestAcknowledge_IEs_tag2el_245, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverRequestAcknowledge_IEs = { + "HandoverRequestAcknowledge-IEs", + "HandoverRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverRequestAcknowledge_IEs_tags_245, + sizeof(asn_DEF_HandoverRequestAcknowledge_IEs_tags_245) + /sizeof(asn_DEF_HandoverRequestAcknowledge_IEs_tags_245[0]), /* 1 */ + asn_DEF_HandoverRequestAcknowledge_IEs_tags_245, /* Same as above */ + sizeof(asn_DEF_HandoverRequestAcknowledge_IEs_tags_245) + /sizeof(asn_DEF_HandoverRequestAcknowledge_IEs_tags_245[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverRequestAcknowledge_IEs_245, + 3, /* Elements count */ + &asn_SPC_HandoverRequestAcknowledge_IEs_specs_245 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_252[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_252[] = { 0, 3, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_252[] = { 0, 3, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_252[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_252 = { + sizeof(struct HandoverPreparationFailure_IEs__value), + offsetof(struct HandoverPreparationFailure_IEs__value, _asn_ctx), + offsetof(struct HandoverPreparationFailure_IEs__value, present), + sizeof(((struct HandoverPreparationFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_252, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_252, + asn_MAP_value_from_canonical_252, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_252 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_252, + 4, /* Elements count */ + &asn_SPC_value_specs_252 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverPreparationFailure_IEs_249[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_250, memb_id_constraint_249 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_HandoverPreparationFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_251, memb_criticality_constraint_249 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_252, + select_HandoverPreparationFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_252, memb_value_constraint_249 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverPreparationFailure_IEs_tags_249[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverPreparationFailure_IEs_tag2el_249[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationFailure_IEs_specs_249 = { + sizeof(struct HandoverPreparationFailure_IEs), + offsetof(struct HandoverPreparationFailure_IEs, _asn_ctx), + asn_MAP_HandoverPreparationFailure_IEs_tag2el_249, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverPreparationFailure_IEs = { + "HandoverPreparationFailure-IEs", + "HandoverPreparationFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverPreparationFailure_IEs_tags_249, + sizeof(asn_DEF_HandoverPreparationFailure_IEs_tags_249) + /sizeof(asn_DEF_HandoverPreparationFailure_IEs_tags_249[0]), /* 1 */ + asn_DEF_HandoverPreparationFailure_IEs_tags_249, /* Same as above */ + sizeof(asn_DEF_HandoverPreparationFailure_IEs_tags_249) + /sizeof(asn_DEF_HandoverPreparationFailure_IEs_tags_249[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverPreparationFailure_IEs_249, + 3, /* Elements count */ + &asn_SPC_HandoverPreparationFailure_IEs_specs_249 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_256[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.HandoverReportType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_HandoverReportType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "HandoverReportType" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.TargetCellInUTRAN), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TargetCellInUTRAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TargetCellInUTRAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.CRNTI), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_CRNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CRNTI" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.MobilityInformation), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_MobilityInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MobilityInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.UE_RLF_Report_Container), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_UE_RLF_Report_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-RLF-Report-Container" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs__value, choice.UE_RLF_Report_Container_for_extended_bands), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_UE_RLF_Report_Container_for_extended_bands, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-RLF-Report-Container-for-extended-bands" + }, +}; +static const unsigned asn_MAP_value_to_canonical_256[] = { 4, 5, 3, 6, 7, 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_256[] = { 5, 7, 6, 2, 0, 1, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_256[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 4, 0, 1 }, /* CRNTI */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, -1, 0 }, /* MobilityInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 2 }, /* TargetCellInUTRAN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* UE-RLF-Report-Container */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* UE-RLF-Report-Container-for-extended-bands */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* HandoverReportType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* ECGI */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_256 = { + sizeof(struct HandoverReport_IEs__value), + offsetof(struct HandoverReport_IEs__value, _asn_ctx), + offsetof(struct HandoverReport_IEs__value, present), + sizeof(((struct HandoverReport_IEs__value *)0)->present), + asn_MAP_value_tag2el_256, + 11, /* Count of tags in the map */ + asn_MAP_value_to_canonical_256, + asn_MAP_value_from_canonical_256, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_256 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_256, + 8, /* Elements count */ + &asn_SPC_value_specs_256 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverReport_IEs_253[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_254, memb_id_constraint_253 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_HandoverReport_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_255, memb_criticality_constraint_253 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverReport_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_256, + select_HandoverReport_IEs_value_type, + { 0, &asn_PER_memb_value_constr_256, memb_value_constraint_253 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverReport_IEs_tags_253[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverReport_IEs_tag2el_253[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverReport_IEs_specs_253 = { + sizeof(struct HandoverReport_IEs), + offsetof(struct HandoverReport_IEs, _asn_ctx), + asn_MAP_HandoverReport_IEs_tag2el_253, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverReport_IEs = { + "HandoverReport-IEs", + "HandoverReport-IEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverReport_IEs_tags_253, + sizeof(asn_DEF_HandoverReport_IEs_tags_253) + /sizeof(asn_DEF_HandoverReport_IEs_tags_253[0]), /* 1 */ + asn_DEF_HandoverReport_IEs_tags_253, /* Same as above */ + sizeof(asn_DEF_HandoverReport_IEs_tags_253) + /sizeof(asn_DEF_HandoverReport_IEs_tags_253[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverReport_IEs_253, + 3, /* Elements count */ + &asn_SPC_HandoverReport_IEs_specs_253 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_260[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs__value, choice.E_RABs_SubjectToStatusTransfer_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToStatusTransfer_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToStatusTransfer-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_260[] = { 0, 2, 3, 1 }; +static const unsigned asn_MAP_value_from_canonical_260[] = { 0, 3, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_260[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* E-RABs-SubjectToStatusTransfer-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_260 = { + sizeof(struct SNStatusTransfer_IEs__value), + offsetof(struct SNStatusTransfer_IEs__value, _asn_ctx), + offsetof(struct SNStatusTransfer_IEs__value, present), + sizeof(((struct SNStatusTransfer_IEs__value *)0)->present), + asn_MAP_value_tag2el_260, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_260, + asn_MAP_value_from_canonical_260, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_260 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_260, + 4, /* Elements count */ + &asn_SPC_value_specs_260 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SNStatusTransfer_IEs_257[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_258, memb_id_constraint_257 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SNStatusTransfer_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_259, memb_criticality_constraint_257 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_260, + select_SNStatusTransfer_IEs_value_type, + { 0, &asn_PER_memb_value_constr_260, memb_value_constraint_257 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SNStatusTransfer_IEs_tags_257[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNStatusTransfer_IEs_tag2el_257[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNStatusTransfer_IEs_specs_257 = { + sizeof(struct SNStatusTransfer_IEs), + offsetof(struct SNStatusTransfer_IEs, _asn_ctx), + asn_MAP_SNStatusTransfer_IEs_tag2el_257, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNStatusTransfer_IEs = { + "SNStatusTransfer-IEs", + "SNStatusTransfer-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SNStatusTransfer_IEs_tags_257, + sizeof(asn_DEF_SNStatusTransfer_IEs_tags_257) + /sizeof(asn_DEF_SNStatusTransfer_IEs_tags_257[0]), /* 1 */ + asn_DEF_SNStatusTransfer_IEs_tags_257, /* Same as above */ + sizeof(asn_DEF_SNStatusTransfer_IEs_tags_257) + /sizeof(asn_DEF_SNStatusTransfer_IEs_tags_257[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNStatusTransfer_IEs_257, + 3, /* Elements count */ + &asn_SPC_SNStatusTransfer_IEs_specs_257 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_264[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs__value, choice.SIPTOBearerDeactivationIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SIPTOBearerDeactivationIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SIPTOBearerDeactivationIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_264[] = { 0, 1, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_264[] = { 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_264[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 } /* SIPTOBearerDeactivationIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_264 = { + sizeof(struct UEContextRelease_IEs__value), + offsetof(struct UEContextRelease_IEs__value, _asn_ctx), + offsetof(struct UEContextRelease_IEs__value, present), + sizeof(((struct UEContextRelease_IEs__value *)0)->present), + asn_MAP_value_tag2el_264, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_264, + asn_MAP_value_from_canonical_264, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_264 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_264, + 4, /* Elements count */ + &asn_SPC_value_specs_264 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UEContextRelease_IEs_261[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_262, memb_id_constraint_261 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UEContextRelease_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_263, memb_criticality_constraint_261 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UEContextRelease_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_264, + select_UEContextRelease_IEs_value_type, + { 0, &asn_PER_memb_value_constr_264, memb_value_constraint_261 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEContextRelease_IEs_tags_261[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEContextRelease_IEs_tag2el_261[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEContextRelease_IEs_specs_261 = { + sizeof(struct UEContextRelease_IEs), + offsetof(struct UEContextRelease_IEs, _asn_ctx), + asn_MAP_UEContextRelease_IEs_tag2el_261, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEContextRelease_IEs = { + "UEContextRelease-IEs", + "UEContextRelease-IEs", + &asn_OP_SEQUENCE, + asn_DEF_UEContextRelease_IEs_tags_261, + sizeof(asn_DEF_UEContextRelease_IEs_tags_261) + /sizeof(asn_DEF_UEContextRelease_IEs_tags_261[0]), /* 1 */ + asn_DEF_UEContextRelease_IEs_tags_261, /* Same as above */ + sizeof(asn_DEF_UEContextRelease_IEs_tags_261) + /sizeof(asn_DEF_UEContextRelease_IEs_tags_261[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEContextRelease_IEs_261, + 3, /* Elements count */ + &asn_SPC_UEContextRelease_IEs_specs_261 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_268[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_268[] = { 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_268[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_268[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_268 = { + sizeof(struct HandoverCancel_IEs__value), + offsetof(struct HandoverCancel_IEs__value, _asn_ctx), + offsetof(struct HandoverCancel_IEs__value, present), + sizeof(((struct HandoverCancel_IEs__value *)0)->present), + asn_MAP_value_tag2el_268, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_268, + asn_MAP_value_from_canonical_268, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_268 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_268, + 3, /* Elements count */ + &asn_SPC_value_specs_268 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_HandoverCancel_IEs_265[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_266, memb_id_constraint_265 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_HandoverCancel_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_267, memb_criticality_constraint_265 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct HandoverCancel_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_268, + select_HandoverCancel_IEs_value_type, + { 0, &asn_PER_memb_value_constr_268, memb_value_constraint_265 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverCancel_IEs_tags_265[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverCancel_IEs_tag2el_265[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_HandoverCancel_IEs_specs_265 = { + sizeof(struct HandoverCancel_IEs), + offsetof(struct HandoverCancel_IEs, _asn_ctx), + asn_MAP_HandoverCancel_IEs_tag2el_265, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverCancel_IEs = { + "HandoverCancel-IEs", + "HandoverCancel-IEs", + &asn_OP_SEQUENCE, + asn_DEF_HandoverCancel_IEs_tags_265, + sizeof(asn_DEF_HandoverCancel_IEs_tags_265) + /sizeof(asn_DEF_HandoverCancel_IEs_tags_265[0]), /* 1 */ + asn_DEF_HandoverCancel_IEs_tags_265, /* Same as above */ + sizeof(asn_DEF_HandoverCancel_IEs_tags_265) + /sizeof(asn_DEF_HandoverCancel_IEs_tags_265[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_HandoverCancel_IEs_265, + 3, /* Elements count */ + &asn_SPC_HandoverCancel_IEs_specs_265 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_272[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_272[] = { 0, 3, 4, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_272[] = { 0, 4, 3, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_272[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_272 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_272, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_272, + asn_MAP_value_from_canonical_272, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_272 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_272, + 5, /* Elements count */ + &asn_SPC_value_specs_272 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_269[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_270, memb_id_constraint_269 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_271, memb_criticality_constraint_269 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_272, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_272, memb_value_constraint_269 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_269[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_269[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_269 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_269, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_269, + sizeof(asn_DEF_ErrorIndication_IEs_tags_269) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_269[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_269, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_269) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_269[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_269, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_269 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_276[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_276[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_276 = { + sizeof(struct ResetRequest_IEs__value), + offsetof(struct ResetRequest_IEs__value, _asn_ctx), + offsetof(struct ResetRequest_IEs__value, present), + sizeof(((struct ResetRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_276, + 4, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_276 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_276, + 1, /* Elements count */ + &asn_SPC_value_specs_276 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequest_IEs_273[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_274, memb_id_constraint_273 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_275, memb_criticality_constraint_273 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_276, + select_ResetRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_276, memb_value_constraint_273 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_IEs_tags_273[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_IEs_tag2el_273[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_IEs_specs_273 = { + sizeof(struct ResetRequest_IEs), + offsetof(struct ResetRequest_IEs, _asn_ctx), + asn_MAP_ResetRequest_IEs_tag2el_273, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest_IEs = { + "ResetRequest-IEs", + "ResetRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_IEs_tags_273, + sizeof(asn_DEF_ResetRequest_IEs_tags_273) + /sizeof(asn_DEF_ResetRequest_IEs_tags_273[0]), /* 1 */ + asn_DEF_ResetRequest_IEs_tags_273, /* Same as above */ + sizeof(asn_DEF_ResetRequest_IEs_tags_273) + /sizeof(asn_DEF_ResetRequest_IEs_tags_273[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_IEs_273, + 3, /* Elements count */ + &asn_SPC_ResetRequest_IEs_specs_273 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_280[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_280[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_280 = { + sizeof(struct ResetResponse_IEs__value), + offsetof(struct ResetResponse_IEs__value, _asn_ctx), + offsetof(struct ResetResponse_IEs__value, present), + sizeof(((struct ResetResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_280, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_280 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_280, + 1, /* Elements count */ + &asn_SPC_value_specs_280 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponse_IEs_277[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_278, memb_id_constraint_277 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_279, memb_criticality_constraint_277 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_280, + select_ResetResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_280, memb_value_constraint_277 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_IEs_tags_277[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_IEs_tag2el_277[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_IEs_specs_277 = { + sizeof(struct ResetResponse_IEs), + offsetof(struct ResetResponse_IEs, _asn_ctx), + asn_MAP_ResetResponse_IEs_tag2el_277, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse_IEs = { + "ResetResponse-IEs", + "ResetResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_IEs_tags_277, + sizeof(asn_DEF_ResetResponse_IEs_tags_277) + /sizeof(asn_DEF_ResetResponse_IEs_tags_277[0]), /* 1 */ + asn_DEF_ResetResponse_IEs_tags_277, /* Same as above */ + sizeof(asn_DEF_ResetResponse_IEs_tags_277) + /sizeof(asn_DEF_ResetResponse_IEs_tags_277[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_IEs_277, + 3, /* Elements count */ + &asn_SPC_ResetResponse_IEs_specs_277 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_284[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs__value, choice.ServedCells), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCells, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedCells" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs__value, choice.GUGroupIDList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUGroupIDList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GUGroupIDList" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs__value, choice.LHN_ID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_LHN_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LHN-ID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_284[] = { 3, 0, 1, 2 }; +static const unsigned asn_MAP_value_from_canonical_284[] = { 1, 2, 3, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_284[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* LHN-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalENB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ServedCells */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* GUGroupIDList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_284 = { + sizeof(struct X2SetupRequest_IEs__value), + offsetof(struct X2SetupRequest_IEs__value, _asn_ctx), + offsetof(struct X2SetupRequest_IEs__value, present), + sizeof(((struct X2SetupRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_284, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_284, + asn_MAP_value_from_canonical_284, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_284 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_284, + 4, /* Elements count */ + &asn_SPC_value_specs_284 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2SetupRequest_IEs_281[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_282, memb_id_constraint_281 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2SetupRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_283, memb_criticality_constraint_281 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_284, + select_X2SetupRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_284, memb_value_constraint_281 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupRequest_IEs_tags_281[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupRequest_IEs_tag2el_281[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupRequest_IEs_specs_281 = { + sizeof(struct X2SetupRequest_IEs), + offsetof(struct X2SetupRequest_IEs, _asn_ctx), + asn_MAP_X2SetupRequest_IEs_tag2el_281, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupRequest_IEs = { + "X2SetupRequest-IEs", + "X2SetupRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupRequest_IEs_tags_281, + sizeof(asn_DEF_X2SetupRequest_IEs_tags_281) + /sizeof(asn_DEF_X2SetupRequest_IEs_tags_281[0]), /* 1 */ + asn_DEF_X2SetupRequest_IEs_tags_281, /* Same as above */ + sizeof(asn_DEF_X2SetupRequest_IEs_tags_281) + /sizeof(asn_DEF_X2SetupRequest_IEs_tags_281[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupRequest_IEs_281, + 3, /* Elements count */ + &asn_SPC_X2SetupRequest_IEs_specs_281 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_288[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs__value, choice.ServedCells), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCells, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedCells" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs__value, choice.GUGroupIDList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUGroupIDList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GUGroupIDList" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs__value, choice.LHN_ID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_LHN_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "LHN-ID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_288[] = { 4, 0, 1, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_288[] = { 1, 2, 3, 4, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_288[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* LHN-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* GlobalENB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* ServedCells */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* GUGroupIDList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_288 = { + sizeof(struct X2SetupResponse_IEs__value), + offsetof(struct X2SetupResponse_IEs__value, _asn_ctx), + offsetof(struct X2SetupResponse_IEs__value, present), + sizeof(((struct X2SetupResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_288, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_288, + asn_MAP_value_from_canonical_288, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_288 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_288, + 5, /* Elements count */ + &asn_SPC_value_specs_288 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2SetupResponse_IEs_285[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_286, memb_id_constraint_285 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2SetupResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_287, memb_criticality_constraint_285 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_288, + select_X2SetupResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_288, memb_value_constraint_285 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupResponse_IEs_tags_285[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupResponse_IEs_tag2el_285[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupResponse_IEs_specs_285 = { + sizeof(struct X2SetupResponse_IEs), + offsetof(struct X2SetupResponse_IEs, _asn_ctx), + asn_MAP_X2SetupResponse_IEs_tag2el_285, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupResponse_IEs = { + "X2SetupResponse-IEs", + "X2SetupResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupResponse_IEs_tags_285, + sizeof(asn_DEF_X2SetupResponse_IEs_tags_285) + /sizeof(asn_DEF_X2SetupResponse_IEs_tags_285[0]), /* 1 */ + asn_DEF_X2SetupResponse_IEs_tags_285, /* Same as above */ + sizeof(asn_DEF_X2SetupResponse_IEs_tags_285) + /sizeof(asn_DEF_X2SetupResponse_IEs_tags_285[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupResponse_IEs_285, + 3, /* Elements count */ + &asn_SPC_X2SetupResponse_IEs_specs_285 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_292[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_292[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_292[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_292[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_292 = { + sizeof(struct X2SetupFailure_IEs__value), + offsetof(struct X2SetupFailure_IEs__value, _asn_ctx), + offsetof(struct X2SetupFailure_IEs__value, present), + sizeof(((struct X2SetupFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_292, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_292, + asn_MAP_value_from_canonical_292, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_292 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_292, + 3, /* Elements count */ + &asn_SPC_value_specs_292 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2SetupFailure_IEs_289[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_290, memb_id_constraint_289 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2SetupFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_291, memb_criticality_constraint_289 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_292, + select_X2SetupFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_292, memb_value_constraint_289 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupFailure_IEs_tags_289[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupFailure_IEs_tag2el_289[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupFailure_IEs_specs_289 = { + sizeof(struct X2SetupFailure_IEs), + offsetof(struct X2SetupFailure_IEs, _asn_ctx), + asn_MAP_X2SetupFailure_IEs_tag2el_289, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupFailure_IEs = { + "X2SetupFailure-IEs", + "X2SetupFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupFailure_IEs_tags_289, + sizeof(asn_DEF_X2SetupFailure_IEs_tags_289) + /sizeof(asn_DEF_X2SetupFailure_IEs_tags_289[0]), /* 1 */ + asn_DEF_X2SetupFailure_IEs_tags_289, /* Same as above */ + sizeof(asn_DEF_X2SetupFailure_IEs_tags_289) + /sizeof(asn_DEF_X2SetupFailure_IEs_tags_289[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupFailure_IEs_289, + 3, /* Elements count */ + &asn_SPC_X2SetupFailure_IEs_specs_289 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_296[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoadInformation_IEs__value, choice.CellInformation_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInformation_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellInformation-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_296[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellInformation-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_296 = { + sizeof(struct LoadInformation_IEs__value), + offsetof(struct LoadInformation_IEs__value, _asn_ctx), + offsetof(struct LoadInformation_IEs__value, present), + sizeof(((struct LoadInformation_IEs__value *)0)->present), + asn_MAP_value_tag2el_296, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_296 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_296, + 1, /* Elements count */ + &asn_SPC_value_specs_296 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_LoadInformation_IEs_293[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoadInformation_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_294, memb_id_constraint_293 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoadInformation_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_LoadInformation_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_295, memb_criticality_constraint_293 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct LoadInformation_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_296, + select_LoadInformation_IEs_value_type, + { 0, &asn_PER_memb_value_constr_296, memb_value_constraint_293 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_LoadInformation_IEs_tags_293[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LoadInformation_IEs_tag2el_293[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LoadInformation_IEs_specs_293 = { + sizeof(struct LoadInformation_IEs), + offsetof(struct LoadInformation_IEs, _asn_ctx), + asn_MAP_LoadInformation_IEs_tag2el_293, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LoadInformation_IEs = { + "LoadInformation-IEs", + "LoadInformation-IEs", + &asn_OP_SEQUENCE, + asn_DEF_LoadInformation_IEs_tags_293, + sizeof(asn_DEF_LoadInformation_IEs_tags_293) + /sizeof(asn_DEF_LoadInformation_IEs_tags_293[0]), /* 1 */ + asn_DEF_LoadInformation_IEs_tags_293, /* Same as above */ + sizeof(asn_DEF_LoadInformation_IEs_tags_293) + /sizeof(asn_DEF_LoadInformation_IEs_tags_293[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LoadInformation_IEs_293, + 3, /* Elements count */ + &asn_SPC_LoadInformation_IEs_specs_293 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_300[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs__value, choice.ServedCells), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCells, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedCells" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs__value, choice.ServedCellsToModify), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToModify, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedCellsToModify" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs__value, choice.Old_ECGIs), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Old_ECGIs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Old-ECGIs" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs__value, choice.GUGroupIDList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUGroupIDList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GUGroupIDList" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs__value, choice.CoverageModificationList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CoverageModificationList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CoverageModificationList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_300[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* ServedCells */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* ServedCellsToModify */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* Old-ECGIs */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* GUGroupIDList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* CoverageModificationList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_300 = { + sizeof(struct ENBConfigurationUpdate_IEs__value), + offsetof(struct ENBConfigurationUpdate_IEs__value, _asn_ctx), + offsetof(struct ENBConfigurationUpdate_IEs__value, present), + sizeof(((struct ENBConfigurationUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_300, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_300 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_300, + 5, /* Elements count */ + &asn_SPC_value_specs_300 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdate_IEs_297[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_298, memb_id_constraint_297 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENBConfigurationUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_299, memb_criticality_constraint_297 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_300, + select_ENBConfigurationUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_300, memb_value_constraint_297 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdate_IEs_tags_297[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdate_IEs_tag2el_297[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdate_IEs_specs_297 = { + sizeof(struct ENBConfigurationUpdate_IEs), + offsetof(struct ENBConfigurationUpdate_IEs, _asn_ctx), + asn_MAP_ENBConfigurationUpdate_IEs_tag2el_297, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdate_IEs = { + "ENBConfigurationUpdate-IEs", + "ENBConfigurationUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdate_IEs_tags_297, + sizeof(asn_DEF_ENBConfigurationUpdate_IEs_tags_297) + /sizeof(asn_DEF_ENBConfigurationUpdate_IEs_tags_297[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdate_IEs_tags_297, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdate_IEs_tags_297) + /sizeof(asn_DEF_ENBConfigurationUpdate_IEs_tags_297[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdate_IEs_297, + 3, /* Elements count */ + &asn_SPC_ENBConfigurationUpdate_IEs_specs_297 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_304[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_304[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_304 = { + sizeof(struct ENBConfigurationUpdateAcknowledge_IEs__value), + offsetof(struct ENBConfigurationUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct ENBConfigurationUpdateAcknowledge_IEs__value, present), + sizeof(((struct ENBConfigurationUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_304, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_304 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_304, + 1, /* Elements count */ + &asn_SPC_value_specs_304 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateAcknowledge_IEs_301[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_302, memb_id_constraint_301 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENBConfigurationUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_303, memb_criticality_constraint_301 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_304, + select_ENBConfigurationUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_304, memb_value_constraint_301 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdateAcknowledge_IEs_tag2el_301[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateAcknowledge_IEs_specs_301 = { + sizeof(struct ENBConfigurationUpdateAcknowledge_IEs), + offsetof(struct ENBConfigurationUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_ENBConfigurationUpdateAcknowledge_IEs_tag2el_301, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateAcknowledge_IEs = { + "ENBConfigurationUpdateAcknowledge-IEs", + "ENBConfigurationUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301, + sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301) + /sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301) + /sizeof(asn_DEF_ENBConfigurationUpdateAcknowledge_IEs_tags_301[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdateAcknowledge_IEs_301, + 3, /* Elements count */ + &asn_SPC_ENBConfigurationUpdateAcknowledge_IEs_specs_301 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_308[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_308[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_308[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_308[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_308 = { + sizeof(struct ENBConfigurationUpdateFailure_IEs__value), + offsetof(struct ENBConfigurationUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct ENBConfigurationUpdateFailure_IEs__value, present), + sizeof(((struct ENBConfigurationUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_308, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_308, + asn_MAP_value_from_canonical_308, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_308 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_308, + 3, /* Elements count */ + &asn_SPC_value_specs_308 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateFailure_IEs_305[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_306, memb_id_constraint_305 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENBConfigurationUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_307, memb_criticality_constraint_305 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENBConfigurationUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_308, + select_ENBConfigurationUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_308, memb_value_constraint_305 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENBConfigurationUpdateFailure_IEs_tag2el_305[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateFailure_IEs_specs_305 = { + sizeof(struct ENBConfigurationUpdateFailure_IEs), + offsetof(struct ENBConfigurationUpdateFailure_IEs, _asn_ctx), + asn_MAP_ENBConfigurationUpdateFailure_IEs_tag2el_305, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateFailure_IEs = { + "ENBConfigurationUpdateFailure-IEs", + "ENBConfigurationUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305, + sizeof(asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305) + /sizeof(asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305[0]), /* 1 */ + asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305, /* Same as above */ + sizeof(asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305) + /sizeof(asn_DEF_ENBConfigurationUpdateFailure_IEs_tags_305[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENBConfigurationUpdateFailure_IEs_305, + 3, /* Elements count */ + &asn_SPC_ENBConfigurationUpdateFailure_IEs_specs_305 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_312[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.Measurement_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Measurement_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Measurement-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.Registration_Request), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Registration_Request, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Registration-Request" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.ReportCharacteristics), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_ReportCharacteristics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReportCharacteristics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.CellToReport_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellToReport_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellToReport-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.ReportingPeriodicity), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ReportingPeriodicity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReportingPeriodicity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.PartialSuccessIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PartialSuccessIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PartialSuccessIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.ReportingPeriodicityRSRPMR), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ReportingPeriodicityRSRPMR, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReportingPeriodicityRSRPMR" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs__value, choice.ReportingPeriodicityCSIR), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_ReportingPeriodicityCSIR, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ReportingPeriodicityCSIR" + }, +}; +static const unsigned asn_MAP_value_to_canonical_312[] = { 0, 2, 1, 4, 5, 6, 7, 3 }; +static const unsigned asn_MAP_value_from_canonical_312[] = { 0, 2, 1, 7, 3, 4, 5, 6 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_312[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* ReportCharacteristics */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 4 }, /* Registration-Request */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, -1, 3 }, /* ReportingPeriodicity */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, -2, 2 }, /* PartialSuccessIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -3, 1 }, /* ReportingPeriodicityRSRPMR */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, -4, 0 }, /* ReportingPeriodicityCSIR */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 } /* CellToReport-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_312 = { + sizeof(struct ResourceStatusRequest_IEs__value), + offsetof(struct ResourceStatusRequest_IEs__value, _asn_ctx), + offsetof(struct ResourceStatusRequest_IEs__value, present), + sizeof(((struct ResourceStatusRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_312, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_312, + asn_MAP_value_from_canonical_312, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_312 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_312, + 8, /* Elements count */ + &asn_SPC_value_specs_312 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResourceStatusRequest_IEs_309[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_310, memb_id_constraint_309 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResourceStatusRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_311, memb_criticality_constraint_309 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_312, + select_ResourceStatusRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_312, memb_value_constraint_309 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusRequest_IEs_tags_309[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusRequest_IEs_tag2el_309[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusRequest_IEs_specs_309 = { + sizeof(struct ResourceStatusRequest_IEs), + offsetof(struct ResourceStatusRequest_IEs, _asn_ctx), + asn_MAP_ResourceStatusRequest_IEs_tag2el_309, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusRequest_IEs = { + "ResourceStatusRequest-IEs", + "ResourceStatusRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusRequest_IEs_tags_309, + sizeof(asn_DEF_ResourceStatusRequest_IEs_tags_309) + /sizeof(asn_DEF_ResourceStatusRequest_IEs_tags_309[0]), /* 1 */ + asn_DEF_ResourceStatusRequest_IEs_tags_309, /* Same as above */ + sizeof(asn_DEF_ResourceStatusRequest_IEs_tags_309) + /sizeof(asn_DEF_ResourceStatusRequest_IEs_tags_309[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusRequest_IEs_309, + 3, /* Elements count */ + &asn_SPC_ResourceStatusRequest_IEs_specs_309 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_316[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs__value, choice.Measurement_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Measurement_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Measurement-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs__value, choice.MeasurementInitiationResult_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementInitiationResult_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeasurementInitiationResult-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_316[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* MeasurementInitiationResult-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_316 = { + sizeof(struct ResourceStatusResponse_IEs__value), + offsetof(struct ResourceStatusResponse_IEs__value, _asn_ctx), + offsetof(struct ResourceStatusResponse_IEs__value, present), + sizeof(((struct ResourceStatusResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_316, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_316 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_316, + 3, /* Elements count */ + &asn_SPC_value_specs_316 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResourceStatusResponse_IEs_313[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_314, memb_id_constraint_313 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResourceStatusResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_315, memb_criticality_constraint_313 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_316, + select_ResourceStatusResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_316, memb_value_constraint_313 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusResponse_IEs_tags_313[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusResponse_IEs_tag2el_313[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusResponse_IEs_specs_313 = { + sizeof(struct ResourceStatusResponse_IEs), + offsetof(struct ResourceStatusResponse_IEs, _asn_ctx), + asn_MAP_ResourceStatusResponse_IEs_tag2el_313, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusResponse_IEs = { + "ResourceStatusResponse-IEs", + "ResourceStatusResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusResponse_IEs_tags_313, + sizeof(asn_DEF_ResourceStatusResponse_IEs_tags_313) + /sizeof(asn_DEF_ResourceStatusResponse_IEs_tags_313[0]), /* 1 */ + asn_DEF_ResourceStatusResponse_IEs_tags_313, /* Same as above */ + sizeof(asn_DEF_ResourceStatusResponse_IEs_tags_313) + /sizeof(asn_DEF_ResourceStatusResponse_IEs_tags_313[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusResponse_IEs_313, + 3, /* Elements count */ + &asn_SPC_ResourceStatusResponse_IEs_specs_313 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_320[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs__value, choice.Measurement_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Measurement_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Measurement-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs__value, choice.CompleteFailureCauseInformation_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CompleteFailureCauseInformation_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CompleteFailureCauseInformation-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_320[] = { 0, 2, 3, 1 }; +static const unsigned asn_MAP_value_from_canonical_320[] = { 0, 3, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_320[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CompleteFailureCauseInformation-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_320 = { + sizeof(struct ResourceStatusFailure_IEs__value), + offsetof(struct ResourceStatusFailure_IEs__value, _asn_ctx), + offsetof(struct ResourceStatusFailure_IEs__value, present), + sizeof(((struct ResourceStatusFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_320, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_320, + asn_MAP_value_from_canonical_320, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_320 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_320, + 4, /* Elements count */ + &asn_SPC_value_specs_320 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResourceStatusFailure_IEs_317[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_318, memb_id_constraint_317 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResourceStatusFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_319, memb_criticality_constraint_317 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_320, + select_ResourceStatusFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_320, memb_value_constraint_317 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusFailure_IEs_tags_317[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusFailure_IEs_tag2el_317[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusFailure_IEs_specs_317 = { + sizeof(struct ResourceStatusFailure_IEs), + offsetof(struct ResourceStatusFailure_IEs, _asn_ctx), + asn_MAP_ResourceStatusFailure_IEs_tag2el_317, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusFailure_IEs = { + "ResourceStatusFailure-IEs", + "ResourceStatusFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusFailure_IEs_tags_317, + sizeof(asn_DEF_ResourceStatusFailure_IEs_tags_317) + /sizeof(asn_DEF_ResourceStatusFailure_IEs_tags_317[0]), /* 1 */ + asn_DEF_ResourceStatusFailure_IEs_tags_317, /* Same as above */ + sizeof(asn_DEF_ResourceStatusFailure_IEs_tags_317) + /sizeof(asn_DEF_ResourceStatusFailure_IEs_tags_317[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusFailure_IEs_317, + 3, /* Elements count */ + &asn_SPC_ResourceStatusFailure_IEs_specs_317 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_324[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate_IEs__value, choice.Measurement_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_Measurement_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Measurement-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate_IEs__value, choice.CellMeasurementResult_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellMeasurementResult_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellMeasurementResult-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_324[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CellMeasurementResult-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_324 = { + sizeof(struct ResourceStatusUpdate_IEs__value), + offsetof(struct ResourceStatusUpdate_IEs__value, _asn_ctx), + offsetof(struct ResourceStatusUpdate_IEs__value, present), + sizeof(((struct ResourceStatusUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_324, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_324 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_324, + 2, /* Elements count */ + &asn_SPC_value_specs_324 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResourceStatusUpdate_IEs_321[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_322, memb_id_constraint_321 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResourceStatusUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_323, memb_criticality_constraint_321 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_324, + select_ResourceStatusUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_324, memb_value_constraint_321 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusUpdate_IEs_tags_321[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusUpdate_IEs_tag2el_321[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusUpdate_IEs_specs_321 = { + sizeof(struct ResourceStatusUpdate_IEs), + offsetof(struct ResourceStatusUpdate_IEs, _asn_ctx), + asn_MAP_ResourceStatusUpdate_IEs_tag2el_321, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusUpdate_IEs = { + "ResourceStatusUpdate-IEs", + "ResourceStatusUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusUpdate_IEs_tags_321, + sizeof(asn_DEF_ResourceStatusUpdate_IEs_tags_321) + /sizeof(asn_DEF_ResourceStatusUpdate_IEs_tags_321[0]), /* 1 */ + asn_DEF_ResourceStatusUpdate_IEs_tags_321, /* Same as above */ + sizeof(asn_DEF_ResourceStatusUpdate_IEs_tags_321) + /sizeof(asn_DEF_ResourceStatusUpdate_IEs_tags_321[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusUpdate_IEs_321, + 3, /* Elements count */ + &asn_SPC_ResourceStatusUpdate_IEs_specs_321 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_328[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs__value, choice.MobilityParametersInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MobilityParametersInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MobilityParametersInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_328[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ECGI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 }, /* MobilityParametersInformation */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_328 = { + sizeof(struct MobilityChangeRequest_IEs__value), + offsetof(struct MobilityChangeRequest_IEs__value, _asn_ctx), + offsetof(struct MobilityChangeRequest_IEs__value, present), + sizeof(((struct MobilityChangeRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_328, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_328 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_328, + 3, /* Elements count */ + &asn_SPC_value_specs_328 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MobilityChangeRequest_IEs_325[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_326, memb_id_constraint_325 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_MobilityChangeRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_327, memb_criticality_constraint_325 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MobilityChangeRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_328, + select_MobilityChangeRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_328, memb_value_constraint_325 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeRequest_IEs_tags_325[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeRequest_IEs_tag2el_325[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeRequest_IEs_specs_325 = { + sizeof(struct MobilityChangeRequest_IEs), + offsetof(struct MobilityChangeRequest_IEs, _asn_ctx), + asn_MAP_MobilityChangeRequest_IEs_tag2el_325, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeRequest_IEs = { + "MobilityChangeRequest-IEs", + "MobilityChangeRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeRequest_IEs_tags_325, + sizeof(asn_DEF_MobilityChangeRequest_IEs_tags_325) + /sizeof(asn_DEF_MobilityChangeRequest_IEs_tags_325[0]), /* 1 */ + asn_DEF_MobilityChangeRequest_IEs_tags_325, /* Same as above */ + sizeof(asn_DEF_MobilityChangeRequest_IEs_tags_325) + /sizeof(asn_DEF_MobilityChangeRequest_IEs_tags_325[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeRequest_IEs_325, + 3, /* Elements count */ + &asn_SPC_MobilityChangeRequest_IEs_specs_325 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_332[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_332[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ECGI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_332 = { + sizeof(struct MobilityChangeAcknowledge_IEs__value), + offsetof(struct MobilityChangeAcknowledge_IEs__value, _asn_ctx), + offsetof(struct MobilityChangeAcknowledge_IEs__value, present), + sizeof(((struct MobilityChangeAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_332, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_332 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_332, + 2, /* Elements count */ + &asn_SPC_value_specs_332 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MobilityChangeAcknowledge_IEs_329[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_330, memb_id_constraint_329 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_MobilityChangeAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_331, memb_criticality_constraint_329 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MobilityChangeAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_332, + select_MobilityChangeAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_332, memb_value_constraint_329 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeAcknowledge_IEs_tags_329[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeAcknowledge_IEs_tag2el_329[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeAcknowledge_IEs_specs_329 = { + sizeof(struct MobilityChangeAcknowledge_IEs), + offsetof(struct MobilityChangeAcknowledge_IEs, _asn_ctx), + asn_MAP_MobilityChangeAcknowledge_IEs_tag2el_329, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeAcknowledge_IEs = { + "MobilityChangeAcknowledge-IEs", + "MobilityChangeAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeAcknowledge_IEs_tags_329, + sizeof(asn_DEF_MobilityChangeAcknowledge_IEs_tags_329) + /sizeof(asn_DEF_MobilityChangeAcknowledge_IEs_tags_329[0]), /* 1 */ + asn_DEF_MobilityChangeAcknowledge_IEs_tags_329, /* Same as above */ + sizeof(asn_DEF_MobilityChangeAcknowledge_IEs_tags_329) + /sizeof(asn_DEF_MobilityChangeAcknowledge_IEs_tags_329[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeAcknowledge_IEs_329, + 3, /* Elements count */ + &asn_SPC_MobilityChangeAcknowledge_IEs_specs_329 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_336[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs__value, choice.MobilityParametersModificationRange), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MobilityParametersModificationRange, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MobilityParametersModificationRange" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_336[] = { 0, 2, 3, 1 }; +static const unsigned asn_MAP_value_from_canonical_336[] = { 0, 3, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_336[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* ECGI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* MobilityParametersModificationRange */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_336 = { + sizeof(struct MobilityChangeFailure_IEs__value), + offsetof(struct MobilityChangeFailure_IEs__value, _asn_ctx), + offsetof(struct MobilityChangeFailure_IEs__value, present), + sizeof(((struct MobilityChangeFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_336, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_336, + asn_MAP_value_from_canonical_336, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_336 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_336, + 4, /* Elements count */ + &asn_SPC_value_specs_336 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MobilityChangeFailure_IEs_333[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_334, memb_id_constraint_333 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_MobilityChangeFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_335, memb_criticality_constraint_333 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct MobilityChangeFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_336, + select_MobilityChangeFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_336, memb_value_constraint_333 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_MobilityChangeFailure_IEs_tags_333[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MobilityChangeFailure_IEs_tag2el_333[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeFailure_IEs_specs_333 = { + sizeof(struct MobilityChangeFailure_IEs), + offsetof(struct MobilityChangeFailure_IEs, _asn_ctx), + asn_MAP_MobilityChangeFailure_IEs_tag2el_333, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityChangeFailure_IEs = { + "MobilityChangeFailure-IEs", + "MobilityChangeFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_MobilityChangeFailure_IEs_tags_333, + sizeof(asn_DEF_MobilityChangeFailure_IEs_tags_333) + /sizeof(asn_DEF_MobilityChangeFailure_IEs_tags_333[0]), /* 1 */ + asn_DEF_MobilityChangeFailure_IEs_tags_333, /* Same as above */ + sizeof(asn_DEF_MobilityChangeFailure_IEs_tags_333) + /sizeof(asn_DEF_MobilityChangeFailure_IEs_tags_333[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MobilityChangeFailure_IEs_333, + 3, /* Elements count */ + &asn_SPC_MobilityChangeFailure_IEs_specs_333 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_340[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.PCI), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.CRNTI), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_CRNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CRNTI" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.ShortMAC_I), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_ShortMAC_I, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ShortMAC-I" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.UE_RLF_Report_Container), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_UE_RLF_Report_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-RLF-Report-Container" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.RRCConnSetupIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RRCConnSetupIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RRCConnSetupIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.RRCConnReestabIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RRCConnReestabIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RRCConnReestabIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs__value, choice.UE_RLF_Report_Container_for_extended_bands), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_UE_RLF_Report_Container_for_extended_bands, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-RLF-Report-Container-for-extended-bands" + }, +}; +static const unsigned asn_MAP_value_to_canonical_340[] = { 0, 2, 3, 4, 7, 5, 6, 1 }; +static const unsigned asn_MAP_value_from_canonical_340[] = { 0, 7, 1, 2, 3, 5, 6, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_340[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* PCI */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 1 }, /* CRNTI */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, -1, 0 }, /* ShortMAC-I */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* UE-RLF-Report-Container */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* UE-RLF-Report-Container-for-extended-bands */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* RRCConnSetupIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 0 }, /* RRCConnReestabIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* ECGI */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_340 = { + sizeof(struct RLFIndication_IEs__value), + offsetof(struct RLFIndication_IEs__value, _asn_ctx), + offsetof(struct RLFIndication_IEs__value, present), + sizeof(((struct RLFIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_340, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_340, + asn_MAP_value_from_canonical_340, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_340 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_340, + 8, /* Elements count */ + &asn_SPC_value_specs_340 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RLFIndication_IEs_337[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_338, memb_id_constraint_337 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RLFIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_339, memb_criticality_constraint_337 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RLFIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_340, + select_RLFIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_340, memb_value_constraint_337 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RLFIndication_IEs_tags_337[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RLFIndication_IEs_tag2el_337[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RLFIndication_IEs_specs_337 = { + sizeof(struct RLFIndication_IEs), + offsetof(struct RLFIndication_IEs, _asn_ctx), + asn_MAP_RLFIndication_IEs_tag2el_337, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RLFIndication_IEs = { + "RLFIndication-IEs", + "RLFIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RLFIndication_IEs_tags_337, + sizeof(asn_DEF_RLFIndication_IEs_tags_337) + /sizeof(asn_DEF_RLFIndication_IEs_tags_337[0]), /* 1 */ + asn_DEF_RLFIndication_IEs_tags_337, /* Same as above */ + sizeof(asn_DEF_RLFIndication_IEs_tags_337) + /sizeof(asn_DEF_RLFIndication_IEs_tags_337[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RLFIndication_IEs_337, + 3, /* Elements count */ + &asn_SPC_RLFIndication_IEs_specs_337 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_344[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationRequest_IEs__value, choice.ServedCellsToActivate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToActivate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedCellsToActivate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_344[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedCellsToActivate */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_344 = { + sizeof(struct CellActivationRequest_IEs__value), + offsetof(struct CellActivationRequest_IEs__value, _asn_ctx), + offsetof(struct CellActivationRequest_IEs__value, present), + sizeof(((struct CellActivationRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_344, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_344 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_344, + 1, /* Elements count */ + &asn_SPC_value_specs_344 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellActivationRequest_IEs_341[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_342, memb_id_constraint_341 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellActivationRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellActivationRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_343, memb_criticality_constraint_341 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellActivationRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_344, + select_CellActivationRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_344, memb_value_constraint_341 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationRequest_IEs_tags_341[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationRequest_IEs_tag2el_341[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellActivationRequest_IEs_specs_341 = { + sizeof(struct CellActivationRequest_IEs), + offsetof(struct CellActivationRequest_IEs, _asn_ctx), + asn_MAP_CellActivationRequest_IEs_tag2el_341, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationRequest_IEs = { + "CellActivationRequest-IEs", + "CellActivationRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationRequest_IEs_tags_341, + sizeof(asn_DEF_CellActivationRequest_IEs_tags_341) + /sizeof(asn_DEF_CellActivationRequest_IEs_tags_341[0]), /* 1 */ + asn_DEF_CellActivationRequest_IEs_tags_341, /* Same as above */ + sizeof(asn_DEF_CellActivationRequest_IEs_tags_341) + /sizeof(asn_DEF_CellActivationRequest_IEs_tags_341[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationRequest_IEs_341, + 3, /* Elements count */ + &asn_SPC_CellActivationRequest_IEs_specs_341 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_348[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse_IEs__value, choice.ActivatedCellList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedCellList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ActivatedCellList" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_348[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ActivatedCellList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_348 = { + sizeof(struct CellActivationResponse_IEs__value), + offsetof(struct CellActivationResponse_IEs__value, _asn_ctx), + offsetof(struct CellActivationResponse_IEs__value, present), + sizeof(((struct CellActivationResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_348, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_348 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_348, + 2, /* Elements count */ + &asn_SPC_value_specs_348 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellActivationResponse_IEs_345[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_346, memb_id_constraint_345 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellActivationResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_347, memb_criticality_constraint_345 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellActivationResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_348, + select_CellActivationResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_348, memb_value_constraint_345 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationResponse_IEs_tags_345[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationResponse_IEs_tag2el_345[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellActivationResponse_IEs_specs_345 = { + sizeof(struct CellActivationResponse_IEs), + offsetof(struct CellActivationResponse_IEs, _asn_ctx), + asn_MAP_CellActivationResponse_IEs_tag2el_345, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationResponse_IEs = { + "CellActivationResponse-IEs", + "CellActivationResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationResponse_IEs_tags_345, + sizeof(asn_DEF_CellActivationResponse_IEs_tags_345) + /sizeof(asn_DEF_CellActivationResponse_IEs_tags_345[0]), /* 1 */ + asn_DEF_CellActivationResponse_IEs_tags_345, /* Same as above */ + sizeof(asn_DEF_CellActivationResponse_IEs_tags_345) + /sizeof(asn_DEF_CellActivationResponse_IEs_tags_345[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationResponse_IEs_345, + 3, /* Elements count */ + &asn_SPC_CellActivationResponse_IEs_specs_345 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_352[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_352[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_352[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_352[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_352 = { + sizeof(struct CellActivationFailure_IEs__value), + offsetof(struct CellActivationFailure_IEs__value, _asn_ctx), + offsetof(struct CellActivationFailure_IEs__value, present), + sizeof(((struct CellActivationFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_352, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_352, + asn_MAP_value_from_canonical_352, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_352 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_352, + 2, /* Elements count */ + &asn_SPC_value_specs_352 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellActivationFailure_IEs_349[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_350, memb_id_constraint_349 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_CellActivationFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_351, memb_criticality_constraint_349 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct CellActivationFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_352, + select_CellActivationFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_352, memb_value_constraint_349 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellActivationFailure_IEs_tags_349[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellActivationFailure_IEs_tag2el_349[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellActivationFailure_IEs_specs_349 = { + sizeof(struct CellActivationFailure_IEs), + offsetof(struct CellActivationFailure_IEs, _asn_ctx), + asn_MAP_CellActivationFailure_IEs_tag2el_349, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellActivationFailure_IEs = { + "CellActivationFailure-IEs", + "CellActivationFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_CellActivationFailure_IEs_tags_349, + sizeof(asn_DEF_CellActivationFailure_IEs_tags_349) + /sizeof(asn_DEF_CellActivationFailure_IEs_tags_349[0]), /* 1 */ + asn_DEF_CellActivationFailure_IEs_tags_349, /* Same as above */ + sizeof(asn_DEF_CellActivationFailure_IEs_tags_349) + /sizeof(asn_DEF_CellActivationFailure_IEs_tags_349[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellActivationFailure_IEs_349, + 3, /* Elements count */ + &asn_SPC_CellActivationFailure_IEs_specs_349 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_356[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2Release_IEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_356[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_356 = { + sizeof(struct X2Release_IEs__value), + offsetof(struct X2Release_IEs__value, _asn_ctx), + offsetof(struct X2Release_IEs__value, present), + sizeof(((struct X2Release_IEs__value *)0)->present), + asn_MAP_value_tag2el_356, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_356 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_356, + 1, /* Elements count */ + &asn_SPC_value_specs_356 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2Release_IEs_353[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2Release_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_354, memb_id_constraint_353 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2Release_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2Release_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_355, memb_criticality_constraint_353 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2Release_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_356, + select_X2Release_IEs_value_type, + { 0, &asn_PER_memb_value_constr_356, memb_value_constraint_353 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2Release_IEs_tags_353[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2Release_IEs_tag2el_353[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2Release_IEs_specs_353 = { + sizeof(struct X2Release_IEs), + offsetof(struct X2Release_IEs, _asn_ctx), + asn_MAP_X2Release_IEs_tag2el_353, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2Release_IEs = { + "X2Release-IEs", + "X2Release-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2Release_IEs_tags_353, + sizeof(asn_DEF_X2Release_IEs_tags_353) + /sizeof(asn_DEF_X2Release_IEs_tags_353[0]), /* 1 */ + asn_DEF_X2Release_IEs_tags_353, /* Same as above */ + sizeof(asn_DEF_X2Release_IEs_tags_353) + /sizeof(asn_DEF_X2Release_IEs_tags_353[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2Release_IEs_353, + 3, /* Elements count */ + &asn_SPC_X2Release_IEs_specs_353 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_360[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer_IEs__value, choice.RNL_Header), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RNL_Header, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RNL-Header" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer_IEs__value, choice.X2AP_Message), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_X2AP_Message, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "X2AP-Message" + }, +}; +static const unsigned asn_MAP_value_to_canonical_360[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_360[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_360[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* X2AP-Message */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RNL-Header */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_360 = { + sizeof(struct X2APMessageTransfer_IEs__value), + offsetof(struct X2APMessageTransfer_IEs__value, _asn_ctx), + offsetof(struct X2APMessageTransfer_IEs__value, present), + sizeof(((struct X2APMessageTransfer_IEs__value *)0)->present), + asn_MAP_value_tag2el_360, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_360, + asn_MAP_value_from_canonical_360, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_360 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_360, + 2, /* Elements count */ + &asn_SPC_value_specs_360 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2APMessageTransfer_IEs_357[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_358, memb_id_constraint_357 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2APMessageTransfer_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_359, memb_criticality_constraint_357 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_360, + select_X2APMessageTransfer_IEs_value_type, + { 0, &asn_PER_memb_value_constr_360, memb_value_constraint_357 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2APMessageTransfer_IEs_tags_357[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2APMessageTransfer_IEs_tag2el_357[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2APMessageTransfer_IEs_specs_357 = { + sizeof(struct X2APMessageTransfer_IEs), + offsetof(struct X2APMessageTransfer_IEs, _asn_ctx), + asn_MAP_X2APMessageTransfer_IEs_tag2el_357, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2APMessageTransfer_IEs = { + "X2APMessageTransfer-IEs", + "X2APMessageTransfer-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2APMessageTransfer_IEs_tags_357, + sizeof(asn_DEF_X2APMessageTransfer_IEs_tags_357) + /sizeof(asn_DEF_X2APMessageTransfer_IEs_tags_357[0]), /* 1 */ + asn_DEF_X2APMessageTransfer_IEs_tags_357, /* Same as above */ + sizeof(asn_DEF_X2APMessageTransfer_IEs_tags_357) + /sizeof(asn_DEF_X2APMessageTransfer_IEs_tags_357[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2APMessageTransfer_IEs_357, + 3, /* Elements count */ + &asn_SPC_X2APMessageTransfer_IEs_specs_357 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_364[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.UESecurityCapabilities), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UESecurityCapabilities" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.SeNBSecurityKey), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_SeNBSecurityKey, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SeNBSecurityKey" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.UEAggregateMaximumBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEAggregateMaximumBitRate" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.PLMN_Identity), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.E_RABs_ToBeAdded_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.MeNBtoSeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.CSGMembershipStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_CSGMembershipStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CSGMembershipStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs__value, choice.ExpectedUEBehaviour), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEBehaviour, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExpectedUEBehaviour" + }, +}; +static const unsigned asn_MAP_value_to_canonical_364[] = { 0, 8, 2, 4, 6, 7, 1, 3, 5, 9 }; +static const unsigned asn_MAP_value_from_canonical_364[] = { 0, 6, 2, 7, 3, 8, 4, 5, 1, 9 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_364[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* SeNBSecurityKey */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* PLMN-Identity */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 0 }, /* MeNBtoSeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 0 }, /* CSGMembershipStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 3 }, /* UESecurityCapabilities */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 2 }, /* UEAggregateMaximumBitRate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 1 }, /* E-RABs-ToBeAdded-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -3, 0 } /* ExpectedUEBehaviour */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_364 = { + sizeof(struct SeNBAdditionRequest_IEs__value), + offsetof(struct SeNBAdditionRequest_IEs__value, _asn_ctx), + offsetof(struct SeNBAdditionRequest_IEs__value, present), + sizeof(((struct SeNBAdditionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_364, + 10, /* Count of tags in the map */ + asn_MAP_value_to_canonical_364, + asn_MAP_value_from_canonical_364, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_364 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_364, + 10, /* Elements count */ + &asn_SPC_value_specs_364 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBAdditionRequest_IEs_361[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_362, memb_id_constraint_361 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBAdditionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_363, memb_criticality_constraint_361 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_364, + select_SeNBAdditionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_364, memb_value_constraint_361 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequest_IEs_tags_361[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequest_IEs_tag2el_361[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequest_IEs_specs_361 = { + sizeof(struct SeNBAdditionRequest_IEs), + offsetof(struct SeNBAdditionRequest_IEs, _asn_ctx), + asn_MAP_SeNBAdditionRequest_IEs_tag2el_361, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequest_IEs = { + "SeNBAdditionRequest-IEs", + "SeNBAdditionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequest_IEs_tags_361, + sizeof(asn_DEF_SeNBAdditionRequest_IEs_tags_361) + /sizeof(asn_DEF_SeNBAdditionRequest_IEs_tags_361[0]), /* 1 */ + asn_DEF_SeNBAdditionRequest_IEs_tags_361, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequest_IEs_tags_361) + /sizeof(asn_DEF_SeNBAdditionRequest_IEs_tags_361[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequest_IEs_361, + 3, /* Elements count */ + &asn_SPC_SeNBAdditionRequest_IEs_specs_361 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_368[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.E_RAB_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.SeNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SeNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SeNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.TransportLayerAddress), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_TransportLayerAddress, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TransportLayerAddress" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, choice.TunnelInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TunnelInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TunnelInformation" + }, +}; +static const unsigned asn_MAP_value_to_canonical_368[] = { 0, 6, 5, 3, 1, 2, 4, 7 }; +static const unsigned asn_MAP_value_from_canonical_368[] = { 0, 4, 5, 3, 6, 2, 1, 7 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_368[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, 0, 0 }, /* TransportLayerAddress */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* SeNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 3 }, /* E-RABs-Admitted-ToBeAdded-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 2 }, /* E-RAB-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -3, 0 } /* TunnelInformation */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_368 = { + sizeof(struct SeNBAdditionRequestAcknowledge_IEs__value), + offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct SeNBAdditionRequestAcknowledge_IEs__value, present), + sizeof(((struct SeNBAdditionRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_368, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_368, + asn_MAP_value_from_canonical_368, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_368 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_368, + 8, /* Elements count */ + &asn_SPC_value_specs_368 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBAdditionRequestAcknowledge_IEs_365[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_366, memb_id_constraint_365 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBAdditionRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_367, memb_criticality_constraint_365 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_368, + select_SeNBAdditionRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_368, memb_value_constraint_365 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequestAcknowledge_IEs_tag2el_365[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestAcknowledge_IEs_specs_365 = { + sizeof(struct SeNBAdditionRequestAcknowledge_IEs), + offsetof(struct SeNBAdditionRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_SeNBAdditionRequestAcknowledge_IEs_tag2el_365, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestAcknowledge_IEs = { + "SeNBAdditionRequestAcknowledge-IEs", + "SeNBAdditionRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365, + sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365) + /sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365[0]), /* 1 */ + asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365) + /sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_IEs_tags_365[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequestAcknowledge_IEs_365, + 3, /* Elements count */ + &asn_SPC_SeNBAdditionRequestAcknowledge_IEs_specs_365 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_372[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_372[] = { 0, 3, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_372[] = { 0, 3, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_372[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_372 = { + sizeof(struct SeNBAdditionRequestReject_IEs__value), + offsetof(struct SeNBAdditionRequestReject_IEs__value, _asn_ctx), + offsetof(struct SeNBAdditionRequestReject_IEs__value, present), + sizeof(((struct SeNBAdditionRequestReject_IEs__value *)0)->present), + asn_MAP_value_tag2el_372, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_372, + asn_MAP_value_from_canonical_372, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_372 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_372, + 4, /* Elements count */ + &asn_SPC_value_specs_372 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBAdditionRequestReject_IEs_369[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_370, memb_id_constraint_369 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBAdditionRequestReject_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_371, memb_criticality_constraint_369 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_372, + select_SeNBAdditionRequestReject_IEs_value_type, + { 0, &asn_PER_memb_value_constr_372, memb_value_constraint_369 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequestReject_IEs_tags_369[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequestReject_IEs_tag2el_369[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestReject_IEs_specs_369 = { + sizeof(struct SeNBAdditionRequestReject_IEs), + offsetof(struct SeNBAdditionRequestReject_IEs, _asn_ctx), + asn_MAP_SeNBAdditionRequestReject_IEs_tag2el_369, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestReject_IEs = { + "SeNBAdditionRequestReject-IEs", + "SeNBAdditionRequestReject-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequestReject_IEs_tags_369, + sizeof(asn_DEF_SeNBAdditionRequestReject_IEs_tags_369) + /sizeof(asn_DEF_SeNBAdditionRequestReject_IEs_tags_369[0]), /* 1 */ + asn_DEF_SeNBAdditionRequestReject_IEs_tags_369, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequestReject_IEs_tags_369) + /sizeof(asn_DEF_SeNBAdditionRequestReject_IEs_tags_369[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequestReject_IEs_369, + 3, /* Elements count */ + &asn_SPC_SeNBAdditionRequestReject_IEs_specs_369 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_376[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs__value, choice.ResponseInformationSeNBReconfComp), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_ResponseInformationSeNBReconfComp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResponseInformationSeNBReconfComp" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_376[] = { 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_376[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_376[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* success */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_376 = { + sizeof(struct SeNBReconfigurationComplete_IEs__value), + offsetof(struct SeNBReconfigurationComplete_IEs__value, _asn_ctx), + offsetof(struct SeNBReconfigurationComplete_IEs__value, present), + sizeof(((struct SeNBReconfigurationComplete_IEs__value *)0)->present), + asn_MAP_value_tag2el_376, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_376, + asn_MAP_value_from_canonical_376, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_376 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_376, + 3, /* Elements count */ + &asn_SPC_value_specs_376 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBReconfigurationComplete_IEs_373[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_374, memb_id_constraint_373 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBReconfigurationComplete_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_375, memb_criticality_constraint_373 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_376, + select_SeNBReconfigurationComplete_IEs_value_type, + { 0, &asn_PER_memb_value_constr_376, memb_value_constraint_373 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReconfigurationComplete_IEs_tags_373[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReconfigurationComplete_IEs_tag2el_373[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBReconfigurationComplete_IEs_specs_373 = { + sizeof(struct SeNBReconfigurationComplete_IEs), + offsetof(struct SeNBReconfigurationComplete_IEs, _asn_ctx), + asn_MAP_SeNBReconfigurationComplete_IEs_tag2el_373, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReconfigurationComplete_IEs = { + "SeNBReconfigurationComplete-IEs", + "SeNBReconfigurationComplete-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReconfigurationComplete_IEs_tags_373, + sizeof(asn_DEF_SeNBReconfigurationComplete_IEs_tags_373) + /sizeof(asn_DEF_SeNBReconfigurationComplete_IEs_tags_373[0]), /* 1 */ + asn_DEF_SeNBReconfigurationComplete_IEs_tags_373, /* Same as above */ + sizeof(asn_DEF_SeNBReconfigurationComplete_IEs_tags_373) + /sizeof(asn_DEF_SeNBReconfigurationComplete_IEs_tags_373[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReconfigurationComplete_IEs_373, + 3, /* Elements count */ + &asn_SPC_SeNBReconfigurationComplete_IEs_specs_373 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_380[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.SCGChangeIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SCGChangeIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SCGChangeIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.PLMN_Identity), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.UE_ContextInformationSeNBModReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformationSeNBModReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextInformationSeNBModReq" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.MeNBtoSeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.CSGMembershipStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_CSGMembershipStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CSGMembershipStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_380[] = { 0, 7, 3, 5, 2, 6, 4, 1 }; +static const unsigned asn_MAP_value_from_canonical_380[] = { 0, 7, 4, 2, 6, 3, 5, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_380[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 7, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 1 }, /* PLMN-Identity */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, -1, 0 }, /* MeNBtoSeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 1 }, /* SCGChangeIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 0 }, /* CSGMembershipStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* UE-ContextInformationSeNBModReq */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_380 = { + sizeof(struct SeNBModificationRequest_IEs__value), + offsetof(struct SeNBModificationRequest_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationRequest_IEs__value, present), + sizeof(((struct SeNBModificationRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_380, + 11, /* Count of tags in the map */ + asn_MAP_value_to_canonical_380, + asn_MAP_value_from_canonical_380, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_380 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_380, + 8, /* Elements count */ + &asn_SPC_value_specs_380 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationRequest_IEs_377[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_378, memb_id_constraint_377 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_379, memb_criticality_constraint_377 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_380, + select_SeNBModificationRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_380, memb_value_constraint_377 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequest_IEs_tags_377[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequest_IEs_tag2el_377[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequest_IEs_specs_377 = { + sizeof(struct SeNBModificationRequest_IEs), + offsetof(struct SeNBModificationRequest_IEs, _asn_ctx), + asn_MAP_SeNBModificationRequest_IEs_tag2el_377, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequest_IEs = { + "SeNBModificationRequest-IEs", + "SeNBModificationRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequest_IEs_tags_377, + sizeof(asn_DEF_SeNBModificationRequest_IEs_tags_377) + /sizeof(asn_DEF_SeNBModificationRequest_IEs_tags_377[0]), /* 1 */ + asn_DEF_SeNBModificationRequest_IEs_tags_377, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequest_IEs_tags_377) + /sizeof(asn_DEF_SeNBModificationRequest_IEs_tags_377[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequest_IEs_377, + 3, /* Elements count */ + &asn_SPC_SeNBModificationRequest_IEs_specs_377 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_384[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_ModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-ModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeModified_ModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_ModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeModified-ModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_ModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeReleased-ModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.E_RAB_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.SeNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SeNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SeNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_384[] = { 0, 7, 5, 1, 2, 3, 4, 6 }; +static const unsigned asn_MAP_value_from_canonical_384[] = { 0, 3, 4, 5, 6, 2, 7, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_384[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 7, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 0 }, /* SeNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 4 }, /* E-RABs-Admitted-ToBeAdded-ModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 3 }, /* E-RABs-Admitted-ToBeModified-ModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 2 }, /* E-RABs-Admitted-ToBeReleased-ModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -3, 1 }, /* E-RAB-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -4, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_384 = { + sizeof(struct SeNBModificationRequestAcknowledge_IEs__value), + offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationRequestAcknowledge_IEs__value, present), + sizeof(((struct SeNBModificationRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_384, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_384, + asn_MAP_value_from_canonical_384, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_384 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_384, + 8, /* Elements count */ + &asn_SPC_value_specs_384 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationRequestAcknowledge_IEs_381[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_382, memb_id_constraint_381 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_383, memb_criticality_constraint_381 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_384, + select_SeNBModificationRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_384, memb_value_constraint_381 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequestAcknowledge_IEs_tag2el_381[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestAcknowledge_IEs_specs_381 = { + sizeof(struct SeNBModificationRequestAcknowledge_IEs), + offsetof(struct SeNBModificationRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_SeNBModificationRequestAcknowledge_IEs_tag2el_381, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestAcknowledge_IEs = { + "SeNBModificationRequestAcknowledge-IEs", + "SeNBModificationRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381, + sizeof(asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381) + /sizeof(asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381[0]), /* 1 */ + asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381) + /sizeof(asn_DEF_SeNBModificationRequestAcknowledge_IEs_tags_381[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequestAcknowledge_IEs_381, + 3, /* Elements count */ + &asn_SPC_SeNBModificationRequestAcknowledge_IEs_specs_381 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_388[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_388[] = { 0, 3, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_388[] = { 0, 3, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_388[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_388 = { + sizeof(struct SeNBModificationRequestReject_IEs__value), + offsetof(struct SeNBModificationRequestReject_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationRequestReject_IEs__value, present), + sizeof(((struct SeNBModificationRequestReject_IEs__value *)0)->present), + asn_MAP_value_tag2el_388, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_388, + asn_MAP_value_from_canonical_388, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_388 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_388, + 4, /* Elements count */ + &asn_SPC_value_specs_388 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationRequestReject_IEs_385[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_386, memb_id_constraint_385 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationRequestReject_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_387, memb_criticality_constraint_385 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_388, + select_SeNBModificationRequestReject_IEs_value_type, + { 0, &asn_PER_memb_value_constr_388, memb_value_constraint_385 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequestReject_IEs_tags_385[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequestReject_IEs_tag2el_385[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestReject_IEs_specs_385 = { + sizeof(struct SeNBModificationRequestReject_IEs), + offsetof(struct SeNBModificationRequestReject_IEs, _asn_ctx), + asn_MAP_SeNBModificationRequestReject_IEs_tag2el_385, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestReject_IEs = { + "SeNBModificationRequestReject-IEs", + "SeNBModificationRequestReject-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequestReject_IEs_tags_385, + sizeof(asn_DEF_SeNBModificationRequestReject_IEs_tags_385) + /sizeof(asn_DEF_SeNBModificationRequestReject_IEs_tags_385[0]), /* 1 */ + asn_DEF_SeNBModificationRequestReject_IEs_tags_385, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequestReject_IEs_tags_385) + /sizeof(asn_DEF_SeNBModificationRequestReject_IEs_tags_385[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequestReject_IEs_385, + 3, /* Elements count */ + &asn_SPC_SeNBModificationRequestReject_IEs_specs_385 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_392[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.SCGChangeIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SCGChangeIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SCGChangeIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.E_RABs_ToBeReleased_ModReqd), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_ModReqd, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-ModReqd" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.SeNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SeNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SeNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_392[] = { 0, 5, 4, 2, 3, 1 }; +static const unsigned asn_MAP_value_from_canonical_392[] = { 0, 5, 3, 4, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_392[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SeNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* SCGChangeIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* E-RABs-ToBeReleased-ModReqd */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_392 = { + sizeof(struct SeNBModificationRequired_IEs__value), + offsetof(struct SeNBModificationRequired_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationRequired_IEs__value, present), + sizeof(((struct SeNBModificationRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_392, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_392, + asn_MAP_value_from_canonical_392, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_392 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_392, + 6, /* Elements count */ + &asn_SPC_value_specs_392 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationRequired_IEs_389[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_390, memb_id_constraint_389 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_391, memb_criticality_constraint_389 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_392, + select_SeNBModificationRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_392, memb_value_constraint_389 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequired_IEs_tags_389[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequired_IEs_tag2el_389[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequired_IEs_specs_389 = { + sizeof(struct SeNBModificationRequired_IEs), + offsetof(struct SeNBModificationRequired_IEs, _asn_ctx), + asn_MAP_SeNBModificationRequired_IEs_tag2el_389, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequired_IEs = { + "SeNBModificationRequired-IEs", + "SeNBModificationRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequired_IEs_tags_389, + sizeof(asn_DEF_SeNBModificationRequired_IEs_tags_389) + /sizeof(asn_DEF_SeNBModificationRequired_IEs_tags_389[0]), /* 1 */ + asn_DEF_SeNBModificationRequired_IEs_tags_389, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequired_IEs_tags_389) + /sizeof(asn_DEF_SeNBModificationRequired_IEs_tags_389[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequired_IEs_389, + 3, /* Elements count */ + &asn_SPC_SeNBModificationRequired_IEs_specs_389 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_396[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs__value, choice.MeNBtoSeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_396[] = { 0, 3, 1, 2 }; +static const unsigned asn_MAP_value_from_canonical_396[] = { 0, 2, 3, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_396[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* MeNBtoSeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_396 = { + sizeof(struct SeNBModificationConfirm_IEs__value), + offsetof(struct SeNBModificationConfirm_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationConfirm_IEs__value, present), + sizeof(((struct SeNBModificationConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_396, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_396, + asn_MAP_value_from_canonical_396, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_396 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_396, + 4, /* Elements count */ + &asn_SPC_value_specs_396 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationConfirm_IEs_393[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_394, memb_id_constraint_393 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_395, memb_criticality_constraint_393 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_396, + select_SeNBModificationConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_396, memb_value_constraint_393 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationConfirm_IEs_tags_393[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationConfirm_IEs_tag2el_393[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationConfirm_IEs_specs_393 = { + sizeof(struct SeNBModificationConfirm_IEs), + offsetof(struct SeNBModificationConfirm_IEs, _asn_ctx), + asn_MAP_SeNBModificationConfirm_IEs_tag2el_393, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationConfirm_IEs = { + "SeNBModificationConfirm-IEs", + "SeNBModificationConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationConfirm_IEs_tags_393, + sizeof(asn_DEF_SeNBModificationConfirm_IEs_tags_393) + /sizeof(asn_DEF_SeNBModificationConfirm_IEs_tags_393[0]), /* 1 */ + asn_DEF_SeNBModificationConfirm_IEs_tags_393, /* Same as above */ + sizeof(asn_DEF_SeNBModificationConfirm_IEs_tags_393) + /sizeof(asn_DEF_SeNBModificationConfirm_IEs_tags_393[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationConfirm_IEs_393, + 3, /* Elements count */ + &asn_SPC_SeNBModificationConfirm_IEs_specs_393 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_400[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs__value, choice.MeNBtoSeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_400[] = { 0, 4, 2, 3, 1 }; +static const unsigned asn_MAP_value_from_canonical_400[] = { 0, 4, 2, 3, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_400[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* MeNBtoSeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_400 = { + sizeof(struct SeNBModificationRefuse_IEs__value), + offsetof(struct SeNBModificationRefuse_IEs__value, _asn_ctx), + offsetof(struct SeNBModificationRefuse_IEs__value, present), + sizeof(((struct SeNBModificationRefuse_IEs__value *)0)->present), + asn_MAP_value_tag2el_400, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_400, + asn_MAP_value_from_canonical_400, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_400 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_400, + 5, /* Elements count */ + &asn_SPC_value_specs_400 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBModificationRefuse_IEs_397[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_398, memb_id_constraint_397 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBModificationRefuse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_399, memb_criticality_constraint_397 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_400, + select_SeNBModificationRefuse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_400, memb_value_constraint_397 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRefuse_IEs_tags_397[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRefuse_IEs_tag2el_397[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRefuse_IEs_specs_397 = { + sizeof(struct SeNBModificationRefuse_IEs), + offsetof(struct SeNBModificationRefuse_IEs, _asn_ctx), + asn_MAP_SeNBModificationRefuse_IEs_tag2el_397, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRefuse_IEs = { + "SeNBModificationRefuse-IEs", + "SeNBModificationRefuse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRefuse_IEs_tags_397, + sizeof(asn_DEF_SeNBModificationRefuse_IEs_tags_397) + /sizeof(asn_DEF_SeNBModificationRefuse_IEs_tags_397[0]), /* 1 */ + asn_DEF_SeNBModificationRefuse_IEs_tags_397, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRefuse_IEs_tags_397) + /sizeof(asn_DEF_SeNBModificationRefuse_IEs_tags_397[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRefuse_IEs_397, + 3, /* Elements count */ + &asn_SPC_SeNBModificationRefuse_IEs_specs_397 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_404[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.E_RABs_ToBeReleased_List_RelReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_List_RelReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-List-RelReq" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.UE_ContextKeptIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_UE_ContextKeptIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextKeptIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs__value, choice.MakeBeforeBreakIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_MakeBeforeBreakIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MakeBeforeBreakIndicator" + }, +}; +static const unsigned asn_MAP_value_to_canonical_404[] = { 0, 4, 3, 5, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_404[] = { 0, 5, 4, 2, 1, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_404[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 1 }, /* UE-ContextKeptIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, -1, 0 }, /* MakeBeforeBreakIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* E-RABs-ToBeReleased-List-RelReq */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_404 = { + sizeof(struct SeNBReleaseRequest_IEs__value), + offsetof(struct SeNBReleaseRequest_IEs__value, _asn_ctx), + offsetof(struct SeNBReleaseRequest_IEs__value, present), + sizeof(((struct SeNBReleaseRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_404, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_404, + asn_MAP_value_from_canonical_404, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_404 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_404, + 6, /* Elements count */ + &asn_SPC_value_specs_404 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBReleaseRequest_IEs_401[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_402, memb_id_constraint_401 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBReleaseRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_403, memb_criticality_constraint_401 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_404, + select_SeNBReleaseRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_404, memb_value_constraint_401 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseRequest_IEs_tags_401[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseRequest_IEs_tag2el_401[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequest_IEs_specs_401 = { + sizeof(struct SeNBReleaseRequest_IEs), + offsetof(struct SeNBReleaseRequest_IEs, _asn_ctx), + asn_MAP_SeNBReleaseRequest_IEs_tag2el_401, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequest_IEs = { + "SeNBReleaseRequest-IEs", + "SeNBReleaseRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseRequest_IEs_tags_401, + sizeof(asn_DEF_SeNBReleaseRequest_IEs_tags_401) + /sizeof(asn_DEF_SeNBReleaseRequest_IEs_tags_401[0]), /* 1 */ + asn_DEF_SeNBReleaseRequest_IEs_tags_401, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseRequest_IEs_tags_401) + /sizeof(asn_DEF_SeNBReleaseRequest_IEs_tags_401[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseRequest_IEs_401, + 3, /* Elements count */ + &asn_SPC_SeNBReleaseRequest_IEs_specs_401 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_408[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_408[] = { 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_408[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_408[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_408 = { + sizeof(struct SeNBReleaseRequired_IEs__value), + offsetof(struct SeNBReleaseRequired_IEs__value, _asn_ctx), + offsetof(struct SeNBReleaseRequired_IEs__value, present), + sizeof(((struct SeNBReleaseRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_408, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_408, + asn_MAP_value_from_canonical_408, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_408 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_408, + 3, /* Elements count */ + &asn_SPC_value_specs_408 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBReleaseRequired_IEs_405[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_406, memb_id_constraint_405 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBReleaseRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_407, memb_criticality_constraint_405 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_408, + select_SeNBReleaseRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_408, memb_value_constraint_405 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseRequired_IEs_tags_405[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseRequired_IEs_tag2el_405[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequired_IEs_specs_405 = { + sizeof(struct SeNBReleaseRequired_IEs), + offsetof(struct SeNBReleaseRequired_IEs, _asn_ctx), + asn_MAP_SeNBReleaseRequired_IEs_tag2el_405, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequired_IEs = { + "SeNBReleaseRequired-IEs", + "SeNBReleaseRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseRequired_IEs_tags_405, + sizeof(asn_DEF_SeNBReleaseRequired_IEs_tags_405) + /sizeof(asn_DEF_SeNBReleaseRequired_IEs_tags_405[0]), /* 1 */ + asn_DEF_SeNBReleaseRequired_IEs_tags_405, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseRequired_IEs_tags_405) + /sizeof(asn_DEF_SeNBReleaseRequired_IEs_tags_405[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseRequired_IEs_405, + 3, /* Elements count */ + &asn_SPC_SeNBReleaseRequired_IEs_specs_405 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_412[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs__value, choice.E_RABs_ToBeReleased_List_RelConf), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_List_RelConf, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-List-RelConf" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_412[] = { 0, 3, 1, 2 }; +static const unsigned asn_MAP_value_from_canonical_412[] = { 0, 2, 3, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_412[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* E-RABs-ToBeReleased-List-RelConf */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_412 = { + sizeof(struct SeNBReleaseConfirm_IEs__value), + offsetof(struct SeNBReleaseConfirm_IEs__value, _asn_ctx), + offsetof(struct SeNBReleaseConfirm_IEs__value, present), + sizeof(((struct SeNBReleaseConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_412, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_412, + asn_MAP_value_from_canonical_412, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_412 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_412, + 4, /* Elements count */ + &asn_SPC_value_specs_412 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBReleaseConfirm_IEs_409[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_410, memb_id_constraint_409 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBReleaseConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_411, memb_criticality_constraint_409 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_412, + select_SeNBReleaseConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_412, memb_value_constraint_409 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseConfirm_IEs_tags_409[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseConfirm_IEs_tag2el_409[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseConfirm_IEs_specs_409 = { + sizeof(struct SeNBReleaseConfirm_IEs), + offsetof(struct SeNBReleaseConfirm_IEs, _asn_ctx), + asn_MAP_SeNBReleaseConfirm_IEs_tag2el_409, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseConfirm_IEs = { + "SeNBReleaseConfirm-IEs", + "SeNBReleaseConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseConfirm_IEs_tags_409, + sizeof(asn_DEF_SeNBReleaseConfirm_IEs_tags_409) + /sizeof(asn_DEF_SeNBReleaseConfirm_IEs_tags_409[0]), /* 1 */ + asn_DEF_SeNBReleaseConfirm_IEs_tags_409, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseConfirm_IEs_tags_409) + /sizeof(asn_DEF_SeNBReleaseConfirm_IEs_tags_409[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseConfirm_IEs_409, + 3, /* Elements count */ + &asn_SPC_SeNBReleaseConfirm_IEs_specs_409 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_416[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs__value, choice.E_RABs_SubjectToCounterCheck_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToCounterCheck_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToCounterCheck-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_416[] = { 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_416[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_416[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* E-RABs-SubjectToCounterCheck-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_416 = { + sizeof(struct SeNBCounterCheckRequest_IEs__value), + offsetof(struct SeNBCounterCheckRequest_IEs__value, _asn_ctx), + offsetof(struct SeNBCounterCheckRequest_IEs__value, present), + sizeof(((struct SeNBCounterCheckRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_416, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_416, + asn_MAP_value_from_canonical_416, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_416 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_416, + 3, /* Elements count */ + &asn_SPC_value_specs_416 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SeNBCounterCheckRequest_IEs_413[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_414, memb_id_constraint_413 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SeNBCounterCheckRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_415, memb_criticality_constraint_413 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_416, + select_SeNBCounterCheckRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_416, memb_value_constraint_413 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBCounterCheckRequest_IEs_tags_413[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBCounterCheckRequest_IEs_tag2el_413[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SeNBCounterCheckRequest_IEs_specs_413 = { + sizeof(struct SeNBCounterCheckRequest_IEs), + offsetof(struct SeNBCounterCheckRequest_IEs, _asn_ctx), + asn_MAP_SeNBCounterCheckRequest_IEs_tag2el_413, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBCounterCheckRequest_IEs = { + "SeNBCounterCheckRequest-IEs", + "SeNBCounterCheckRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SeNBCounterCheckRequest_IEs_tags_413, + sizeof(asn_DEF_SeNBCounterCheckRequest_IEs_tags_413) + /sizeof(asn_DEF_SeNBCounterCheckRequest_IEs_tags_413[0]), /* 1 */ + asn_DEF_SeNBCounterCheckRequest_IEs_tags_413, /* Same as above */ + sizeof(asn_DEF_SeNBCounterCheckRequest_IEs_tags_413) + /sizeof(asn_DEF_SeNBCounterCheckRequest_IEs_tags_413[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBCounterCheckRequest_IEs_413, + 3, /* Elements count */ + &asn_SPC_SeNBCounterCheckRequest_IEs_specs_413 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_420[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest_IEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest_IEs__value, choice.X2BenefitValue), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_X2BenefitValue, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "X2BenefitValue" + }, +}; +static const unsigned asn_MAP_value_to_canonical_420[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_420[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_420[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* X2BenefitValue */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_420 = { + sizeof(struct X2RemovalRequest_IEs__value), + offsetof(struct X2RemovalRequest_IEs__value, _asn_ctx), + offsetof(struct X2RemovalRequest_IEs__value, present), + sizeof(((struct X2RemovalRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_420, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_420, + asn_MAP_value_from_canonical_420, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_420 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_420, + 2, /* Elements count */ + &asn_SPC_value_specs_420 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2RemovalRequest_IEs_417[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_418, memb_id_constraint_417 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2RemovalRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_419, memb_criticality_constraint_417 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_420, + select_X2RemovalRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_420, memb_value_constraint_417 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalRequest_IEs_tags_417[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalRequest_IEs_tag2el_417[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2RemovalRequest_IEs_specs_417 = { + sizeof(struct X2RemovalRequest_IEs), + offsetof(struct X2RemovalRequest_IEs, _asn_ctx), + asn_MAP_X2RemovalRequest_IEs_tag2el_417, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalRequest_IEs = { + "X2RemovalRequest-IEs", + "X2RemovalRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalRequest_IEs_tags_417, + sizeof(asn_DEF_X2RemovalRequest_IEs_tags_417) + /sizeof(asn_DEF_X2RemovalRequest_IEs_tags_417[0]), /* 1 */ + asn_DEF_X2RemovalRequest_IEs_tags_417, /* Same as above */ + sizeof(asn_DEF_X2RemovalRequest_IEs_tags_417) + /sizeof(asn_DEF_X2RemovalRequest_IEs_tags_417[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalRequest_IEs_417, + 3, /* Elements count */ + &asn_SPC_X2RemovalRequest_IEs_specs_417 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_424[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse_IEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_424[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_424 = { + sizeof(struct X2RemovalResponse_IEs__value), + offsetof(struct X2RemovalResponse_IEs__value, _asn_ctx), + offsetof(struct X2RemovalResponse_IEs__value, present), + sizeof(((struct X2RemovalResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_424, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_424 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_424, + 2, /* Elements count */ + &asn_SPC_value_specs_424 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2RemovalResponse_IEs_421[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_422, memb_id_constraint_421 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2RemovalResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_423, memb_criticality_constraint_421 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_424, + select_X2RemovalResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_424, memb_value_constraint_421 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalResponse_IEs_tags_421[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalResponse_IEs_tag2el_421[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2RemovalResponse_IEs_specs_421 = { + sizeof(struct X2RemovalResponse_IEs), + offsetof(struct X2RemovalResponse_IEs, _asn_ctx), + asn_MAP_X2RemovalResponse_IEs_tag2el_421, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalResponse_IEs = { + "X2RemovalResponse-IEs", + "X2RemovalResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalResponse_IEs_tags_421, + sizeof(asn_DEF_X2RemovalResponse_IEs_tags_421) + /sizeof(asn_DEF_X2RemovalResponse_IEs_tags_421[0]), /* 1 */ + asn_DEF_X2RemovalResponse_IEs_tags_421, /* Same as above */ + sizeof(asn_DEF_X2RemovalResponse_IEs_tags_421) + /sizeof(asn_DEF_X2RemovalResponse_IEs_tags_421[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalResponse_IEs_421, + 3, /* Elements count */ + &asn_SPC_X2RemovalResponse_IEs_specs_421 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_428[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_428[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_428[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_428[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_428 = { + sizeof(struct X2RemovalFailure_IEs__value), + offsetof(struct X2RemovalFailure_IEs__value, _asn_ctx), + offsetof(struct X2RemovalFailure_IEs__value, present), + sizeof(((struct X2RemovalFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_428, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_428, + asn_MAP_value_from_canonical_428, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_428 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_428, + 2, /* Elements count */ + &asn_SPC_value_specs_428 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_X2RemovalFailure_IEs_425[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_426, memb_id_constraint_425 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_X2RemovalFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_427, memb_criticality_constraint_425 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_428, + select_X2RemovalFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_428, memb_value_constraint_425 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalFailure_IEs_tags_425[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalFailure_IEs_tag2el_425[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2RemovalFailure_IEs_specs_425 = { + sizeof(struct X2RemovalFailure_IEs), + offsetof(struct X2RemovalFailure_IEs, _asn_ctx), + asn_MAP_X2RemovalFailure_IEs_tag2el_425, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalFailure_IEs = { + "X2RemovalFailure-IEs", + "X2RemovalFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalFailure_IEs_tags_425, + sizeof(asn_DEF_X2RemovalFailure_IEs_tags_425) + /sizeof(asn_DEF_X2RemovalFailure_IEs_tags_425[0]), /* 1 */ + asn_DEF_X2RemovalFailure_IEs_tags_425, /* Same as above */ + sizeof(asn_DEF_X2RemovalFailure_IEs_tags_425) + /sizeof(asn_DEF_X2RemovalFailure_IEs_tags_425[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalFailure_IEs_425, + 3, /* Elements count */ + &asn_SPC_X2RemovalFailure_IEs_specs_425 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_432[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.ResumeID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_ResumeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResumeID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.ShortMAC_I), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_ShortMAC_I, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ShortMAC-I" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.EUTRANCellIdentifier), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_EUTRANCellIdentifier, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "EUTRANCellIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.CRNTI), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_CRNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CRNTI" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs__value, choice.PCI), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PCI" + }, +}; +static const unsigned asn_MAP_value_to_canonical_432[] = { 0, 1, 6, 3, 4, 5, 2 }; +static const unsigned asn_MAP_value_from_canonical_432[] = { 0, 1, 6, 3, 4, 5, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_432[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* PCI */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 2 }, /* ShortMAC-I */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 4, -1, 1 }, /* EUTRANCellIdentifier */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, -2, 0 }, /* CRNTI */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* non-truncated */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* truncated */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_432 = { + sizeof(struct RetrieveUEContextRequest_IEs__value), + offsetof(struct RetrieveUEContextRequest_IEs__value, _asn_ctx), + offsetof(struct RetrieveUEContextRequest_IEs__value, present), + sizeof(((struct RetrieveUEContextRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_432, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_432, + asn_MAP_value_from_canonical_432, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_432 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_432, + 7, /* Elements count */ + &asn_SPC_value_specs_432 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RetrieveUEContextRequest_IEs_429[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_430, memb_id_constraint_429 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RetrieveUEContextRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_431, memb_criticality_constraint_429 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_432, + select_RetrieveUEContextRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_432, memb_value_constraint_429 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextRequest_IEs_tags_429[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextRequest_IEs_tag2el_429[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextRequest_IEs_specs_429 = { + sizeof(struct RetrieveUEContextRequest_IEs), + offsetof(struct RetrieveUEContextRequest_IEs, _asn_ctx), + asn_MAP_RetrieveUEContextRequest_IEs_tag2el_429, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextRequest_IEs = { + "RetrieveUEContextRequest-IEs", + "RetrieveUEContextRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextRequest_IEs_tags_429, + sizeof(asn_DEF_RetrieveUEContextRequest_IEs_tags_429) + /sizeof(asn_DEF_RetrieveUEContextRequest_IEs_tags_429[0]), /* 1 */ + asn_DEF_RetrieveUEContextRequest_IEs_tags_429, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextRequest_IEs_tags_429) + /sizeof(asn_DEF_RetrieveUEContextRequest_IEs_tags_429[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextRequest_IEs_429, + 3, /* Elements count */ + &asn_SPC_RetrieveUEContextRequest_IEs_specs_429 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_436[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.GUMMEI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GUMMEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GUMMEI" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.UE_ContextInformationRetrieve), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformationRetrieve, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextInformationRetrieve" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.TraceActivation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TraceActivation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TraceActivation" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.SRVCCOperationPossible), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SRVCCOperationPossible, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SRVCCOperationPossible" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.Masked_IMEISV), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_Masked_IMEISV, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Masked-IMEISV" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.ExpectedUEBehaviour), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEBehaviour, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExpectedUEBehaviour" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.ProSeAuthorized), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProSeAuthorized, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ProSeAuthorized" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.V2XServicesAuthorized), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_V2XServicesAuthorized, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "V2XServicesAuthorized" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.AerialUEsubscriptionInformation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_AerialUEsubscriptionInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "AerialUEsubscriptionInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs__value, choice.Subscription_Based_UE_DifferentiationInfo), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Subscription_Based_UE_DifferentiationInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Subscription-Based-UE-DifferentiationInfo" + }, +}; +static const unsigned asn_MAP_value_to_canonical_436[] = { 0, 1, 6, 5, 11, 2, 3, 4, 7, 8, 9, 10, 12 }; +static const unsigned asn_MAP_value_from_canonical_436[] = { 0, 1, 5, 6, 7, 3, 2, 8, 9, 10, 11, 4, 12 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_436[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 6, 0, 0 }, /* Masked-IMEISV */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* SRVCCOperationPossible */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, -1, 0 }, /* AerialUEsubscriptionInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 7 }, /* GUMMEI */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 6 }, /* UE-ContextInformationRetrieve */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 5 }, /* TraceActivation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -3, 4 }, /* ExpectedUEBehaviour */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -4, 3 }, /* ProSeAuthorized */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -5, 2 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -6, 1 }, /* V2XServicesAuthorized */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -7, 0 } /* Subscription-Based-UE-DifferentiationInfo */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_436 = { + sizeof(struct RetrieveUEContextResponse_IEs__value), + offsetof(struct RetrieveUEContextResponse_IEs__value, _asn_ctx), + offsetof(struct RetrieveUEContextResponse_IEs__value, present), + sizeof(((struct RetrieveUEContextResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_436, + 13, /* Count of tags in the map */ + asn_MAP_value_to_canonical_436, + asn_MAP_value_from_canonical_436, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_436 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_436, + 13, /* Elements count */ + &asn_SPC_value_specs_436 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RetrieveUEContextResponse_IEs_433[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_434, memb_id_constraint_433 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RetrieveUEContextResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_435, memb_criticality_constraint_433 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_436, + select_RetrieveUEContextResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_436, memb_value_constraint_433 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextResponse_IEs_tags_433[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextResponse_IEs_tag2el_433[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextResponse_IEs_specs_433 = { + sizeof(struct RetrieveUEContextResponse_IEs), + offsetof(struct RetrieveUEContextResponse_IEs, _asn_ctx), + asn_MAP_RetrieveUEContextResponse_IEs_tag2el_433, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextResponse_IEs = { + "RetrieveUEContextResponse-IEs", + "RetrieveUEContextResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextResponse_IEs_tags_433, + sizeof(asn_DEF_RetrieveUEContextResponse_IEs_tags_433) + /sizeof(asn_DEF_RetrieveUEContextResponse_IEs_tags_433[0]), /* 1 */ + asn_DEF_RetrieveUEContextResponse_IEs_tags_433, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextResponse_IEs_tags_433) + /sizeof(asn_DEF_RetrieveUEContextResponse_IEs_tags_433[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextResponse_IEs_433, + 3, /* Elements count */ + &asn_SPC_RetrieveUEContextResponse_IEs_specs_433 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_440[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_440[] = { 0, 1, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_440[] = { 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_440[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_440 = { + sizeof(struct RetrieveUEContextFailure_IEs__value), + offsetof(struct RetrieveUEContextFailure_IEs__value, _asn_ctx), + offsetof(struct RetrieveUEContextFailure_IEs__value, present), + sizeof(((struct RetrieveUEContextFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_440, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_440, + asn_MAP_value_from_canonical_440, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_440 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_440, + 4, /* Elements count */ + &asn_SPC_value_specs_440 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RetrieveUEContextFailure_IEs_437[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_438, memb_id_constraint_437 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RetrieveUEContextFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_439, memb_criticality_constraint_437 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_440, + select_RetrieveUEContextFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_440, memb_value_constraint_437 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextFailure_IEs_tags_437[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextFailure_IEs_tag2el_437[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextFailure_IEs_specs_437 = { + sizeof(struct RetrieveUEContextFailure_IEs), + offsetof(struct RetrieveUEContextFailure_IEs, _asn_ctx), + asn_MAP_RetrieveUEContextFailure_IEs_tag2el_437, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextFailure_IEs = { + "RetrieveUEContextFailure-IEs", + "RetrieveUEContextFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextFailure_IEs_tags_437, + sizeof(asn_DEF_RetrieveUEContextFailure_IEs_tags_437) + /sizeof(asn_DEF_RetrieveUEContextFailure_IEs_tags_437[0]), /* 1 */ + asn_DEF_RetrieveUEContextFailure_IEs_tags_437, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextFailure_IEs_tags_437) + /sizeof(asn_DEF_RetrieveUEContextFailure_IEs_tags_437[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextFailure_IEs_437, + 3, /* Elements count */ + &asn_SPC_RetrieveUEContextFailure_IEs_specs_437 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_444[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.NRUESecurityCapabilities), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRUESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "NRUESecurityCapabilities" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.SgNBSecurityKey), + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_SgNBSecurityKey, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBSecurityKey" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.UEAggregateMaximumBitRate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEAggregateMaximumBitRate" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.PLMN_Identity), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.HandoverRestrictionList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverRestrictionList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "HandoverRestrictionList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.E_RABs_ToBeAdded_SgNBAddReqList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeAdded_SgNBAddReqList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeAdded-SgNBAddReqList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.MeNBtoSgNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSgNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.ExpectedUEBehaviour), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ExpectedUEBehaviour, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ExpectedUEBehaviour" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.SplitSRBs), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SplitSRBs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SplitSRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.MeNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBResourceCoordinationInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.SGNB_Addition_Trigger_Ind), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SGNB_Addition_Trigger_Ind, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SGNB-Addition-Trigger-Ind" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.SubscriberProfileIDforRFP), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SubscriberProfileIDforRFP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SubscriberProfileIDforRFP" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs__value, choice.ECGI), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ECGI" + }, +}; +static const unsigned asn_MAP_value_to_canonical_444[] = { 0, 8, 10, 14, 2, 4, 7, 11, 13, 1, 3, 5, 6, 9, 12, 15 }; +static const unsigned asn_MAP_value_from_canonical_444[] = { 0, 9, 4, 10, 5, 11, 12, 6, 1, 13, 2, 7, 14, 8, 3, 15 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_444[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 3 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -1, 2 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 10, -2, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 14, -3, 0 }, /* SubscriberProfileIDforRFP */ + { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* SgNBSecurityKey */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* PLMN-Identity */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* MeNBtoSgNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, 0, 1 }, /* SplitSRBs */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 13, -1, 0 }, /* SGNB-Addition-Trigger-Ind */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 6 }, /* NRUESecurityCapabilities */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 5 }, /* UEAggregateMaximumBitRate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 4 }, /* HandoverRestrictionList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -3, 3 }, /* E-RABs-ToBeAdded-SgNBAddReqList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -4, 2 }, /* ExpectedUEBehaviour */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -5, 1 }, /* MeNBResourceCoordinationInformation */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -6, 0 } /* ECGI */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_444 = { + sizeof(struct SgNBAdditionRequest_IEs__value), + offsetof(struct SgNBAdditionRequest_IEs__value, _asn_ctx), + offsetof(struct SgNBAdditionRequest_IEs__value, present), + sizeof(((struct SgNBAdditionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_444, + 16, /* Count of tags in the map */ + asn_MAP_value_to_canonical_444, + asn_MAP_value_from_canonical_444, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_444 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_444, + 16, /* Elements count */ + &asn_SPC_value_specs_444 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBAdditionRequest_IEs_441[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_442, memb_id_constraint_441 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBAdditionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_443, memb_criticality_constraint_441 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_444, + select_SgNBAdditionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_444, memb_value_constraint_441 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequest_IEs_tags_441[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequest_IEs_tag2el_441[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequest_IEs_specs_441 = { + sizeof(struct SgNBAdditionRequest_IEs), + offsetof(struct SgNBAdditionRequest_IEs, _asn_ctx), + asn_MAP_SgNBAdditionRequest_IEs_tag2el_441, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequest_IEs = { + "SgNBAdditionRequest-IEs", + "SgNBAdditionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequest_IEs_tags_441, + sizeof(asn_DEF_SgNBAdditionRequest_IEs_tags_441) + /sizeof(asn_DEF_SgNBAdditionRequest_IEs_tags_441[0]), /* 1 */ + asn_DEF_SgNBAdditionRequest_IEs_tags_441, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequest_IEs_tags_441) + /sizeof(asn_DEF_SgNBAdditionRequest_IEs_tags_441[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequest_IEs_441, + 3, /* Elements count */ + &asn_SPC_SgNBAdditionRequest_IEs_specs_441 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_448[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.E_RAB_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SgNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.SplitSRBs), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SplitSRBs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SplitSRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBResourceCoordinationInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, choice.RRC_Config_Ind), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RRC_Config_Ind, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RRC-Config-Ind" + }, +}; +static const unsigned asn_MAP_value_to_canonical_448[] = { 0, 1, 6, 4, 7, 9, 2, 3, 5, 8 }; +static const unsigned asn_MAP_value_from_canonical_448[] = { 0, 1, 6, 7, 3, 8, 2, 4, 9, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_448[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SgNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 1 }, /* SplitSRBs */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 9, -1, 0 }, /* RRC-Config-Ind */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 3 }, /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 2 }, /* E-RAB-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -3, 0 } /* SgNBResourceCoordinationInformation */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_448 = { + sizeof(struct SgNBAdditionRequestAcknowledge_IEs__value), + offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct SgNBAdditionRequestAcknowledge_IEs__value, present), + sizeof(((struct SgNBAdditionRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_448, + 10, /* Count of tags in the map */ + asn_MAP_value_to_canonical_448, + asn_MAP_value_from_canonical_448, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_448 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_448, + 10, /* Elements count */ + &asn_SPC_value_specs_448 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBAdditionRequestAcknowledge_IEs_445[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_446, memb_id_constraint_445 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBAdditionRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_447, memb_criticality_constraint_445 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_448, + select_SgNBAdditionRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_448, memb_value_constraint_445 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequestAcknowledge_IEs_tag2el_445[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestAcknowledge_IEs_specs_445 = { + sizeof(struct SgNBAdditionRequestAcknowledge_IEs), + offsetof(struct SgNBAdditionRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_SgNBAdditionRequestAcknowledge_IEs_tag2el_445, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestAcknowledge_IEs = { + "SgNBAdditionRequestAcknowledge-IEs", + "SgNBAdditionRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445, + sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445) + /sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445[0]), /* 1 */ + asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445) + /sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_IEs_tags_445[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequestAcknowledge_IEs_445, + 3, /* Elements count */ + &asn_SPC_SgNBAdditionRequestAcknowledge_IEs_specs_445 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_452[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_452[] = { 0, 1, 4, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_452[] = { 0, 1, 4, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_452[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_452 = { + sizeof(struct SgNBAdditionRequestReject_IEs__value), + offsetof(struct SgNBAdditionRequestReject_IEs__value, _asn_ctx), + offsetof(struct SgNBAdditionRequestReject_IEs__value, present), + sizeof(((struct SgNBAdditionRequestReject_IEs__value *)0)->present), + asn_MAP_value_tag2el_452, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_452, + asn_MAP_value_from_canonical_452, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_452 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_452, + 5, /* Elements count */ + &asn_SPC_value_specs_452 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBAdditionRequestReject_IEs_449[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_450, memb_id_constraint_449 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBAdditionRequestReject_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_451, memb_criticality_constraint_449 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_452, + select_SgNBAdditionRequestReject_IEs_value_type, + { 0, &asn_PER_memb_value_constr_452, memb_value_constraint_449 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequestReject_IEs_tags_449[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequestReject_IEs_tag2el_449[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestReject_IEs_specs_449 = { + sizeof(struct SgNBAdditionRequestReject_IEs), + offsetof(struct SgNBAdditionRequestReject_IEs, _asn_ctx), + asn_MAP_SgNBAdditionRequestReject_IEs_tag2el_449, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestReject_IEs = { + "SgNBAdditionRequestReject-IEs", + "SgNBAdditionRequestReject-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequestReject_IEs_tags_449, + sizeof(asn_DEF_SgNBAdditionRequestReject_IEs_tags_449) + /sizeof(asn_DEF_SgNBAdditionRequestReject_IEs_tags_449[0]), /* 1 */ + asn_DEF_SgNBAdditionRequestReject_IEs_tags_449, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequestReject_IEs_tags_449) + /sizeof(asn_DEF_SgNBAdditionRequestReject_IEs_tags_449[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequestReject_IEs_449, + 3, /* Elements count */ + &asn_SPC_SgNBAdditionRequestReject_IEs_specs_449 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_456[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs__value, choice.ResponseInformationSgNBReconfComp), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_ResponseInformationSgNBReconfComp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResponseInformationSgNBReconfComp" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_456[] = { 0, 1, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_456[] = { 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_456[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* success-SgNBReconfComp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* reject-by-MeNB-SgNBReconfComp */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_456 = { + sizeof(struct SgNBReconfigurationComplete_IEs__value), + offsetof(struct SgNBReconfigurationComplete_IEs__value, _asn_ctx), + offsetof(struct SgNBReconfigurationComplete_IEs__value, present), + sizeof(((struct SgNBReconfigurationComplete_IEs__value *)0)->present), + asn_MAP_value_tag2el_456, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_456, + asn_MAP_value_from_canonical_456, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_456 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_456, + 4, /* Elements count */ + &asn_SPC_value_specs_456 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReconfigurationComplete_IEs_453[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_454, memb_id_constraint_453 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReconfigurationComplete_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_455, memb_criticality_constraint_453 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_456, + select_SgNBReconfigurationComplete_IEs_value_type, + { 0, &asn_PER_memb_value_constr_456, memb_value_constraint_453 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReconfigurationComplete_IEs_tags_453[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReconfigurationComplete_IEs_tag2el_453[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReconfigurationComplete_IEs_specs_453 = { + sizeof(struct SgNBReconfigurationComplete_IEs), + offsetof(struct SgNBReconfigurationComplete_IEs, _asn_ctx), + asn_MAP_SgNBReconfigurationComplete_IEs_tag2el_453, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReconfigurationComplete_IEs = { + "SgNBReconfigurationComplete-IEs", + "SgNBReconfigurationComplete-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReconfigurationComplete_IEs_tags_453, + sizeof(asn_DEF_SgNBReconfigurationComplete_IEs_tags_453) + /sizeof(asn_DEF_SgNBReconfigurationComplete_IEs_tags_453[0]), /* 1 */ + asn_DEF_SgNBReconfigurationComplete_IEs_tags_453, /* Same as above */ + sizeof(asn_DEF_SgNBReconfigurationComplete_IEs_tags_453) + /sizeof(asn_DEF_SgNBReconfigurationComplete_IEs_tags_453[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReconfigurationComplete_IEs_453, + 3, /* Elements count */ + &asn_SPC_SgNBReconfigurationComplete_IEs_specs_453 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_460[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.PLMN_Identity), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.HandoverRestrictionList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_HandoverRestrictionList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "HandoverRestrictionList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.SCGConfigurationQuery), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SCGConfigurationQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SCGConfigurationQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.UE_ContextInformation_SgNBModReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_ContextInformation_SgNBModReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextInformation-SgNBModReq" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.MeNBtoSgNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSgNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.MeNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBResourceCoordinationInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs__value, choice.SplitSRBs), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SplitSRBs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SplitSRBs" + }, +}; +static const unsigned asn_MAP_value_to_canonical_460[] = { 0, 1, 8, 3, 7, 5, 10, 4, 6, 9, 2 }; +static const unsigned asn_MAP_value_from_canonical_460[] = { 0, 1, 10, 3, 7, 5, 8, 4, 2, 9, 6 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_460[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 1 }, /* PLMN-Identity */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* MeNBtoSgNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* SCGConfigurationQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 10, -1, 0 }, /* SplitSRBs */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 2 }, /* HandoverRestrictionList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -1, 1 }, /* UE-ContextInformation-SgNBModReq */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -2, 0 }, /* MeNBResourceCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_460 = { + sizeof(struct SgNBModificationRequest_IEs__value), + offsetof(struct SgNBModificationRequest_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationRequest_IEs__value, present), + sizeof(((struct SgNBModificationRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_460, + 14, /* Count of tags in the map */ + asn_MAP_value_to_canonical_460, + asn_MAP_value_from_canonical_460, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_460 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_460, + 11, /* Elements count */ + &asn_SPC_value_specs_460 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationRequest_IEs_457[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_458, memb_id_constraint_457 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_459, memb_criticality_constraint_457 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_460, + select_SgNBModificationRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_460, memb_value_constraint_457 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequest_IEs_tags_457[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequest_IEs_tag2el_457[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequest_IEs_specs_457 = { + sizeof(struct SgNBModificationRequest_IEs), + offsetof(struct SgNBModificationRequest_IEs, _asn_ctx), + asn_MAP_SgNBModificationRequest_IEs_tag2el_457, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequest_IEs = { + "SgNBModificationRequest-IEs", + "SgNBModificationRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequest_IEs_tags_457, + sizeof(asn_DEF_SgNBModificationRequest_IEs_tags_457) + /sizeof(asn_DEF_SgNBModificationRequest_IEs_tags_457[0]), /* 1 */ + asn_DEF_SgNBModificationRequest_IEs_tags_457, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequest_IEs_tags_457) + /sizeof(asn_DEF_SgNBModificationRequest_IEs_tags_457[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequest_IEs_457, + 3, /* Elements count */ + &asn_SPC_SgNBModificationRequest_IEs_specs_457 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_464[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeAdded-SgNBModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeModified_SgNBModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeModified-SgNBModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBModAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeReleased-SgNBModAckList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.E_RAB_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.SgNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SgNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.SgNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBResourceCoordinationInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.SplitSRBs), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SplitSRBs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SplitSRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, choice.RRC_Config_Ind), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RRC_Config_Ind, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RRC-Config-Ind" + }, +}; +static const unsigned asn_MAP_value_to_canonical_464[] = { 0, 1, 8, 6, 10, 11, 2, 3, 4, 5, 7, 9 }; +static const unsigned asn_MAP_value_from_canonical_464[] = { 0, 1, 6, 7, 8, 9, 3, 10, 2, 11, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_464[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, 0, 0 }, /* SgNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 10, 0, 1 }, /* SplitSRBs */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, -1, 0 }, /* RRC-Config-Ind */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 5 }, /* E-RABs-Admitted-ToBeAdded-SgNBModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 4 }, /* E-RABs-Admitted-ToBeModified-SgNBModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 3 }, /* E-RABs-Admitted-ToBeReleased-SgNBModAckList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 2 }, /* E-RAB-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -4, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -5, 0 } /* SgNBResourceCoordinationInformation */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_464 = { + sizeof(struct SgNBModificationRequestAcknowledge_IEs__value), + offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationRequestAcknowledge_IEs__value, present), + sizeof(((struct SgNBModificationRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_464, + 12, /* Count of tags in the map */ + asn_MAP_value_to_canonical_464, + asn_MAP_value_from_canonical_464, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_464 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_464, + 12, /* Elements count */ + &asn_SPC_value_specs_464 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationRequestAcknowledge_IEs_461[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_462, memb_id_constraint_461 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_463, memb_criticality_constraint_461 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_464, + select_SgNBModificationRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_464, memb_value_constraint_461 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequestAcknowledge_IEs_tag2el_461[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestAcknowledge_IEs_specs_461 = { + sizeof(struct SgNBModificationRequestAcknowledge_IEs), + offsetof(struct SgNBModificationRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_SgNBModificationRequestAcknowledge_IEs_tag2el_461, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestAcknowledge_IEs = { + "SgNBModificationRequestAcknowledge-IEs", + "SgNBModificationRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461, + sizeof(asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461) + /sizeof(asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461[0]), /* 1 */ + asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461) + /sizeof(asn_DEF_SgNBModificationRequestAcknowledge_IEs_tags_461[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequestAcknowledge_IEs_461, + 3, /* Elements count */ + &asn_SPC_SgNBModificationRequestAcknowledge_IEs_specs_461 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_468[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_468[] = { 0, 1, 4, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_468[] = { 0, 1, 4, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_468[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_468 = { + sizeof(struct SgNBModificationRequestReject_IEs__value), + offsetof(struct SgNBModificationRequestReject_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationRequestReject_IEs__value, present), + sizeof(((struct SgNBModificationRequestReject_IEs__value *)0)->present), + asn_MAP_value_tag2el_468, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_468, + asn_MAP_value_from_canonical_468, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_468 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_468, + 5, /* Elements count */ + &asn_SPC_value_specs_468 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationRequestReject_IEs_465[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_466, memb_id_constraint_465 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationRequestReject_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_467, memb_criticality_constraint_465 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_468, + select_SgNBModificationRequestReject_IEs_value_type, + { 0, &asn_PER_memb_value_constr_468, memb_value_constraint_465 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequestReject_IEs_tags_465[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequestReject_IEs_tag2el_465[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestReject_IEs_specs_465 = { + sizeof(struct SgNBModificationRequestReject_IEs), + offsetof(struct SgNBModificationRequestReject_IEs, _asn_ctx), + asn_MAP_SgNBModificationRequestReject_IEs_tag2el_465, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestReject_IEs = { + "SgNBModificationRequestReject-IEs", + "SgNBModificationRequestReject-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequestReject_IEs_tags_465, + sizeof(asn_DEF_SgNBModificationRequestReject_IEs_tags_465) + /sizeof(asn_DEF_SgNBModificationRequestReject_IEs_tags_465[0]), /* 1 */ + asn_DEF_SgNBModificationRequestReject_IEs_tags_465, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequestReject_IEs_tags_465) + /sizeof(asn_DEF_SgNBModificationRequestReject_IEs_tags_465[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequestReject_IEs_465, + 3, /* Elements count */ + &asn_SPC_SgNBModificationRequestReject_IEs_specs_465 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_472[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.PDCPChangeIndication), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_PDCPChangeIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "PDCPChangeIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.E_RABs_ToBeReleased_SgNBModReqdList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBModReqdList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBModReqdList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.SgNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SgNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.E_RABs_ToBeModified_SgNBModReqdList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeModified_SgNBModReqdList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeModified-SgNBModReqdList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.SgNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SgNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBResourceCoordinationInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs__value, choice.RRC_Config_Ind), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RRC_Config_Ind, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RRC-Config-Ind" + }, +}; +static const unsigned asn_MAP_value_to_canonical_472[] = { 0, 1, 6, 5, 3, 9, 4, 7, 8, 2 }; +static const unsigned asn_MAP_value_from_canonical_472[] = { 0, 1, 9, 4, 6, 3, 2, 7, 8, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_472[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 0 }, /* SgNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 1 }, /* PDCPChangeIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 9, -1, 0 }, /* RRC-Config-Ind */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 2 }, /* E-RABs-ToBeReleased-SgNBModReqdList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -1, 1 }, /* E-RABs-ToBeModified-SgNBModReqdList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -2, 0 }, /* SgNBResourceCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_472 = { + sizeof(struct SgNBModificationRequired_IEs__value), + offsetof(struct SgNBModificationRequired_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationRequired_IEs__value, present), + sizeof(((struct SgNBModificationRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_472, + 13, /* Count of tags in the map */ + asn_MAP_value_to_canonical_472, + asn_MAP_value_from_canonical_472, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_472 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_472, + 10, /* Elements count */ + &asn_SPC_value_specs_472 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationRequired_IEs_469[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_470, memb_id_constraint_469 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_471, memb_criticality_constraint_469 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_472, + select_SgNBModificationRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_472, memb_value_constraint_469 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequired_IEs_tags_469[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequired_IEs_tag2el_469[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequired_IEs_specs_469 = { + sizeof(struct SgNBModificationRequired_IEs), + offsetof(struct SgNBModificationRequired_IEs, _asn_ctx), + asn_MAP_SgNBModificationRequired_IEs_tag2el_469, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequired_IEs = { + "SgNBModificationRequired-IEs", + "SgNBModificationRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequired_IEs_tags_469, + sizeof(asn_DEF_SgNBModificationRequired_IEs_tags_469) + /sizeof(asn_DEF_SgNBModificationRequired_IEs_tags_469[0]), /* 1 */ + asn_DEF_SgNBModificationRequired_IEs_tags_469, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequired_IEs_tags_469) + /sizeof(asn_DEF_SgNBModificationRequired_IEs_tags_469[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequired_IEs_469, + 3, /* Elements count */ + &asn_SPC_SgNBModificationRequired_IEs_specs_469 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_476[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.E_RABs_AdmittedToBeModified_SgNBModConfList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConfList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-AdmittedToBeModified-SgNBModConfList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.MeNBtoSgNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSgNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs__value, choice.MeNBResourceCoordinationInformation), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeNBResourceCoordinationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBResourceCoordinationInformation" + }, +}; +static const unsigned asn_MAP_value_to_canonical_476[] = { 0, 1, 5, 3, 2, 4, 6 }; +static const unsigned asn_MAP_value_from_canonical_476[] = { 0, 1, 4, 3, 5, 2, 6 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_476[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* MeNBtoSgNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 2 }, /* E-RABs-AdmittedToBeModified-SgNBModConfList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -2, 0 } /* MeNBResourceCoordinationInformation */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_476 = { + sizeof(struct SgNBModificationConfirm_IEs__value), + offsetof(struct SgNBModificationConfirm_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationConfirm_IEs__value, present), + sizeof(((struct SgNBModificationConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_476, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_476, + asn_MAP_value_from_canonical_476, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_476 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_476, + 7, /* Elements count */ + &asn_SPC_value_specs_476 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationConfirm_IEs_473[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_474, memb_id_constraint_473 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_475, memb_criticality_constraint_473 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_476, + select_SgNBModificationConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_476, memb_value_constraint_473 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationConfirm_IEs_tags_473[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationConfirm_IEs_tag2el_473[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationConfirm_IEs_specs_473 = { + sizeof(struct SgNBModificationConfirm_IEs), + offsetof(struct SgNBModificationConfirm_IEs, _asn_ctx), + asn_MAP_SgNBModificationConfirm_IEs_tag2el_473, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationConfirm_IEs = { + "SgNBModificationConfirm-IEs", + "SgNBModificationConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationConfirm_IEs_tags_473, + sizeof(asn_DEF_SgNBModificationConfirm_IEs_tags_473) + /sizeof(asn_DEF_SgNBModificationConfirm_IEs_tags_473[0]), /* 1 */ + asn_DEF_SgNBModificationConfirm_IEs_tags_473, /* Same as above */ + sizeof(asn_DEF_SgNBModificationConfirm_IEs_tags_473) + /sizeof(asn_DEF_SgNBModificationConfirm_IEs_tags_473[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationConfirm_IEs_473, + 3, /* Elements count */ + &asn_SPC_SgNBModificationConfirm_IEs_specs_473 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_480[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.MeNBtoSgNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSgNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_480[] = { 0, 1, 5, 3, 4, 2 }; +static const unsigned asn_MAP_value_from_canonical_480[] = { 0, 1, 5, 3, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_480[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* MeNBtoSgNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_480 = { + sizeof(struct SgNBModificationRefuse_IEs__value), + offsetof(struct SgNBModificationRefuse_IEs__value, _asn_ctx), + offsetof(struct SgNBModificationRefuse_IEs__value, present), + sizeof(((struct SgNBModificationRefuse_IEs__value *)0)->present), + asn_MAP_value_tag2el_480, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_480, + asn_MAP_value_from_canonical_480, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_480 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_480, + 6, /* Elements count */ + &asn_SPC_value_specs_480 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBModificationRefuse_IEs_477[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_478, memb_id_constraint_477 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBModificationRefuse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_479, memb_criticality_constraint_477 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_480, + select_SgNBModificationRefuse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_480, memb_value_constraint_477 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRefuse_IEs_tags_477[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRefuse_IEs_tag2el_477[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRefuse_IEs_specs_477 = { + sizeof(struct SgNBModificationRefuse_IEs), + offsetof(struct SgNBModificationRefuse_IEs, _asn_ctx), + asn_MAP_SgNBModificationRefuse_IEs_tag2el_477, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRefuse_IEs = { + "SgNBModificationRefuse-IEs", + "SgNBModificationRefuse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRefuse_IEs_tags_477, + sizeof(asn_DEF_SgNBModificationRefuse_IEs_tags_477) + /sizeof(asn_DEF_SgNBModificationRefuse_IEs_tags_477[0]), /* 1 */ + asn_DEF_SgNBModificationRefuse_IEs_tags_477, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRefuse_IEs_tags_477) + /sizeof(asn_DEF_SgNBModificationRefuse_IEs_tags_477[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRefuse_IEs_477, + 3, /* Elements count */ + &asn_SPC_SgNBModificationRefuse_IEs_specs_477 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_484[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelReqList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.UE_ContextKeptIndicator), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_UE_ContextKeptIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-ContextKeptIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs__value, choice.MeNBtoSgNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "MeNBtoSgNBContainer" + }, +}; +static const unsigned asn_MAP_value_to_canonical_484[] = { 0, 1, 5, 6, 4, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_484[] = { 0, 1, 6, 5, 4, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_484[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, 0, 0 }, /* MeNBtoSgNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* UE-ContextKeptIndicator */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* E-RABs-ToBeReleased-SgNBRelReqList */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_484 = { + sizeof(struct SgNBReleaseRequest_IEs__value), + offsetof(struct SgNBReleaseRequest_IEs__value, _asn_ctx), + offsetof(struct SgNBReleaseRequest_IEs__value, present), + sizeof(((struct SgNBReleaseRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_484, + 10, /* Count of tags in the map */ + asn_MAP_value_to_canonical_484, + asn_MAP_value_from_canonical_484, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_484 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_484, + 7, /* Elements count */ + &asn_SPC_value_specs_484 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReleaseRequest_IEs_481[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_482, memb_id_constraint_481 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReleaseRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_483, memb_criticality_constraint_481 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_484, + select_SgNBReleaseRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_484, memb_value_constraint_481 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequest_IEs_tags_481[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequest_IEs_tag2el_481[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequest_IEs_specs_481 = { + sizeof(struct SgNBReleaseRequest_IEs), + offsetof(struct SgNBReleaseRequest_IEs, _asn_ctx), + asn_MAP_SgNBReleaseRequest_IEs_tag2el_481, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequest_IEs = { + "SgNBReleaseRequest-IEs", + "SgNBReleaseRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequest_IEs_tags_481, + sizeof(asn_DEF_SgNBReleaseRequest_IEs_tags_481) + /sizeof(asn_DEF_SgNBReleaseRequest_IEs_tags_481[0]), /* 1 */ + asn_DEF_SgNBReleaseRequest_IEs_tags_481, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequest_IEs_tags_481) + /sizeof(asn_DEF_SgNBReleaseRequest_IEs_tags_481[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequest_IEs_481, + 3, /* Elements count */ + &asn_SPC_SgNBReleaseRequest_IEs_specs_481 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_488[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList" + }, +}; +static const unsigned asn_MAP_value_to_canonical_488[] = { 0, 1, 3, 2, 4 }; +static const unsigned asn_MAP_value_from_canonical_488[] = { 0, 1, 3, 2, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_488[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 } /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_488 = { + sizeof(struct SgNBReleaseRequestAcknowledge_IEs__value), + offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, _asn_ctx), + offsetof(struct SgNBReleaseRequestAcknowledge_IEs__value, present), + sizeof(((struct SgNBReleaseRequestAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_488, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_488, + asn_MAP_value_from_canonical_488, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_488 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_488, + 5, /* Elements count */ + &asn_SPC_value_specs_488 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReleaseRequestAcknowledge_IEs_485[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_486, memb_id_constraint_485 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReleaseRequestAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_487, memb_criticality_constraint_485 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_488, + select_SgNBReleaseRequestAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_488, memb_value_constraint_485 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequestAcknowledge_IEs_tag2el_485[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestAcknowledge_IEs_specs_485 = { + sizeof(struct SgNBReleaseRequestAcknowledge_IEs), + offsetof(struct SgNBReleaseRequestAcknowledge_IEs, _asn_ctx), + asn_MAP_SgNBReleaseRequestAcknowledge_IEs_tag2el_485, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestAcknowledge_IEs = { + "SgNBReleaseRequestAcknowledge-IEs", + "SgNBReleaseRequestAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485, + sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485) + /sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485[0]), /* 1 */ + asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485) + /sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_IEs_tags_485[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequestAcknowledge_IEs_485, + 3, /* Elements count */ + &asn_SPC_SgNBReleaseRequestAcknowledge_IEs_specs_485 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_492[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_492[] = { 0, 1, 4, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_492[] = { 0, 1, 4, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_492[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_492 = { + sizeof(struct SgNBReleaseRequestReject_IEs__value), + offsetof(struct SgNBReleaseRequestReject_IEs__value, _asn_ctx), + offsetof(struct SgNBReleaseRequestReject_IEs__value, present), + sizeof(((struct SgNBReleaseRequestReject_IEs__value *)0)->present), + asn_MAP_value_tag2el_492, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_492, + asn_MAP_value_from_canonical_492, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_492 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_492, + 5, /* Elements count */ + &asn_SPC_value_specs_492 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReleaseRequestReject_IEs_489[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_490, memb_id_constraint_489 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReleaseRequestReject_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_491, memb_criticality_constraint_489 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_492, + select_SgNBReleaseRequestReject_IEs_value_type, + { 0, &asn_PER_memb_value_constr_492, memb_value_constraint_489 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequestReject_IEs_tags_489[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequestReject_IEs_tag2el_489[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestReject_IEs_specs_489 = { + sizeof(struct SgNBReleaseRequestReject_IEs), + offsetof(struct SgNBReleaseRequestReject_IEs, _asn_ctx), + asn_MAP_SgNBReleaseRequestReject_IEs_tag2el_489, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestReject_IEs = { + "SgNBReleaseRequestReject-IEs", + "SgNBReleaseRequestReject-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequestReject_IEs_tags_489, + sizeof(asn_DEF_SgNBReleaseRequestReject_IEs_tags_489) + /sizeof(asn_DEF_SgNBReleaseRequestReject_IEs_tags_489[0]), /* 1 */ + asn_DEF_SgNBReleaseRequestReject_IEs_tags_489, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequestReject_IEs_tags_489) + /sizeof(asn_DEF_SgNBReleaseRequestReject_IEs_tags_489[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequestReject_IEs_489, + 3, /* Elements count */ + &asn_SPC_SgNBReleaseRequestReject_IEs_specs_489 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_496[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqdList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelReqdList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelReqdList" + }, +}; +static const unsigned asn_MAP_value_to_canonical_496[] = { 0, 1, 3, 4, 2 }; +static const unsigned asn_MAP_value_from_canonical_496[] = { 0, 1, 4, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_496[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* E-RABs-ToBeReleased-SgNBRelReqdList */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_496 = { + sizeof(struct SgNBReleaseRequired_IEs__value), + offsetof(struct SgNBReleaseRequired_IEs__value, _asn_ctx), + offsetof(struct SgNBReleaseRequired_IEs__value, present), + sizeof(((struct SgNBReleaseRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_496, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_496, + asn_MAP_value_from_canonical_496, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_496 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_496, + 5, /* Elements count */ + &asn_SPC_value_specs_496 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReleaseRequired_IEs_493[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_494, memb_id_constraint_493 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReleaseRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_495, memb_criticality_constraint_493 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_496, + select_SgNBReleaseRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_496, memb_value_constraint_493 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequired_IEs_tags_493[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequired_IEs_tag2el_493[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequired_IEs_specs_493 = { + sizeof(struct SgNBReleaseRequired_IEs), + offsetof(struct SgNBReleaseRequired_IEs, _asn_ctx), + asn_MAP_SgNBReleaseRequired_IEs_tag2el_493, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequired_IEs = { + "SgNBReleaseRequired-IEs", + "SgNBReleaseRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequired_IEs_tags_493, + sizeof(asn_DEF_SgNBReleaseRequired_IEs_tags_493) + /sizeof(asn_DEF_SgNBReleaseRequired_IEs_tags_493[0]), /* 1 */ + asn_DEF_SgNBReleaseRequired_IEs_tags_493, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequired_IEs_tags_493) + /sizeof(asn_DEF_SgNBReleaseRequired_IEs_tags_493[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequired_IEs_493, + 3, /* Elements count */ + &asn_SPC_SgNBReleaseRequired_IEs_specs_493 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_500[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelConfList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBRelConfList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBRelConfList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_500[] = { 0, 1, 4, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_500[] = { 0, 1, 3, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_500[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* E-RABs-ToBeReleased-SgNBRelConfList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_500 = { + sizeof(struct SgNBReleaseConfirm_IEs__value), + offsetof(struct SgNBReleaseConfirm_IEs__value, _asn_ctx), + offsetof(struct SgNBReleaseConfirm_IEs__value, present), + sizeof(((struct SgNBReleaseConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_500, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_500, + asn_MAP_value_from_canonical_500, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_500 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_500, + 5, /* Elements count */ + &asn_SPC_value_specs_500 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBReleaseConfirm_IEs_497[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_498, memb_id_constraint_497 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBReleaseConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_499, memb_criticality_constraint_497 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_500, + select_SgNBReleaseConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_500, memb_value_constraint_497 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseConfirm_IEs_tags_497[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseConfirm_IEs_tag2el_497[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseConfirm_IEs_specs_497 = { + sizeof(struct SgNBReleaseConfirm_IEs), + offsetof(struct SgNBReleaseConfirm_IEs, _asn_ctx), + asn_MAP_SgNBReleaseConfirm_IEs_tag2el_497, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseConfirm_IEs = { + "SgNBReleaseConfirm-IEs", + "SgNBReleaseConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseConfirm_IEs_tags_497, + sizeof(asn_DEF_SgNBReleaseConfirm_IEs_tags_497) + /sizeof(asn_DEF_SgNBReleaseConfirm_IEs_tags_497[0]), /* 1 */ + asn_DEF_SgNBReleaseConfirm_IEs_tags_497, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseConfirm_IEs_tags_497) + /sizeof(asn_DEF_SgNBReleaseConfirm_IEs_tags_497[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseConfirm_IEs_497, + 3, /* Elements count */ + &asn_SPC_SgNBReleaseConfirm_IEs_specs_497 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_504[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs__value, choice.E_RABs_SubjectToSgNBCounterCheck_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_SubjectToSgNBCounterCheck_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-SubjectToSgNBCounterCheck-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_504[] = { 0, 1, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_504[] = { 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_504[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* E-RABs-SubjectToSgNBCounterCheck-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_504 = { + sizeof(struct SgNBCounterCheckRequest_IEs__value), + offsetof(struct SgNBCounterCheckRequest_IEs__value, _asn_ctx), + offsetof(struct SgNBCounterCheckRequest_IEs__value, present), + sizeof(((struct SgNBCounterCheckRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_504, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_504, + asn_MAP_value_from_canonical_504, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_504 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_504, + 4, /* Elements count */ + &asn_SPC_value_specs_504 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBCounterCheckRequest_IEs_501[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_502, memb_id_constraint_501 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBCounterCheckRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_503, memb_criticality_constraint_501 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_504, + select_SgNBCounterCheckRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_504, memb_value_constraint_501 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBCounterCheckRequest_IEs_tags_501[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBCounterCheckRequest_IEs_tag2el_501[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBCounterCheckRequest_IEs_specs_501 = { + sizeof(struct SgNBCounterCheckRequest_IEs), + offsetof(struct SgNBCounterCheckRequest_IEs, _asn_ctx), + asn_MAP_SgNBCounterCheckRequest_IEs_tag2el_501, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBCounterCheckRequest_IEs = { + "SgNBCounterCheckRequest-IEs", + "SgNBCounterCheckRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBCounterCheckRequest_IEs_tags_501, + sizeof(asn_DEF_SgNBCounterCheckRequest_IEs_tags_501) + /sizeof(asn_DEF_SgNBCounterCheckRequest_IEs_tags_501[0]), /* 1 */ + asn_DEF_SgNBCounterCheckRequest_IEs_tags_501, /* Same as above */ + sizeof(asn_DEF_SgNBCounterCheckRequest_IEs_tags_501) + /sizeof(asn_DEF_SgNBCounterCheckRequest_IEs_tags_501[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBCounterCheckRequest_IEs_501, + 3, /* Elements count */ + &asn_SPC_SgNBCounterCheckRequest_IEs_specs_501 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_508[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.GlobalGNB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalGNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.SgNBtoMeNBContainer), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_SgNBtoMeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNBtoMeNBContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_508[] = { 0, 1, 5, 4, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_508[] = { 0, 1, 4, 5, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_508[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SgNBtoMeNBContainer */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* GlobalGNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_508 = { + sizeof(struct SgNBChangeRequired_IEs__value), + offsetof(struct SgNBChangeRequired_IEs__value, _asn_ctx), + offsetof(struct SgNBChangeRequired_IEs__value, present), + sizeof(((struct SgNBChangeRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_508, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_508, + asn_MAP_value_from_canonical_508, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_508 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_508, + 6, /* Elements count */ + &asn_SPC_value_specs_508 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBChangeRequired_IEs_505[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_506, memb_id_constraint_505 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBChangeRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_507, memb_criticality_constraint_505 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_508, + select_SgNBChangeRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_508, memb_value_constraint_505 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeRequired_IEs_tags_505[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeRequired_IEs_tag2el_505[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRequired_IEs_specs_505 = { + sizeof(struct SgNBChangeRequired_IEs), + offsetof(struct SgNBChangeRequired_IEs, _asn_ctx), + asn_MAP_SgNBChangeRequired_IEs_tag2el_505, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeRequired_IEs = { + "SgNBChangeRequired-IEs", + "SgNBChangeRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeRequired_IEs_tags_505, + sizeof(asn_DEF_SgNBChangeRequired_IEs_tags_505) + /sizeof(asn_DEF_SgNBChangeRequired_IEs_tags_505[0]), /* 1 */ + asn_DEF_SgNBChangeRequired_IEs_tags_505, /* Same as above */ + sizeof(asn_DEF_SgNBChangeRequired_IEs_tags_505) + /sizeof(asn_DEF_SgNBChangeRequired_IEs_tags_505[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeRequired_IEs_505, + 3, /* Elements count */ + &asn_SPC_SgNBChangeRequired_IEs_specs_505 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_512[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs__value, choice.E_RABs_ToBeReleased_SgNBChaConfList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_ToBeReleased_SgNBChaConfList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-ToBeReleased-SgNBChaConfList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_512[] = { 0, 1, 4, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_512[] = { 0, 1, 3, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_512[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* E-RABs-ToBeReleased-SgNBChaConfList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_512 = { + sizeof(struct SgNBChangeConfirm_IEs__value), + offsetof(struct SgNBChangeConfirm_IEs__value, _asn_ctx), + offsetof(struct SgNBChangeConfirm_IEs__value, present), + sizeof(((struct SgNBChangeConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_512, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_512, + asn_MAP_value_from_canonical_512, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_512 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_512, + 5, /* Elements count */ + &asn_SPC_value_specs_512 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBChangeConfirm_IEs_509[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_510, memb_id_constraint_509 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBChangeConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_511, memb_criticality_constraint_509 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_512, + select_SgNBChangeConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_512, memb_value_constraint_509 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeConfirm_IEs_tags_509[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeConfirm_IEs_tag2el_509[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeConfirm_IEs_specs_509 = { + sizeof(struct SgNBChangeConfirm_IEs), + offsetof(struct SgNBChangeConfirm_IEs, _asn_ctx), + asn_MAP_SgNBChangeConfirm_IEs_tag2el_509, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeConfirm_IEs = { + "SgNBChangeConfirm-IEs", + "SgNBChangeConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeConfirm_IEs_tags_509, + sizeof(asn_DEF_SgNBChangeConfirm_IEs_tags_509) + /sizeof(asn_DEF_SgNBChangeConfirm_IEs_tags_509[0]), /* 1 */ + asn_DEF_SgNBChangeConfirm_IEs_tags_509, /* Same as above */ + sizeof(asn_DEF_SgNBChangeConfirm_IEs_tags_509) + /sizeof(asn_DEF_SgNBChangeConfirm_IEs_tags_509[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeConfirm_IEs_509, + 3, /* Elements count */ + &asn_SPC_SgNBChangeConfirm_IEs_specs_509 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_516[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs__value, choice.SplitSRB), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SplitSRB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SplitSRB" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs__value, choice.UENRMeasurement), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UENRMeasurement, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UENRMeasurement" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_516[] = { 0, 1, 4, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_516[] = { 0, 1, 3, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_516[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* SplitSRB */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* UENRMeasurement */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_516 = { + sizeof(struct RRCTransfer_IEs__value), + offsetof(struct RRCTransfer_IEs__value, _asn_ctx), + offsetof(struct RRCTransfer_IEs__value, present), + sizeof(((struct RRCTransfer_IEs__value *)0)->present), + asn_MAP_value_tag2el_516, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_516, + asn_MAP_value_from_canonical_516, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_516 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_516, + 5, /* Elements count */ + &asn_SPC_value_specs_516 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RRCTransfer_IEs_513[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_514, memb_id_constraint_513 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RRCTransfer_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_515, memb_criticality_constraint_513 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RRCTransfer_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_516, + select_RRCTransfer_IEs_value_type, + { 0, &asn_PER_memb_value_constr_516, memb_value_constraint_513 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RRCTransfer_IEs_tags_513[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRCTransfer_IEs_tag2el_513[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RRCTransfer_IEs_specs_513 = { + sizeof(struct RRCTransfer_IEs), + offsetof(struct RRCTransfer_IEs, _asn_ctx), + asn_MAP_RRCTransfer_IEs_tag2el_513, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCTransfer_IEs = { + "RRCTransfer-IEs", + "RRCTransfer-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RRCTransfer_IEs_tags_513, + sizeof(asn_DEF_RRCTransfer_IEs_tags_513) + /sizeof(asn_DEF_RRCTransfer_IEs_tags_513[0]), /* 1 */ + asn_DEF_RRCTransfer_IEs_tags_513, /* Same as above */ + sizeof(asn_DEF_RRCTransfer_IEs_tags_513) + /sizeof(asn_DEF_RRCTransfer_IEs_tags_513[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RRCTransfer_IEs_513, + 3, /* Elements count */ + &asn_SPC_RRCTransfer_IEs_specs_513 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_520[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_520[] = { 0, 1, 4, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_520[] = { 0, 1, 4, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_520[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_520 = { + sizeof(struct SgNBChangeRefuse_IEs__value), + offsetof(struct SgNBChangeRefuse_IEs__value, _asn_ctx), + offsetof(struct SgNBChangeRefuse_IEs__value, present), + sizeof(((struct SgNBChangeRefuse_IEs__value *)0)->present), + asn_MAP_value_tag2el_520, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_520, + asn_MAP_value_from_canonical_520, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_520 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_520, + 5, /* Elements count */ + &asn_SPC_value_specs_520 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBChangeRefuse_IEs_517[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_518, memb_id_constraint_517 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBChangeRefuse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_519, memb_criticality_constraint_517 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_520, + select_SgNBChangeRefuse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_520, memb_value_constraint_517 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeRefuse_IEs_tags_517[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeRefuse_IEs_tag2el_517[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRefuse_IEs_specs_517 = { + sizeof(struct SgNBChangeRefuse_IEs), + offsetof(struct SgNBChangeRefuse_IEs, _asn_ctx), + asn_MAP_SgNBChangeRefuse_IEs_tag2el_517, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeRefuse_IEs = { + "SgNBChangeRefuse-IEs", + "SgNBChangeRefuse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeRefuse_IEs_tags_517, + sizeof(asn_DEF_SgNBChangeRefuse_IEs_tags_517) + /sizeof(asn_DEF_SgNBChangeRefuse_IEs_tags_517[0]), /* 1 */ + asn_DEF_SgNBChangeRefuse_IEs_tags_517, /* Same as above */ + sizeof(asn_DEF_SgNBChangeRefuse_IEs_tags_517) + /sizeof(asn_DEF_SgNBChangeRefuse_IEs_tags_517[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeRefuse_IEs_517, + 3, /* Elements count */ + &asn_SPC_SgNBChangeRefuse_IEs_specs_517 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_524[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupRequest_IEs__value, choice.InitiatingNodeType_EndcX2Setup), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_InitiatingNodeType_EndcX2Setup, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "InitiatingNodeType-EndcX2Setup" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_524[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_524 = { + sizeof(struct ENDCX2SetupRequest_IEs__value), + offsetof(struct ENDCX2SetupRequest_IEs__value, _asn_ctx), + offsetof(struct ENDCX2SetupRequest_IEs__value, present), + sizeof(((struct ENDCX2SetupRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_524, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_524 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_524, + 1, /* Elements count */ + &asn_SPC_value_specs_524 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2SetupRequest_IEs_521[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_522, memb_id_constraint_521 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2SetupRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_523, memb_criticality_constraint_521 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_524, + select_ENDCX2SetupRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_524, memb_value_constraint_521 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupRequest_IEs_tags_521[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupRequest_IEs_tag2el_521[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupRequest_IEs_specs_521 = { + sizeof(struct ENDCX2SetupRequest_IEs), + offsetof(struct ENDCX2SetupRequest_IEs, _asn_ctx), + asn_MAP_ENDCX2SetupRequest_IEs_tag2el_521, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupRequest_IEs = { + "ENDCX2SetupRequest-IEs", + "ENDCX2SetupRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupRequest_IEs_tags_521, + sizeof(asn_DEF_ENDCX2SetupRequest_IEs_tags_521) + /sizeof(asn_DEF_ENDCX2SetupRequest_IEs_tags_521[0]), /* 1 */ + asn_DEF_ENDCX2SetupRequest_IEs_tags_521, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupRequest_IEs_tags_521) + /sizeof(asn_DEF_ENDCX2SetupRequest_IEs_tags_521[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupRequest_IEs_521, + 3, /* Elements count */ + &asn_SPC_ENDCX2SetupRequest_IEs_specs_521 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_528[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqIEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedEUTRAcellsENDCX2ManagementList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_528[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedEUTRAcellsENDCX2ManagementList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_528 = { + sizeof(struct ENB_ENDCX2SetupReqIEs__value), + offsetof(struct ENB_ENDCX2SetupReqIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCX2SetupReqIEs__value, present), + sizeof(((struct ENB_ENDCX2SetupReqIEs__value *)0)->present), + asn_MAP_value_tag2el_528, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_528 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_528, + 2, /* Elements count */ + &asn_SPC_value_specs_528 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCX2SetupReqIEs_525[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_526, memb_id_constraint_525 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_ENDCX2SetupReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_527, memb_criticality_constraint_525 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_528, + select_ENB_ENDCX2SetupReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_528, memb_value_constraint_525 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCX2SetupReqIEs_tag2el_525[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2SetupReqIEs_specs_525 = { + sizeof(struct ENB_ENDCX2SetupReqIEs), + offsetof(struct ENB_ENDCX2SetupReqIEs, _asn_ctx), + asn_MAP_ENB_ENDCX2SetupReqIEs_tag2el_525, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2SetupReqIEs = { + "ENB-ENDCX2SetupReqIEs", + "ENB-ENDCX2SetupReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525, + sizeof(asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525) + /sizeof(asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525[0]), /* 1 */ + asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525) + /sizeof(asn_DEF_ENB_ENDCX2SetupReqIEs_tags_525[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCX2SetupReqIEs_525, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCX2SetupReqIEs_specs_525 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_532[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqIEs__value, choice.GlobalGNB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalGNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqIEs__value, choice.ServedNRcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsENDCX2ManagementList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_532[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalGNB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedNRcellsENDCX2ManagementList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_532 = { + sizeof(struct En_gNB_ENDCX2SetupReqIEs__value), + offsetof(struct En_gNB_ENDCX2SetupReqIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCX2SetupReqIEs__value, present), + sizeof(((struct En_gNB_ENDCX2SetupReqIEs__value *)0)->present), + asn_MAP_value_tag2el_532, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_532 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_532, + 2, /* Elements count */ + &asn_SPC_value_specs_532 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2SetupReqIEs_529[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_530, memb_id_constraint_529 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCX2SetupReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_531, memb_criticality_constraint_529 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_532, + select_En_gNB_ENDCX2SetupReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_532, memb_value_constraint_529 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCX2SetupReqIEs_tag2el_529[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2SetupReqIEs_specs_529 = { + sizeof(struct En_gNB_ENDCX2SetupReqIEs), + offsetof(struct En_gNB_ENDCX2SetupReqIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCX2SetupReqIEs_tag2el_529, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2SetupReqIEs = { + "En-gNB-ENDCX2SetupReqIEs", + "En-gNB-ENDCX2SetupReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529, + sizeof(asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529) + /sizeof(asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529[0]), /* 1 */ + asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529) + /sizeof(asn_DEF_En_gNB_ENDCX2SetupReqIEs_tags_529[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCX2SetupReqIEs_529, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCX2SetupReqIEs_specs_529 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_536[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupResponse_IEs__value, choice.RespondingNodeType_EndcX2Setup), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RespondingNodeType_EndcX2Setup, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RespondingNodeType-EndcX2Setup" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_536[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_536 = { + sizeof(struct ENDCX2SetupResponse_IEs__value), + offsetof(struct ENDCX2SetupResponse_IEs__value, _asn_ctx), + offsetof(struct ENDCX2SetupResponse_IEs__value, present), + sizeof(((struct ENDCX2SetupResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_536, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_536 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_536, + 1, /* Elements count */ + &asn_SPC_value_specs_536 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2SetupResponse_IEs_533[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_534, memb_id_constraint_533 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2SetupResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_535, memb_criticality_constraint_533 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_536, + select_ENDCX2SetupResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_536, memb_value_constraint_533 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupResponse_IEs_tags_533[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupResponse_IEs_tag2el_533[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupResponse_IEs_specs_533 = { + sizeof(struct ENDCX2SetupResponse_IEs), + offsetof(struct ENDCX2SetupResponse_IEs, _asn_ctx), + asn_MAP_ENDCX2SetupResponse_IEs_tag2el_533, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupResponse_IEs = { + "ENDCX2SetupResponse-IEs", + "ENDCX2SetupResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupResponse_IEs_tags_533, + sizeof(asn_DEF_ENDCX2SetupResponse_IEs_tags_533) + /sizeof(asn_DEF_ENDCX2SetupResponse_IEs_tags_533[0]), /* 1 */ + asn_DEF_ENDCX2SetupResponse_IEs_tags_533, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupResponse_IEs_tags_533) + /sizeof(asn_DEF_ENDCX2SetupResponse_IEs_tags_533[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupResponse_IEs_533, + 3, /* Elements count */ + &asn_SPC_ENDCX2SetupResponse_IEs_specs_533 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_540[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqAckIEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqAckIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedEUTRAcellsENDCX2ManagementList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_540[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedEUTRAcellsENDCX2ManagementList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_540 = { + sizeof(struct ENB_ENDCX2SetupReqAckIEs__value), + offsetof(struct ENB_ENDCX2SetupReqAckIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCX2SetupReqAckIEs__value, present), + sizeof(((struct ENB_ENDCX2SetupReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_540, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_540 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_540, + 2, /* Elements count */ + &asn_SPC_value_specs_540 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCX2SetupReqAckIEs_537[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_538, memb_id_constraint_537 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_ENDCX2SetupReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_539, memb_criticality_constraint_537 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2SetupReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_540, + select_ENB_ENDCX2SetupReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_540, memb_value_constraint_537 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCX2SetupReqAckIEs_tag2el_537[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2SetupReqAckIEs_specs_537 = { + sizeof(struct ENB_ENDCX2SetupReqAckIEs), + offsetof(struct ENB_ENDCX2SetupReqAckIEs, _asn_ctx), + asn_MAP_ENB_ENDCX2SetupReqAckIEs_tag2el_537, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2SetupReqAckIEs = { + "ENB-ENDCX2SetupReqAckIEs", + "ENB-ENDCX2SetupReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537, + sizeof(asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537) + /sizeof(asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537[0]), /* 1 */ + asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537) + /sizeof(asn_DEF_ENB_ENDCX2SetupReqAckIEs_tags_537[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCX2SetupReqAckIEs_537, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCX2SetupReqAckIEs_specs_537 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_544[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqAckIEs__value, choice.GlobalGNB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalGNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqAckIEs__value, choice.ServedNRcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsENDCX2ManagementList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_544[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalGNB-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedNRcellsENDCX2ManagementList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_544 = { + sizeof(struct En_gNB_ENDCX2SetupReqAckIEs__value), + offsetof(struct En_gNB_ENDCX2SetupReqAckIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCX2SetupReqAckIEs__value, present), + sizeof(((struct En_gNB_ENDCX2SetupReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_544, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_544 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_544, + 2, /* Elements count */ + &asn_SPC_value_specs_544 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2SetupReqAckIEs_541[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_542, memb_id_constraint_541 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCX2SetupReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_543, memb_criticality_constraint_541 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_544, + select_En_gNB_ENDCX2SetupReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_544, memb_value_constraint_541 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCX2SetupReqAckIEs_tag2el_541[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2SetupReqAckIEs_specs_541 = { + sizeof(struct En_gNB_ENDCX2SetupReqAckIEs), + offsetof(struct En_gNB_ENDCX2SetupReqAckIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCX2SetupReqAckIEs_tag2el_541, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2SetupReqAckIEs = { + "En-gNB-ENDCX2SetupReqAckIEs", + "En-gNB-ENDCX2SetupReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541, + sizeof(asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541) + /sizeof(asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541[0]), /* 1 */ + asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541) + /sizeof(asn_DEF_En_gNB_ENDCX2SetupReqAckIEs_tags_541[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCX2SetupReqAckIEs_541, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCX2SetupReqAckIEs_specs_541 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_548[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, +}; +static const unsigned asn_MAP_value_to_canonical_548[] = { 2, 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_548[] = { 2, 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_548[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_548 = { + sizeof(struct ENDCX2SetupFailure_IEs__value), + offsetof(struct ENDCX2SetupFailure_IEs__value, _asn_ctx), + offsetof(struct ENDCX2SetupFailure_IEs__value, present), + sizeof(((struct ENDCX2SetupFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_548, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_548, + asn_MAP_value_from_canonical_548, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_548 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_548, + 3, /* Elements count */ + &asn_SPC_value_specs_548 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2SetupFailure_IEs_545[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_546, memb_id_constraint_545 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2SetupFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_547, memb_criticality_constraint_545 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2SetupFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_548, + select_ENDCX2SetupFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_548, memb_value_constraint_545 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2SetupFailure_IEs_tags_545[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2SetupFailure_IEs_tag2el_545[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupFailure_IEs_specs_545 = { + sizeof(struct ENDCX2SetupFailure_IEs), + offsetof(struct ENDCX2SetupFailure_IEs, _asn_ctx), + asn_MAP_ENDCX2SetupFailure_IEs_tag2el_545, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupFailure_IEs = { + "ENDCX2SetupFailure-IEs", + "ENDCX2SetupFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2SetupFailure_IEs_tags_545, + sizeof(asn_DEF_ENDCX2SetupFailure_IEs_tags_545) + /sizeof(asn_DEF_ENDCX2SetupFailure_IEs_tags_545[0]), /* 1 */ + asn_DEF_ENDCX2SetupFailure_IEs_tags_545, /* Same as above */ + sizeof(asn_DEF_ENDCX2SetupFailure_IEs_tags_545) + /sizeof(asn_DEF_ENDCX2SetupFailure_IEs_tags_545[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2SetupFailure_IEs_545, + 3, /* Elements count */ + &asn_SPC_ENDCX2SetupFailure_IEs_specs_545 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_552[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdate_IEs__value, choice.InitiatingNodeType_EndcConfigUpdate), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_InitiatingNodeType_EndcConfigUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "InitiatingNodeType-EndcConfigUpdate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_552[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_552 = { + sizeof(struct ENDCConfigurationUpdate_IEs__value), + offsetof(struct ENDCConfigurationUpdate_IEs__value, _asn_ctx), + offsetof(struct ENDCConfigurationUpdate_IEs__value, present), + sizeof(((struct ENDCConfigurationUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_552, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_552 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_552, + 1, /* Elements count */ + &asn_SPC_value_specs_552 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdate_IEs_549[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_550, memb_id_constraint_549 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCConfigurationUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_551, memb_criticality_constraint_549 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_552, + select_ENDCConfigurationUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_552, memb_value_constraint_549 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdate_IEs_tags_549[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdate_IEs_tag2el_549[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdate_IEs_specs_549 = { + sizeof(struct ENDCConfigurationUpdate_IEs), + offsetof(struct ENDCConfigurationUpdate_IEs, _asn_ctx), + asn_MAP_ENDCConfigurationUpdate_IEs_tag2el_549, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdate_IEs = { + "ENDCConfigurationUpdate-IEs", + "ENDCConfigurationUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdate_IEs_tags_549, + sizeof(asn_DEF_ENDCConfigurationUpdate_IEs_tags_549) + /sizeof(asn_DEF_ENDCConfigurationUpdate_IEs_tags_549[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdate_IEs_tags_549, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdate_IEs_tags_549) + /sizeof(asn_DEF_ENDCConfigurationUpdate_IEs_tags_549[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdate_IEs_549, + 3, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdate_IEs_specs_549 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_556[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs__value, choice.CellAssistanceInformation), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_CellAssistanceInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CellAssistanceInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedEUTRAcellsENDCX2ManagementList" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsToModifyListENDCConfUpd), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedEUTRAcellsToModifyListENDCConfUpd" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsToDeleteListENDCConfUpd), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedEUTRAcellsToDeleteListENDCConfUpd" + }, +}; +static const unsigned asn_MAP_value_to_canonical_556[] = { 1, 2, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_556[] = { 3, 0, 1, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_556[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 2 }, /* ServedEUTRAcellsENDCX2ManagementList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* ServedEUTRAcellsToModifyListENDCConfUpd */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 }, /* ServedEUTRAcellsToDeleteListENDCConfUpd */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* limited-list */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* full-list */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_556 = { + sizeof(struct ENB_ENDCConfigUpdateIEs__value), + offsetof(struct ENB_ENDCConfigUpdateIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCConfigUpdateIEs__value, present), + sizeof(((struct ENB_ENDCConfigUpdateIEs__value *)0)->present), + asn_MAP_value_tag2el_556, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_556, + asn_MAP_value_from_canonical_556, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_556 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_556, + 4, /* Elements count */ + &asn_SPC_value_specs_556 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCConfigUpdateIEs_553[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_554, memb_id_constraint_553 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_ENDCConfigUpdateIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_555, memb_criticality_constraint_553 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_556, + select_ENB_ENDCConfigUpdateIEs_value_type, + { 0, &asn_PER_memb_value_constr_556, memb_value_constraint_553 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCConfigUpdateIEs_tag2el_553[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCConfigUpdateIEs_specs_553 = { + sizeof(struct ENB_ENDCConfigUpdateIEs), + offsetof(struct ENB_ENDCConfigUpdateIEs, _asn_ctx), + asn_MAP_ENB_ENDCConfigUpdateIEs_tag2el_553, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCConfigUpdateIEs = { + "ENB-ENDCConfigUpdateIEs", + "ENB-ENDCConfigUpdateIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553, + sizeof(asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553) + /sizeof(asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553[0]), /* 1 */ + asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553) + /sizeof(asn_DEF_ENB_ENDCConfigUpdateIEs_tags_553[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCConfigUpdateIEs_553, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCConfigUpdateIEs_specs_553 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_560[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsENDCX2ManagementList" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsToModifyENDCConfUpdList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsToModifyENDCConfUpdList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsToModifyENDCConfUpdList" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsToDeleteENDCConfUpdList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsToDeleteENDCConfUpdList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsToDeleteENDCConfUpdList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_560[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* ServedNRcellsENDCX2ManagementList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ServedNRcellsToModifyENDCConfUpdList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* ServedNRcellsToDeleteENDCConfUpdList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_560 = { + sizeof(struct En_gNB_ENDCConfigUpdateIEs__value), + offsetof(struct En_gNB_ENDCConfigUpdateIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCConfigUpdateIEs__value, present), + sizeof(((struct En_gNB_ENDCConfigUpdateIEs__value *)0)->present), + asn_MAP_value_tag2el_560, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_560 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_560, + 3, /* Elements count */ + &asn_SPC_value_specs_560 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCConfigUpdateIEs_557[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_558, memb_id_constraint_557 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCConfigUpdateIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_559, memb_criticality_constraint_557 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_560, + select_En_gNB_ENDCConfigUpdateIEs_value_type, + { 0, &asn_PER_memb_value_constr_560, memb_value_constraint_557 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCConfigUpdateIEs_tag2el_557[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCConfigUpdateIEs_specs_557 = { + sizeof(struct En_gNB_ENDCConfigUpdateIEs), + offsetof(struct En_gNB_ENDCConfigUpdateIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCConfigUpdateIEs_tag2el_557, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCConfigUpdateIEs = { + "En-gNB-ENDCConfigUpdateIEs", + "En-gNB-ENDCConfigUpdateIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557, + sizeof(asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557) + /sizeof(asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557[0]), /* 1 */ + asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557) + /sizeof(asn_DEF_En_gNB_ENDCConfigUpdateIEs_tags_557[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCConfigUpdateIEs_557, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCConfigUpdateIEs_specs_557 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_564[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs__value, choice.RespondingNodeType_EndcConfigUpdate), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RespondingNodeType_EndcConfigUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RespondingNodeType-EndcConfigUpdate" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_564[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_564 = { + sizeof(struct ENDCConfigurationUpdateAcknowledge_IEs__value), + offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs__value, present), + sizeof(((struct ENDCConfigurationUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_564, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_564 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_564, + 1, /* Elements count */ + &asn_SPC_value_specs_564 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateAcknowledge_IEs_561[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_562, memb_id_constraint_561 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCConfigurationUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_563, memb_criticality_constraint_561 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_564, + select_ENDCConfigurationUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_564, memb_value_constraint_561 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdateAcknowledge_IEs_tag2el_561[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateAcknowledge_IEs_specs_561 = { + sizeof(struct ENDCConfigurationUpdateAcknowledge_IEs), + offsetof(struct ENDCConfigurationUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_ENDCConfigurationUpdateAcknowledge_IEs_tag2el_561, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs = { + "ENDCConfigurationUpdateAcknowledge-IEs", + "ENDCConfigurationUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561, + sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561) + /sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561) + /sizeof(asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs_tags_561[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdateAcknowledge_IEs_561, + 3, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdateAcknowledge_IEs_specs_561 /* Additional specs */ +}; + +static asn_CHOICE_specifics_t asn_SPC_value_specs_568 = { + sizeof(struct ENB_ENDCConfigUpdateAckIEs__value), + offsetof(struct ENB_ENDCConfigUpdateAckIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCConfigUpdateAckIEs__value, present), + sizeof(((struct ENB_ENDCConfigUpdateAckIEs__value *)0)->present), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_568 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + 0, 0, /* No members */ + &asn_SPC_value_specs_568 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCConfigUpdateAckIEs_565[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_566, memb_id_constraint_565 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, &asn_PER_memb_criticality_constr_567, memb_criticality_constraint_565 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCConfigUpdateAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_568, + 0, + { 0, &asn_PER_memb_value_constr_568, memb_value_constraint_565 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCConfigUpdateAckIEs_tag2el_565[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCConfigUpdateAckIEs_specs_565 = { + sizeof(struct ENB_ENDCConfigUpdateAckIEs), + offsetof(struct ENB_ENDCConfigUpdateAckIEs, _asn_ctx), + asn_MAP_ENB_ENDCConfigUpdateAckIEs_tag2el_565, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCConfigUpdateAckIEs = { + "ENB-ENDCConfigUpdateAckIEs", + "ENB-ENDCConfigUpdateAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565, + sizeof(asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565) + /sizeof(asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565[0]), /* 1 */ + asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565) + /sizeof(asn_DEF_ENB_ENDCConfigUpdateAckIEs_tags_565[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCConfigUpdateAckIEs_565, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCConfigUpdateAckIEs_specs_565 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_572[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateAckIEs__value, choice.ServedNRcellsENDCX2ManagementList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRcellsENDCX2ManagementList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRcellsENDCX2ManagementList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_572[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedNRcellsENDCX2ManagementList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_572 = { + sizeof(struct En_gNB_ENDCConfigUpdateAckIEs__value), + offsetof(struct En_gNB_ENDCConfigUpdateAckIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCConfigUpdateAckIEs__value, present), + sizeof(((struct En_gNB_ENDCConfigUpdateAckIEs__value *)0)->present), + asn_MAP_value_tag2el_572, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_572 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_572, + 1, /* Elements count */ + &asn_SPC_value_specs_572 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCConfigUpdateAckIEs_569[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_570, memb_id_constraint_569 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCConfigUpdateAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_571, memb_criticality_constraint_569 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_572, + select_En_gNB_ENDCConfigUpdateAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_572, memb_value_constraint_569 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCConfigUpdateAckIEs_tag2el_569[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCConfigUpdateAckIEs_specs_569 = { + sizeof(struct En_gNB_ENDCConfigUpdateAckIEs), + offsetof(struct En_gNB_ENDCConfigUpdateAckIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCConfigUpdateAckIEs_tag2el_569, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCConfigUpdateAckIEs = { + "En-gNB-ENDCConfigUpdateAckIEs", + "En-gNB-ENDCConfigUpdateAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569, + sizeof(asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569) + /sizeof(asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569[0]), /* 1 */ + asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569) + /sizeof(asn_DEF_En_gNB_ENDCConfigUpdateAckIEs_tags_569[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCConfigUpdateAckIEs_569, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCConfigUpdateAckIEs_specs_569 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_576[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, +}; +static const unsigned asn_MAP_value_to_canonical_576[] = { 2, 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_576[] = { 2, 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_576[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_576 = { + sizeof(struct ENDCConfigurationUpdateFailure_IEs__value), + offsetof(struct ENDCConfigurationUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct ENDCConfigurationUpdateFailure_IEs__value, present), + sizeof(((struct ENDCConfigurationUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_576, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_576, + asn_MAP_value_from_canonical_576, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_576 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_576, + 3, /* Elements count */ + &asn_SPC_value_specs_576 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateFailure_IEs_573[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_574, memb_id_constraint_573 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCConfigurationUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_575, memb_criticality_constraint_573 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCConfigurationUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_576, + select_ENDCConfigurationUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_576, memb_value_constraint_573 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCConfigurationUpdateFailure_IEs_tag2el_573[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateFailure_IEs_specs_573 = { + sizeof(struct ENDCConfigurationUpdateFailure_IEs), + offsetof(struct ENDCConfigurationUpdateFailure_IEs, _asn_ctx), + asn_MAP_ENDCConfigurationUpdateFailure_IEs_tag2el_573, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateFailure_IEs = { + "ENDCConfigurationUpdateFailure-IEs", + "ENDCConfigurationUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573, + sizeof(asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573) + /sizeof(asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573[0]), /* 1 */ + asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573, /* Same as above */ + sizeof(asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573) + /sizeof(asn_DEF_ENDCConfigurationUpdateFailure_IEs_tags_573[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCConfigurationUpdateFailure_IEs_573, + 3, /* Elements count */ + &asn_SPC_ENDCConfigurationUpdateFailure_IEs_specs_573 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_580[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest_IEs__value, choice.ServedNRCellsToActivate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCellsToActivate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ServedNRCellsToActivate" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest_IEs__value, choice.ActivationID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ActivationID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ActivationID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_580[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_580[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_580[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* ActivationID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedNRCellsToActivate */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_580 = { + sizeof(struct ENDCCellActivationRequest_IEs__value), + offsetof(struct ENDCCellActivationRequest_IEs__value, _asn_ctx), + offsetof(struct ENDCCellActivationRequest_IEs__value, present), + sizeof(((struct ENDCCellActivationRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_580, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_580, + asn_MAP_value_from_canonical_580, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_580 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_580, + 2, /* Elements count */ + &asn_SPC_value_specs_580 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCCellActivationRequest_IEs_577[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_578, memb_id_constraint_577 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCCellActivationRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_579, memb_criticality_constraint_577 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_580, + select_ENDCCellActivationRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_580, memb_value_constraint_577 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationRequest_IEs_tags_577[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationRequest_IEs_tag2el_577[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationRequest_IEs_specs_577 = { + sizeof(struct ENDCCellActivationRequest_IEs), + offsetof(struct ENDCCellActivationRequest_IEs, _asn_ctx), + asn_MAP_ENDCCellActivationRequest_IEs_tag2el_577, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationRequest_IEs = { + "ENDCCellActivationRequest-IEs", + "ENDCCellActivationRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationRequest_IEs_tags_577, + sizeof(asn_DEF_ENDCCellActivationRequest_IEs_tags_577) + /sizeof(asn_DEF_ENDCCellActivationRequest_IEs_tags_577[0]), /* 1 */ + asn_DEF_ENDCCellActivationRequest_IEs_tags_577, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationRequest_IEs_tags_577) + /sizeof(asn_DEF_ENDCCellActivationRequest_IEs_tags_577[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationRequest_IEs_577, + 3, /* Elements count */ + &asn_SPC_ENDCCellActivationRequest_IEs_specs_577 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_584[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs__value, choice.ActivatedNRCellList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ActivatedNRCellList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ActivatedNRCellList" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs__value, choice.ActivationID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ActivationID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ActivationID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_584[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_584[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_584[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* ActivationID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ActivatedNRCellList */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_584 = { + sizeof(struct ENDCCellActivationResponse_IEs__value), + offsetof(struct ENDCCellActivationResponse_IEs__value, _asn_ctx), + offsetof(struct ENDCCellActivationResponse_IEs__value, present), + sizeof(((struct ENDCCellActivationResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_584, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_584, + asn_MAP_value_from_canonical_584, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_584 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_584, + 3, /* Elements count */ + &asn_SPC_value_specs_584 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCCellActivationResponse_IEs_581[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_582, memb_id_constraint_581 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCCellActivationResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_583, memb_criticality_constraint_581 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_584, + select_ENDCCellActivationResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_584, memb_value_constraint_581 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationResponse_IEs_tags_581[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationResponse_IEs_tag2el_581[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationResponse_IEs_specs_581 = { + sizeof(struct ENDCCellActivationResponse_IEs), + offsetof(struct ENDCCellActivationResponse_IEs, _asn_ctx), + asn_MAP_ENDCCellActivationResponse_IEs_tag2el_581, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationResponse_IEs = { + "ENDCCellActivationResponse-IEs", + "ENDCCellActivationResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationResponse_IEs_tags_581, + sizeof(asn_DEF_ENDCCellActivationResponse_IEs_tags_581) + /sizeof(asn_DEF_ENDCCellActivationResponse_IEs_tags_581[0]), /* 1 */ + asn_DEF_ENDCCellActivationResponse_IEs_tags_581, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationResponse_IEs_tags_581) + /sizeof(asn_DEF_ENDCCellActivationResponse_IEs_tags_581[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationResponse_IEs_581, + 3, /* Elements count */ + &asn_SPC_ENDCCellActivationResponse_IEs_specs_581 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_588[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs__value, choice.ActivationID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ActivationID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ActivationID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_588[] = { 0, 2, 1 }; +static const unsigned asn_MAP_value_from_canonical_588[] = { 0, 2, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_588[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* ActivationID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_588 = { + sizeof(struct ENDCCellActivationFailure_IEs__value), + offsetof(struct ENDCCellActivationFailure_IEs__value, _asn_ctx), + offsetof(struct ENDCCellActivationFailure_IEs__value, present), + sizeof(((struct ENDCCellActivationFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_588, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_588, + asn_MAP_value_from_canonical_588, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_588 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_588, + 3, /* Elements count */ + &asn_SPC_value_specs_588 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCCellActivationFailure_IEs_585[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_586, memb_id_constraint_585 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCCellActivationFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_587, memb_criticality_constraint_585 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCCellActivationFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_588, + select_ENDCCellActivationFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_588, memb_value_constraint_585 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCCellActivationFailure_IEs_tags_585[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCCellActivationFailure_IEs_tag2el_585[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationFailure_IEs_specs_585 = { + sizeof(struct ENDCCellActivationFailure_IEs), + offsetof(struct ENDCCellActivationFailure_IEs, _asn_ctx), + asn_MAP_ENDCCellActivationFailure_IEs_tag2el_585, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationFailure_IEs = { + "ENDCCellActivationFailure-IEs", + "ENDCCellActivationFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCCellActivationFailure_IEs_tags_585, + sizeof(asn_DEF_ENDCCellActivationFailure_IEs_tags_585) + /sizeof(asn_DEF_ENDCCellActivationFailure_IEs_tags_585[0]), /* 1 */ + asn_DEF_ENDCCellActivationFailure_IEs_tags_585, /* Same as above */ + sizeof(asn_DEF_ENDCCellActivationFailure_IEs_tags_585) + /sizeof(asn_DEF_ENDCCellActivationFailure_IEs_tags_585[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCCellActivationFailure_IEs_585, + 3, /* Elements count */ + &asn_SPC_ENDCCellActivationFailure_IEs_specs_585 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_592[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs__value, choice.SecondaryRATUsageReportList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SecondaryRATUsageReportList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SecondaryRATUsageReportList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_592[] = { 0, 1, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_592[] = { 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_592[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* SecondaryRATUsageReportList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_592 = { + sizeof(struct SecondaryRATDataUsageReport_IEs__value), + offsetof(struct SecondaryRATDataUsageReport_IEs__value, _asn_ctx), + offsetof(struct SecondaryRATDataUsageReport_IEs__value, present), + sizeof(((struct SecondaryRATDataUsageReport_IEs__value *)0)->present), + asn_MAP_value_tag2el_592, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_592, + asn_MAP_value_from_canonical_592, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_592 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_592, + 4, /* Elements count */ + &asn_SPC_value_specs_592 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SecondaryRATDataUsageReport_IEs_589[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_590, memb_id_constraint_589 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SecondaryRATDataUsageReport_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_591, memb_criticality_constraint_589 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_592, + select_SecondaryRATDataUsageReport_IEs_value_type, + { 0, &asn_PER_memb_value_constr_592, memb_value_constraint_589 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SecondaryRATDataUsageReport_IEs_tag2el_589[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATDataUsageReport_IEs_specs_589 = { + sizeof(struct SecondaryRATDataUsageReport_IEs), + offsetof(struct SecondaryRATDataUsageReport_IEs, _asn_ctx), + asn_MAP_SecondaryRATDataUsageReport_IEs_tag2el_589, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATDataUsageReport_IEs = { + "SecondaryRATDataUsageReport-IEs", + "SecondaryRATDataUsageReport-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589, + sizeof(asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589) + /sizeof(asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589[0]), /* 1 */ + asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589, /* Same as above */ + sizeof(asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589) + /sizeof(asn_DEF_SecondaryRATDataUsageReport_IEs_tags_589[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATDataUsageReport_IEs_589, + 3, /* Elements count */ + &asn_SPC_SecondaryRATDataUsageReport_IEs_specs_589 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_596[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs__value, choice.SgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SgNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs__value, choice.UserPlaneTrafficActivityReport), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_UserPlaneTrafficActivityReport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UserPlaneTrafficActivityReport" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs__value, choice.ERABActivityNotifyItemList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ERABActivityNotifyItemList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ERABActivityNotifyItemList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, +}; +static const unsigned asn_MAP_value_to_canonical_596[] = { 0, 1, 4, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_596[] = { 0, 1, 3, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_596[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* UserPlaneTrafficActivityReport */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 } /* ERABActivityNotifyItemList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_596 = { + sizeof(struct SgNBActivityNotification_IEs__value), + offsetof(struct SgNBActivityNotification_IEs__value, _asn_ctx), + offsetof(struct SgNBActivityNotification_IEs__value, present), + sizeof(((struct SgNBActivityNotification_IEs__value *)0)->present), + asn_MAP_value_tag2el_596, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_596, + asn_MAP_value_from_canonical_596, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_596 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_596, + 5, /* Elements count */ + &asn_SPC_value_specs_596 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SgNBActivityNotification_IEs_593[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_594, memb_id_constraint_593 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SgNBActivityNotification_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_595, memb_criticality_constraint_593 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_596, + select_SgNBActivityNotification_IEs_value_type, + { 0, &asn_PER_memb_value_constr_596, memb_value_constraint_593 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBActivityNotification_IEs_tags_593[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBActivityNotification_IEs_tag2el_593[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBActivityNotification_IEs_specs_593 = { + sizeof(struct SgNBActivityNotification_IEs), + offsetof(struct SgNBActivityNotification_IEs, _asn_ctx), + asn_MAP_SgNBActivityNotification_IEs_tag2el_593, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBActivityNotification_IEs = { + "SgNBActivityNotification-IEs", + "SgNBActivityNotification-IEs", + &asn_OP_SEQUENCE, + asn_DEF_SgNBActivityNotification_IEs_tags_593, + sizeof(asn_DEF_SgNBActivityNotification_IEs_tags_593) + /sizeof(asn_DEF_SgNBActivityNotification_IEs_tags_593[0]), /* 1 */ + asn_DEF_SgNBActivityNotification_IEs_tags_593, /* Same as above */ + sizeof(asn_DEF_SgNBActivityNotification_IEs_tags_593) + /sizeof(asn_DEF_SgNBActivityNotification_IEs_tags_593[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBActivityNotification_IEs_593, + 3, /* Elements count */ + &asn_SPC_SgNBActivityNotification_IEs_specs_593 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_600[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired_IEs__value, choice.UEsToBeResetList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEsToBeResetList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEsToBeResetList" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_600[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* UEsToBeResetList */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_600 = { + sizeof(struct ENDCPartialResetRequired_IEs__value), + offsetof(struct ENDCPartialResetRequired_IEs__value, _asn_ctx), + offsetof(struct ENDCPartialResetRequired_IEs__value, present), + sizeof(((struct ENDCPartialResetRequired_IEs__value *)0)->present), + asn_MAP_value_tag2el_600, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_600 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_600, + 2, /* Elements count */ + &asn_SPC_value_specs_600 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCPartialResetRequired_IEs_597[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_598, memb_id_constraint_597 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCPartialResetRequired_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_599, memb_criticality_constraint_597 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetRequired_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_600, + select_ENDCPartialResetRequired_IEs_value_type, + { 0, &asn_PER_memb_value_constr_600, memb_value_constraint_597 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCPartialResetRequired_IEs_tags_597[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCPartialResetRequired_IEs_tag2el_597[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetRequired_IEs_specs_597 = { + sizeof(struct ENDCPartialResetRequired_IEs), + offsetof(struct ENDCPartialResetRequired_IEs, _asn_ctx), + asn_MAP_ENDCPartialResetRequired_IEs_tag2el_597, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetRequired_IEs = { + "ENDCPartialResetRequired-IEs", + "ENDCPartialResetRequired-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCPartialResetRequired_IEs_tags_597, + sizeof(asn_DEF_ENDCPartialResetRequired_IEs_tags_597) + /sizeof(asn_DEF_ENDCPartialResetRequired_IEs_tags_597[0]), /* 1 */ + asn_DEF_ENDCPartialResetRequired_IEs_tags_597, /* Same as above */ + sizeof(asn_DEF_ENDCPartialResetRequired_IEs_tags_597) + /sizeof(asn_DEF_ENDCPartialResetRequired_IEs_tags_597[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCPartialResetRequired_IEs_597, + 3, /* Elements count */ + &asn_SPC_ENDCPartialResetRequired_IEs_specs_597 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_604[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetConfirm_IEs__value, choice.UEsToBeResetList), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEsToBeResetList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UEsToBeResetList" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_604[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* UEsToBeResetList */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_604 = { + sizeof(struct ENDCPartialResetConfirm_IEs__value), + offsetof(struct ENDCPartialResetConfirm_IEs__value, _asn_ctx), + offsetof(struct ENDCPartialResetConfirm_IEs__value, present), + sizeof(((struct ENDCPartialResetConfirm_IEs__value *)0)->present), + asn_MAP_value_tag2el_604, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_604 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_604, + 1, /* Elements count */ + &asn_SPC_value_specs_604 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCPartialResetConfirm_IEs_601[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetConfirm_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_602, memb_id_constraint_601 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetConfirm_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCPartialResetConfirm_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_603, memb_criticality_constraint_601 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCPartialResetConfirm_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_604, + select_ENDCPartialResetConfirm_IEs_value_type, + { 0, &asn_PER_memb_value_constr_604, memb_value_constraint_601 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCPartialResetConfirm_IEs_tags_601[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCPartialResetConfirm_IEs_tag2el_601[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetConfirm_IEs_specs_601 = { + sizeof(struct ENDCPartialResetConfirm_IEs), + offsetof(struct ENDCPartialResetConfirm_IEs, _asn_ctx), + asn_MAP_ENDCPartialResetConfirm_IEs_tag2el_601, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetConfirm_IEs = { + "ENDCPartialResetConfirm-IEs", + "ENDCPartialResetConfirm-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCPartialResetConfirm_IEs_tags_601, + sizeof(asn_DEF_ENDCPartialResetConfirm_IEs_tags_601) + /sizeof(asn_DEF_ENDCPartialResetConfirm_IEs_tags_601[0]), /* 1 */ + asn_DEF_ENDCPartialResetConfirm_IEs_tags_601, /* Same as above */ + sizeof(asn_DEF_ENDCPartialResetConfirm_IEs_tags_601) + /sizeof(asn_DEF_ENDCPartialResetConfirm_IEs_tags_601[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCPartialResetConfirm_IEs_601, + 3, /* Elements count */ + &asn_SPC_ENDCPartialResetConfirm_IEs_specs_601 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_608[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs__value, choice.InitiatingNodeType_EutranrCellResourceCoordination), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_InitiatingNodeType_EutranrCellResourceCoordination, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "InitiatingNodeType-EutranrCellResourceCoordination" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_608[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiate-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* initiate-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_608 = { + sizeof(struct EUTRANRCellResourceCoordinationRequest_IEs__value), + offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs__value, _asn_ctx), + offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs__value, present), + sizeof(((struct EUTRANRCellResourceCoordinationRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_608, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_608 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_608, + 1, /* Elements count */ + &asn_SPC_value_specs_608 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationRequest_IEs_605[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_606, memb_id_constraint_605 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_EUTRANRCellResourceCoordinationRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_607, memb_criticality_constraint_605 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_608, + select_EUTRANRCellResourceCoordinationRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_608, memb_value_constraint_605 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRANRCellResourceCoordinationRequest_IEs_tag2el_605[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationRequest_IEs_specs_605 = { + sizeof(struct EUTRANRCellResourceCoordinationRequest_IEs), + offsetof(struct EUTRANRCellResourceCoordinationRequest_IEs, _asn_ctx), + asn_MAP_EUTRANRCellResourceCoordinationRequest_IEs_tag2el_605, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs = { + "EUTRANRCellResourceCoordinationRequest-IEs", + "EUTRANRCellResourceCoordinationRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605, + sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605[0]), /* 1 */ + asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605, /* Same as above */ + sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs_tags_605[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EUTRANRCellResourceCoordinationRequest_IEs_605, + 3, /* Elements count */ + &asn_SPC_EUTRANRCellResourceCoordinationRequest_IEs_specs_605 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_612[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.DataTrafficResourceIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataTrafficResourceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DataTrafficResourceIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.SpectrumSharingGroupID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SpectrumSharingGroupID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SpectrumSharingGroupID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofEUTRACellsinEUTRACoordinationReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ListofEUTRACellsinEUTRACoordinationReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ListofEUTRACellsinEUTRACoordinationReq" + }, +}; +static const unsigned asn_MAP_value_to_canonical_612[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_612[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_612[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofEUTRACellsinEUTRACoordinationReq */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_612 = { + sizeof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, _asn_ctx), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, present), + sizeof(((struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value *)0)->present), + asn_MAP_value_tag2el_612, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_612, + asn_MAP_value_from_canonical_612, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_612 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_612, + 3, /* Elements count */ + &asn_SPC_value_specs_612 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqIEs_609[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_610, memb_id_constraint_609 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_611, memb_criticality_constraint_609 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_612, + select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_612, memb_value_constraint_609 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_609[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_609 = { + sizeof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqIEs, _asn_ctx), + asn_MAP_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_609, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs = { + "ENB-EUTRA-NRCellResourceCoordinationReqIEs", + "ENB-EUTRA-NRCellResourceCoordinationReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609, + sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609) + /sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609[0]), /* 1 */ + asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609, /* Same as above */ + sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609) + /sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_609[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqIEs_609, + 3, /* Elements count */ + &asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_609 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_616[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.DataTrafficResourceIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataTrafficResourceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DataTrafficResourceIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofEUTRACellsinNRCoordinationReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ListofEUTRACellsinNRCoordinationReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ListofEUTRACellsinNRCoordinationReq" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.SpectrumSharingGroupID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SpectrumSharingGroupID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SpectrumSharingGroupID" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofNRCellsinNRCoordinationReq), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ListofNRCellsinNRCoordinationReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ListofNRCellsinNRCoordinationReq" + }, +}; +static const unsigned asn_MAP_value_to_canonical_616[] = { 2, 0, 1, 3 }; +static const unsigned asn_MAP_value_from_canonical_616[] = { 1, 2, 0, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_616[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, 0, 0 }, /* SpectrumSharingGroupID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* DataTrafficResourceIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ListofEUTRACellsinNRCoordinationReq */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* ListofNRCellsinNRCoordinationReq */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_616 = { + sizeof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, _asn_ctx), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, present), + sizeof(((struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value *)0)->present), + asn_MAP_value_tag2el_616, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_616, + asn_MAP_value_from_canonical_616, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_616 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_616, + 4, /* Elements count */ + &asn_SPC_value_specs_616 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_613[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_614, memb_id_constraint_613 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_615, memb_criticality_constraint_613 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_616, + select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_616, memb_value_constraint_613 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_613[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_613 = { + sizeof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, _asn_ctx), + asn_MAP_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_613, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs = { + "En-gNB-EUTRA-NRCellResourceCoordinationReqIEs", + "En-gNB-EUTRA-NRCellResourceCoordinationReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613, + sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613) + /sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613[0]), /* 1 */ + asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613, /* Same as above */ + sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613) + /sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_613[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_613, + 3, /* Elements count */ + &asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_613 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_620[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs__value, choice.RespondingNodeType_EutranrCellResourceCoordination), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RespondingNodeType_EutranrCellResourceCoordination, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RespondingNodeType-EutranrCellResourceCoordination" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_620[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_620 = { + sizeof(struct EUTRANRCellResourceCoordinationResponse_IEs__value), + offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs__value, _asn_ctx), + offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs__value, present), + sizeof(((struct EUTRANRCellResourceCoordinationResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_620, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_620 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_620, + 1, /* Elements count */ + &asn_SPC_value_specs_620 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationResponse_IEs_617[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_618, memb_id_constraint_617 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_EUTRANRCellResourceCoordinationResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_619, memb_criticality_constraint_617 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_620, + select_EUTRANRCellResourceCoordinationResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_620, memb_value_constraint_617 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRANRCellResourceCoordinationResponse_IEs_tag2el_617[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationResponse_IEs_specs_617 = { + sizeof(struct EUTRANRCellResourceCoordinationResponse_IEs), + offsetof(struct EUTRANRCellResourceCoordinationResponse_IEs, _asn_ctx), + asn_MAP_EUTRANRCellResourceCoordinationResponse_IEs_tag2el_617, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs = { + "EUTRANRCellResourceCoordinationResponse-IEs", + "EUTRANRCellResourceCoordinationResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617, + sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617[0]), /* 1 */ + asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617, /* Same as above */ + sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617) + /sizeof(asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs_tags_617[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EUTRANRCellResourceCoordinationResponse_IEs_617, + 3, /* Elements count */ + &asn_SPC_EUTRANRCellResourceCoordinationResponse_IEs_specs_617 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_624[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.DataTrafficResourceIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataTrafficResourceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DataTrafficResourceIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.SpectrumSharingGroupID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SpectrumSharingGroupID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SpectrumSharingGroupID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.ListofEUTRACellsinEUTRACoordinationResp), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ListofEUTRACellsinEUTRACoordinationResp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ListofEUTRACellsinEUTRACoordinationResp" + }, +}; +static const unsigned asn_MAP_value_to_canonical_624[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_624[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_624[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofEUTRACellsinEUTRACoordinationResp */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_624 = { + sizeof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, _asn_ctx), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, present), + sizeof(((struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_624, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_624, + asn_MAP_value_from_canonical_624, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_624 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_624, + 3, /* Elements count */ + &asn_SPC_value_specs_624 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_621[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_622, memb_id_constraint_621 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_623, memb_criticality_constraint_621 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_624, + select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_624, memb_value_constraint_621 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_621[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_621 = { + sizeof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs), + offsetof(struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, _asn_ctx), + asn_MAP_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_621, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs = { + "ENB-EUTRA-NRCellResourceCoordinationReqAckIEs", + "ENB-EUTRA-NRCellResourceCoordinationReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621, + sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621) + /sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621[0]), /* 1 */ + asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621, /* Same as above */ + sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621) + /sizeof(asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_621[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_621, + 3, /* Elements count */ + &asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_621 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_628[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.DataTrafficResourceIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DataTrafficResourceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "DataTrafficResourceIndication" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.SpectrumSharingGroupID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SpectrumSharingGroupID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SpectrumSharingGroupID" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.ListofNRCellsinNRCoordinationResp), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ListofNRCellsinNRCoordinationResp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ListofNRCellsinNRCoordinationResp" + }, +}; +static const unsigned asn_MAP_value_to_canonical_628[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_628[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_628[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofNRCellsinNRCoordinationResp */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_628 = { + sizeof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, _asn_ctx), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, present), + sizeof(((struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_628, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_628, + asn_MAP_value_from_canonical_628, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_628 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_628, + 3, /* Elements count */ + &asn_SPC_value_specs_628 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_625[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_626, memb_id_constraint_625 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_627, memb_criticality_constraint_625 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_628, + select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_628, memb_value_constraint_625 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_625[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_625 = { + sizeof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs), + offsetof(struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, _asn_ctx), + asn_MAP_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_625, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs = { + "En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs", + "En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625, + sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625) + /sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625[0]), /* 1 */ + asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625, /* Same as above */ + sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625) + /sizeof(asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_625[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_625, + 3, /* Elements count */ + &asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_625 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_632[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalRequest_IEs__value, choice.InitiatingNodeType_EndcX2Removal), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_InitiatingNodeType_EndcX2Removal, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "InitiatingNodeType-EndcX2Removal" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_632[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_632 = { + sizeof(struct ENDCX2RemovalRequest_IEs__value), + offsetof(struct ENDCX2RemovalRequest_IEs__value, _asn_ctx), + offsetof(struct ENDCX2RemovalRequest_IEs__value, present), + sizeof(((struct ENDCX2RemovalRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_632, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_632 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_632, + 1, /* Elements count */ + &asn_SPC_value_specs_632 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2RemovalRequest_IEs_629[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_630, memb_id_constraint_629 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2RemovalRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_631, memb_criticality_constraint_629 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_632, + select_ENDCX2RemovalRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_632, memb_value_constraint_629 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalRequest_IEs_tags_629[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalRequest_IEs_tag2el_629[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalRequest_IEs_specs_629 = { + sizeof(struct ENDCX2RemovalRequest_IEs), + offsetof(struct ENDCX2RemovalRequest_IEs, _asn_ctx), + asn_MAP_ENDCX2RemovalRequest_IEs_tag2el_629, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalRequest_IEs = { + "ENDCX2RemovalRequest-IEs", + "ENDCX2RemovalRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalRequest_IEs_tags_629, + sizeof(asn_DEF_ENDCX2RemovalRequest_IEs_tags_629) + /sizeof(asn_DEF_ENDCX2RemovalRequest_IEs_tags_629[0]), /* 1 */ + asn_DEF_ENDCX2RemovalRequest_IEs_tags_629, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalRequest_IEs_tags_629) + /sizeof(asn_DEF_ENDCX2RemovalRequest_IEs_tags_629[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalRequest_IEs_629, + 3, /* Elements count */ + &asn_SPC_ENDCX2RemovalRequest_IEs_specs_629 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_636[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqIEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_636[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_636 = { + sizeof(struct ENB_ENDCX2RemovalReqIEs__value), + offsetof(struct ENB_ENDCX2RemovalReqIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCX2RemovalReqIEs__value, present), + sizeof(((struct ENB_ENDCX2RemovalReqIEs__value *)0)->present), + asn_MAP_value_tag2el_636, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_636 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_636, + 1, /* Elements count */ + &asn_SPC_value_specs_636 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCX2RemovalReqIEs_633[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_634, memb_id_constraint_633 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_ENDCX2RemovalReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_635, memb_criticality_constraint_633 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_636, + select_ENB_ENDCX2RemovalReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_636, memb_value_constraint_633 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCX2RemovalReqIEs_tag2el_633[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2RemovalReqIEs_specs_633 = { + sizeof(struct ENB_ENDCX2RemovalReqIEs), + offsetof(struct ENB_ENDCX2RemovalReqIEs, _asn_ctx), + asn_MAP_ENB_ENDCX2RemovalReqIEs_tag2el_633, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2RemovalReqIEs = { + "ENB-ENDCX2RemovalReqIEs", + "ENB-ENDCX2RemovalReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633, + sizeof(asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633) + /sizeof(asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633[0]), /* 1 */ + asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633) + /sizeof(asn_DEF_ENB_ENDCX2RemovalReqIEs_tags_633[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCX2RemovalReqIEs_633, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCX2RemovalReqIEs_specs_633 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_640[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqIEs__value, choice.GlobalGNB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalGNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_640[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalGNB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_640 = { + sizeof(struct En_gNB_ENDCX2RemovalReqIEs__value), + offsetof(struct En_gNB_ENDCX2RemovalReqIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCX2RemovalReqIEs__value, present), + sizeof(((struct En_gNB_ENDCX2RemovalReqIEs__value *)0)->present), + asn_MAP_value_tag2el_640, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_640 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_640, + 1, /* Elements count */ + &asn_SPC_value_specs_640 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2RemovalReqIEs_637[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_638, memb_id_constraint_637 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCX2RemovalReqIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_639, memb_criticality_constraint_637 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_640, + select_En_gNB_ENDCX2RemovalReqIEs_value_type, + { 0, &asn_PER_memb_value_constr_640, memb_value_constraint_637 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCX2RemovalReqIEs_tag2el_637[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2RemovalReqIEs_specs_637 = { + sizeof(struct En_gNB_ENDCX2RemovalReqIEs), + offsetof(struct En_gNB_ENDCX2RemovalReqIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCX2RemovalReqIEs_tag2el_637, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2RemovalReqIEs = { + "En-gNB-ENDCX2RemovalReqIEs", + "En-gNB-ENDCX2RemovalReqIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637, + sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637) + /sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637[0]), /* 1 */ + asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637) + /sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqIEs_tags_637[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCX2RemovalReqIEs_637, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCX2RemovalReqIEs_specs_637 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_644[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalResponse_IEs__value, choice.RespondingNodeType_EndcX2Removal), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_RespondingNodeType_EndcX2Removal, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RespondingNodeType-EndcX2Removal" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_644[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_644 = { + sizeof(struct ENDCX2RemovalResponse_IEs__value), + offsetof(struct ENDCX2RemovalResponse_IEs__value, _asn_ctx), + offsetof(struct ENDCX2RemovalResponse_IEs__value, present), + sizeof(((struct ENDCX2RemovalResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_644, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_644 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_644, + 1, /* Elements count */ + &asn_SPC_value_specs_644 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2RemovalResponse_IEs_641[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_642, memb_id_constraint_641 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2RemovalResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_643, memb_criticality_constraint_641 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_644, + select_ENDCX2RemovalResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_644, memb_value_constraint_641 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalResponse_IEs_tags_641[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalResponse_IEs_tag2el_641[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalResponse_IEs_specs_641 = { + sizeof(struct ENDCX2RemovalResponse_IEs), + offsetof(struct ENDCX2RemovalResponse_IEs, _asn_ctx), + asn_MAP_ENDCX2RemovalResponse_IEs_tag2el_641, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalResponse_IEs = { + "ENDCX2RemovalResponse-IEs", + "ENDCX2RemovalResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalResponse_IEs_tags_641, + sizeof(asn_DEF_ENDCX2RemovalResponse_IEs_tags_641) + /sizeof(asn_DEF_ENDCX2RemovalResponse_IEs_tags_641[0]), /* 1 */ + asn_DEF_ENDCX2RemovalResponse_IEs_tags_641, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalResponse_IEs_tags_641) + /sizeof(asn_DEF_ENDCX2RemovalResponse_IEs_tags_641[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalResponse_IEs_641, + 3, /* Elements count */ + &asn_SPC_ENDCX2RemovalResponse_IEs_specs_641 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_648[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqAckIEs__value, choice.GlobalENB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalENB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_648[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_648 = { + sizeof(struct ENB_ENDCX2RemovalReqAckIEs__value), + offsetof(struct ENB_ENDCX2RemovalReqAckIEs__value, _asn_ctx), + offsetof(struct ENB_ENDCX2RemovalReqAckIEs__value, present), + sizeof(((struct ENB_ENDCX2RemovalReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_648, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_648 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_648, + 1, /* Elements count */ + &asn_SPC_value_specs_648 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENB_ENDCX2RemovalReqAckIEs_645[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_646, memb_id_constraint_645 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENB_ENDCX2RemovalReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_647, memb_criticality_constraint_645 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENB_ENDCX2RemovalReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_648, + select_ENB_ENDCX2RemovalReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_648, memb_value_constraint_645 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ENDCX2RemovalReqAckIEs_tag2el_645[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2RemovalReqAckIEs_specs_645 = { + sizeof(struct ENB_ENDCX2RemovalReqAckIEs), + offsetof(struct ENB_ENDCX2RemovalReqAckIEs, _asn_ctx), + asn_MAP_ENB_ENDCX2RemovalReqAckIEs_tag2el_645, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2RemovalReqAckIEs = { + "ENB-ENDCX2RemovalReqAckIEs", + "ENB-ENDCX2RemovalReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645, + sizeof(asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645) + /sizeof(asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645[0]), /* 1 */ + asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645, /* Same as above */ + sizeof(asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645) + /sizeof(asn_DEF_ENB_ENDCX2RemovalReqAckIEs_tags_645[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENB_ENDCX2RemovalReqAckIEs_645, + 3, /* Elements count */ + &asn_SPC_ENB_ENDCX2RemovalReqAckIEs_specs_645 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_652[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs__value, choice.GlobalGNB_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalGNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_652[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalGNB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_652 = { + sizeof(struct En_gNB_ENDCX2RemovalReqAckIEs__value), + offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs__value, _asn_ctx), + offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs__value, present), + sizeof(((struct En_gNB_ENDCX2RemovalReqAckIEs__value *)0)->present), + asn_MAP_value_tag2el_652, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_652 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_652, + 1, /* Elements count */ + &asn_SPC_value_specs_652 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2RemovalReqAckIEs_649[] = { + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_650, memb_id_constraint_649 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_En_gNB_ENDCX2RemovalReqAckIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_651, memb_criticality_constraint_649 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_652, + select_En_gNB_ENDCX2RemovalReqAckIEs_value_type, + { 0, &asn_PER_memb_value_constr_652, memb_value_constraint_649 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_En_gNB_ENDCX2RemovalReqAckIEs_tag2el_649[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2RemovalReqAckIEs_specs_649 = { + sizeof(struct En_gNB_ENDCX2RemovalReqAckIEs), + offsetof(struct En_gNB_ENDCX2RemovalReqAckIEs, _asn_ctx), + asn_MAP_En_gNB_ENDCX2RemovalReqAckIEs_tag2el_649, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs = { + "En-gNB-ENDCX2RemovalReqAckIEs", + "En-gNB-ENDCX2RemovalReqAckIEs", + &asn_OP_SEQUENCE, + asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649, + sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649) + /sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649[0]), /* 1 */ + asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649, /* Same as above */ + sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649) + /sizeof(asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs_tags_649[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_En_gNB_ENDCX2RemovalReqAckIEs_649, + 3, /* Elements count */ + &asn_SPC_En_gNB_ENDCX2RemovalReqAckIEs_specs_649 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_656[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_656[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_656[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_656[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_656 = { + sizeof(struct ENDCX2RemovalFailure_IEs__value), + offsetof(struct ENDCX2RemovalFailure_IEs__value, _asn_ctx), + offsetof(struct ENDCX2RemovalFailure_IEs__value, present), + sizeof(((struct ENDCX2RemovalFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_656, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_656, + asn_MAP_value_from_canonical_656, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_656 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_656, + 2, /* Elements count */ + &asn_SPC_value_specs_656 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ENDCX2RemovalFailure_IEs_653[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_654, memb_id_constraint_653 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ENDCX2RemovalFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_655, memb_criticality_constraint_653 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ENDCX2RemovalFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_656, + select_ENDCX2RemovalFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_656, memb_value_constraint_653 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ENDCX2RemovalFailure_IEs_tags_653[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ENDCX2RemovalFailure_IEs_tag2el_653[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalFailure_IEs_specs_653 = { + sizeof(struct ENDCX2RemovalFailure_IEs), + offsetof(struct ENDCX2RemovalFailure_IEs, _asn_ctx), + asn_MAP_ENDCX2RemovalFailure_IEs_tag2el_653, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalFailure_IEs = { + "ENDCX2RemovalFailure-IEs", + "ENDCX2RemovalFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ENDCX2RemovalFailure_IEs_tags_653, + sizeof(asn_DEF_ENDCX2RemovalFailure_IEs_tags_653) + /sizeof(asn_DEF_ENDCX2RemovalFailure_IEs_tags_653[0]), /* 1 */ + asn_DEF_ENDCX2RemovalFailure_IEs_tags_653, /* Same as above */ + sizeof(asn_DEF_ENDCX2RemovalFailure_IEs_tags_653) + /sizeof(asn_DEF_ENDCX2RemovalFailure_IEs_tags_653[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ENDCX2RemovalFailure_IEs_653, + 3, /* Elements count */ + &asn_SPC_ENDCX2RemovalFailure_IEs_specs_653 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_660[] = { + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs__value, choice.UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs__value, choice.UE_X2AP_ID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs__value, choice.E_RABs_DataForwardingAddress_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABs_DataForwardingAddress_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABs-DataForwardingAddress-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_660[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* E-RABs-DataForwardingAddress-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_660 = { + sizeof(struct DataForwardingAddressIndication_IEs__value), + offsetof(struct DataForwardingAddressIndication_IEs__value, _asn_ctx), + offsetof(struct DataForwardingAddressIndication_IEs__value, present), + sizeof(((struct DataForwardingAddressIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_660, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_660 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_660, + 3, /* Elements count */ + &asn_SPC_value_specs_660 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DataForwardingAddressIndication_IEs_657[] = { + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_658, memb_id_constraint_657 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_DataForwardingAddressIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_659, memb_criticality_constraint_657 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct DataForwardingAddressIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_660, + select_DataForwardingAddressIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_660, memb_value_constraint_657 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_DataForwardingAddressIndication_IEs_tags_657[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DataForwardingAddressIndication_IEs_tag2el_657[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DataForwardingAddressIndication_IEs_specs_657 = { + sizeof(struct DataForwardingAddressIndication_IEs), + offsetof(struct DataForwardingAddressIndication_IEs, _asn_ctx), + asn_MAP_DataForwardingAddressIndication_IEs_tag2el_657, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DataForwardingAddressIndication_IEs = { + "DataForwardingAddressIndication-IEs", + "DataForwardingAddressIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_DataForwardingAddressIndication_IEs_tags_657, + sizeof(asn_DEF_DataForwardingAddressIndication_IEs_tags_657) + /sizeof(asn_DEF_DataForwardingAddressIndication_IEs_tags_657[0]), /* 1 */ + asn_DEF_DataForwardingAddressIndication_IEs_tags_657, /* Same as above */ + sizeof(asn_DEF_DataForwardingAddressIndication_IEs_tags_657) + /sizeof(asn_DEF_DataForwardingAddressIndication_IEs_tags_657[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DataForwardingAddressIndication_IEs_657, + 3, /* Elements count */ + &asn_SPC_DataForwardingAddressIndication_IEs_specs_657 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_664[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNBStatusIndicationIEs__value, choice.GNBOverloadInformation), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_GNBOverloadInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GNBOverloadInformation" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_664[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* GNBOverloadInformation */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_664 = { + sizeof(struct GNBStatusIndicationIEs__value), + offsetof(struct GNBStatusIndicationIEs__value, _asn_ctx), + offsetof(struct GNBStatusIndicationIEs__value, present), + sizeof(((struct GNBStatusIndicationIEs__value *)0)->present), + asn_MAP_value_tag2el_664, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_664 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_664, + 1, /* Elements count */ + &asn_SPC_value_specs_664 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_GNBStatusIndicationIEs_661[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNBStatusIndicationIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_662, memb_id_constraint_661 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNBStatusIndicationIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_GNBStatusIndicationIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_663, memb_criticality_constraint_661 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct GNBStatusIndicationIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_664, + select_GNBStatusIndicationIEs_value_type, + { 0, &asn_PER_memb_value_constr_664, memb_value_constraint_661 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_GNBStatusIndicationIEs_tags_661[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GNBStatusIndicationIEs_tag2el_661[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GNBStatusIndicationIEs_specs_661 = { + sizeof(struct GNBStatusIndicationIEs), + offsetof(struct GNBStatusIndicationIEs, _asn_ctx), + asn_MAP_GNBStatusIndicationIEs_tag2el_661, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GNBStatusIndicationIEs = { + "GNBStatusIndicationIEs", + "GNBStatusIndicationIEs", + &asn_OP_SEQUENCE, + asn_DEF_GNBStatusIndicationIEs_tags_661, + sizeof(asn_DEF_GNBStatusIndicationIEs_tags_661) + /sizeof(asn_DEF_GNBStatusIndicationIEs_tags_661[0]), /* 1 */ + asn_DEF_GNBStatusIndicationIEs_tags_661, /* Same as above */ + sizeof(asn_DEF_GNBStatusIndicationIEs_tags_661) + /sizeof(asn_DEF_GNBStatusIndicationIEs_tags_661[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GNBStatusIndicationIEs_661, + 3, /* Elements count */ + &asn_SPC_GNBStatusIndicationIEs_specs_661 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_668[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_ItemIEs__value, choice.E_RAB_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RAB_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RAB-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_668[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RAB-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_668 = { + sizeof(struct E_RAB_ItemIEs__value), + offsetof(struct E_RAB_ItemIEs__value, _asn_ctx), + offsetof(struct E_RAB_ItemIEs__value, present), + sizeof(((struct E_RAB_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_668, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_668 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_668, + 1, /* Elements count */ + &asn_SPC_value_specs_668 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RAB_ItemIEs_665[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_ItemIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_666, memb_id_constraint_665 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RAB_ItemIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_E_RAB_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_667, memb_criticality_constraint_665 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RAB_ItemIEs, value), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_value_668, + select_E_RAB_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_668, memb_value_constraint_665 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RAB_ItemIEs_tags_665[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RAB_ItemIEs_tag2el_665[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RAB_ItemIEs_specs_665 = { + sizeof(struct E_RAB_ItemIEs), + offsetof(struct E_RAB_ItemIEs, _asn_ctx), + asn_MAP_E_RAB_ItemIEs_tag2el_665, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RAB_ItemIEs = { + "E-RAB-ItemIEs", + "E-RAB-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RAB_ItemIEs_tags_665, + sizeof(asn_DEF_E_RAB_ItemIEs_tags_665) + /sizeof(asn_DEF_E_RAB_ItemIEs_tags_665[0]), /* 1 */ + asn_DEF_E_RAB_ItemIEs_tags_665, /* Same as above */ + sizeof(asn_DEF_E_RAB_ItemIEs_tags_665) + /sizeof(asn_DEF_E_RAB_ItemIEs_tags_665[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_ItemIEs_665, + 3, /* Elements count */ + &asn_SPC_E_RAB_ItemIEs_specs_665 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_672[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_ItemIEs__value, choice.E_RABUsageReport_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E_RABUsageReport_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E-RABUsageReport-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_672[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABUsageReport-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_672 = { + sizeof(struct E_RABUsageReport_ItemIEs__value), + offsetof(struct E_RABUsageReport_ItemIEs__value, _asn_ctx), + offsetof(struct E_RABUsageReport_ItemIEs__value, present), + sizeof(((struct E_RABUsageReport_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_672, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_672 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_672, + 1, /* Elements count */ + &asn_SPC_value_specs_672 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E_RABUsageReport_ItemIEs_669[] = { + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_ItemIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_670, memb_id_constraint_669 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_ItemIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_E_RABUsageReport_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_671, memb_criticality_constraint_669 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E_RABUsageReport_ItemIEs, value), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_value_672, + select_E_RABUsageReport_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_672, memb_value_constraint_669 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E_RABUsageReport_ItemIEs_tags_669[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E_RABUsageReport_ItemIEs_tag2el_669[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_ItemIEs_specs_669 = { + sizeof(struct E_RABUsageReport_ItemIEs), + offsetof(struct E_RABUsageReport_ItemIEs, _asn_ctx), + asn_MAP_E_RABUsageReport_ItemIEs_tag2el_669, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_ItemIEs = { + "E-RABUsageReport-ItemIEs", + "E-RABUsageReport-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_E_RABUsageReport_ItemIEs_tags_669, + sizeof(asn_DEF_E_RABUsageReport_ItemIEs_tags_669) + /sizeof(asn_DEF_E_RABUsageReport_ItemIEs_tags_669[0]), /* 1 */ + asn_DEF_E_RABUsageReport_ItemIEs_tags_669, /* Same as above */ + sizeof(asn_DEF_E_RABUsageReport_ItemIEs_tags_669) + /sizeof(asn_DEF_E_RABUsageReport_ItemIEs_tags_669[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABUsageReport_ItemIEs_669, + 3, /* Elements count */ + &asn_SPC_E_RABUsageReport_ItemIEs_specs_669 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_676[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_ItemIEs__value, choice.SecondaryRATUsageReport_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SecondaryRATUsageReport_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "SecondaryRATUsageReport-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_676[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* SecondaryRATUsageReport-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_676 = { + sizeof(struct SecondaryRATUsageReport_ItemIEs__value), + offsetof(struct SecondaryRATUsageReport_ItemIEs__value, _asn_ctx), + offsetof(struct SecondaryRATUsageReport_ItemIEs__value, present), + sizeof(((struct SecondaryRATUsageReport_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_676, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_676 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_676, + 1, /* Elements count */ + &asn_SPC_value_specs_676 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_ItemIEs_673[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_ItemIEs, id), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_674, memb_id_constraint_673 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_ItemIEs, criticality), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_Criticality, + select_SecondaryRATUsageReport_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_675, memb_criticality_constraint_673 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_ItemIEs, value), + -1 /* Ambiguous tag (ANY?) */, + 0, + &asn_DEF_value_676, + select_SecondaryRATUsageReport_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_676, memb_value_constraint_673 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SecondaryRATUsageReport_ItemIEs_tag2el_673[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* criticality */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_ItemIEs_specs_673 = { + sizeof(struct SecondaryRATUsageReport_ItemIEs), + offsetof(struct SecondaryRATUsageReport_ItemIEs, _asn_ctx), + asn_MAP_SecondaryRATUsageReport_ItemIEs_tag2el_673, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_ItemIEs = { + "SecondaryRATUsageReport-ItemIEs", + "SecondaryRATUsageReport-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673, + sizeof(asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673) + /sizeof(asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673[0]), /* 1 */ + asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673, /* Same as above */ + sizeof(asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673) + /sizeof(asn_DEF_SecondaryRATUsageReport_ItemIEs_tags_673[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATUsageReport_ItemIEs_673, + 3, /* Elements count */ + &asn_SPC_SecondaryRATUsageReport_ItemIEs_specs_673 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..b593db8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,4903 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "E-RABs-ToBeSetup-Item.h" +#include "E-RABs-Admitted-Item.h" +#include "E-RABs-SubjectToStatusTransfer-Item.h" +#include "CellInformation-Item.h" +#include "CellToReport-Item.h" +#include "MeasurementInitiationResult-Item.h" +#include "MeasurementFailureCause-Item.h" +#include "CompleteFailureCauseInformation-Item.h" +#include "CellMeasurementResult-Item.h" +#include "E-RABs-ToBeAdded-Item.h" +#include "E-RABs-Admitted-ToBeAdded-Item.h" +#include "E-RABs-ToBeAdded-ModReqItem.h" +#include "E-RABs-ToBeModified-ModReqItem.h" +#include "E-RABs-ToBeReleased-ModReqItem.h" +#include "E-RABs-Admitted-ToBeAdded-ModAckItem.h" +#include "E-RABs-Admitted-ToBeModified-ModAckItem.h" +#include "E-RABs-Admitted-ToReleased-ModAckItem.h" +#include "E-RABs-ToBeReleased-ModReqdItem.h" +#include "E-RABs-ToBeReleased-RelReqItem.h" +#include "E-RABs-ToBeReleased-RelConfItem.h" +#include "E-RABs-SubjectToCounterCheckItem.h" +#include "E-RABs-ToBeSetupRetrieve-Item.h" +#include "E-RABs-ToBeAdded-SgNBAddReq-Item.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h" +#include "E-RABs-ToBeAdded-SgNBModReq-Item.h" +#include "E-RABs-ToBeModified-SgNBModReq-Item.h" +#include "E-RABs-ToBeReleased-SgNBModReq-Item.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h" +#include "E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h" +#include "E-RABs-Admitted-ToReleased-SgNBModAck-Item.h" +#include "E-RABs-ToBeReleased-SgNBModReqd-Item.h" +#include "E-RABs-ToBeModified-SgNBModReqd-Item.h" +#include "E-RABs-AdmittedToBeModified-SgNBModConf-Item.h" +#include "E-RABs-ToBeReleased-SgNBRelReq-Item.h" +#include "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h" +#include "E-RABs-ToBeReleased-SgNBRelReqd-Item.h" +#include "E-RABs-ToBeReleased-SgNBRelConf-Item.h" +#include "E-RABs-SubjectToSgNBCounterCheck-Item.h" +#include "E-RABs-ToBeReleased-SgNBChaConf-Item.h" +#include "E-RABs-DataForwardingAddress-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscription.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "RICcause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RANfunctions-List.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" +#include "UE-X2AP-ID.h" +#include "Cause.h" +#include "ECGI.h" +#include "GUMMEI.h" +#include "UE-ContextInformation.h" +#include "UE-HistoryInformation.h" +#include "TraceActivation.h" +#include "SRVCCOperationPossible.h" +#include "CSGMembershipStatus.h" +#include "MobilityInformation.h" +#include "Masked-IMEISV.h" +#include "UE-HistoryInformationFromTheUE.h" +#include "ExpectedUEBehaviour.h" +#include "ProSeAuthorized.h" +#include "UE-ContextReferenceAtSeNB.h" +#include "UE-X2AP-ID-Extension.h" +#include "V2XServicesAuthorized.h" +#include "UE-ContextReferenceAtWT.h" +#include "NRUESecurityCapabilities.h" +#include "UE-ContextReferenceAtSgNB.h" +#include "AerialUEsubscriptionInformation.h" +#include "Subscription-Based-UE-DifferentiationInfo.h" +#include "E-RABs-Admitted-List.h" +#include "E-RAB-List.h" +#include "TargeteNBtoSource-eNBTransparentContainer.h" +#include "UE-ContextKeptIndicator.h" +#include "HandoverReportType.h" +#include "TargetCellInUTRAN.h" +#include "CRNTI.h" +#include "UE-RLF-Report-Container.h" +#include "UE-RLF-Report-Container-for-extended-bands.h" +#include "E-RABs-SubjectToStatusTransfer-List.h" +#include "SgNB-UE-X2AP-ID.h" +#include "SIPTOBearerDeactivationIndication.h" +#include "GlobalENB-ID.h" +#include "ServedCells.h" +#include "GUGroupIDList.h" +#include "LHN-ID.h" +#include "CellInformation-List.h" +#include "ServedCellsToModify.h" +#include "Old-ECGIs.h" +#include "CoverageModificationList.h" +#include "Measurement-ID.h" +#include "Registration-Request.h" +#include "ReportCharacteristics.h" +#include "CellToReport-List.h" +#include "ReportingPeriodicity.h" +#include "PartialSuccessIndicator.h" +#include "ReportingPeriodicityRSRPMR.h" +#include "ReportingPeriodicityCSIR.h" +#include "MeasurementInitiationResult-List.h" +#include "CompleteFailureCauseInformation-List.h" +#include "CellMeasurementResult-List.h" +#include "MobilityParametersInformation.h" +#include "MobilityParametersModificationRange.h" +#include "PCI.h" +#include "ShortMAC-I.h" +#include "RRCConnSetupIndicator.h" +#include "RRCConnReestabIndicator.h" +#include "ServedCellsToActivate.h" +#include "ActivatedCellList.h" +#include "RNL-Header.h" +#include "X2AP-Message.h" +#include "UESecurityCapabilities.h" +#include "SeNBSecurityKey.h" +#include "UEAggregateMaximumBitRate.h" +#include "PLMN-Identity.h" +#include "E-RABs-ToBeAdded-List.h" +#include "MeNBtoSeNBContainer.h" +#include "E-RABs-Admitted-ToBeAdded-List.h" +#include "SeNBtoMeNBContainer.h" +#include "TransportLayerAddress.h" +#include "TunnelInformation.h" +#include "ResponseInformationSeNBReconfComp.h" +#include "SCGChangeIndication.h" +#include "UE-ContextInformationSeNBModReq.h" +#include "E-RABs-Admitted-ToBeAdded-ModAckList.h" +#include "E-RABs-Admitted-ToBeModified-ModAckList.h" +#include "E-RABs-Admitted-ToBeReleased-ModAckList.h" +#include "E-RABs-ToBeReleased-ModReqd.h" +#include "E-RABs-ToBeReleased-List-RelReq.h" +#include "MakeBeforeBreakIndicator.h" +#include "E-RABs-ToBeReleased-List-RelConf.h" +#include "E-RABs-SubjectToCounterCheck-List.h" +#include "X2BenefitValue.h" +#include "ResumeID.h" +#include "EUTRANCellIdentifier.h" +#include "UE-ContextInformationRetrieve.h" +#include "SgNBSecurityKey.h" +#include "HandoverRestrictionList.h" +#include "E-RABs-ToBeAdded-SgNBAddReqList.h" +#include "MeNBtoSgNBContainer.h" +#include "SplitSRBs.h" +#include "MeNBResourceCoordinationInformation.h" +#include "SGNB-Addition-Trigger-Ind.h" +#include "SubscriberProfileIDforRFP.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h" +#include "SgNBtoMeNBContainer.h" +#include "SgNBResourceCoordinationInformation.h" +#include "RRC-Config-Ind.h" +#include "ResponseInformationSgNBReconfComp.h" +#include "SCGConfigurationQuery.h" +#include "UE-ContextInformation-SgNBModReq.h" +#include "E-RABs-Admitted-ToBeAdded-SgNBModAckList.h" +#include "E-RABs-Admitted-ToBeModified-SgNBModAckList.h" +#include "E-RABs-Admitted-ToBeReleased-SgNBModAckList.h" +#include "PDCPChangeIndication.h" +#include "E-RABs-ToBeReleased-SgNBModReqdList.h" +#include "E-RABs-ToBeModified-SgNBModReqdList.h" +#include "E-RABs-AdmittedToBeModified-SgNBModConfList.h" +#include "E-RABs-ToBeReleased-SgNBRelReqList.h" +#include "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h" +#include "E-RABs-ToBeReleased-SgNBRelReqdList.h" +#include "E-RABs-ToBeReleased-SgNBRelConfList.h" +#include "E-RABs-SubjectToSgNBCounterCheck-List.h" +#include "GlobalGNB-ID.h" +#include "E-RABs-ToBeReleased-SgNBChaConfList.h" +#include "SplitSRB.h" +#include "UENRMeasurement.h" +#include "InitiatingNodeType-EndcX2Setup.h" +#include "ServedEUTRAcellsENDCX2ManagementList.h" +#include "ServedNRcellsENDCX2ManagementList.h" +#include "RespondingNodeType-EndcX2Setup.h" +#include "InitiatingNodeType-EndcConfigUpdate.h" +#include "CellAssistanceInformation.h" +#include "ServedEUTRAcellsToModifyListENDCConfUpd.h" +#include "ServedEUTRAcellsToDeleteListENDCConfUpd.h" +#include "ServedNRcellsToModifyENDCConfUpdList.h" +#include "ServedNRcellsToDeleteENDCConfUpdList.h" +#include "RespondingNodeType-EndcConfigUpdate.h" +#include "ServedNRCellsToActivate.h" +#include "ActivationID.h" +#include "ActivatedNRCellList.h" +#include "SecondaryRATUsageReportList.h" +#include "UserPlaneTrafficActivityReport.h" +#include "ERABActivityNotifyItemList.h" +#include "UEsToBeResetList.h" +#include "InitiatingNodeType-EutranrCellResourceCoordination.h" +#include "DataTrafficResourceIndication.h" +#include "SpectrumSharingGroupID.h" +#include "ListofEUTRACellsinEUTRACoordinationReq.h" +#include "ListofEUTRACellsinNRCoordinationReq.h" +#include "ListofNRCellsinNRCoordinationReq.h" +#include "RespondingNodeType-EutranrCellResourceCoordination.h" +#include "ListofEUTRACellsinEUTRACoordinationResp.h" +#include "ListofNRCellsinNRCoordinationResp.h" +#include "InitiatingNodeType-EndcX2Removal.h" +#include "RespondingNodeType-EndcX2Removal.h" +#include "E-RABs-DataForwardingAddress-List.h" +#include "GNBOverloadInformation.h" +#include "E-RAB-Item.h" +#include "E-RABUsageReport-Item.h" +#include "SecondaryRATUsageReport-Item.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum E_RABs_ToBeSetup_ItemIEs__value_PR { + E_RABs_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeSetup_ItemIEs__value_PR_E_RABs_ToBeSetup_Item +} E_RABs_ToBeSetup_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ItemIEs__value_PR { + E_RABs_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ItemIEs__value_PR_E_RABs_Admitted_Item +} E_RABs_Admitted_ItemIEs__value_PR; +typedef enum E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR { + E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR_E_RABs_SubjectToStatusTransfer_Item +} E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR; +typedef enum CellInformation_ItemIEs__value_PR { + CellInformation_ItemIEs__value_PR_NOTHING, /* No components present */ + CellInformation_ItemIEs__value_PR_CellInformation_Item +} CellInformation_ItemIEs__value_PR; +typedef enum CellToReport_ItemIEs__value_PR { + CellToReport_ItemIEs__value_PR_NOTHING, /* No components present */ + CellToReport_ItemIEs__value_PR_CellToReport_Item +} CellToReport_ItemIEs__value_PR; +typedef enum MeasurementInitiationResult_ItemIEs__value_PR { + MeasurementInitiationResult_ItemIEs__value_PR_NOTHING, /* No components present */ + MeasurementInitiationResult_ItemIEs__value_PR_MeasurementInitiationResult_Item +} MeasurementInitiationResult_ItemIEs__value_PR; +typedef enum MeasurementFailureCause_ItemIEs__value_PR { + MeasurementFailureCause_ItemIEs__value_PR_NOTHING, /* No components present */ + MeasurementFailureCause_ItemIEs__value_PR_MeasurementFailureCause_Item +} MeasurementFailureCause_ItemIEs__value_PR; +typedef enum CompleteFailureCauseInformation_ItemIEs__value_PR { + CompleteFailureCauseInformation_ItemIEs__value_PR_NOTHING, /* No components present */ + CompleteFailureCauseInformation_ItemIEs__value_PR_CompleteFailureCauseInformation_Item +} CompleteFailureCauseInformation_ItemIEs__value_PR; +typedef enum CellMeasurementResult_ItemIEs__value_PR { + CellMeasurementResult_ItemIEs__value_PR_NOTHING, /* No components present */ + CellMeasurementResult_ItemIEs__value_PR_CellMeasurementResult_Item +} CellMeasurementResult_ItemIEs__value_PR; +typedef enum E_RABs_ToBeAdded_ItemIEs__value_PR { + E_RABs_ToBeAdded_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_ItemIEs__value_PR_E_RABs_ToBeAdded_Item +} E_RABs_ToBeAdded_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR { + E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_Item +} E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR; +typedef enum E_RABs_ToBeAdded_ModReqItemIEs__value_PR { + E_RABs_ToBeAdded_ModReqItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_ModReqItemIEs__value_PR_E_RABs_ToBeAdded_ModReqItem +} E_RABs_ToBeAdded_ModReqItemIEs__value_PR; +typedef enum E_RABs_ToBeModified_ModReqItemIEs__value_PR { + E_RABs_ToBeModified_ModReqItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_ModReqItemIEs__value_PR_E_RABs_ToBeModified_ModReqItem +} E_RABs_ToBeModified_ModReqItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_ModReqItemIEs__value_PR { + E_RABs_ToBeReleased_ModReqItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_ModReqItemIEs__value_PR_E_RABs_ToBeReleased_ModReqItem +} E_RABs_ToBeReleased_ModReqItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR { + E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckItem +} E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR { + E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckItem +} E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR { + E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR_E_RABs_Admitted_ToReleased_ModAckItem +} E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_ModReqdItemIEs__value_PR { + E_RABs_ToBeReleased_ModReqdItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_ModReqdItemIEs__value_PR_E_RABs_ToBeReleased_ModReqdItem +} E_RABs_ToBeReleased_ModReqdItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_RelReqItemIEs__value_PR { + E_RABs_ToBeReleased_RelReqItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_RelReqItemIEs__value_PR_E_RABs_ToBeReleased_RelReqItem +} E_RABs_ToBeReleased_RelReqItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_RelConfItemIEs__value_PR { + E_RABs_ToBeReleased_RelConfItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_RelConfItemIEs__value_PR_E_RABs_ToBeReleased_RelConfItem +} E_RABs_ToBeReleased_RelConfItemIEs__value_PR; +typedef enum E_RABs_SubjectToCounterCheckItemIEs__value_PR { + E_RABs_SubjectToCounterCheckItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_SubjectToCounterCheckItemIEs__value_PR_E_RABs_SubjectToCounterCheckItem +} E_RABs_SubjectToCounterCheckItemIEs__value_PR; +typedef enum E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR { + E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR_E_RABs_ToBeSetupRetrieve_Item +} E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR; +typedef enum E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR { + E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR_E_RABs_ToBeAdded_SgNBAddReq_Item +} E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR; +typedef enum E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR { + E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeAdded_SgNBModReq_Item +} E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR; +typedef enum E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR { + E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeModified_SgNBModReq_Item +} E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBModReq_Item +} E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR { + E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item +} E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR { + E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item +} E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR { + E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToReleased_SgNBModAck_Item +} E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBModReqd_Item +} E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR; +typedef enum E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR { + E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR_E_RABs_ToBeModified_SgNBModReqd_Item +} E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR; +typedef enum E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR { + E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR_E_RABs_AdmittedToBeModified_SgNBModConf_Item +} E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelReq_Item +} E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR; +typedef enum E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR { + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqd_Item +} E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelConf_Item +} E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR; +typedef enum E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR { + E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR_E_RABs_SubjectToSgNBCounterCheck_Item +} E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR; +typedef enum E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR { + E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBChaConf_Item +} E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR; +typedef enum E_RABs_DataForwardingAddress_ItemIEs__value_PR { + E_RABs_DataForwardingAddress_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABs_DataForwardingAddress_ItemIEs__value_PR_E_RABs_DataForwardingAddress_Item +} E_RABs_DataForwardingAddress_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscription +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_RICcause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_RICcause +} RICcontrolFailure_IEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; +typedef enum HandoverRequest_IEs__value_PR { + HandoverRequest_IEs__value_PR_NOTHING, /* No components present */ + HandoverRequest_IEs__value_PR_UE_X2AP_ID, + HandoverRequest_IEs__value_PR_Cause, + HandoverRequest_IEs__value_PR_ECGI, + HandoverRequest_IEs__value_PR_GUMMEI, + HandoverRequest_IEs__value_PR_UE_ContextInformation, + HandoverRequest_IEs__value_PR_UE_HistoryInformation, + HandoverRequest_IEs__value_PR_TraceActivation, + HandoverRequest_IEs__value_PR_SRVCCOperationPossible, + HandoverRequest_IEs__value_PR_CSGMembershipStatus, + HandoverRequest_IEs__value_PR_MobilityInformation, + HandoverRequest_IEs__value_PR_Masked_IMEISV, + HandoverRequest_IEs__value_PR_UE_HistoryInformationFromTheUE, + HandoverRequest_IEs__value_PR_ExpectedUEBehaviour, + HandoverRequest_IEs__value_PR_ProSeAuthorized, + HandoverRequest_IEs__value_PR_UE_ContextReferenceAtSeNB, + HandoverRequest_IEs__value_PR_UE_X2AP_ID_Extension, + HandoverRequest_IEs__value_PR_V2XServicesAuthorized, + HandoverRequest_IEs__value_PR_UE_ContextReferenceAtWT, + HandoverRequest_IEs__value_PR_NRUESecurityCapabilities, + HandoverRequest_IEs__value_PR_UE_ContextReferenceAtSgNB, + HandoverRequest_IEs__value_PR_AerialUEsubscriptionInformation, + HandoverRequest_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo +} HandoverRequest_IEs__value_PR; +typedef enum HandoverRequestAcknowledge_IEs__value_PR { + HandoverRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + HandoverRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_List, + HandoverRequestAcknowledge_IEs__value_PR_E_RAB_List, + HandoverRequestAcknowledge_IEs__value_PR_TargeteNBtoSource_eNBTransparentContainer, + HandoverRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator, + HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension +} HandoverRequestAcknowledge_IEs__value_PR; +typedef enum HandoverPreparationFailure_IEs__value_PR { + HandoverPreparationFailure_IEs__value_PR_NOTHING, /* No components present */ + HandoverPreparationFailure_IEs__value_PR_UE_X2AP_ID, + HandoverPreparationFailure_IEs__value_PR_Cause, + HandoverPreparationFailure_IEs__value_PR_CriticalityDiagnostics, + HandoverPreparationFailure_IEs__value_PR_UE_X2AP_ID_Extension +} HandoverPreparationFailure_IEs__value_PR; +typedef enum HandoverReport_IEs__value_PR { + HandoverReport_IEs__value_PR_NOTHING, /* No components present */ + HandoverReport_IEs__value_PR_HandoverReportType, + HandoverReport_IEs__value_PR_Cause, + HandoverReport_IEs__value_PR_ECGI, + HandoverReport_IEs__value_PR_TargetCellInUTRAN, + HandoverReport_IEs__value_PR_CRNTI, + HandoverReport_IEs__value_PR_MobilityInformation, + HandoverReport_IEs__value_PR_UE_RLF_Report_Container, + HandoverReport_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands +} HandoverReport_IEs__value_PR; +typedef enum SNStatusTransfer_IEs__value_PR { + SNStatusTransfer_IEs__value_PR_NOTHING, /* No components present */ + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID, + SNStatusTransfer_IEs__value_PR_E_RABs_SubjectToStatusTransfer_List, + SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension, + SNStatusTransfer_IEs__value_PR_SgNB_UE_X2AP_ID +} SNStatusTransfer_IEs__value_PR; +typedef enum UEContextRelease_IEs__value_PR { + UEContextRelease_IEs__value_PR_NOTHING, /* No components present */ + UEContextRelease_IEs__value_PR_UE_X2AP_ID, + UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension, + UEContextRelease_IEs__value_PR_SIPTOBearerDeactivationIndication, + UEContextRelease_IEs__value_PR_SgNB_UE_X2AP_ID +} UEContextRelease_IEs__value_PR; +typedef enum HandoverCancel_IEs__value_PR { + HandoverCancel_IEs__value_PR_NOTHING, /* No components present */ + HandoverCancel_IEs__value_PR_UE_X2AP_ID, + HandoverCancel_IEs__value_PR_Cause, + HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension +} HandoverCancel_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_UE_X2AP_ID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics, + ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension, + ErrorIndication_IEs__value_PR_SgNB_UE_X2AP_ID +} ErrorIndication_IEs__value_PR; +typedef enum ResetRequest_IEs__value_PR { + ResetRequest_IEs__value_PR_NOTHING, /* No components present */ + ResetRequest_IEs__value_PR_Cause +} ResetRequest_IEs__value_PR; +typedef enum ResetResponse_IEs__value_PR { + ResetResponse_IEs__value_PR_NOTHING, /* No components present */ + ResetResponse_IEs__value_PR_CriticalityDiagnostics +} ResetResponse_IEs__value_PR; +typedef enum X2SetupRequest_IEs__value_PR { + X2SetupRequest_IEs__value_PR_NOTHING, /* No components present */ + X2SetupRequest_IEs__value_PR_GlobalENB_ID, + X2SetupRequest_IEs__value_PR_ServedCells, + X2SetupRequest_IEs__value_PR_GUGroupIDList, + X2SetupRequest_IEs__value_PR_LHN_ID +} X2SetupRequest_IEs__value_PR; +typedef enum X2SetupResponse_IEs__value_PR { + X2SetupResponse_IEs__value_PR_NOTHING, /* No components present */ + X2SetupResponse_IEs__value_PR_GlobalENB_ID, + X2SetupResponse_IEs__value_PR_ServedCells, + X2SetupResponse_IEs__value_PR_GUGroupIDList, + X2SetupResponse_IEs__value_PR_CriticalityDiagnostics, + X2SetupResponse_IEs__value_PR_LHN_ID +} X2SetupResponse_IEs__value_PR; +typedef enum X2SetupFailure_IEs__value_PR { + X2SetupFailure_IEs__value_PR_NOTHING, /* No components present */ + X2SetupFailure_IEs__value_PR_Cause, + X2SetupFailure_IEs__value_PR_TimeToWait, + X2SetupFailure_IEs__value_PR_CriticalityDiagnostics +} X2SetupFailure_IEs__value_PR; +typedef enum LoadInformation_IEs__value_PR { + LoadInformation_IEs__value_PR_NOTHING, /* No components present */ + LoadInformation_IEs__value_PR_CellInformation_List +} LoadInformation_IEs__value_PR; +typedef enum ENBConfigurationUpdate_IEs__value_PR { + ENBConfigurationUpdate_IEs__value_PR_NOTHING, /* No components present */ + ENBConfigurationUpdate_IEs__value_PR_ServedCells, + ENBConfigurationUpdate_IEs__value_PR_ServedCellsToModify, + ENBConfigurationUpdate_IEs__value_PR_Old_ECGIs, + ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList, + ENBConfigurationUpdate_IEs__value_PR_CoverageModificationList +} ENBConfigurationUpdate_IEs__value_PR; +typedef enum ENBConfigurationUpdateAcknowledge_IEs__value_PR { + ENBConfigurationUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + ENBConfigurationUpdateAcknowledge_IEs__value_PR_CriticalityDiagnostics +} ENBConfigurationUpdateAcknowledge_IEs__value_PR; +typedef enum ENBConfigurationUpdateFailure_IEs__value_PR { + ENBConfigurationUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + ENBConfigurationUpdateFailure_IEs__value_PR_Cause, + ENBConfigurationUpdateFailure_IEs__value_PR_TimeToWait, + ENBConfigurationUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} ENBConfigurationUpdateFailure_IEs__value_PR; +typedef enum ResourceStatusRequest_IEs__value_PR { + ResourceStatusRequest_IEs__value_PR_NOTHING, /* No components present */ + ResourceStatusRequest_IEs__value_PR_Measurement_ID, + ResourceStatusRequest_IEs__value_PR_Registration_Request, + ResourceStatusRequest_IEs__value_PR_ReportCharacteristics, + ResourceStatusRequest_IEs__value_PR_CellToReport_List, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicity, + ResourceStatusRequest_IEs__value_PR_PartialSuccessIndicator, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityRSRPMR, + ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityCSIR +} ResourceStatusRequest_IEs__value_PR; +typedef enum ResourceStatusResponse_IEs__value_PR { + ResourceStatusResponse_IEs__value_PR_NOTHING, /* No components present */ + ResourceStatusResponse_IEs__value_PR_Measurement_ID, + ResourceStatusResponse_IEs__value_PR_CriticalityDiagnostics, + ResourceStatusResponse_IEs__value_PR_MeasurementInitiationResult_List +} ResourceStatusResponse_IEs__value_PR; +typedef enum ResourceStatusFailure_IEs__value_PR { + ResourceStatusFailure_IEs__value_PR_NOTHING, /* No components present */ + ResourceStatusFailure_IEs__value_PR_Measurement_ID, + ResourceStatusFailure_IEs__value_PR_Cause, + ResourceStatusFailure_IEs__value_PR_CriticalityDiagnostics, + ResourceStatusFailure_IEs__value_PR_CompleteFailureCauseInformation_List +} ResourceStatusFailure_IEs__value_PR; +typedef enum ResourceStatusUpdate_IEs__value_PR { + ResourceStatusUpdate_IEs__value_PR_NOTHING, /* No components present */ + ResourceStatusUpdate_IEs__value_PR_Measurement_ID, + ResourceStatusUpdate_IEs__value_PR_CellMeasurementResult_List +} ResourceStatusUpdate_IEs__value_PR; +typedef enum MobilityChangeRequest_IEs__value_PR { + MobilityChangeRequest_IEs__value_PR_NOTHING, /* No components present */ + MobilityChangeRequest_IEs__value_PR_ECGI, + MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation, + MobilityChangeRequest_IEs__value_PR_Cause +} MobilityChangeRequest_IEs__value_PR; +typedef enum MobilityChangeAcknowledge_IEs__value_PR { + MobilityChangeAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + MobilityChangeAcknowledge_IEs__value_PR_ECGI, + MobilityChangeAcknowledge_IEs__value_PR_CriticalityDiagnostics +} MobilityChangeAcknowledge_IEs__value_PR; +typedef enum MobilityChangeFailure_IEs__value_PR { + MobilityChangeFailure_IEs__value_PR_NOTHING, /* No components present */ + MobilityChangeFailure_IEs__value_PR_ECGI, + MobilityChangeFailure_IEs__value_PR_Cause, + MobilityChangeFailure_IEs__value_PR_MobilityParametersModificationRange, + MobilityChangeFailure_IEs__value_PR_CriticalityDiagnostics +} MobilityChangeFailure_IEs__value_PR; +typedef enum RLFIndication_IEs__value_PR { + RLFIndication_IEs__value_PR_NOTHING, /* No components present */ + RLFIndication_IEs__value_PR_PCI, + RLFIndication_IEs__value_PR_ECGI, + RLFIndication_IEs__value_PR_CRNTI, + RLFIndication_IEs__value_PR_ShortMAC_I, + RLFIndication_IEs__value_PR_UE_RLF_Report_Container, + RLFIndication_IEs__value_PR_RRCConnSetupIndicator, + RLFIndication_IEs__value_PR_RRCConnReestabIndicator, + RLFIndication_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands +} RLFIndication_IEs__value_PR; +typedef enum CellActivationRequest_IEs__value_PR { + CellActivationRequest_IEs__value_PR_NOTHING, /* No components present */ + CellActivationRequest_IEs__value_PR_ServedCellsToActivate +} CellActivationRequest_IEs__value_PR; +typedef enum CellActivationResponse_IEs__value_PR { + CellActivationResponse_IEs__value_PR_NOTHING, /* No components present */ + CellActivationResponse_IEs__value_PR_ActivatedCellList, + CellActivationResponse_IEs__value_PR_CriticalityDiagnostics +} CellActivationResponse_IEs__value_PR; +typedef enum CellActivationFailure_IEs__value_PR { + CellActivationFailure_IEs__value_PR_NOTHING, /* No components present */ + CellActivationFailure_IEs__value_PR_Cause, + CellActivationFailure_IEs__value_PR_CriticalityDiagnostics +} CellActivationFailure_IEs__value_PR; +typedef enum X2Release_IEs__value_PR { + X2Release_IEs__value_PR_NOTHING, /* No components present */ + X2Release_IEs__value_PR_GlobalENB_ID +} X2Release_IEs__value_PR; +typedef enum X2APMessageTransfer_IEs__value_PR { + X2APMessageTransfer_IEs__value_PR_NOTHING, /* No components present */ + X2APMessageTransfer_IEs__value_PR_RNL_Header, + X2APMessageTransfer_IEs__value_PR_X2AP_Message +} X2APMessageTransfer_IEs__value_PR; +typedef enum SeNBAdditionRequest_IEs__value_PR { + SeNBAdditionRequest_IEs__value_PR_NOTHING, /* No components present */ + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequest_IEs__value_PR_UESecurityCapabilities, + SeNBAdditionRequest_IEs__value_PR_SeNBSecurityKey, + SeNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate, + SeNBAdditionRequest_IEs__value_PR_PLMN_Identity, + SeNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_List, + SeNBAdditionRequest_IEs__value_PR_MeNBtoSeNBContainer, + SeNBAdditionRequest_IEs__value_PR_CSGMembershipStatus, + SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour +} SeNBAdditionRequest_IEs__value_PR; +typedef enum SeNBAdditionRequestAcknowledge_IEs__value_PR { + SeNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_List, + SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List, + SeNBAdditionRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer, + SeNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress, + SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBAdditionRequestAcknowledge_IEs__value_PR_TunnelInformation +} SeNBAdditionRequestAcknowledge_IEs__value_PR; +typedef enum SeNBAdditionRequestReject_IEs__value_PR { + SeNBAdditionRequestReject_IEs__value_PR_NOTHING, /* No components present */ + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBAdditionRequestReject_IEs__value_PR_Cause, + SeNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics, + SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBAdditionRequestReject_IEs__value_PR; +typedef enum SeNBReconfigurationComplete_IEs__value_PR { + SeNBReconfigurationComplete_IEs__value_PR_NOTHING, /* No components present */ + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID, + SeNBReconfigurationComplete_IEs__value_PR_ResponseInformationSeNBReconfComp, + SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBReconfigurationComplete_IEs__value_PR; +typedef enum SeNBModificationRequest_IEs__value_PR { + SeNBModificationRequest_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequest_IEs__value_PR_Cause, + SeNBModificationRequest_IEs__value_PR_SCGChangeIndication, + SeNBModificationRequest_IEs__value_PR_PLMN_Identity, + SeNBModificationRequest_IEs__value_PR_UE_ContextInformationSeNBModReq, + SeNBModificationRequest_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationRequest_IEs__value_PR_CSGMembershipStatus, + SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationRequest_IEs__value_PR; +typedef enum SeNBModificationRequestAcknowledge_IEs__value_PR { + SeNBModificationRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_ModAckList, + SeNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List, + SeNBModificationRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer, + SeNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationRequestAcknowledge_IEs__value_PR; +typedef enum SeNBModificationRequestReject_IEs__value_PR { + SeNBModificationRequestReject_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequestReject_IEs__value_PR_Cause, + SeNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationRequestReject_IEs__value_PR; +typedef enum SeNBModificationRequired_IEs__value_PR { + SeNBModificationRequired_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRequired_IEs__value_PR_Cause, + SeNBModificationRequired_IEs__value_PR_SCGChangeIndication, + SeNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_ModReqd, + SeNBModificationRequired_IEs__value_PR_SeNBtoMeNBContainer, + SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationRequired_IEs__value_PR; +typedef enum SeNBModificationConfirm_IEs__value_PR { + SeNBModificationConfirm_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBModificationConfirm_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationConfirm_IEs__value_PR; +typedef enum SeNBModificationRefuse_IEs__value_PR { + SeNBModificationRefuse_IEs__value_PR_NOTHING, /* No components present */ + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID, + SeNBModificationRefuse_IEs__value_PR_Cause, + SeNBModificationRefuse_IEs__value_PR_MeNBtoSeNBContainer, + SeNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics, + SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBModificationRefuse_IEs__value_PR; +typedef enum SeNBReleaseRequest_IEs__value_PR { + SeNBReleaseRequest_IEs__value_PR_NOTHING, /* No components present */ + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequest_IEs__value_PR_Cause, + SeNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_List_RelReq, + SeNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator, + SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SeNBReleaseRequest_IEs__value_PR_MakeBeforeBreakIndicator +} SeNBReleaseRequest_IEs__value_PR; +typedef enum SeNBReleaseRequired_IEs__value_PR { + SeNBReleaseRequired_IEs__value_PR_NOTHING, /* No components present */ + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseRequired_IEs__value_PR_Cause, + SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBReleaseRequired_IEs__value_PR; +typedef enum SeNBReleaseConfirm_IEs__value_PR { + SeNBReleaseConfirm_IEs__value_PR_NOTHING, /* No components present */ + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID, + SeNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_List_RelConf, + SeNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics, + SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBReleaseConfirm_IEs__value_PR; +typedef enum SeNBCounterCheckRequest_IEs__value_PR { + SeNBCounterCheckRequest_IEs__value_PR_NOTHING, /* No components present */ + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID, + SeNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToCounterCheck_List, + SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension +} SeNBCounterCheckRequest_IEs__value_PR; +typedef enum X2RemovalRequest_IEs__value_PR { + X2RemovalRequest_IEs__value_PR_NOTHING, /* No components present */ + X2RemovalRequest_IEs__value_PR_GlobalENB_ID, + X2RemovalRequest_IEs__value_PR_X2BenefitValue +} X2RemovalRequest_IEs__value_PR; +typedef enum X2RemovalResponse_IEs__value_PR { + X2RemovalResponse_IEs__value_PR_NOTHING, /* No components present */ + X2RemovalResponse_IEs__value_PR_GlobalENB_ID, + X2RemovalResponse_IEs__value_PR_CriticalityDiagnostics +} X2RemovalResponse_IEs__value_PR; +typedef enum X2RemovalFailure_IEs__value_PR { + X2RemovalFailure_IEs__value_PR_NOTHING, /* No components present */ + X2RemovalFailure_IEs__value_PR_Cause, + X2RemovalFailure_IEs__value_PR_CriticalityDiagnostics +} X2RemovalFailure_IEs__value_PR; +typedef enum RetrieveUEContextRequest_IEs__value_PR { + RetrieveUEContextRequest_IEs__value_PR_NOTHING, /* No components present */ + RetrieveUEContextRequest_IEs__value_PR_UE_X2AP_ID, + RetrieveUEContextRequest_IEs__value_PR_UE_X2AP_ID_Extension, + RetrieveUEContextRequest_IEs__value_PR_ResumeID, + RetrieveUEContextRequest_IEs__value_PR_ShortMAC_I, + RetrieveUEContextRequest_IEs__value_PR_EUTRANCellIdentifier, + RetrieveUEContextRequest_IEs__value_PR_CRNTI, + RetrieveUEContextRequest_IEs__value_PR_PCI +} RetrieveUEContextRequest_IEs__value_PR; +typedef enum RetrieveUEContextResponse_IEs__value_PR { + RetrieveUEContextResponse_IEs__value_PR_NOTHING, /* No components present */ + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID, + RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension, + RetrieveUEContextResponse_IEs__value_PR_GUMMEI, + RetrieveUEContextResponse_IEs__value_PR_UE_ContextInformationRetrieve, + RetrieveUEContextResponse_IEs__value_PR_TraceActivation, + RetrieveUEContextResponse_IEs__value_PR_SRVCCOperationPossible, + RetrieveUEContextResponse_IEs__value_PR_Masked_IMEISV, + RetrieveUEContextResponse_IEs__value_PR_ExpectedUEBehaviour, + RetrieveUEContextResponse_IEs__value_PR_ProSeAuthorized, + RetrieveUEContextResponse_IEs__value_PR_CriticalityDiagnostics, + RetrieveUEContextResponse_IEs__value_PR_V2XServicesAuthorized, + RetrieveUEContextResponse_IEs__value_PR_AerialUEsubscriptionInformation, + RetrieveUEContextResponse_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo +} RetrieveUEContextResponse_IEs__value_PR; +typedef enum RetrieveUEContextFailure_IEs__value_PR { + RetrieveUEContextFailure_IEs__value_PR_NOTHING, /* No components present */ + RetrieveUEContextFailure_IEs__value_PR_UE_X2AP_ID, + RetrieveUEContextFailure_IEs__value_PR_UE_X2AP_ID_Extension, + RetrieveUEContextFailure_IEs__value_PR_Cause, + RetrieveUEContextFailure_IEs__value_PR_CriticalityDiagnostics +} RetrieveUEContextFailure_IEs__value_PR; +typedef enum SgNBAdditionRequest_IEs__value_PR { + SgNBAdditionRequest_IEs__value_PR_NOTHING, /* No components present */ + SgNBAdditionRequest_IEs__value_PR_UE_X2AP_ID, + SgNBAdditionRequest_IEs__value_PR_NRUESecurityCapabilities, + SgNBAdditionRequest_IEs__value_PR_SgNBSecurityKey, + SgNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate, + SgNBAdditionRequest_IEs__value_PR_PLMN_Identity, + SgNBAdditionRequest_IEs__value_PR_HandoverRestrictionList, + SgNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_SgNBAddReqList, + SgNBAdditionRequest_IEs__value_PR_MeNBtoSgNBContainer, + SgNBAdditionRequest_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour, + SgNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBAdditionRequest_IEs__value_PR_SplitSRBs, + SgNBAdditionRequest_IEs__value_PR_MeNBResourceCoordinationInformation, + SgNBAdditionRequest_IEs__value_PR_SGNB_Addition_Trigger_Ind, + SgNBAdditionRequest_IEs__value_PR_SubscriberProfileIDforRFP, + SgNBAdditionRequest_IEs__value_PR_ECGI +} SgNBAdditionRequest_IEs__value_PR; +typedef enum SgNBAdditionRequestAcknowledge_IEs__value_PR { + SgNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList, + SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List, + SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer, + SgNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBAdditionRequestAcknowledge_IEs__value_PR_SplitSRBs, + SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation, + SgNBAdditionRequestAcknowledge_IEs__value_PR_RRC_Config_Ind +} SgNBAdditionRequestAcknowledge_IEs__value_PR; +typedef enum SgNBAdditionRequestReject_IEs__value_PR { + SgNBAdditionRequestReject_IEs__value_PR_NOTHING, /* No components present */ + SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID, + SgNBAdditionRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBAdditionRequestReject_IEs__value_PR_Cause, + SgNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics, + SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBAdditionRequestReject_IEs__value_PR; +typedef enum SgNBReconfigurationComplete_IEs__value_PR { + SgNBReconfigurationComplete_IEs__value_PR_NOTHING, /* No components present */ + SgNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID, + SgNBReconfigurationComplete_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReconfigurationComplete_IEs__value_PR_ResponseInformationSgNBReconfComp, + SgNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBReconfigurationComplete_IEs__value_PR; +typedef enum SgNBModificationRequest_IEs__value_PR { + SgNBModificationRequest_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequest_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequest_IEs__value_PR_Cause, + SgNBModificationRequest_IEs__value_PR_PLMN_Identity, + SgNBModificationRequest_IEs__value_PR_HandoverRestrictionList, + SgNBModificationRequest_IEs__value_PR_SCGConfigurationQuery, + SgNBModificationRequest_IEs__value_PR_UE_ContextInformation_SgNBModReq, + SgNBModificationRequest_IEs__value_PR_MeNBtoSgNBContainer, + SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationRequest_IEs__value_PR_MeNBResourceCoordinationInformation, + SgNBModificationRequest_IEs__value_PR_SplitSRBs +} SgNBModificationRequest_IEs__value_PR; +typedef enum SgNBModificationRequestAcknowledge_IEs__value_PR { + SgNBModificationRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBModAckList, + SgNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer, + SgNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation, + SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs, + SgNBModificationRequestAcknowledge_IEs__value_PR_RRC_Config_Ind +} SgNBModificationRequestAcknowledge_IEs__value_PR; +typedef enum SgNBModificationRequestReject_IEs__value_PR { + SgNBModificationRequestReject_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequestReject_IEs__value_PR_Cause, + SgNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics, + SgNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBModificationRequestReject_IEs__value_PR; +typedef enum SgNBModificationRequired_IEs__value_PR { + SgNBModificationRequired_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationRequired_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRequired_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRequired_IEs__value_PR_Cause, + SgNBModificationRequired_IEs__value_PR_PDCPChangeIndication, + SgNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_SgNBModReqdList, + SgNBModificationRequired_IEs__value_PR_SgNBtoMeNBContainer, + SgNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationRequired_IEs__value_PR_E_RABs_ToBeModified_SgNBModReqdList, + SgNBModificationRequired_IEs__value_PR_SgNBResourceCoordinationInformation, + SgNBModificationRequired_IEs__value_PR_RRC_Config_Ind +} SgNBModificationRequired_IEs__value_PR; +typedef enum SgNBModificationConfirm_IEs__value_PR { + SgNBModificationConfirm_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationConfirm_IEs__value_PR_UE_X2AP_ID, + SgNBModificationConfirm_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationConfirm_IEs__value_PR_E_RABs_AdmittedToBeModified_SgNBModConfList, + SgNBModificationConfirm_IEs__value_PR_MeNBtoSgNBContainer, + SgNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics, + SgNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBModificationConfirm_IEs__value_PR_MeNBResourceCoordinationInformation +} SgNBModificationConfirm_IEs__value_PR; +typedef enum SgNBModificationRefuse_IEs__value_PR { + SgNBModificationRefuse_IEs__value_PR_NOTHING, /* No components present */ + SgNBModificationRefuse_IEs__value_PR_UE_X2AP_ID, + SgNBModificationRefuse_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBModificationRefuse_IEs__value_PR_Cause, + SgNBModificationRefuse_IEs__value_PR_MeNBtoSgNBContainer, + SgNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics, + SgNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBModificationRefuse_IEs__value_PR; +typedef enum SgNBReleaseRequest_IEs__value_PR { + SgNBReleaseRequest_IEs__value_PR_NOTHING, /* No components present */ + SgNBReleaseRequest_IEs__value_PR_UE_X2AP_ID, + SgNBReleaseRequest_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReleaseRequest_IEs__value_PR_Cause, + SgNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqList, + SgNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator, + SgNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBReleaseRequest_IEs__value_PR_MeNBtoSgNBContainer +} SgNBReleaseRequest_IEs__value_PR; +typedef enum SgNBReleaseRequestAcknowledge_IEs__value_PR { + SgNBReleaseRequestAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + SgNBReleaseRequestAcknowledge_IEs__value_PR_UE_X2AP_ID, + SgNBReleaseRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReleaseRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics, + SgNBReleaseRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBReleaseRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList +} SgNBReleaseRequestAcknowledge_IEs__value_PR; +typedef enum SgNBReleaseRequestReject_IEs__value_PR { + SgNBReleaseRequestReject_IEs__value_PR_NOTHING, /* No components present */ + SgNBReleaseRequestReject_IEs__value_PR_UE_X2AP_ID, + SgNBReleaseRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReleaseRequestReject_IEs__value_PR_Cause, + SgNBReleaseRequestReject_IEs__value_PR_CriticalityDiagnostics, + SgNBReleaseRequestReject_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBReleaseRequestReject_IEs__value_PR; +typedef enum SgNBReleaseRequired_IEs__value_PR { + SgNBReleaseRequired_IEs__value_PR_NOTHING, /* No components present */ + SgNBReleaseRequired_IEs__value_PR_UE_X2AP_ID, + SgNBReleaseRequired_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReleaseRequired_IEs__value_PR_Cause, + SgNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension, + SgNBReleaseRequired_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqdList +} SgNBReleaseRequired_IEs__value_PR; +typedef enum SgNBReleaseConfirm_IEs__value_PR { + SgNBReleaseConfirm_IEs__value_PR_NOTHING, /* No components present */ + SgNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID, + SgNBReleaseConfirm_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelConfList, + SgNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics, + SgNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBReleaseConfirm_IEs__value_PR; +typedef enum SgNBCounterCheckRequest_IEs__value_PR { + SgNBCounterCheckRequest_IEs__value_PR_NOTHING, /* No components present */ + SgNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID, + SgNBCounterCheckRequest_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToSgNBCounterCheck_List, + SgNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBCounterCheckRequest_IEs__value_PR; +typedef enum SgNBChangeRequired_IEs__value_PR { + SgNBChangeRequired_IEs__value_PR_NOTHING, /* No components present */ + SgNBChangeRequired_IEs__value_PR_UE_X2AP_ID, + SgNBChangeRequired_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBChangeRequired_IEs__value_PR_GlobalGNB_ID, + SgNBChangeRequired_IEs__value_PR_Cause, + SgNBChangeRequired_IEs__value_PR_SgNBtoMeNBContainer, + SgNBChangeRequired_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBChangeRequired_IEs__value_PR; +typedef enum SgNBChangeConfirm_IEs__value_PR { + SgNBChangeConfirm_IEs__value_PR_NOTHING, /* No components present */ + SgNBChangeConfirm_IEs__value_PR_UE_X2AP_ID, + SgNBChangeConfirm_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBChangeConfirm_IEs__value_PR_E_RABs_ToBeReleased_SgNBChaConfList, + SgNBChangeConfirm_IEs__value_PR_CriticalityDiagnostics, + SgNBChangeConfirm_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBChangeConfirm_IEs__value_PR; +typedef enum RRCTransfer_IEs__value_PR { + RRCTransfer_IEs__value_PR_NOTHING, /* No components present */ + RRCTransfer_IEs__value_PR_UE_X2AP_ID, + RRCTransfer_IEs__value_PR_SgNB_UE_X2AP_ID, + RRCTransfer_IEs__value_PR_SplitSRB, + RRCTransfer_IEs__value_PR_UENRMeasurement, + RRCTransfer_IEs__value_PR_UE_X2AP_ID_Extension +} RRCTransfer_IEs__value_PR; +typedef enum SgNBChangeRefuse_IEs__value_PR { + SgNBChangeRefuse_IEs__value_PR_NOTHING, /* No components present */ + SgNBChangeRefuse_IEs__value_PR_UE_X2AP_ID, + SgNBChangeRefuse_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBChangeRefuse_IEs__value_PR_Cause, + SgNBChangeRefuse_IEs__value_PR_CriticalityDiagnostics, + SgNBChangeRefuse_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBChangeRefuse_IEs__value_PR; +typedef enum ENDCX2SetupRequest_IEs__value_PR { + ENDCX2SetupRequest_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2SetupRequest_IEs__value_PR_InitiatingNodeType_EndcX2Setup +} ENDCX2SetupRequest_IEs__value_PR; +typedef enum ENB_ENDCX2SetupReqIEs__value_PR { + ENB_ENDCX2SetupReqIEs__value_PR_NOTHING, /* No components present */ + ENB_ENDCX2SetupReqIEs__value_PR_GlobalENB_ID, + ENB_ENDCX2SetupReqIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList +} ENB_ENDCX2SetupReqIEs__value_PR; +typedef enum En_gNB_ENDCX2SetupReqIEs__value_PR { + En_gNB_ENDCX2SetupReqIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCX2SetupReqIEs__value_PR_GlobalGNB_ID, + En_gNB_ENDCX2SetupReqIEs__value_PR_ServedNRcellsENDCX2ManagementList +} En_gNB_ENDCX2SetupReqIEs__value_PR; +typedef enum ENDCX2SetupResponse_IEs__value_PR { + ENDCX2SetupResponse_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2SetupResponse_IEs__value_PR_RespondingNodeType_EndcX2Setup +} ENDCX2SetupResponse_IEs__value_PR; +typedef enum ENB_ENDCX2SetupReqAckIEs__value_PR { + ENB_ENDCX2SetupReqAckIEs__value_PR_NOTHING, /* No components present */ + ENB_ENDCX2SetupReqAckIEs__value_PR_GlobalENB_ID, + ENB_ENDCX2SetupReqAckIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList +} ENB_ENDCX2SetupReqAckIEs__value_PR; +typedef enum En_gNB_ENDCX2SetupReqAckIEs__value_PR { + En_gNB_ENDCX2SetupReqAckIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCX2SetupReqAckIEs__value_PR_GlobalGNB_ID, + En_gNB_ENDCX2SetupReqAckIEs__value_PR_ServedNRcellsENDCX2ManagementList +} En_gNB_ENDCX2SetupReqAckIEs__value_PR; +typedef enum ENDCX2SetupFailure_IEs__value_PR { + ENDCX2SetupFailure_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2SetupFailure_IEs__value_PR_Cause, + ENDCX2SetupFailure_IEs__value_PR_CriticalityDiagnostics, + ENDCX2SetupFailure_IEs__value_PR_TimeToWait +} ENDCX2SetupFailure_IEs__value_PR; +typedef enum ENDCConfigurationUpdate_IEs__value_PR { + ENDCConfigurationUpdate_IEs__value_PR_NOTHING, /* No components present */ + ENDCConfigurationUpdate_IEs__value_PR_InitiatingNodeType_EndcConfigUpdate +} ENDCConfigurationUpdate_IEs__value_PR; +typedef enum ENB_ENDCConfigUpdateIEs__value_PR { + ENB_ENDCConfigUpdateIEs__value_PR_NOTHING, /* No components present */ + ENB_ENDCConfigUpdateIEs__value_PR_CellAssistanceInformation, + ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList, + ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsToModifyListENDCConfUpd, + ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsToDeleteListENDCConfUpd +} ENB_ENDCConfigUpdateIEs__value_PR; +typedef enum En_gNB_ENDCConfigUpdateIEs__value_PR { + En_gNB_ENDCConfigUpdateIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsENDCX2ManagementList, + En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsToModifyENDCConfUpdList, + En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsToDeleteENDCConfUpdList +} En_gNB_ENDCConfigUpdateIEs__value_PR; +typedef enum ENDCConfigurationUpdateAcknowledge_IEs__value_PR { + ENDCConfigurationUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + ENDCConfigurationUpdateAcknowledge_IEs__value_PR_RespondingNodeType_EndcConfigUpdate +} ENDCConfigurationUpdateAcknowledge_IEs__value_PR; +typedef enum ENB_ENDCConfigUpdateAckIEs__value_PR { + ENB_ENDCConfigUpdateAckIEs__value_PR_NOTHING /* No components present */ + +} ENB_ENDCConfigUpdateAckIEs__value_PR; +typedef enum En_gNB_ENDCConfigUpdateAckIEs__value_PR { + En_gNB_ENDCConfigUpdateAckIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCConfigUpdateAckIEs__value_PR_ServedNRcellsENDCX2ManagementList +} En_gNB_ENDCConfigUpdateAckIEs__value_PR; +typedef enum ENDCConfigurationUpdateFailure_IEs__value_PR { + ENDCConfigurationUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + ENDCConfigurationUpdateFailure_IEs__value_PR_Cause, + ENDCConfigurationUpdateFailure_IEs__value_PR_CriticalityDiagnostics, + ENDCConfigurationUpdateFailure_IEs__value_PR_TimeToWait +} ENDCConfigurationUpdateFailure_IEs__value_PR; +typedef enum ENDCCellActivationRequest_IEs__value_PR { + ENDCCellActivationRequest_IEs__value_PR_NOTHING, /* No components present */ + ENDCCellActivationRequest_IEs__value_PR_ServedNRCellsToActivate, + ENDCCellActivationRequest_IEs__value_PR_ActivationID +} ENDCCellActivationRequest_IEs__value_PR; +typedef enum ENDCCellActivationResponse_IEs__value_PR { + ENDCCellActivationResponse_IEs__value_PR_NOTHING, /* No components present */ + ENDCCellActivationResponse_IEs__value_PR_ActivatedNRCellList, + ENDCCellActivationResponse_IEs__value_PR_ActivationID, + ENDCCellActivationResponse_IEs__value_PR_CriticalityDiagnostics +} ENDCCellActivationResponse_IEs__value_PR; +typedef enum ENDCCellActivationFailure_IEs__value_PR { + ENDCCellActivationFailure_IEs__value_PR_NOTHING, /* No components present */ + ENDCCellActivationFailure_IEs__value_PR_ActivationID, + ENDCCellActivationFailure_IEs__value_PR_Cause, + ENDCCellActivationFailure_IEs__value_PR_CriticalityDiagnostics +} ENDCCellActivationFailure_IEs__value_PR; +typedef enum SecondaryRATDataUsageReport_IEs__value_PR { + SecondaryRATDataUsageReport_IEs__value_PR_NOTHING, /* No components present */ + SecondaryRATDataUsageReport_IEs__value_PR_UE_X2AP_ID, + SecondaryRATDataUsageReport_IEs__value_PR_SgNB_UE_X2AP_ID, + SecondaryRATDataUsageReport_IEs__value_PR_SecondaryRATUsageReportList, + SecondaryRATDataUsageReport_IEs__value_PR_UE_X2AP_ID_Extension +} SecondaryRATDataUsageReport_IEs__value_PR; +typedef enum SgNBActivityNotification_IEs__value_PR { + SgNBActivityNotification_IEs__value_PR_NOTHING, /* No components present */ + SgNBActivityNotification_IEs__value_PR_UE_X2AP_ID, + SgNBActivityNotification_IEs__value_PR_SgNB_UE_X2AP_ID, + SgNBActivityNotification_IEs__value_PR_UserPlaneTrafficActivityReport, + SgNBActivityNotification_IEs__value_PR_ERABActivityNotifyItemList, + SgNBActivityNotification_IEs__value_PR_UE_X2AP_ID_Extension +} SgNBActivityNotification_IEs__value_PR; +typedef enum ENDCPartialResetRequired_IEs__value_PR { + ENDCPartialResetRequired_IEs__value_PR_NOTHING, /* No components present */ + ENDCPartialResetRequired_IEs__value_PR_UEsToBeResetList, + ENDCPartialResetRequired_IEs__value_PR_Cause +} ENDCPartialResetRequired_IEs__value_PR; +typedef enum ENDCPartialResetConfirm_IEs__value_PR { + ENDCPartialResetConfirm_IEs__value_PR_NOTHING, /* No components present */ + ENDCPartialResetConfirm_IEs__value_PR_UEsToBeResetList +} ENDCPartialResetConfirm_IEs__value_PR; +typedef enum EUTRANRCellResourceCoordinationRequest_IEs__value_PR { + EUTRANRCellResourceCoordinationRequest_IEs__value_PR_NOTHING, /* No components present */ + EUTRANRCellResourceCoordinationRequest_IEs__value_PR_InitiatingNodeType_EutranrCellResourceCoordination +} EUTRANRCellResourceCoordinationRequest_IEs__value_PR; +typedef enum ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR { + ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_NOTHING, /* No components present */ + ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_DataTrafficResourceIndication, + ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_SpectrumSharingGroupID, + ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofEUTRACellsinEUTRACoordinationReq +} ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR; +typedef enum En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR { + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_NOTHING, /* No components present */ + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_DataTrafficResourceIndication, + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofEUTRACellsinNRCoordinationReq, + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_SpectrumSharingGroupID, + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofNRCellsinNRCoordinationReq +} En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR; +typedef enum EUTRANRCellResourceCoordinationResponse_IEs__value_PR { + EUTRANRCellResourceCoordinationResponse_IEs__value_PR_NOTHING, /* No components present */ + EUTRANRCellResourceCoordinationResponse_IEs__value_PR_RespondingNodeType_EutranrCellResourceCoordination +} EUTRANRCellResourceCoordinationResponse_IEs__value_PR; +typedef enum ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR { + ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_NOTHING, /* No components present */ + ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_DataTrafficResourceIndication, + ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_SpectrumSharingGroupID, + ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_ListofEUTRACellsinEUTRACoordinationResp +} ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR; +typedef enum En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR { + En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_NOTHING, /* No components present */ + En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_DataTrafficResourceIndication, + En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_SpectrumSharingGroupID, + En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_ListofNRCellsinNRCoordinationResp +} En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR; +typedef enum ENDCX2RemovalRequest_IEs__value_PR { + ENDCX2RemovalRequest_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2RemovalRequest_IEs__value_PR_InitiatingNodeType_EndcX2Removal +} ENDCX2RemovalRequest_IEs__value_PR; +typedef enum ENB_ENDCX2RemovalReqIEs__value_PR { + ENB_ENDCX2RemovalReqIEs__value_PR_NOTHING, /* No components present */ + ENB_ENDCX2RemovalReqIEs__value_PR_GlobalENB_ID +} ENB_ENDCX2RemovalReqIEs__value_PR; +typedef enum En_gNB_ENDCX2RemovalReqIEs__value_PR { + En_gNB_ENDCX2RemovalReqIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCX2RemovalReqIEs__value_PR_GlobalGNB_ID +} En_gNB_ENDCX2RemovalReqIEs__value_PR; +typedef enum ENDCX2RemovalResponse_IEs__value_PR { + ENDCX2RemovalResponse_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2RemovalResponse_IEs__value_PR_RespondingNodeType_EndcX2Removal +} ENDCX2RemovalResponse_IEs__value_PR; +typedef enum ENB_ENDCX2RemovalReqAckIEs__value_PR { + ENB_ENDCX2RemovalReqAckIEs__value_PR_NOTHING, /* No components present */ + ENB_ENDCX2RemovalReqAckIEs__value_PR_GlobalENB_ID +} ENB_ENDCX2RemovalReqAckIEs__value_PR; +typedef enum En_gNB_ENDCX2RemovalReqAckIEs__value_PR { + En_gNB_ENDCX2RemovalReqAckIEs__value_PR_NOTHING, /* No components present */ + En_gNB_ENDCX2RemovalReqAckIEs__value_PR_GlobalGNB_ID +} En_gNB_ENDCX2RemovalReqAckIEs__value_PR; +typedef enum ENDCX2RemovalFailure_IEs__value_PR { + ENDCX2RemovalFailure_IEs__value_PR_NOTHING, /* No components present */ + ENDCX2RemovalFailure_IEs__value_PR_Cause, + ENDCX2RemovalFailure_IEs__value_PR_CriticalityDiagnostics +} ENDCX2RemovalFailure_IEs__value_PR; +typedef enum DataForwardingAddressIndication_IEs__value_PR { + DataForwardingAddressIndication_IEs__value_PR_NOTHING, /* No components present */ + DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension, + DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID, + DataForwardingAddressIndication_IEs__value_PR_E_RABs_DataForwardingAddress_List +} DataForwardingAddressIndication_IEs__value_PR; +typedef enum GNBStatusIndicationIEs__value_PR { + GNBStatusIndicationIEs__value_PR_NOTHING, /* No components present */ + GNBStatusIndicationIEs__value_PR_GNBOverloadInformation +} GNBStatusIndicationIEs__value_PR; +typedef enum E_RAB_ItemIEs__value_PR { + E_RAB_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RAB_ItemIEs__value_PR_E_RAB_Item +} E_RAB_ItemIEs__value_PR; +typedef enum E_RABUsageReport_ItemIEs__value_PR { + E_RABUsageReport_ItemIEs__value_PR_NOTHING, /* No components present */ + E_RABUsageReport_ItemIEs__value_PR_E_RABUsageReport_Item +} E_RABUsageReport_ItemIEs__value_PR; +typedef enum SecondaryRATUsageReport_ItemIEs__value_PR { + SecondaryRATUsageReport_ItemIEs__value_PR_NOTHING, /* No components present */ + SecondaryRATUsageReport_ItemIEs__value_PR_SecondaryRATUsageReport_Item +} SecondaryRATUsageReport_ItemIEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct E_RABs_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeSetup_ItemIEs__value { + E_RABs_ToBeSetup_ItemIEs__value_PR present; + union E_RABs_ToBeSetup_ItemIEs__value_u { + E_RABs_ToBeSetup_Item_t E_RABs_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetup_ItemIEs_t; +typedef struct E_RABs_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ItemIEs__value { + E_RABs_Admitted_ItemIEs__value_PR present; + union E_RABs_Admitted_ItemIEs__value_u { + E_RABs_Admitted_Item_t E_RABs_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ItemIEs_t; +typedef struct E_RABs_SubjectToStatusTransfer_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToStatusTransfer_ItemIEs__value { + E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR present; + union E_RABs_SubjectToStatusTransfer_ItemIEs__value_u { + E_RABs_SubjectToStatusTransfer_Item_t E_RABs_SubjectToStatusTransfer_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToStatusTransfer_ItemIEs_t; +typedef struct CellInformation_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellInformation_ItemIEs__value { + CellInformation_ItemIEs__value_PR present; + union CellInformation_ItemIEs__value_u { + CellInformation_Item_t CellInformation_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInformation_ItemIEs_t; +typedef struct CellToReport_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellToReport_ItemIEs__value { + CellToReport_ItemIEs__value_PR present; + union CellToReport_ItemIEs__value_u { + CellToReport_Item_t CellToReport_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellToReport_ItemIEs_t; +typedef struct MeasurementInitiationResult_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MeasurementInitiationResult_ItemIEs__value { + MeasurementInitiationResult_ItemIEs__value_PR present; + union MeasurementInitiationResult_ItemIEs__value_u { + MeasurementInitiationResult_Item_t MeasurementInitiationResult_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInitiationResult_ItemIEs_t; +typedef struct MeasurementFailureCause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MeasurementFailureCause_ItemIEs__value { + MeasurementFailureCause_ItemIEs__value_PR present; + union MeasurementFailureCause_ItemIEs__value_u { + MeasurementFailureCause_Item_t MeasurementFailureCause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementFailureCause_ItemIEs_t; +typedef struct CompleteFailureCauseInformation_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CompleteFailureCauseInformation_ItemIEs__value { + CompleteFailureCauseInformation_ItemIEs__value_PR present; + union CompleteFailureCauseInformation_ItemIEs__value_u { + CompleteFailureCauseInformation_Item_t CompleteFailureCauseInformation_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CompleteFailureCauseInformation_ItemIEs_t; +typedef struct CellMeasurementResult_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellMeasurementResult_ItemIEs__value { + CellMeasurementResult_ItemIEs__value_PR present; + union CellMeasurementResult_ItemIEs__value_u { + CellMeasurementResult_Item_t CellMeasurementResult_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellMeasurementResult_ItemIEs_t; +typedef struct E_RABs_ToBeAdded_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_ItemIEs__value { + E_RABs_ToBeAdded_ItemIEs__value_PR present; + union E_RABs_ToBeAdded_ItemIEs__value_u { + E_RABs_ToBeAdded_Item_t E_RABs_ToBeAdded_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_ItemIEs__value { + E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeAdded_ItemIEs__value_u { + E_RABs_Admitted_ToBeAdded_Item_t E_RABs_Admitted_ToBeAdded_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ItemIEs_t; +typedef struct E_RABs_ToBeAdded_ModReqItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_ModReqItemIEs__value { + E_RABs_ToBeAdded_ModReqItemIEs__value_PR present; + union E_RABs_ToBeAdded_ModReqItemIEs__value_u { + E_RABs_ToBeAdded_ModReqItem_t E_RABs_ToBeAdded_ModReqItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_ModReqItemIEs_t; +typedef struct E_RABs_ToBeModified_ModReqItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_ModReqItemIEs__value { + E_RABs_ToBeModified_ModReqItemIEs__value_PR present; + union E_RABs_ToBeModified_ModReqItemIEs__value_u { + E_RABs_ToBeModified_ModReqItem_t E_RABs_ToBeModified_ModReqItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_ModReqItemIEs_t; +typedef struct E_RABs_ToBeReleased_ModReqItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_ModReqItemIEs__value { + E_RABs_ToBeReleased_ModReqItemIEs__value_PR present; + union E_RABs_ToBeReleased_ModReqItemIEs__value_u { + E_RABs_ToBeReleased_ModReqItem_t E_RABs_ToBeReleased_ModReqItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqItemIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value { + E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR present; + union E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_u { + E_RABs_Admitted_ToBeAdded_ModAckItem_t E_RABs_Admitted_ToBeAdded_ModAckItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_ModAckItemIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_ModAckItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_ModAckItemIEs__value { + E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR present; + union E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_u { + E_RABs_Admitted_ToBeModified_ModAckItem_t E_RABs_Admitted_ToBeModified_ModAckItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_ModAckItemIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value { + E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR present; + union E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_u { + E_RABs_Admitted_ToReleased_ModAckItem_t E_RABs_Admitted_ToReleased_ModAckItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_ModAckItemIEs_t; +typedef struct E_RABs_ToBeReleased_ModReqdItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_ModReqdItemIEs__value { + E_RABs_ToBeReleased_ModReqdItemIEs__value_PR present; + union E_RABs_ToBeReleased_ModReqdItemIEs__value_u { + E_RABs_ToBeReleased_ModReqdItem_t E_RABs_ToBeReleased_ModReqdItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_ModReqdItemIEs_t; +typedef struct E_RABs_ToBeReleased_RelReqItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelReqItemIEs__value { + E_RABs_ToBeReleased_RelReqItemIEs__value_PR present; + union E_RABs_ToBeReleased_RelReqItemIEs__value_u { + E_RABs_ToBeReleased_RelReqItem_t E_RABs_ToBeReleased_RelReqItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelReqItemIEs_t; +typedef struct E_RABs_ToBeReleased_RelConfItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_RelConfItemIEs__value { + E_RABs_ToBeReleased_RelConfItemIEs__value_PR present; + union E_RABs_ToBeReleased_RelConfItemIEs__value_u { + E_RABs_ToBeReleased_RelConfItem_t E_RABs_ToBeReleased_RelConfItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_RelConfItemIEs_t; +typedef struct E_RABs_SubjectToCounterCheckItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToCounterCheckItemIEs__value { + E_RABs_SubjectToCounterCheckItemIEs__value_PR present; + union E_RABs_SubjectToCounterCheckItemIEs__value_u { + E_RABs_SubjectToCounterCheckItem_t E_RABs_SubjectToCounterCheckItem; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToCounterCheckItemIEs_t; +typedef struct E_RABs_ToBeSetupRetrieve_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeSetupRetrieve_ItemIEs__value { + E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR present; + union E_RABs_ToBeSetupRetrieve_ItemIEs__value_u { + E_RABs_ToBeSetupRetrieve_Item_t E_RABs_ToBeSetupRetrieve_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeSetupRetrieve_ItemIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value { + E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR present; + union E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_u { + E_RABs_ToBeAdded_SgNBAddReq_Item_t E_RABs_ToBeAdded_SgNBAddReq_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_u { + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t; +typedef struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value { + E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR present; + union E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_u { + E_RABs_ToBeAdded_SgNBModReq_Item_t E_RABs_ToBeAdded_SgNBModReq_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeAdded_SgNBModReq_ItemIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReq_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReq_ItemIEs__value { + E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR present; + union E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_u { + E_RABs_ToBeModified_SgNBModReq_Item_t E_RABs_ToBeModified_SgNBModReq_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReq_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value { + E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBModReq_Item_t E_RABs_ToBeReleased_SgNBModReq_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReq_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value { + E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_u { + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_t E_RABs_Admitted_ToBeAdded_SgNBModAck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value { + E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_u { + E_RABs_Admitted_ToBeModified_SgNBModAck_Item_t E_RABs_Admitted_ToBeModified_SgNBModAck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value { + E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_u { + E_RABs_Admitted_ToReleased_SgNBModAck_Item_t E_RABs_Admitted_ToReleased_SgNBModAck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value { + E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBModReqd_Item_t E_RABs_ToBeReleased_SgNBModReqd_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_t; +typedef struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value { + E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR present; + union E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_u { + E_RABs_ToBeModified_SgNBModReqd_Item_t E_RABs_ToBeModified_SgNBModReqd_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeModified_SgNBModReqd_ItemIEs_t; +typedef struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value { + E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR present; + union E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_u { + E_RABs_AdmittedToBeModified_SgNBModConf_Item_t E_RABs_AdmittedToBeModified_SgNBModConf_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value { + E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBRelReq_Item_t E_RABs_ToBeReleased_SgNBRelReq_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_t; +typedef struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value { + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR present; + union E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_u { + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_t E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value { + E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBRelReqd_Item_t E_RABs_ToBeReleased_SgNBRelReqd_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value { + E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBRelConf_Item_t E_RABs_ToBeReleased_SgNBRelConf_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_t; +typedef struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value { + E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR present; + union E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_u { + E_RABs_SubjectToSgNBCounterCheck_Item_t E_RABs_SubjectToSgNBCounterCheck_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_SubjectToSgNBCounterCheck_ItemIEs_t; +typedef struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value { + E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR present; + union E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_u { + E_RABs_ToBeReleased_SgNBChaConf_Item_t E_RABs_ToBeReleased_SgNBChaConf_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_t; +typedef struct E_RABs_DataForwardingAddress_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABs_DataForwardingAddress_ItemIEs__value { + E_RABs_DataForwardingAddress_ItemIEs__value_PR present; + union E_RABs_DataForwardingAddress_ItemIEs__value_u { + E_RABs_DataForwardingAddress_Item_t E_RABs_DataForwardingAddress_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABs_DataForwardingAddress_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscription_t RICsubscription; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcause_t RICcause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcause_t RICcause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; +typedef struct HandoverRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverRequest_IEs__value { + HandoverRequest_IEs__value_PR present; + union HandoverRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + ECGI_t ECGI; + GUMMEI_t GUMMEI; + UE_ContextInformation_t UE_ContextInformation; + UE_HistoryInformation_t UE_HistoryInformation; + TraceActivation_t TraceActivation; + SRVCCOperationPossible_t SRVCCOperationPossible; + CSGMembershipStatus_t CSGMembershipStatus; + MobilityInformation_t MobilityInformation; + Masked_IMEISV_t Masked_IMEISV; + UE_HistoryInformationFromTheUE_t UE_HistoryInformationFromTheUE; + ExpectedUEBehaviour_t ExpectedUEBehaviour; + ProSeAuthorized_t ProSeAuthorized; + UE_ContextReferenceAtSeNB_t UE_ContextReferenceAtSeNB; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + V2XServicesAuthorized_t V2XServicesAuthorized; + UE_ContextReferenceAtWT_t UE_ContextReferenceAtWT; + NRUESecurityCapabilities_t NRUESecurityCapabilities; + UE_ContextReferenceAtSgNB_t UE_ContextReferenceAtSgNB; + AerialUEsubscriptionInformation_t AerialUEsubscriptionInformation; + Subscription_Based_UE_DifferentiationInfo_t Subscription_Based_UE_DifferentiationInfo; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRequest_IEs_t; +typedef struct HandoverRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverRequestAcknowledge_IEs__value { + HandoverRequestAcknowledge_IEs__value_PR present; + union HandoverRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_Admitted_List_t E_RABs_Admitted_List; + E_RAB_List_t E_RAB_List; + TargeteNBtoSource_eNBTransparentContainer_t TargeteNBtoSource_eNBTransparentContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_ContextKeptIndicator_t UE_ContextKeptIndicator; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverRequestAcknowledge_IEs_t; +typedef struct HandoverPreparationFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverPreparationFailure_IEs__value { + HandoverPreparationFailure_IEs__value_PR present; + union HandoverPreparationFailure_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverPreparationFailure_IEs_t; +typedef struct HandoverReport_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverReport_IEs__value { + HandoverReport_IEs__value_PR present; + union HandoverReport_IEs__value_u { + HandoverReportType_t HandoverReportType; + Cause_t Cause; + ECGI_t ECGI; + TargetCellInUTRAN_t TargetCellInUTRAN; + CRNTI_t CRNTI; + MobilityInformation_t MobilityInformation; + UE_RLF_Report_Container_t UE_RLF_Report_Container; + UE_RLF_Report_Container_for_extended_bands_t UE_RLF_Report_Container_for_extended_bands; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverReport_IEs_t; +typedef struct SNStatusTransfer_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SNStatusTransfer_IEs__value { + SNStatusTransfer_IEs__value_PR present; + union SNStatusTransfer_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_SubjectToStatusTransfer_List_t E_RABs_SubjectToStatusTransfer_List; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNStatusTransfer_IEs_t; +typedef struct UEContextRelease_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct UEContextRelease_IEs__value { + UEContextRelease_IEs__value_PR present; + union UEContextRelease_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SIPTOBearerDeactivationIndication_t SIPTOBearerDeactivationIndication; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEContextRelease_IEs_t; +typedef struct HandoverCancel_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct HandoverCancel_IEs__value { + HandoverCancel_IEs__value_PR present; + union HandoverCancel_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverCancel_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct ResetRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequest_IEs__value { + ResetRequest_IEs__value_PR present; + union ResetRequest_IEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_IEs_t; +typedef struct ResetResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponse_IEs__value { + ResetResponse_IEs__value_PR present; + union ResetResponse_IEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_IEs_t; +typedef struct X2SetupRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2SetupRequest_IEs__value { + X2SetupRequest_IEs__value_PR present; + union X2SetupRequest_IEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + ServedCells_t ServedCells; + GUGroupIDList_t GUGroupIDList; + LHN_ID_t LHN_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupRequest_IEs_t; +typedef struct X2SetupResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2SetupResponse_IEs__value { + X2SetupResponse_IEs__value_PR present; + union X2SetupResponse_IEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + ServedCells_t ServedCells; + GUGroupIDList_t GUGroupIDList; + CriticalityDiagnostics_t CriticalityDiagnostics; + LHN_ID_t LHN_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupResponse_IEs_t; +typedef struct X2SetupFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2SetupFailure_IEs__value { + X2SetupFailure_IEs__value_PR present; + union X2SetupFailure_IEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupFailure_IEs_t; +typedef struct LoadInformation_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct LoadInformation_IEs__value { + LoadInformation_IEs__value_PR present; + union LoadInformation_IEs__value_u { + CellInformation_List_t CellInformation_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LoadInformation_IEs_t; +typedef struct ENBConfigurationUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENBConfigurationUpdate_IEs__value { + ENBConfigurationUpdate_IEs__value_PR present; + union ENBConfigurationUpdate_IEs__value_u { + ServedCells_t ServedCells; + ServedCellsToModify_t ServedCellsToModify; + Old_ECGIs_t Old_ECGIs; + GUGroupIDList_t GUGroupIDList; + CoverageModificationList_t CoverageModificationList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdate_IEs_t; +typedef struct ENBConfigurationUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENBConfigurationUpdateAcknowledge_IEs__value { + ENBConfigurationUpdateAcknowledge_IEs__value_PR present; + union ENBConfigurationUpdateAcknowledge_IEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdateAcknowledge_IEs_t; +typedef struct ENBConfigurationUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENBConfigurationUpdateFailure_IEs__value { + ENBConfigurationUpdateFailure_IEs__value_PR present; + union ENBConfigurationUpdateFailure_IEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENBConfigurationUpdateFailure_IEs_t; +typedef struct ResourceStatusRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResourceStatusRequest_IEs__value { + ResourceStatusRequest_IEs__value_PR present; + union ResourceStatusRequest_IEs__value_u { + Measurement_ID_t Measurement_ID; + Registration_Request_t Registration_Request; + ReportCharacteristics_t ReportCharacteristics; + CellToReport_List_t CellToReport_List; + ReportingPeriodicity_t ReportingPeriodicity; + PartialSuccessIndicator_t PartialSuccessIndicator; + ReportingPeriodicityRSRPMR_t ReportingPeriodicityRSRPMR; + ReportingPeriodicityCSIR_t ReportingPeriodicityCSIR; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusRequest_IEs_t; +typedef struct ResourceStatusResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResourceStatusResponse_IEs__value { + ResourceStatusResponse_IEs__value_PR present; + union ResourceStatusResponse_IEs__value_u { + Measurement_ID_t Measurement_ID; + CriticalityDiagnostics_t CriticalityDiagnostics; + MeasurementInitiationResult_List_t MeasurementInitiationResult_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusResponse_IEs_t; +typedef struct ResourceStatusFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResourceStatusFailure_IEs__value { + ResourceStatusFailure_IEs__value_PR present; + union ResourceStatusFailure_IEs__value_u { + Measurement_ID_t Measurement_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + CompleteFailureCauseInformation_List_t CompleteFailureCauseInformation_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusFailure_IEs_t; +typedef struct ResourceStatusUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResourceStatusUpdate_IEs__value { + ResourceStatusUpdate_IEs__value_PR present; + union ResourceStatusUpdate_IEs__value_u { + Measurement_ID_t Measurement_ID; + CellMeasurementResult_List_t CellMeasurementResult_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusUpdate_IEs_t; +typedef struct MobilityChangeRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MobilityChangeRequest_IEs__value { + MobilityChangeRequest_IEs__value_PR present; + union MobilityChangeRequest_IEs__value_u { + ECGI_t ECGI; + MobilityParametersInformation_t MobilityParametersInformation; + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeRequest_IEs_t; +typedef struct MobilityChangeAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MobilityChangeAcknowledge_IEs__value { + MobilityChangeAcknowledge_IEs__value_PR present; + union MobilityChangeAcknowledge_IEs__value_u { + ECGI_t ECGI; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeAcknowledge_IEs_t; +typedef struct MobilityChangeFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct MobilityChangeFailure_IEs__value { + MobilityChangeFailure_IEs__value_PR present; + union MobilityChangeFailure_IEs__value_u { + ECGI_t ECGI; + Cause_t Cause; + MobilityParametersModificationRange_t MobilityParametersModificationRange; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityChangeFailure_IEs_t; +typedef struct RLFIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RLFIndication_IEs__value { + RLFIndication_IEs__value_PR present; + union RLFIndication_IEs__value_u { + PCI_t PCI; + ECGI_t ECGI; + CRNTI_t CRNTI; + ShortMAC_I_t ShortMAC_I; + UE_RLF_Report_Container_t UE_RLF_Report_Container; + RRCConnSetupIndicator_t RRCConnSetupIndicator; + RRCConnReestabIndicator_t RRCConnReestabIndicator; + UE_RLF_Report_Container_for_extended_bands_t UE_RLF_Report_Container_for_extended_bands; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLFIndication_IEs_t; +typedef struct CellActivationRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellActivationRequest_IEs__value { + CellActivationRequest_IEs__value_PR present; + union CellActivationRequest_IEs__value_u { + ServedCellsToActivate_t ServedCellsToActivate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationRequest_IEs_t; +typedef struct CellActivationResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellActivationResponse_IEs__value { + CellActivationResponse_IEs__value_PR present; + union CellActivationResponse_IEs__value_u { + ActivatedCellList_t ActivatedCellList; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationResponse_IEs_t; +typedef struct CellActivationFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct CellActivationFailure_IEs__value { + CellActivationFailure_IEs__value_PR present; + union CellActivationFailure_IEs__value_u { + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellActivationFailure_IEs_t; +typedef struct X2Release_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2Release_IEs__value { + X2Release_IEs__value_PR present; + union X2Release_IEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2Release_IEs_t; +typedef struct X2APMessageTransfer_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2APMessageTransfer_IEs__value { + X2APMessageTransfer_IEs__value_PR present; + union X2APMessageTransfer_IEs__value_u { + RNL_Header_t RNL_Header; + X2AP_Message_t X2AP_Message; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2APMessageTransfer_IEs_t; +typedef struct SeNBAdditionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBAdditionRequest_IEs__value { + SeNBAdditionRequest_IEs__value_PR present; + union SeNBAdditionRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + UESecurityCapabilities_t UESecurityCapabilities; + SeNBSecurityKey_t SeNBSecurityKey; + UEAggregateMaximumBitRate_t UEAggregateMaximumBitRate; + PLMN_Identity_t PLMN_Identity; + E_RABs_ToBeAdded_List_t E_RABs_ToBeAdded_List; + MeNBtoSeNBContainer_t MeNBtoSeNBContainer; + CSGMembershipStatus_t CSGMembershipStatus; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + ExpectedUEBehaviour_t ExpectedUEBehaviour; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequest_IEs_t; +typedef struct SeNBAdditionRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBAdditionRequestAcknowledge_IEs__value { + SeNBAdditionRequestAcknowledge_IEs__value_PR present; + union SeNBAdditionRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_Admitted_ToBeAdded_List_t E_RABs_Admitted_ToBeAdded_List; + E_RAB_List_t E_RAB_List; + SeNBtoMeNBContainer_t SeNBtoMeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + TransportLayerAddress_t TransportLayerAddress; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + TunnelInformation_t TunnelInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequestAcknowledge_IEs_t; +typedef struct SeNBAdditionRequestReject_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBAdditionRequestReject_IEs__value { + SeNBAdditionRequestReject_IEs__value_PR present; + union SeNBAdditionRequestReject_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequestReject_IEs_t; +typedef struct SeNBReconfigurationComplete_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBReconfigurationComplete_IEs__value { + SeNBReconfigurationComplete_IEs__value_PR present; + union SeNBReconfigurationComplete_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + ResponseInformationSeNBReconfComp_t ResponseInformationSeNBReconfComp; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReconfigurationComplete_IEs_t; +typedef struct SeNBModificationRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationRequest_IEs__value { + SeNBModificationRequest_IEs__value_PR present; + union SeNBModificationRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + SCGChangeIndication_t SCGChangeIndication; + PLMN_Identity_t PLMN_Identity; + UE_ContextInformationSeNBModReq_t UE_ContextInformationSeNBModReq; + MeNBtoSeNBContainer_t MeNBtoSeNBContainer; + CSGMembershipStatus_t CSGMembershipStatus; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequest_IEs_t; +typedef struct SeNBModificationRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationRequestAcknowledge_IEs__value { + SeNBModificationRequestAcknowledge_IEs__value_PR present; + union SeNBModificationRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_Admitted_ToBeAdded_ModAckList_t E_RABs_Admitted_ToBeAdded_ModAckList; + E_RABs_Admitted_ToBeModified_ModAckList_t E_RABs_Admitted_ToBeModified_ModAckList; + E_RABs_Admitted_ToBeReleased_ModAckList_t E_RABs_Admitted_ToBeReleased_ModAckList; + E_RAB_List_t E_RAB_List; + SeNBtoMeNBContainer_t SeNBtoMeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequestAcknowledge_IEs_t; +typedef struct SeNBModificationRequestReject_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationRequestReject_IEs__value { + SeNBModificationRequestReject_IEs__value_PR present; + union SeNBModificationRequestReject_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequestReject_IEs_t; +typedef struct SeNBModificationRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationRequired_IEs__value { + SeNBModificationRequired_IEs__value_PR present; + union SeNBModificationRequired_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + SCGChangeIndication_t SCGChangeIndication; + E_RABs_ToBeReleased_ModReqd_t E_RABs_ToBeReleased_ModReqd; + SeNBtoMeNBContainer_t SeNBtoMeNBContainer; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequired_IEs_t; +typedef struct SeNBModificationConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationConfirm_IEs__value { + SeNBModificationConfirm_IEs__value_PR present; + union SeNBModificationConfirm_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + MeNBtoSeNBContainer_t MeNBtoSeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationConfirm_IEs_t; +typedef struct SeNBModificationRefuse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBModificationRefuse_IEs__value { + SeNBModificationRefuse_IEs__value_PR present; + union SeNBModificationRefuse_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + MeNBtoSeNBContainer_t MeNBtoSeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRefuse_IEs_t; +typedef struct SeNBReleaseRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBReleaseRequest_IEs__value { + SeNBReleaseRequest_IEs__value_PR present; + union SeNBReleaseRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + E_RABs_ToBeReleased_List_RelReq_t E_RABs_ToBeReleased_List_RelReq; + UE_ContextKeptIndicator_t UE_ContextKeptIndicator; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + MakeBeforeBreakIndicator_t MakeBeforeBreakIndicator; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseRequest_IEs_t; +typedef struct SeNBReleaseRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBReleaseRequired_IEs__value { + SeNBReleaseRequired_IEs__value_PR present; + union SeNBReleaseRequired_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + Cause_t Cause; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseRequired_IEs_t; +typedef struct SeNBReleaseConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBReleaseConfirm_IEs__value { + SeNBReleaseConfirm_IEs__value_PR present; + union SeNBReleaseConfirm_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_ToBeReleased_List_RelConf_t E_RABs_ToBeReleased_List_RelConf; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseConfirm_IEs_t; +typedef struct SeNBCounterCheckRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SeNBCounterCheckRequest_IEs__value { + SeNBCounterCheckRequest_IEs__value_PR present; + union SeNBCounterCheckRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_SubjectToCounterCheck_List_t E_RABs_SubjectToCounterCheck_List; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBCounterCheckRequest_IEs_t; +typedef struct X2RemovalRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2RemovalRequest_IEs__value { + X2RemovalRequest_IEs__value_PR present; + union X2RemovalRequest_IEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + X2BenefitValue_t X2BenefitValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalRequest_IEs_t; +typedef struct X2RemovalResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2RemovalResponse_IEs__value { + X2RemovalResponse_IEs__value_PR present; + union X2RemovalResponse_IEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalResponse_IEs_t; +typedef struct X2RemovalFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct X2RemovalFailure_IEs__value { + X2RemovalFailure_IEs__value_PR present; + union X2RemovalFailure_IEs__value_u { + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalFailure_IEs_t; +typedef struct RetrieveUEContextRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RetrieveUEContextRequest_IEs__value { + RetrieveUEContextRequest_IEs__value_PR present; + union RetrieveUEContextRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + ResumeID_t ResumeID; + ShortMAC_I_t ShortMAC_I; + EUTRANCellIdentifier_t EUTRANCellIdentifier; + CRNTI_t CRNTI; + PCI_t PCI; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextRequest_IEs_t; +typedef struct RetrieveUEContextResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RetrieveUEContextResponse_IEs__value { + RetrieveUEContextResponse_IEs__value_PR present; + union RetrieveUEContextResponse_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + GUMMEI_t GUMMEI; + UE_ContextInformationRetrieve_t UE_ContextInformationRetrieve; + TraceActivation_t TraceActivation; + SRVCCOperationPossible_t SRVCCOperationPossible; + Masked_IMEISV_t Masked_IMEISV; + ExpectedUEBehaviour_t ExpectedUEBehaviour; + ProSeAuthorized_t ProSeAuthorized; + CriticalityDiagnostics_t CriticalityDiagnostics; + V2XServicesAuthorized_t V2XServicesAuthorized; + AerialUEsubscriptionInformation_t AerialUEsubscriptionInformation; + Subscription_Based_UE_DifferentiationInfo_t Subscription_Based_UE_DifferentiationInfo; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextResponse_IEs_t; +typedef struct RetrieveUEContextFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RetrieveUEContextFailure_IEs__value { + RetrieveUEContextFailure_IEs__value_PR present; + union RetrieveUEContextFailure_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextFailure_IEs_t; +typedef struct SgNBAdditionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBAdditionRequest_IEs__value { + SgNBAdditionRequest_IEs__value_PR present; + union SgNBAdditionRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + NRUESecurityCapabilities_t NRUESecurityCapabilities; + SgNBSecurityKey_t SgNBSecurityKey; + UEAggregateMaximumBitRate_t UEAggregateMaximumBitRate; + PLMN_Identity_t PLMN_Identity; + HandoverRestrictionList_t HandoverRestrictionList; + E_RABs_ToBeAdded_SgNBAddReqList_t E_RABs_ToBeAdded_SgNBAddReqList; + MeNBtoSgNBContainer_t MeNBtoSgNBContainer; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + ExpectedUEBehaviour_t ExpectedUEBehaviour; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SplitSRBs_t SplitSRBs; + MeNBResourceCoordinationInformation_t MeNBResourceCoordinationInformation; + SGNB_Addition_Trigger_Ind_t SGNB_Addition_Trigger_Ind; + SubscriberProfileIDforRFP_t SubscriberProfileIDforRFP; + ECGI_t ECGI; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequest_IEs_t; +typedef struct SgNBAdditionRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBAdditionRequestAcknowledge_IEs__value { + SgNBAdditionRequestAcknowledge_IEs__value_PR present; + union SgNBAdditionRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; + E_RAB_List_t E_RAB_List; + SgNBtoMeNBContainer_t SgNBtoMeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SplitSRBs_t SplitSRBs; + SgNBResourceCoordinationInformation_t SgNBResourceCoordinationInformation; + RRC_Config_Ind_t RRC_Config_Ind; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequestAcknowledge_IEs_t; +typedef struct SgNBAdditionRequestReject_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBAdditionRequestReject_IEs__value { + SgNBAdditionRequestReject_IEs__value_PR present; + union SgNBAdditionRequestReject_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequestReject_IEs_t; +typedef struct SgNBReconfigurationComplete_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReconfigurationComplete_IEs__value { + SgNBReconfigurationComplete_IEs__value_PR present; + union SgNBReconfigurationComplete_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + ResponseInformationSgNBReconfComp_t ResponseInformationSgNBReconfComp; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReconfigurationComplete_IEs_t; +typedef struct SgNBModificationRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationRequest_IEs__value { + SgNBModificationRequest_IEs__value_PR present; + union SgNBModificationRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + PLMN_Identity_t PLMN_Identity; + HandoverRestrictionList_t HandoverRestrictionList; + SCGConfigurationQuery_t SCGConfigurationQuery; + UE_ContextInformation_SgNBModReq_t UE_ContextInformation_SgNBModReq; + MeNBtoSgNBContainer_t MeNBtoSgNBContainer; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + MeNBResourceCoordinationInformation_t MeNBResourceCoordinationInformation; + SplitSRBs_t SplitSRBs; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequest_IEs_t; +typedef struct SgNBModificationRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationRequestAcknowledge_IEs__value { + SgNBModificationRequestAcknowledge_IEs__value_PR present; + union SgNBModificationRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_Admitted_ToBeAdded_SgNBModAckList_t E_RABs_Admitted_ToBeAdded_SgNBModAckList; + E_RABs_Admitted_ToBeModified_SgNBModAckList_t E_RABs_Admitted_ToBeModified_SgNBModAckList; + E_RABs_Admitted_ToBeReleased_SgNBModAckList_t E_RABs_Admitted_ToBeReleased_SgNBModAckList; + E_RAB_List_t E_RAB_List; + SgNBtoMeNBContainer_t SgNBtoMeNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + SgNBResourceCoordinationInformation_t SgNBResourceCoordinationInformation; + SplitSRBs_t SplitSRBs; + RRC_Config_Ind_t RRC_Config_Ind; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequestAcknowledge_IEs_t; +typedef struct SgNBModificationRequestReject_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationRequestReject_IEs__value { + SgNBModificationRequestReject_IEs__value_PR present; + union SgNBModificationRequestReject_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequestReject_IEs_t; +typedef struct SgNBModificationRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationRequired_IEs__value { + SgNBModificationRequired_IEs__value_PR present; + union SgNBModificationRequired_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + PDCPChangeIndication_t PDCPChangeIndication; + E_RABs_ToBeReleased_SgNBModReqdList_t E_RABs_ToBeReleased_SgNBModReqdList; + SgNBtoMeNBContainer_t SgNBtoMeNBContainer; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + E_RABs_ToBeModified_SgNBModReqdList_t E_RABs_ToBeModified_SgNBModReqdList; + SgNBResourceCoordinationInformation_t SgNBResourceCoordinationInformation; + RRC_Config_Ind_t RRC_Config_Ind; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequired_IEs_t; +typedef struct SgNBModificationConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationConfirm_IEs__value { + SgNBModificationConfirm_IEs__value_PR present; + union SgNBModificationConfirm_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_AdmittedToBeModified_SgNBModConfList_t E_RABs_AdmittedToBeModified_SgNBModConfList; + MeNBtoSgNBContainer_t MeNBtoSgNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + MeNBResourceCoordinationInformation_t MeNBResourceCoordinationInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationConfirm_IEs_t; +typedef struct SgNBModificationRefuse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBModificationRefuse_IEs__value { + SgNBModificationRefuse_IEs__value_PR present; + union SgNBModificationRefuse_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + MeNBtoSgNBContainer_t MeNBtoSgNBContainer; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRefuse_IEs_t; +typedef struct SgNBReleaseRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReleaseRequest_IEs__value { + SgNBReleaseRequest_IEs__value_PR present; + union SgNBReleaseRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + E_RABs_ToBeReleased_SgNBRelReqList_t E_RABs_ToBeReleased_SgNBRelReqList; + UE_ContextKeptIndicator_t UE_ContextKeptIndicator; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + MeNBtoSgNBContainer_t MeNBtoSgNBContainer; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequest_IEs_t; +typedef struct SgNBReleaseRequestAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReleaseRequestAcknowledge_IEs__value { + SgNBReleaseRequestAcknowledge_IEs__value_PR present; + union SgNBReleaseRequestAcknowledge_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_t E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequestAcknowledge_IEs_t; +typedef struct SgNBReleaseRequestReject_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReleaseRequestReject_IEs__value { + SgNBReleaseRequestReject_IEs__value_PR present; + union SgNBReleaseRequestReject_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequestReject_IEs_t; +typedef struct SgNBReleaseRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReleaseRequired_IEs__value { + SgNBReleaseRequired_IEs__value_PR present; + union SgNBReleaseRequired_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + E_RABs_ToBeReleased_SgNBRelReqdList_t E_RABs_ToBeReleased_SgNBRelReqdList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequired_IEs_t; +typedef struct SgNBReleaseConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBReleaseConfirm_IEs__value { + SgNBReleaseConfirm_IEs__value_PR present; + union SgNBReleaseConfirm_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_ToBeReleased_SgNBRelConfList_t E_RABs_ToBeReleased_SgNBRelConfList; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseConfirm_IEs_t; +typedef struct SgNBCounterCheckRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBCounterCheckRequest_IEs__value { + SgNBCounterCheckRequest_IEs__value_PR present; + union SgNBCounterCheckRequest_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_SubjectToSgNBCounterCheck_List_t E_RABs_SubjectToSgNBCounterCheck_List; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBCounterCheckRequest_IEs_t; +typedef struct SgNBChangeRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBChangeRequired_IEs__value { + SgNBChangeRequired_IEs__value_PR present; + union SgNBChangeRequired_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + GlobalGNB_ID_t GlobalGNB_ID; + Cause_t Cause; + SgNBtoMeNBContainer_t SgNBtoMeNBContainer; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeRequired_IEs_t; +typedef struct SgNBChangeConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBChangeConfirm_IEs__value { + SgNBChangeConfirm_IEs__value_PR present; + union SgNBChangeConfirm_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + E_RABs_ToBeReleased_SgNBChaConfList_t E_RABs_ToBeReleased_SgNBChaConfList; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeConfirm_IEs_t; +typedef struct RRCTransfer_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RRCTransfer_IEs__value { + RRCTransfer_IEs__value_PR present; + union RRCTransfer_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + SplitSRB_t SplitSRB; + UENRMeasurement_t UENRMeasurement; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCTransfer_IEs_t; +typedef struct SgNBChangeRefuse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBChangeRefuse_IEs__value { + SgNBChangeRefuse_IEs__value_PR present; + union SgNBChangeRefuse_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeRefuse_IEs_t; +typedef struct ENDCX2SetupRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2SetupRequest_IEs__value { + ENDCX2SetupRequest_IEs__value_PR present; + union ENDCX2SetupRequest_IEs__value_u { + InitiatingNodeType_EndcX2Setup_t InitiatingNodeType_EndcX2Setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupRequest_IEs_t; +typedef struct ENB_ENDCX2SetupReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCX2SetupReqIEs__value { + ENB_ENDCX2SetupReqIEs__value_PR present; + union ENB_ENDCX2SetupReqIEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + ServedEUTRAcellsENDCX2ManagementList_t ServedEUTRAcellsENDCX2ManagementList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCX2SetupReqIEs_t; +typedef struct En_gNB_ENDCX2SetupReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCX2SetupReqIEs__value { + En_gNB_ENDCX2SetupReqIEs__value_PR present; + union En_gNB_ENDCX2SetupReqIEs__value_u { + GlobalGNB_ID_t GlobalGNB_ID; + ServedNRcellsENDCX2ManagementList_t ServedNRcellsENDCX2ManagementList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCX2SetupReqIEs_t; +typedef struct ENDCX2SetupResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2SetupResponse_IEs__value { + ENDCX2SetupResponse_IEs__value_PR present; + union ENDCX2SetupResponse_IEs__value_u { + RespondingNodeType_EndcX2Setup_t RespondingNodeType_EndcX2Setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupResponse_IEs_t; +typedef struct ENB_ENDCX2SetupReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCX2SetupReqAckIEs__value { + ENB_ENDCX2SetupReqAckIEs__value_PR present; + union ENB_ENDCX2SetupReqAckIEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + ServedEUTRAcellsENDCX2ManagementList_t ServedEUTRAcellsENDCX2ManagementList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCX2SetupReqAckIEs_t; +typedef struct En_gNB_ENDCX2SetupReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCX2SetupReqAckIEs__value { + En_gNB_ENDCX2SetupReqAckIEs__value_PR present; + union En_gNB_ENDCX2SetupReqAckIEs__value_u { + GlobalGNB_ID_t GlobalGNB_ID; + ServedNRcellsENDCX2ManagementList_t ServedNRcellsENDCX2ManagementList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCX2SetupReqAckIEs_t; +typedef struct ENDCX2SetupFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2SetupFailure_IEs__value { + ENDCX2SetupFailure_IEs__value_PR present; + union ENDCX2SetupFailure_IEs__value_u { + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + TimeToWait_t TimeToWait; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2SetupFailure_IEs_t; +typedef struct ENDCConfigurationUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCConfigurationUpdate_IEs__value { + ENDCConfigurationUpdate_IEs__value_PR present; + union ENDCConfigurationUpdate_IEs__value_u { + InitiatingNodeType_EndcConfigUpdate_t InitiatingNodeType_EndcConfigUpdate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdate_IEs_t; +typedef struct ENB_ENDCConfigUpdateIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCConfigUpdateIEs__value { + ENB_ENDCConfigUpdateIEs__value_PR present; + union ENB_ENDCConfigUpdateIEs__value_u { + CellAssistanceInformation_t CellAssistanceInformation; + ServedEUTRAcellsENDCX2ManagementList_t ServedEUTRAcellsENDCX2ManagementList; + ServedEUTRAcellsToModifyListENDCConfUpd_t ServedEUTRAcellsToModifyListENDCConfUpd; + ServedEUTRAcellsToDeleteListENDCConfUpd_t ServedEUTRAcellsToDeleteListENDCConfUpd; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCConfigUpdateIEs_t; +typedef struct En_gNB_ENDCConfigUpdateIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCConfigUpdateIEs__value { + En_gNB_ENDCConfigUpdateIEs__value_PR present; + union En_gNB_ENDCConfigUpdateIEs__value_u { + ServedNRcellsENDCX2ManagementList_t ServedNRcellsENDCX2ManagementList; + ServedNRcellsToModifyENDCConfUpdList_t ServedNRcellsToModifyENDCConfUpdList; + ServedNRcellsToDeleteENDCConfUpdList_t ServedNRcellsToDeleteENDCConfUpdList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCConfigUpdateIEs_t; +typedef struct ENDCConfigurationUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCConfigurationUpdateAcknowledge_IEs__value { + ENDCConfigurationUpdateAcknowledge_IEs__value_PR present; + union ENDCConfigurationUpdateAcknowledge_IEs__value_u { + RespondingNodeType_EndcConfigUpdate_t RespondingNodeType_EndcConfigUpdate; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdateAcknowledge_IEs_t; +typedef struct ENB_ENDCConfigUpdateAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCConfigUpdateAckIEs__value { + ENB_ENDCConfigUpdateAckIEs__value_PR present; + union ENB_ENDCConfigUpdateAckIEs__value_u { + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCConfigUpdateAckIEs_t; +typedef struct En_gNB_ENDCConfigUpdateAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCConfigUpdateAckIEs__value { + En_gNB_ENDCConfigUpdateAckIEs__value_PR present; + union En_gNB_ENDCConfigUpdateAckIEs__value_u { + ServedNRcellsENDCX2ManagementList_t ServedNRcellsENDCX2ManagementList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCConfigUpdateAckIEs_t; +typedef struct ENDCConfigurationUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCConfigurationUpdateFailure_IEs__value { + ENDCConfigurationUpdateFailure_IEs__value_PR present; + union ENDCConfigurationUpdateFailure_IEs__value_u { + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + TimeToWait_t TimeToWait; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCConfigurationUpdateFailure_IEs_t; +typedef struct ENDCCellActivationRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCCellActivationRequest_IEs__value { + ENDCCellActivationRequest_IEs__value_PR present; + union ENDCCellActivationRequest_IEs__value_u { + ServedNRCellsToActivate_t ServedNRCellsToActivate; + ActivationID_t ActivationID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationRequest_IEs_t; +typedef struct ENDCCellActivationResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCCellActivationResponse_IEs__value { + ENDCCellActivationResponse_IEs__value_PR present; + union ENDCCellActivationResponse_IEs__value_u { + ActivatedNRCellList_t ActivatedNRCellList; + ActivationID_t ActivationID; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationResponse_IEs_t; +typedef struct ENDCCellActivationFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCCellActivationFailure_IEs__value { + ENDCCellActivationFailure_IEs__value_PR present; + union ENDCCellActivationFailure_IEs__value_u { + ActivationID_t ActivationID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCCellActivationFailure_IEs_t; +typedef struct SecondaryRATDataUsageReport_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SecondaryRATDataUsageReport_IEs__value { + SecondaryRATDataUsageReport_IEs__value_PR present; + union SecondaryRATDataUsageReport_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + SecondaryRATUsageReportList_t SecondaryRATUsageReportList; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATDataUsageReport_IEs_t; +typedef struct SgNBActivityNotification_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SgNBActivityNotification_IEs__value { + SgNBActivityNotification_IEs__value_PR present; + union SgNBActivityNotification_IEs__value_u { + UE_X2AP_ID_t UE_X2AP_ID; + SgNB_UE_X2AP_ID_t SgNB_UE_X2AP_ID; + UserPlaneTrafficActivityReport_t UserPlaneTrafficActivityReport; + ERABActivityNotifyItemList_t ERABActivityNotifyItemList; + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBActivityNotification_IEs_t; +typedef struct ENDCPartialResetRequired_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCPartialResetRequired_IEs__value { + ENDCPartialResetRequired_IEs__value_PR present; + union ENDCPartialResetRequired_IEs__value_u { + UEsToBeResetList_t UEsToBeResetList; + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCPartialResetRequired_IEs_t; +typedef struct ENDCPartialResetConfirm_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCPartialResetConfirm_IEs__value { + ENDCPartialResetConfirm_IEs__value_PR present; + union ENDCPartialResetConfirm_IEs__value_u { + UEsToBeResetList_t UEsToBeResetList; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCPartialResetConfirm_IEs_t; +typedef struct EUTRANRCellResourceCoordinationRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct EUTRANRCellResourceCoordinationRequest_IEs__value { + EUTRANRCellResourceCoordinationRequest_IEs__value_PR present; + union EUTRANRCellResourceCoordinationRequest_IEs__value_u { + InitiatingNodeType_EutranrCellResourceCoordination_t InitiatingNodeType_EutranrCellResourceCoordination; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRANRCellResourceCoordinationRequest_IEs_t; +typedef struct ENB_EUTRA_NRCellResourceCoordinationReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_EUTRA_NRCellResourceCoordinationReqIEs__value { + ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR present; + union ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_u { + DataTrafficResourceIndication_t DataTrafficResourceIndication; + SpectrumSharingGroupID_t SpectrumSharingGroupID; + ListofEUTRACellsinEUTRACoordinationReq_t ListofEUTRACellsinEUTRACoordinationReq; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_EUTRA_NRCellResourceCoordinationReqIEs_t; +typedef struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value { + En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR present; + union En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_u { + DataTrafficResourceIndication_t DataTrafficResourceIndication; + ListofEUTRACellsinNRCoordinationReq_t ListofEUTRACellsinNRCoordinationReq; + SpectrumSharingGroupID_t SpectrumSharingGroupID; + ListofNRCellsinNRCoordinationReq_t ListofNRCellsinNRCoordinationReq; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_t; +typedef struct EUTRANRCellResourceCoordinationResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct EUTRANRCellResourceCoordinationResponse_IEs__value { + EUTRANRCellResourceCoordinationResponse_IEs__value_PR present; + union EUTRANRCellResourceCoordinationResponse_IEs__value_u { + RespondingNodeType_EutranrCellResourceCoordination_t RespondingNodeType_EutranrCellResourceCoordination; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRANRCellResourceCoordinationResponse_IEs_t; +typedef struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value { + ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR present; + union ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_u { + DataTrafficResourceIndication_t DataTrafficResourceIndication; + SpectrumSharingGroupID_t SpectrumSharingGroupID; + ListofEUTRACellsinEUTRACoordinationResp_t ListofEUTRACellsinEUTRACoordinationResp; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_t; +typedef struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value { + En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR present; + union En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_u { + DataTrafficResourceIndication_t DataTrafficResourceIndication; + SpectrumSharingGroupID_t SpectrumSharingGroupID; + ListofNRCellsinNRCoordinationResp_t ListofNRCellsinNRCoordinationResp; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_t; +typedef struct ENDCX2RemovalRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2RemovalRequest_IEs__value { + ENDCX2RemovalRequest_IEs__value_PR present; + union ENDCX2RemovalRequest_IEs__value_u { + InitiatingNodeType_EndcX2Removal_t InitiatingNodeType_EndcX2Removal; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalRequest_IEs_t; +typedef struct ENB_ENDCX2RemovalReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCX2RemovalReqIEs__value { + ENB_ENDCX2RemovalReqIEs__value_PR present; + union ENB_ENDCX2RemovalReqIEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCX2RemovalReqIEs_t; +typedef struct En_gNB_ENDCX2RemovalReqIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCX2RemovalReqIEs__value { + En_gNB_ENDCX2RemovalReqIEs__value_PR present; + union En_gNB_ENDCX2RemovalReqIEs__value_u { + GlobalGNB_ID_t GlobalGNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCX2RemovalReqIEs_t; +typedef struct ENDCX2RemovalResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2RemovalResponse_IEs__value { + ENDCX2RemovalResponse_IEs__value_PR present; + union ENDCX2RemovalResponse_IEs__value_u { + RespondingNodeType_EndcX2Removal_t RespondingNodeType_EndcX2Removal; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalResponse_IEs_t; +typedef struct ENB_ENDCX2RemovalReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENB_ENDCX2RemovalReqAckIEs__value { + ENB_ENDCX2RemovalReqAckIEs__value_PR present; + union ENB_ENDCX2RemovalReqAckIEs__value_u { + GlobalENB_ID_t GlobalENB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ENDCX2RemovalReqAckIEs_t; +typedef struct En_gNB_ENDCX2RemovalReqAckIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct En_gNB_ENDCX2RemovalReqAckIEs__value { + En_gNB_ENDCX2RemovalReqAckIEs__value_PR present; + union En_gNB_ENDCX2RemovalReqAckIEs__value_u { + GlobalGNB_ID_t GlobalGNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} En_gNB_ENDCX2RemovalReqAckIEs_t; +typedef struct ENDCX2RemovalFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ENDCX2RemovalFailure_IEs__value { + ENDCX2RemovalFailure_IEs__value_PR present; + union ENDCX2RemovalFailure_IEs__value_u { + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENDCX2RemovalFailure_IEs_t; +typedef struct DataForwardingAddressIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct DataForwardingAddressIndication_IEs__value { + DataForwardingAddressIndication_IEs__value_PR present; + union DataForwardingAddressIndication_IEs__value_u { + UE_X2AP_ID_Extension_t UE_X2AP_ID_Extension; + UE_X2AP_ID_t UE_X2AP_ID; + E_RABs_DataForwardingAddress_List_t E_RABs_DataForwardingAddress_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DataForwardingAddressIndication_IEs_t; +typedef struct GNBStatusIndicationIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct GNBStatusIndicationIEs__value { + GNBStatusIndicationIEs__value_PR present; + union GNBStatusIndicationIEs__value_u { + GNBOverloadInformation_t GNBOverloadInformation; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNBStatusIndicationIEs_t; +typedef struct E_RAB_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RAB_ItemIEs__value { + E_RAB_ItemIEs__value_PR present; + union E_RAB_ItemIEs__value_u { + E_RAB_Item_t E_RAB_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RAB_ItemIEs_t; +typedef struct E_RABUsageReport_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E_RABUsageReport_ItemIEs__value { + E_RABUsageReport_ItemIEs__value_PR present; + union E_RABUsageReport_ItemIEs__value_u { + E_RABUsageReport_Item_t E_RABUsageReport_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_RABUsageReport_ItemIEs_t; +typedef struct SecondaryRATUsageReport_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct SecondaryRATUsageReport_ItemIEs__value { + SecondaryRATUsageReport_ItemIEs__value_PR present; + union SecondaryRATUsageReport_ItemIEs__value_u { + SecondaryRATUsageReport_Item_t SecondaryRATUsageReport_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATUsageReport_ItemIEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetup_ItemIEs_specs_25; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetup_ItemIEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ItemIEs_specs_29; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ItemIEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToStatusTransfer_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_33; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToStatusTransfer_ItemIEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellInformation_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellInformation_ItemIEs_specs_37; +extern asn_TYPE_member_t asn_MBR_CellInformation_ItemIEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellToReport_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellToReport_ItemIEs_specs_41; +extern asn_TYPE_member_t asn_MBR_CellToReport_ItemIEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInitiationResult_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementInitiationResult_ItemIEs_specs_45; +extern asn_TYPE_member_t asn_MBR_MeasurementInitiationResult_ItemIEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementFailureCause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementFailureCause_ItemIEs_specs_49; +extern asn_TYPE_member_t asn_MBR_MeasurementFailureCause_ItemIEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_CompleteFailureCauseInformation_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_53; +extern asn_TYPE_member_t asn_MBR_CompleteFailureCauseInformation_ItemIEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellMeasurementResult_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellMeasurementResult_ItemIEs_specs_57; +extern asn_TYPE_member_t asn_MBR_CellMeasurementResult_ItemIEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ItemIEs_specs_61; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ItemIEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_65; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ItemIEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_ModReqItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_ModReqItemIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_ModReqItemIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_ModReqItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_ModReqItemIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_ModReqItemIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqItemIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqItemIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_ModAckItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_ModAckItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItemIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_ModAckItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_89; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_ModReqdItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_ModReqdItemIEs_specs_93; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_ModReqdItemIEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelReqItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelReqItemIEs_specs_97; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelReqItemIEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_RelConfItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_RelConfItemIEs_specs_101; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_RelConfItemIEs_101[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToCounterCheckItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToCounterCheckItemIEs_specs_105; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToCounterCheckItemIEs_105[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeSetupRetrieve_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_109; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeSetupRetrieve_ItemIEs_109[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_113; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_113[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_117; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_117[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_121; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_121[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReq_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_125; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemIEs_125[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReq_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_129; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_129[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_133; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_133[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_137; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_137[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_141; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_141[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_145; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_145[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeModified_SgNBModReqd_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_149; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_149[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_153; +extern asn_TYPE_member_t asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_153[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_157; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_157[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_161; +extern asn_TYPE_member_t asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_161[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_165; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_165[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_169; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_169[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_SubjectToSgNBCounterCheck_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_173; +extern asn_TYPE_member_t asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_173[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_177; +extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_177[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABs_DataForwardingAddress_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_DataForwardingAddress_ItemIEs_specs_181; +extern asn_TYPE_member_t asn_MBR_E_RABs_DataForwardingAddress_ItemIEs_181[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_185; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_185[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_189; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_189[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_193; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_193[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_197; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_197[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_201; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_201[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_205; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_205[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_209; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_209[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_213; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_213[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_217; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_217[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_221; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_221[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_225; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_225[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_229; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_229[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_233; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_233[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_237; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_237[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverRequest_IEs_specs_241; +extern asn_TYPE_member_t asn_MBR_HandoverRequest_IEs_241[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverRequestAcknowledge_IEs_specs_245; +extern asn_TYPE_member_t asn_MBR_HandoverRequestAcknowledge_IEs_245[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverPreparationFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationFailure_IEs_specs_249; +extern asn_TYPE_member_t asn_MBR_HandoverPreparationFailure_IEs_249[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverReport_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverReport_IEs_specs_253; +extern asn_TYPE_member_t asn_MBR_HandoverReport_IEs_253[3]; +extern asn_TYPE_descriptor_t asn_DEF_SNStatusTransfer_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SNStatusTransfer_IEs_specs_257; +extern asn_TYPE_member_t asn_MBR_SNStatusTransfer_IEs_257[3]; +extern asn_TYPE_descriptor_t asn_DEF_UEContextRelease_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_UEContextRelease_IEs_specs_261; +extern asn_TYPE_member_t asn_MBR_UEContextRelease_IEs_261[3]; +extern asn_TYPE_descriptor_t asn_DEF_HandoverCancel_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_HandoverCancel_IEs_specs_265; +extern asn_TYPE_member_t asn_MBR_HandoverCancel_IEs_265[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_269; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_269[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_IEs_specs_273; +extern asn_TYPE_member_t asn_MBR_ResetRequest_IEs_273[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_IEs_specs_277; +extern asn_TYPE_member_t asn_MBR_ResetResponse_IEs_277[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2SetupRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupRequest_IEs_specs_281; +extern asn_TYPE_member_t asn_MBR_X2SetupRequest_IEs_281[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2SetupResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupResponse_IEs_specs_285; +extern asn_TYPE_member_t asn_MBR_X2SetupResponse_IEs_285[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2SetupFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupFailure_IEs_specs_289; +extern asn_TYPE_member_t asn_MBR_X2SetupFailure_IEs_289[3]; +extern asn_TYPE_descriptor_t asn_DEF_LoadInformation_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_LoadInformation_IEs_specs_293; +extern asn_TYPE_member_t asn_MBR_LoadInformation_IEs_293[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdate_IEs_specs_297; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdate_IEs_297[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateAcknowledge_IEs_specs_301; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateAcknowledge_IEs_301[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENBConfigurationUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENBConfigurationUpdateFailure_IEs_specs_305; +extern asn_TYPE_member_t asn_MBR_ENBConfigurationUpdateFailure_IEs_305[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusRequest_IEs_specs_309; +extern asn_TYPE_member_t asn_MBR_ResourceStatusRequest_IEs_309[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusResponse_IEs_specs_313; +extern asn_TYPE_member_t asn_MBR_ResourceStatusResponse_IEs_313[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusFailure_IEs_specs_317; +extern asn_TYPE_member_t asn_MBR_ResourceStatusFailure_IEs_317[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusUpdate_IEs_specs_321; +extern asn_TYPE_member_t asn_MBR_ResourceStatusUpdate_IEs_321[3]; +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeRequest_IEs_specs_325; +extern asn_TYPE_member_t asn_MBR_MobilityChangeRequest_IEs_325[3]; +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeAcknowledge_IEs_specs_329; +extern asn_TYPE_member_t asn_MBR_MobilityChangeAcknowledge_IEs_329[3]; +extern asn_TYPE_descriptor_t asn_DEF_MobilityChangeFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_MobilityChangeFailure_IEs_specs_333; +extern asn_TYPE_member_t asn_MBR_MobilityChangeFailure_IEs_333[3]; +extern asn_TYPE_descriptor_t asn_DEF_RLFIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RLFIndication_IEs_specs_337; +extern asn_TYPE_member_t asn_MBR_RLFIndication_IEs_337[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellActivationRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellActivationRequest_IEs_specs_341; +extern asn_TYPE_member_t asn_MBR_CellActivationRequest_IEs_341[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellActivationResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellActivationResponse_IEs_specs_345; +extern asn_TYPE_member_t asn_MBR_CellActivationResponse_IEs_345[3]; +extern asn_TYPE_descriptor_t asn_DEF_CellActivationFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_CellActivationFailure_IEs_specs_349; +extern asn_TYPE_member_t asn_MBR_CellActivationFailure_IEs_349[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2Release_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2Release_IEs_specs_353; +extern asn_TYPE_member_t asn_MBR_X2Release_IEs_353[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2APMessageTransfer_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2APMessageTransfer_IEs_specs_357; +extern asn_TYPE_member_t asn_MBR_X2APMessageTransfer_IEs_357[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequest_IEs_specs_361; +extern asn_TYPE_member_t asn_MBR_SeNBAdditionRequest_IEs_361[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestAcknowledge_IEs_specs_365; +extern asn_TYPE_member_t asn_MBR_SeNBAdditionRequestAcknowledge_IEs_365[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestReject_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestReject_IEs_specs_369; +extern asn_TYPE_member_t asn_MBR_SeNBAdditionRequestReject_IEs_369[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBReconfigurationComplete_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBReconfigurationComplete_IEs_specs_373; +extern asn_TYPE_member_t asn_MBR_SeNBReconfigurationComplete_IEs_373[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequest_IEs_specs_377; +extern asn_TYPE_member_t asn_MBR_SeNBModificationRequest_IEs_377[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestAcknowledge_IEs_specs_381; +extern asn_TYPE_member_t asn_MBR_SeNBModificationRequestAcknowledge_IEs_381[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestReject_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestReject_IEs_specs_385; +extern asn_TYPE_member_t asn_MBR_SeNBModificationRequestReject_IEs_385[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequired_IEs_specs_389; +extern asn_TYPE_member_t asn_MBR_SeNBModificationRequired_IEs_389[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationConfirm_IEs_specs_393; +extern asn_TYPE_member_t asn_MBR_SeNBModificationConfirm_IEs_393[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRefuse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRefuse_IEs_specs_397; +extern asn_TYPE_member_t asn_MBR_SeNBModificationRefuse_IEs_397[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequest_IEs_specs_401; +extern asn_TYPE_member_t asn_MBR_SeNBReleaseRequest_IEs_401[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequired_IEs_specs_405; +extern asn_TYPE_member_t asn_MBR_SeNBReleaseRequired_IEs_405[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseConfirm_IEs_specs_409; +extern asn_TYPE_member_t asn_MBR_SeNBReleaseConfirm_IEs_409[3]; +extern asn_TYPE_descriptor_t asn_DEF_SeNBCounterCheckRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SeNBCounterCheckRequest_IEs_specs_413; +extern asn_TYPE_member_t asn_MBR_SeNBCounterCheckRequest_IEs_413[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2RemovalRequest_IEs_specs_417; +extern asn_TYPE_member_t asn_MBR_X2RemovalRequest_IEs_417[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2RemovalResponse_IEs_specs_421; +extern asn_TYPE_member_t asn_MBR_X2RemovalResponse_IEs_421[3]; +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_X2RemovalFailure_IEs_specs_425; +extern asn_TYPE_member_t asn_MBR_X2RemovalFailure_IEs_425[3]; +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextRequest_IEs_specs_429; +extern asn_TYPE_member_t asn_MBR_RetrieveUEContextRequest_IEs_429[3]; +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextResponse_IEs_specs_433; +extern asn_TYPE_member_t asn_MBR_RetrieveUEContextResponse_IEs_433[3]; +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextFailure_IEs_specs_437; +extern asn_TYPE_member_t asn_MBR_RetrieveUEContextFailure_IEs_437[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequest_IEs_specs_441; +extern asn_TYPE_member_t asn_MBR_SgNBAdditionRequest_IEs_441[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestAcknowledge_IEs_specs_445; +extern asn_TYPE_member_t asn_MBR_SgNBAdditionRequestAcknowledge_IEs_445[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestReject_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestReject_IEs_specs_449; +extern asn_TYPE_member_t asn_MBR_SgNBAdditionRequestReject_IEs_449[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReconfigurationComplete_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReconfigurationComplete_IEs_specs_453; +extern asn_TYPE_member_t asn_MBR_SgNBReconfigurationComplete_IEs_453[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequest_IEs_specs_457; +extern asn_TYPE_member_t asn_MBR_SgNBModificationRequest_IEs_457[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestAcknowledge_IEs_specs_461; +extern asn_TYPE_member_t asn_MBR_SgNBModificationRequestAcknowledge_IEs_461[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestReject_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestReject_IEs_specs_465; +extern asn_TYPE_member_t asn_MBR_SgNBModificationRequestReject_IEs_465[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequired_IEs_specs_469; +extern asn_TYPE_member_t asn_MBR_SgNBModificationRequired_IEs_469[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationConfirm_IEs_specs_473; +extern asn_TYPE_member_t asn_MBR_SgNBModificationConfirm_IEs_473[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRefuse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRefuse_IEs_specs_477; +extern asn_TYPE_member_t asn_MBR_SgNBModificationRefuse_IEs_477[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequest_IEs_specs_481; +extern asn_TYPE_member_t asn_MBR_SgNBReleaseRequest_IEs_481[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestAcknowledge_IEs_specs_485; +extern asn_TYPE_member_t asn_MBR_SgNBReleaseRequestAcknowledge_IEs_485[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestReject_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestReject_IEs_specs_489; +extern asn_TYPE_member_t asn_MBR_SgNBReleaseRequestReject_IEs_489[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequired_IEs_specs_493; +extern asn_TYPE_member_t asn_MBR_SgNBReleaseRequired_IEs_493[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseConfirm_IEs_specs_497; +extern asn_TYPE_member_t asn_MBR_SgNBReleaseConfirm_IEs_497[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBCounterCheckRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBCounterCheckRequest_IEs_specs_501; +extern asn_TYPE_member_t asn_MBR_SgNBCounterCheckRequest_IEs_501[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRequired_IEs_specs_505; +extern asn_TYPE_member_t asn_MBR_SgNBChangeRequired_IEs_505[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeConfirm_IEs_specs_509; +extern asn_TYPE_member_t asn_MBR_SgNBChangeConfirm_IEs_509[3]; +extern asn_TYPE_descriptor_t asn_DEF_RRCTransfer_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RRCTransfer_IEs_specs_513; +extern asn_TYPE_member_t asn_MBR_RRCTransfer_IEs_513[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeRefuse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRefuse_IEs_specs_517; +extern asn_TYPE_member_t asn_MBR_SgNBChangeRefuse_IEs_517[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupRequest_IEs_specs_521; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupRequest_IEs_521[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2SetupReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2SetupReqIEs_specs_525; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCX2SetupReqIEs_525[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2SetupReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2SetupReqIEs_specs_529; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2SetupReqIEs_529[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupResponse_IEs_specs_533; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupResponse_IEs_533[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2SetupReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2SetupReqAckIEs_specs_537; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCX2SetupReqAckIEs_537[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2SetupReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2SetupReqAckIEs_specs_541; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2SetupReqAckIEs_541[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2SetupFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2SetupFailure_IEs_specs_545; +extern asn_TYPE_member_t asn_MBR_ENDCX2SetupFailure_IEs_545[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdate_IEs_specs_549; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdate_IEs_549[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCConfigUpdateIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCConfigUpdateIEs_specs_553; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCConfigUpdateIEs_553[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCConfigUpdateIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCConfigUpdateIEs_specs_557; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCConfigUpdateIEs_557[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateAcknowledge_IEs_specs_561; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateAcknowledge_IEs_561[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCConfigUpdateAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCConfigUpdateAckIEs_specs_565; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCConfigUpdateAckIEs_565[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCConfigUpdateAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCConfigUpdateAckIEs_specs_569; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCConfigUpdateAckIEs_569[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCConfigurationUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCConfigurationUpdateFailure_IEs_specs_573; +extern asn_TYPE_member_t asn_MBR_ENDCConfigurationUpdateFailure_IEs_573[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationRequest_IEs_specs_577; +extern asn_TYPE_member_t asn_MBR_ENDCCellActivationRequest_IEs_577[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationResponse_IEs_specs_581; +extern asn_TYPE_member_t asn_MBR_ENDCCellActivationResponse_IEs_581[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCCellActivationFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCCellActivationFailure_IEs_specs_585; +extern asn_TYPE_member_t asn_MBR_ENDCCellActivationFailure_IEs_585[3]; +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATDataUsageReport_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATDataUsageReport_IEs_specs_589; +extern asn_TYPE_member_t asn_MBR_SecondaryRATDataUsageReport_IEs_589[3]; +extern asn_TYPE_descriptor_t asn_DEF_SgNBActivityNotification_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBActivityNotification_IEs_specs_593; +extern asn_TYPE_member_t asn_MBR_SgNBActivityNotification_IEs_593[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetRequired_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetRequired_IEs_specs_597; +extern asn_TYPE_member_t asn_MBR_ENDCPartialResetRequired_IEs_597[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCPartialResetConfirm_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCPartialResetConfirm_IEs_specs_601; +extern asn_TYPE_member_t asn_MBR_ENDCPartialResetConfirm_IEs_601[3]; +extern asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationRequest_IEs_specs_605; +extern asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationRequest_IEs_605[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_609; +extern asn_TYPE_member_t asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqIEs_609[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_613; +extern asn_TYPE_member_t asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_613[3]; +extern asn_TYPE_descriptor_t asn_DEF_EUTRANRCellResourceCoordinationResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_EUTRANRCellResourceCoordinationResponse_IEs_specs_617; +extern asn_TYPE_member_t asn_MBR_EUTRANRCellResourceCoordinationResponse_IEs_617[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_621; +extern asn_TYPE_member_t asn_MBR_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_621[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_625; +extern asn_TYPE_member_t asn_MBR_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_625[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalRequest_IEs_specs_629; +extern asn_TYPE_member_t asn_MBR_ENDCX2RemovalRequest_IEs_629[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2RemovalReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2RemovalReqIEs_specs_633; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCX2RemovalReqIEs_633[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2RemovalReqIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2RemovalReqIEs_specs_637; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2RemovalReqIEs_637[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalResponse_IEs_specs_641; +extern asn_TYPE_member_t asn_MBR_ENDCX2RemovalResponse_IEs_641[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENB_ENDCX2RemovalReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENB_ENDCX2RemovalReqAckIEs_specs_645; +extern asn_TYPE_member_t asn_MBR_ENB_ENDCX2RemovalReqAckIEs_645[3]; +extern asn_TYPE_descriptor_t asn_DEF_En_gNB_ENDCX2RemovalReqAckIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_En_gNB_ENDCX2RemovalReqAckIEs_specs_649; +extern asn_TYPE_member_t asn_MBR_En_gNB_ENDCX2RemovalReqAckIEs_649[3]; +extern asn_TYPE_descriptor_t asn_DEF_ENDCX2RemovalFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ENDCX2RemovalFailure_IEs_specs_653; +extern asn_TYPE_member_t asn_MBR_ENDCX2RemovalFailure_IEs_653[3]; +extern asn_TYPE_descriptor_t asn_DEF_DataForwardingAddressIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_DataForwardingAddressIndication_IEs_specs_657; +extern asn_TYPE_member_t asn_MBR_DataForwardingAddressIndication_IEs_657[3]; +extern asn_TYPE_descriptor_t asn_DEF_GNBStatusIndicationIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_GNBStatusIndicationIEs_specs_661; +extern asn_TYPE_member_t asn_MBR_GNBStatusIndicationIEs_661[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RAB_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RAB_ItemIEs_specs_665; +extern asn_TYPE_member_t asn_MBR_E_RAB_ItemIEs_665[3]; +extern asn_TYPE_descriptor_t asn_DEF_E_RABUsageReport_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E_RABUsageReport_ItemIEs_specs_669; +extern asn_TYPE_member_t asn_MBR_E_RABUsageReport_ItemIEs_669[3]; +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_ItemIEs_specs_673; +extern asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_ItemIEs_673[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..940c4f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,27 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..05b5e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..f520a84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..c619dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,414 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)60001) +#define ProtocolIE_ID_id_RANfunctionDefinition ((ProtocolIE_ID_t)60002) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)60003) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)60004) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)60005) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)60006) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)60007) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)60008) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)60009) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)60010) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)60011) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)60012) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)60013) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)60014) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)60015) +#define ProtocolIE_ID_id_RICactionDefinition ((ProtocolIE_ID_t)60016) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)60017) +#define ProtocolIE_ID_id_RICactionType ((ProtocolIE_ID_t)60018) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)60019) +#define ProtocolIE_ID_id_RICcause ((ProtocolIE_ID_t)60020) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)60021) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)60022) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)60023) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)60024) +#define ProtocolIE_ID_id_RICeventTriggerDefinition ((ProtocolIE_ID_t)60025) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)60026) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)60027) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)60028) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)60029) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)60030) +#define ProtocolIE_ID_id_RICrequestorID ((ProtocolIE_ID_t)60031) +#define ProtocolIE_ID_id_RICrequestSequenceNumber ((ProtocolIE_ID_t)60032) +#define ProtocolIE_ID_id_RICsubscription ((ProtocolIE_ID_t)60033) +#define ProtocolIE_ID_id_RICsubsequentAction ((ProtocolIE_ID_t)60034) +#define ProtocolIE_ID_id_RICsubsequentActionType ((ProtocolIE_ID_t)60035) +#define ProtocolIE_ID_id_RICtimeToWait ((ProtocolIE_ID_t)60036) +#define ProtocolIE_ID_id_E_RABs_Admitted_Item ((ProtocolIE_ID_t)0) +#define ProtocolIE_ID_id_E_RABs_Admitted_List ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_E_RAB_Item ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_E_RABs_NotAdmitted_List ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_E_RABs_ToBeSetup_Item ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_CellInformation ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_CellInformation_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_New_eNB_UE_X2AP_ID ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_Old_eNB_UE_X2AP_ID ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_TargetCell_ID ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_TargeteNBtoSource_eNBTransparentContainer ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_TraceActivation ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_UE_ContextInformation ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_UE_HistoryInformation ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_UE_X2AP_ID ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_E_RABs_SubjectToStatusTransfer_List ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_E_RABs_SubjectToStatusTransfer_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_ServedCells ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_GlobalENB_ID ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_GUMMEI_ID ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_GUGroupIDList ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_ServedCellsToAdd ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_ServedCellsToModify ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_ServedCellsToDelete ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_Registration_Request ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_CellToReport ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_ReportingPeriodicity ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_CellToReport_Item ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_CellMeasurementResult ((ProtocolIE_ID_t)32) +#define ProtocolIE_ID_id_CellMeasurementResult_Item ((ProtocolIE_ID_t)33) +#define ProtocolIE_ID_id_GUGroupIDToAddList ((ProtocolIE_ID_t)34) +#define ProtocolIE_ID_id_GUGroupIDToDeleteList ((ProtocolIE_ID_t)35) +#define ProtocolIE_ID_id_SRVCCOperationPossible ((ProtocolIE_ID_t)36) +#define ProtocolIE_ID_id_Measurement_ID ((ProtocolIE_ID_t)37) +#define ProtocolIE_ID_id_ReportCharacteristics ((ProtocolIE_ID_t)38) +#define ProtocolIE_ID_id_ENB1_Measurement_ID ((ProtocolIE_ID_t)39) +#define ProtocolIE_ID_id_ENB2_Measurement_ID ((ProtocolIE_ID_t)40) +#define ProtocolIE_ID_id_Number_of_Antennaports ((ProtocolIE_ID_t)41) +#define ProtocolIE_ID_id_CompositeAvailableCapacityGroup ((ProtocolIE_ID_t)42) +#define ProtocolIE_ID_id_ENB1_Cell_ID ((ProtocolIE_ID_t)43) +#define ProtocolIE_ID_id_ENB2_Cell_ID ((ProtocolIE_ID_t)44) +#define ProtocolIE_ID_id_ENB2_Proposed_Mobility_Parameters ((ProtocolIE_ID_t)45) +#define ProtocolIE_ID_id_ENB1_Mobility_Parameters ((ProtocolIE_ID_t)46) +#define ProtocolIE_ID_id_ENB2_Mobility_Parameters_Modification_Range ((ProtocolIE_ID_t)47) +#define ProtocolIE_ID_id_FailureCellPCI ((ProtocolIE_ID_t)48) +#define ProtocolIE_ID_id_Re_establishmentCellECGI ((ProtocolIE_ID_t)49) +#define ProtocolIE_ID_id_FailureCellCRNTI ((ProtocolIE_ID_t)50) +#define ProtocolIE_ID_id_ShortMAC_I ((ProtocolIE_ID_t)51) +#define ProtocolIE_ID_id_SourceCellECGI ((ProtocolIE_ID_t)52) +#define ProtocolIE_ID_id_FailureCellECGI ((ProtocolIE_ID_t)53) +#define ProtocolIE_ID_id_HandoverReportType ((ProtocolIE_ID_t)54) +#define ProtocolIE_ID_id_PRACH_Configuration ((ProtocolIE_ID_t)55) +#define ProtocolIE_ID_id_MBSFN_Subframe_Info ((ProtocolIE_ID_t)56) +#define ProtocolIE_ID_id_ServedCellsToActivate ((ProtocolIE_ID_t)57) +#define ProtocolIE_ID_id_ActivatedCellList ((ProtocolIE_ID_t)58) +#define ProtocolIE_ID_id_DeactivationIndication ((ProtocolIE_ID_t)59) +#define ProtocolIE_ID_id_UE_RLF_Report_Container ((ProtocolIE_ID_t)60) +#define ProtocolIE_ID_id_ABSInformation ((ProtocolIE_ID_t)61) +#define ProtocolIE_ID_id_InvokeIndication ((ProtocolIE_ID_t)62) +#define ProtocolIE_ID_id_ABS_Status ((ProtocolIE_ID_t)63) +#define ProtocolIE_ID_id_PartialSuccessIndicator ((ProtocolIE_ID_t)64) +#define ProtocolIE_ID_id_MeasurementInitiationResult_List ((ProtocolIE_ID_t)65) +#define ProtocolIE_ID_id_MeasurementInitiationResult_Item ((ProtocolIE_ID_t)66) +#define ProtocolIE_ID_id_MeasurementFailureCause_Item ((ProtocolIE_ID_t)67) +#define ProtocolIE_ID_id_CompleteFailureCauseInformation_List ((ProtocolIE_ID_t)68) +#define ProtocolIE_ID_id_CompleteFailureCauseInformation_Item ((ProtocolIE_ID_t)69) +#define ProtocolIE_ID_id_CSG_Id ((ProtocolIE_ID_t)70) +#define ProtocolIE_ID_id_CSGMembershipStatus ((ProtocolIE_ID_t)71) +#define ProtocolIE_ID_id_MDTConfiguration ((ProtocolIE_ID_t)72) +#define ProtocolIE_ID_id_ManagementBasedMDTallowed ((ProtocolIE_ID_t)74) +#define ProtocolIE_ID_id_RRCConnSetupIndicator ((ProtocolIE_ID_t)75) +#define ProtocolIE_ID_id_NeighbourTAC ((ProtocolIE_ID_t)76) +#define ProtocolIE_ID_id_Time_UE_StayedInCell_EnhancedGranularity ((ProtocolIE_ID_t)77) +#define ProtocolIE_ID_id_RRCConnReestabIndicator ((ProtocolIE_ID_t)78) +#define ProtocolIE_ID_id_MBMS_Service_Area_List ((ProtocolIE_ID_t)79) +#define ProtocolIE_ID_id_HO_cause ((ProtocolIE_ID_t)80) +#define ProtocolIE_ID_id_TargetCellInUTRAN ((ProtocolIE_ID_t)81) +#define ProtocolIE_ID_id_MobilityInformation ((ProtocolIE_ID_t)82) +#define ProtocolIE_ID_id_SourceCellCRNTI ((ProtocolIE_ID_t)83) +#define ProtocolIE_ID_id_MultibandInfoList ((ProtocolIE_ID_t)84) +#define ProtocolIE_ID_id_M3Configuration ((ProtocolIE_ID_t)85) +#define ProtocolIE_ID_id_M4Configuration ((ProtocolIE_ID_t)86) +#define ProtocolIE_ID_id_M5Configuration ((ProtocolIE_ID_t)87) +#define ProtocolIE_ID_id_MDT_Location_Info ((ProtocolIE_ID_t)88) +#define ProtocolIE_ID_id_ManagementBasedMDTPLMNList ((ProtocolIE_ID_t)89) +#define ProtocolIE_ID_id_SignallingBasedMDTPLMNList ((ProtocolIE_ID_t)90) +#define ProtocolIE_ID_id_ReceiveStatusOfULPDCPSDUsExtended ((ProtocolIE_ID_t)91) +#define ProtocolIE_ID_id_ULCOUNTValueExtended ((ProtocolIE_ID_t)92) +#define ProtocolIE_ID_id_DLCOUNTValueExtended ((ProtocolIE_ID_t)93) +#define ProtocolIE_ID_id_eARFCNExtension ((ProtocolIE_ID_t)94) +#define ProtocolIE_ID_id_UL_EARFCNExtension ((ProtocolIE_ID_t)95) +#define ProtocolIE_ID_id_DL_EARFCNExtension ((ProtocolIE_ID_t)96) +#define ProtocolIE_ID_id_AdditionalSpecialSubframe_Info ((ProtocolIE_ID_t)97) +#define ProtocolIE_ID_id_Masked_IMEISV ((ProtocolIE_ID_t)98) +#define ProtocolIE_ID_id_IntendedULDLConfiguration ((ProtocolIE_ID_t)99) +#define ProtocolIE_ID_id_ExtendedULInterferenceOverloadInfo ((ProtocolIE_ID_t)100) +#define ProtocolIE_ID_id_RNL_Header ((ProtocolIE_ID_t)101) +#define ProtocolIE_ID_id_x2APMessage ((ProtocolIE_ID_t)102) +#define ProtocolIE_ID_id_ProSeAuthorized ((ProtocolIE_ID_t)103) +#define ProtocolIE_ID_id_ExpectedUEBehaviour ((ProtocolIE_ID_t)104) +#define ProtocolIE_ID_id_UE_HistoryInformationFromTheUE ((ProtocolIE_ID_t)105) +#define ProtocolIE_ID_id_DynamicDLTransmissionInformation ((ProtocolIE_ID_t)106) +#define ProtocolIE_ID_id_UE_RLF_Report_Container_for_extended_bands ((ProtocolIE_ID_t)107) +#define ProtocolIE_ID_id_CoMPInformation ((ProtocolIE_ID_t)108) +#define ProtocolIE_ID_id_ReportingPeriodicityRSRPMR ((ProtocolIE_ID_t)109) +#define ProtocolIE_ID_id_RSRPMRList ((ProtocolIE_ID_t)110) +#define ProtocolIE_ID_id_MeNB_UE_X2AP_ID ((ProtocolIE_ID_t)111) +#define ProtocolIE_ID_id_SeNB_UE_X2AP_ID ((ProtocolIE_ID_t)112) +#define ProtocolIE_ID_id_UE_SecurityCapabilities ((ProtocolIE_ID_t)113) +#define ProtocolIE_ID_id_SeNBSecurityKey ((ProtocolIE_ID_t)114) +#define ProtocolIE_ID_id_SeNBUEAggregateMaximumBitRate ((ProtocolIE_ID_t)115) +#define ProtocolIE_ID_id_ServingPLMN ((ProtocolIE_ID_t)116) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_List ((ProtocolIE_ID_t)117) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_Item ((ProtocolIE_ID_t)118) +#define ProtocolIE_ID_id_MeNBtoSeNBContainer ((ProtocolIE_ID_t)119) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_List ((ProtocolIE_ID_t)120) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_Item ((ProtocolIE_ID_t)121) +#define ProtocolIE_ID_id_SeNBtoMeNBContainer ((ProtocolIE_ID_t)122) +#define ProtocolIE_ID_id_ResponseInformationSeNBReconfComp ((ProtocolIE_ID_t)123) +#define ProtocolIE_ID_id_UE_ContextInformationSeNBModReq ((ProtocolIE_ID_t)124) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_ModReqItem ((ProtocolIE_ID_t)125) +#define ProtocolIE_ID_id_E_RABs_ToBeModified_ModReqItem ((ProtocolIE_ID_t)126) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqItem ((ProtocolIE_ID_t)127) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_ModAckList ((ProtocolIE_ID_t)128) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_ModAckList ((ProtocolIE_ID_t)129) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_ModAckList ((ProtocolIE_ID_t)130) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_ModAckItem ((ProtocolIE_ID_t)131) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_ModAckItem ((ProtocolIE_ID_t)132) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_ModAckItem ((ProtocolIE_ID_t)133) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqd ((ProtocolIE_ID_t)134) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqdItem ((ProtocolIE_ID_t)135) +#define ProtocolIE_ID_id_SCGChangeIndication ((ProtocolIE_ID_t)136) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_List_RelReq ((ProtocolIE_ID_t)137) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_RelReqItem ((ProtocolIE_ID_t)138) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_List_RelConf ((ProtocolIE_ID_t)139) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_RelConfItem ((ProtocolIE_ID_t)140) +#define ProtocolIE_ID_id_E_RABs_SubjectToCounterCheck_List ((ProtocolIE_ID_t)141) +#define ProtocolIE_ID_id_E_RABs_SubjectToCounterCheckItem ((ProtocolIE_ID_t)142) +#define ProtocolIE_ID_id_CoverageModificationList ((ProtocolIE_ID_t)143) +#define ProtocolIE_ID_id_ReportingPeriodicityCSIR ((ProtocolIE_ID_t)145) +#define ProtocolIE_ID_id_CSIReportList ((ProtocolIE_ID_t)146) +#define ProtocolIE_ID_id_UEID ((ProtocolIE_ID_t)147) +#define ProtocolIE_ID_id_enhancedRNTP ((ProtocolIE_ID_t)148) +#define ProtocolIE_ID_id_ProSeUEtoNetworkRelaying ((ProtocolIE_ID_t)149) +#define ProtocolIE_ID_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 ((ProtocolIE_ID_t)150) +#define ProtocolIE_ID_id_ULCOUNTValuePDCP_SNlength18 ((ProtocolIE_ID_t)151) +#define ProtocolIE_ID_id_DLCOUNTValuePDCP_SNlength18 ((ProtocolIE_ID_t)152) +#define ProtocolIE_ID_id_UE_ContextReferenceAtSeNB ((ProtocolIE_ID_t)153) +#define ProtocolIE_ID_id_UE_ContextKeptIndicator ((ProtocolIE_ID_t)154) +#define ProtocolIE_ID_id_New_eNB_UE_X2AP_ID_Extension ((ProtocolIE_ID_t)155) +#define ProtocolIE_ID_id_Old_eNB_UE_X2AP_ID_Extension ((ProtocolIE_ID_t)156) +#define ProtocolIE_ID_id_MeNB_UE_X2AP_ID_Extension ((ProtocolIE_ID_t)157) +#define ProtocolIE_ID_id_SeNB_UE_X2AP_ID_Extension ((ProtocolIE_ID_t)158) +#define ProtocolIE_ID_id_LHN_ID ((ProtocolIE_ID_t)159) +#define ProtocolIE_ID_id_FreqBandIndicatorPriority ((ProtocolIE_ID_t)160) +#define ProtocolIE_ID_id_M6Configuration ((ProtocolIE_ID_t)161) +#define ProtocolIE_ID_id_M7Configuration ((ProtocolIE_ID_t)162) +#define ProtocolIE_ID_id_Tunnel_Information_for_BBF ((ProtocolIE_ID_t)163) +#define ProtocolIE_ID_id_SIPTO_BearerDeactivationIndication ((ProtocolIE_ID_t)164) +#define ProtocolIE_ID_id_GW_TransportLayerAddress ((ProtocolIE_ID_t)165) +#define ProtocolIE_ID_id_Correlation_ID ((ProtocolIE_ID_t)166) +#define ProtocolIE_ID_id_SIPTO_Correlation_ID ((ProtocolIE_ID_t)167) +#define ProtocolIE_ID_id_SIPTO_L_GW_TransportLayerAddress ((ProtocolIE_ID_t)168) +#define ProtocolIE_ID_id_X2RemovalThreshold ((ProtocolIE_ID_t)169) +#define ProtocolIE_ID_id_CellReportingIndicator ((ProtocolIE_ID_t)170) +#define ProtocolIE_ID_id_BearerType ((ProtocolIE_ID_t)171) +#define ProtocolIE_ID_id_resumeID ((ProtocolIE_ID_t)172) +#define ProtocolIE_ID_id_UE_ContextInformationRetrieve ((ProtocolIE_ID_t)173) +#define ProtocolIE_ID_id_E_RABs_ToBeSetupRetrieve_Item ((ProtocolIE_ID_t)174) +#define ProtocolIE_ID_id_NewEUTRANCellIdentifier ((ProtocolIE_ID_t)175) +#define ProtocolIE_ID_id_V2XServicesAuthorized ((ProtocolIE_ID_t)176) +#define ProtocolIE_ID_id_OffsetOfNbiotChannelNumberToDL_EARFCN ((ProtocolIE_ID_t)177) +#define ProtocolIE_ID_id_OffsetOfNbiotChannelNumberToUL_EARFCN ((ProtocolIE_ID_t)178) +#define ProtocolIE_ID_id_AdditionalSpecialSubframeExtension_Info ((ProtocolIE_ID_t)179) +#define ProtocolIE_ID_id_BandwidthReducedSI ((ProtocolIE_ID_t)180) +#define ProtocolIE_ID_id_MakeBeforeBreakIndicator ((ProtocolIE_ID_t)181) +#define ProtocolIE_ID_id_UE_ContextReferenceAtWT ((ProtocolIE_ID_t)182) +#define ProtocolIE_ID_id_WT_UE_ContextKeptIndicator ((ProtocolIE_ID_t)183) +#define ProtocolIE_ID_id_UESidelinkAggregateMaximumBitRate ((ProtocolIE_ID_t)184) +#define ProtocolIE_ID_id_uL_GTPtunnelEndpoint ((ProtocolIE_ID_t)185) +#define ProtocolIE_ID_id_DL_scheduling_PDCCH_CCE_usage ((ProtocolIE_ID_t)193) +#define ProtocolIE_ID_id_UL_scheduling_PDCCH_CCE_usage ((ProtocolIE_ID_t)194) +#define ProtocolIE_ID_id_UEAppLayerMeasConfig ((ProtocolIE_ID_t)195) +#define ProtocolIE_ID_id_extended_e_RAB_MaximumBitrateDL ((ProtocolIE_ID_t)196) +#define ProtocolIE_ID_id_extended_e_RAB_MaximumBitrateUL ((ProtocolIE_ID_t)197) +#define ProtocolIE_ID_id_extended_e_RAB_GuaranteedBitrateDL ((ProtocolIE_ID_t)198) +#define ProtocolIE_ID_id_extended_e_RAB_GuaranteedBitrateUL ((ProtocolIE_ID_t)199) +#define ProtocolIE_ID_id_extended_uEaggregateMaximumBitRateDownlink ((ProtocolIE_ID_t)200) +#define ProtocolIE_ID_id_extended_uEaggregateMaximumBitRateUplink ((ProtocolIE_ID_t)201) +#define ProtocolIE_ID_id_NRrestrictioninEPSasSecondaryRAT ((ProtocolIE_ID_t)202) +#define ProtocolIE_ID_id_SgNBSecurityKey ((ProtocolIE_ID_t)203) +#define ProtocolIE_ID_id_SgNBUEAggregateMaximumBitRate ((ProtocolIE_ID_t)204) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBAddReqList ((ProtocolIE_ID_t)205) +#define ProtocolIE_ID_id_MeNBtoSgNBContainer ((ProtocolIE_ID_t)206) +#define ProtocolIE_ID_id_SgNB_UE_X2AP_ID ((ProtocolIE_ID_t)207) +#define ProtocolIE_ID_id_RequestedSplitSRBs ((ProtocolIE_ID_t)208) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBAddReq_Item ((ProtocolIE_ID_t)209) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList ((ProtocolIE_ID_t)210) +#define ProtocolIE_ID_id_SgNBtoMeNBContainer ((ProtocolIE_ID_t)211) +#define ProtocolIE_ID_id_AdmittedSplitSRBs ((ProtocolIE_ID_t)212) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item ((ProtocolIE_ID_t)213) +#define ProtocolIE_ID_id_ResponseInformationSgNBReconfComp ((ProtocolIE_ID_t)214) +#define ProtocolIE_ID_id_UE_ContextInformation_SgNBModReq ((ProtocolIE_ID_t)215) +#define ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBModReq_Item ((ProtocolIE_ID_t)216) +#define ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReq_Item ((ProtocolIE_ID_t)217) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReq_Item ((ProtocolIE_ID_t)218) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList ((ProtocolIE_ID_t)219) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_SgNBModAckList ((ProtocolIE_ID_t)220) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList ((ProtocolIE_ID_t)221) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item ((ProtocolIE_ID_t)222) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item ((ProtocolIE_ID_t)223) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item ((ProtocolIE_ID_t)224) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReqdList ((ProtocolIE_ID_t)225) +#define ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReqdList ((ProtocolIE_ID_t)226) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReqd_Item ((ProtocolIE_ID_t)227) +#define ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReqd_Item ((ProtocolIE_ID_t)228) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBChaConfList ((ProtocolIE_ID_t)229) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBChaConf_Item ((ProtocolIE_ID_t)230) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqList ((ProtocolIE_ID_t)231) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReq_Item ((ProtocolIE_ID_t)232) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelConfList ((ProtocolIE_ID_t)233) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelConf_Item ((ProtocolIE_ID_t)234) +#define ProtocolIE_ID_id_E_RABs_SubjectToSgNBCounterCheck_List ((ProtocolIE_ID_t)235) +#define ProtocolIE_ID_id_E_RABs_SubjectToSgNBCounterCheck_Item ((ProtocolIE_ID_t)236) +#define ProtocolIE_ID_id_RRCContainer ((ProtocolIE_ID_t)237) +#define ProtocolIE_ID_id_SRBType ((ProtocolIE_ID_t)238) +#define ProtocolIE_ID_id_Target_SgNB_ID ((ProtocolIE_ID_t)239) +#define ProtocolIE_ID_id_HandoverRestrictionList ((ProtocolIE_ID_t)240) +#define ProtocolIE_ID_id_SCGConfigurationQuery ((ProtocolIE_ID_t)241) +#define ProtocolIE_ID_id_SplitSRB ((ProtocolIE_ID_t)242) +#define ProtocolIE_ID_id_UENRMeasurement ((ProtocolIE_ID_t)243) +#define ProtocolIE_ID_id_InitiatingNodeType_EndcX2Setup ((ProtocolIE_ID_t)244) +#define ProtocolIE_ID_id_InitiatingNodeType_EndcConfigUpdate ((ProtocolIE_ID_t)245) +#define ProtocolIE_ID_id_RespondingNodeType_EndcX2Setup ((ProtocolIE_ID_t)246) +#define ProtocolIE_ID_id_RespondingNodeType_EndcConfigUpdate ((ProtocolIE_ID_t)247) +#define ProtocolIE_ID_id_NRUESecurityCapabilities ((ProtocolIE_ID_t)248) +#define ProtocolIE_ID_id_PDCPChangeIndication ((ProtocolIE_ID_t)249) +#define ProtocolIE_ID_id_ServedEUTRAcellsENDCX2ManagementList ((ProtocolIE_ID_t)250) +#define ProtocolIE_ID_id_CellAssistanceInformation ((ProtocolIE_ID_t)251) +#define ProtocolIE_ID_id_Globalen_gNB_ID ((ProtocolIE_ID_t)252) +#define ProtocolIE_ID_id_ServedNRcellsENDCX2ManagementList ((ProtocolIE_ID_t)253) +#define ProtocolIE_ID_id_UE_ContextReferenceAtSgNB ((ProtocolIE_ID_t)254) +#define ProtocolIE_ID_id_SecondaryRATUsageReport ((ProtocolIE_ID_t)255) +#define ProtocolIE_ID_id_ActivationID ((ProtocolIE_ID_t)256) +#define ProtocolIE_ID_id_MeNBResourceCoordinationInformation ((ProtocolIE_ID_t)257) +#define ProtocolIE_ID_id_SgNBResourceCoordinationInformation ((ProtocolIE_ID_t)258) +#define ProtocolIE_ID_id_ServedEUTRAcellsToModifyListENDCConfUpd ((ProtocolIE_ID_t)259) +#define ProtocolIE_ID_id_ServedEUTRAcellsToDeleteListENDCConfUpd ((ProtocolIE_ID_t)260) +#define ProtocolIE_ID_id_ServedNRcellsToModifyListENDCConfUpd ((ProtocolIE_ID_t)261) +#define ProtocolIE_ID_id_ServedNRcellsToDeleteListENDCConfUpd ((ProtocolIE_ID_t)262) +#define ProtocolIE_ID_id_E_RABUsageReport_Item ((ProtocolIE_ID_t)263) +#define ProtocolIE_ID_id_Old_SgNB_UE_X2AP_ID ((ProtocolIE_ID_t)264) +#define ProtocolIE_ID_id_SecondaryRATUsageReportList ((ProtocolIE_ID_t)265) +#define ProtocolIE_ID_id_SecondaryRATUsageReport_Item ((ProtocolIE_ID_t)266) +#define ProtocolIE_ID_id_ServedNRCellsToActivate ((ProtocolIE_ID_t)267) +#define ProtocolIE_ID_id_ActivatedNRCellList ((ProtocolIE_ID_t)268) +#define ProtocolIE_ID_id_SelectedPLMN ((ProtocolIE_ID_t)269) +#define ProtocolIE_ID_id_UEs_ToBeReset ((ProtocolIE_ID_t)270) +#define ProtocolIE_ID_id_UEs_Admitted_ToBeReset ((ProtocolIE_ID_t)271) +#define ProtocolIE_ID_id_RRCConfigIndication ((ProtocolIE_ID_t)272) +#define ProtocolIE_ID_id_DownlinkPacketLossRate ((ProtocolIE_ID_t)273) +#define ProtocolIE_ID_id_UplinkPacketLossRate ((ProtocolIE_ID_t)274) +#define ProtocolIE_ID_id_SubscriberProfileIDforRFP ((ProtocolIE_ID_t)275) +#define ProtocolIE_ID_id_serviceType ((ProtocolIE_ID_t)276) +#define ProtocolIE_ID_id_AerialUEsubscriptionInformation ((ProtocolIE_ID_t)277) +#define ProtocolIE_ID_id_SGNB_Addition_Trigger_Ind ((ProtocolIE_ID_t)278) +#define ProtocolIE_ID_id_MeNBCell_ID ((ProtocolIE_ID_t)279) +#define ProtocolIE_ID_id_RequestedSplitSRBsrelease ((ProtocolIE_ID_t)280) +#define ProtocolIE_ID_id_AdmittedSplitSRBsrelease ((ProtocolIE_ID_t)281) +#define ProtocolIE_ID_id_NRS_NSSS_PowerOffset ((ProtocolIE_ID_t)282) +#define ProtocolIE_ID_id_NSSS_NumOccasionDifferentPrecoder ((ProtocolIE_ID_t)283) +#define ProtocolIE_ID_id_ProtectedEUTRAResourceIndication ((ProtocolIE_ID_t)284) +#define ProtocolIE_ID_id_InitiatingNodeType_EutranrCellResourceCoordination ((ProtocolIE_ID_t)285) +#define ProtocolIE_ID_id_RespondingNodeType_EutranrCellResourceCoordination ((ProtocolIE_ID_t)286) +#define ProtocolIE_ID_id_DataTrafficResourceIndication ((ProtocolIE_ID_t)287) +#define ProtocolIE_ID_id_SpectrumSharingGroupID ((ProtocolIE_ID_t)288) +#define ProtocolIE_ID_id_ListofEUTRACellsinEUTRACoordinationReq ((ProtocolIE_ID_t)289) +#define ProtocolIE_ID_id_ListofEUTRACellsinEUTRACoordinationResp ((ProtocolIE_ID_t)290) +#define ProtocolIE_ID_id_ListofEUTRACellsinNRCoordinationReq ((ProtocolIE_ID_t)291) +#define ProtocolIE_ID_id_ListofNRCellsinNRCoordinationReq ((ProtocolIE_ID_t)292) +#define ProtocolIE_ID_id_ListofNRCellsinNRCoordinationResp ((ProtocolIE_ID_t)293) +#define ProtocolIE_ID_id_E_RABs_AdmittedToBeModified_SgNBModConfList ((ProtocolIE_ID_t)294) +#define ProtocolIE_ID_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item ((ProtocolIE_ID_t)295) +#define ProtocolIE_ID_id_UEContextLevelUserPlaneActivity ((ProtocolIE_ID_t)296) +#define ProtocolIE_ID_id_ERABActivityNotifyItemList ((ProtocolIE_ID_t)297) +#define ProtocolIE_ID_id_InitiatingNodeType_EndcX2Removal ((ProtocolIE_ID_t)298) +#define ProtocolIE_ID_id_RespondingNodeType_EndcX2Removal ((ProtocolIE_ID_t)299) +#define ProtocolIE_ID_id_RLC_Status ((ProtocolIE_ID_t)300) +#define ProtocolIE_ID_id_CNTypeRestrictions ((ProtocolIE_ID_t)301) +#define ProtocolIE_ID_id_uLpDCPSnLength ((ProtocolIE_ID_t)302) +#define ProtocolIE_ID_id_BluetoothMeasurementConfiguration ((ProtocolIE_ID_t)303) +#define ProtocolIE_ID_id_WLANMeasurementConfiguration ((ProtocolIE_ID_t)304) +#define ProtocolIE_ID_id_NRrestrictionin5GS ((ProtocolIE_ID_t)305) +#define ProtocolIE_ID_id_dL_Forwarding ((ProtocolIE_ID_t)306) +#define ProtocolIE_ID_id_E_RABs_DataForwardingAddress_List ((ProtocolIE_ID_t)307) +#define ProtocolIE_ID_id_E_RABs_DataForwardingAddress_Item ((ProtocolIE_ID_t)308) +#define ProtocolIE_ID_id_Subscription_Based_UE_DifferentiationInfo ((ProtocolIE_ID_t)309) +#define ProtocolIE_ID_id_GNBOverloadInformation ((ProtocolIE_ID_t)310) +#define ProtocolIE_ID_id_dLPDCPSnLength ((ProtocolIE_ID_t)311) +#define ProtocolIE_ID_id_secondarysgNBDLGTPTEIDatPDCP ((ProtocolIE_ID_t)312) +#define ProtocolIE_ID_id_secondarymeNBULGTPTEIDatPDCP ((ProtocolIE_ID_t)313) +#define ProtocolIE_ID_id_lCID ((ProtocolIE_ID_t)314) +#define ProtocolIE_ID_id_duplicationActivation ((ProtocolIE_ID_t)315) +#define ProtocolIE_ID_id_ECGI ((ProtocolIE_ID_t)316) +#define ProtocolIE_ID_id_RLCMode_transferred ((ProtocolIE_ID_t)317) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList ((ProtocolIE_ID_t)318) +#define ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item ((ProtocolIE_ID_t)319) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqdList ((ProtocolIE_ID_t)320) +#define ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqd_Item ((ProtocolIE_ID_t)321) +#define ProtocolIE_ID_id_NRCGI ((ProtocolIE_ID_t)322) +#define ProtocolIE_ID_id_MeNBCoordinationAssistanceInformation ((ProtocolIE_ID_t)323) +#define ProtocolIE_ID_id_SgNBCoordinationAssistanceInformation ((ProtocolIE_ID_t)324) +#define ProtocolIE_ID_id_new_drb_ID_req ((ProtocolIE_ID_t)325) +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.c new file mode 100644 index 0000000..e8f244a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.c @@ -0,0 +1,1154 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ProtocolIE-Single-Container.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_SubjectToStatusTransfer_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using CellInformation_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using CellToReport_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using MeasurementInitiationResult_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using MeasurementFailureCause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using CompleteFailureCauseInformation_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using CellMeasurementResult_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeAdded_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeAdded_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeAdded_ModReqItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeModified_ModReqItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_ModReqItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeAdded_ModAckItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeModified_ModAckItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeReleased_ModAckItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_ModReqdItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_RelReqItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_RelConfItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_SubjectToCounterCheckItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeSetupRetrieve_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeAdded_SgNBModReq_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeModified_SgNBModReq_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBModReq_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeModified_SgNBModReqd_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_SubjectToSgNBCounterCheck_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABs_DataForwardingAddress_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RAB_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using E_RABUsageReport_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using SecondaryRATUsageReport_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P0 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P1 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P1_tags_2, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P2 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P2_tags_3, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P3 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P3_tags_4, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P4 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P4_tags_5, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P5 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P5_tags_6, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P6 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P6_tags_7, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P6_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetup_ItemIEs_25, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetup_ItemIEs_specs_25 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P7 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P7_tags_8, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P7_tags_8, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ItemIEs_29, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ItemIEs_specs_29 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P8 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P8_tags_9, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P8_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToStatusTransfer_ItemIEs_33, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_33 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P9 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P9_tags_10, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P9_tags_10, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellInformation_ItemIEs_37, + 3, /* Elements count */ + &asn_SPC_CellInformation_ItemIEs_specs_37 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P10 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P10_tags_11, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P10_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellToReport_ItemIEs_41, + 3, /* Elements count */ + &asn_SPC_CellToReport_ItemIEs_specs_41 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P11 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P11_tags_12, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P11_tags_12, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInitiationResult_ItemIEs_45, + 3, /* Elements count */ + &asn_SPC_MeasurementInitiationResult_ItemIEs_specs_45 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P12 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P12_tags_13, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P12_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementFailureCause_ItemIEs_49, + 3, /* Elements count */ + &asn_SPC_MeasurementFailureCause_ItemIEs_specs_49 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P13 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P13_tags_14, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P13_tags_14, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CompleteFailureCauseInformation_ItemIEs_53, + 3, /* Elements count */ + &asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_53 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P14 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P14_tags_15, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P14_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellMeasurementResult_ItemIEs_57, + 3, /* Elements count */ + &asn_SPC_CellMeasurementResult_ItemIEs_specs_57 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P15 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P15_tags_16, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P15_tags_16, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ItemIEs_61, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ItemIEs_specs_61 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P16 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P16_tags_17, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P16_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ItemIEs_65, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_65 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P17 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P17_tags_18, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P17_tags_18, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_ModReqItemIEs_69, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_ModReqItemIEs_specs_69 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P18 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P18_tags_19, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P18_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_ModReqItemIEs_73, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_ModReqItemIEs_specs_73 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P19 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P19_tags_20, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P19_tags_20, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqItemIEs_77, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqItemIEs_specs_77 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P20 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P20_tags_21, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P20_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_81, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_81 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P21 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P21_tags_22, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P21_tags_22, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItemIEs_85, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_85 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P22 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P22_tags_23, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P22_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_89, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_89 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P23 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P23_tags_24, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P23_tags_24, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_ModReqdItemIEs_93, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_ModReqdItemIEs_specs_93 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P24 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P24_tags_25, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P24_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelReqItemIEs_97, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelReqItemIEs_specs_97 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P25 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P25_tags_26, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P25_tags_26, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_RelConfItemIEs_101, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_RelConfItemIEs_specs_101 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P26 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P26_tags_27, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P26_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToCounterCheckItemIEs_105, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToCounterCheckItemIEs_specs_105 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P27 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P27_tags_28, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P27_tags_28, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeSetupRetrieve_ItemIEs_109, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_109 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P28 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P28_tags_29, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P28_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_113, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_113 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P29 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P29_tags_30, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P29_tags_30, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_117, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_117 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P30 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P30_tags_31, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P30_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_121, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_121 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P31 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P31_tags_32, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P31_tags_32, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemIEs_125, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_125 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P32 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P32_tags_33, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P32_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_129, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_129 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P33 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P33_tags_34, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P33_tags_34, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_133, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_133 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P34 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P34_tags_35, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P34_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_137, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_137 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P35 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P35_tags_36, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P35_tags_36, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_141, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_141 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P36 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P36_tags_37, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P36_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_145, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_145 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P37 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P37_tags_38, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P37_tags_38, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_149, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_149 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P38 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P38_tags_39, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P38_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_153, + 3, /* Elements count */ + &asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_153 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P39 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P39_tags_40, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P39_tags_40, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_157, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_157 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P40 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P40_tags_41, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P40_tags_41, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_161, + 3, /* Elements count */ + &asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_161 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P41 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P41_tags_42, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P41_tags_42, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_165, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_165 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P42 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P42_tags_43, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P42_tags_43, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_169, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_169 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P43 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P43_tags_44, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P43_tags_44, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_173, + 3, /* Elements count */ + &asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_173 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P44 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P44_tags_45, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P44_tags_45, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_177, + 3, /* Elements count */ + &asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_177 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P45 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P45_tags_46, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P45_tags_46, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABs_DataForwardingAddress_ItemIEs_181, + 3, /* Elements count */ + &asn_SPC_E_RABs_DataForwardingAddress_ItemIEs_specs_181 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P46 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P46_tags_47, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P46_tags_47, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RAB_ItemIEs_665, + 3, /* Elements count */ + &asn_SPC_E_RAB_ItemIEs_specs_665 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P47 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P47_tags_48, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P47_tags_48, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E_RABUsageReport_ItemIEs_669, + 3, /* Elements count */ + &asn_SPC_E_RABUsageReport_ItemIEs_specs_669 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P48 = { + "ProtocolIE-Single-Container", + "ProtocolIE-Single-Container", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_Single_Container_122P48_tags_49, + sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[0]), /* 1 */ + asn_DEF_ProtocolIE_Single_Container_122P48_tags_49, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49) + /sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATUsageReport_ItemIEs_673, + 3, /* Elements count */ + &asn_SPC_SecondaryRATUsageReport_ItemIEs_specs_673 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.h new file mode 100644 index 0000000..7a1cea9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ProtocolIE-Single-Container.h @@ -0,0 +1,685 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-Containers" + * found in "../../asnFiles/X2AP-Containers.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ProtocolIE_Single_Container_H_ +#define _ProtocolIE_Single_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-Single-Container */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_Single_Container_122P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_Single_Container_122P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_Single_Container_122P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_Single_Container_122P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_Single_Container_122P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_Single_Container_122P5_t; +typedef E_RABs_ToBeSetup_ItemIEs_t ProtocolIE_Single_Container_122P6_t; +typedef E_RABs_Admitted_ItemIEs_t ProtocolIE_Single_Container_122P7_t; +typedef E_RABs_SubjectToStatusTransfer_ItemIEs_t ProtocolIE_Single_Container_122P8_t; +typedef CellInformation_ItemIEs_t ProtocolIE_Single_Container_122P9_t; +typedef CellToReport_ItemIEs_t ProtocolIE_Single_Container_122P10_t; +typedef MeasurementInitiationResult_ItemIEs_t ProtocolIE_Single_Container_122P11_t; +typedef MeasurementFailureCause_ItemIEs_t ProtocolIE_Single_Container_122P12_t; +typedef CompleteFailureCauseInformation_ItemIEs_t ProtocolIE_Single_Container_122P13_t; +typedef CellMeasurementResult_ItemIEs_t ProtocolIE_Single_Container_122P14_t; +typedef E_RABs_ToBeAdded_ItemIEs_t ProtocolIE_Single_Container_122P15_t; +typedef E_RABs_Admitted_ToBeAdded_ItemIEs_t ProtocolIE_Single_Container_122P16_t; +typedef E_RABs_ToBeAdded_ModReqItemIEs_t ProtocolIE_Single_Container_122P17_t; +typedef E_RABs_ToBeModified_ModReqItemIEs_t ProtocolIE_Single_Container_122P18_t; +typedef E_RABs_ToBeReleased_ModReqItemIEs_t ProtocolIE_Single_Container_122P19_t; +typedef E_RABs_Admitted_ToBeAdded_ModAckItemIEs_t ProtocolIE_Single_Container_122P20_t; +typedef E_RABs_Admitted_ToBeModified_ModAckItemIEs_t ProtocolIE_Single_Container_122P21_t; +typedef E_RABs_Admitted_ToBeReleased_ModAckItemIEs_t ProtocolIE_Single_Container_122P22_t; +typedef E_RABs_ToBeReleased_ModReqdItemIEs_t ProtocolIE_Single_Container_122P23_t; +typedef E_RABs_ToBeReleased_RelReqItemIEs_t ProtocolIE_Single_Container_122P24_t; +typedef E_RABs_ToBeReleased_RelConfItemIEs_t ProtocolIE_Single_Container_122P25_t; +typedef E_RABs_SubjectToCounterCheckItemIEs_t ProtocolIE_Single_Container_122P26_t; +typedef E_RABs_ToBeSetupRetrieve_ItemIEs_t ProtocolIE_Single_Container_122P27_t; +typedef E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t ProtocolIE_Single_Container_122P28_t; +typedef E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t ProtocolIE_Single_Container_122P29_t; +typedef E_RABs_ToBeAdded_SgNBModReq_ItemIEs_t ProtocolIE_Single_Container_122P30_t; +typedef E_RABs_ToBeModified_SgNBModReq_ItemIEs_t ProtocolIE_Single_Container_122P31_t; +typedef E_RABs_ToBeReleased_SgNBModReq_ItemIEs_t ProtocolIE_Single_Container_122P32_t; +typedef E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_t ProtocolIE_Single_Container_122P33_t; +typedef E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_t ProtocolIE_Single_Container_122P34_t; +typedef E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_t ProtocolIE_Single_Container_122P35_t; +typedef E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_t ProtocolIE_Single_Container_122P36_t; +typedef E_RABs_ToBeModified_SgNBModReqd_ItemIEs_t ProtocolIE_Single_Container_122P37_t; +typedef E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_t ProtocolIE_Single_Container_122P38_t; +typedef E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_t ProtocolIE_Single_Container_122P39_t; +typedef E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_t ProtocolIE_Single_Container_122P40_t; +typedef E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_t ProtocolIE_Single_Container_122P41_t; +typedef E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_t ProtocolIE_Single_Container_122P42_t; +typedef E_RABs_SubjectToSgNBCounterCheck_ItemIEs_t ProtocolIE_Single_Container_122P43_t; +typedef E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_t ProtocolIE_Single_Container_122P44_t; +typedef E_RABs_DataForwardingAddress_ItemIEs_t ProtocolIE_Single_Container_122P45_t; +typedef E_RAB_ItemIEs_t ProtocolIE_Single_Container_122P46_t; +typedef E_RABUsageReport_ItemIEs_t ProtocolIE_Single_Container_122P47_t; +typedef SecondaryRATUsageReport_ItemIEs_t ProtocolIE_Single_Container_122P48_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P0; +asn_struct_free_f ProtocolIE_Single_Container_122P0_free; +asn_struct_print_f ProtocolIE_Single_Container_122P0_print; +asn_constr_check_f ProtocolIE_Single_Container_122P0_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P0_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P0_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P0_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P0_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P0_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P0_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P0_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P1; +asn_struct_free_f ProtocolIE_Single_Container_122P1_free; +asn_struct_print_f ProtocolIE_Single_Container_122P1_print; +asn_constr_check_f ProtocolIE_Single_Container_122P1_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P1_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P1_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P1_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P1_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P1_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P1_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P1_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P2; +asn_struct_free_f ProtocolIE_Single_Container_122P2_free; +asn_struct_print_f ProtocolIE_Single_Container_122P2_print; +asn_constr_check_f ProtocolIE_Single_Container_122P2_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P2_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P2_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P2_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P2_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P2_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P2_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P2_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P3; +asn_struct_free_f ProtocolIE_Single_Container_122P3_free; +asn_struct_print_f ProtocolIE_Single_Container_122P3_print; +asn_constr_check_f ProtocolIE_Single_Container_122P3_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P3_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P3_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P3_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P3_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P3_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P3_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P3_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P4; +asn_struct_free_f ProtocolIE_Single_Container_122P4_free; +asn_struct_print_f ProtocolIE_Single_Container_122P4_print; +asn_constr_check_f ProtocolIE_Single_Container_122P4_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P4_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P4_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P4_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P4_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P4_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P4_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P4_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P5; +asn_struct_free_f ProtocolIE_Single_Container_122P5_free; +asn_struct_print_f ProtocolIE_Single_Container_122P5_print; +asn_constr_check_f ProtocolIE_Single_Container_122P5_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P5_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P5_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P5_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P5_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P5_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P5_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P5_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P5_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P6; +asn_struct_free_f ProtocolIE_Single_Container_122P6_free; +asn_struct_print_f ProtocolIE_Single_Container_122P6_print; +asn_constr_check_f ProtocolIE_Single_Container_122P6_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P6_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P6_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P6_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P6_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P6_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P6_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P6_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P6_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P7; +asn_struct_free_f ProtocolIE_Single_Container_122P7_free; +asn_struct_print_f ProtocolIE_Single_Container_122P7_print; +asn_constr_check_f ProtocolIE_Single_Container_122P7_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P7_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P7_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P7_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P7_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P7_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P7_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P7_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P7_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P8; +asn_struct_free_f ProtocolIE_Single_Container_122P8_free; +asn_struct_print_f ProtocolIE_Single_Container_122P8_print; +asn_constr_check_f ProtocolIE_Single_Container_122P8_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P8_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P8_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P8_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P8_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P8_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P8_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P8_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P8_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P9; +asn_struct_free_f ProtocolIE_Single_Container_122P9_free; +asn_struct_print_f ProtocolIE_Single_Container_122P9_print; +asn_constr_check_f ProtocolIE_Single_Container_122P9_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P9_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P9_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P9_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P9_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P9_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P9_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P9_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P9_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P10; +asn_struct_free_f ProtocolIE_Single_Container_122P10_free; +asn_struct_print_f ProtocolIE_Single_Container_122P10_print; +asn_constr_check_f ProtocolIE_Single_Container_122P10_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P10_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P10_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P10_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P10_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P10_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P10_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P10_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P10_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P11; +asn_struct_free_f ProtocolIE_Single_Container_122P11_free; +asn_struct_print_f ProtocolIE_Single_Container_122P11_print; +asn_constr_check_f ProtocolIE_Single_Container_122P11_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P11_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P11_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P11_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P11_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P11_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P11_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P11_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P11_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P12; +asn_struct_free_f ProtocolIE_Single_Container_122P12_free; +asn_struct_print_f ProtocolIE_Single_Container_122P12_print; +asn_constr_check_f ProtocolIE_Single_Container_122P12_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P12_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P12_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P12_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P12_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P12_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P12_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P12_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P12_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P13; +asn_struct_free_f ProtocolIE_Single_Container_122P13_free; +asn_struct_print_f ProtocolIE_Single_Container_122P13_print; +asn_constr_check_f ProtocolIE_Single_Container_122P13_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P13_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P13_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P13_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P13_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P13_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P13_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P13_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P13_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P14; +asn_struct_free_f ProtocolIE_Single_Container_122P14_free; +asn_struct_print_f ProtocolIE_Single_Container_122P14_print; +asn_constr_check_f ProtocolIE_Single_Container_122P14_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P14_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P14_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P14_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P14_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P14_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P14_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P14_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P14_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P15; +asn_struct_free_f ProtocolIE_Single_Container_122P15_free; +asn_struct_print_f ProtocolIE_Single_Container_122P15_print; +asn_constr_check_f ProtocolIE_Single_Container_122P15_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P15_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P15_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P15_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P15_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P15_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P15_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P15_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P15_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P16; +asn_struct_free_f ProtocolIE_Single_Container_122P16_free; +asn_struct_print_f ProtocolIE_Single_Container_122P16_print; +asn_constr_check_f ProtocolIE_Single_Container_122P16_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P16_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P16_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P16_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P16_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P16_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P16_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P16_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P16_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P17; +asn_struct_free_f ProtocolIE_Single_Container_122P17_free; +asn_struct_print_f ProtocolIE_Single_Container_122P17_print; +asn_constr_check_f ProtocolIE_Single_Container_122P17_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P17_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P17_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P17_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P17_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P17_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P17_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P17_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P17_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P18; +asn_struct_free_f ProtocolIE_Single_Container_122P18_free; +asn_struct_print_f ProtocolIE_Single_Container_122P18_print; +asn_constr_check_f ProtocolIE_Single_Container_122P18_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P18_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P18_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P18_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P18_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P18_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P18_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P18_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P18_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P19; +asn_struct_free_f ProtocolIE_Single_Container_122P19_free; +asn_struct_print_f ProtocolIE_Single_Container_122P19_print; +asn_constr_check_f ProtocolIE_Single_Container_122P19_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P19_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P19_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P19_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P19_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P19_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P19_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P19_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P19_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P20; +asn_struct_free_f ProtocolIE_Single_Container_122P20_free; +asn_struct_print_f ProtocolIE_Single_Container_122P20_print; +asn_constr_check_f ProtocolIE_Single_Container_122P20_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P20_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P20_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P20_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P20_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P20_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P20_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P20_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P20_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P21; +asn_struct_free_f ProtocolIE_Single_Container_122P21_free; +asn_struct_print_f ProtocolIE_Single_Container_122P21_print; +asn_constr_check_f ProtocolIE_Single_Container_122P21_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P21_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P21_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P21_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P21_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P21_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P21_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P21_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P21_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P22; +asn_struct_free_f ProtocolIE_Single_Container_122P22_free; +asn_struct_print_f ProtocolIE_Single_Container_122P22_print; +asn_constr_check_f ProtocolIE_Single_Container_122P22_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P22_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P22_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P22_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P22_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P22_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P22_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P22_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P22_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P23; +asn_struct_free_f ProtocolIE_Single_Container_122P23_free; +asn_struct_print_f ProtocolIE_Single_Container_122P23_print; +asn_constr_check_f ProtocolIE_Single_Container_122P23_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P23_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P23_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P23_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P23_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P23_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P23_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P23_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P23_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P24; +asn_struct_free_f ProtocolIE_Single_Container_122P24_free; +asn_struct_print_f ProtocolIE_Single_Container_122P24_print; +asn_constr_check_f ProtocolIE_Single_Container_122P24_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P24_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P24_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P24_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P24_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P24_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P24_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P24_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P24_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P25; +asn_struct_free_f ProtocolIE_Single_Container_122P25_free; +asn_struct_print_f ProtocolIE_Single_Container_122P25_print; +asn_constr_check_f ProtocolIE_Single_Container_122P25_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P25_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P25_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P25_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P25_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P25_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P25_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P25_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P25_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P26; +asn_struct_free_f ProtocolIE_Single_Container_122P26_free; +asn_struct_print_f ProtocolIE_Single_Container_122P26_print; +asn_constr_check_f ProtocolIE_Single_Container_122P26_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P26_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P26_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P26_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P26_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P26_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P26_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P26_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P26_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P27; +asn_struct_free_f ProtocolIE_Single_Container_122P27_free; +asn_struct_print_f ProtocolIE_Single_Container_122P27_print; +asn_constr_check_f ProtocolIE_Single_Container_122P27_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P27_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P27_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P27_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P27_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P27_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P27_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P27_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P27_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P28; +asn_struct_free_f ProtocolIE_Single_Container_122P28_free; +asn_struct_print_f ProtocolIE_Single_Container_122P28_print; +asn_constr_check_f ProtocolIE_Single_Container_122P28_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P28_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P28_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P28_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P28_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P28_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P28_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P28_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P28_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P29; +asn_struct_free_f ProtocolIE_Single_Container_122P29_free; +asn_struct_print_f ProtocolIE_Single_Container_122P29_print; +asn_constr_check_f ProtocolIE_Single_Container_122P29_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P29_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P29_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P29_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P29_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P29_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P29_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P29_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P29_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P30; +asn_struct_free_f ProtocolIE_Single_Container_122P30_free; +asn_struct_print_f ProtocolIE_Single_Container_122P30_print; +asn_constr_check_f ProtocolIE_Single_Container_122P30_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P30_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P30_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P30_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P30_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P30_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P30_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P30_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P30_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P31; +asn_struct_free_f ProtocolIE_Single_Container_122P31_free; +asn_struct_print_f ProtocolIE_Single_Container_122P31_print; +asn_constr_check_f ProtocolIE_Single_Container_122P31_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P31_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P31_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P31_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P31_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P31_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P31_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P31_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P31_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P32; +asn_struct_free_f ProtocolIE_Single_Container_122P32_free; +asn_struct_print_f ProtocolIE_Single_Container_122P32_print; +asn_constr_check_f ProtocolIE_Single_Container_122P32_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P32_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P32_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P32_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P32_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P32_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P32_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P32_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P32_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P33; +asn_struct_free_f ProtocolIE_Single_Container_122P33_free; +asn_struct_print_f ProtocolIE_Single_Container_122P33_print; +asn_constr_check_f ProtocolIE_Single_Container_122P33_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P33_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P33_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P33_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P33_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P33_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P33_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P33_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P33_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P34; +asn_struct_free_f ProtocolIE_Single_Container_122P34_free; +asn_struct_print_f ProtocolIE_Single_Container_122P34_print; +asn_constr_check_f ProtocolIE_Single_Container_122P34_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P34_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P34_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P34_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P34_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P34_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P34_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P34_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P34_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P35; +asn_struct_free_f ProtocolIE_Single_Container_122P35_free; +asn_struct_print_f ProtocolIE_Single_Container_122P35_print; +asn_constr_check_f ProtocolIE_Single_Container_122P35_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P35_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P35_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P35_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P35_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P35_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P35_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P35_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P35_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P36; +asn_struct_free_f ProtocolIE_Single_Container_122P36_free; +asn_struct_print_f ProtocolIE_Single_Container_122P36_print; +asn_constr_check_f ProtocolIE_Single_Container_122P36_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P36_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P36_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P36_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P36_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P36_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P36_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P36_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P36_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P37; +asn_struct_free_f ProtocolIE_Single_Container_122P37_free; +asn_struct_print_f ProtocolIE_Single_Container_122P37_print; +asn_constr_check_f ProtocolIE_Single_Container_122P37_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P37_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P37_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P37_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P37_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P37_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P37_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P37_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P37_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P38; +asn_struct_free_f ProtocolIE_Single_Container_122P38_free; +asn_struct_print_f ProtocolIE_Single_Container_122P38_print; +asn_constr_check_f ProtocolIE_Single_Container_122P38_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P38_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P38_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P38_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P38_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P38_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P38_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P38_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P38_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P39; +asn_struct_free_f ProtocolIE_Single_Container_122P39_free; +asn_struct_print_f ProtocolIE_Single_Container_122P39_print; +asn_constr_check_f ProtocolIE_Single_Container_122P39_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P39_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P39_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P39_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P39_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P39_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P39_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P39_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P39_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P40; +asn_struct_free_f ProtocolIE_Single_Container_122P40_free; +asn_struct_print_f ProtocolIE_Single_Container_122P40_print; +asn_constr_check_f ProtocolIE_Single_Container_122P40_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P40_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P40_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P40_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P40_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P40_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P40_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P40_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P40_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P41; +asn_struct_free_f ProtocolIE_Single_Container_122P41_free; +asn_struct_print_f ProtocolIE_Single_Container_122P41_print; +asn_constr_check_f ProtocolIE_Single_Container_122P41_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P41_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P41_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P41_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P41_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P41_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P41_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P41_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P41_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P42; +asn_struct_free_f ProtocolIE_Single_Container_122P42_free; +asn_struct_print_f ProtocolIE_Single_Container_122P42_print; +asn_constr_check_f ProtocolIE_Single_Container_122P42_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P42_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P42_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P42_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P42_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P42_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P42_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P42_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P42_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P43; +asn_struct_free_f ProtocolIE_Single_Container_122P43_free; +asn_struct_print_f ProtocolIE_Single_Container_122P43_print; +asn_constr_check_f ProtocolIE_Single_Container_122P43_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P43_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P43_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P43_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P43_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P43_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P43_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P43_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P43_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P44; +asn_struct_free_f ProtocolIE_Single_Container_122P44_free; +asn_struct_print_f ProtocolIE_Single_Container_122P44_print; +asn_constr_check_f ProtocolIE_Single_Container_122P44_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P44_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P44_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P44_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P44_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P44_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P44_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P44_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P44_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P45; +asn_struct_free_f ProtocolIE_Single_Container_122P45_free; +asn_struct_print_f ProtocolIE_Single_Container_122P45_print; +asn_constr_check_f ProtocolIE_Single_Container_122P45_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P45_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P45_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P45_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P45_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P45_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P45_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P45_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P45_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P46; +asn_struct_free_f ProtocolIE_Single_Container_122P46_free; +asn_struct_print_f ProtocolIE_Single_Container_122P46_print; +asn_constr_check_f ProtocolIE_Single_Container_122P46_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P46_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P46_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P46_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P46_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P46_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P46_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P46_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P46_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P47; +asn_struct_free_f ProtocolIE_Single_Container_122P47_free; +asn_struct_print_f ProtocolIE_Single_Container_122P47_print; +asn_constr_check_f ProtocolIE_Single_Container_122P47_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P47_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P47_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P47_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P47_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P47_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P47_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P47_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P47_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P48; +asn_struct_free_f ProtocolIE_Single_Container_122P48_free; +asn_struct_print_f ProtocolIE_Single_Container_122P48_print; +asn_constr_check_f ProtocolIE_Single_Container_122P48_constraint; +ber_type_decoder_f ProtocolIE_Single_Container_122P48_decode_ber; +der_type_encoder_f ProtocolIE_Single_Container_122P48_encode_der; +xer_type_decoder_f ProtocolIE_Single_Container_122P48_decode_xer; +xer_type_encoder_f ProtocolIE_Single_Container_122P48_encode_xer; +per_type_decoder_f ProtocolIE_Single_Container_122P48_decode_uper; +per_type_encoder_f ProtocolIE_Single_Container_122P48_encode_uper; +per_type_decoder_f ProtocolIE_Single_Container_122P48_decode_aper; +per_type_encoder_f ProtocolIE_Single_Container_122P48_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Single_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.c new file mode 100644 index 0000000..3514afe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "QCI.h" + +int +QCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_QCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_QCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_QCI = { + "QCI", + "QCI", + &asn_OP_NativeInteger, + asn_DEF_QCI_tags_1, + sizeof(asn_DEF_QCI_tags_1) + /sizeof(asn_DEF_QCI_tags_1[0]), /* 1 */ + asn_DEF_QCI_tags_1, /* Same as above */ + sizeof(asn_DEF_QCI_tags_1) + /sizeof(asn_DEF_QCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_QCI_constr_1, QCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.h new file mode 100644 index 0000000..05415c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/QCI.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _QCI_H_ +#define _QCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* QCI */ +typedef long QCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_QCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_QCI; +asn_struct_free_f QCI_free; +asn_struct_print_f QCI_print; +asn_constr_check_f QCI_constraint; +ber_type_decoder_f QCI_decode_ber; +der_type_encoder_f QCI_encode_der; +xer_type_decoder_f QCI_decode_xer; +xer_type_encoder_f QCI_encode_xer; +per_type_decoder_f QCI_decode_uper; +per_type_encoder_f QCI_encode_uper; +per_type_decoder_f QCI_decode_aper; +per_type_encoder_f QCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _QCI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..ee95236 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionDefinition */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..d5979e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunction-Item.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..1d72f42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..02dc43b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..d743458 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranFunctionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 1, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..2e39d30 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..8076f5d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..1fb6ce1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..51cdd14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ricCause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RICcause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricCause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricCause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..697f00f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RICcause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + RICcause_t ricCause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..82b4afe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..d60629a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctions-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..b473461 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..fec49cc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..e887426 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..cd1bdd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..258e3ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..c6e67f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..ddf8258 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..743695b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..f8f4ae1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricCause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RICcause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricCause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricCause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..0d8289f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICcause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + RICcause_t ricCause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..e04f4ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-Single-Container.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..55c64c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..3fa5bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..9773c4d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..0adcc63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..3f21b0e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionDefinition.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.c new file mode 100644 index 0000000..569e1d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.h new file mode 100644 index 0000000..1c1b232 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.c new file mode 100644 index 0000000..feda0f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.h new file mode 100644 index 0000000..b944075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactionType.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..2995d90 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..d92963b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..3f33c46 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..0c46518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcallProcessID.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.c new file mode 100644 index 0000000..3844c1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.c @@ -0,0 +1,110 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcause.h" + +asn_per_constraints_t asn_PER_type_RICcause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICcause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcause, choice.radioNetwork), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRadioNetwork, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "radioNetwork" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcause, choice.ric), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* misc */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ric */ +}; +asn_CHOICE_specifics_t asn_SPC_RICcause_specs_1 = { + sizeof(struct RICcause), + offsetof(struct RICcause, _asn_ctx), + offsetof(struct RICcause, present), + sizeof(((struct RICcause *)0)->present), + asn_MAP_RICcause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcause = { + "RICcause", + "RICcause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_RICcause_constr_1, CHOICE_constraint }, + asn_MBR_RICcause_1, + 5, /* Elements count */ + &asn_SPC_RICcause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.h new file mode 100644 index 0000000..c3daf1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcause.h @@ -0,0 +1,86 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcause_H_ +#define _RICcause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRadioNetwork.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "CauseRIC.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcause_PR { + RICcause_PR_NOTHING, /* No components present */ + RICcause_PR_radioNetwork, + RICcause_PR_transport, + RICcause_PR_protocol, + RICcause_PR_misc, + RICcause_PR_ric + /* Extensions may appear below */ + +} RICcause_PR; + +/* RICcause */ +typedef struct RICcause { + RICcause_PR present; + union RICcause_u { + CauseRadioNetwork_t radioNetwork; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + CauseRIC_t ric; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcause; +extern asn_CHOICE_specifics_t asn_SPC_RICcause_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcause_1[5]; +extern asn_per_constraints_t asn_PER_type_RICcause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..1a5a1b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..c8d778f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..2359573 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..a3d4ab9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_119P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..2e61699 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..4ae7507 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_119P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..6e9115a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..d356e40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolHeader.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..35d5276 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..1725523 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolMessage.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..ca9f719 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..a6bf5c5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_119P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..1179d09 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..3bf16a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICcontrolStatus.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..864c3ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..7c8790d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.c new file mode 100644 index 0000000..5c41fd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.h new file mode 100644 index 0000000..c8a0982 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindication.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_119P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..5188309 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..628460a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationHeader.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..aaa95c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..4d0efd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationMessage.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..d9e2e53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..74ab9c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationSN.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.c new file mode 100644 index 0000000..1732e22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ba944a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICindicationType.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.c new file mode 100644 index 0000000..1bde4a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.c @@ -0,0 +1,138 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricRequestSequenceNumber_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricRequestSequenceNumber_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestSequenceNumber), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestSequenceNumber_constr_3, memb_ricRequestSequenceNumber_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestSequenceNumber" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricRequestSequenceNumber */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.h new file mode 100644 index 0000000..a630e20 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICrequestID.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricRequestSequenceNumber; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..ddac87c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7a503a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceQuery.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_119P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..dd769a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..06a3779 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_119P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..ee380a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..891ec94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_119P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..88bf7ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..5a25bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_119P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.c new file mode 100644 index 0000000..c44e042 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscription.h" + +static asn_TYPE_member_t asn_MBR_RICsubscription_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscription, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscription, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscription_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscription_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscription_specs_1 = { + sizeof(struct RICsubscription), + offsetof(struct RICsubscription, _asn_ctx), + asn_MAP_RICsubscription_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscription = { + "RICsubscription", + "RICsubscription", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscription_tags_1, + sizeof(asn_DEF_RICsubscription_tags_1) + /sizeof(asn_DEF_RICsubscription_tags_1[0]), /* 1 */ + asn_DEF_RICsubscription_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscription_tags_1) + /sizeof(asn_DEF_RICsubscription_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscription_1, + 2, /* Elements count */ + &asn_SPC_RICsubscription_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.h new file mode 100644 index 0000000..3f60942 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscription.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscription_H_ +#define _RICsubscription_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscription */ +typedef struct RICsubscription { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscription_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscription; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscription_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..1cb9b2b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..6b741ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_119P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..39a2d46 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..ee29522 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_119P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..2f59c38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..02360be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_119P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..fb4a638 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..6b3c8d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_119P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..5446552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d1f7c6e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_119P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..6994b0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..551f2b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_119P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..bf63345 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.c @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..40e6ef2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentAction.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..b421aba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..8b91dbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..effe4f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.c @@ -0,0 +1,105 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..50ee211 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RICtimeToWait.h @@ -0,0 +1,88 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.c new file mode 100644 index 0000000..2caface --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RLC-Status.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_RLC_Status_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Status, reestablishment_Indication), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Reestablishment_Indication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reestablishment-Indication" + }, + { ATF_POINTER, 1, offsetof(struct RLC_Status, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P186, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_RLC_Status_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_RLC_Status_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RLC_Status_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reestablishment-Indication */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RLC_Status_specs_1 = { + sizeof(struct RLC_Status), + offsetof(struct RLC_Status, _asn_ctx), + asn_MAP_RLC_Status_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RLC_Status_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RLC_Status = { + "RLC-Status", + "RLC-Status", + &asn_OP_SEQUENCE, + asn_DEF_RLC_Status_tags_1, + sizeof(asn_DEF_RLC_Status_tags_1) + /sizeof(asn_DEF_RLC_Status_tags_1[0]), /* 1 */ + asn_DEF_RLC_Status_tags_1, /* Same as above */ + sizeof(asn_DEF_RLC_Status_tags_1) + /sizeof(asn_DEF_RLC_Status_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RLC_Status_1, + 2, /* Elements count */ + &asn_SPC_RLC_Status_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.h new file mode 100644 index 0000000..7a50f0c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLC-Status.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RLC_Status_H_ +#define _RLC_Status_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Reestablishment-Indication.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* RLC-Status */ +typedef struct RLC_Status { + Reestablishment_Indication_t reestablishment_Indication; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLC_Status_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RLC_Status; +extern asn_SEQUENCE_specifics_t asn_SPC_RLC_Status_specs_1; +extern asn_TYPE_member_t asn_MBR_RLC_Status_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RLC_Status_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.c new file mode 100644 index 0000000..04067a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RLCMode.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RLCMode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RLCMode_value2enum_1[] = { + { 0, 6, "rlc-am" }, + { 1, 20, "rlc-um-bidirectional" }, + { 2, 24, "rlc-um-unidirectional-ul" }, + { 3, 24, "rlc-um-unidirectional-dl" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RLCMode_enum2value_1[] = { + 0, /* rlc-am(0) */ + 1, /* rlc-um-bidirectional(1) */ + 3, /* rlc-um-unidirectional-dl(3) */ + 2 /* rlc-um-unidirectional-ul(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RLCMode_specs_1 = { + asn_MAP_RLCMode_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RLCMode_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RLCMode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RLCMode = { + "RLCMode", + "RLCMode", + &asn_OP_NativeEnumerated, + asn_DEF_RLCMode_tags_1, + sizeof(asn_DEF_RLCMode_tags_1) + /sizeof(asn_DEF_RLCMode_tags_1[0]), /* 1 */ + asn_DEF_RLCMode_tags_1, /* Same as above */ + sizeof(asn_DEF_RLCMode_tags_1) + /sizeof(asn_DEF_RLCMode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RLCMode_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RLCMode_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.h new file mode 100644 index 0000000..3399d12 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLCMode.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RLCMode_H_ +#define _RLCMode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RLCMode { + RLCMode_rlc_am = 0, + RLCMode_rlc_um_bidirectional = 1, + RLCMode_rlc_um_unidirectional_ul = 2, + RLCMode_rlc_um_unidirectional_dl = 3 + /* + * Enumeration is extensible + */ +} e_RLCMode; + +/* RLCMode */ +typedef long RLCMode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RLCMode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RLCMode; +extern const asn_INTEGER_specifics_t asn_SPC_RLCMode_specs_1; +asn_struct_free_f RLCMode_free; +asn_struct_print_f RLCMode_print; +asn_constr_check_f RLCMode_constraint; +ber_type_decoder_f RLCMode_decode_ber; +der_type_encoder_f RLCMode_encode_der; +xer_type_decoder_f RLCMode_decode_xer; +xer_type_encoder_f RLCMode_encode_xer; +per_type_decoder_f RLCMode_decode_uper; +per_type_encoder_f RLCMode_encode_uper; +per_type_decoder_f RLCMode_decode_aper; +per_type_encoder_f RLCMode_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RLCMode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.c new file mode 100644 index 0000000..191db41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RLFIndication.h" + +static asn_TYPE_member_t asn_MBR_RLFIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLFIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P38, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RLFIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RLFIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RLFIndication_specs_1 = { + sizeof(struct RLFIndication), + offsetof(struct RLFIndication, _asn_ctx), + asn_MAP_RLFIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RLFIndication = { + "RLFIndication", + "RLFIndication", + &asn_OP_SEQUENCE, + asn_DEF_RLFIndication_tags_1, + sizeof(asn_DEF_RLFIndication_tags_1) + /sizeof(asn_DEF_RLFIndication_tags_1[0]), /* 1 */ + asn_DEF_RLFIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_RLFIndication_tags_1) + /sizeof(asn_DEF_RLFIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RLFIndication_1, + 1, /* Elements count */ + &asn_SPC_RLFIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.h new file mode 100644 index 0000000..55cac2a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RLFIndication.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RLFIndication_H_ +#define _RLFIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RLFIndication */ +typedef struct RLFIndication { + ProtocolIE_Container_119P38_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLFIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RLFIndication; + +#ifdef __cplusplus +} +#endif + +#endif /* _RLFIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.c new file mode 100644 index 0000000..cf59570 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RNL-Header.h" + +#include "GlobalENB-ID.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_RNL_Header_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNL_Header, source_GlobalENB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "source-GlobalENB-ID" + }, + { ATF_POINTER, 2, offsetof(struct RNL_Header, target_GlobalENB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "target-GlobalENB-ID" + }, + { ATF_POINTER, 1, offsetof(struct RNL_Header, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_RNL_Header_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_RNL_Header_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RNL_Header_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* target-GlobalENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RNL_Header_specs_1 = { + sizeof(struct RNL_Header), + offsetof(struct RNL_Header, _asn_ctx), + asn_MAP_RNL_Header_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RNL_Header_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RNL_Header = { + "RNL-Header", + "RNL-Header", + &asn_OP_SEQUENCE, + asn_DEF_RNL_Header_tags_1, + sizeof(asn_DEF_RNL_Header_tags_1) + /sizeof(asn_DEF_RNL_Header_tags_1[0]), /* 1 */ + asn_DEF_RNL_Header_tags_1, /* Same as above */ + sizeof(asn_DEF_RNL_Header_tags_1) + /sizeof(asn_DEF_RNL_Header_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RNL_Header_1, + 3, /* Elements count */ + &asn_SPC_RNL_Header_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.h new file mode 100644 index 0000000..5fd09af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNL-Header.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RNL_Header_H_ +#define _RNL_Header_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalENB_ID; +struct ProtocolExtensionContainer; + +/* RNL-Header */ +typedef struct RNL_Header { + GlobalENB_ID_t source_GlobalENB_ID; + struct GlobalENB_ID *target_GlobalENB_ID; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNL_Header_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RNL_Header; + +#ifdef __cplusplus +} +#endif + +#endif /* _RNL_Header_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.c new file mode 100644 index 0000000..380b5a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RNTP-Threshold.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RNTP_Threshold_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RNTP_Threshold_value2enum_1[] = { + { 0, 13, "minusInfinity" }, + { 1, 11, "minusEleven" }, + { 2, 8, "minusTen" }, + { 3, 9, "minusNine" }, + { 4, 10, "minusEight" }, + { 5, 10, "minusSeven" }, + { 6, 8, "minusSix" }, + { 7, 9, "minusFive" }, + { 8, 9, "minusFour" }, + { 9, 10, "minusThree" }, + { 10, 8, "minusTwo" }, + { 11, 8, "minusOne" }, + { 12, 4, "zero" }, + { 13, 3, "one" }, + { 14, 3, "two" }, + { 15, 5, "three" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RNTP_Threshold_enum2value_1[] = { + 4, /* minusEight(4) */ + 1, /* minusEleven(1) */ + 7, /* minusFive(7) */ + 8, /* minusFour(8) */ + 0, /* minusInfinity(0) */ + 3, /* minusNine(3) */ + 11, /* minusOne(11) */ + 5, /* minusSeven(5) */ + 6, /* minusSix(6) */ + 2, /* minusTen(2) */ + 9, /* minusThree(9) */ + 10, /* minusTwo(10) */ + 13, /* one(13) */ + 15, /* three(15) */ + 14, /* two(14) */ + 12 /* zero(12) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RNTP_Threshold_specs_1 = { + asn_MAP_RNTP_Threshold_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RNTP_Threshold_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RNTP_Threshold_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RNTP_Threshold = { + "RNTP-Threshold", + "RNTP-Threshold", + &asn_OP_NativeEnumerated, + asn_DEF_RNTP_Threshold_tags_1, + sizeof(asn_DEF_RNTP_Threshold_tags_1) + /sizeof(asn_DEF_RNTP_Threshold_tags_1[0]), /* 1 */ + asn_DEF_RNTP_Threshold_tags_1, /* Same as above */ + sizeof(asn_DEF_RNTP_Threshold_tags_1) + /sizeof(asn_DEF_RNTP_Threshold_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RNTP_Threshold_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RNTP_Threshold_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.h new file mode 100644 index 0000000..44c5566 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RNTP-Threshold.h @@ -0,0 +1,86 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RNTP_Threshold_H_ +#define _RNTP_Threshold_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RNTP_Threshold { + RNTP_Threshold_minusInfinity = 0, + RNTP_Threshold_minusEleven = 1, + RNTP_Threshold_minusTen = 2, + RNTP_Threshold_minusNine = 3, + RNTP_Threshold_minusEight = 4, + RNTP_Threshold_minusSeven = 5, + RNTP_Threshold_minusSix = 6, + RNTP_Threshold_minusFive = 7, + RNTP_Threshold_minusFour = 8, + RNTP_Threshold_minusThree = 9, + RNTP_Threshold_minusTwo = 10, + RNTP_Threshold_minusOne = 11, + RNTP_Threshold_zero = 12, + RNTP_Threshold_one = 13, + RNTP_Threshold_two = 14, + RNTP_Threshold_three = 15 + /* + * Enumeration is extensible + */ +} e_RNTP_Threshold; + +/* RNTP-Threshold */ +typedef long RNTP_Threshold_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RNTP_Threshold_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RNTP_Threshold; +extern const asn_INTEGER_specifics_t asn_SPC_RNTP_Threshold_specs_1; +asn_struct_free_f RNTP_Threshold_free; +asn_struct_print_f RNTP_Threshold_print; +asn_constr_check_f RNTP_Threshold_constraint; +ber_type_decoder_f RNTP_Threshold_decode_ber; +der_type_encoder_f RNTP_Threshold_encode_der; +xer_type_decoder_f RNTP_Threshold_decode_xer; +xer_type_encoder_f RNTP_Threshold_encode_xer; +per_type_decoder_f RNTP_Threshold_decode_uper; +per_type_encoder_f RNTP_Threshold_encode_uper; +per_type_decoder_f RNTP_Threshold_decode_aper; +per_type_encoder_f RNTP_Threshold_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RNTP_Threshold_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.c new file mode 100644 index 0000000..3e68186 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRC-Config-Ind.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RRC_Config_Ind_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RRC_Config_Ind_value2enum_1[] = { + { 0, 11, "full-config" }, + { 1, 12, "delta-config" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RRC_Config_Ind_enum2value_1[] = { + 1, /* delta-config(1) */ + 0 /* full-config(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RRC_Config_Ind_specs_1 = { + asn_MAP_RRC_Config_Ind_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RRC_Config_Ind_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RRC_Config_Ind_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRC_Config_Ind = { + "RRC-Config-Ind", + "RRC-Config-Ind", + &asn_OP_NativeEnumerated, + asn_DEF_RRC_Config_Ind_tags_1, + sizeof(asn_DEF_RRC_Config_Ind_tags_1) + /sizeof(asn_DEF_RRC_Config_Ind_tags_1[0]), /* 1 */ + asn_DEF_RRC_Config_Ind_tags_1, /* Same as above */ + sizeof(asn_DEF_RRC_Config_Ind_tags_1) + /sizeof(asn_DEF_RRC_Config_Ind_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RRC_Config_Ind_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RRC_Config_Ind_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.h new file mode 100644 index 0000000..9c9fa94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Config-Ind.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRC_Config_Ind_H_ +#define _RRC_Config_Ind_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRC_Config_Ind { + RRC_Config_Ind_full_config = 0, + RRC_Config_Ind_delta_config = 1 + /* + * Enumeration is extensible + */ +} e_RRC_Config_Ind; + +/* RRC-Config-Ind */ +typedef long RRC_Config_Ind_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RRC_Config_Ind_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RRC_Config_Ind; +extern const asn_INTEGER_specifics_t asn_SPC_RRC_Config_Ind_specs_1; +asn_struct_free_f RRC_Config_Ind_free; +asn_struct_print_f RRC_Config_Ind_print; +asn_constr_check_f RRC_Config_Ind_constraint; +ber_type_decoder_f RRC_Config_Ind_decode_ber; +der_type_encoder_f RRC_Config_Ind_encode_der; +xer_type_decoder_f RRC_Config_Ind_decode_xer; +xer_type_encoder_f RRC_Config_Ind_encode_xer; +per_type_decoder_f RRC_Config_Ind_decode_uper; +per_type_encoder_f RRC_Config_Ind_encode_uper; +per_type_decoder_f RRC_Config_Ind_decode_aper; +per_type_encoder_f RRC_Config_Ind_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRC_Config_Ind_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.c new file mode 100644 index 0000000..059f8d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRC-Context.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RRC_Context_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRC_Context = { + "RRC-Context", + "RRC-Context", + &asn_OP_OCTET_STRING, + asn_DEF_RRC_Context_tags_1, + sizeof(asn_DEF_RRC_Context_tags_1) + /sizeof(asn_DEF_RRC_Context_tags_1[0]), /* 1 */ + asn_DEF_RRC_Context_tags_1, /* Same as above */ + sizeof(asn_DEF_RRC_Context_tags_1) + /sizeof(asn_DEF_RRC_Context_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.h new file mode 100644 index 0000000..b6600dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRC-Context.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRC_Context_H_ +#define _RRC_Context_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRC-Context */ +typedef OCTET_STRING_t RRC_Context_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRC_Context; +asn_struct_free_f RRC_Context_free; +asn_struct_print_f RRC_Context_print; +asn_constr_check_f RRC_Context_constraint; +ber_type_decoder_f RRC_Context_decode_ber; +der_type_encoder_f RRC_Context_encode_der; +xer_type_decoder_f RRC_Context_decode_xer; +xer_type_encoder_f RRC_Context_encode_xer; +per_type_decoder_f RRC_Context_decode_uper; +per_type_encoder_f RRC_Context_encode_uper; +per_type_decoder_f RRC_Context_decode_aper; +per_type_encoder_f RRC_Context_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRC_Context_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.c new file mode 100644 index 0000000..36ab74e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRCConnReestabIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RRCConnReestabIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RRCConnReestabIndicator_value2enum_1[] = { + { 0, 22, "reconfigurationFailure" }, + { 1, 15, "handoverFailure" }, + { 2, 12, "otherFailure" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RRCConnReestabIndicator_enum2value_1[] = { + 1, /* handoverFailure(1) */ + 2, /* otherFailure(2) */ + 0 /* reconfigurationFailure(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RRCConnReestabIndicator_specs_1 = { + asn_MAP_RRCConnReestabIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RRCConnReestabIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RRCConnReestabIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnReestabIndicator = { + "RRCConnReestabIndicator", + "RRCConnReestabIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_RRCConnReestabIndicator_tags_1, + sizeof(asn_DEF_RRCConnReestabIndicator_tags_1) + /sizeof(asn_DEF_RRCConnReestabIndicator_tags_1[0]), /* 1 */ + asn_DEF_RRCConnReestabIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnReestabIndicator_tags_1) + /sizeof(asn_DEF_RRCConnReestabIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RRCConnReestabIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RRCConnReestabIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.h new file mode 100644 index 0000000..876d3f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnReestabIndicator.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRCConnReestabIndicator_H_ +#define _RRCConnReestabIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnReestabIndicator { + RRCConnReestabIndicator_reconfigurationFailure = 0, + RRCConnReestabIndicator_handoverFailure = 1, + RRCConnReestabIndicator_otherFailure = 2 + /* + * Enumeration is extensible + */ +} e_RRCConnReestabIndicator; + +/* RRCConnReestabIndicator */ +typedef long RRCConnReestabIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RRCConnReestabIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RRCConnReestabIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_RRCConnReestabIndicator_specs_1; +asn_struct_free_f RRCConnReestabIndicator_free; +asn_struct_print_f RRCConnReestabIndicator_print; +asn_constr_check_f RRCConnReestabIndicator_constraint; +ber_type_decoder_f RRCConnReestabIndicator_decode_ber; +der_type_encoder_f RRCConnReestabIndicator_encode_der; +xer_type_decoder_f RRCConnReestabIndicator_decode_xer; +xer_type_encoder_f RRCConnReestabIndicator_encode_xer; +per_type_decoder_f RRCConnReestabIndicator_decode_uper; +per_type_encoder_f RRCConnReestabIndicator_encode_uper; +per_type_decoder_f RRCConnReestabIndicator_decode_aper; +per_type_encoder_f RRCConnReestabIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnReestabIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.c new file mode 100644 index 0000000..7135006 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRCConnSetupIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RRCConnSetupIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RRCConnSetupIndicator_value2enum_1[] = { + { 0, 12, "rrcConnSetup" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RRCConnSetupIndicator_enum2value_1[] = { + 0 /* rrcConnSetup(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RRCConnSetupIndicator_specs_1 = { + asn_MAP_RRCConnSetupIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RRCConnSetupIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RRCConnSetupIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnSetupIndicator = { + "RRCConnSetupIndicator", + "RRCConnSetupIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_RRCConnSetupIndicator_tags_1, + sizeof(asn_DEF_RRCConnSetupIndicator_tags_1) + /sizeof(asn_DEF_RRCConnSetupIndicator_tags_1[0]), /* 1 */ + asn_DEF_RRCConnSetupIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnSetupIndicator_tags_1) + /sizeof(asn_DEF_RRCConnSetupIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RRCConnSetupIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RRCConnSetupIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.h new file mode 100644 index 0000000..a502abe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCConnSetupIndicator.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRCConnSetupIndicator_H_ +#define _RRCConnSetupIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnSetupIndicator { + RRCConnSetupIndicator_rrcConnSetup = 0 + /* + * Enumeration is extensible + */ +} e_RRCConnSetupIndicator; + +/* RRCConnSetupIndicator */ +typedef long RRCConnSetupIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RRCConnSetupIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RRCConnSetupIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_RRCConnSetupIndicator_specs_1; +asn_struct_free_f RRCConnSetupIndicator_free; +asn_struct_print_f RRCConnSetupIndicator_print; +asn_constr_check_f RRCConnSetupIndicator_constraint; +ber_type_decoder_f RRCConnSetupIndicator_decode_ber; +der_type_encoder_f RRCConnSetupIndicator_encode_der; +xer_type_decoder_f RRCConnSetupIndicator_decode_xer; +xer_type_encoder_f RRCConnSetupIndicator_encode_xer; +per_type_decoder_f RRCConnSetupIndicator_decode_uper; +per_type_encoder_f RRCConnSetupIndicator_encode_uper; +per_type_decoder_f RRCConnSetupIndicator_decode_aper; +per_type_encoder_f RRCConnSetupIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnSetupIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.c new file mode 100644 index 0000000..7951f3c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRCContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RRCContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRCContainer = { + "RRCContainer", + "RRCContainer", + &asn_OP_OCTET_STRING, + asn_DEF_RRCContainer_tags_1, + sizeof(asn_DEF_RRCContainer_tags_1) + /sizeof(asn_DEF_RRCContainer_tags_1[0]), /* 1 */ + asn_DEF_RRCContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCContainer_tags_1) + /sizeof(asn_DEF_RRCContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.h new file mode 100644 index 0000000..ebd1537 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRCContainer_H_ +#define _RRCContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCContainer */ +typedef OCTET_STRING_t RRCContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCContainer; +asn_struct_free_f RRCContainer_free; +asn_struct_print_f RRCContainer_print; +asn_constr_check_f RRCContainer_constraint; +ber_type_decoder_f RRCContainer_decode_ber; +der_type_encoder_f RRCContainer_encode_der; +xer_type_decoder_f RRCContainer_decode_xer; +xer_type_encoder_f RRCContainer_encode_xer; +per_type_decoder_f RRCContainer_decode_uper; +per_type_encoder_f RRCContainer_encode_uper; +per_type_decoder_f RRCContainer_decode_aper; +per_type_encoder_f RRCContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.c new file mode 100644 index 0000000..c4bbc5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RRCTransfer.h" + +static asn_TYPE_member_t asn_MBR_RRCTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCTransfer, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P82, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RRCTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRCTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCTransfer_specs_1 = { + sizeof(struct RRCTransfer), + offsetof(struct RRCTransfer, _asn_ctx), + asn_MAP_RRCTransfer_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCTransfer = { + "RRCTransfer", + "RRCTransfer", + &asn_OP_SEQUENCE, + asn_DEF_RRCTransfer_tags_1, + sizeof(asn_DEF_RRCTransfer_tags_1) + /sizeof(asn_DEF_RRCTransfer_tags_1[0]), /* 1 */ + asn_DEF_RRCTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCTransfer_tags_1) + /sizeof(asn_DEF_RRCTransfer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RRCTransfer_1, + 1, /* Elements count */ + &asn_SPC_RRCTransfer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.h new file mode 100644 index 0000000..fb5c3c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RRCTransfer.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RRCTransfer_H_ +#define _RRCTransfer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCTransfer */ +typedef struct RRCTransfer { + ProtocolIE_Container_119P82_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCTransfer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.c new file mode 100644 index 0000000..c5c9390 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.c @@ -0,0 +1,122 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RSRPMRList.h" + +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_RSRPMRList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 1, 128 } /* (SIZE(1..128)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSRPMRList__Member, rSRPMeasurementResult), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRPMeasurementResult, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rSRPMeasurementResult" + }, + { ATF_POINTER, 1, offsetof(struct RSRPMRList__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P188, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rSRPMeasurementResult */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct RSRPMRList__Member), + offsetof(struct RSRPMRList__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 2, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 2, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RSRPMRList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RSRPMRList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RSRPMRList_specs_1 = { + sizeof(struct RSRPMRList), + offsetof(struct RSRPMRList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RSRPMRList = { + "RSRPMRList", + "RSRPMRList", + &asn_OP_SEQUENCE_OF, + asn_DEF_RSRPMRList_tags_1, + sizeof(asn_DEF_RSRPMRList_tags_1) + /sizeof(asn_DEF_RSRPMRList_tags_1[0]), /* 1 */ + asn_DEF_RSRPMRList_tags_1, /* Same as above */ + sizeof(asn_DEF_RSRPMRList_tags_1) + /sizeof(asn_DEF_RSRPMRList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RSRPMRList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RSRPMRList_1, + 1, /* Single element */ + &asn_SPC_RSRPMRList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.h new file mode 100644 index 0000000..7faf138 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMRList.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RSRPMRList_H_ +#define _RSRPMRList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "RSRPMeasurementResult.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct RSRPMRList__Member { + RSRPMeasurementResult_t rSRPMeasurementResult; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMRList__Member; + +/* RSRPMRList */ +typedef struct RSRPMRList { + A_SEQUENCE_OF(RSRPMRList__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMRList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSRPMRList; +extern asn_SET_OF_specifics_t asn_SPC_RSRPMRList_specs_1; +extern asn_TYPE_member_t asn_MBR_RSRPMRList_1[1]; +extern asn_per_constraints_t asn_PER_type_RSRPMRList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RSRPMRList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.c new file mode 100644 index 0000000..9f66317 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.c @@ -0,0 +1,162 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RSRPMeasurementResult.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_rSRPMeasured_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 97)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_rSRPMeasured_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 0, 97 } /* (0..97,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_RSRPMeasurementResult_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 9 } /* (SIZE(1..9)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSRPMeasurementResult__Member, rSRPCellID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rSRPCellID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RSRPMeasurementResult__Member, rSRPMeasured), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_rSRPMeasured_constr_4, memb_rSRPMeasured_constraint_2 }, + 0, 0, /* No default value */ + "rSRPMeasured" + }, + { ATF_POINTER, 1, offsetof(struct RSRPMeasurementResult__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P187, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rSRPCellID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rSRPMeasured */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct RSRPMeasurementResult__Member), + offsetof(struct RSRPMeasurementResult__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RSRPMeasurementResult_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RSRPMeasurementResult_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RSRPMeasurementResult_specs_1 = { + sizeof(struct RSRPMeasurementResult), + offsetof(struct RSRPMeasurementResult, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RSRPMeasurementResult = { + "RSRPMeasurementResult", + "RSRPMeasurementResult", + &asn_OP_SEQUENCE_OF, + asn_DEF_RSRPMeasurementResult_tags_1, + sizeof(asn_DEF_RSRPMeasurementResult_tags_1) + /sizeof(asn_DEF_RSRPMeasurementResult_tags_1[0]), /* 1 */ + asn_DEF_RSRPMeasurementResult_tags_1, /* Same as above */ + sizeof(asn_DEF_RSRPMeasurementResult_tags_1) + /sizeof(asn_DEF_RSRPMeasurementResult_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RSRPMeasurementResult_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RSRPMeasurementResult_1, + 1, /* Single element */ + &asn_SPC_RSRPMeasurementResult_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.h new file mode 100644 index 0000000..5cbf004 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RSRPMeasurementResult.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RSRPMeasurementResult_H_ +#define _RSRPMeasurementResult_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ECGI.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct RSRPMeasurementResult__Member { + ECGI_t rSRPCellID; + long rSRPMeasured; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMeasurementResult__Member; + +/* RSRPMeasurementResult */ +typedef struct RSRPMeasurementResult { + A_SEQUENCE_OF(RSRPMeasurementResult__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSRPMeasurementResult_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSRPMeasurementResult; +extern asn_SET_OF_specifics_t asn_SPC_RSRPMeasurementResult_specs_1; +extern asn_TYPE_member_t asn_MBR_RSRPMeasurementResult_1[1]; +extern asn_per_constraints_t asn_PER_type_RSRPMeasurementResult_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RSRPMeasurementResult_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.c new file mode 100644 index 0000000..8d84be2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.c @@ -0,0 +1,131 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RadioResourceStatus.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_RadioResourceStatus_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, dL_GBR_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_GBR_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-GBR-PRB-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, uL_GBR_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_GBR_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-GBR-PRB-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, dL_non_GBR_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_non_GBR_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-non-GBR-PRB-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, uL_non_GBR_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_non_GBR_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-non-GBR-PRB-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, dL_Total_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_Total_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dL-Total-PRB-usage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceStatus, uL_Total_PRB_usage), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_Total_PRB_usage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-Total-PRB-usage" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceStatus, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P183, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_RadioResourceStatus_oms_1[] = { 6 }; +static const ber_tlv_tag_t asn_DEF_RadioResourceStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RadioResourceStatus_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-GBR-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GBR-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-non-GBR-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-non-GBR-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* dL-Total-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* uL-Total-PRB-usage */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RadioResourceStatus_specs_1 = { + sizeof(struct RadioResourceStatus), + offsetof(struct RadioResourceStatus, _asn_ctx), + asn_MAP_RadioResourceStatus_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_RadioResourceStatus_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceStatus = { + "RadioResourceStatus", + "RadioResourceStatus", + &asn_OP_SEQUENCE, + asn_DEF_RadioResourceStatus_tags_1, + sizeof(asn_DEF_RadioResourceStatus_tags_1) + /sizeof(asn_DEF_RadioResourceStatus_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceStatus_tags_1) + /sizeof(asn_DEF_RadioResourceStatus_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RadioResourceStatus_1, + 7, /* Elements count */ + &asn_SPC_RadioResourceStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.h new file mode 100644 index 0000000..e6a8a20 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioResourceStatus.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RadioResourceStatus_H_ +#define _RadioResourceStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "DL-GBR-PRB-usage.h" +#include "UL-GBR-PRB-usage.h" +#include "DL-non-GBR-PRB-usage.h" +#include "UL-non-GBR-PRB-usage.h" +#include "DL-Total-PRB-usage.h" +#include "UL-Total-PRB-usage.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* RadioResourceStatus */ +typedef struct RadioResourceStatus { + DL_GBR_PRB_usage_t dL_GBR_PRB_usage; + UL_GBR_PRB_usage_t uL_GBR_PRB_usage; + DL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + UL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + DL_Total_PRB_usage_t dL_Total_PRB_usage; + UL_Total_PRB_usage_t uL_Total_PRB_usage; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceStatus; +extern asn_SEQUENCE_specifics_t asn_SPC_RadioResourceStatus_specs_1; +extern asn_TYPE_member_t asn_MBR_RadioResourceStatus_1[7]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RadioResourceStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.c new file mode 100644 index 0000000..9c897f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RadioframeAllocationOffset.h" + +int +RadioframeAllocationOffset_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RadioframeAllocationOffset_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RadioframeAllocationOffset_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RadioframeAllocationOffset = { + "RadioframeAllocationOffset", + "RadioframeAllocationOffset", + &asn_OP_NativeInteger, + asn_DEF_RadioframeAllocationOffset_tags_1, + sizeof(asn_DEF_RadioframeAllocationOffset_tags_1) + /sizeof(asn_DEF_RadioframeAllocationOffset_tags_1[0]), /* 1 */ + asn_DEF_RadioframeAllocationOffset_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioframeAllocationOffset_tags_1) + /sizeof(asn_DEF_RadioframeAllocationOffset_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RadioframeAllocationOffset_constr_1, RadioframeAllocationOffset_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.h new file mode 100644 index 0000000..355b908 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationOffset.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RadioframeAllocationOffset_H_ +#define _RadioframeAllocationOffset_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RadioframeAllocationOffset */ +typedef long RadioframeAllocationOffset_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RadioframeAllocationOffset_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RadioframeAllocationOffset; +asn_struct_free_f RadioframeAllocationOffset_free; +asn_struct_print_f RadioframeAllocationOffset_print; +asn_constr_check_f RadioframeAllocationOffset_constraint; +ber_type_decoder_f RadioframeAllocationOffset_decode_ber; +der_type_encoder_f RadioframeAllocationOffset_encode_der; +xer_type_decoder_f RadioframeAllocationOffset_decode_xer; +xer_type_encoder_f RadioframeAllocationOffset_encode_xer; +per_type_decoder_f RadioframeAllocationOffset_decode_uper; +per_type_encoder_f RadioframeAllocationOffset_encode_uper; +per_type_decoder_f RadioframeAllocationOffset_decode_aper; +per_type_encoder_f RadioframeAllocationOffset_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RadioframeAllocationOffset_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.c new file mode 100644 index 0000000..f1348f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RadioframeAllocationPeriod.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RadioframeAllocationPeriod_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RadioframeAllocationPeriod_value2enum_1[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n4" }, + { 3, 2, "n8" }, + { 4, 3, "n16" }, + { 5, 3, "n32" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RadioframeAllocationPeriod_enum2value_1[] = { + 0, /* n1(0) */ + 4, /* n16(4) */ + 1, /* n2(1) */ + 5, /* n32(5) */ + 2, /* n4(2) */ + 3 /* n8(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RadioframeAllocationPeriod_specs_1 = { + asn_MAP_RadioframeAllocationPeriod_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RadioframeAllocationPeriod_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RadioframeAllocationPeriod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RadioframeAllocationPeriod = { + "RadioframeAllocationPeriod", + "RadioframeAllocationPeriod", + &asn_OP_NativeEnumerated, + asn_DEF_RadioframeAllocationPeriod_tags_1, + sizeof(asn_DEF_RadioframeAllocationPeriod_tags_1) + /sizeof(asn_DEF_RadioframeAllocationPeriod_tags_1[0]), /* 1 */ + asn_DEF_RadioframeAllocationPeriod_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioframeAllocationPeriod_tags_1) + /sizeof(asn_DEF_RadioframeAllocationPeriod_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RadioframeAllocationPeriod_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RadioframeAllocationPeriod_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.h new file mode 100644 index 0000000..67a5d2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RadioframeAllocationPeriod.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RadioframeAllocationPeriod_H_ +#define _RadioframeAllocationPeriod_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RadioframeAllocationPeriod { + RadioframeAllocationPeriod_n1 = 0, + RadioframeAllocationPeriod_n2 = 1, + RadioframeAllocationPeriod_n4 = 2, + RadioframeAllocationPeriod_n8 = 3, + RadioframeAllocationPeriod_n16 = 4, + RadioframeAllocationPeriod_n32 = 5 + /* + * Enumeration is extensible + */ +} e_RadioframeAllocationPeriod; + +/* RadioframeAllocationPeriod */ +typedef long RadioframeAllocationPeriod_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RadioframeAllocationPeriod_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RadioframeAllocationPeriod; +extern const asn_INTEGER_specifics_t asn_SPC_RadioframeAllocationPeriod_specs_1; +asn_struct_free_f RadioframeAllocationPeriod_free; +asn_struct_print_f RadioframeAllocationPeriod_print; +asn_constr_check_f RadioframeAllocationPeriod_constraint; +ber_type_decoder_f RadioframeAllocationPeriod_decode_ber; +der_type_encoder_f RadioframeAllocationPeriod_encode_der; +xer_type_decoder_f RadioframeAllocationPeriod_decode_xer; +xer_type_encoder_f RadioframeAllocationPeriod_encode_xer; +per_type_decoder_f RadioframeAllocationPeriod_decode_uper; +per_type_encoder_f RadioframeAllocationPeriod_encode_uper; +per_type_decoder_f RadioframeAllocationPeriod_decode_aper; +per_type_encoder_f RadioframeAllocationPeriod_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RadioframeAllocationPeriod_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c new file mode 100644 index 0000000..8f5ded6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReceiveStatusOfULPDCPSDUsExtended.h" + +int +ReceiveStatusOfULPDCPSDUsExtended_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 16384)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReceiveStatusOfULPDCPSDUsExtended_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReceiveStatusOfULPDCPSDUsExtended = { + "ReceiveStatusOfULPDCPSDUsExtended", + "ReceiveStatusOfULPDCPSDUsExtended", + &asn_OP_BIT_STRING, + asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1, + sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1) + /sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1[0]), /* 1 */ + asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1, /* Same as above */ + sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1) + /sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsExtended_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReceiveStatusOfULPDCPSDUsExtended_constr_1, ReceiveStatusOfULPDCPSDUsExtended_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h new file mode 100644 index 0000000..b26f98d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsExtended.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReceiveStatusOfULPDCPSDUsExtended_H_ +#define _ReceiveStatusOfULPDCPSDUsExtended_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReceiveStatusOfULPDCPSDUsExtended */ +typedef BIT_STRING_t ReceiveStatusOfULPDCPSDUsExtended_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReceiveStatusOfULPDCPSDUsExtended_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReceiveStatusOfULPDCPSDUsExtended; +asn_struct_free_f ReceiveStatusOfULPDCPSDUsExtended_free; +asn_struct_print_f ReceiveStatusOfULPDCPSDUsExtended_print; +asn_constr_check_f ReceiveStatusOfULPDCPSDUsExtended_constraint; +ber_type_decoder_f ReceiveStatusOfULPDCPSDUsExtended_decode_ber; +der_type_encoder_f ReceiveStatusOfULPDCPSDUsExtended_encode_der; +xer_type_decoder_f ReceiveStatusOfULPDCPSDUsExtended_decode_xer; +xer_type_encoder_f ReceiveStatusOfULPDCPSDUsExtended_encode_xer; +per_type_decoder_f ReceiveStatusOfULPDCPSDUsExtended_decode_uper; +per_type_encoder_f ReceiveStatusOfULPDCPSDUsExtended_encode_uper; +per_type_decoder_f ReceiveStatusOfULPDCPSDUsExtended_decode_aper; +per_type_encoder_f ReceiveStatusOfULPDCPSDUsExtended_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReceiveStatusOfULPDCPSDUsExtended_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c new file mode 100644 index 0000000..5358f63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h" + +int +ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 131072)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 17, -1, 1, 131072 } /* (SIZE(1..131072)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = { + "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18", + "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18", + &asn_OP_BIT_STRING, + asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1, + sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1) + /sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[0]), /* 1 */ + asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1, /* Same as above */ + sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1) + /sizeof(asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constr_1, ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h new file mode 100644 index 0000000..4a6b268 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_ +#define _ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 */ +typedef BIT_STRING_t ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18; +asn_struct_free_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_free; +asn_struct_print_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_print; +asn_constr_check_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint; +ber_type_decoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_ber; +der_type_encoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_der; +xer_type_decoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_xer; +xer_type_encoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_xer; +per_type_decoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_uper; +per_type_encoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_uper; +per_type_decoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_aper; +per_type_encoder_f ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c new file mode 100644 index 0000000..addb90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReceiveStatusofULPDCPSDUs.h" + +int +ReceiveStatusofULPDCPSDUs_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 4096)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReceiveStatusofULPDCPSDUs_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4096, 4096 } /* (SIZE(4096..4096)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReceiveStatusofULPDCPSDUs = { + "ReceiveStatusofULPDCPSDUs", + "ReceiveStatusofULPDCPSDUs", + &asn_OP_BIT_STRING, + asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1, + sizeof(asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1) + /sizeof(asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1[0]), /* 1 */ + asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1, /* Same as above */ + sizeof(asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1) + /sizeof(asn_DEF_ReceiveStatusofULPDCPSDUs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReceiveStatusofULPDCPSDUs_constr_1, ReceiveStatusofULPDCPSDUs_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h new file mode 100644 index 0000000..db17b46 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReceiveStatusofULPDCPSDUs.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReceiveStatusofULPDCPSDUs_H_ +#define _ReceiveStatusofULPDCPSDUs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReceiveStatusofULPDCPSDUs */ +typedef BIT_STRING_t ReceiveStatusofULPDCPSDUs_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReceiveStatusofULPDCPSDUs_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReceiveStatusofULPDCPSDUs; +asn_struct_free_f ReceiveStatusofULPDCPSDUs_free; +asn_struct_print_f ReceiveStatusofULPDCPSDUs_print; +asn_constr_check_f ReceiveStatusofULPDCPSDUs_constraint; +ber_type_decoder_f ReceiveStatusofULPDCPSDUs_decode_ber; +der_type_encoder_f ReceiveStatusofULPDCPSDUs_encode_der; +xer_type_decoder_f ReceiveStatusofULPDCPSDUs_decode_xer; +xer_type_encoder_f ReceiveStatusofULPDCPSDUs_encode_xer; +per_type_decoder_f ReceiveStatusofULPDCPSDUs_decode_uper; +per_type_encoder_f ReceiveStatusofULPDCPSDUs_encode_uper; +per_type_decoder_f ReceiveStatusofULPDCPSDUs_decode_aper; +per_type_encoder_f ReceiveStatusofULPDCPSDUs_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReceiveStatusofULPDCPSDUs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.c new file mode 100644 index 0000000..a0d026e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Reestablishment-Indication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Reestablishment_Indication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Reestablishment_Indication_value2enum_1[] = { + { 0, 13, "reestablished" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Reestablishment_Indication_enum2value_1[] = { + 0 /* reestablished(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Reestablishment_Indication_specs_1 = { + asn_MAP_Reestablishment_Indication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Reestablishment_Indication_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Reestablishment_Indication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Reestablishment_Indication = { + "Reestablishment-Indication", + "Reestablishment-Indication", + &asn_OP_NativeEnumerated, + asn_DEF_Reestablishment_Indication_tags_1, + sizeof(asn_DEF_Reestablishment_Indication_tags_1) + /sizeof(asn_DEF_Reestablishment_Indication_tags_1[0]), /* 1 */ + asn_DEF_Reestablishment_Indication_tags_1, /* Same as above */ + sizeof(asn_DEF_Reestablishment_Indication_tags_1) + /sizeof(asn_DEF_Reestablishment_Indication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Reestablishment_Indication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Reestablishment_Indication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.h new file mode 100644 index 0000000..5ba7ee2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Reestablishment-Indication.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Reestablishment_Indication_H_ +#define _Reestablishment_Indication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Reestablishment_Indication { + Reestablishment_Indication_reestablished = 0 + /* + * Enumeration is extensible + */ +} e_Reestablishment_Indication; + +/* Reestablishment-Indication */ +typedef long Reestablishment_Indication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Reestablishment_Indication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Reestablishment_Indication; +extern const asn_INTEGER_specifics_t asn_SPC_Reestablishment_Indication_specs_1; +asn_struct_free_f Reestablishment_Indication_free; +asn_struct_print_f Reestablishment_Indication_print; +asn_constr_check_f Reestablishment_Indication_constraint; +ber_type_decoder_f Reestablishment_Indication_decode_ber; +der_type_encoder_f Reestablishment_Indication_encode_der; +xer_type_decoder_f Reestablishment_Indication_decode_xer; +xer_type_encoder_f Reestablishment_Indication_encode_xer; +per_type_decoder_f Reestablishment_Indication_decode_uper; +per_type_encoder_f Reestablishment_Indication_encode_uper; +per_type_decoder_f Reestablishment_Indication_decode_aper; +per_type_encoder_f Reestablishment_Indication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Reestablishment_Indication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.c new file mode 100644 index 0000000..ebcfe67 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Registration-Request.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Registration_Request_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Registration_Request_value2enum_1[] = { + { 0, 5, "start" }, + { 1, 4, "stop" }, + { 2, 12, "partial-stop" }, + { 3, 3, "add" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Registration_Request_enum2value_1[] = { + 3, /* add(3) */ + 2, /* partial-stop(2) */ + 0, /* start(0) */ + 1 /* stop(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Registration_Request_specs_1 = { + asn_MAP_Registration_Request_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Registration_Request_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Registration_Request_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Registration_Request = { + "Registration-Request", + "Registration-Request", + &asn_OP_NativeEnumerated, + asn_DEF_Registration_Request_tags_1, + sizeof(asn_DEF_Registration_Request_tags_1) + /sizeof(asn_DEF_Registration_Request_tags_1[0]), /* 1 */ + asn_DEF_Registration_Request_tags_1, /* Same as above */ + sizeof(asn_DEF_Registration_Request_tags_1) + /sizeof(asn_DEF_Registration_Request_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Registration_Request_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Registration_Request_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.h new file mode 100644 index 0000000..ec68ac4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Registration-Request.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Registration_Request_H_ +#define _Registration_Request_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Registration_Request { + Registration_Request_start = 0, + Registration_Request_stop = 1, + /* + * Enumeration is extensible + */ + Registration_Request_partial_stop = 2, + Registration_Request_add = 3 +} e_Registration_Request; + +/* Registration-Request */ +typedef long Registration_Request_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Registration_Request_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Registration_Request; +extern const asn_INTEGER_specifics_t asn_SPC_Registration_Request_specs_1; +asn_struct_free_f Registration_Request_free; +asn_struct_print_f Registration_Request_print; +asn_constr_check_f Registration_Request_constraint; +ber_type_decoder_f Registration_Request_decode_ber; +der_type_encoder_f Registration_Request_encode_der; +xer_type_decoder_f Registration_Request_decode_xer; +xer_type_encoder_f Registration_Request_encode_xer; +per_type_decoder_f Registration_Request_decode_uper; +per_type_encoder_f Registration_Request_encode_uper; +per_type_decoder_f Registration_Request_decode_aper; +per_type_encoder_f Registration_Request_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Registration_Request_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c new file mode 100644 index 0000000..e24c744 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.c @@ -0,0 +1,267 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RelativeNarrowbandTxPower.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static int +memb_rNTP_PerPRB_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 110)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_B_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCCH_InterferenceImpact_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_numberOfCellSpecificAntennaPorts_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_rNTP_PerPRB_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 6, 110 } /* (SIZE(6..110,...)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_B_constr_9 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pDCCH_InterferenceImpact_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_4[] = { + { 0, 3, "one" }, + { 1, 3, "two" }, + { 2, 4, "four" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_4[] = { + 2, /* four(2) */ + 0, /* one(0) */ + 1 /* two(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_numberOfCellSpecificAntennaPorts_specs_4 = { + asn_MAP_numberOfCellSpecificAntennaPorts_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_numberOfCellSpecificAntennaPorts_enum2value_4, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_numberOfCellSpecificAntennaPorts_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_4 = { + "numberOfCellSpecificAntennaPorts", + "numberOfCellSpecificAntennaPorts", + &asn_OP_NativeEnumerated, + asn_DEF_numberOfCellSpecificAntennaPorts_tags_4, + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_4) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_4[0]) - 1, /* 1 */ + asn_DEF_numberOfCellSpecificAntennaPorts_tags_4, /* Same as above */ + sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_4) + /sizeof(asn_DEF_numberOfCellSpecificAntennaPorts_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_numberOfCellSpecificAntennaPorts_constr_4, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_numberOfCellSpecificAntennaPorts_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RelativeNarrowbandTxPower_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower, rNTP_PerPRB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_rNTP_PerPRB_constr_2, memb_rNTP_PerPRB_constraint_1 }, + 0, 0, /* No default value */ + "rNTP-PerPRB" + }, + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower, rNTP_Threshold), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNTP_Threshold, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rNTP-Threshold" + }, + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower, numberOfCellSpecificAntennaPorts), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_numberOfCellSpecificAntennaPorts_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "numberOfCellSpecificAntennaPorts" + }, + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower, p_B), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_p_B_constr_9, memb_p_B_constraint_1 }, + 0, 0, /* No default value */ + "p-B" + }, + { ATF_NOFLAGS, 0, offsetof(struct RelativeNarrowbandTxPower, pDCCH_InterferenceImpact), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_pDCCH_InterferenceImpact_constr_10, memb_pDCCH_InterferenceImpact_constraint_1 }, + 0, 0, /* No default value */ + "pDCCH-InterferenceImpact" + }, + { ATF_POINTER, 1, offsetof(struct RelativeNarrowbandTxPower, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P184, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_RelativeNarrowbandTxPower_oms_1[] = { 5 }; +static const ber_tlv_tag_t asn_DEF_RelativeNarrowbandTxPower_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RelativeNarrowbandTxPower_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rNTP-PerPRB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rNTP-Threshold */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* numberOfCellSpecificAntennaPorts */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* p-B */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pDCCH-InterferenceImpact */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RelativeNarrowbandTxPower_specs_1 = { + sizeof(struct RelativeNarrowbandTxPower), + offsetof(struct RelativeNarrowbandTxPower, _asn_ctx), + asn_MAP_RelativeNarrowbandTxPower_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_RelativeNarrowbandTxPower_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RelativeNarrowbandTxPower = { + "RelativeNarrowbandTxPower", + "RelativeNarrowbandTxPower", + &asn_OP_SEQUENCE, + asn_DEF_RelativeNarrowbandTxPower_tags_1, + sizeof(asn_DEF_RelativeNarrowbandTxPower_tags_1) + /sizeof(asn_DEF_RelativeNarrowbandTxPower_tags_1[0]), /* 1 */ + asn_DEF_RelativeNarrowbandTxPower_tags_1, /* Same as above */ + sizeof(asn_DEF_RelativeNarrowbandTxPower_tags_1) + /sizeof(asn_DEF_RelativeNarrowbandTxPower_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RelativeNarrowbandTxPower_1, + 6, /* Elements count */ + &asn_SPC_RelativeNarrowbandTxPower_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h new file mode 100644 index 0000000..f5ca31f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RelativeNarrowbandTxPower.h @@ -0,0 +1,84 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RelativeNarrowbandTxPower_H_ +#define _RelativeNarrowbandTxPower_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "RNTP-Threshold.h" +#include "NativeEnumerated.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts { + RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_one = 0, + RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_two = 1, + RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_four = 2 + /* + * Enumeration is extensible + */ +} e_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* RelativeNarrowbandTxPower */ +typedef struct RelativeNarrowbandTxPower { + BIT_STRING_t rNTP_PerPRB; + RNTP_Threshold_t rNTP_Threshold; + long numberOfCellSpecificAntennaPorts; + long p_B; + long pDCCH_InterferenceImpact; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RelativeNarrowbandTxPower_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_numberOfCellSpecificAntennaPorts_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RelativeNarrowbandTxPower; +extern asn_SEQUENCE_specifics_t asn_SPC_RelativeNarrowbandTxPower_specs_1; +extern asn_TYPE_member_t asn_MBR_RelativeNarrowbandTxPower_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RelativeNarrowbandTxPower_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.c new file mode 100644 index 0000000..64f414f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReplacingCellsList-Item.h" + +asn_TYPE_member_t asn_MBR_ReplacingCellsList_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReplacingCellsList_Item, eCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eCGI" + }, +}; +static const ber_tlv_tag_t asn_DEF_ReplacingCellsList_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ReplacingCellsList_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eCGI */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ReplacingCellsList_Item_specs_1 = { + sizeof(struct ReplacingCellsList_Item), + offsetof(struct ReplacingCellsList_Item, _asn_ctx), + asn_MAP_ReplacingCellsList_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ReplacingCellsList_Item = { + "ReplacingCellsList-Item", + "ReplacingCellsList-Item", + &asn_OP_SEQUENCE, + asn_DEF_ReplacingCellsList_Item_tags_1, + sizeof(asn_DEF_ReplacingCellsList_Item_tags_1) + /sizeof(asn_DEF_ReplacingCellsList_Item_tags_1[0]), /* 1 */ + asn_DEF_ReplacingCellsList_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ReplacingCellsList_Item_tags_1) + /sizeof(asn_DEF_ReplacingCellsList_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ReplacingCellsList_Item_1, + 1, /* Elements count */ + &asn_SPC_ReplacingCellsList_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.h new file mode 100644 index 0000000..e04c746 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList-Item.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReplacingCellsList_Item_H_ +#define _ReplacingCellsList_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReplacingCellsList-Item */ +typedef struct ReplacingCellsList_Item { + ECGI_t eCGI; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReplacingCellsList_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReplacingCellsList_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ReplacingCellsList_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ReplacingCellsList_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReplacingCellsList_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.c new file mode 100644 index 0000000..5241ca7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReplacingCellsList.h" + +#include "ReplacingCellsList-Item.h" +asn_per_constraints_t asn_PER_type_ReplacingCellsList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ReplacingCellsList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ReplacingCellsList_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ReplacingCellsList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ReplacingCellsList_specs_1 = { + sizeof(struct ReplacingCellsList), + offsetof(struct ReplacingCellsList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ReplacingCellsList = { + "ReplacingCellsList", + "ReplacingCellsList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ReplacingCellsList_tags_1, + sizeof(asn_DEF_ReplacingCellsList_tags_1) + /sizeof(asn_DEF_ReplacingCellsList_tags_1[0]), /* 1 */ + asn_DEF_ReplacingCellsList_tags_1, /* Same as above */ + sizeof(asn_DEF_ReplacingCellsList_tags_1) + /sizeof(asn_DEF_ReplacingCellsList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReplacingCellsList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ReplacingCellsList_1, + 1, /* Single element */ + &asn_SPC_ReplacingCellsList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.h new file mode 100644 index 0000000..b74ada4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReplacingCellsList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReplacingCellsList_H_ +#define _ReplacingCellsList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ReplacingCellsList_Item; + +/* ReplacingCellsList */ +typedef struct ReplacingCellsList { + A_SEQUENCE_OF(struct ReplacingCellsList_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReplacingCellsList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReplacingCellsList; +extern asn_SET_OF_specifics_t asn_SPC_ReplacingCellsList_specs_1; +extern asn_TYPE_member_t asn_MBR_ReplacingCellsList_1[1]; +extern asn_per_constraints_t asn_PER_type_ReplacingCellsList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReplacingCellsList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.c new file mode 100644 index 0000000..5ade6a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.c @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportAmountMDT.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportAmountMDT_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportAmountMDT_value2enum_1[] = { + { 0, 2, "r1" }, + { 1, 2, "r2" }, + { 2, 2, "r4" }, + { 3, 2, "r8" }, + { 4, 3, "r16" }, + { 5, 3, "r32" }, + { 6, 3, "r64" }, + { 7, 9, "rinfinity" } +}; +static const unsigned int asn_MAP_ReportAmountMDT_enum2value_1[] = { + 0, /* r1(0) */ + 4, /* r16(4) */ + 1, /* r2(1) */ + 5, /* r32(5) */ + 2, /* r4(2) */ + 6, /* r64(6) */ + 3, /* r8(3) */ + 7 /* rinfinity(7) */ +}; +const asn_INTEGER_specifics_t asn_SPC_ReportAmountMDT_specs_1 = { + asn_MAP_ReportAmountMDT_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportAmountMDT_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportAmountMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportAmountMDT = { + "ReportAmountMDT", + "ReportAmountMDT", + &asn_OP_NativeEnumerated, + asn_DEF_ReportAmountMDT_tags_1, + sizeof(asn_DEF_ReportAmountMDT_tags_1) + /sizeof(asn_DEF_ReportAmountMDT_tags_1[0]), /* 1 */ + asn_DEF_ReportAmountMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportAmountMDT_tags_1) + /sizeof(asn_DEF_ReportAmountMDT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportAmountMDT_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportAmountMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.h new file mode 100644 index 0000000..a677456 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportAmountMDT.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportAmountMDT_H_ +#define _ReportAmountMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportAmountMDT { + ReportAmountMDT_r1 = 0, + ReportAmountMDT_r2 = 1, + ReportAmountMDT_r4 = 2, + ReportAmountMDT_r8 = 3, + ReportAmountMDT_r16 = 4, + ReportAmountMDT_r32 = 5, + ReportAmountMDT_r64 = 6, + ReportAmountMDT_rinfinity = 7 +} e_ReportAmountMDT; + +/* ReportAmountMDT */ +typedef long ReportAmountMDT_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportAmountMDT_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportAmountMDT; +extern const asn_INTEGER_specifics_t asn_SPC_ReportAmountMDT_specs_1; +asn_struct_free_f ReportAmountMDT_free; +asn_struct_print_f ReportAmountMDT_print; +asn_constr_check_f ReportAmountMDT_constraint; +ber_type_decoder_f ReportAmountMDT_decode_ber; +der_type_encoder_f ReportAmountMDT_encode_der; +xer_type_decoder_f ReportAmountMDT_decode_xer; +xer_type_encoder_f ReportAmountMDT_encode_xer; +per_type_decoder_f ReportAmountMDT_decode_uper; +per_type_encoder_f ReportAmountMDT_encode_uper; +per_type_decoder_f ReportAmountMDT_decode_aper; +per_type_encoder_f ReportAmountMDT_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportAmountMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.c new file mode 100644 index 0000000..1a8224a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportArea.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportArea_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportArea_value2enum_1[] = { + { 0, 4, "ecgi" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ReportArea_enum2value_1[] = { + 0 /* ecgi(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ReportArea_specs_1 = { + asn_MAP_ReportArea_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportArea_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportArea_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportArea = { + "ReportArea", + "ReportArea", + &asn_OP_NativeEnumerated, + asn_DEF_ReportArea_tags_1, + sizeof(asn_DEF_ReportArea_tags_1) + /sizeof(asn_DEF_ReportArea_tags_1[0]), /* 1 */ + asn_DEF_ReportArea_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportArea_tags_1) + /sizeof(asn_DEF_ReportArea_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportArea_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportArea_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.h new file mode 100644 index 0000000..e04619f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportArea.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportArea_H_ +#define _ReportArea_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportArea { + ReportArea_ecgi = 0 + /* + * Enumeration is extensible + */ +} e_ReportArea; + +/* ReportArea */ +typedef long ReportArea_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportArea_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportArea; +extern const asn_INTEGER_specifics_t asn_SPC_ReportArea_specs_1; +asn_struct_free_f ReportArea_free; +asn_struct_print_f ReportArea_print; +asn_constr_check_f ReportArea_constraint; +ber_type_decoder_f ReportArea_decode_ber; +der_type_encoder_f ReportArea_encode_der; +xer_type_decoder_f ReportArea_decode_xer; +xer_type_encoder_f ReportArea_encode_xer; +per_type_decoder_f ReportArea_decode_uper; +per_type_encoder_f ReportArea_encode_uper; +per_type_decoder_f ReportArea_decode_aper; +per_type_encoder_f ReportArea_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportArea_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.c new file mode 100644 index 0000000..8d854b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportCharacteristics.h" + +int +ReportCharacteristics_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportCharacteristics_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ReportCharacteristics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportCharacteristics = { + "ReportCharacteristics", + "ReportCharacteristics", + &asn_OP_BIT_STRING, + asn_DEF_ReportCharacteristics_tags_1, + sizeof(asn_DEF_ReportCharacteristics_tags_1) + /sizeof(asn_DEF_ReportCharacteristics_tags_1[0]), /* 1 */ + asn_DEF_ReportCharacteristics_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportCharacteristics_tags_1) + /sizeof(asn_DEF_ReportCharacteristics_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportCharacteristics_constr_1, ReportCharacteristics_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.h new file mode 100644 index 0000000..bfb45fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportCharacteristics.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportCharacteristics_H_ +#define _ReportCharacteristics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReportCharacteristics */ +typedef BIT_STRING_t ReportCharacteristics_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportCharacteristics_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportCharacteristics; +asn_struct_free_f ReportCharacteristics_free; +asn_struct_print_f ReportCharacteristics_print; +asn_constr_check_f ReportCharacteristics_constraint; +ber_type_decoder_f ReportCharacteristics_decode_ber; +der_type_encoder_f ReportCharacteristics_encode_der; +xer_type_decoder_f ReportCharacteristics_decode_xer; +xer_type_encoder_f ReportCharacteristics_encode_xer; +per_type_decoder_f ReportCharacteristics_decode_uper; +per_type_encoder_f ReportCharacteristics_encode_uper; +per_type_decoder_f ReportCharacteristics_decode_aper; +per_type_encoder_f ReportCharacteristics_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportCharacteristics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.c new file mode 100644 index 0000000..4499178 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.c @@ -0,0 +1,93 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportIntervalMDT.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportIntervalMDT_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 4, 4, 0, 12 } /* (0..12) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportIntervalMDT_value2enum_1[] = { + { 0, 5, "ms120" }, + { 1, 5, "ms240" }, + { 2, 5, "ms480" }, + { 3, 5, "ms640" }, + { 4, 6, "ms1024" }, + { 5, 6, "ms2048" }, + { 6, 6, "ms5120" }, + { 7, 7, "ms10240" }, + { 8, 4, "min1" }, + { 9, 4, "min6" }, + { 10, 5, "min12" }, + { 11, 5, "min30" }, + { 12, 5, "min60" } +}; +static const unsigned int asn_MAP_ReportIntervalMDT_enum2value_1[] = { + 8, /* min1(8) */ + 10, /* min12(10) */ + 11, /* min30(11) */ + 9, /* min6(9) */ + 12, /* min60(12) */ + 4, /* ms1024(4) */ + 7, /* ms10240(7) */ + 0, /* ms120(0) */ + 5, /* ms2048(5) */ + 1, /* ms240(1) */ + 2, /* ms480(2) */ + 6, /* ms5120(6) */ + 3 /* ms640(3) */ +}; +const asn_INTEGER_specifics_t asn_SPC_ReportIntervalMDT_specs_1 = { + asn_MAP_ReportIntervalMDT_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportIntervalMDT_enum2value_1, /* N => "tag"; sorted by N */ + 13, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportIntervalMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportIntervalMDT = { + "ReportIntervalMDT", + "ReportIntervalMDT", + &asn_OP_NativeEnumerated, + asn_DEF_ReportIntervalMDT_tags_1, + sizeof(asn_DEF_ReportIntervalMDT_tags_1) + /sizeof(asn_DEF_ReportIntervalMDT_tags_1[0]), /* 1 */ + asn_DEF_ReportIntervalMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportIntervalMDT_tags_1) + /sizeof(asn_DEF_ReportIntervalMDT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportIntervalMDT_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportIntervalMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.h new file mode 100644 index 0000000..0c5e61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportIntervalMDT.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportIntervalMDT_H_ +#define _ReportIntervalMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportIntervalMDT { + ReportIntervalMDT_ms120 = 0, + ReportIntervalMDT_ms240 = 1, + ReportIntervalMDT_ms480 = 2, + ReportIntervalMDT_ms640 = 3, + ReportIntervalMDT_ms1024 = 4, + ReportIntervalMDT_ms2048 = 5, + ReportIntervalMDT_ms5120 = 6, + ReportIntervalMDT_ms10240 = 7, + ReportIntervalMDT_min1 = 8, + ReportIntervalMDT_min6 = 9, + ReportIntervalMDT_min12 = 10, + ReportIntervalMDT_min30 = 11, + ReportIntervalMDT_min60 = 12 +} e_ReportIntervalMDT; + +/* ReportIntervalMDT */ +typedef long ReportIntervalMDT_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportIntervalMDT_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportIntervalMDT; +extern const asn_INTEGER_specifics_t asn_SPC_ReportIntervalMDT_specs_1; +asn_struct_free_f ReportIntervalMDT_free; +asn_struct_print_f ReportIntervalMDT_print; +asn_constr_check_f ReportIntervalMDT_constraint; +ber_type_decoder_f ReportIntervalMDT_decode_ber; +der_type_encoder_f ReportIntervalMDT_encode_der; +xer_type_decoder_f ReportIntervalMDT_decode_xer; +xer_type_encoder_f ReportIntervalMDT_encode_xer; +per_type_decoder_f ReportIntervalMDT_decode_uper; +per_type_encoder_f ReportIntervalMDT_encode_uper; +per_type_decoder_f ReportIntervalMDT_decode_aper; +per_type_encoder_f ReportIntervalMDT_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportIntervalMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.c new file mode 100644 index 0000000..b18c6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportingPeriodicity.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_ReportingPeriodicity_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportingPeriodicity_value2enum_1[] = { + { 0, 15, "one-thousand-ms" }, + { 1, 15, "two-thousand-ms" }, + { 2, 16, "five-thousand-ms" }, + { 3, 15, "ten-thousand-ms" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ReportingPeriodicity_enum2value_1[] = { + 2, /* five-thousand-ms(2) */ + 0, /* one-thousand-ms(0) */ + 3, /* ten-thousand-ms(3) */ + 1 /* two-thousand-ms(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_ReportingPeriodicity_specs_1 = { + asn_MAP_ReportingPeriodicity_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportingPeriodicity_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportingPeriodicity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicity = { + "ReportingPeriodicity", + "ReportingPeriodicity", + &asn_OP_NativeEnumerated, + asn_DEF_ReportingPeriodicity_tags_1, + sizeof(asn_DEF_ReportingPeriodicity_tags_1) + /sizeof(asn_DEF_ReportingPeriodicity_tags_1[0]), /* 1 */ + asn_DEF_ReportingPeriodicity_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportingPeriodicity_tags_1) + /sizeof(asn_DEF_ReportingPeriodicity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportingPeriodicity_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportingPeriodicity_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.h new file mode 100644 index 0000000..d517459 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicity.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportingPeriodicity_H_ +#define _ReportingPeriodicity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportingPeriodicity { + ReportingPeriodicity_one_thousand_ms = 0, + ReportingPeriodicity_two_thousand_ms = 1, + ReportingPeriodicity_five_thousand_ms = 2, + ReportingPeriodicity_ten_thousand_ms = 3 + /* + * Enumeration is extensible + */ +} e_ReportingPeriodicity; + +/* ReportingPeriodicity */ +typedef long ReportingPeriodicity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicity; +asn_struct_free_f ReportingPeriodicity_free; +asn_struct_print_f ReportingPeriodicity_print; +asn_constr_check_f ReportingPeriodicity_constraint; +ber_type_decoder_f ReportingPeriodicity_decode_ber; +der_type_encoder_f ReportingPeriodicity_encode_der; +xer_type_decoder_f ReportingPeriodicity_decode_xer; +xer_type_encoder_f ReportingPeriodicity_encode_xer; +per_type_decoder_f ReportingPeriodicity_decode_uper; +per_type_encoder_f ReportingPeriodicity_encode_uper; +per_type_decoder_f ReportingPeriodicity_decode_aper; +per_type_encoder_f ReportingPeriodicity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportingPeriodicity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c new file mode 100644 index 0000000..cc3faf0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportingPeriodicityCSIR.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportingPeriodicityCSIR_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportingPeriodicityCSIR_value2enum_1[] = { + { 0, 3, "ms5" }, + { 1, 4, "ms10" }, + { 2, 4, "ms20" }, + { 3, 4, "ms40" }, + { 4, 4, "ms80" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ReportingPeriodicityCSIR_enum2value_1[] = { + 1, /* ms10(1) */ + 2, /* ms20(2) */ + 3, /* ms40(3) */ + 0, /* ms5(0) */ + 4 /* ms80(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ReportingPeriodicityCSIR_specs_1 = { + asn_MAP_ReportingPeriodicityCSIR_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportingPeriodicityCSIR_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportingPeriodicityCSIR_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicityCSIR = { + "ReportingPeriodicityCSIR", + "ReportingPeriodicityCSIR", + &asn_OP_NativeEnumerated, + asn_DEF_ReportingPeriodicityCSIR_tags_1, + sizeof(asn_DEF_ReportingPeriodicityCSIR_tags_1) + /sizeof(asn_DEF_ReportingPeriodicityCSIR_tags_1[0]), /* 1 */ + asn_DEF_ReportingPeriodicityCSIR_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportingPeriodicityCSIR_tags_1) + /sizeof(asn_DEF_ReportingPeriodicityCSIR_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportingPeriodicityCSIR_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportingPeriodicityCSIR_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h new file mode 100644 index 0000000..5134a1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityCSIR.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportingPeriodicityCSIR_H_ +#define _ReportingPeriodicityCSIR_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportingPeriodicityCSIR { + ReportingPeriodicityCSIR_ms5 = 0, + ReportingPeriodicityCSIR_ms10 = 1, + ReportingPeriodicityCSIR_ms20 = 2, + ReportingPeriodicityCSIR_ms40 = 3, + ReportingPeriodicityCSIR_ms80 = 4 + /* + * Enumeration is extensible + */ +} e_ReportingPeriodicityCSIR; + +/* ReportingPeriodicityCSIR */ +typedef long ReportingPeriodicityCSIR_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportingPeriodicityCSIR_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicityCSIR; +extern const asn_INTEGER_specifics_t asn_SPC_ReportingPeriodicityCSIR_specs_1; +asn_struct_free_f ReportingPeriodicityCSIR_free; +asn_struct_print_f ReportingPeriodicityCSIR_print; +asn_constr_check_f ReportingPeriodicityCSIR_constraint; +ber_type_decoder_f ReportingPeriodicityCSIR_decode_ber; +der_type_encoder_f ReportingPeriodicityCSIR_encode_der; +xer_type_decoder_f ReportingPeriodicityCSIR_decode_xer; +xer_type_encoder_f ReportingPeriodicityCSIR_encode_xer; +per_type_decoder_f ReportingPeriodicityCSIR_decode_uper; +per_type_encoder_f ReportingPeriodicityCSIR_encode_uper; +per_type_decoder_f ReportingPeriodicityCSIR_decode_aper; +per_type_encoder_f ReportingPeriodicityCSIR_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportingPeriodicityCSIR_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c new file mode 100644 index 0000000..e34ed97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.c @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReportingPeriodicityRSRPMR.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ReportingPeriodicityRSRPMR_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ReportingPeriodicityRSRPMR_value2enum_1[] = { + { 0, 17, "one-hundred-20-ms" }, + { 1, 17, "two-hundred-40-ms" }, + { 2, 18, "four-hundred-80-ms" }, + { 3, 17, "six-hundred-40-ms" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ReportingPeriodicityRSRPMR_enum2value_1[] = { + 2, /* four-hundred-80-ms(2) */ + 0, /* one-hundred-20-ms(0) */ + 3, /* six-hundred-40-ms(3) */ + 1 /* two-hundred-40-ms(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ReportingPeriodicityRSRPMR_specs_1 = { + asn_MAP_ReportingPeriodicityRSRPMR_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportingPeriodicityRSRPMR_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ReportingPeriodicityRSRPMR_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicityRSRPMR = { + "ReportingPeriodicityRSRPMR", + "ReportingPeriodicityRSRPMR", + &asn_OP_NativeEnumerated, + asn_DEF_ReportingPeriodicityRSRPMR_tags_1, + sizeof(asn_DEF_ReportingPeriodicityRSRPMR_tags_1) + /sizeof(asn_DEF_ReportingPeriodicityRSRPMR_tags_1[0]), /* 1 */ + asn_DEF_ReportingPeriodicityRSRPMR_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportingPeriodicityRSRPMR_tags_1) + /sizeof(asn_DEF_ReportingPeriodicityRSRPMR_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ReportingPeriodicityRSRPMR_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportingPeriodicityRSRPMR_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h new file mode 100644 index 0000000..8ac3a3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReportingPeriodicityRSRPMR.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReportingPeriodicityRSRPMR_H_ +#define _ReportingPeriodicityRSRPMR_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportingPeriodicityRSRPMR { + ReportingPeriodicityRSRPMR_one_hundred_20_ms = 0, + ReportingPeriodicityRSRPMR_two_hundred_40_ms = 1, + ReportingPeriodicityRSRPMR_four_hundred_80_ms = 2, + ReportingPeriodicityRSRPMR_six_hundred_40_ms = 3 + /* + * Enumeration is extensible + */ +} e_ReportingPeriodicityRSRPMR; + +/* ReportingPeriodicityRSRPMR */ +typedef long ReportingPeriodicityRSRPMR_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ReportingPeriodicityRSRPMR_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ReportingPeriodicityRSRPMR; +extern const asn_INTEGER_specifics_t asn_SPC_ReportingPeriodicityRSRPMR_specs_1; +asn_struct_free_f ReportingPeriodicityRSRPMR_free; +asn_struct_print_f ReportingPeriodicityRSRPMR_print; +asn_constr_check_f ReportingPeriodicityRSRPMR_constraint; +ber_type_decoder_f ReportingPeriodicityRSRPMR_decode_ber; +der_type_encoder_f ReportingPeriodicityRSRPMR_encode_der; +xer_type_decoder_f ReportingPeriodicityRSRPMR_decode_xer; +xer_type_encoder_f ReportingPeriodicityRSRPMR_encode_xer; +per_type_decoder_f ReportingPeriodicityRSRPMR_decode_uper; +per_type_encoder_f ReportingPeriodicityRSRPMR_encode_uper; +per_type_decoder_f ReportingPeriodicityRSRPMR_decode_aper; +per_type_encoder_f ReportingPeriodicityRSRPMR_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportingPeriodicityRSRPMR_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.c new file mode 100644 index 0000000..c344f3c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.c @@ -0,0 +1,167 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ReservedSubframePattern.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_reservedSubframePattern_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 10 && size <= 160)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_mBSFNControlRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_reservedSubframePattern_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 10, 160 } /* (SIZE(10..160)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_mBSFNControlRegionLength_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ReservedSubframePattern_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern, subframeType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubframeType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subframeType" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern, reservedSubframePattern), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_reservedSubframePattern_constr_3, memb_reservedSubframePattern_constraint_1 }, + 0, 0, /* No default value */ + "reservedSubframePattern" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReservedSubframePattern, mBSFNControlRegionLength), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_mBSFNControlRegionLength_constr_4, memb_mBSFNControlRegionLength_constraint_1 }, + 0, 0, /* No default value */ + "mBSFNControlRegionLength" + }, + { ATF_POINTER, 1, offsetof(struct ReservedSubframePattern, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P185, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ReservedSubframePattern_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_ReservedSubframePattern_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ReservedSubframePattern_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reservedSubframePattern */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mBSFNControlRegionLength */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ReservedSubframePattern_specs_1 = { + sizeof(struct ReservedSubframePattern), + offsetof(struct ReservedSubframePattern, _asn_ctx), + asn_MAP_ReservedSubframePattern_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ReservedSubframePattern_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ReservedSubframePattern = { + "ReservedSubframePattern", + "ReservedSubframePattern", + &asn_OP_SEQUENCE, + asn_DEF_ReservedSubframePattern_tags_1, + sizeof(asn_DEF_ReservedSubframePattern_tags_1) + /sizeof(asn_DEF_ReservedSubframePattern_tags_1[0]), /* 1 */ + asn_DEF_ReservedSubframePattern_tags_1, /* Same as above */ + sizeof(asn_DEF_ReservedSubframePattern_tags_1) + /sizeof(asn_DEF_ReservedSubframePattern_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ReservedSubframePattern_1, + 4, /* Elements count */ + &asn_SPC_ReservedSubframePattern_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.h new file mode 100644 index 0000000..c5bd1c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ReservedSubframePattern.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ReservedSubframePattern_H_ +#define _ReservedSubframePattern_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SubframeType.h" +#include "BIT_STRING.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ReservedSubframePattern */ +typedef struct ReservedSubframePattern { + SubframeType_t subframeType; + BIT_STRING_t reservedSubframePattern; + long mBSFNControlRegionLength; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReservedSubframePattern_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReservedSubframePattern; +extern asn_SEQUENCE_specifics_t asn_SPC_ReservedSubframePattern_specs_1; +extern asn_TYPE_member_t asn_MBR_ReservedSubframePattern_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReservedSubframePattern_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.c new file mode 100644 index 0000000..ea8af3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P22, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.h new file mode 100644 index 0000000..fd5c0c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_119P22_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.c new file mode 100644 index 0000000..e8f4590 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P23, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.h new file mode 100644 index 0000000..cce5d19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResetResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_119P23_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.c new file mode 100644 index 0000000..b962474 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResourceStatusFailure.h" + +asn_TYPE_member_t asn_MBR_ResourceStatusFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P33, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusFailure_specs_1 = { + sizeof(struct ResourceStatusFailure), + offsetof(struct ResourceStatusFailure, _asn_ctx), + asn_MAP_ResourceStatusFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusFailure = { + "ResourceStatusFailure", + "ResourceStatusFailure", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusFailure_tags_1, + sizeof(asn_DEF_ResourceStatusFailure_tags_1) + /sizeof(asn_DEF_ResourceStatusFailure_tags_1[0]), /* 1 */ + asn_DEF_ResourceStatusFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_ResourceStatusFailure_tags_1) + /sizeof(asn_DEF_ResourceStatusFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusFailure_1, + 1, /* Elements count */ + &asn_SPC_ResourceStatusFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.h new file mode 100644 index 0000000..ce6d9f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResourceStatusFailure_H_ +#define _ResourceStatusFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResourceStatusFailure */ +typedef struct ResourceStatusFailure { + ProtocolIE_Container_119P33_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_ResourceStatusFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResourceStatusFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.c new file mode 100644 index 0000000..2fb07c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResourceStatusRequest.h" + +asn_TYPE_member_t asn_MBR_ResourceStatusRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P31, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusRequest_specs_1 = { + sizeof(struct ResourceStatusRequest), + offsetof(struct ResourceStatusRequest, _asn_ctx), + asn_MAP_ResourceStatusRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusRequest = { + "ResourceStatusRequest", + "ResourceStatusRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusRequest_tags_1, + sizeof(asn_DEF_ResourceStatusRequest_tags_1) + /sizeof(asn_DEF_ResourceStatusRequest_tags_1[0]), /* 1 */ + asn_DEF_ResourceStatusRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResourceStatusRequest_tags_1) + /sizeof(asn_DEF_ResourceStatusRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusRequest_1, + 1, /* Elements count */ + &asn_SPC_ResourceStatusRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.h new file mode 100644 index 0000000..7eac7cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResourceStatusRequest_H_ +#define _ResourceStatusRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResourceStatusRequest */ +typedef struct ResourceStatusRequest { + ProtocolIE_Container_119P31_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResourceStatusRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResourceStatusRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.c new file mode 100644 index 0000000..719f804 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResourceStatusResponse.h" + +asn_TYPE_member_t asn_MBR_ResourceStatusResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P32, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusResponse_specs_1 = { + sizeof(struct ResourceStatusResponse), + offsetof(struct ResourceStatusResponse, _asn_ctx), + asn_MAP_ResourceStatusResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusResponse = { + "ResourceStatusResponse", + "ResourceStatusResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusResponse_tags_1, + sizeof(asn_DEF_ResourceStatusResponse_tags_1) + /sizeof(asn_DEF_ResourceStatusResponse_tags_1[0]), /* 1 */ + asn_DEF_ResourceStatusResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResourceStatusResponse_tags_1) + /sizeof(asn_DEF_ResourceStatusResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusResponse_1, + 1, /* Elements count */ + &asn_SPC_ResourceStatusResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.h new file mode 100644 index 0000000..c6d9a1a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResourceStatusResponse_H_ +#define _ResourceStatusResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResourceStatusResponse */ +typedef struct ResourceStatusResponse { + ProtocolIE_Container_119P32_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResourceStatusResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResourceStatusResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.c new file mode 100644 index 0000000..3594e3d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResourceStatusUpdate.h" + +asn_TYPE_member_t asn_MBR_ResourceStatusUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResourceStatusUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P34, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResourceStatusUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResourceStatusUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusUpdate_specs_1 = { + sizeof(struct ResourceStatusUpdate), + offsetof(struct ResourceStatusUpdate, _asn_ctx), + asn_MAP_ResourceStatusUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResourceStatusUpdate = { + "ResourceStatusUpdate", + "ResourceStatusUpdate", + &asn_OP_SEQUENCE, + asn_DEF_ResourceStatusUpdate_tags_1, + sizeof(asn_DEF_ResourceStatusUpdate_tags_1) + /sizeof(asn_DEF_ResourceStatusUpdate_tags_1[0]), /* 1 */ + asn_DEF_ResourceStatusUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_ResourceStatusUpdate_tags_1) + /sizeof(asn_DEF_ResourceStatusUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResourceStatusUpdate_1, + 1, /* Elements count */ + &asn_SPC_ResourceStatusUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.h new file mode 100644 index 0000000..bcac200 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceStatusUpdate.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResourceStatusUpdate_H_ +#define _ResourceStatusUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResourceStatusUpdate */ +typedef struct ResourceStatusUpdate { + ProtocolIE_Container_119P34_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResourceStatusUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResourceStatusUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_ResourceStatusUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_ResourceStatusUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResourceStatusUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.c new file mode 100644 index 0000000..38335c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResourceType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ResourceType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ResourceType_value2enum_1[] = { + { 0, 14, "downlinknonCRS" }, + { 1, 3, "cRS" }, + { 2, 6, "uplink" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ResourceType_enum2value_1[] = { + 1, /* cRS(1) */ + 0, /* downlinknonCRS(0) */ + 2 /* uplink(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ResourceType_specs_1 = { + asn_MAP_ResourceType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ResourceType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ResourceType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ResourceType = { + "ResourceType", + "ResourceType", + &asn_OP_NativeEnumerated, + asn_DEF_ResourceType_tags_1, + sizeof(asn_DEF_ResourceType_tags_1) + /sizeof(asn_DEF_ResourceType_tags_1[0]), /* 1 */ + asn_DEF_ResourceType_tags_1, /* Same as above */ + sizeof(asn_DEF_ResourceType_tags_1) + /sizeof(asn_DEF_ResourceType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ResourceType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ResourceType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.h new file mode 100644 index 0000000..81fc307 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResourceType.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResourceType_H_ +#define _ResourceType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ResourceType { + ResourceType_downlinknonCRS = 0, + ResourceType_cRS = 1, + ResourceType_uplink = 2 + /* + * Enumeration is extensible + */ +} e_ResourceType; + +/* ResourceType */ +typedef long ResourceType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ResourceType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ResourceType; +extern const asn_INTEGER_specifics_t asn_SPC_ResourceType_specs_1; +asn_struct_free_f ResourceType_free; +asn_struct_print_f ResourceType_print; +asn_constr_check_f ResourceType_constraint; +ber_type_decoder_f ResourceType_decode_ber; +der_type_encoder_f ResourceType_encode_der; +xer_type_decoder_f ResourceType_decode_xer; +xer_type_encoder_f ResourceType_encode_xer; +per_type_decoder_f ResourceType_decode_uper; +per_type_encoder_f ResourceType_encode_uper; +per_type_decoder_f ResourceType_decode_aper; +per_type_encoder_f ResourceType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResourceType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c new file mode 100644 index 0000000..1a09bf2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RespondingNodeType-EndcConfigUpdate.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_RespondingNodeType_EndcConfigUpdate_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RespondingNodeType_EndcConfigUpdate_1[] = { + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcConfigUpdate, choice.respond_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P95, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-eNB" + }, + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcConfigUpdate, choice.respond_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P96, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_RespondingNodeType_EndcConfigUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_RespondingNodeType_EndcConfigUpdate_specs_1 = { + sizeof(struct RespondingNodeType_EndcConfigUpdate), + offsetof(struct RespondingNodeType_EndcConfigUpdate, _asn_ctx), + offsetof(struct RespondingNodeType_EndcConfigUpdate, present), + sizeof(((struct RespondingNodeType_EndcConfigUpdate *)0)->present), + asn_MAP_RespondingNodeType_EndcConfigUpdate_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcConfigUpdate = { + "RespondingNodeType-EndcConfigUpdate", + "RespondingNodeType-EndcConfigUpdate", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_RespondingNodeType_EndcConfigUpdate_constr_1, CHOICE_constraint }, + asn_MBR_RespondingNodeType_EndcConfigUpdate_1, + 2, /* Elements count */ + &asn_SPC_RespondingNodeType_EndcConfigUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h new file mode 100644 index 0000000..7ab0986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcConfigUpdate.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RespondingNodeType_EndcConfigUpdate_H_ +#define _RespondingNodeType_EndcConfigUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RespondingNodeType_EndcConfigUpdate_PR { + RespondingNodeType_EndcConfigUpdate_PR_NOTHING, /* No components present */ + RespondingNodeType_EndcConfigUpdate_PR_respond_eNB, + RespondingNodeType_EndcConfigUpdate_PR_respond_en_gNB + /* Extensions may appear below */ + +} RespondingNodeType_EndcConfigUpdate_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* RespondingNodeType-EndcConfigUpdate */ +typedef struct RespondingNodeType_EndcConfigUpdate { + RespondingNodeType_EndcConfigUpdate_PR present; + union RespondingNodeType_EndcConfigUpdate_u { + struct ProtocolIE_Container *respond_eNB; + struct ProtocolIE_Container *respond_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RespondingNodeType_EndcConfigUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcConfigUpdate; + +#ifdef __cplusplus +} +#endif + +#endif /* _RespondingNodeType_EndcConfigUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c new file mode 100644 index 0000000..8d346cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RespondingNodeType-EndcX2Removal.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_RespondingNodeType_EndcX2Removal_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RespondingNodeType_EndcX2Removal_1[] = { + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcX2Removal, choice.respond_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P115, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-eNB" + }, + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcX2Removal, choice.respond_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P116, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_RespondingNodeType_EndcX2Removal_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_RespondingNodeType_EndcX2Removal_specs_1 = { + sizeof(struct RespondingNodeType_EndcX2Removal), + offsetof(struct RespondingNodeType_EndcX2Removal, _asn_ctx), + offsetof(struct RespondingNodeType_EndcX2Removal, present), + sizeof(((struct RespondingNodeType_EndcX2Removal *)0)->present), + asn_MAP_RespondingNodeType_EndcX2Removal_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcX2Removal = { + "RespondingNodeType-EndcX2Removal", + "RespondingNodeType-EndcX2Removal", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_RespondingNodeType_EndcX2Removal_constr_1, CHOICE_constraint }, + asn_MBR_RespondingNodeType_EndcX2Removal_1, + 2, /* Elements count */ + &asn_SPC_RespondingNodeType_EndcX2Removal_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h new file mode 100644 index 0000000..8859c98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Removal.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RespondingNodeType_EndcX2Removal_H_ +#define _RespondingNodeType_EndcX2Removal_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RespondingNodeType_EndcX2Removal_PR { + RespondingNodeType_EndcX2Removal_PR_NOTHING, /* No components present */ + RespondingNodeType_EndcX2Removal_PR_respond_eNB, + RespondingNodeType_EndcX2Removal_PR_respond_en_gNB + /* Extensions may appear below */ + +} RespondingNodeType_EndcX2Removal_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* RespondingNodeType-EndcX2Removal */ +typedef struct RespondingNodeType_EndcX2Removal { + RespondingNodeType_EndcX2Removal_PR present; + union RespondingNodeType_EndcX2Removal_u { + struct ProtocolIE_Container *respond_eNB; + struct ProtocolIE_Container *respond_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RespondingNodeType_EndcX2Removal_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcX2Removal; + +#ifdef __cplusplus +} +#endif + +#endif /* _RespondingNodeType_EndcX2Removal_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c new file mode 100644 index 0000000..ec0a2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RespondingNodeType-EndcX2Setup.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_RespondingNodeType_EndcX2Setup_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RespondingNodeType_EndcX2Setup_1[] = { + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcX2Setup, choice.respond_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P88, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-eNB" + }, + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EndcX2Setup, choice.respond_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P89, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_RespondingNodeType_EndcX2Setup_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_RespondingNodeType_EndcX2Setup_specs_1 = { + sizeof(struct RespondingNodeType_EndcX2Setup), + offsetof(struct RespondingNodeType_EndcX2Setup, _asn_ctx), + offsetof(struct RespondingNodeType_EndcX2Setup, present), + sizeof(((struct RespondingNodeType_EndcX2Setup *)0)->present), + asn_MAP_RespondingNodeType_EndcX2Setup_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcX2Setup = { + "RespondingNodeType-EndcX2Setup", + "RespondingNodeType-EndcX2Setup", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_RespondingNodeType_EndcX2Setup_constr_1, CHOICE_constraint }, + asn_MBR_RespondingNodeType_EndcX2Setup_1, + 2, /* Elements count */ + &asn_SPC_RespondingNodeType_EndcX2Setup_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h new file mode 100644 index 0000000..66fc0f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EndcX2Setup.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RespondingNodeType_EndcX2Setup_H_ +#define _RespondingNodeType_EndcX2Setup_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RespondingNodeType_EndcX2Setup_PR { + RespondingNodeType_EndcX2Setup_PR_NOTHING, /* No components present */ + RespondingNodeType_EndcX2Setup_PR_respond_eNB, + RespondingNodeType_EndcX2Setup_PR_respond_en_gNB + /* Extensions may appear below */ + +} RespondingNodeType_EndcX2Setup_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* RespondingNodeType-EndcX2Setup */ +typedef struct RespondingNodeType_EndcX2Setup { + RespondingNodeType_EndcX2Setup_PR present; + union RespondingNodeType_EndcX2Setup_u { + struct ProtocolIE_Container *respond_eNB; + struct ProtocolIE_Container *respond_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RespondingNodeType_EndcX2Setup_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EndcX2Setup; + +#ifdef __cplusplus +} +#endif + +#endif /* _RespondingNodeType_EndcX2Setup_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c new file mode 100644 index 0000000..1b28a9d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RespondingNodeType-EutranrCellResourceCoordination.h" + +#include "ProtocolIE-Container.h" +static asn_per_constraints_t asn_PER_type_RespondingNodeType_EutranrCellResourceCoordination_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RespondingNodeType_EutranrCellResourceCoordination_1[] = { + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EutranrCellResourceCoordination, choice.respond_eNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P109, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-eNB" + }, + { ATF_POINTER, 0, offsetof(struct RespondingNodeType_EutranrCellResourceCoordination, choice.respond_en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P110, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "respond-en-gNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_RespondingNodeType_EutranrCellResourceCoordination_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_RespondingNodeType_EutranrCellResourceCoordination_specs_1 = { + sizeof(struct RespondingNodeType_EutranrCellResourceCoordination), + offsetof(struct RespondingNodeType_EutranrCellResourceCoordination, _asn_ctx), + offsetof(struct RespondingNodeType_EutranrCellResourceCoordination, present), + sizeof(((struct RespondingNodeType_EutranrCellResourceCoordination *)0)->present), + asn_MAP_RespondingNodeType_EutranrCellResourceCoordination_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EutranrCellResourceCoordination = { + "RespondingNodeType-EutranrCellResourceCoordination", + "RespondingNodeType-EutranrCellResourceCoordination", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_RespondingNodeType_EutranrCellResourceCoordination_constr_1, CHOICE_constraint }, + asn_MBR_RespondingNodeType_EutranrCellResourceCoordination_1, + 2, /* Elements count */ + &asn_SPC_RespondingNodeType_EutranrCellResourceCoordination_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h new file mode 100644 index 0000000..70e2889 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RespondingNodeType-EutranrCellResourceCoordination.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RespondingNodeType_EutranrCellResourceCoordination_H_ +#define _RespondingNodeType_EutranrCellResourceCoordination_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RespondingNodeType_EutranrCellResourceCoordination_PR { + RespondingNodeType_EutranrCellResourceCoordination_PR_NOTHING, /* No components present */ + RespondingNodeType_EutranrCellResourceCoordination_PR_respond_eNB, + RespondingNodeType_EutranrCellResourceCoordination_PR_respond_en_gNB + /* Extensions may appear below */ + +} RespondingNodeType_EutranrCellResourceCoordination_PR; + +/* Forward declarations */ +struct ProtocolIE_Container; + +/* RespondingNodeType-EutranrCellResourceCoordination */ +typedef struct RespondingNodeType_EutranrCellResourceCoordination { + RespondingNodeType_EutranrCellResourceCoordination_PR present; + union RespondingNodeType_EutranrCellResourceCoordination_u { + struct ProtocolIE_Container *respond_eNB; + struct ProtocolIE_Container *respond_en_gNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RespondingNodeType_EutranrCellResourceCoordination_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RespondingNodeType_EutranrCellResourceCoordination; + +#ifdef __cplusplus +} +#endif + +#endif /* _RespondingNodeType_EutranrCellResourceCoordination_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c new file mode 100644 index 0000000..889e630 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSeNBReconfComp-RejectByMeNBItem.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItem, cause), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 2, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItem, meNBtoSeNBContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNBtoSeNBContainer" + }, + { ATF_POINTER, 1, offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P22, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNBtoSeNBContainer */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1 = { + sizeof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItem), + offsetof(struct ResponseInformationSeNBReconfComp_RejectByMeNBItem, _asn_ctx), + asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ResponseInformationSeNBReconfComp_RejectByMeNBItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem = { + "ResponseInformationSeNBReconfComp-RejectByMeNBItem", + "ResponseInformationSeNBReconfComp-RejectByMeNBItem", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1, + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */ + asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1, + 3, /* Elements count */ + &asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h new file mode 100644 index 0000000..89a1ee1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-RejectByMeNBItem.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_ +#define _ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Cause.h" +#include "MeNBtoSeNBContainer.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ResponseInformationSeNBReconfComp-RejectByMeNBItem */ +typedef struct ResponseInformationSeNBReconfComp_RejectByMeNBItem { + Cause_t cause; + MeNBtoSeNBContainer_t *meNBtoSeNBContainer; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSeNBReconfComp_RejectByMeNBItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c new file mode 100644 index 0000000..3be94ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSeNBReconfComp-SuccessItem.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_SuccessItem_1[] = { + { ATF_POINTER, 2, offsetof(struct ResponseInformationSeNBReconfComp_SuccessItem, meNBtoSeNBContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeNBtoSeNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNBtoSeNBContainer" + }, + { ATF_POINTER, 1, offsetof(struct ResponseInformationSeNBReconfComp_SuccessItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P21, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ResponseInformationSeNBReconfComp_SuccessItem_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSeNBReconfComp_SuccessItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNBtoSeNBContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_SuccessItem_specs_1 = { + sizeof(struct ResponseInformationSeNBReconfComp_SuccessItem), + offsetof(struct ResponseInformationSeNBReconfComp_SuccessItem, _asn_ctx), + asn_MAP_ResponseInformationSeNBReconfComp_SuccessItem_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ResponseInformationSeNBReconfComp_SuccessItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem = { + "ResponseInformationSeNBReconfComp-SuccessItem", + "ResponseInformationSeNBReconfComp-SuccessItem", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1, + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[0]), /* 1 */ + asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSeNBReconfComp_SuccessItem_1, + 2, /* Elements count */ + &asn_SPC_ResponseInformationSeNBReconfComp_SuccessItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h new file mode 100644 index 0000000..304f9e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp-SuccessItem.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSeNBReconfComp_SuccessItem_H_ +#define _ResponseInformationSeNBReconfComp_SuccessItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeNBtoSeNBContainer.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ResponseInformationSeNBReconfComp-SuccessItem */ +typedef struct ResponseInformationSeNBReconfComp_SuccessItem { + MeNBtoSeNBContainer_t *meNBtoSeNBContainer; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSeNBReconfComp_SuccessItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_SuccessItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_SuccessItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSeNBReconfComp_SuccessItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c new file mode 100644 index 0000000..82b35a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSeNBReconfComp.h" + +#include "ResponseInformationSeNBReconfComp-SuccessItem.h" +#include "ResponseInformationSeNBReconfComp-RejectByMeNBItem.h" +static asn_per_constraints_t asn_PER_type_ResponseInformationSeNBReconfComp_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ResponseInformationSeNBReconfComp_1[] = { + { ATF_POINTER, 0, offsetof(struct ResponseInformationSeNBReconfComp, choice.success), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ResponseInformationSeNBReconfComp_SuccessItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "success" + }, + { ATF_POINTER, 0, offsetof(struct ResponseInformationSeNBReconfComp, choice.reject_by_MeNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ResponseInformationSeNBReconfComp_RejectByMeNBItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reject-by-MeNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSeNBReconfComp_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* success */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_ResponseInformationSeNBReconfComp_specs_1 = { + sizeof(struct ResponseInformationSeNBReconfComp), + offsetof(struct ResponseInformationSeNBReconfComp, _asn_ctx), + offsetof(struct ResponseInformationSeNBReconfComp, present), + sizeof(((struct ResponseInformationSeNBReconfComp *)0)->present), + asn_MAP_ResponseInformationSeNBReconfComp_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp = { + "ResponseInformationSeNBReconfComp", + "ResponseInformationSeNBReconfComp", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ResponseInformationSeNBReconfComp_constr_1, CHOICE_constraint }, + asn_MBR_ResponseInformationSeNBReconfComp_1, + 2, /* Elements count */ + &asn_SPC_ResponseInformationSeNBReconfComp_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h new file mode 100644 index 0000000..fbe4128 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSeNBReconfComp.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSeNBReconfComp_H_ +#define _ResponseInformationSeNBReconfComp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ResponseInformationSeNBReconfComp_PR { + ResponseInformationSeNBReconfComp_PR_NOTHING, /* No components present */ + ResponseInformationSeNBReconfComp_PR_success, + ResponseInformationSeNBReconfComp_PR_reject_by_MeNB + /* Extensions may appear below */ + +} ResponseInformationSeNBReconfComp_PR; + +/* Forward declarations */ +struct ResponseInformationSeNBReconfComp_SuccessItem; +struct ResponseInformationSeNBReconfComp_RejectByMeNBItem; + +/* ResponseInformationSeNBReconfComp */ +typedef struct ResponseInformationSeNBReconfComp { + ResponseInformationSeNBReconfComp_PR present; + union ResponseInformationSeNBReconfComp_u { + struct ResponseInformationSeNBReconfComp_SuccessItem *success; + struct ResponseInformationSeNBReconfComp_RejectByMeNBItem *reject_by_MeNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSeNBReconfComp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSeNBReconfComp; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSeNBReconfComp_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c new file mode 100644 index 0000000..97adf6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSgNBReconfComp-RejectByMeNBItem.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItem, cause), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, + { ATF_POINTER, 1, offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P51, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItem_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cause */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1 = { + sizeof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItem), + offsetof(struct ResponseInformationSgNBReconfComp_RejectByMeNBItem, _asn_ctx), + asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ResponseInformationSgNBReconfComp_RejectByMeNBItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem = { + "ResponseInformationSgNBReconfComp-RejectByMeNBItem", + "ResponseInformationSgNBReconfComp-RejectByMeNBItem", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1, + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */ + asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1, + 2, /* Elements count */ + &asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h new file mode 100644 index 0000000..1ea6a84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-RejectByMeNBItem.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_ +#define _ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ResponseInformationSgNBReconfComp-RejectByMeNBItem */ +typedef struct ResponseInformationSgNBReconfComp_RejectByMeNBItem { + Cause_t cause; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSgNBReconfComp_RejectByMeNBItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c new file mode 100644 index 0000000..4e381a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSgNBReconfComp-SuccessItem.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_SuccessItem_1[] = { + { ATF_POINTER, 2, offsetof(struct ResponseInformationSgNBReconfComp_SuccessItem, meNBtoSgNBContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeNBtoSgNBContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNBtoSgNBContainer" + }, + { ATF_POINTER, 1, offsetof(struct ResponseInformationSgNBReconfComp_SuccessItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P50, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ResponseInformationSgNBReconfComp_SuccessItem_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSgNBReconfComp_SuccessItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNBtoSgNBContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_SuccessItem_specs_1 = { + sizeof(struct ResponseInformationSgNBReconfComp_SuccessItem), + offsetof(struct ResponseInformationSgNBReconfComp_SuccessItem, _asn_ctx), + asn_MAP_ResponseInformationSgNBReconfComp_SuccessItem_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ResponseInformationSgNBReconfComp_SuccessItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem = { + "ResponseInformationSgNBReconfComp-SuccessItem", + "ResponseInformationSgNBReconfComp-SuccessItem", + &asn_OP_SEQUENCE, + asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1, + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[0]), /* 1 */ + asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1) + /sizeof(asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResponseInformationSgNBReconfComp_SuccessItem_1, + 2, /* Elements count */ + &asn_SPC_ResponseInformationSgNBReconfComp_SuccessItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h new file mode 100644 index 0000000..7c20382 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp-SuccessItem.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSgNBReconfComp_SuccessItem_H_ +#define _ResponseInformationSgNBReconfComp_SuccessItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeNBtoSgNBContainer.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ResponseInformationSgNBReconfComp-SuccessItem */ +typedef struct ResponseInformationSgNBReconfComp_SuccessItem { + MeNBtoSgNBContainer_t *meNBtoSgNBContainer; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSgNBReconfComp_SuccessItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_SuccessItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_SuccessItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSgNBReconfComp_SuccessItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c new file mode 100644 index 0000000..11acaa9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResponseInformationSgNBReconfComp.h" + +#include "ResponseInformationSgNBReconfComp-SuccessItem.h" +#include "ResponseInformationSgNBReconfComp-RejectByMeNBItem.h" +static asn_per_constraints_t asn_PER_type_ResponseInformationSgNBReconfComp_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ResponseInformationSgNBReconfComp_1[] = { + { ATF_POINTER, 0, offsetof(struct ResponseInformationSgNBReconfComp, choice.success_SgNBReconfComp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ResponseInformationSgNBReconfComp_SuccessItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "success-SgNBReconfComp" + }, + { ATF_POINTER, 0, offsetof(struct ResponseInformationSgNBReconfComp, choice.reject_by_MeNB_SgNBReconfComp), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ResponseInformationSgNBReconfComp_RejectByMeNBItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reject-by-MeNB-SgNBReconfComp" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ResponseInformationSgNBReconfComp_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* success-SgNBReconfComp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB-SgNBReconfComp */ +}; +static asn_CHOICE_specifics_t asn_SPC_ResponseInformationSgNBReconfComp_specs_1 = { + sizeof(struct ResponseInformationSgNBReconfComp), + offsetof(struct ResponseInformationSgNBReconfComp, _asn_ctx), + offsetof(struct ResponseInformationSgNBReconfComp, present), + sizeof(((struct ResponseInformationSgNBReconfComp *)0)->present), + asn_MAP_ResponseInformationSgNBReconfComp_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp = { + "ResponseInformationSgNBReconfComp", + "ResponseInformationSgNBReconfComp", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ResponseInformationSgNBReconfComp_constr_1, CHOICE_constraint }, + asn_MBR_ResponseInformationSgNBReconfComp_1, + 2, /* Elements count */ + &asn_SPC_ResponseInformationSgNBReconfComp_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h new file mode 100644 index 0000000..ddb55ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResponseInformationSgNBReconfComp.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResponseInformationSgNBReconfComp_H_ +#define _ResponseInformationSgNBReconfComp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ResponseInformationSgNBReconfComp_PR { + ResponseInformationSgNBReconfComp_PR_NOTHING, /* No components present */ + ResponseInformationSgNBReconfComp_PR_success_SgNBReconfComp, + ResponseInformationSgNBReconfComp_PR_reject_by_MeNB_SgNBReconfComp + /* Extensions may appear below */ + +} ResponseInformationSgNBReconfComp_PR; + +/* Forward declarations */ +struct ResponseInformationSgNBReconfComp_SuccessItem; +struct ResponseInformationSgNBReconfComp_RejectByMeNBItem; + +/* ResponseInformationSgNBReconfComp */ +typedef struct ResponseInformationSgNBReconfComp { + ResponseInformationSgNBReconfComp_PR present; + union ResponseInformationSgNBReconfComp_u { + struct ResponseInformationSgNBReconfComp_SuccessItem *success_SgNBReconfComp; + struct ResponseInformationSgNBReconfComp_RejectByMeNBItem *reject_by_MeNB_SgNBReconfComp; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResponseInformationSgNBReconfComp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResponseInformationSgNBReconfComp; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResponseInformationSgNBReconfComp_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.c new file mode 100644 index 0000000..aebc0af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.c @@ -0,0 +1,152 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ResumeID.h" + +static int +memb_non_truncated_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_truncated_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 24)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_non_truncated_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_truncated_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 24, 24 } /* (SIZE(24..24)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ResumeID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ResumeID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResumeID, choice.non_truncated), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_non_truncated_constr_2, memb_non_truncated_constraint_1 }, + 0, 0, /* No default value */ + "non-truncated" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResumeID, choice.truncated), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_truncated_constr_3, memb_truncated_constraint_1 }, + 0, 0, /* No default value */ + "truncated" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ResumeID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* non-truncated */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* truncated */ +}; +asn_CHOICE_specifics_t asn_SPC_ResumeID_specs_1 = { + sizeof(struct ResumeID), + offsetof(struct ResumeID, _asn_ctx), + offsetof(struct ResumeID, present), + sizeof(((struct ResumeID *)0)->present), + asn_MAP_ResumeID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ResumeID = { + "ResumeID", + "ResumeID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ResumeID_constr_1, CHOICE_constraint }, + asn_MBR_ResumeID_1, + 2, /* Elements count */ + &asn_SPC_ResumeID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.h new file mode 100644 index 0000000..23b6a87 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ResumeID.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ResumeID_H_ +#define _ResumeID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ResumeID_PR { + ResumeID_PR_NOTHING, /* No components present */ + ResumeID_PR_non_truncated, + ResumeID_PR_truncated + /* Extensions may appear below */ + +} ResumeID_PR; + +/* ResumeID */ +typedef struct ResumeID { + ResumeID_PR present; + union ResumeID_u { + BIT_STRING_t non_truncated; + BIT_STRING_t truncated; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResumeID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResumeID; +extern asn_CHOICE_specifics_t asn_SPC_ResumeID_specs_1; +extern asn_TYPE_member_t asn_MBR_ResumeID_1[2]; +extern asn_per_constraints_t asn_PER_type_ResumeID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResumeID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.c new file mode 100644 index 0000000..43b6fd1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RetrieveUEContextFailure.h" + +static asn_TYPE_member_t asn_MBR_RetrieveUEContextFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P63, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextFailure_specs_1 = { + sizeof(struct RetrieveUEContextFailure), + offsetof(struct RetrieveUEContextFailure, _asn_ctx), + asn_MAP_RetrieveUEContextFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextFailure = { + "RetrieveUEContextFailure", + "RetrieveUEContextFailure", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextFailure_tags_1, + sizeof(asn_DEF_RetrieveUEContextFailure_tags_1) + /sizeof(asn_DEF_RetrieveUEContextFailure_tags_1[0]), /* 1 */ + asn_DEF_RetrieveUEContextFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextFailure_tags_1) + /sizeof(asn_DEF_RetrieveUEContextFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextFailure_1, + 1, /* Elements count */ + &asn_SPC_RetrieveUEContextFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.h new file mode 100644 index 0000000..5f77d15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RetrieveUEContextFailure_H_ +#define _RetrieveUEContextFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RetrieveUEContextFailure */ +typedef struct RetrieveUEContextFailure { + ProtocolIE_Container_119P63_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _RetrieveUEContextFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.c new file mode 100644 index 0000000..5950b3f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RetrieveUEContextRequest.h" + +static asn_TYPE_member_t asn_MBR_RetrieveUEContextRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P61, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextRequest_specs_1 = { + sizeof(struct RetrieveUEContextRequest), + offsetof(struct RetrieveUEContextRequest, _asn_ctx), + asn_MAP_RetrieveUEContextRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextRequest = { + "RetrieveUEContextRequest", + "RetrieveUEContextRequest", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextRequest_tags_1, + sizeof(asn_DEF_RetrieveUEContextRequest_tags_1) + /sizeof(asn_DEF_RetrieveUEContextRequest_tags_1[0]), /* 1 */ + asn_DEF_RetrieveUEContextRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextRequest_tags_1) + /sizeof(asn_DEF_RetrieveUEContextRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextRequest_1, + 1, /* Elements count */ + &asn_SPC_RetrieveUEContextRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.h new file mode 100644 index 0000000..b9c564a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RetrieveUEContextRequest_H_ +#define _RetrieveUEContextRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RetrieveUEContextRequest */ +typedef struct RetrieveUEContextRequest { + ProtocolIE_Container_119P61_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _RetrieveUEContextRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.c new file mode 100644 index 0000000..0e46ce8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "RetrieveUEContextResponse.h" + +static asn_TYPE_member_t asn_MBR_RetrieveUEContextResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RetrieveUEContextResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P62, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RetrieveUEContextResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RetrieveUEContextResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RetrieveUEContextResponse_specs_1 = { + sizeof(struct RetrieveUEContextResponse), + offsetof(struct RetrieveUEContextResponse, _asn_ctx), + asn_MAP_RetrieveUEContextResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextResponse = { + "RetrieveUEContextResponse", + "RetrieveUEContextResponse", + &asn_OP_SEQUENCE, + asn_DEF_RetrieveUEContextResponse_tags_1, + sizeof(asn_DEF_RetrieveUEContextResponse_tags_1) + /sizeof(asn_DEF_RetrieveUEContextResponse_tags_1[0]), /* 1 */ + asn_DEF_RetrieveUEContextResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RetrieveUEContextResponse_tags_1) + /sizeof(asn_DEF_RetrieveUEContextResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RetrieveUEContextResponse_1, + 1, /* Elements count */ + &asn_SPC_RetrieveUEContextResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.h new file mode 100644 index 0000000..1e08292 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/RetrieveUEContextResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _RetrieveUEContextResponse_H_ +#define _RetrieveUEContextResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RetrieveUEContextResponse */ +typedef struct RetrieveUEContextResponse { + ProtocolIE_Container_119P62_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RetrieveUEContextResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RetrieveUEContextResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _RetrieveUEContextResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.c new file mode 100644 index 0000000..d4b7d05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "S1TNLLoadIndicator.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_S1TNLLoadIndicator_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct S1TNLLoadIndicator, dLS1TNLLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dLS1TNLLoadIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct S1TNLLoadIndicator, uLS1TNLLoadIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoadIndicator, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLS1TNLLoadIndicator" + }, + { ATF_POINTER, 1, offsetof(struct S1TNLLoadIndicator, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P189, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_S1TNLLoadIndicator_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_S1TNLLoadIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_S1TNLLoadIndicator_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dLS1TNLLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLS1TNLLoadIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_S1TNLLoadIndicator_specs_1 = { + sizeof(struct S1TNLLoadIndicator), + offsetof(struct S1TNLLoadIndicator, _asn_ctx), + asn_MAP_S1TNLLoadIndicator_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_S1TNLLoadIndicator_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_S1TNLLoadIndicator = { + "S1TNLLoadIndicator", + "S1TNLLoadIndicator", + &asn_OP_SEQUENCE, + asn_DEF_S1TNLLoadIndicator_tags_1, + sizeof(asn_DEF_S1TNLLoadIndicator_tags_1) + /sizeof(asn_DEF_S1TNLLoadIndicator_tags_1[0]), /* 1 */ + asn_DEF_S1TNLLoadIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_S1TNLLoadIndicator_tags_1) + /sizeof(asn_DEF_S1TNLLoadIndicator_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_S1TNLLoadIndicator_1, + 3, /* Elements count */ + &asn_SPC_S1TNLLoadIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.h new file mode 100644 index 0000000..c62c080 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/S1TNLLoadIndicator.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _S1TNLLoadIndicator_H_ +#define _S1TNLLoadIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "LoadIndicator.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* S1TNLLoadIndicator */ +typedef struct S1TNLLoadIndicator { + LoadIndicator_t dLS1TNLLoadIndicator; + LoadIndicator_t uLS1TNLLoadIndicator; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} S1TNLLoadIndicator_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_S1TNLLoadIndicator; +extern asn_SEQUENCE_specifics_t asn_SPC_S1TNLLoadIndicator_specs_1; +extern asn_TYPE_member_t asn_MBR_S1TNLLoadIndicator_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _S1TNLLoadIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.c new file mode 100644 index 0000000..129c90f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SCGChangeIndication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SCGChangeIndication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SCGChangeIndication_value2enum_1[] = { + { 0, 19, "pDCPCountWrapAround" }, + { 1, 12, "pSCellChange" }, + { 2, 5, "other" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SCGChangeIndication_enum2value_1[] = { + 2, /* other(2) */ + 0, /* pDCPCountWrapAround(0) */ + 1 /* pSCellChange(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SCGChangeIndication_specs_1 = { + asn_MAP_SCGChangeIndication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SCGChangeIndication_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SCGChangeIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SCGChangeIndication = { + "SCGChangeIndication", + "SCGChangeIndication", + &asn_OP_NativeEnumerated, + asn_DEF_SCGChangeIndication_tags_1, + sizeof(asn_DEF_SCGChangeIndication_tags_1) + /sizeof(asn_DEF_SCGChangeIndication_tags_1[0]), /* 1 */ + asn_DEF_SCGChangeIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_SCGChangeIndication_tags_1) + /sizeof(asn_DEF_SCGChangeIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SCGChangeIndication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SCGChangeIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.h new file mode 100644 index 0000000..0a60750 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGChangeIndication.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SCGChangeIndication_H_ +#define _SCGChangeIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SCGChangeIndication { + SCGChangeIndication_pDCPCountWrapAround = 0, + SCGChangeIndication_pSCellChange = 1, + SCGChangeIndication_other = 2 + /* + * Enumeration is extensible + */ +} e_SCGChangeIndication; + +/* SCGChangeIndication */ +typedef long SCGChangeIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SCGChangeIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SCGChangeIndication; +extern const asn_INTEGER_specifics_t asn_SPC_SCGChangeIndication_specs_1; +asn_struct_free_f SCGChangeIndication_free; +asn_struct_print_f SCGChangeIndication_print; +asn_constr_check_f SCGChangeIndication_constraint; +ber_type_decoder_f SCGChangeIndication_decode_ber; +der_type_encoder_f SCGChangeIndication_encode_der; +xer_type_decoder_f SCGChangeIndication_decode_xer; +xer_type_encoder_f SCGChangeIndication_encode_xer; +per_type_decoder_f SCGChangeIndication_decode_uper; +per_type_encoder_f SCGChangeIndication_encode_uper; +per_type_decoder_f SCGChangeIndication_decode_aper; +per_type_encoder_f SCGChangeIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SCGChangeIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.c new file mode 100644 index 0000000..945a90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SCGConfigurationQuery.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SCGConfigurationQuery_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SCGConfigurationQuery_value2enum_1[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SCGConfigurationQuery_enum2value_1[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SCGConfigurationQuery_specs_1 = { + asn_MAP_SCGConfigurationQuery_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SCGConfigurationQuery_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SCGConfigurationQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SCGConfigurationQuery = { + "SCGConfigurationQuery", + "SCGConfigurationQuery", + &asn_OP_NativeEnumerated, + asn_DEF_SCGConfigurationQuery_tags_1, + sizeof(asn_DEF_SCGConfigurationQuery_tags_1) + /sizeof(asn_DEF_SCGConfigurationQuery_tags_1[0]), /* 1 */ + asn_DEF_SCGConfigurationQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_SCGConfigurationQuery_tags_1) + /sizeof(asn_DEF_SCGConfigurationQuery_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SCGConfigurationQuery_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SCGConfigurationQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.h new file mode 100644 index 0000000..a00fbcb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SCGConfigurationQuery.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SCGConfigurationQuery_H_ +#define _SCGConfigurationQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SCGConfigurationQuery { + SCGConfigurationQuery_true = 0 + /* + * Enumeration is extensible + */ +} e_SCGConfigurationQuery; + +/* SCGConfigurationQuery */ +typedef long SCGConfigurationQuery_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SCGConfigurationQuery_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SCGConfigurationQuery; +extern const asn_INTEGER_specifics_t asn_SPC_SCGConfigurationQuery_specs_1; +asn_struct_free_f SCGConfigurationQuery_free; +asn_struct_print_f SCGConfigurationQuery_print; +asn_constr_check_f SCGConfigurationQuery_constraint; +ber_type_decoder_f SCGConfigurationQuery_decode_ber; +der_type_encoder_f SCGConfigurationQuery_encode_der; +xer_type_decoder_f SCGConfigurationQuery_decode_xer; +xer_type_encoder_f SCGConfigurationQuery_encode_xer; +per_type_decoder_f SCGConfigurationQuery_decode_uper; +per_type_encoder_f SCGConfigurationQuery_encode_uper; +per_type_decoder_f SCGConfigurationQuery_decode_aper; +per_type_encoder_f SCGConfigurationQuery_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SCGConfigurationQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c new file mode 100644 index 0000000..af995ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SGNB-Addition-Trigger-Ind.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SGNB_Addition_Trigger_Ind_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SGNB_Addition_Trigger_Ind_value2enum_1[] = { + { 0, 9, "sn-change" }, + { 1, 12, "inter-eNB-HO" }, + { 2, 12, "intra-eNB-HO" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SGNB_Addition_Trigger_Ind_enum2value_1[] = { + 1, /* inter-eNB-HO(1) */ + 2, /* intra-eNB-HO(2) */ + 0 /* sn-change(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SGNB_Addition_Trigger_Ind_specs_1 = { + asn_MAP_SGNB_Addition_Trigger_Ind_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SGNB_Addition_Trigger_Ind_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SGNB_Addition_Trigger_Ind_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SGNB_Addition_Trigger_Ind = { + "SGNB-Addition-Trigger-Ind", + "SGNB-Addition-Trigger-Ind", + &asn_OP_NativeEnumerated, + asn_DEF_SGNB_Addition_Trigger_Ind_tags_1, + sizeof(asn_DEF_SGNB_Addition_Trigger_Ind_tags_1) + /sizeof(asn_DEF_SGNB_Addition_Trigger_Ind_tags_1[0]), /* 1 */ + asn_DEF_SGNB_Addition_Trigger_Ind_tags_1, /* Same as above */ + sizeof(asn_DEF_SGNB_Addition_Trigger_Ind_tags_1) + /sizeof(asn_DEF_SGNB_Addition_Trigger_Ind_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SGNB_Addition_Trigger_Ind_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SGNB_Addition_Trigger_Ind_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h new file mode 100644 index 0000000..066bd83 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SGNB-Addition-Trigger-Ind.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SGNB_Addition_Trigger_Ind_H_ +#define _SGNB_Addition_Trigger_Ind_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SGNB_Addition_Trigger_Ind { + SGNB_Addition_Trigger_Ind_sn_change = 0, + SGNB_Addition_Trigger_Ind_inter_eNB_HO = 1, + SGNB_Addition_Trigger_Ind_intra_eNB_HO = 2 + /* + * Enumeration is extensible + */ +} e_SGNB_Addition_Trigger_Ind; + +/* SGNB-Addition-Trigger-Ind */ +typedef long SGNB_Addition_Trigger_Ind_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SGNB_Addition_Trigger_Ind_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SGNB_Addition_Trigger_Ind; +extern const asn_INTEGER_specifics_t asn_SPC_SGNB_Addition_Trigger_Ind_specs_1; +asn_struct_free_f SGNB_Addition_Trigger_Ind_free; +asn_struct_print_f SGNB_Addition_Trigger_Ind_print; +asn_constr_check_f SGNB_Addition_Trigger_Ind_constraint; +ber_type_decoder_f SGNB_Addition_Trigger_Ind_decode_ber; +der_type_encoder_f SGNB_Addition_Trigger_Ind_encode_der; +xer_type_decoder_f SGNB_Addition_Trigger_Ind_decode_xer; +xer_type_encoder_f SGNB_Addition_Trigger_Ind_encode_xer; +per_type_decoder_f SGNB_Addition_Trigger_Ind_decode_uper; +per_type_encoder_f SGNB_Addition_Trigger_Ind_encode_uper; +per_type_decoder_f SGNB_Addition_Trigger_Ind_decode_aper; +per_type_encoder_f SGNB_Addition_Trigger_Ind_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SGNB_Addition_Trigger_Ind_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c new file mode 100644 index 0000000..c847749 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SIPTOBearerDeactivationIndication.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SIPTOBearerDeactivationIndication_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SIPTOBearerDeactivationIndication_value2enum_1[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SIPTOBearerDeactivationIndication_enum2value_1[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SIPTOBearerDeactivationIndication_specs_1 = { + asn_MAP_SIPTOBearerDeactivationIndication_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SIPTOBearerDeactivationIndication_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SIPTOBearerDeactivationIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SIPTOBearerDeactivationIndication = { + "SIPTOBearerDeactivationIndication", + "SIPTOBearerDeactivationIndication", + &asn_OP_NativeEnumerated, + asn_DEF_SIPTOBearerDeactivationIndication_tags_1, + sizeof(asn_DEF_SIPTOBearerDeactivationIndication_tags_1) + /sizeof(asn_DEF_SIPTOBearerDeactivationIndication_tags_1[0]), /* 1 */ + asn_DEF_SIPTOBearerDeactivationIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_SIPTOBearerDeactivationIndication_tags_1) + /sizeof(asn_DEF_SIPTOBearerDeactivationIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SIPTOBearerDeactivationIndication_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SIPTOBearerDeactivationIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h new file mode 100644 index 0000000..ba57507 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SIPTOBearerDeactivationIndication.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SIPTOBearerDeactivationIndication_H_ +#define _SIPTOBearerDeactivationIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SIPTOBearerDeactivationIndication { + SIPTOBearerDeactivationIndication_true = 0 + /* + * Enumeration is extensible + */ +} e_SIPTOBearerDeactivationIndication; + +/* SIPTOBearerDeactivationIndication */ +typedef long SIPTOBearerDeactivationIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SIPTOBearerDeactivationIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SIPTOBearerDeactivationIndication; +extern const asn_INTEGER_specifics_t asn_SPC_SIPTOBearerDeactivationIndication_specs_1; +asn_struct_free_f SIPTOBearerDeactivationIndication_free; +asn_struct_print_f SIPTOBearerDeactivationIndication_print; +asn_constr_check_f SIPTOBearerDeactivationIndication_constraint; +ber_type_decoder_f SIPTOBearerDeactivationIndication_decode_ber; +der_type_encoder_f SIPTOBearerDeactivationIndication_encode_der; +xer_type_decoder_f SIPTOBearerDeactivationIndication_decode_xer; +xer_type_encoder_f SIPTOBearerDeactivationIndication_encode_xer; +per_type_decoder_f SIPTOBearerDeactivationIndication_decode_uper; +per_type_encoder_f SIPTOBearerDeactivationIndication_encode_uper; +per_type_decoder_f SIPTOBearerDeactivationIndication_decode_aper; +per_type_encoder_f SIPTOBearerDeactivationIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SIPTOBearerDeactivationIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.c new file mode 100644 index 0000000..c3724c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SNStatusTransfer.h" + +static asn_TYPE_member_t asn_MBR_SNStatusTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNStatusTransfer, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SNStatusTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNStatusTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SNStatusTransfer_specs_1 = { + sizeof(struct SNStatusTransfer), + offsetof(struct SNStatusTransfer, _asn_ctx), + asn_MAP_SNStatusTransfer_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNStatusTransfer = { + "SNStatusTransfer", + "SNStatusTransfer", + &asn_OP_SEQUENCE, + asn_DEF_SNStatusTransfer_tags_1, + sizeof(asn_DEF_SNStatusTransfer_tags_1) + /sizeof(asn_DEF_SNStatusTransfer_tags_1[0]), /* 1 */ + asn_DEF_SNStatusTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_SNStatusTransfer_tags_1) + /sizeof(asn_DEF_SNStatusTransfer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNStatusTransfer_1, + 1, /* Elements count */ + &asn_SPC_SNStatusTransfer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.h new file mode 100644 index 0000000..cac1b6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SNStatusTransfer.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SNStatusTransfer_H_ +#define _SNStatusTransfer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNStatusTransfer */ +typedef struct SNStatusTransfer { + ProtocolIE_Container_119P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNStatusTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNStatusTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNStatusTransfer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.c new file mode 100644 index 0000000..bfffb24 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SRBType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SRBType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SRBType_value2enum_1[] = { + { 0, 4, "srb1" }, + { 1, 4, "srb2" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SRBType_enum2value_1[] = { + 0, /* srb1(0) */ + 1 /* srb2(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SRBType_specs_1 = { + asn_MAP_SRBType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SRBType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SRBType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SRBType = { + "SRBType", + "SRBType", + &asn_OP_NativeEnumerated, + asn_DEF_SRBType_tags_1, + sizeof(asn_DEF_SRBType_tags_1) + /sizeof(asn_DEF_SRBType_tags_1[0]), /* 1 */ + asn_DEF_SRBType_tags_1, /* Same as above */ + sizeof(asn_DEF_SRBType_tags_1) + /sizeof(asn_DEF_SRBType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SRBType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SRBType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.h new file mode 100644 index 0000000..3479c06 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRBType.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SRBType_H_ +#define _SRBType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SRBType { + SRBType_srb1 = 0, + SRBType_srb2 = 1 + /* + * Enumeration is extensible + */ +} e_SRBType; + +/* SRBType */ +typedef long SRBType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SRBType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SRBType; +extern const asn_INTEGER_specifics_t asn_SPC_SRBType_specs_1; +asn_struct_free_f SRBType_free; +asn_struct_print_f SRBType_print; +asn_constr_check_f SRBType_constraint; +ber_type_decoder_f SRBType_decode_ber; +der_type_encoder_f SRBType_encode_der; +xer_type_decoder_f SRBType_decode_xer; +xer_type_encoder_f SRBType_encode_xer; +per_type_decoder_f SRBType_decode_uper; +per_type_encoder_f SRBType_encode_uper; +per_type_decoder_f SRBType_decode_aper; +per_type_encoder_f SRBType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SRBType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.c new file mode 100644 index 0000000..b367be0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SRVCCOperationPossible.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SRVCCOperationPossible_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SRVCCOperationPossible_value2enum_1[] = { + { 0, 8, "possible" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SRVCCOperationPossible_enum2value_1[] = { + 0 /* possible(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SRVCCOperationPossible_specs_1 = { + asn_MAP_SRVCCOperationPossible_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SRVCCOperationPossible_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SRVCCOperationPossible_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SRVCCOperationPossible = { + "SRVCCOperationPossible", + "SRVCCOperationPossible", + &asn_OP_NativeEnumerated, + asn_DEF_SRVCCOperationPossible_tags_1, + sizeof(asn_DEF_SRVCCOperationPossible_tags_1) + /sizeof(asn_DEF_SRVCCOperationPossible_tags_1[0]), /* 1 */ + asn_DEF_SRVCCOperationPossible_tags_1, /* Same as above */ + sizeof(asn_DEF_SRVCCOperationPossible_tags_1) + /sizeof(asn_DEF_SRVCCOperationPossible_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SRVCCOperationPossible_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SRVCCOperationPossible_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.h new file mode 100644 index 0000000..3fca919 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SRVCCOperationPossible.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SRVCCOperationPossible_H_ +#define _SRVCCOperationPossible_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SRVCCOperationPossible { + SRVCCOperationPossible_possible = 0 + /* + * Enumeration is extensible + */ +} e_SRVCCOperationPossible; + +/* SRVCCOperationPossible */ +typedef long SRVCCOperationPossible_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SRVCCOperationPossible_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SRVCCOperationPossible; +extern const asn_INTEGER_specifics_t asn_SPC_SRVCCOperationPossible_specs_1; +asn_struct_free_f SRVCCOperationPossible_free; +asn_struct_print_f SRVCCOperationPossible_print; +asn_constr_check_f SRVCCOperationPossible_constraint; +ber_type_decoder_f SRVCCOperationPossible_decode_ber; +der_type_encoder_f SRVCCOperationPossible_encode_der; +xer_type_decoder_f SRVCCOperationPossible_decode_xer; +xer_type_encoder_f SRVCCOperationPossible_encode_xer; +per_type_decoder_f SRVCCOperationPossible_decode_uper; +per_type_encoder_f SRVCCOperationPossible_encode_uper; +per_type_decoder_f SRVCCOperationPossible_decode_aper; +per_type_encoder_f SRVCCOperationPossible_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SRVCCOperationPossible_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.c new file mode 100644 index 0000000..8883d47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.c @@ -0,0 +1,121 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SULInformation.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_sUL_ARFCN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3279165)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_sUL_ARFCN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 22, -1, 0, 3279165 } /* (0..3279165) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SULInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SULInformation, sUL_ARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_sUL_ARFCN_constr_2, memb_sUL_ARFCN_constraint_1 }, + 0, 0, /* No default value */ + "sUL-ARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct SULInformation, sUL_TxBW), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_TxBW, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sUL-TxBW" + }, + { ATF_POINTER, 1, offsetof(struct SULInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P199, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SULInformation_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_SULInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SULInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sUL-ARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sUL-TxBW */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SULInformation_specs_1 = { + sizeof(struct SULInformation), + offsetof(struct SULInformation, _asn_ctx), + asn_MAP_SULInformation_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SULInformation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SULInformation = { + "SULInformation", + "SULInformation", + &asn_OP_SEQUENCE, + asn_DEF_SULInformation_tags_1, + sizeof(asn_DEF_SULInformation_tags_1) + /sizeof(asn_DEF_SULInformation_tags_1[0]), /* 1 */ + asn_DEF_SULInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_SULInformation_tags_1) + /sizeof(asn_DEF_SULInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SULInformation_1, + 3, /* Elements count */ + &asn_SPC_SULInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.h new file mode 100644 index 0000000..ce58f23 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SULInformation.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SULInformation_H_ +#define _SULInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "NR-TxBW.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SULInformation */ +typedef struct SULInformation { + long sUL_ARFCN; + NR_TxBW_t sUL_TxBW; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SULInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SULInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_SULInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_SULInformation_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SULInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.c new file mode 100644 index 0000000..3d19941 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.c @@ -0,0 +1,197 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ScheduledCommunicationTime.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_dayofWeek_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_timeofDayStart_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 86399)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_timeofDayEnd_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 86399)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_dayofWeek_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 7, 7 } /* (SIZE(7..7)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_timeofDayStart_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 17, -1, 0, 86399 } /* (0..86399,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_timeofDayEnd_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 17, -1, 0, 86399 } /* (0..86399,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ScheduledCommunicationTime_1[] = { + { ATF_POINTER, 4, offsetof(struct ScheduledCommunicationTime, dayofWeek), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_dayofWeek_constr_2, memb_dayofWeek_constraint_1 }, + 0, 0, /* No default value */ + "dayofWeek" + }, + { ATF_POINTER, 3, offsetof(struct ScheduledCommunicationTime, timeofDayStart), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_timeofDayStart_constr_3, memb_timeofDayStart_constraint_1 }, + 0, 0, /* No default value */ + "timeofDayStart" + }, + { ATF_POINTER, 2, offsetof(struct ScheduledCommunicationTime, timeofDayEnd), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_timeofDayEnd_constr_4, memb_timeofDayEnd_constraint_1 }, + 0, 0, /* No default value */ + "timeofDayEnd" + }, + { ATF_POINTER, 1, offsetof(struct ScheduledCommunicationTime, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P197, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ScheduledCommunicationTime_oms_1[] = { 0, 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_ScheduledCommunicationTime_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ScheduledCommunicationTime_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dayofWeek */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* timeofDayStart */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* timeofDayEnd */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ScheduledCommunicationTime_specs_1 = { + sizeof(struct ScheduledCommunicationTime), + offsetof(struct ScheduledCommunicationTime, _asn_ctx), + asn_MAP_ScheduledCommunicationTime_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ScheduledCommunicationTime_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ScheduledCommunicationTime = { + "ScheduledCommunicationTime", + "ScheduledCommunicationTime", + &asn_OP_SEQUENCE, + asn_DEF_ScheduledCommunicationTime_tags_1, + sizeof(asn_DEF_ScheduledCommunicationTime_tags_1) + /sizeof(asn_DEF_ScheduledCommunicationTime_tags_1[0]), /* 1 */ + asn_DEF_ScheduledCommunicationTime_tags_1, /* Same as above */ + sizeof(asn_DEF_ScheduledCommunicationTime_tags_1) + /sizeof(asn_DEF_ScheduledCommunicationTime_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ScheduledCommunicationTime_1, + 4, /* Elements count */ + &asn_SPC_ScheduledCommunicationTime_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.h new file mode 100644 index 0000000..12c09fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ScheduledCommunicationTime.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ScheduledCommunicationTime_H_ +#define _ScheduledCommunicationTime_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ScheduledCommunicationTime */ +typedef struct ScheduledCommunicationTime { + BIT_STRING_t *dayofWeek; /* OPTIONAL */ + long *timeofDayStart; /* OPTIONAL */ + long *timeofDayEnd; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ScheduledCommunicationTime_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ScheduledCommunicationTime; +extern asn_SEQUENCE_specifics_t asn_SPC_ScheduledCommunicationTime_specs_1; +extern asn_TYPE_member_t asn_MBR_ScheduledCommunicationTime_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ScheduledCommunicationTime_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.c new file mode 100644 index 0000000..7755d8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBAdditionRequest.h" + +static asn_TYPE_member_t asn_MBR_SeNBAdditionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P44, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequest_specs_1 = { + sizeof(struct SeNBAdditionRequest), + offsetof(struct SeNBAdditionRequest, _asn_ctx), + asn_MAP_SeNBAdditionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequest = { + "SeNBAdditionRequest", + "SeNBAdditionRequest", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequest_tags_1, + sizeof(asn_DEF_SeNBAdditionRequest_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequest_tags_1[0]), /* 1 */ + asn_DEF_SeNBAdditionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequest_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequest_1, + 1, /* Elements count */ + &asn_SPC_SeNBAdditionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.h new file mode 100644 index 0000000..a067568 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBAdditionRequest_H_ +#define _SeNBAdditionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBAdditionRequest */ +typedef struct SeNBAdditionRequest { + ProtocolIE_Container_119P44_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBAdditionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c new file mode 100644 index 0000000..e0c2ba4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBAdditionRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_SeNBAdditionRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P45, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestAcknowledge_specs_1 = { + sizeof(struct SeNBAdditionRequestAcknowledge), + offsetof(struct SeNBAdditionRequestAcknowledge, _asn_ctx), + asn_MAP_SeNBAdditionRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestAcknowledge = { + "SeNBAdditionRequestAcknowledge", + "SeNBAdditionRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequestAcknowledge_tags_1, + sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_SeNBAdditionRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_SeNBAdditionRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h new file mode 100644 index 0000000..3b405c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBAdditionRequestAcknowledge_H_ +#define _SeNBAdditionRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBAdditionRequestAcknowledge */ +typedef struct SeNBAdditionRequestAcknowledge { + ProtocolIE_Container_119P45_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBAdditionRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.c new file mode 100644 index 0000000..00f156b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBAdditionRequestReject.h" + +static asn_TYPE_member_t asn_MBR_SeNBAdditionRequestReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBAdditionRequestReject, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P46, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBAdditionRequestReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBAdditionRequestReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBAdditionRequestReject_specs_1 = { + sizeof(struct SeNBAdditionRequestReject), + offsetof(struct SeNBAdditionRequestReject, _asn_ctx), + asn_MAP_SeNBAdditionRequestReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestReject = { + "SeNBAdditionRequestReject", + "SeNBAdditionRequestReject", + &asn_OP_SEQUENCE, + asn_DEF_SeNBAdditionRequestReject_tags_1, + sizeof(asn_DEF_SeNBAdditionRequestReject_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequestReject_tags_1[0]), /* 1 */ + asn_DEF_SeNBAdditionRequestReject_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBAdditionRequestReject_tags_1) + /sizeof(asn_DEF_SeNBAdditionRequestReject_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBAdditionRequestReject_1, + 1, /* Elements count */ + &asn_SPC_SeNBAdditionRequestReject_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.h new file mode 100644 index 0000000..316fbef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBAdditionRequestReject.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBAdditionRequestReject_H_ +#define _SeNBAdditionRequestReject_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBAdditionRequestReject */ +typedef struct SeNBAdditionRequestReject { + ProtocolIE_Container_119P46_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBAdditionRequestReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBAdditionRequestReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBAdditionRequestReject_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.c new file mode 100644 index 0000000..afa6276 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBCounterCheckRequest.h" + +static asn_TYPE_member_t asn_MBR_SeNBCounterCheckRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBCounterCheckRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P57, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBCounterCheckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBCounterCheckRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBCounterCheckRequest_specs_1 = { + sizeof(struct SeNBCounterCheckRequest), + offsetof(struct SeNBCounterCheckRequest, _asn_ctx), + asn_MAP_SeNBCounterCheckRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBCounterCheckRequest = { + "SeNBCounterCheckRequest", + "SeNBCounterCheckRequest", + &asn_OP_SEQUENCE, + asn_DEF_SeNBCounterCheckRequest_tags_1, + sizeof(asn_DEF_SeNBCounterCheckRequest_tags_1) + /sizeof(asn_DEF_SeNBCounterCheckRequest_tags_1[0]), /* 1 */ + asn_DEF_SeNBCounterCheckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBCounterCheckRequest_tags_1) + /sizeof(asn_DEF_SeNBCounterCheckRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBCounterCheckRequest_1, + 1, /* Elements count */ + &asn_SPC_SeNBCounterCheckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.h new file mode 100644 index 0000000..816bb3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBCounterCheckRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBCounterCheckRequest_H_ +#define _SeNBCounterCheckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBCounterCheckRequest */ +typedef struct SeNBCounterCheckRequest { + ProtocolIE_Container_119P57_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBCounterCheckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBCounterCheckRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBCounterCheckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.c new file mode 100644 index 0000000..c78e964 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationConfirm.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P52, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationConfirm_specs_1 = { + sizeof(struct SeNBModificationConfirm), + offsetof(struct SeNBModificationConfirm, _asn_ctx), + asn_MAP_SeNBModificationConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationConfirm = { + "SeNBModificationConfirm", + "SeNBModificationConfirm", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationConfirm_tags_1, + sizeof(asn_DEF_SeNBModificationConfirm_tags_1) + /sizeof(asn_DEF_SeNBModificationConfirm_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationConfirm_tags_1) + /sizeof(asn_DEF_SeNBModificationConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationConfirm_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.h new file mode 100644 index 0000000..98690bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationConfirm_H_ +#define _SeNBModificationConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationConfirm */ +typedef struct SeNBModificationConfirm { + ProtocolIE_Container_119P52_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.c new file mode 100644 index 0000000..0b9959a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationRefuse.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationRefuse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRefuse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P53, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRefuse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRefuse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRefuse_specs_1 = { + sizeof(struct SeNBModificationRefuse), + offsetof(struct SeNBModificationRefuse, _asn_ctx), + asn_MAP_SeNBModificationRefuse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRefuse = { + "SeNBModificationRefuse", + "SeNBModificationRefuse", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRefuse_tags_1, + sizeof(asn_DEF_SeNBModificationRefuse_tags_1) + /sizeof(asn_DEF_SeNBModificationRefuse_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationRefuse_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRefuse_tags_1) + /sizeof(asn_DEF_SeNBModificationRefuse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRefuse_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationRefuse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.h new file mode 100644 index 0000000..a0fca6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRefuse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationRefuse_H_ +#define _SeNBModificationRefuse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationRefuse */ +typedef struct SeNBModificationRefuse { + ProtocolIE_Container_119P53_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRefuse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRefuse; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationRefuse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.c new file mode 100644 index 0000000..24f9c78 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationRequest.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P48, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequest_specs_1 = { + sizeof(struct SeNBModificationRequest), + offsetof(struct SeNBModificationRequest, _asn_ctx), + asn_MAP_SeNBModificationRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequest = { + "SeNBModificationRequest", + "SeNBModificationRequest", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequest_tags_1, + sizeof(asn_DEF_SeNBModificationRequest_tags_1) + /sizeof(asn_DEF_SeNBModificationRequest_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequest_tags_1) + /sizeof(asn_DEF_SeNBModificationRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequest_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.h new file mode 100644 index 0000000..be41488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationRequest_H_ +#define _SeNBModificationRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationRequest */ +typedef struct SeNBModificationRequest { + ProtocolIE_Container_119P48_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c new file mode 100644 index 0000000..5768eec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P49, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestAcknowledge_specs_1 = { + sizeof(struct SeNBModificationRequestAcknowledge), + offsetof(struct SeNBModificationRequestAcknowledge, _asn_ctx), + asn_MAP_SeNBModificationRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestAcknowledge = { + "SeNBModificationRequestAcknowledge", + "SeNBModificationRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequestAcknowledge_tags_1, + sizeof(asn_DEF_SeNBModificationRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SeNBModificationRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SeNBModificationRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h new file mode 100644 index 0000000..808611f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationRequestAcknowledge_H_ +#define _SeNBModificationRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationRequestAcknowledge */ +typedef struct SeNBModificationRequestAcknowledge { + ProtocolIE_Container_119P49_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.c new file mode 100644 index 0000000..f0b861c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationRequestReject.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationRequestReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequestReject, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P50, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequestReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequestReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequestReject_specs_1 = { + sizeof(struct SeNBModificationRequestReject), + offsetof(struct SeNBModificationRequestReject, _asn_ctx), + asn_MAP_SeNBModificationRequestReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestReject = { + "SeNBModificationRequestReject", + "SeNBModificationRequestReject", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequestReject_tags_1, + sizeof(asn_DEF_SeNBModificationRequestReject_tags_1) + /sizeof(asn_DEF_SeNBModificationRequestReject_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationRequestReject_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequestReject_tags_1) + /sizeof(asn_DEF_SeNBModificationRequestReject_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequestReject_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationRequestReject_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.h new file mode 100644 index 0000000..b83a54f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequestReject.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationRequestReject_H_ +#define _SeNBModificationRequestReject_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationRequestReject */ +typedef struct SeNBModificationRequestReject { + ProtocolIE_Container_119P50_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequestReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequestReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationRequestReject_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.c new file mode 100644 index 0000000..5e1cead --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBModificationRequired.h" + +static asn_TYPE_member_t asn_MBR_SeNBModificationRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBModificationRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P51, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBModificationRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBModificationRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBModificationRequired_specs_1 = { + sizeof(struct SeNBModificationRequired), + offsetof(struct SeNBModificationRequired, _asn_ctx), + asn_MAP_SeNBModificationRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequired = { + "SeNBModificationRequired", + "SeNBModificationRequired", + &asn_OP_SEQUENCE, + asn_DEF_SeNBModificationRequired_tags_1, + sizeof(asn_DEF_SeNBModificationRequired_tags_1) + /sizeof(asn_DEF_SeNBModificationRequired_tags_1[0]), /* 1 */ + asn_DEF_SeNBModificationRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBModificationRequired_tags_1) + /sizeof(asn_DEF_SeNBModificationRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBModificationRequired_1, + 1, /* Elements count */ + &asn_SPC_SeNBModificationRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.h new file mode 100644 index 0000000..c5b57c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBModificationRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBModificationRequired_H_ +#define _SeNBModificationRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBModificationRequired */ +typedef struct SeNBModificationRequired { + ProtocolIE_Container_119P51_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBModificationRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBModificationRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBModificationRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.c new file mode 100644 index 0000000..e6d9ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBReconfigurationComplete.h" + +static asn_TYPE_member_t asn_MBR_SeNBReconfigurationComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReconfigurationComplete, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P47, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReconfigurationComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReconfigurationComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBReconfigurationComplete_specs_1 = { + sizeof(struct SeNBReconfigurationComplete), + offsetof(struct SeNBReconfigurationComplete, _asn_ctx), + asn_MAP_SeNBReconfigurationComplete_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReconfigurationComplete = { + "SeNBReconfigurationComplete", + "SeNBReconfigurationComplete", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReconfigurationComplete_tags_1, + sizeof(asn_DEF_SeNBReconfigurationComplete_tags_1) + /sizeof(asn_DEF_SeNBReconfigurationComplete_tags_1[0]), /* 1 */ + asn_DEF_SeNBReconfigurationComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBReconfigurationComplete_tags_1) + /sizeof(asn_DEF_SeNBReconfigurationComplete_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReconfigurationComplete_1, + 1, /* Elements count */ + &asn_SPC_SeNBReconfigurationComplete_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.h new file mode 100644 index 0000000..d2e84f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReconfigurationComplete.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBReconfigurationComplete_H_ +#define _SeNBReconfigurationComplete_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBReconfigurationComplete */ +typedef struct SeNBReconfigurationComplete { + ProtocolIE_Container_119P47_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReconfigurationComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBReconfigurationComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBReconfigurationComplete_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.c new file mode 100644 index 0000000..61232a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBReleaseConfirm.h" + +static asn_TYPE_member_t asn_MBR_SeNBReleaseConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P56, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseConfirm_specs_1 = { + sizeof(struct SeNBReleaseConfirm), + offsetof(struct SeNBReleaseConfirm, _asn_ctx), + asn_MAP_SeNBReleaseConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseConfirm = { + "SeNBReleaseConfirm", + "SeNBReleaseConfirm", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseConfirm_tags_1, + sizeof(asn_DEF_SeNBReleaseConfirm_tags_1) + /sizeof(asn_DEF_SeNBReleaseConfirm_tags_1[0]), /* 1 */ + asn_DEF_SeNBReleaseConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseConfirm_tags_1) + /sizeof(asn_DEF_SeNBReleaseConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseConfirm_1, + 1, /* Elements count */ + &asn_SPC_SeNBReleaseConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.h new file mode 100644 index 0000000..0762853 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBReleaseConfirm_H_ +#define _SeNBReleaseConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBReleaseConfirm */ +typedef struct SeNBReleaseConfirm { + ProtocolIE_Container_119P56_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBReleaseConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.c new file mode 100644 index 0000000..f6a1649 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBReleaseRequest.h" + +static asn_TYPE_member_t asn_MBR_SeNBReleaseRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P54, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequest_specs_1 = { + sizeof(struct SeNBReleaseRequest), + offsetof(struct SeNBReleaseRequest, _asn_ctx), + asn_MAP_SeNBReleaseRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequest = { + "SeNBReleaseRequest", + "SeNBReleaseRequest", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseRequest_tags_1, + sizeof(asn_DEF_SeNBReleaseRequest_tags_1) + /sizeof(asn_DEF_SeNBReleaseRequest_tags_1[0]), /* 1 */ + asn_DEF_SeNBReleaseRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseRequest_tags_1) + /sizeof(asn_DEF_SeNBReleaseRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseRequest_1, + 1, /* Elements count */ + &asn_SPC_SeNBReleaseRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.h new file mode 100644 index 0000000..9db1533 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBReleaseRequest_H_ +#define _SeNBReleaseRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBReleaseRequest */ +typedef struct SeNBReleaseRequest { + ProtocolIE_Container_119P54_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBReleaseRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.c new file mode 100644 index 0000000..a77ea38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBReleaseRequired.h" + +static asn_TYPE_member_t asn_MBR_SeNBReleaseRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SeNBReleaseRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P55, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SeNBReleaseRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SeNBReleaseRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SeNBReleaseRequired_specs_1 = { + sizeof(struct SeNBReleaseRequired), + offsetof(struct SeNBReleaseRequired, _asn_ctx), + asn_MAP_SeNBReleaseRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequired = { + "SeNBReleaseRequired", + "SeNBReleaseRequired", + &asn_OP_SEQUENCE, + asn_DEF_SeNBReleaseRequired_tags_1, + sizeof(asn_DEF_SeNBReleaseRequired_tags_1) + /sizeof(asn_DEF_SeNBReleaseRequired_tags_1[0]), /* 1 */ + asn_DEF_SeNBReleaseRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBReleaseRequired_tags_1) + /sizeof(asn_DEF_SeNBReleaseRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SeNBReleaseRequired_1, + 1, /* Elements count */ + &asn_SPC_SeNBReleaseRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.h new file mode 100644 index 0000000..8826855 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBReleaseRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBReleaseRequired_H_ +#define _SeNBReleaseRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBReleaseRequired */ +typedef struct SeNBReleaseRequired { + ProtocolIE_Container_119P55_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SeNBReleaseRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBReleaseRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBReleaseRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.c new file mode 100644 index 0000000..76ebb8e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBSecurityKey.h" + +int +SeNBSecurityKey_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SeNBSecurityKey_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 256, 256 } /* (SIZE(256..256)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SeNBSecurityKey_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SeNBSecurityKey = { + "SeNBSecurityKey", + "SeNBSecurityKey", + &asn_OP_BIT_STRING, + asn_DEF_SeNBSecurityKey_tags_1, + sizeof(asn_DEF_SeNBSecurityKey_tags_1) + /sizeof(asn_DEF_SeNBSecurityKey_tags_1[0]), /* 1 */ + asn_DEF_SeNBSecurityKey_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBSecurityKey_tags_1) + /sizeof(asn_DEF_SeNBSecurityKey_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SeNBSecurityKey_constr_1, SeNBSecurityKey_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.h new file mode 100644 index 0000000..48a5d38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBSecurityKey.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBSecurityKey_H_ +#define _SeNBSecurityKey_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBSecurityKey */ +typedef BIT_STRING_t SeNBSecurityKey_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SeNBSecurityKey_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SeNBSecurityKey; +asn_struct_free_f SeNBSecurityKey_free; +asn_struct_print_f SeNBSecurityKey_print; +asn_constr_check_f SeNBSecurityKey_constraint; +ber_type_decoder_f SeNBSecurityKey_decode_ber; +der_type_encoder_f SeNBSecurityKey_encode_der; +xer_type_decoder_f SeNBSecurityKey_decode_xer; +xer_type_encoder_f SeNBSecurityKey_encode_xer; +per_type_decoder_f SeNBSecurityKey_decode_uper; +per_type_encoder_f SeNBSecurityKey_encode_uper; +per_type_decoder_f SeNBSecurityKey_decode_aper; +per_type_encoder_f SeNBSecurityKey_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBSecurityKey_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.c new file mode 100644 index 0000000..730f0f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SeNBtoMeNBContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_SeNBtoMeNBContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SeNBtoMeNBContainer = { + "SeNBtoMeNBContainer", + "SeNBtoMeNBContainer", + &asn_OP_OCTET_STRING, + asn_DEF_SeNBtoMeNBContainer_tags_1, + sizeof(asn_DEF_SeNBtoMeNBContainer_tags_1) + /sizeof(asn_DEF_SeNBtoMeNBContainer_tags_1[0]), /* 1 */ + asn_DEF_SeNBtoMeNBContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_SeNBtoMeNBContainer_tags_1) + /sizeof(asn_DEF_SeNBtoMeNBContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.h new file mode 100644 index 0000000..a98c8cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SeNBtoMeNBContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SeNBtoMeNBContainer_H_ +#define _SeNBtoMeNBContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SeNBtoMeNBContainer */ +typedef OCTET_STRING_t SeNBtoMeNBContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SeNBtoMeNBContainer; +asn_struct_free_f SeNBtoMeNBContainer_free; +asn_struct_print_f SeNBtoMeNBContainer_print; +asn_constr_check_f SeNBtoMeNBContainer_constraint; +ber_type_decoder_f SeNBtoMeNBContainer_decode_ber; +der_type_encoder_f SeNBtoMeNBContainer_encode_der; +xer_type_decoder_f SeNBtoMeNBContainer_decode_xer; +xer_type_encoder_f SeNBtoMeNBContainer_encode_xer; +per_type_decoder_f SeNBtoMeNBContainer_decode_uper; +per_type_encoder_f SeNBtoMeNBContainer_encode_uper; +per_type_decoder_f SeNBtoMeNBContainer_decode_aper; +per_type_encoder_f SeNBtoMeNBContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SeNBtoMeNBContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c new file mode 100644 index 0000000..76e9c05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SecondaryRATDataUsageReport.h" + +static asn_TYPE_member_t asn_MBR_SecondaryRATDataUsageReport_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATDataUsageReport, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P101, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SecondaryRATDataUsageReport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SecondaryRATDataUsageReport_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATDataUsageReport_specs_1 = { + sizeof(struct SecondaryRATDataUsageReport), + offsetof(struct SecondaryRATDataUsageReport, _asn_ctx), + asn_MAP_SecondaryRATDataUsageReport_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATDataUsageReport = { + "SecondaryRATDataUsageReport", + "SecondaryRATDataUsageReport", + &asn_OP_SEQUENCE, + asn_DEF_SecondaryRATDataUsageReport_tags_1, + sizeof(asn_DEF_SecondaryRATDataUsageReport_tags_1) + /sizeof(asn_DEF_SecondaryRATDataUsageReport_tags_1[0]), /* 1 */ + asn_DEF_SecondaryRATDataUsageReport_tags_1, /* Same as above */ + sizeof(asn_DEF_SecondaryRATDataUsageReport_tags_1) + /sizeof(asn_DEF_SecondaryRATDataUsageReport_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATDataUsageReport_1, + 1, /* Elements count */ + &asn_SPC_SecondaryRATDataUsageReport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h new file mode 100644 index 0000000..28fbceb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATDataUsageReport.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SecondaryRATDataUsageReport_H_ +#define _SecondaryRATDataUsageReport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecondaryRATDataUsageReport */ +typedef struct SecondaryRATDataUsageReport { + ProtocolIE_Container_119P101_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATDataUsageReport_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATDataUsageReport; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecondaryRATDataUsageReport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c new file mode 100644 index 0000000..9a0055c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.c @@ -0,0 +1,147 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SecondaryRATUsageReport-Item.h" + +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_secondaryRATType_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_secondaryRATType_value2enum_3[] = { + { 0, 2, "nr" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_secondaryRATType_enum2value_3[] = { + 0 /* nr(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_secondaryRATType_specs_3 = { + asn_MAP_secondaryRATType_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_secondaryRATType_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_secondaryRATType_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_secondaryRATType_3 = { + "secondaryRATType", + "secondaryRATType", + &asn_OP_NativeEnumerated, + asn_DEF_secondaryRATType_tags_3, + sizeof(asn_DEF_secondaryRATType_tags_3) + /sizeof(asn_DEF_secondaryRATType_tags_3[0]) - 1, /* 1 */ + asn_DEF_secondaryRATType_tags_3, /* Same as above */ + sizeof(asn_DEF_secondaryRATType_tags_3) + /sizeof(asn_DEF_secondaryRATType_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_secondaryRATType_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_secondaryRATType_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item, e_RAB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RAB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RAB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item, secondaryRATType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_secondaryRATType_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "secondaryRATType" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecondaryRATUsageReport_Item, e_RABUsageReportList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABUsageReportList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABUsageReportList" + }, + { ATF_POINTER, 1, offsetof(struct SecondaryRATUsageReport_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P190, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SecondaryRATUsageReport_Item_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_SecondaryRATUsageReport_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SecondaryRATUsageReport_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondaryRATType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e-RABUsageReportList */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_Item_specs_1 = { + sizeof(struct SecondaryRATUsageReport_Item), + offsetof(struct SecondaryRATUsageReport_Item, _asn_ctx), + asn_MAP_SecondaryRATUsageReport_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SecondaryRATUsageReport_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_Item = { + "SecondaryRATUsageReport-Item", + "SecondaryRATUsageReport-Item", + &asn_OP_SEQUENCE, + asn_DEF_SecondaryRATUsageReport_Item_tags_1, + sizeof(asn_DEF_SecondaryRATUsageReport_Item_tags_1) + /sizeof(asn_DEF_SecondaryRATUsageReport_Item_tags_1[0]), /* 1 */ + asn_DEF_SecondaryRATUsageReport_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_SecondaryRATUsageReport_Item_tags_1) + /sizeof(asn_DEF_SecondaryRATUsageReport_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SecondaryRATUsageReport_Item_1, + 4, /* Elements count */ + &asn_SPC_SecondaryRATUsageReport_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h new file mode 100644 index 0000000..9173e2a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReport-Item.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SecondaryRATUsageReport_Item_H_ +#define _SecondaryRATUsageReport_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-RAB-ID.h" +#include "NativeEnumerated.h" +#include "E-RABUsageReportList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecondaryRATUsageReport_Item__secondaryRATType { + SecondaryRATUsageReport_Item__secondaryRATType_nr = 0 + /* + * Enumeration is extensible + */ +} e_SecondaryRATUsageReport_Item__secondaryRATType; + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SecondaryRATUsageReport-Item */ +typedef struct SecondaryRATUsageReport_Item { + E_RAB_ID_t e_RAB_ID; + long secondaryRATType; + E_RABUsageReportList_t e_RABUsageReportList; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATUsageReport_Item_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_secondaryRATType_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReport_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_SecondaryRATUsageReport_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_SecondaryRATUsageReport_Item_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecondaryRATUsageReport_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.c new file mode 100644 index 0000000..4a86639 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SecondaryRATUsageReportList.h" + +#include "ProtocolIE-Single-Container.h" +asn_per_constraints_t asn_PER_type_SecondaryRATUsageReportList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SecondaryRATUsageReportList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_Single_Container_122P48, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_SecondaryRATUsageReportList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_SecondaryRATUsageReportList_specs_1 = { + sizeof(struct SecondaryRATUsageReportList), + offsetof(struct SecondaryRATUsageReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReportList = { + "SecondaryRATUsageReportList", + "SecondaryRATUsageReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_SecondaryRATUsageReportList_tags_1, + sizeof(asn_DEF_SecondaryRATUsageReportList_tags_1) + /sizeof(asn_DEF_SecondaryRATUsageReportList_tags_1[0]), /* 1 */ + asn_DEF_SecondaryRATUsageReportList_tags_1, /* Same as above */ + sizeof(asn_DEF_SecondaryRATUsageReportList_tags_1) + /sizeof(asn_DEF_SecondaryRATUsageReportList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SecondaryRATUsageReportList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_SecondaryRATUsageReportList_1, + 1, /* Single element */ + &asn_SPC_SecondaryRATUsageReportList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.h new file mode 100644 index 0000000..b4921e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SecondaryRATUsageReportList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SecondaryRATUsageReportList_H_ +#define _SecondaryRATUsageReportList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_Single_Container; + +/* SecondaryRATUsageReportList */ +typedef struct SecondaryRATUsageReportList { + A_SEQUENCE_OF(struct ProtocolIE_Single_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryRATUsageReportList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecondaryRATUsageReportList; +extern asn_SET_OF_specifics_t asn_SPC_SecondaryRATUsageReportList_specs_1; +extern asn_TYPE_member_t asn_MBR_SecondaryRATUsageReportList_1[1]; +extern asn_per_constraints_t asn_PER_type_SecondaryRATUsageReportList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecondaryRATUsageReportList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.c new file mode 100644 index 0000000..c535dd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.c @@ -0,0 +1,121 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCell-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ServedCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information, pCI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information, cellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information, tAC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAC" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information, broadcastPLMNs), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BroadcastPLMNs_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "broadcastPLMNs" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCell_Information, eUTRA_Mode_Info), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_EUTRA_Mode_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRA-Mode-Info" + }, + { ATF_POINTER, 1, offsetof(struct ServedCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P192, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedCell_Information_oms_1[] = { 5 }; +static const ber_tlv_tag_t asn_DEF_ServedCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pCI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellId */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tAC */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* broadcastPLMNs */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* eUTRA-Mode-Info */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCell_Information_specs_1 = { + sizeof(struct ServedCell_Information), + offsetof(struct ServedCell_Information, _asn_ctx), + asn_MAP_ServedCell_Information_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_ServedCell_Information_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCell_Information = { + "ServedCell-Information", + "ServedCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_ServedCell_Information_tags_1, + sizeof(asn_DEF_ServedCell_Information_tags_1) + /sizeof(asn_DEF_ServedCell_Information_tags_1[0]), /* 1 */ + asn_DEF_ServedCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCell_Information_tags_1) + /sizeof(asn_DEF_ServedCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCell_Information_1, + 6, /* Elements count */ + &asn_SPC_ServedCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.h new file mode 100644 index 0000000..aba77c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCell-Information.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCell_Information_H_ +#define _ServedCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PCI.h" +#include "ECGI.h" +#include "TAC.h" +#include "BroadcastPLMNs-Item.h" +#include "EUTRA-Mode-Info.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ServedCell-Information */ +typedef struct ServedCell_Information { + PCI_t pCI; + ECGI_t cellId; + TAC_t tAC; + BroadcastPLMNs_Item_t broadcastPLMNs; + EUTRA_Mode_Info_t eUTRA_Mode_Info; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedCell_Information_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.c new file mode 100644 index 0000000..2243c63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.c @@ -0,0 +1,133 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCells.h" + +#include "Neighbour-Information.h" +#include "ProtocolExtensionContainer.h" +asn_per_constraints_t asn_PER_type_ServedCells_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCells__Member, servedCellInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedCellInfo" + }, + { ATF_POINTER, 2, offsetof(struct ServedCells__Member, neighbour_Info), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Neighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbour-Info" + }, + { ATF_POINTER, 1, offsetof(struct ServedCells__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P191, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedCellInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* neighbour-Info */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct ServedCells__Member), + offsetof(struct ServedCells__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedCells_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCells_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ServedCells_specs_1 = { + sizeof(struct ServedCells), + offsetof(struct ServedCells, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCells = { + "ServedCells", + "ServedCells", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedCells_tags_1, + sizeof(asn_DEF_ServedCells_tags_1) + /sizeof(asn_DEF_ServedCells_tags_1[0]), /* 1 */ + asn_DEF_ServedCells_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCells_tags_1) + /sizeof(asn_DEF_ServedCells_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedCells_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedCells_1, + 1, /* Single element */ + &asn_SPC_ServedCells_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.h new file mode 100644 index 0000000..9c6fae8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCells.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCells_H_ +#define _ServedCells_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ServedCell-Information.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Neighbour_Information; +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct ServedCells__Member { + ServedCell_Information_t servedCellInfo; + struct Neighbour_Information *neighbour_Info; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCells__Member; + +/* ServedCells */ +typedef struct ServedCells { + A_SEQUENCE_OF(ServedCells__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCells_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCells; +extern asn_SET_OF_specifics_t asn_SPC_ServedCells_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedCells_1[1]; +extern asn_per_constraints_t asn_PER_type_ServedCells_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCells_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.c new file mode 100644 index 0000000..e7ab50e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCellsToActivate-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ServedCellsToActivate_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToActivate_Item, ecgi), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ecgi" + }, + { ATF_POINTER, 1, offsetof(struct ServedCellsToActivate_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedCellsToActivate_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ServedCellsToActivate_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCellsToActivate_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ecgi */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToActivate_Item_specs_1 = { + sizeof(struct ServedCellsToActivate_Item), + offsetof(struct ServedCellsToActivate_Item, _asn_ctx), + asn_MAP_ServedCellsToActivate_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ServedCellsToActivate_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate_Item = { + "ServedCellsToActivate-Item", + "ServedCellsToActivate-Item", + &asn_OP_SEQUENCE, + asn_DEF_ServedCellsToActivate_Item_tags_1, + sizeof(asn_DEF_ServedCellsToActivate_Item_tags_1) + /sizeof(asn_DEF_ServedCellsToActivate_Item_tags_1[0]), /* 1 */ + asn_DEF_ServedCellsToActivate_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCellsToActivate_Item_tags_1) + /sizeof(asn_DEF_ServedCellsToActivate_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCellsToActivate_Item_1, + 2, /* Elements count */ + &asn_SPC_ServedCellsToActivate_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.h new file mode 100644 index 0000000..60e837f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCellsToActivate_Item_H_ +#define _ServedCellsToActivate_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ServedCellsToActivate-Item */ +typedef struct ServedCellsToActivate_Item { + ECGI_t ecgi; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToActivate_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToActivate_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedCellsToActivate_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCellsToActivate_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.c new file mode 100644 index 0000000..7b829b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCellsToActivate.h" + +#include "ServedCellsToActivate-Item.h" +static asn_per_constraints_t asn_PER_type_ServedCellsToActivate_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedCellsToActivate_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToActivate_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCellsToActivate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedCellsToActivate_specs_1 = { + sizeof(struct ServedCellsToActivate), + offsetof(struct ServedCellsToActivate, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate = { + "ServedCellsToActivate", + "ServedCellsToActivate", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedCellsToActivate_tags_1, + sizeof(asn_DEF_ServedCellsToActivate_tags_1) + /sizeof(asn_DEF_ServedCellsToActivate_tags_1[0]), /* 1 */ + asn_DEF_ServedCellsToActivate_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCellsToActivate_tags_1) + /sizeof(asn_DEF_ServedCellsToActivate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedCellsToActivate_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedCellsToActivate_1, + 1, /* Single element */ + &asn_SPC_ServedCellsToActivate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.h new file mode 100644 index 0000000..bce4d41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToActivate.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCellsToActivate_H_ +#define _ServedCellsToActivate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedCellsToActivate_Item; + +/* ServedCellsToActivate */ +typedef struct ServedCellsToActivate { + A_SEQUENCE_OF(struct ServedCellsToActivate_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToActivate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToActivate; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCellsToActivate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.c new file mode 100644 index 0000000..3b9bc31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCellsToModify-Item.h" + +#include "Neighbour-Information.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ServedCellsToModify_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item, old_ecgi), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "old-ecgi" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedCellsToModify_Item, servedCellInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedCellInfo" + }, + { ATF_POINTER, 2, offsetof(struct ServedCellsToModify_Item, neighbour_Info), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Neighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbour-Info" + }, + { ATF_POINTER, 1, offsetof(struct ServedCellsToModify_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedCellsToModify_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_ServedCellsToModify_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedCellsToModify_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-ecgi */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedCellInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* neighbour-Info */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToModify_Item_specs_1 = { + sizeof(struct ServedCellsToModify_Item), + offsetof(struct ServedCellsToModify_Item, _asn_ctx), + asn_MAP_ServedCellsToModify_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ServedCellsToModify_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify_Item = { + "ServedCellsToModify-Item", + "ServedCellsToModify-Item", + &asn_OP_SEQUENCE, + asn_DEF_ServedCellsToModify_Item_tags_1, + sizeof(asn_DEF_ServedCellsToModify_Item_tags_1) + /sizeof(asn_DEF_ServedCellsToModify_Item_tags_1[0]), /* 1 */ + asn_DEF_ServedCellsToModify_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCellsToModify_Item_tags_1) + /sizeof(asn_DEF_ServedCellsToModify_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedCellsToModify_Item_1, + 4, /* Elements count */ + &asn_SPC_ServedCellsToModify_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.h new file mode 100644 index 0000000..5b2d6bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCellsToModify_Item_H_ +#define _ServedCellsToModify_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "ServedCell-Information.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Neighbour_Information; +struct ProtocolExtensionContainer; + +/* ServedCellsToModify-Item */ +typedef struct ServedCellsToModify_Item { + ECGI_t old_ecgi; + ServedCell_Information_t servedCellInfo; + struct Neighbour_Information *neighbour_Info; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToModify_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedCellsToModify_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedCellsToModify_Item_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCellsToModify_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.c new file mode 100644 index 0000000..d581a8c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedCellsToModify.h" + +#include "ServedCellsToModify-Item.h" +static asn_per_constraints_t asn_PER_type_ServedCellsToModify_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedCellsToModify_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedCellsToModify_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedCellsToModify_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedCellsToModify_specs_1 = { + sizeof(struct ServedCellsToModify), + offsetof(struct ServedCellsToModify, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify = { + "ServedCellsToModify", + "ServedCellsToModify", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedCellsToModify_tags_1, + sizeof(asn_DEF_ServedCellsToModify_tags_1) + /sizeof(asn_DEF_ServedCellsToModify_tags_1[0]), /* 1 */ + asn_DEF_ServedCellsToModify_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedCellsToModify_tags_1) + /sizeof(asn_DEF_ServedCellsToModify_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedCellsToModify_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedCellsToModify_1, + 1, /* Single element */ + &asn_SPC_ServedCellsToModify_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.h new file mode 100644 index 0000000..79b1ae2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedCellsToModify.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedCellsToModify_H_ +#define _ServedCellsToModify_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedCellsToModify_Item; + +/* ServedCellsToModify */ +typedef struct ServedCellsToModify { + A_SEQUENCE_OF(struct ServedCellsToModify_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedCellsToModify_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedCellsToModify; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedCellsToModify_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c new file mode 100644 index 0000000..47b067e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.c @@ -0,0 +1,133 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedEUTRAcellsENDCX2ManagementList.h" + +#include "NRNeighbour-Information.h" +#include "ProtocolExtensionContainer.h" +static asn_per_constraints_t asn_PER_type_ServedEUTRAcellsENDCX2ManagementList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsENDCX2ManagementList__Member, servedEUTRACellInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedEUTRACellInfo" + }, + { ATF_POINTER, 2, offsetof(struct ServedEUTRAcellsENDCX2ManagementList__Member, nrNeighbourInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRNeighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrNeighbourInfo" + }, + { ATF_POINTER, 1, offsetof(struct ServedEUTRAcellsENDCX2ManagementList__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P90, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedEUTRACellInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrNeighbourInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct ServedEUTRAcellsENDCX2ManagementList__Member), + offsetof(struct ServedEUTRAcellsENDCX2ManagementList__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ServedEUTRAcellsENDCX2ManagementList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedEUTRAcellsENDCX2ManagementList_specs_1 = { + sizeof(struct ServedEUTRAcellsENDCX2ManagementList), + offsetof(struct ServedEUTRAcellsENDCX2ManagementList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsENDCX2ManagementList = { + "ServedEUTRAcellsENDCX2ManagementList", + "ServedEUTRAcellsENDCX2ManagementList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1, + sizeof(asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1[0]), /* 1 */ + asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsENDCX2ManagementList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedEUTRAcellsENDCX2ManagementList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedEUTRAcellsENDCX2ManagementList_1, + 1, /* Single element */ + &asn_SPC_ServedEUTRAcellsENDCX2ManagementList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h new file mode 100644 index 0000000..994530e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsENDCX2ManagementList.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedEUTRAcellsENDCX2ManagementList_H_ +#define _ServedEUTRAcellsENDCX2ManagementList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ServedCell-Information.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRNeighbour_Information; +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct ServedEUTRAcellsENDCX2ManagementList__Member { + ServedCell_Information_t servedEUTRACellInfo; + struct NRNeighbour_Information *nrNeighbourInfo; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsENDCX2ManagementList__Member; + +/* ServedEUTRAcellsENDCX2ManagementList */ +typedef struct ServedEUTRAcellsENDCX2ManagementList { + A_SEQUENCE_OF(ServedEUTRAcellsENDCX2ManagementList__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsENDCX2ManagementList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsENDCX2ManagementList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedEUTRAcellsENDCX2ManagementList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c new file mode 100644 index 0000000..bc23c86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedEUTRAcellsToDeleteListENDCConfUpd.h" + +#include "ECGI.h" +static asn_per_constraints_t asn_PER_type_ServedEUTRAcellsToDeleteListENDCConfUpd_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedEUTRAcellsToDeleteListENDCConfUpd_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedEUTRAcellsToDeleteListENDCConfUpd_specs_1 = { + sizeof(struct ServedEUTRAcellsToDeleteListENDCConfUpd), + offsetof(struct ServedEUTRAcellsToDeleteListENDCConfUpd, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd = { + "ServedEUTRAcellsToDeleteListENDCConfUpd", + "ServedEUTRAcellsToDeleteListENDCConfUpd", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1, + sizeof(asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[0]), /* 1 */ + asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedEUTRAcellsToDeleteListENDCConfUpd_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedEUTRAcellsToDeleteListENDCConfUpd_1, + 1, /* Single element */ + &asn_SPC_ServedEUTRAcellsToDeleteListENDCConfUpd_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h new file mode 100644 index 0000000..4407b1b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToDeleteListENDCConfUpd.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedEUTRAcellsToDeleteListENDCConfUpd_H_ +#define _ServedEUTRAcellsToDeleteListENDCConfUpd_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ECGI; + +/* ServedEUTRAcellsToDeleteListENDCConfUpd */ +typedef struct ServedEUTRAcellsToDeleteListENDCConfUpd { + A_SEQUENCE_OF(struct ECGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsToDeleteListENDCConfUpd_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToDeleteListENDCConfUpd; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedEUTRAcellsToDeleteListENDCConfUpd_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c new file mode 100644 index 0000000..3f75b67 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.c @@ -0,0 +1,143 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedEUTRAcellsToModifyListENDCConfUpd.h" + +#include "NRNeighbour-Information.h" +#include "ProtocolExtensionContainer.h" +static asn_per_constraints_t asn_PER_type_ServedEUTRAcellsToModifyListENDCConfUpd_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member, old_ECGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "old-ECGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member, servedEUTRACellInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedEUTRACellInfo" + }, + { ATF_POINTER, 2, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member, nrNeighbourInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRNeighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrNeighbourInfo" + }, + { ATF_POINTER, 1, offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P99, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-ECGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedEUTRACellInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrNeighbourInfo */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member), + offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 4, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ServedEUTRAcellsToModifyListENDCConfUpd_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedEUTRAcellsToModifyListENDCConfUpd_specs_1 = { + sizeof(struct ServedEUTRAcellsToModifyListENDCConfUpd), + offsetof(struct ServedEUTRAcellsToModifyListENDCConfUpd, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd = { + "ServedEUTRAcellsToModifyListENDCConfUpd", + "ServedEUTRAcellsToModifyListENDCConfUpd", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1, + sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[0]), /* 1 */ + asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1) + /sizeof(asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedEUTRAcellsToModifyListENDCConfUpd_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedEUTRAcellsToModifyListENDCConfUpd_1, + 1, /* Single element */ + &asn_SPC_ServedEUTRAcellsToModifyListENDCConfUpd_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h new file mode 100644 index 0000000..5dced53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedEUTRAcellsToModifyListENDCConfUpd.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedEUTRAcellsToModifyListENDCConfUpd_H_ +#define _ServedEUTRAcellsToModifyListENDCConfUpd_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ECGI.h" +#include "ServedCell-Information.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRNeighbour_Information; +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct ServedEUTRAcellsToModifyListENDCConfUpd__Member { + ECGI_t old_ECGI; + ServedCell_Information_t servedEUTRACellInfo; + struct NRNeighbour_Information *nrNeighbourInfo; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsToModifyListENDCConfUpd__Member; + +/* ServedEUTRAcellsToModifyListENDCConfUpd */ +typedef struct ServedEUTRAcellsToModifyListENDCConfUpd { + A_SEQUENCE_OF(ServedEUTRAcellsToModifyListENDCConfUpd__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedEUTRAcellsToModifyListENDCConfUpd_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedEUTRAcellsToModifyListENDCConfUpd; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedEUTRAcellsToModifyListENDCConfUpd_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.c new file mode 100644 index 0000000..3fd8036 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.c @@ -0,0 +1,197 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRCell-Information.h" + +#include "ProtocolExtensionContainer.h" +#include "FDD-InfoServedNRCell-Information.h" +#include "TDD-InfoServedNRCell-Information.h" +static asn_per_constraints_t asn_PER_type_nrModeInfo_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_nrModeInfo_7[] = { + { ATF_POINTER, 0, offsetof(struct ServedNRCell_Information__nrModeInfo, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FDD_InfoServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fdd" + }, + { ATF_POINTER, 0, offsetof(struct ServedNRCell_Information__nrModeInfo, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_InfoServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tdd" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_nrModeInfo_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */ +}; +static asn_CHOICE_specifics_t asn_SPC_nrModeInfo_specs_7 = { + sizeof(struct ServedNRCell_Information__nrModeInfo), + offsetof(struct ServedNRCell_Information__nrModeInfo, _asn_ctx), + offsetof(struct ServedNRCell_Information__nrModeInfo, present), + sizeof(((struct ServedNRCell_Information__nrModeInfo *)0)->present), + asn_MAP_nrModeInfo_tag2el_7, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nrModeInfo_7 = { + "nrModeInfo", + "nrModeInfo", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_nrModeInfo_constr_7, CHOICE_constraint }, + asn_MBR_nrModeInfo_7, + 2, /* Elements count */ + &asn_SPC_nrModeInfo_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ServedNRCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information, nrpCI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRPCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrpCI" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information, nrCellID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrCellID" + }, + { ATF_POINTER, 2, offsetof(struct ServedNRCell_Information, fiveGS_TAC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FiveGS_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveGS-TAC" + }, + { ATF_POINTER, 1, offsetof(struct ServedNRCell_Information, configured_TAC), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "configured-TAC" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information, broadcastPLMNs), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BroadcastPLMNs_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "broadcastPLMNs" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information, nrModeInfo), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_nrModeInfo_7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrModeInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCell_Information, measurementTimingConfiguration), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measurementTimingConfiguration" + }, + { ATF_POINTER, 1, offsetof(struct ServedNRCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P92, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedNRCell_Information_oms_1[] = { 2, 3, 7 }; +static const ber_tlv_tag_t asn_DEF_ServedNRCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrpCI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrCellID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fiveGS-TAC */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* configured-TAC */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* broadcastPLMNs */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* nrModeInfo */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* measurementTimingConfiguration */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCell_Information_specs_1 = { + sizeof(struct ServedNRCell_Information), + offsetof(struct ServedNRCell_Information, _asn_ctx), + asn_MAP_ServedNRCell_Information_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_ServedNRCell_Information_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 8, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCell_Information = { + "ServedNRCell-Information", + "ServedNRCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCell_Information_tags_1, + sizeof(asn_DEF_ServedNRCell_Information_tags_1) + /sizeof(asn_DEF_ServedNRCell_Information_tags_1[0]), /* 1 */ + asn_DEF_ServedNRCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRCell_Information_tags_1) + /sizeof(asn_DEF_ServedNRCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCell_Information_1, + 8, /* Elements count */ + &asn_SPC_ServedNRCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.h new file mode 100644 index 0000000..f80a9a5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCell-Information.h @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRCell_Information_H_ +#define _ServedNRCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRPCI.h" +#include "NRCGI.h" +#include "FiveGS-TAC.h" +#include "TAC.h" +#include "BroadcastPLMNs-Item.h" +#include "OCTET_STRING.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ServedNRCell_Information__nrModeInfo_PR { + ServedNRCell_Information__nrModeInfo_PR_NOTHING, /* No components present */ + ServedNRCell_Information__nrModeInfo_PR_fdd, + ServedNRCell_Information__nrModeInfo_PR_tdd + /* Extensions may appear below */ + +} ServedNRCell_Information__nrModeInfo_PR; + +/* Forward declarations */ +struct ProtocolExtensionContainer; +struct FDD_InfoServedNRCell_Information; +struct TDD_InfoServedNRCell_Information; + +/* ServedNRCell-Information */ +typedef struct ServedNRCell_Information { + NRPCI_t nrpCI; + NRCGI_t nrCellID; + FiveGS_TAC_t *fiveGS_TAC; /* OPTIONAL */ + TAC_t *configured_TAC; /* OPTIONAL */ + BroadcastPLMNs_Item_t broadcastPLMNs; + struct ServedNRCell_Information__nrModeInfo { + ServedNRCell_Information__nrModeInfo_PR present; + union ServedNRCell_Information__nrModeInfo_u { + struct FDD_InfoServedNRCell_Information *fdd; + struct TDD_InfoServedNRCell_Information *tdd; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } nrModeInfo; + OCTET_STRING_t measurementTimingConfiguration; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedNRCell_Information_1[8]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c new file mode 100644 index 0000000..1265071 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRCellsToActivate-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ServedNRCellsToActivate_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToActivate_Item, nrCellID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrCellID" + }, + { ATF_POINTER, 1, offsetof(struct ServedNRCellsToActivate_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P101, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedNRCellsToActivate_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ServedNRCellsToActivate_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCellsToActivate_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToActivate_Item_specs_1 = { + sizeof(struct ServedNRCellsToActivate_Item), + offsetof(struct ServedNRCellsToActivate_Item, _asn_ctx), + asn_MAP_ServedNRCellsToActivate_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ServedNRCellsToActivate_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate_Item = { + "ServedNRCellsToActivate-Item", + "ServedNRCellsToActivate-Item", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCellsToActivate_Item_tags_1, + sizeof(asn_DEF_ServedNRCellsToActivate_Item_tags_1) + /sizeof(asn_DEF_ServedNRCellsToActivate_Item_tags_1[0]), /* 1 */ + asn_DEF_ServedNRCellsToActivate_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRCellsToActivate_Item_tags_1) + /sizeof(asn_DEF_ServedNRCellsToActivate_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCellsToActivate_Item_1, + 2, /* Elements count */ + &asn_SPC_ServedNRCellsToActivate_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h new file mode 100644 index 0000000..2f92db4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate-Item.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRCellsToActivate_Item_H_ +#define _ServedNRCellsToActivate_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRCGI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ServedNRCellsToActivate-Item */ +typedef struct ServedNRCellsToActivate_Item { + NRCGI_t nrCellID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCellsToActivate_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToActivate_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedNRCellsToActivate_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRCellsToActivate_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.c new file mode 100644 index 0000000..ae336b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRCellsToActivate.h" + +#include "ServedNRCellsToActivate-Item.h" +static asn_per_constraints_t asn_PER_type_ServedNRCellsToActivate_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedNRCellsToActivate_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCellsToActivate_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRCellsToActivate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedNRCellsToActivate_specs_1 = { + sizeof(struct ServedNRCellsToActivate), + offsetof(struct ServedNRCellsToActivate, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate = { + "ServedNRCellsToActivate", + "ServedNRCellsToActivate", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedNRCellsToActivate_tags_1, + sizeof(asn_DEF_ServedNRCellsToActivate_tags_1) + /sizeof(asn_DEF_ServedNRCellsToActivate_tags_1[0]), /* 1 */ + asn_DEF_ServedNRCellsToActivate_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRCellsToActivate_tags_1) + /sizeof(asn_DEF_ServedNRCellsToActivate_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedNRCellsToActivate_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedNRCellsToActivate_1, + 1, /* Single element */ + &asn_SPC_ServedNRCellsToActivate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.h new file mode 100644 index 0000000..95dae37 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToActivate.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRCellsToActivate_H_ +#define _ServedNRCellsToActivate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedNRCellsToActivate_Item; + +/* ServedNRCellsToActivate */ +typedef struct ServedNRCellsToActivate { + A_SEQUENCE_OF(struct ServedNRCellsToActivate_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCellsToActivate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToActivate; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRCellsToActivate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c new file mode 100644 index 0000000..3bc2e83 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.c @@ -0,0 +1,112 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRCellsToModify-Item.h" + +#include "NRNeighbour-Information.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ServedNRCellsToModify_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToModify_Item, old_nrcgi), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "old-nrcgi" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServedNRCellsToModify_Item, servedNRCellInformation), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedNRCellInformation" + }, + { ATF_POINTER, 3, offsetof(struct ServedNRCellsToModify_Item, nrNeighbourInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRNeighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrNeighbourInformation" + }, + { ATF_POINTER, 2, offsetof(struct ServedNRCellsToModify_Item, nrDeactivationIndication), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DeactivationIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrDeactivationIndication" + }, + { ATF_POINTER, 1, offsetof(struct ServedNRCellsToModify_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P100, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ServedNRCellsToModify_Item_oms_1[] = { 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_ServedNRCellsToModify_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedNRCellsToModify_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-nrcgi */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedNRCellInformation */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrNeighbourInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* nrDeactivationIndication */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToModify_Item_specs_1 = { + sizeof(struct ServedNRCellsToModify_Item), + offsetof(struct ServedNRCellsToModify_Item, _asn_ctx), + asn_MAP_ServedNRCellsToModify_Item_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_ServedNRCellsToModify_Item_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToModify_Item = { + "ServedNRCellsToModify-Item", + "ServedNRCellsToModify-Item", + &asn_OP_SEQUENCE, + asn_DEF_ServedNRCellsToModify_Item_tags_1, + sizeof(asn_DEF_ServedNRCellsToModify_Item_tags_1) + /sizeof(asn_DEF_ServedNRCellsToModify_Item_tags_1[0]), /* 1 */ + asn_DEF_ServedNRCellsToModify_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRCellsToModify_Item_tags_1) + /sizeof(asn_DEF_ServedNRCellsToModify_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedNRCellsToModify_Item_1, + 5, /* Elements count */ + &asn_SPC_ServedNRCellsToModify_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h new file mode 100644 index 0000000..90edb92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRCellsToModify-Item.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRCellsToModify_Item_H_ +#define _ServedNRCellsToModify_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRCGI.h" +#include "ServedNRCell-Information.h" +#include "DeactivationIndication.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRNeighbour_Information; +struct ProtocolExtensionContainer; + +/* ServedNRCellsToModify-Item */ +typedef struct ServedNRCellsToModify_Item { + NRCGI_t old_nrcgi; + ServedNRCell_Information_t servedNRCellInformation; + struct NRNeighbour_Information *nrNeighbourInformation; /* OPTIONAL */ + DeactivationIndication_t *nrDeactivationIndication; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRCellsToModify_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRCellsToModify_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedNRCellsToModify_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedNRCellsToModify_Item_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRCellsToModify_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c new file mode 100644 index 0000000..de5284a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.c @@ -0,0 +1,133 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRcellsENDCX2ManagementList.h" + +#include "NRNeighbour-Information.h" +#include "ProtocolExtensionContainer.h" +static asn_per_constraints_t asn_PER_type_ServedNRcellsENDCX2ManagementList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedNRcellsENDCX2ManagementList__Member, servedNRCellInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServedNRCell_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "servedNRCellInfo" + }, + { ATF_POINTER, 2, offsetof(struct ServedNRcellsENDCX2ManagementList__Member, nRNeighbourInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRNeighbour_Information, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRNeighbourInfo" + }, + { ATF_POINTER, 1, offsetof(struct ServedNRcellsENDCX2ManagementList__Member, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P91, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Member_oms_2[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedNRCellInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRNeighbourInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct ServedNRcellsENDCX2ManagementList__Member), + offsetof(struct ServedNRcellsENDCX2ManagementList__Member, _asn_ctx), + asn_MAP_Member_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_Member_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "SEQUENCE", + "SEQUENCE", + &asn_OP_SEQUENCE, + asn_DEF_Member_tags_2, + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + asn_DEF_Member_tags_2, /* Same as above */ + sizeof(asn_DEF_Member_tags_2) + /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Member_2, + 3, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ServedNRcellsENDCX2ManagementList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Member_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedNRcellsENDCX2ManagementList_specs_1 = { + sizeof(struct ServedNRcellsENDCX2ManagementList), + offsetof(struct ServedNRcellsENDCX2ManagementList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRcellsENDCX2ManagementList = { + "ServedNRcellsENDCX2ManagementList", + "ServedNRcellsENDCX2ManagementList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1, + sizeof(asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1) + /sizeof(asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1[0]), /* 1 */ + asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1) + /sizeof(asn_DEF_ServedNRcellsENDCX2ManagementList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedNRcellsENDCX2ManagementList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedNRcellsENDCX2ManagementList_1, + 1, /* Single element */ + &asn_SPC_ServedNRcellsENDCX2ManagementList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h new file mode 100644 index 0000000..3ba21ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsENDCX2ManagementList.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRcellsENDCX2ManagementList_H_ +#define _ServedNRcellsENDCX2ManagementList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "ServedNRCell-Information.h" +#include "constr_SEQUENCE.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRNeighbour_Information; +struct ProtocolExtensionContainer; + +/* Forward definitions */ +typedef struct ServedNRcellsENDCX2ManagementList__Member { + ServedNRCell_Information_t servedNRCellInfo; + struct NRNeighbour_Information *nRNeighbourInfo; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRcellsENDCX2ManagementList__Member; + +/* ServedNRcellsENDCX2ManagementList */ +typedef struct ServedNRcellsENDCX2ManagementList { + A_SEQUENCE_OF(ServedNRcellsENDCX2ManagementList__Member) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRcellsENDCX2ManagementList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRcellsENDCX2ManagementList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRcellsENDCX2ManagementList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c new file mode 100644 index 0000000..3b7f357 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRcellsToDeleteENDCConfUpdList.h" + +#include "NRCGI.h" +static asn_per_constraints_t asn_PER_type_ServedNRcellsToDeleteENDCConfUpdList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedNRcellsToDeleteENDCConfUpdList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedNRcellsToDeleteENDCConfUpdList_specs_1 = { + sizeof(struct ServedNRcellsToDeleteENDCConfUpdList), + offsetof(struct ServedNRcellsToDeleteENDCConfUpdList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRcellsToDeleteENDCConfUpdList = { + "ServedNRcellsToDeleteENDCConfUpdList", + "ServedNRcellsToDeleteENDCConfUpdList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1, + sizeof(asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1) + /sizeof(asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1[0]), /* 1 */ + asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1) + /sizeof(asn_DEF_ServedNRcellsToDeleteENDCConfUpdList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedNRcellsToDeleteENDCConfUpdList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedNRcellsToDeleteENDCConfUpdList_1, + 1, /* Single element */ + &asn_SPC_ServedNRcellsToDeleteENDCConfUpdList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h new file mode 100644 index 0000000..ef18039 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToDeleteENDCConfUpdList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRcellsToDeleteENDCConfUpdList_H_ +#define _ServedNRcellsToDeleteENDCConfUpdList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRCGI; + +/* ServedNRcellsToDeleteENDCConfUpdList */ +typedef struct ServedNRcellsToDeleteENDCConfUpdList { + A_SEQUENCE_OF(struct NRCGI) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRcellsToDeleteENDCConfUpdList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRcellsToDeleteENDCConfUpdList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRcellsToDeleteENDCConfUpdList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c new file mode 100644 index 0000000..df89a27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServedNRcellsToModifyENDCConfUpdList.h" + +#include "ServedNRCellsToModify-Item.h" +static asn_per_constraints_t asn_PER_type_ServedNRcellsToModifyENDCConfUpdList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServedNRcellsToModifyENDCConfUpdList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedNRCellsToModify_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ServedNRcellsToModifyENDCConfUpdList_specs_1 = { + sizeof(struct ServedNRcellsToModifyENDCConfUpdList), + offsetof(struct ServedNRcellsToModifyENDCConfUpdList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedNRcellsToModifyENDCConfUpdList = { + "ServedNRcellsToModifyENDCConfUpdList", + "ServedNRcellsToModifyENDCConfUpdList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1, + sizeof(asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1) + /sizeof(asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1[0]), /* 1 */ + asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1) + /sizeof(asn_DEF_ServedNRcellsToModifyENDCConfUpdList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServedNRcellsToModifyENDCConfUpdList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ServedNRcellsToModifyENDCConfUpdList_1, + 1, /* Single element */ + &asn_SPC_ServedNRcellsToModifyENDCConfUpdList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h new file mode 100644 index 0000000..63c86bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServedNRcellsToModifyENDCConfUpdList.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServedNRcellsToModifyENDCConfUpdList_H_ +#define _ServedNRcellsToModifyENDCConfUpdList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedNRCellsToModify_Item; + +/* ServedNRcellsToModifyENDCConfUpdList */ +typedef struct ServedNRcellsToModifyENDCConfUpdList { + A_SEQUENCE_OF(struct ServedNRCellsToModify_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedNRcellsToModifyENDCConfUpdList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedNRcellsToModifyENDCConfUpdList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServedNRcellsToModifyENDCConfUpdList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.c new file mode 100644 index 0000000..bd3dede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ServiceType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ServiceType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ServiceType_value2enum_1[] = { + { 0, 25, "qMC-for-streaming-service" }, + { 1, 20, "qMC-for-MTSI-service" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ServiceType_enum2value_1[] = { + 1, /* qMC-for-MTSI-service(1) */ + 0 /* qMC-for-streaming-service(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_ServiceType_specs_1 = { + asn_MAP_ServiceType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ServiceType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ServiceType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ServiceType = { + "ServiceType", + "ServiceType", + &asn_OP_NativeEnumerated, + asn_DEF_ServiceType_tags_1, + sizeof(asn_DEF_ServiceType_tags_1) + /sizeof(asn_DEF_ServiceType_tags_1[0]), /* 1 */ + asn_DEF_ServiceType_tags_1, /* Same as above */ + sizeof(asn_DEF_ServiceType_tags_1) + /sizeof(asn_DEF_ServiceType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ServiceType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ServiceType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.h new file mode 100644 index 0000000..97dc0c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ServiceType.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ServiceType_H_ +#define _ServiceType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ServiceType { + ServiceType_qMC_for_streaming_service = 0, + ServiceType_qMC_for_MTSI_service = 1 + /* + * Enumeration is extensible + */ +} e_ServiceType; + +/* ServiceType */ +typedef long ServiceType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ServiceType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ServiceType; +extern const asn_INTEGER_specifics_t asn_SPC_ServiceType_specs_1; +asn_struct_free_f ServiceType_free; +asn_struct_print_f ServiceType_print; +asn_constr_check_f ServiceType_constraint; +ber_type_decoder_f ServiceType_decode_ber; +der_type_encoder_f ServiceType_encode_der; +xer_type_decoder_f ServiceType_decode_xer; +xer_type_encoder_f ServiceType_encode_xer; +per_type_decoder_f ServiceType_decode_uper; +per_type_encoder_f ServiceType_encode_uper; +per_type_decoder_f ServiceType_decode_aper; +per_type_encoder_f ServiceType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServiceType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c new file mode 100644 index 0000000..cc5402f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNB-UE-X2AP-ID.h" + +int +SgNB_UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SgNB_UE_X2AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_SgNB_UE_X2AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_SgNB_UE_X2AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SgNB_UE_X2AP_ID = { + "SgNB-UE-X2AP-ID", + "SgNB-UE-X2AP-ID", + &asn_OP_NativeInteger, + asn_DEF_SgNB_UE_X2AP_ID_tags_1, + sizeof(asn_DEF_SgNB_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_SgNB_UE_X2AP_ID_tags_1[0]), /* 1 */ + asn_DEF_SgNB_UE_X2AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNB_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_SgNB_UE_X2AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SgNB_UE_X2AP_ID_constr_1, SgNB_UE_X2AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_SgNB_UE_X2AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h new file mode 100644 index 0000000..b379b9c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNB-UE-X2AP-ID.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNB_UE_X2AP_ID_H_ +#define _SgNB_UE_X2AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNB-UE-X2AP-ID */ +typedef unsigned long SgNB_UE_X2AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SgNB_UE_X2AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SgNB_UE_X2AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_SgNB_UE_X2AP_ID_specs_1; +asn_struct_free_f SgNB_UE_X2AP_ID_free; +asn_struct_print_f SgNB_UE_X2AP_ID_print; +asn_constr_check_f SgNB_UE_X2AP_ID_constraint; +ber_type_decoder_f SgNB_UE_X2AP_ID_decode_ber; +der_type_encoder_f SgNB_UE_X2AP_ID_encode_der; +xer_type_decoder_f SgNB_UE_X2AP_ID_decode_xer; +xer_type_encoder_f SgNB_UE_X2AP_ID_encode_xer; +per_type_decoder_f SgNB_UE_X2AP_ID_decode_uper; +per_type_encoder_f SgNB_UE_X2AP_ID_encode_uper; +per_type_decoder_f SgNB_UE_X2AP_ID_decode_aper; +per_type_encoder_f SgNB_UE_X2AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNB_UE_X2AP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.c new file mode 100644 index 0000000..6ecafd0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBActivityNotification.h" + +static asn_TYPE_member_t asn_MBR_SgNBActivityNotification_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBActivityNotification, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P102, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBActivityNotification_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBActivityNotification_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBActivityNotification_specs_1 = { + sizeof(struct SgNBActivityNotification), + offsetof(struct SgNBActivityNotification, _asn_ctx), + asn_MAP_SgNBActivityNotification_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBActivityNotification = { + "SgNBActivityNotification", + "SgNBActivityNotification", + &asn_OP_SEQUENCE, + asn_DEF_SgNBActivityNotification_tags_1, + sizeof(asn_DEF_SgNBActivityNotification_tags_1) + /sizeof(asn_DEF_SgNBActivityNotification_tags_1[0]), /* 1 */ + asn_DEF_SgNBActivityNotification_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBActivityNotification_tags_1) + /sizeof(asn_DEF_SgNBActivityNotification_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBActivityNotification_1, + 1, /* Elements count */ + &asn_SPC_SgNBActivityNotification_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.h new file mode 100644 index 0000000..1a39dee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBActivityNotification.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBActivityNotification_H_ +#define _SgNBActivityNotification_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBActivityNotification */ +typedef struct SgNBActivityNotification { + ProtocolIE_Container_119P102_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBActivityNotification_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBActivityNotification; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBActivityNotification_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.c new file mode 100644 index 0000000..7c8962a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBAdditionRequest.h" + +static asn_TYPE_member_t asn_MBR_SgNBAdditionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P64, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequest_specs_1 = { + sizeof(struct SgNBAdditionRequest), + offsetof(struct SgNBAdditionRequest, _asn_ctx), + asn_MAP_SgNBAdditionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequest = { + "SgNBAdditionRequest", + "SgNBAdditionRequest", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequest_tags_1, + sizeof(asn_DEF_SgNBAdditionRequest_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequest_tags_1[0]), /* 1 */ + asn_DEF_SgNBAdditionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequest_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequest_1, + 1, /* Elements count */ + &asn_SPC_SgNBAdditionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.h new file mode 100644 index 0000000..c7181b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBAdditionRequest_H_ +#define _SgNBAdditionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBAdditionRequest */ +typedef struct SgNBAdditionRequest { + ProtocolIE_Container_119P64_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBAdditionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c new file mode 100644 index 0000000..22fdf3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBAdditionRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_SgNBAdditionRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P65, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestAcknowledge_specs_1 = { + sizeof(struct SgNBAdditionRequestAcknowledge), + offsetof(struct SgNBAdditionRequestAcknowledge, _asn_ctx), + asn_MAP_SgNBAdditionRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestAcknowledge = { + "SgNBAdditionRequestAcknowledge", + "SgNBAdditionRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequestAcknowledge_tags_1, + sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_SgNBAdditionRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_SgNBAdditionRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h new file mode 100644 index 0000000..a6ece95 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBAdditionRequestAcknowledge_H_ +#define _SgNBAdditionRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBAdditionRequestAcknowledge */ +typedef struct SgNBAdditionRequestAcknowledge { + ProtocolIE_Container_119P65_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBAdditionRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.c new file mode 100644 index 0000000..2b8acf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBAdditionRequestReject.h" + +static asn_TYPE_member_t asn_MBR_SgNBAdditionRequestReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBAdditionRequestReject, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P66, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBAdditionRequestReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBAdditionRequestReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBAdditionRequestReject_specs_1 = { + sizeof(struct SgNBAdditionRequestReject), + offsetof(struct SgNBAdditionRequestReject, _asn_ctx), + asn_MAP_SgNBAdditionRequestReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestReject = { + "SgNBAdditionRequestReject", + "SgNBAdditionRequestReject", + &asn_OP_SEQUENCE, + asn_DEF_SgNBAdditionRequestReject_tags_1, + sizeof(asn_DEF_SgNBAdditionRequestReject_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequestReject_tags_1[0]), /* 1 */ + asn_DEF_SgNBAdditionRequestReject_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBAdditionRequestReject_tags_1) + /sizeof(asn_DEF_SgNBAdditionRequestReject_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBAdditionRequestReject_1, + 1, /* Elements count */ + &asn_SPC_SgNBAdditionRequestReject_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.h new file mode 100644 index 0000000..ac89d1b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBAdditionRequestReject.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBAdditionRequestReject_H_ +#define _SgNBAdditionRequestReject_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBAdditionRequestReject */ +typedef struct SgNBAdditionRequestReject { + ProtocolIE_Container_119P66_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBAdditionRequestReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBAdditionRequestReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBAdditionRequestReject_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.c new file mode 100644 index 0000000..46ba9cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBChangeConfirm.h" + +static asn_TYPE_member_t asn_MBR_SgNBChangeConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P81, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeConfirm_specs_1 = { + sizeof(struct SgNBChangeConfirm), + offsetof(struct SgNBChangeConfirm, _asn_ctx), + asn_MAP_SgNBChangeConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeConfirm = { + "SgNBChangeConfirm", + "SgNBChangeConfirm", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeConfirm_tags_1, + sizeof(asn_DEF_SgNBChangeConfirm_tags_1) + /sizeof(asn_DEF_SgNBChangeConfirm_tags_1[0]), /* 1 */ + asn_DEF_SgNBChangeConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBChangeConfirm_tags_1) + /sizeof(asn_DEF_SgNBChangeConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeConfirm_1, + 1, /* Elements count */ + &asn_SPC_SgNBChangeConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.h new file mode 100644 index 0000000..94de554 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBChangeConfirm_H_ +#define _SgNBChangeConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBChangeConfirm */ +typedef struct SgNBChangeConfirm { + ProtocolIE_Container_119P81_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBChangeConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.c new file mode 100644 index 0000000..cd52675 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBChangeRefuse.h" + +static asn_TYPE_member_t asn_MBR_SgNBChangeRefuse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRefuse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P83, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeRefuse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeRefuse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRefuse_specs_1 = { + sizeof(struct SgNBChangeRefuse), + offsetof(struct SgNBChangeRefuse, _asn_ctx), + asn_MAP_SgNBChangeRefuse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeRefuse = { + "SgNBChangeRefuse", + "SgNBChangeRefuse", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeRefuse_tags_1, + sizeof(asn_DEF_SgNBChangeRefuse_tags_1) + /sizeof(asn_DEF_SgNBChangeRefuse_tags_1[0]), /* 1 */ + asn_DEF_SgNBChangeRefuse_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBChangeRefuse_tags_1) + /sizeof(asn_DEF_SgNBChangeRefuse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeRefuse_1, + 1, /* Elements count */ + &asn_SPC_SgNBChangeRefuse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.h new file mode 100644 index 0000000..c751b47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRefuse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBChangeRefuse_H_ +#define _SgNBChangeRefuse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBChangeRefuse */ +typedef struct SgNBChangeRefuse { + ProtocolIE_Container_119P83_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeRefuse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeRefuse; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBChangeRefuse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.c new file mode 100644 index 0000000..dd739d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBChangeRequired.h" + +static asn_TYPE_member_t asn_MBR_SgNBChangeRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBChangeRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P80, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBChangeRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBChangeRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBChangeRequired_specs_1 = { + sizeof(struct SgNBChangeRequired), + offsetof(struct SgNBChangeRequired, _asn_ctx), + asn_MAP_SgNBChangeRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBChangeRequired = { + "SgNBChangeRequired", + "SgNBChangeRequired", + &asn_OP_SEQUENCE, + asn_DEF_SgNBChangeRequired_tags_1, + sizeof(asn_DEF_SgNBChangeRequired_tags_1) + /sizeof(asn_DEF_SgNBChangeRequired_tags_1[0]), /* 1 */ + asn_DEF_SgNBChangeRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBChangeRequired_tags_1) + /sizeof(asn_DEF_SgNBChangeRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBChangeRequired_1, + 1, /* Elements count */ + &asn_SPC_SgNBChangeRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.h new file mode 100644 index 0000000..1f00a38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBChangeRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBChangeRequired_H_ +#define _SgNBChangeRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBChangeRequired */ +typedef struct SgNBChangeRequired { + ProtocolIE_Container_119P80_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBChangeRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBChangeRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBChangeRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c new file mode 100644 index 0000000..cd8a3c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBCoordinationAssistanceInformation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SgNBCoordinationAssistanceInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SgNBCoordinationAssistanceInformation_value2enum_1[] = { + { 0, 25, "coordination-not-required" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SgNBCoordinationAssistanceInformation_enum2value_1[] = { + 0 /* coordination-not-required(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SgNBCoordinationAssistanceInformation_specs_1 = { + asn_MAP_SgNBCoordinationAssistanceInformation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SgNBCoordinationAssistanceInformation_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SgNBCoordinationAssistanceInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SgNBCoordinationAssistanceInformation = { + "SgNBCoordinationAssistanceInformation", + "SgNBCoordinationAssistanceInformation", + &asn_OP_NativeEnumerated, + asn_DEF_SgNBCoordinationAssistanceInformation_tags_1, + sizeof(asn_DEF_SgNBCoordinationAssistanceInformation_tags_1) + /sizeof(asn_DEF_SgNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */ + asn_DEF_SgNBCoordinationAssistanceInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBCoordinationAssistanceInformation_tags_1) + /sizeof(asn_DEF_SgNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SgNBCoordinationAssistanceInformation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SgNBCoordinationAssistanceInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h new file mode 100644 index 0000000..311769c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCoordinationAssistanceInformation.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBCoordinationAssistanceInformation_H_ +#define _SgNBCoordinationAssistanceInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SgNBCoordinationAssistanceInformation { + SgNBCoordinationAssistanceInformation_coordination_not_required = 0 + /* + * Enumeration is extensible + */ +} e_SgNBCoordinationAssistanceInformation; + +/* SgNBCoordinationAssistanceInformation */ +typedef long SgNBCoordinationAssistanceInformation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SgNBCoordinationAssistanceInformation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SgNBCoordinationAssistanceInformation; +extern const asn_INTEGER_specifics_t asn_SPC_SgNBCoordinationAssistanceInformation_specs_1; +asn_struct_free_f SgNBCoordinationAssistanceInformation_free; +asn_struct_print_f SgNBCoordinationAssistanceInformation_print; +asn_constr_check_f SgNBCoordinationAssistanceInformation_constraint; +ber_type_decoder_f SgNBCoordinationAssistanceInformation_decode_ber; +der_type_encoder_f SgNBCoordinationAssistanceInformation_encode_der; +xer_type_decoder_f SgNBCoordinationAssistanceInformation_decode_xer; +xer_type_encoder_f SgNBCoordinationAssistanceInformation_encode_xer; +per_type_decoder_f SgNBCoordinationAssistanceInformation_decode_uper; +per_type_encoder_f SgNBCoordinationAssistanceInformation_encode_uper; +per_type_decoder_f SgNBCoordinationAssistanceInformation_decode_aper; +per_type_encoder_f SgNBCoordinationAssistanceInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBCoordinationAssistanceInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.c new file mode 100644 index 0000000..9f6e64a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBCounterCheckRequest.h" + +static asn_TYPE_member_t asn_MBR_SgNBCounterCheckRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBCounterCheckRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P79, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBCounterCheckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBCounterCheckRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBCounterCheckRequest_specs_1 = { + sizeof(struct SgNBCounterCheckRequest), + offsetof(struct SgNBCounterCheckRequest, _asn_ctx), + asn_MAP_SgNBCounterCheckRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBCounterCheckRequest = { + "SgNBCounterCheckRequest", + "SgNBCounterCheckRequest", + &asn_OP_SEQUENCE, + asn_DEF_SgNBCounterCheckRequest_tags_1, + sizeof(asn_DEF_SgNBCounterCheckRequest_tags_1) + /sizeof(asn_DEF_SgNBCounterCheckRequest_tags_1[0]), /* 1 */ + asn_DEF_SgNBCounterCheckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBCounterCheckRequest_tags_1) + /sizeof(asn_DEF_SgNBCounterCheckRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBCounterCheckRequest_1, + 1, /* Elements count */ + &asn_SPC_SgNBCounterCheckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.h new file mode 100644 index 0000000..4d071da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBCounterCheckRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBCounterCheckRequest_H_ +#define _SgNBCounterCheckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBCounterCheckRequest */ +typedef struct SgNBCounterCheckRequest { + ProtocolIE_Container_119P79_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBCounterCheckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBCounterCheckRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBCounterCheckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.c new file mode 100644 index 0000000..35283f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationConfirm.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P72, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationConfirm_specs_1 = { + sizeof(struct SgNBModificationConfirm), + offsetof(struct SgNBModificationConfirm, _asn_ctx), + asn_MAP_SgNBModificationConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationConfirm = { + "SgNBModificationConfirm", + "SgNBModificationConfirm", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationConfirm_tags_1, + sizeof(asn_DEF_SgNBModificationConfirm_tags_1) + /sizeof(asn_DEF_SgNBModificationConfirm_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationConfirm_tags_1) + /sizeof(asn_DEF_SgNBModificationConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationConfirm_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.h new file mode 100644 index 0000000..500a58b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationConfirm_H_ +#define _SgNBModificationConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationConfirm */ +typedef struct SgNBModificationConfirm { + ProtocolIE_Container_119P72_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.c new file mode 100644 index 0000000..a07f0fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationRefuse.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationRefuse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRefuse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P73, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRefuse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRefuse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRefuse_specs_1 = { + sizeof(struct SgNBModificationRefuse), + offsetof(struct SgNBModificationRefuse, _asn_ctx), + asn_MAP_SgNBModificationRefuse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRefuse = { + "SgNBModificationRefuse", + "SgNBModificationRefuse", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRefuse_tags_1, + sizeof(asn_DEF_SgNBModificationRefuse_tags_1) + /sizeof(asn_DEF_SgNBModificationRefuse_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationRefuse_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRefuse_tags_1) + /sizeof(asn_DEF_SgNBModificationRefuse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRefuse_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationRefuse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.h new file mode 100644 index 0000000..9667635 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRefuse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationRefuse_H_ +#define _SgNBModificationRefuse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationRefuse */ +typedef struct SgNBModificationRefuse { + ProtocolIE_Container_119P73_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRefuse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRefuse; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationRefuse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.c new file mode 100644 index 0000000..c9e2653 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationRequest.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P68, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequest_specs_1 = { + sizeof(struct SgNBModificationRequest), + offsetof(struct SgNBModificationRequest, _asn_ctx), + asn_MAP_SgNBModificationRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequest = { + "SgNBModificationRequest", + "SgNBModificationRequest", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequest_tags_1, + sizeof(asn_DEF_SgNBModificationRequest_tags_1) + /sizeof(asn_DEF_SgNBModificationRequest_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequest_tags_1) + /sizeof(asn_DEF_SgNBModificationRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequest_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.h new file mode 100644 index 0000000..3c0d293 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationRequest_H_ +#define _SgNBModificationRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationRequest */ +typedef struct SgNBModificationRequest { + ProtocolIE_Container_119P68_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c new file mode 100644 index 0000000..0474ab1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P69, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestAcknowledge_specs_1 = { + sizeof(struct SgNBModificationRequestAcknowledge), + offsetof(struct SgNBModificationRequestAcknowledge, _asn_ctx), + asn_MAP_SgNBModificationRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestAcknowledge = { + "SgNBModificationRequestAcknowledge", + "SgNBModificationRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequestAcknowledge_tags_1, + sizeof(asn_DEF_SgNBModificationRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBModificationRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBModificationRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h new file mode 100644 index 0000000..9690076 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationRequestAcknowledge_H_ +#define _SgNBModificationRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationRequestAcknowledge */ +typedef struct SgNBModificationRequestAcknowledge { + ProtocolIE_Container_119P69_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.c new file mode 100644 index 0000000..c9c72c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationRequestReject.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationRequestReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequestReject, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P70, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequestReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequestReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequestReject_specs_1 = { + sizeof(struct SgNBModificationRequestReject), + offsetof(struct SgNBModificationRequestReject, _asn_ctx), + asn_MAP_SgNBModificationRequestReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestReject = { + "SgNBModificationRequestReject", + "SgNBModificationRequestReject", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequestReject_tags_1, + sizeof(asn_DEF_SgNBModificationRequestReject_tags_1) + /sizeof(asn_DEF_SgNBModificationRequestReject_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationRequestReject_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequestReject_tags_1) + /sizeof(asn_DEF_SgNBModificationRequestReject_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequestReject_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationRequestReject_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.h new file mode 100644 index 0000000..dfe1292 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequestReject.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationRequestReject_H_ +#define _SgNBModificationRequestReject_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationRequestReject */ +typedef struct SgNBModificationRequestReject { + ProtocolIE_Container_119P70_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequestReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequestReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationRequestReject_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.c new file mode 100644 index 0000000..0dcefa0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBModificationRequired.h" + +static asn_TYPE_member_t asn_MBR_SgNBModificationRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBModificationRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P71, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBModificationRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBModificationRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBModificationRequired_specs_1 = { + sizeof(struct SgNBModificationRequired), + offsetof(struct SgNBModificationRequired, _asn_ctx), + asn_MAP_SgNBModificationRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequired = { + "SgNBModificationRequired", + "SgNBModificationRequired", + &asn_OP_SEQUENCE, + asn_DEF_SgNBModificationRequired_tags_1, + sizeof(asn_DEF_SgNBModificationRequired_tags_1) + /sizeof(asn_DEF_SgNBModificationRequired_tags_1[0]), /* 1 */ + asn_DEF_SgNBModificationRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBModificationRequired_tags_1) + /sizeof(asn_DEF_SgNBModificationRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBModificationRequired_1, + 1, /* Elements count */ + &asn_SPC_SgNBModificationRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.h new file mode 100644 index 0000000..3d508bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBModificationRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBModificationRequired_H_ +#define _SgNBModificationRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBModificationRequired */ +typedef struct SgNBModificationRequired { + ProtocolIE_Container_119P71_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBModificationRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBModificationRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBModificationRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.c new file mode 100644 index 0000000..737ad5a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReconfigurationComplete.h" + +static asn_TYPE_member_t asn_MBR_SgNBReconfigurationComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReconfigurationComplete, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P67, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReconfigurationComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReconfigurationComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReconfigurationComplete_specs_1 = { + sizeof(struct SgNBReconfigurationComplete), + offsetof(struct SgNBReconfigurationComplete, _asn_ctx), + asn_MAP_SgNBReconfigurationComplete_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReconfigurationComplete = { + "SgNBReconfigurationComplete", + "SgNBReconfigurationComplete", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReconfigurationComplete_tags_1, + sizeof(asn_DEF_SgNBReconfigurationComplete_tags_1) + /sizeof(asn_DEF_SgNBReconfigurationComplete_tags_1[0]), /* 1 */ + asn_DEF_SgNBReconfigurationComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReconfigurationComplete_tags_1) + /sizeof(asn_DEF_SgNBReconfigurationComplete_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReconfigurationComplete_1, + 1, /* Elements count */ + &asn_SPC_SgNBReconfigurationComplete_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.h new file mode 100644 index 0000000..4d68f11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReconfigurationComplete.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReconfigurationComplete_H_ +#define _SgNBReconfigurationComplete_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReconfigurationComplete */ +typedef struct SgNBReconfigurationComplete { + ProtocolIE_Container_119P67_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReconfigurationComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReconfigurationComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReconfigurationComplete_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.c new file mode 100644 index 0000000..8a0f401 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReleaseConfirm.h" + +static asn_TYPE_member_t asn_MBR_SgNBReleaseConfirm_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseConfirm, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P78, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseConfirm_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseConfirm_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseConfirm_specs_1 = { + sizeof(struct SgNBReleaseConfirm), + offsetof(struct SgNBReleaseConfirm, _asn_ctx), + asn_MAP_SgNBReleaseConfirm_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseConfirm = { + "SgNBReleaseConfirm", + "SgNBReleaseConfirm", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseConfirm_tags_1, + sizeof(asn_DEF_SgNBReleaseConfirm_tags_1) + /sizeof(asn_DEF_SgNBReleaseConfirm_tags_1[0]), /* 1 */ + asn_DEF_SgNBReleaseConfirm_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseConfirm_tags_1) + /sizeof(asn_DEF_SgNBReleaseConfirm_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseConfirm_1, + 1, /* Elements count */ + &asn_SPC_SgNBReleaseConfirm_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.h new file mode 100644 index 0000000..39ff250 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseConfirm.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReleaseConfirm_H_ +#define _SgNBReleaseConfirm_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReleaseConfirm */ +typedef struct SgNBReleaseConfirm { + ProtocolIE_Container_119P78_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseConfirm_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseConfirm; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReleaseConfirm_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.c new file mode 100644 index 0000000..aaa47e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReleaseRequest.h" + +static asn_TYPE_member_t asn_MBR_SgNBReleaseRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P74, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequest_specs_1 = { + sizeof(struct SgNBReleaseRequest), + offsetof(struct SgNBReleaseRequest, _asn_ctx), + asn_MAP_SgNBReleaseRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequest = { + "SgNBReleaseRequest", + "SgNBReleaseRequest", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequest_tags_1, + sizeof(asn_DEF_SgNBReleaseRequest_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequest_tags_1[0]), /* 1 */ + asn_DEF_SgNBReleaseRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequest_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequest_1, + 1, /* Elements count */ + &asn_SPC_SgNBReleaseRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.h new file mode 100644 index 0000000..26ffb7c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReleaseRequest_H_ +#define _SgNBReleaseRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReleaseRequest */ +typedef struct SgNBReleaseRequest { + ProtocolIE_Container_119P74_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReleaseRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c new file mode 100644 index 0000000..318feef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReleaseRequestAcknowledge.h" + +static asn_TYPE_member_t asn_MBR_SgNBReleaseRequestAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P75, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequestAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequestAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestAcknowledge_specs_1 = { + sizeof(struct SgNBReleaseRequestAcknowledge), + offsetof(struct SgNBReleaseRequestAcknowledge, _asn_ctx), + asn_MAP_SgNBReleaseRequestAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestAcknowledge = { + "SgNBReleaseRequestAcknowledge", + "SgNBReleaseRequestAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequestAcknowledge_tags_1, + sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_SgNBReleaseRequestAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequestAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequestAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_SgNBReleaseRequestAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h new file mode 100644 index 0000000..f7a09c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestAcknowledge.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReleaseRequestAcknowledge_H_ +#define _SgNBReleaseRequestAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReleaseRequestAcknowledge */ +typedef struct SgNBReleaseRequestAcknowledge { + ProtocolIE_Container_119P75_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequestAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestAcknowledge; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReleaseRequestAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.c new file mode 100644 index 0000000..3cb0e9c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReleaseRequestReject.h" + +static asn_TYPE_member_t asn_MBR_SgNBReleaseRequestReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequestReject, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P76, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequestReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequestReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequestReject_specs_1 = { + sizeof(struct SgNBReleaseRequestReject), + offsetof(struct SgNBReleaseRequestReject, _asn_ctx), + asn_MAP_SgNBReleaseRequestReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestReject = { + "SgNBReleaseRequestReject", + "SgNBReleaseRequestReject", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequestReject_tags_1, + sizeof(asn_DEF_SgNBReleaseRequestReject_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequestReject_tags_1[0]), /* 1 */ + asn_DEF_SgNBReleaseRequestReject_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequestReject_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequestReject_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequestReject_1, + 1, /* Elements count */ + &asn_SPC_SgNBReleaseRequestReject_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.h new file mode 100644 index 0000000..59df843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequestReject.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReleaseRequestReject_H_ +#define _SgNBReleaseRequestReject_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReleaseRequestReject */ +typedef struct SgNBReleaseRequestReject { + ProtocolIE_Container_119P76_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequestReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequestReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReleaseRequestReject_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.c new file mode 100644 index 0000000..6b3b4dc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBReleaseRequired.h" + +static asn_TYPE_member_t asn_MBR_SgNBReleaseRequired_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBReleaseRequired, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P77, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_SgNBReleaseRequired_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBReleaseRequired_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SgNBReleaseRequired_specs_1 = { + sizeof(struct SgNBReleaseRequired), + offsetof(struct SgNBReleaseRequired, _asn_ctx), + asn_MAP_SgNBReleaseRequired_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequired = { + "SgNBReleaseRequired", + "SgNBReleaseRequired", + &asn_OP_SEQUENCE, + asn_DEF_SgNBReleaseRequired_tags_1, + sizeof(asn_DEF_SgNBReleaseRequired_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequired_tags_1[0]), /* 1 */ + asn_DEF_SgNBReleaseRequired_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBReleaseRequired_tags_1) + /sizeof(asn_DEF_SgNBReleaseRequired_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBReleaseRequired_1, + 1, /* Elements count */ + &asn_SPC_SgNBReleaseRequired_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.h new file mode 100644 index 0000000..af1683b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBReleaseRequired.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBReleaseRequired_H_ +#define _SgNBReleaseRequired_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBReleaseRequired */ +typedef struct SgNBReleaseRequired { + ProtocolIE_Container_119P77_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBReleaseRequired_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBReleaseRequired; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBReleaseRequired_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c new file mode 100644 index 0000000..17eb663 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.c @@ -0,0 +1,173 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBResourceCoordinationInformation.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_uLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 4400)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 4400)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_uLCoordinationInformation_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 13, 13, 6, 4400 } /* (SIZE(6..4400,...)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dLCoordinationInformation_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 13, 13, 6, 4400 } /* (SIZE(6..4400,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SgNBResourceCoordinationInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformation, nR_CGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR-CGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SgNBResourceCoordinationInformation, uLCoordinationInformation), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_uLCoordinationInformation_constr_3, memb_uLCoordinationInformation_constraint_1 }, + 0, 0, /* No default value */ + "uLCoordinationInformation" + }, + { ATF_POINTER, 2, offsetof(struct SgNBResourceCoordinationInformation, dLCoordinationInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_dLCoordinationInformation_constr_4, memb_dLCoordinationInformation_constraint_1 }, + 0, 0, /* No default value */ + "dLCoordinationInformation" + }, + { ATF_POINTER, 1, offsetof(struct SgNBResourceCoordinationInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P193, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SgNBResourceCoordinationInformation_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_SgNBResourceCoordinationInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SgNBResourceCoordinationInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR-CGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dLCoordinationInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SgNBResourceCoordinationInformation_specs_1 = { + sizeof(struct SgNBResourceCoordinationInformation), + offsetof(struct SgNBResourceCoordinationInformation, _asn_ctx), + asn_MAP_SgNBResourceCoordinationInformation_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SgNBResourceCoordinationInformation_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SgNBResourceCoordinationInformation = { + "SgNBResourceCoordinationInformation", + "SgNBResourceCoordinationInformation", + &asn_OP_SEQUENCE, + asn_DEF_SgNBResourceCoordinationInformation_tags_1, + sizeof(asn_DEF_SgNBResourceCoordinationInformation_tags_1) + /sizeof(asn_DEF_SgNBResourceCoordinationInformation_tags_1[0]), /* 1 */ + asn_DEF_SgNBResourceCoordinationInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBResourceCoordinationInformation_tags_1) + /sizeof(asn_DEF_SgNBResourceCoordinationInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SgNBResourceCoordinationInformation_1, + 4, /* Elements count */ + &asn_SPC_SgNBResourceCoordinationInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h new file mode 100644 index 0000000..3607bd7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBResourceCoordinationInformation.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBResourceCoordinationInformation_H_ +#define _SgNBResourceCoordinationInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRCGI.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SgNBResourceCoordinationInformation */ +typedef struct SgNBResourceCoordinationInformation { + NRCGI_t nR_CGI; + BIT_STRING_t uLCoordinationInformation; + BIT_STRING_t *dLCoordinationInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SgNBResourceCoordinationInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBResourceCoordinationInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_SgNBResourceCoordinationInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_SgNBResourceCoordinationInformation_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBResourceCoordinationInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.c new file mode 100644 index 0000000..9474063 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBSecurityKey.h" + +int +SgNBSecurityKey_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SgNBSecurityKey_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 256, 256 } /* (SIZE(256..256)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SgNBSecurityKey_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SgNBSecurityKey = { + "SgNBSecurityKey", + "SgNBSecurityKey", + &asn_OP_BIT_STRING, + asn_DEF_SgNBSecurityKey_tags_1, + sizeof(asn_DEF_SgNBSecurityKey_tags_1) + /sizeof(asn_DEF_SgNBSecurityKey_tags_1[0]), /* 1 */ + asn_DEF_SgNBSecurityKey_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBSecurityKey_tags_1) + /sizeof(asn_DEF_SgNBSecurityKey_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SgNBSecurityKey_constr_1, SgNBSecurityKey_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.h new file mode 100644 index 0000000..fc52922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBSecurityKey.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBSecurityKey_H_ +#define _SgNBSecurityKey_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBSecurityKey */ +typedef BIT_STRING_t SgNBSecurityKey_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SgNBSecurityKey_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SgNBSecurityKey; +asn_struct_free_f SgNBSecurityKey_free; +asn_struct_print_f SgNBSecurityKey_print; +asn_constr_check_f SgNBSecurityKey_constraint; +ber_type_decoder_f SgNBSecurityKey_decode_ber; +der_type_encoder_f SgNBSecurityKey_encode_der; +xer_type_decoder_f SgNBSecurityKey_decode_xer; +xer_type_encoder_f SgNBSecurityKey_encode_xer; +per_type_decoder_f SgNBSecurityKey_decode_uper; +per_type_encoder_f SgNBSecurityKey_encode_uper; +per_type_decoder_f SgNBSecurityKey_decode_aper; +per_type_encoder_f SgNBSecurityKey_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBSecurityKey_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.c new file mode 100644 index 0000000..49363a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SgNBtoMeNBContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_SgNBtoMeNBContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SgNBtoMeNBContainer = { + "SgNBtoMeNBContainer", + "SgNBtoMeNBContainer", + &asn_OP_OCTET_STRING, + asn_DEF_SgNBtoMeNBContainer_tags_1, + sizeof(asn_DEF_SgNBtoMeNBContainer_tags_1) + /sizeof(asn_DEF_SgNBtoMeNBContainer_tags_1[0]), /* 1 */ + asn_DEF_SgNBtoMeNBContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_SgNBtoMeNBContainer_tags_1) + /sizeof(asn_DEF_SgNBtoMeNBContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.h new file mode 100644 index 0000000..c06dff7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SgNBtoMeNBContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SgNBtoMeNBContainer_H_ +#define _SgNBtoMeNBContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SgNBtoMeNBContainer */ +typedef OCTET_STRING_t SgNBtoMeNBContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SgNBtoMeNBContainer; +asn_struct_free_f SgNBtoMeNBContainer_free; +asn_struct_print_f SgNBtoMeNBContainer_print; +asn_constr_check_f SgNBtoMeNBContainer_constraint; +ber_type_decoder_f SgNBtoMeNBContainer_decode_ber; +der_type_encoder_f SgNBtoMeNBContainer_encode_der; +xer_type_decoder_f SgNBtoMeNBContainer_decode_xer; +xer_type_encoder_f SgNBtoMeNBContainer_encode_xer; +per_type_decoder_f SgNBtoMeNBContainer_decode_uper; +per_type_encoder_f SgNBtoMeNBContainer_encode_uper; +per_type_decoder_f SgNBtoMeNBContainer_decode_aper; +per_type_encoder_f SgNBtoMeNBContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SgNBtoMeNBContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.c new file mode 100644 index 0000000..203ce2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SharedResourceType.h" + +#include "ULOnlySharing.h" +#include "ULandDLSharing.h" +asn_per_constraints_t asn_PER_type_SharedResourceType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SharedResourceType_1[] = { + { ATF_POINTER, 0, offsetof(struct SharedResourceType, choice.uLOnlySharing), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULOnlySharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLOnlySharing" + }, + { ATF_POINTER, 0, offsetof(struct SharedResourceType, choice.uLandDLSharing), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULandDLSharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLandDLSharing" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_SharedResourceType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLOnlySharing */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* uLandDLSharing */ +}; +asn_CHOICE_specifics_t asn_SPC_SharedResourceType_specs_1 = { + sizeof(struct SharedResourceType), + offsetof(struct SharedResourceType, _asn_ctx), + offsetof(struct SharedResourceType, present), + sizeof(((struct SharedResourceType *)0)->present), + asn_MAP_SharedResourceType_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SharedResourceType = { + "SharedResourceType", + "SharedResourceType", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_SharedResourceType_constr_1, CHOICE_constraint }, + asn_MBR_SharedResourceType_1, + 2, /* Elements count */ + &asn_SPC_SharedResourceType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.h new file mode 100644 index 0000000..f81b273 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SharedResourceType.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SharedResourceType_H_ +#define _SharedResourceType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SharedResourceType_PR { + SharedResourceType_PR_NOTHING, /* No components present */ + SharedResourceType_PR_uLOnlySharing, + SharedResourceType_PR_uLandDLSharing + /* Extensions may appear below */ + +} SharedResourceType_PR; + +/* Forward declarations */ +struct ULOnlySharing; +struct ULandDLSharing; + +/* SharedResourceType */ +typedef struct SharedResourceType { + SharedResourceType_PR present; + union SharedResourceType_u { + struct ULOnlySharing *uLOnlySharing; + struct ULandDLSharing *uLandDLSharing; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SharedResourceType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SharedResourceType; +extern asn_CHOICE_specifics_t asn_SPC_SharedResourceType_specs_1; +extern asn_TYPE_member_t asn_MBR_SharedResourceType_1[2]; +extern asn_per_constraints_t asn_PER_type_SharedResourceType_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SharedResourceType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.c new file mode 100644 index 0000000..b5c70d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ShortMAC-I.h" + +int +ShortMAC_I_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ShortMAC_I_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ShortMAC_I_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ShortMAC_I = { + "ShortMAC-I", + "ShortMAC-I", + &asn_OP_BIT_STRING, + asn_DEF_ShortMAC_I_tags_1, + sizeof(asn_DEF_ShortMAC_I_tags_1) + /sizeof(asn_DEF_ShortMAC_I_tags_1[0]), /* 1 */ + asn_DEF_ShortMAC_I_tags_1, /* Same as above */ + sizeof(asn_DEF_ShortMAC_I_tags_1) + /sizeof(asn_DEF_ShortMAC_I_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ShortMAC_I_constr_1, ShortMAC_I_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.h new file mode 100644 index 0000000..2f85fbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ShortMAC-I.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ShortMAC_I_H_ +#define _ShortMAC_I_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ShortMAC-I */ +typedef BIT_STRING_t ShortMAC_I_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ShortMAC_I_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ShortMAC_I; +asn_struct_free_f ShortMAC_I_free; +asn_struct_print_f ShortMAC_I_print; +asn_constr_check_f ShortMAC_I_constraint; +ber_type_decoder_f ShortMAC_I_decode_ber; +der_type_encoder_f ShortMAC_I_encode_der; +xer_type_decoder_f ShortMAC_I_decode_xer; +xer_type_encoder_f ShortMAC_I_encode_xer; +per_type_decoder_f ShortMAC_I_decode_uper; +per_type_encoder_f ShortMAC_I_encode_uper; +per_type_decoder_f ShortMAC_I_decode_aper; +per_type_encoder_f ShortMAC_I_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ShortMAC_I_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c new file mode 100644 index 0000000..491f242 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SourceOfUEActivityBehaviourInformation.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SourceOfUEActivityBehaviourInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SourceOfUEActivityBehaviourInformation_value2enum_1[] = { + { 0, 24, "subscription-information" }, + { 1, 10, "statistics" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SourceOfUEActivityBehaviourInformation_enum2value_1[] = { + 1, /* statistics(1) */ + 0 /* subscription-information(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SourceOfUEActivityBehaviourInformation_specs_1 = { + asn_MAP_SourceOfUEActivityBehaviourInformation_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SourceOfUEActivityBehaviourInformation_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SourceOfUEActivityBehaviourInformation = { + "SourceOfUEActivityBehaviourInformation", + "SourceOfUEActivityBehaviourInformation", + &asn_OP_NativeEnumerated, + asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1, + sizeof(asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1) + /sizeof(asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1[0]), /* 1 */ + asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1) + /sizeof(asn_DEF_SourceOfUEActivityBehaviourInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SourceOfUEActivityBehaviourInformation_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SourceOfUEActivityBehaviourInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h new file mode 100644 index 0000000..90d3add --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SourceOfUEActivityBehaviourInformation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SourceOfUEActivityBehaviourInformation_H_ +#define _SourceOfUEActivityBehaviourInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SourceOfUEActivityBehaviourInformation { + SourceOfUEActivityBehaviourInformation_subscription_information = 0, + SourceOfUEActivityBehaviourInformation_statistics = 1 + /* + * Enumeration is extensible + */ +} e_SourceOfUEActivityBehaviourInformation; + +/* SourceOfUEActivityBehaviourInformation */ +typedef long SourceOfUEActivityBehaviourInformation_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SourceOfUEActivityBehaviourInformation_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SourceOfUEActivityBehaviourInformation; +extern const asn_INTEGER_specifics_t asn_SPC_SourceOfUEActivityBehaviourInformation_specs_1; +asn_struct_free_f SourceOfUEActivityBehaviourInformation_free; +asn_struct_print_f SourceOfUEActivityBehaviourInformation_print; +asn_constr_check_f SourceOfUEActivityBehaviourInformation_constraint; +ber_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_ber; +der_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_der; +xer_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_xer; +xer_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_xer; +per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_uper; +per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_uper; +per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_aper; +per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SourceOfUEActivityBehaviourInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.c new file mode 100644 index 0000000..ad4bb53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SpecialSubframe-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_SpecialSubframe_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info, specialSubframePatterns), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpecialSubframePatterns, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "specialSubframePatterns" + }, + { ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info, cyclicPrefixDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixDL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct SpecialSubframe_Info, cyclicPrefixUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CyclicPrefixUL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cyclicPrefixUL" + }, + { ATF_POINTER, 1, offsetof(struct SpecialSubframe_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P194, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SpecialSubframe_Info_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_SpecialSubframe_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SpecialSubframe_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* specialSubframePatterns */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SpecialSubframe_Info_specs_1 = { + sizeof(struct SpecialSubframe_Info), + offsetof(struct SpecialSubframe_Info, _asn_ctx), + asn_MAP_SpecialSubframe_Info_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SpecialSubframe_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SpecialSubframe_Info = { + "SpecialSubframe-Info", + "SpecialSubframe-Info", + &asn_OP_SEQUENCE, + asn_DEF_SpecialSubframe_Info_tags_1, + sizeof(asn_DEF_SpecialSubframe_Info_tags_1) + /sizeof(asn_DEF_SpecialSubframe_Info_tags_1[0]), /* 1 */ + asn_DEF_SpecialSubframe_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_SpecialSubframe_Info_tags_1) + /sizeof(asn_DEF_SpecialSubframe_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SpecialSubframe_Info_1, + 4, /* Elements count */ + &asn_SPC_SpecialSubframe_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.h new file mode 100644 index 0000000..81154b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframe-Info.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SpecialSubframe_Info_H_ +#define _SpecialSubframe_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SpecialSubframePatterns.h" +#include "CyclicPrefixDL.h" +#include "CyclicPrefixUL.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SpecialSubframe-Info */ +typedef struct SpecialSubframe_Info { + SpecialSubframePatterns_t specialSubframePatterns; + CyclicPrefixDL_t cyclicPrefixDL; + CyclicPrefixUL_t cyclicPrefixUL; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SpecialSubframe_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SpecialSubframe_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_SpecialSubframe_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_SpecialSubframe_Info_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SpecialSubframe_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.c new file mode 100644 index 0000000..85af1c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.c @@ -0,0 +1,87 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SpecialSubframePatterns.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SpecialSubframePatterns_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 8 } /* (0..8,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SpecialSubframePatterns_value2enum_1[] = { + { 0, 4, "ssp0" }, + { 1, 4, "ssp1" }, + { 2, 4, "ssp2" }, + { 3, 4, "ssp3" }, + { 4, 4, "ssp4" }, + { 5, 4, "ssp5" }, + { 6, 4, "ssp6" }, + { 7, 4, "ssp7" }, + { 8, 4, "ssp8" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SpecialSubframePatterns_enum2value_1[] = { + 0, /* ssp0(0) */ + 1, /* ssp1(1) */ + 2, /* ssp2(2) */ + 3, /* ssp3(3) */ + 4, /* ssp4(4) */ + 5, /* ssp5(5) */ + 6, /* ssp6(6) */ + 7, /* ssp7(7) */ + 8 /* ssp8(8) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SpecialSubframePatterns_specs_1 = { + asn_MAP_SpecialSubframePatterns_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SpecialSubframePatterns_enum2value_1, /* N => "tag"; sorted by N */ + 9, /* Number of elements in the maps */ + 10, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SpecialSubframePatterns_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SpecialSubframePatterns = { + "SpecialSubframePatterns", + "SpecialSubframePatterns", + &asn_OP_NativeEnumerated, + asn_DEF_SpecialSubframePatterns_tags_1, + sizeof(asn_DEF_SpecialSubframePatterns_tags_1) + /sizeof(asn_DEF_SpecialSubframePatterns_tags_1[0]), /* 1 */ + asn_DEF_SpecialSubframePatterns_tags_1, /* Same as above */ + sizeof(asn_DEF_SpecialSubframePatterns_tags_1) + /sizeof(asn_DEF_SpecialSubframePatterns_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SpecialSubframePatterns_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SpecialSubframePatterns_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.h new file mode 100644 index 0000000..42f19e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpecialSubframePatterns.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SpecialSubframePatterns_H_ +#define _SpecialSubframePatterns_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SpecialSubframePatterns { + SpecialSubframePatterns_ssp0 = 0, + SpecialSubframePatterns_ssp1 = 1, + SpecialSubframePatterns_ssp2 = 2, + SpecialSubframePatterns_ssp3 = 3, + SpecialSubframePatterns_ssp4 = 4, + SpecialSubframePatterns_ssp5 = 5, + SpecialSubframePatterns_ssp6 = 6, + SpecialSubframePatterns_ssp7 = 7, + SpecialSubframePatterns_ssp8 = 8 + /* + * Enumeration is extensible + */ +} e_SpecialSubframePatterns; + +/* SpecialSubframePatterns */ +typedef long SpecialSubframePatterns_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SpecialSubframePatterns_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SpecialSubframePatterns; +extern const asn_INTEGER_specifics_t asn_SPC_SpecialSubframePatterns_specs_1; +asn_struct_free_f SpecialSubframePatterns_free; +asn_struct_print_f SpecialSubframePatterns_print; +asn_constr_check_f SpecialSubframePatterns_constraint; +ber_type_decoder_f SpecialSubframePatterns_decode_ber; +der_type_encoder_f SpecialSubframePatterns_encode_der; +xer_type_decoder_f SpecialSubframePatterns_decode_xer; +xer_type_encoder_f SpecialSubframePatterns_encode_xer; +per_type_decoder_f SpecialSubframePatterns_decode_uper; +per_type_encoder_f SpecialSubframePatterns_encode_uper; +per_type_decoder_f SpecialSubframePatterns_decode_aper; +per_type_encoder_f SpecialSubframePatterns_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SpecialSubframePatterns_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.c new file mode 100644 index 0000000..a3b8167 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SpectrumSharingGroupID.h" + +int +SpectrumSharingGroupID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SpectrumSharingGroupID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (1..256) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SpectrumSharingGroupID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SpectrumSharingGroupID = { + "SpectrumSharingGroupID", + "SpectrumSharingGroupID", + &asn_OP_NativeInteger, + asn_DEF_SpectrumSharingGroupID_tags_1, + sizeof(asn_DEF_SpectrumSharingGroupID_tags_1) + /sizeof(asn_DEF_SpectrumSharingGroupID_tags_1[0]), /* 1 */ + asn_DEF_SpectrumSharingGroupID_tags_1, /* Same as above */ + sizeof(asn_DEF_SpectrumSharingGroupID_tags_1) + /sizeof(asn_DEF_SpectrumSharingGroupID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SpectrumSharingGroupID_constr_1, SpectrumSharingGroupID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.h new file mode 100644 index 0000000..480362f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SpectrumSharingGroupID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SpectrumSharingGroupID_H_ +#define _SpectrumSharingGroupID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SpectrumSharingGroupID */ +typedef long SpectrumSharingGroupID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SpectrumSharingGroupID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SpectrumSharingGroupID; +asn_struct_free_f SpectrumSharingGroupID_free; +asn_struct_print_f SpectrumSharingGroupID_print; +asn_constr_check_f SpectrumSharingGroupID_constraint; +ber_type_decoder_f SpectrumSharingGroupID_decode_ber; +der_type_encoder_f SpectrumSharingGroupID_encode_der; +xer_type_decoder_f SpectrumSharingGroupID_decode_xer; +xer_type_encoder_f SpectrumSharingGroupID_encode_xer; +per_type_decoder_f SpectrumSharingGroupID_decode_uper; +per_type_encoder_f SpectrumSharingGroupID_encode_uper; +per_type_decoder_f SpectrumSharingGroupID_decode_aper; +per_type_encoder_f SpectrumSharingGroupID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SpectrumSharingGroupID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.c new file mode 100644 index 0000000..112b24d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.c @@ -0,0 +1,102 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SplitSRB.h" + +#include "DeliveryStatus.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_SplitSRB_1[] = { + { ATF_POINTER, 1, offsetof(struct SplitSRB, rrcContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rrcContainer" + }, + { ATF_NOFLAGS, 0, offsetof(struct SplitSRB, srbType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SRBType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "srbType" + }, + { ATF_POINTER, 2, offsetof(struct SplitSRB, deliveryStatus), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DeliveryStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "deliveryStatus" + }, + { ATF_POINTER, 1, offsetof(struct SplitSRB, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P170, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SplitSRB_oms_1[] = { 0, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_SplitSRB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SplitSRB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srbType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deliveryStatus */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SplitSRB_specs_1 = { + sizeof(struct SplitSRB), + offsetof(struct SplitSRB, _asn_ctx), + asn_MAP_SplitSRB_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SplitSRB_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SplitSRB = { + "SplitSRB", + "SplitSRB", + &asn_OP_SEQUENCE, + asn_DEF_SplitSRB_tags_1, + sizeof(asn_DEF_SplitSRB_tags_1) + /sizeof(asn_DEF_SplitSRB_tags_1[0]), /* 1 */ + asn_DEF_SplitSRB_tags_1, /* Same as above */ + sizeof(asn_DEF_SplitSRB_tags_1) + /sizeof(asn_DEF_SplitSRB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SplitSRB_1, + 4, /* Elements count */ + &asn_SPC_SplitSRB_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.h new file mode 100644 index 0000000..3f00205 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRB.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SplitSRB_H_ +#define _SplitSRB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RRCContainer.h" +#include "SRBType.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DeliveryStatus; +struct ProtocolExtensionContainer; + +/* SplitSRB */ +typedef struct SplitSRB { + RRCContainer_t *rrcContainer; /* OPTIONAL */ + SRBType_t srbType; + struct DeliveryStatus *deliveryStatus; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SplitSRB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SplitSRB; +extern asn_SEQUENCE_specifics_t asn_SPC_SplitSRB_specs_1; +extern asn_TYPE_member_t asn_MBR_SplitSRB_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SplitSRB_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.c new file mode 100644 index 0000000..79e6875 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SplitSRBs.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SplitSRBs_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SplitSRBs_value2enum_1[] = { + { 0, 4, "srb1" }, + { 1, 4, "srb2" }, + { 2, 8, "srb1and2" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SplitSRBs_enum2value_1[] = { + 0, /* srb1(0) */ + 2, /* srb1and2(2) */ + 1 /* srb2(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SplitSRBs_specs_1 = { + asn_MAP_SplitSRBs_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SplitSRBs_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SplitSRBs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SplitSRBs = { + "SplitSRBs", + "SplitSRBs", + &asn_OP_NativeEnumerated, + asn_DEF_SplitSRBs_tags_1, + sizeof(asn_DEF_SplitSRBs_tags_1) + /sizeof(asn_DEF_SplitSRBs_tags_1[0]), /* 1 */ + asn_DEF_SplitSRBs_tags_1, /* Same as above */ + sizeof(asn_DEF_SplitSRBs_tags_1) + /sizeof(asn_DEF_SplitSRBs_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SplitSRBs_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SplitSRBs_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.h new file mode 100644 index 0000000..3e2fa86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SplitSRBs.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SplitSRBs_H_ +#define _SplitSRBs_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SplitSRBs { + SplitSRBs_srb1 = 0, + SplitSRBs_srb2 = 1, + SplitSRBs_srb1and2 = 2 + /* + * Enumeration is extensible + */ +} e_SplitSRBs; + +/* SplitSRBs */ +typedef long SplitSRBs_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SplitSRBs_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SplitSRBs; +extern const asn_INTEGER_specifics_t asn_SPC_SplitSRBs_specs_1; +asn_struct_free_f SplitSRBs_free; +asn_struct_print_f SplitSRBs_print; +asn_constr_check_f SplitSRBs_constraint; +ber_type_decoder_f SplitSRBs_decode_ber; +der_type_encoder_f SplitSRBs_encode_der; +xer_type_decoder_f SplitSRBs_decode_xer; +xer_type_encoder_f SplitSRBs_encode_xer; +per_type_decoder_f SplitSRBs_decode_uper; +per_type_encoder_f SplitSRBs_encode_uper; +per_type_decoder_f SplitSRBs_decode_aper; +per_type_encoder_f SplitSRBs_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SplitSRBs_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.c new file mode 100644 index 0000000..d044f61 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Style-ID.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Style_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Style_ID = { + "Style-ID", + "Style-ID", + &asn_OP_NativeInteger, + asn_DEF_Style_ID_tags_1, + sizeof(asn_DEF_Style_ID_tags_1) + /sizeof(asn_DEF_Style_ID_tags_1[0]), /* 1 */ + asn_DEF_Style_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_Style_ID_tags_1) + /sizeof(asn_DEF_Style_ID_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.h new file mode 100644 index 0000000..1f80e28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Style-ID.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Style_ID_H_ +#define _Style_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Style-ID */ +typedef long Style_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Style_ID; +asn_struct_free_f Style_ID_free; +asn_struct_print_f Style_ID_print; +asn_constr_check_f Style_ID_constraint; +ber_type_decoder_f Style_ID_decode_ber; +der_type_encoder_f Style_ID_encode_der; +xer_type_decoder_f Style_ID_decode_xer; +xer_type_encoder_f Style_ID_encode_xer; +per_type_decoder_f Style_ID_decode_uper; +per_type_encoder_f Style_ID_encode_uper; +per_type_decoder_f Style_ID_decode_aper; +per_type_encoder_f Style_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Style_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.c new file mode 100644 index 0000000..0d98b24 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.c @@ -0,0 +1,92 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandCQI.h" + +#include "SubbandCQICodeword1.h" +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_SubbandCQI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQI, subbandCQICodeword0), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SubbandCQICodeword0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subbandCQICodeword0" + }, + { ATF_POINTER, 2, offsetof(struct SubbandCQI, subbandCQICodeword1), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SubbandCQICodeword1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subbandCQICodeword1" + }, + { ATF_POINTER, 1, offsetof(struct SubbandCQI, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P195, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SubbandCQI_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_SubbandCQI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subbandCQICodeword0 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* subbandCQICodeword1 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SubbandCQI_specs_1 = { + sizeof(struct SubbandCQI), + offsetof(struct SubbandCQI, _asn_ctx), + asn_MAP_SubbandCQI_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SubbandCQI_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQI = { + "SubbandCQI", + "SubbandCQI", + &asn_OP_SEQUENCE, + asn_DEF_SubbandCQI_tags_1, + sizeof(asn_DEF_SubbandCQI_tags_1) + /sizeof(asn_DEF_SubbandCQI_tags_1[0]), /* 1 */ + asn_DEF_SubbandCQI_tags_1, /* Same as above */ + sizeof(asn_DEF_SubbandCQI_tags_1) + /sizeof(asn_DEF_SubbandCQI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SubbandCQI_1, + 3, /* Elements count */ + &asn_SPC_SubbandCQI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.h new file mode 100644 index 0000000..14f3b1f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQI.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandCQI_H_ +#define _SubbandCQI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SubbandCQICodeword0.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SubbandCQICodeword1; +struct ProtocolExtensionContainer; + +/* SubbandCQI */ +typedef struct SubbandCQI { + SubbandCQICodeword0_t subbandCQICodeword0; + struct SubbandCQICodeword1 *subbandCQICodeword1; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQI; +extern asn_SEQUENCE_specifics_t asn_SPC_SubbandCQI_specs_1; +extern asn_TYPE_member_t asn_MBR_SubbandCQI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandCQI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.c new file mode 100644 index 0000000..0982f17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.c @@ -0,0 +1,180 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandCQICodeword0.h" + +static int +memb_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_two_bitSubbandDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_two_bitDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_four_bitCQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_two_bitSubbandDifferentialCQI_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_two_bitDifferentialCQI_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_SubbandCQICodeword0_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SubbandCQICodeword0_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword0, choice.four_bitCQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_four_bitCQI_constr_2, memb_four_bitCQI_constraint_1 }, + 0, 0, /* No default value */ + "four-bitCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword0, choice.two_bitSubbandDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_two_bitSubbandDifferentialCQI_constr_3, memb_two_bitSubbandDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "two-bitSubbandDifferentialCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword0, choice.two_bitDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_two_bitDifferentialCQI_constr_4, memb_two_bitDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "two-bitDifferentialCQI" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQICodeword0_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* two-bitSubbandDifferentialCQI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* two-bitDifferentialCQI */ +}; +asn_CHOICE_specifics_t asn_SPC_SubbandCQICodeword0_specs_1 = { + sizeof(struct SubbandCQICodeword0), + offsetof(struct SubbandCQICodeword0, _asn_ctx), + offsetof(struct SubbandCQICodeword0, present), + sizeof(((struct SubbandCQICodeword0 *)0)->present), + asn_MAP_SubbandCQICodeword0_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQICodeword0 = { + "SubbandCQICodeword0", + "SubbandCQICodeword0", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_SubbandCQICodeword0_constr_1, CHOICE_constraint }, + asn_MBR_SubbandCQICodeword0_1, + 3, /* Elements count */ + &asn_SPC_SubbandCQICodeword0_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.h new file mode 100644 index 0000000..6b236a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword0.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandCQICodeword0_H_ +#define _SubbandCQICodeword0_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubbandCQICodeword0_PR { + SubbandCQICodeword0_PR_NOTHING, /* No components present */ + SubbandCQICodeword0_PR_four_bitCQI, + SubbandCQICodeword0_PR_two_bitSubbandDifferentialCQI, + SubbandCQICodeword0_PR_two_bitDifferentialCQI + /* Extensions may appear below */ + +} SubbandCQICodeword0_PR; + +/* SubbandCQICodeword0 */ +typedef struct SubbandCQICodeword0 { + SubbandCQICodeword0_PR present; + union SubbandCQICodeword0_u { + long four_bitCQI; + long two_bitSubbandDifferentialCQI; + long two_bitDifferentialCQI; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQICodeword0_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQICodeword0; +extern asn_CHOICE_specifics_t asn_SPC_SubbandCQICodeword0_specs_1; +extern asn_TYPE_member_t asn_MBR_SubbandCQICodeword0_1[3]; +extern asn_per_constraints_t asn_PER_type_SubbandCQICodeword0_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandCQICodeword0_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.c new file mode 100644 index 0000000..779c516 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.c @@ -0,0 +1,220 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandCQICodeword1.h" + +static int +memb_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_three_bitSpatialDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_two_bitSubbandDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_two_bitDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_four_bitCQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_three_bitSpatialDifferentialCQI_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_two_bitSubbandDifferentialCQI_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_two_bitDifferentialCQI_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_SubbandCQICodeword1_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SubbandCQICodeword1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword1, choice.four_bitCQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_four_bitCQI_constr_2, memb_four_bitCQI_constraint_1 }, + 0, 0, /* No default value */ + "four-bitCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword1, choice.three_bitSpatialDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_three_bitSpatialDifferentialCQI_constr_3, memb_three_bitSpatialDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "three-bitSpatialDifferentialCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword1, choice.two_bitSubbandDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_two_bitSubbandDifferentialCQI_constr_4, memb_two_bitSubbandDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "two-bitSubbandDifferentialCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQICodeword1, choice.two_bitDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_two_bitDifferentialCQI_constr_5, memb_two_bitDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "two-bitDifferentialCQI" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQICodeword1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* three-bitSpatialDifferentialCQI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* two-bitSubbandDifferentialCQI */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* two-bitDifferentialCQI */ +}; +asn_CHOICE_specifics_t asn_SPC_SubbandCQICodeword1_specs_1 = { + sizeof(struct SubbandCQICodeword1), + offsetof(struct SubbandCQICodeword1, _asn_ctx), + offsetof(struct SubbandCQICodeword1, present), + sizeof(((struct SubbandCQICodeword1 *)0)->present), + asn_MAP_SubbandCQICodeword1_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQICodeword1 = { + "SubbandCQICodeword1", + "SubbandCQICodeword1", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_SubbandCQICodeword1_constr_1, CHOICE_constraint }, + asn_MBR_SubbandCQICodeword1_1, + 4, /* Elements count */ + &asn_SPC_SubbandCQICodeword1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.h new file mode 100644 index 0000000..906e7f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQICodeword1.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandCQICodeword1_H_ +#define _SubbandCQICodeword1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubbandCQICodeword1_PR { + SubbandCQICodeword1_PR_NOTHING, /* No components present */ + SubbandCQICodeword1_PR_four_bitCQI, + SubbandCQICodeword1_PR_three_bitSpatialDifferentialCQI, + SubbandCQICodeword1_PR_two_bitSubbandDifferentialCQI, + SubbandCQICodeword1_PR_two_bitDifferentialCQI + /* Extensions may appear below */ + +} SubbandCQICodeword1_PR; + +/* SubbandCQICodeword1 */ +typedef struct SubbandCQICodeword1 { + SubbandCQICodeword1_PR present; + union SubbandCQICodeword1_u { + long four_bitCQI; + long three_bitSpatialDifferentialCQI; + long two_bitSubbandDifferentialCQI; + long two_bitDifferentialCQI; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQICodeword1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQICodeword1; +extern asn_CHOICE_specifics_t asn_SPC_SubbandCQICodeword1_specs_1; +extern asn_TYPE_member_t asn_MBR_SubbandCQICodeword1_1[4]; +extern asn_per_constraints_t asn_PER_type_SubbandCQICodeword1_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandCQICodeword1_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.c new file mode 100644 index 0000000..33e5f1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.c @@ -0,0 +1,121 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandCQIItem.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_subbandIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 27)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_subbandIndex_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 27 } /* (0..27,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SubbandCQIItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQIItem, subbandCQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubbandCQI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subbandCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubbandCQIItem, subbandIndex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_subbandIndex_constr_3, memb_subbandIndex_constraint_1 }, + 0, 0, /* No default value */ + "subbandIndex" + }, + { ATF_POINTER, 1, offsetof(struct SubbandCQIItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P198, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SubbandCQIItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_SubbandCQIItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SubbandCQIItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subbandCQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* subbandIndex */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SubbandCQIItem_specs_1 = { + sizeof(struct SubbandCQIItem), + offsetof(struct SubbandCQIItem, _asn_ctx), + asn_MAP_SubbandCQIItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SubbandCQIItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQIItem = { + "SubbandCQIItem", + "SubbandCQIItem", + &asn_OP_SEQUENCE, + asn_DEF_SubbandCQIItem_tags_1, + sizeof(asn_DEF_SubbandCQIItem_tags_1) + /sizeof(asn_DEF_SubbandCQIItem_tags_1[0]), /* 1 */ + asn_DEF_SubbandCQIItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SubbandCQIItem_tags_1) + /sizeof(asn_DEF_SubbandCQIItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SubbandCQIItem_1, + 3, /* Elements count */ + &asn_SPC_SubbandCQIItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.h new file mode 100644 index 0000000..efa843a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIItem.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandCQIItem_H_ +#define _SubbandCQIItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SubbandCQI.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SubbandCQIItem */ +typedef struct SubbandCQIItem { + SubbandCQI_t subbandCQI; + long subbandIndex; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQIItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQIItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SubbandCQIItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SubbandCQIItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandCQIItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.c new file mode 100644 index 0000000..f95a901 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandCQIList.h" + +#include "SubbandCQIItem.h" +asn_per_constraints_t asn_PER_type_SubbandCQIList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 14 } /* (SIZE(1..14)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SubbandCQIList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SubbandCQIItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_SubbandCQIList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_SubbandCQIList_specs_1 = { + sizeof(struct SubbandCQIList), + offsetof(struct SubbandCQIList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SubbandCQIList = { + "SubbandCQIList", + "SubbandCQIList", + &asn_OP_SEQUENCE_OF, + asn_DEF_SubbandCQIList_tags_1, + sizeof(asn_DEF_SubbandCQIList_tags_1) + /sizeof(asn_DEF_SubbandCQIList_tags_1[0]), /* 1 */ + asn_DEF_SubbandCQIList_tags_1, /* Same as above */ + sizeof(asn_DEF_SubbandCQIList_tags_1) + /sizeof(asn_DEF_SubbandCQIList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubbandCQIList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_SubbandCQIList_1, + 1, /* Single element */ + &asn_SPC_SubbandCQIList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.h new file mode 100644 index 0000000..ea94734 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandCQIList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandCQIList_H_ +#define _SubbandCQIList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SubbandCQIItem; + +/* SubbandCQIList */ +typedef struct SubbandCQIList { + A_SEQUENCE_OF(struct SubbandCQIItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubbandCQIList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubbandCQIList; +extern asn_SET_OF_specifics_t asn_SPC_SubbandCQIList_specs_1; +extern asn_TYPE_member_t asn_MBR_SubbandCQIList_1[1]; +extern asn_per_constraints_t asn_PER_type_SubbandCQIList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandCQIList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.c new file mode 100644 index 0000000..64d1778 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubbandSize.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SubbandSize_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SubbandSize_value2enum_1[] = { + { 0, 5, "size2" }, + { 1, 5, "size3" }, + { 2, 5, "size4" }, + { 3, 5, "size6" }, + { 4, 5, "size8" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SubbandSize_enum2value_1[] = { + 0, /* size2(0) */ + 1, /* size3(1) */ + 2, /* size4(2) */ + 3, /* size6(3) */ + 4 /* size8(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SubbandSize_specs_1 = { + asn_MAP_SubbandSize_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SubbandSize_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SubbandSize_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SubbandSize = { + "SubbandSize", + "SubbandSize", + &asn_OP_NativeEnumerated, + asn_DEF_SubbandSize_tags_1, + sizeof(asn_DEF_SubbandSize_tags_1) + /sizeof(asn_DEF_SubbandSize_tags_1[0]), /* 1 */ + asn_DEF_SubbandSize_tags_1, /* Same as above */ + sizeof(asn_DEF_SubbandSize_tags_1) + /sizeof(asn_DEF_SubbandSize_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubbandSize_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SubbandSize_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.h new file mode 100644 index 0000000..39b8c49 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubbandSize.h @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubbandSize_H_ +#define _SubbandSize_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubbandSize { + SubbandSize_size2 = 0, + SubbandSize_size3 = 1, + SubbandSize_size4 = 2, + SubbandSize_size6 = 3, + SubbandSize_size8 = 4 + /* + * Enumeration is extensible + */ +} e_SubbandSize; + +/* SubbandSize */ +typedef long SubbandSize_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SubbandSize_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SubbandSize; +extern const asn_INTEGER_specifics_t asn_SPC_SubbandSize_specs_1; +asn_struct_free_f SubbandSize_free; +asn_struct_print_f SubbandSize_print; +asn_constr_check_f SubbandSize_constraint; +ber_type_decoder_f SubbandSize_decode_ber; +der_type_encoder_f SubbandSize_encode_der; +xer_type_decoder_f SubbandSize_decode_xer; +xer_type_encoder_f SubbandSize_encode_xer; +per_type_decoder_f SubbandSize_decode_uper; +per_type_encoder_f SubbandSize_encode_uper; +per_type_decoder_f SubbandSize_decode_aper; +per_type_encoder_f SubbandSize_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubbandSize_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.c new file mode 100644 index 0000000..75f9e90 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubframeAllocation.h" + +asn_per_constraints_t asn_PER_type_SubframeAllocation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SubframeAllocation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SubframeAllocation, choice.oneframe), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Oneframe, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oneframe" + }, + { ATF_NOFLAGS, 0, offsetof(struct SubframeAllocation, choice.fourframes), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Fourframes, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fourframes" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_SubframeAllocation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oneframe */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fourframes */ +}; +asn_CHOICE_specifics_t asn_SPC_SubframeAllocation_specs_1 = { + sizeof(struct SubframeAllocation), + offsetof(struct SubframeAllocation, _asn_ctx), + offsetof(struct SubframeAllocation, present), + sizeof(((struct SubframeAllocation *)0)->present), + asn_MAP_SubframeAllocation_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SubframeAllocation = { + "SubframeAllocation", + "SubframeAllocation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_SubframeAllocation_constr_1, CHOICE_constraint }, + asn_MBR_SubframeAllocation_1, + 2, /* Elements count */ + &asn_SPC_SubframeAllocation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.h new file mode 100644 index 0000000..1bd0348 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAllocation.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubframeAllocation_H_ +#define _SubframeAllocation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Oneframe.h" +#include "Fourframes.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubframeAllocation_PR { + SubframeAllocation_PR_NOTHING, /* No components present */ + SubframeAllocation_PR_oneframe, + SubframeAllocation_PR_fourframes + /* Extensions may appear below */ + +} SubframeAllocation_PR; + +/* SubframeAllocation */ +typedef struct SubframeAllocation { + SubframeAllocation_PR present; + union SubframeAllocation_u { + Oneframe_t oneframe; + Fourframes_t fourframes; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SubframeAllocation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubframeAllocation; +extern asn_CHOICE_specifics_t asn_SPC_SubframeAllocation_specs_1; +extern asn_TYPE_member_t asn_MBR_SubframeAllocation_1[2]; +extern asn_per_constraints_t asn_PER_type_SubframeAllocation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubframeAllocation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.c new file mode 100644 index 0000000..c2583d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.c @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubframeAssignment.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SubframeAssignment_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SubframeAssignment_value2enum_1[] = { + { 0, 3, "sa0" }, + { 1, 3, "sa1" }, + { 2, 3, "sa2" }, + { 3, 3, "sa3" }, + { 4, 3, "sa4" }, + { 5, 3, "sa5" }, + { 6, 3, "sa6" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SubframeAssignment_enum2value_1[] = { + 0, /* sa0(0) */ + 1, /* sa1(1) */ + 2, /* sa2(2) */ + 3, /* sa3(3) */ + 4, /* sa4(4) */ + 5, /* sa5(5) */ + 6 /* sa6(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SubframeAssignment_specs_1 = { + asn_MAP_SubframeAssignment_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SubframeAssignment_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SubframeAssignment_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SubframeAssignment = { + "SubframeAssignment", + "SubframeAssignment", + &asn_OP_NativeEnumerated, + asn_DEF_SubframeAssignment_tags_1, + sizeof(asn_DEF_SubframeAssignment_tags_1) + /sizeof(asn_DEF_SubframeAssignment_tags_1[0]), /* 1 */ + asn_DEF_SubframeAssignment_tags_1, /* Same as above */ + sizeof(asn_DEF_SubframeAssignment_tags_1) + /sizeof(asn_DEF_SubframeAssignment_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubframeAssignment_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SubframeAssignment_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.h new file mode 100644 index 0000000..04f6ee3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeAssignment.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubframeAssignment_H_ +#define _SubframeAssignment_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubframeAssignment { + SubframeAssignment_sa0 = 0, + SubframeAssignment_sa1 = 1, + SubframeAssignment_sa2 = 2, + SubframeAssignment_sa3 = 3, + SubframeAssignment_sa4 = 4, + SubframeAssignment_sa5 = 5, + SubframeAssignment_sa6 = 6 + /* + * Enumeration is extensible + */ +} e_SubframeAssignment; + +/* SubframeAssignment */ +typedef long SubframeAssignment_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SubframeAssignment_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SubframeAssignment; +extern const asn_INTEGER_specifics_t asn_SPC_SubframeAssignment_specs_1; +asn_struct_free_f SubframeAssignment_free; +asn_struct_print_f SubframeAssignment_print; +asn_constr_check_f SubframeAssignment_constraint; +ber_type_decoder_f SubframeAssignment_decode_ber; +der_type_encoder_f SubframeAssignment_encode_der; +xer_type_decoder_f SubframeAssignment_decode_xer; +xer_type_encoder_f SubframeAssignment_encode_xer; +per_type_decoder_f SubframeAssignment_decode_uper; +per_type_encoder_f SubframeAssignment_encode_uper; +per_type_decoder_f SubframeAssignment_decode_aper; +per_type_encoder_f SubframeAssignment_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubframeAssignment_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.c new file mode 100644 index 0000000..6c05981 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubframeType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SubframeType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SubframeType_value2enum_1[] = { + { 0, 5, "mbsfn" }, + { 1, 8, "nonmbsfn" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SubframeType_enum2value_1[] = { + 0, /* mbsfn(0) */ + 1 /* nonmbsfn(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_SubframeType_specs_1 = { + asn_MAP_SubframeType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SubframeType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SubframeType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SubframeType = { + "SubframeType", + "SubframeType", + &asn_OP_NativeEnumerated, + asn_DEF_SubframeType_tags_1, + sizeof(asn_DEF_SubframeType_tags_1) + /sizeof(asn_DEF_SubframeType_tags_1[0]), /* 1 */ + asn_DEF_SubframeType_tags_1, /* Same as above */ + sizeof(asn_DEF_SubframeType_tags_1) + /sizeof(asn_DEF_SubframeType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubframeType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SubframeType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.h new file mode 100644 index 0000000..935af63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubframeType.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubframeType_H_ +#define _SubframeType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SubframeType { + SubframeType_mbsfn = 0, + SubframeType_nonmbsfn = 1 + /* + * Enumeration is extensible + */ +} e_SubframeType; + +/* SubframeType */ +typedef long SubframeType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SubframeType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SubframeType; +extern const asn_INTEGER_specifics_t asn_SPC_SubframeType_specs_1; +asn_struct_free_f SubframeType_free; +asn_struct_print_f SubframeType_print; +asn_constr_check_f SubframeType_constraint; +ber_type_decoder_f SubframeType_decode_ber; +der_type_encoder_f SubframeType_encode_der; +xer_type_decoder_f SubframeType_decode_xer; +xer_type_encoder_f SubframeType_encode_xer; +per_type_decoder_f SubframeType_decode_uper; +per_type_encoder_f SubframeType_encode_uper; +per_type_decoder_f SubframeType_decode_aper; +per_type_encoder_f SubframeType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubframeType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c new file mode 100644 index 0000000..cbdd82f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SubscriberProfileIDforRFP.h" + +int +SubscriberProfileIDforRFP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SubscriberProfileIDforRFP_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (1..256) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SubscriberProfileIDforRFP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SubscriberProfileIDforRFP = { + "SubscriberProfileIDforRFP", + "SubscriberProfileIDforRFP", + &asn_OP_NativeInteger, + asn_DEF_SubscriberProfileIDforRFP_tags_1, + sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1) + /sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */ + asn_DEF_SubscriberProfileIDforRFP_tags_1, /* Same as above */ + sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1) + /sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubscriberProfileIDforRFP_constr_1, SubscriberProfileIDforRFP_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h new file mode 100644 index 0000000..c8b691f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SubscriberProfileIDforRFP.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SubscriberProfileIDforRFP_H_ +#define _SubscriberProfileIDforRFP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SubscriberProfileIDforRFP */ +typedef long SubscriberProfileIDforRFP_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SubscriberProfileIDforRFP_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SubscriberProfileIDforRFP; +asn_struct_free_f SubscriberProfileIDforRFP_free; +asn_struct_print_f SubscriberProfileIDforRFP_print; +asn_constr_check_f SubscriberProfileIDforRFP_constraint; +ber_type_decoder_f SubscriberProfileIDforRFP_decode_ber; +der_type_encoder_f SubscriberProfileIDforRFP_encode_der; +xer_type_decoder_f SubscriberProfileIDforRFP_decode_xer; +xer_type_encoder_f SubscriberProfileIDforRFP_encode_xer; +per_type_decoder_f SubscriberProfileIDforRFP_decode_uper; +per_type_encoder_f SubscriberProfileIDforRFP_encode_uper; +per_type_decoder_f SubscriberProfileIDforRFP_decode_aper; +per_type_encoder_f SubscriberProfileIDforRFP_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubscriberProfileIDforRFP_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c new file mode 100644 index 0000000..8c96698 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.c @@ -0,0 +1,358 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Subscription-Based-UE-DifferentiationInfo.h" + +#include "ScheduledCommunicationTime.h" +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static int +memb_periodicTime_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 3600)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_periodicCommunicationIndicator_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_stationaryIndication_constr_8 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_trafficProfile_constr_12 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_batteryIndication_constr_17 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_periodicTime_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 12, 12, 1, 3600 } /* (1..3600,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_periodicCommunicationIndicator_value2enum_2[] = { + { 0, 12, "periodically" }, + { 1, 8, "ondemand" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_periodicCommunicationIndicator_enum2value_2[] = { + 1, /* ondemand(1) */ + 0 /* periodically(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_periodicCommunicationIndicator_specs_2 = { + asn_MAP_periodicCommunicationIndicator_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_periodicCommunicationIndicator_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_periodicCommunicationIndicator_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodicCommunicationIndicator_2 = { + "periodicCommunicationIndicator", + "periodicCommunicationIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_periodicCommunicationIndicator_tags_2, + sizeof(asn_DEF_periodicCommunicationIndicator_tags_2) + /sizeof(asn_DEF_periodicCommunicationIndicator_tags_2[0]) - 1, /* 1 */ + asn_DEF_periodicCommunicationIndicator_tags_2, /* Same as above */ + sizeof(asn_DEF_periodicCommunicationIndicator_tags_2) + /sizeof(asn_DEF_periodicCommunicationIndicator_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_periodicCommunicationIndicator_constr_2, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_periodicCommunicationIndicator_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_stationaryIndication_value2enum_8[] = { + { 0, 10, "stationary" }, + { 1, 6, "mobile" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_stationaryIndication_enum2value_8[] = { + 1, /* mobile(1) */ + 0 /* stationary(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_stationaryIndication_specs_8 = { + asn_MAP_stationaryIndication_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_stationaryIndication_enum2value_8, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_stationaryIndication_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_stationaryIndication_8 = { + "stationaryIndication", + "stationaryIndication", + &asn_OP_NativeEnumerated, + asn_DEF_stationaryIndication_tags_8, + sizeof(asn_DEF_stationaryIndication_tags_8) + /sizeof(asn_DEF_stationaryIndication_tags_8[0]) - 1, /* 1 */ + asn_DEF_stationaryIndication_tags_8, /* Same as above */ + sizeof(asn_DEF_stationaryIndication_tags_8) + /sizeof(asn_DEF_stationaryIndication_tags_8[0]), /* 2 */ + { 0, &asn_PER_type_stationaryIndication_constr_8, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_stationaryIndication_specs_8 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_trafficProfile_value2enum_12[] = { + { 0, 13, "single-packet" }, + { 1, 12, "dual-packets" }, + { 2, 16, "multiple-packets" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_trafficProfile_enum2value_12[] = { + 1, /* dual-packets(1) */ + 2, /* multiple-packets(2) */ + 0 /* single-packet(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_trafficProfile_specs_12 = { + asn_MAP_trafficProfile_value2enum_12, /* "tag" => N; sorted by tag */ + asn_MAP_trafficProfile_enum2value_12, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_trafficProfile_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_trafficProfile_12 = { + "trafficProfile", + "trafficProfile", + &asn_OP_NativeEnumerated, + asn_DEF_trafficProfile_tags_12, + sizeof(asn_DEF_trafficProfile_tags_12) + /sizeof(asn_DEF_trafficProfile_tags_12[0]) - 1, /* 1 */ + asn_DEF_trafficProfile_tags_12, /* Same as above */ + sizeof(asn_DEF_trafficProfile_tags_12) + /sizeof(asn_DEF_trafficProfile_tags_12[0]), /* 2 */ + { 0, &asn_PER_type_trafficProfile_constr_12, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_trafficProfile_specs_12 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_batteryIndication_value2enum_17[] = { + { 0, 15, "battery-powered" }, + { 1, 47, "battery-powered-not-rechargeable-or-replaceable" }, + { 2, 19, "not-battery-powered" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_batteryIndication_enum2value_17[] = { + 0, /* battery-powered(0) */ + 1, /* battery-powered-not-rechargeable-or-replaceable(1) */ + 2 /* not-battery-powered(2) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_batteryIndication_specs_17 = { + asn_MAP_batteryIndication_value2enum_17, /* "tag" => N; sorted by tag */ + asn_MAP_batteryIndication_enum2value_17, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_batteryIndication_tags_17[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_batteryIndication_17 = { + "batteryIndication", + "batteryIndication", + &asn_OP_NativeEnumerated, + asn_DEF_batteryIndication_tags_17, + sizeof(asn_DEF_batteryIndication_tags_17) + /sizeof(asn_DEF_batteryIndication_tags_17[0]) - 1, /* 1 */ + asn_DEF_batteryIndication_tags_17, /* Same as above */ + sizeof(asn_DEF_batteryIndication_tags_17) + /sizeof(asn_DEF_batteryIndication_tags_17[0]), /* 2 */ + { 0, &asn_PER_type_batteryIndication_constr_17, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_batteryIndication_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_Subscription_Based_UE_DifferentiationInfo_1[] = { + { ATF_POINTER, 7, offsetof(struct Subscription_Based_UE_DifferentiationInfo, periodicCommunicationIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_periodicCommunicationIndicator_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "periodicCommunicationIndicator" + }, + { ATF_POINTER, 6, offsetof(struct Subscription_Based_UE_DifferentiationInfo, periodicTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_periodicTime_constr_6, memb_periodicTime_constraint_1 }, + 0, 0, /* No default value */ + "periodicTime" + }, + { ATF_POINTER, 5, offsetof(struct Subscription_Based_UE_DifferentiationInfo, scheduledCommunicationTime), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ScheduledCommunicationTime, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "scheduledCommunicationTime" + }, + { ATF_POINTER, 4, offsetof(struct Subscription_Based_UE_DifferentiationInfo, stationaryIndication), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_stationaryIndication_8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "stationaryIndication" + }, + { ATF_POINTER, 3, offsetof(struct Subscription_Based_UE_DifferentiationInfo, trafficProfile), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_trafficProfile_12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "trafficProfile" + }, + { ATF_POINTER, 2, offsetof(struct Subscription_Based_UE_DifferentiationInfo, batteryIndication), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_batteryIndication_17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "batteryIndication" + }, + { ATF_POINTER, 1, offsetof(struct Subscription_Based_UE_DifferentiationInfo, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P196, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_Subscription_Based_UE_DifferentiationInfo_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 }; +static const ber_tlv_tag_t asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Subscription_Based_UE_DifferentiationInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* periodicCommunicationIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* periodicTime */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* scheduledCommunicationTime */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* stationaryIndication */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* trafficProfile */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* batteryIndication */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Subscription_Based_UE_DifferentiationInfo_specs_1 = { + sizeof(struct Subscription_Based_UE_DifferentiationInfo), + offsetof(struct Subscription_Based_UE_DifferentiationInfo, _asn_ctx), + asn_MAP_Subscription_Based_UE_DifferentiationInfo_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_Subscription_Based_UE_DifferentiationInfo_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Subscription_Based_UE_DifferentiationInfo = { + "Subscription-Based-UE-DifferentiationInfo", + "Subscription-Based-UE-DifferentiationInfo", + &asn_OP_SEQUENCE, + asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1, + sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1) + /sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1[0]), /* 1 */ + asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1) + /sizeof(asn_DEF_Subscription_Based_UE_DifferentiationInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Subscription_Based_UE_DifferentiationInfo_1, + 7, /* Elements count */ + &asn_SPC_Subscription_Based_UE_DifferentiationInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h new file mode 100644 index 0000000..cf8f9ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Subscription-Based-UE-DifferentiationInfo.h @@ -0,0 +1,109 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Subscription_Based_UE_DifferentiationInfo_H_ +#define _Subscription_Based_UE_DifferentiationInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator { + Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator_periodically = 0, + Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator_ondemand = 1 + /* + * Enumeration is extensible + */ +} e_Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator; +typedef enum Subscription_Based_UE_DifferentiationInfo__stationaryIndication { + Subscription_Based_UE_DifferentiationInfo__stationaryIndication_stationary = 0, + Subscription_Based_UE_DifferentiationInfo__stationaryIndication_mobile = 1 + /* + * Enumeration is extensible + */ +} e_Subscription_Based_UE_DifferentiationInfo__stationaryIndication; +typedef enum Subscription_Based_UE_DifferentiationInfo__trafficProfile { + Subscription_Based_UE_DifferentiationInfo__trafficProfile_single_packet = 0, + Subscription_Based_UE_DifferentiationInfo__trafficProfile_dual_packets = 1, + Subscription_Based_UE_DifferentiationInfo__trafficProfile_multiple_packets = 2 + /* + * Enumeration is extensible + */ +} e_Subscription_Based_UE_DifferentiationInfo__trafficProfile; +typedef enum Subscription_Based_UE_DifferentiationInfo__batteryIndication { + Subscription_Based_UE_DifferentiationInfo__batteryIndication_battery_powered = 0, + Subscription_Based_UE_DifferentiationInfo__batteryIndication_battery_powered_not_rechargeable_or_replaceable = 1, + Subscription_Based_UE_DifferentiationInfo__batteryIndication_not_battery_powered = 2 + /* + * Enumeration is extensible + */ +} e_Subscription_Based_UE_DifferentiationInfo__batteryIndication; + +/* Forward declarations */ +struct ScheduledCommunicationTime; +struct ProtocolExtensionContainer; + +/* Subscription-Based-UE-DifferentiationInfo */ +typedef struct Subscription_Based_UE_DifferentiationInfo { + long *periodicCommunicationIndicator; /* OPTIONAL */ + long *periodicTime; /* OPTIONAL */ + struct ScheduledCommunicationTime *scheduledCommunicationTime; /* OPTIONAL */ + long *stationaryIndication; /* OPTIONAL */ + long *trafficProfile; /* OPTIONAL */ + long *batteryIndication; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Subscription_Based_UE_DifferentiationInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_periodicCommunicationIndicator_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_stationaryIndication_8; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_trafficProfile_12; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_batteryIndication_17; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_Subscription_Based_UE_DifferentiationInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_Subscription_Based_UE_DifferentiationInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_Subscription_Based_UE_DifferentiationInfo_1[7]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Subscription_Based_UE_DifferentiationInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..2586cea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,466 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_ricSubscription = 201; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_ricSubscriptionDelete = 202; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_ricServiceUpdate = 203; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_ricControl = 204; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_x2Setup = 6; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_endcX2Setup = 36; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_resourceStatusReportingInitiation = 9; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_8_id_eNBConfigurationUpdate = 8; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_9_id_endcConfigurationUpdate = 37; +static const long asn_VAL_9_reject = 0; +static const long asn_VAL_10_id_reset = 7; +static const long asn_VAL_10_reject = 0; +static const long asn_VAL_11_id_ricIndication = 205; +static const long asn_VAL_11_ignore = 1; +static const long asn_VAL_12_id_ricServiceQuery = 206; +static const long asn_VAL_12_ignore = 1; +static const long asn_VAL_13_id_loadIndication = 2; +static const long asn_VAL_13_ignore = 1; +static const long asn_VAL_14_id_gNBStatusIndication = 45; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_15_id_resourceStatusReporting = 10; +static const long asn_VAL_15_ignore = 1; +static const long asn_VAL_16_id_errorIndication = 3; +static const long asn_VAL_16_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_ricSubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_ricSubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_ricServiceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_ricControl }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_X2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_X2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_x2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCX2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_endcX2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_resourceStatusReportingInitiation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENBConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_eNBConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_endcConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_ricIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_12_id_ricServiceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_LoadInformation }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_13_id_loadIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_GNBStatusIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_14_id_gNBStatusIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusUpdate }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_15_id_resourceStatusReporting }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_16_id_errorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 16, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.X2SetupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "X2SetupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ENDCX2SetupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCX2SetupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResourceStatusResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResourceStatusResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ENBConfigurationUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENBConfigurationUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ENDCConfigurationUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCConfigurationUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 9 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 8 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 7 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 6 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 5 }, /* X2SetupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 4 }, /* ENDCX2SetupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 3 }, /* ResourceStatusResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 2 }, /* ENBConfigurationUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 1 }, /* ENDCConfigurationUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 10, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 10, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..4845865 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "X2SetupRequest.h" +#include "X2SetupResponse.h" +#include "X2SetupFailure.h" +#include "ENDCX2SetupRequest.h" +#include "ENDCX2SetupResponse.h" +#include "ENDCX2SetupFailure.h" +#include "ResourceStatusRequest.h" +#include "ResourceStatusResponse.h" +#include "ResourceStatusFailure.h" +#include "ENBConfigurationUpdate.h" +#include "ENBConfigurationUpdateAcknowledge.h" +#include "ENBConfigurationUpdateFailure.h" +#include "ENDCConfigurationUpdate.h" +#include "ENDCConfigurationUpdateAcknowledge.h" +#include "ENDCConfigurationUpdateFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "LoadInformation.h" +#include "GNBStatusIndication.h" +#include "ResourceStatusUpdate.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_X2SetupResponse, + SuccessfulOutcome__value_PR_ENDCX2SetupResponse, + SuccessfulOutcome__value_PR_ResourceStatusResponse, + SuccessfulOutcome__value_PR_ENBConfigurationUpdateAcknowledge, + SuccessfulOutcome__value_PR_ENDCConfigurationUpdateAcknowledge, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + X2SetupResponse_t X2SetupResponse; + ENDCX2SetupResponse_t ENDCX2SetupResponse; + ResourceStatusResponse_t ResourceStatusResponse; + ENBConfigurationUpdateAcknowledge_t ENBConfigurationUpdateAcknowledge; + ENDCConfigurationUpdateAcknowledge_t ENDCConfigurationUpdateAcknowledge; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.c new file mode 100644 index 0000000..8d716f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "SupportedSULFreqBandItem.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 1024)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1024 } /* (1..1024,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem, freqBandIndicatorNr), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_freqBandIndicatorNr_constr_2, memb_freqBandIndicatorNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandIndicatorNr" + }, + { ATF_POINTER, 1, offsetof(struct SupportedSULFreqBandItem, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P200, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_SupportedSULFreqBandItem_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SupportedSULFreqBandItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SupportedSULFreqBandItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_specs_1 = { + sizeof(struct SupportedSULFreqBandItem), + offsetof(struct SupportedSULFreqBandItem, _asn_ctx), + asn_MAP_SupportedSULFreqBandItem_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SupportedSULFreqBandItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem = { + "SupportedSULFreqBandItem", + "SupportedSULFreqBandItem", + &asn_OP_SEQUENCE, + asn_DEF_SupportedSULFreqBandItem_tags_1, + sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1) + /sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */ + asn_DEF_SupportedSULFreqBandItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1) + /sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SupportedSULFreqBandItem_1, + 2, /* Elements count */ + &asn_SPC_SupportedSULFreqBandItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.h new file mode 100644 index 0000000..135e0df --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/SupportedSULFreqBandItem.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _SupportedSULFreqBandItem_H_ +#define _SupportedSULFreqBandItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* SupportedSULFreqBandItem */ +typedef struct SupportedSULFreqBandItem { + long freqBandIndicatorNr; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedSULFreqBandItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedSULFreqBandItem_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.c new file mode 100644 index 0000000..c57b8cc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TABasedMDT.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TABasedMDT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TABasedMDT, tAListforMDT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAListforMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAListforMDT" + }, + { ATF_POINTER, 1, offsetof(struct TABasedMDT, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P201, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TABasedMDT_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_TABasedMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TABasedMDT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAListforMDT */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TABasedMDT_specs_1 = { + sizeof(struct TABasedMDT), + offsetof(struct TABasedMDT, _asn_ctx), + asn_MAP_TABasedMDT_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_TABasedMDT_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TABasedMDT = { + "TABasedMDT", + "TABasedMDT", + &asn_OP_SEQUENCE, + asn_DEF_TABasedMDT_tags_1, + sizeof(asn_DEF_TABasedMDT_tags_1) + /sizeof(asn_DEF_TABasedMDT_tags_1[0]), /* 1 */ + asn_DEF_TABasedMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_TABasedMDT_tags_1) + /sizeof(asn_DEF_TABasedMDT_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TABasedMDT_1, + 2, /* Elements count */ + &asn_SPC_TABasedMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.h new file mode 100644 index 0000000..4424b92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedMDT.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TABasedMDT_H_ +#define _TABasedMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAListforMDT.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TABasedMDT */ +typedef struct TABasedMDT { + TAListforMDT_t tAListforMDT; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TABasedMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TABasedMDT; +extern asn_SEQUENCE_specifics_t asn_SPC_TABasedMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_TABasedMDT_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TABasedMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.c new file mode 100644 index 0000000..37e6f1b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TABasedQMC.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TABasedQMC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TABasedQMC, tAListforQMC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAListforQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAListforQMC" + }, + { ATF_POINTER, 1, offsetof(struct TABasedQMC, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P204, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TABasedQMC_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_TABasedQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TABasedQMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAListforQMC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TABasedQMC_specs_1 = { + sizeof(struct TABasedQMC), + offsetof(struct TABasedQMC, _asn_ctx), + asn_MAP_TABasedQMC_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_TABasedQMC_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TABasedQMC = { + "TABasedQMC", + "TABasedQMC", + &asn_OP_SEQUENCE, + asn_DEF_TABasedQMC_tags_1, + sizeof(asn_DEF_TABasedQMC_tags_1) + /sizeof(asn_DEF_TABasedQMC_tags_1[0]), /* 1 */ + asn_DEF_TABasedQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_TABasedQMC_tags_1) + /sizeof(asn_DEF_TABasedQMC_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TABasedQMC_1, + 2, /* Elements count */ + &asn_SPC_TABasedQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.h new file mode 100644 index 0000000..d34e073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TABasedQMC.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TABasedQMC_H_ +#define _TABasedQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAListforQMC.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TABasedQMC */ +typedef struct TABasedQMC { + TAListforQMC_t tAListforQMC; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TABasedQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TABasedQMC; +extern asn_SEQUENCE_specifics_t asn_SPC_TABasedQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_TABasedQMC_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TABasedQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.c new file mode 100644 index 0000000..ba9e118 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAC.h" + +int +TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TAC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TAC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TAC = { + "TAC", + "TAC", + &asn_OP_OCTET_STRING, + asn_DEF_TAC_tags_1, + sizeof(asn_DEF_TAC_tags_1) + /sizeof(asn_DEF_TAC_tags_1[0]), /* 1 */ + asn_DEF_TAC_tags_1, /* Same as above */ + sizeof(asn_DEF_TAC_tags_1) + /sizeof(asn_DEF_TAC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TAC_constr_1, TAC_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.h new file mode 100644 index 0000000..fec62da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAC.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAC_H_ +#define _TAC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TAC */ +typedef OCTET_STRING_t TAC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TAC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TAC; +asn_struct_free_f TAC_free; +asn_struct_print_f TAC_print; +asn_constr_check_f TAC_constraint; +ber_type_decoder_f TAC_decode_ber; +der_type_encoder_f TAC_encode_der; +xer_type_decoder_f TAC_decode_xer; +xer_type_encoder_f TAC_encode_xer; +per_type_decoder_f TAC_decode_uper; +per_type_encoder_f TAC_encode_uper; +per_type_decoder_f TAC_decode_aper; +per_type_encoder_f TAC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.c new file mode 100644 index 0000000..cebc015 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAI-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TAI_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAI_Item, tAC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAC" + }, + { ATF_NOFLAGS, 0, offsetof(struct TAI_Item, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 1, offsetof(struct TAI_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P203, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TAI_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_TAI_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAI_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAI_Item_specs_1 = { + sizeof(struct TAI_Item), + offsetof(struct TAI_Item, _asn_ctx), + asn_MAP_TAI_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_TAI_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAI_Item = { + "TAI-Item", + "TAI-Item", + &asn_OP_SEQUENCE, + asn_DEF_TAI_Item_tags_1, + sizeof(asn_DEF_TAI_Item_tags_1) + /sizeof(asn_DEF_TAI_Item_tags_1[0]), /* 1 */ + asn_DEF_TAI_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_TAI_Item_tags_1) + /sizeof(asn_DEF_TAI_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAI_Item_1, + 3, /* Elements count */ + &asn_SPC_TAI_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.h new file mode 100644 index 0000000..ef4d4c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAI-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAI_Item_H_ +#define _TAI_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAC.h" +#include "PLMN-Identity.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TAI-Item */ +typedef struct TAI_Item { + TAC_t tAC; + PLMN_Identity_t pLMN_Identity; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAI_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAI_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_TAI_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_TAI_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAI_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.c new file mode 100644 index 0000000..01b4c63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAIBasedMDT.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TAIBasedMDT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedMDT, tAIListforMDT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAIListforMDT, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAIListforMDT" + }, + { ATF_POINTER, 1, offsetof(struct TAIBasedMDT, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P202, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TAIBasedMDT_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_TAIBasedMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAIBasedMDT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAIListforMDT */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAIBasedMDT_specs_1 = { + sizeof(struct TAIBasedMDT), + offsetof(struct TAIBasedMDT, _asn_ctx), + asn_MAP_TAIBasedMDT_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_TAIBasedMDT_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIBasedMDT = { + "TAIBasedMDT", + "TAIBasedMDT", + &asn_OP_SEQUENCE, + asn_DEF_TAIBasedMDT_tags_1, + sizeof(asn_DEF_TAIBasedMDT_tags_1) + /sizeof(asn_DEF_TAIBasedMDT_tags_1[0]), /* 1 */ + asn_DEF_TAIBasedMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_TAIBasedMDT_tags_1) + /sizeof(asn_DEF_TAIBasedMDT_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAIBasedMDT_1, + 2, /* Elements count */ + &asn_SPC_TAIBasedMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.h new file mode 100644 index 0000000..9ca0932 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedMDT.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAIBasedMDT_H_ +#define _TAIBasedMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAIListforMDT.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TAIBasedMDT */ +typedef struct TAIBasedMDT { + TAIListforMDT_t tAIListforMDT; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIBasedMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAIBasedMDT; +extern asn_SEQUENCE_specifics_t asn_SPC_TAIBasedMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_TAIBasedMDT_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAIBasedMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.c new file mode 100644 index 0000000..7d35c92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAIBasedQMC.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TAIBasedQMC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TAIBasedQMC, tAIListforQMC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TAIListforQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tAIListforQMC" + }, + { ATF_POINTER, 1, offsetof(struct TAIBasedQMC, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P205, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TAIBasedQMC_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_TAIBasedQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TAIBasedQMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAIListforQMC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TAIBasedQMC_specs_1 = { + sizeof(struct TAIBasedQMC), + offsetof(struct TAIBasedQMC, _asn_ctx), + asn_MAP_TAIBasedQMC_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_TAIBasedQMC_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIBasedQMC = { + "TAIBasedQMC", + "TAIBasedQMC", + &asn_OP_SEQUENCE, + asn_DEF_TAIBasedQMC_tags_1, + sizeof(asn_DEF_TAIBasedQMC_tags_1) + /sizeof(asn_DEF_TAIBasedQMC_tags_1[0]), /* 1 */ + asn_DEF_TAIBasedQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_TAIBasedQMC_tags_1) + /sizeof(asn_DEF_TAIBasedQMC_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TAIBasedQMC_1, + 2, /* Elements count */ + &asn_SPC_TAIBasedQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.h new file mode 100644 index 0000000..1396cd7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIBasedQMC.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAIBasedQMC_H_ +#define _TAIBasedQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAIListforQMC.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TAIBasedQMC */ +typedef struct TAIBasedQMC { + TAIListforQMC_t tAIListforQMC; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIBasedQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAIBasedQMC; +extern asn_SEQUENCE_specifics_t asn_SPC_TAIBasedQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_TAIBasedQMC_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAIBasedQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.c new file mode 100644 index 0000000..42a0065 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAIListforMDT.h" + +#include "TAI-Item.h" +asn_per_constraints_t asn_PER_type_TAIListforMDT_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_TAIListforMDT_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TAI_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAIListforMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_TAIListforMDT_specs_1 = { + sizeof(struct TAIListforMDT), + offsetof(struct TAIListforMDT, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIListforMDT = { + "TAIListforMDT", + "TAIListforMDT", + &asn_OP_SEQUENCE_OF, + asn_DEF_TAIListforMDT_tags_1, + sizeof(asn_DEF_TAIListforMDT_tags_1) + /sizeof(asn_DEF_TAIListforMDT_tags_1[0]), /* 1 */ + asn_DEF_TAIListforMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_TAIListforMDT_tags_1) + /sizeof(asn_DEF_TAIListforMDT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TAIListforMDT_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_TAIListforMDT_1, + 1, /* Single element */ + &asn_SPC_TAIListforMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.h new file mode 100644 index 0000000..d27034a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforMDT.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAIListforMDT_H_ +#define _TAIListforMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct TAI_Item; + +/* TAIListforMDT */ +typedef struct TAIListforMDT { + A_SEQUENCE_OF(struct TAI_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIListforMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAIListforMDT; +extern asn_SET_OF_specifics_t asn_SPC_TAIListforMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_TAIListforMDT_1[1]; +extern asn_per_constraints_t asn_PER_type_TAIListforMDT_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAIListforMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.c new file mode 100644 index 0000000..ac23717 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAIListforQMC.h" + +#include "TAI-Item.h" +asn_per_constraints_t asn_PER_type_TAIListforQMC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_TAIListforQMC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_TAI_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAIListforQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_TAIListforQMC_specs_1 = { + sizeof(struct TAIListforQMC), + offsetof(struct TAIListforQMC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_TAIListforQMC = { + "TAIListforQMC", + "TAIListforQMC", + &asn_OP_SEQUENCE_OF, + asn_DEF_TAIListforQMC_tags_1, + sizeof(asn_DEF_TAIListforQMC_tags_1) + /sizeof(asn_DEF_TAIListforQMC_tags_1[0]), /* 1 */ + asn_DEF_TAIListforQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_TAIListforQMC_tags_1) + /sizeof(asn_DEF_TAIListforQMC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TAIListforQMC_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_TAIListforQMC_1, + 1, /* Single element */ + &asn_SPC_TAIListforQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.h new file mode 100644 index 0000000..61ffedf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAIListforQMC.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAIListforQMC_H_ +#define _TAIListforQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct TAI_Item; + +/* TAIListforQMC */ +typedef struct TAIListforQMC { + A_SEQUENCE_OF(struct TAI_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAIListforQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAIListforQMC; +extern asn_SET_OF_specifics_t asn_SPC_TAIListforQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_TAIListforQMC_1[1]; +extern asn_per_constraints_t asn_PER_type_TAIListforQMC_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAIListforQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.c new file mode 100644 index 0000000..874037c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAListforMDT.h" + +asn_per_constraints_t asn_PER_type_TAListforMDT_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_TAListforMDT_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAListforMDT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_TAListforMDT_specs_1 = { + sizeof(struct TAListforMDT), + offsetof(struct TAListforMDT, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_TAListforMDT = { + "TAListforMDT", + "TAListforMDT", + &asn_OP_SEQUENCE_OF, + asn_DEF_TAListforMDT_tags_1, + sizeof(asn_DEF_TAListforMDT_tags_1) + /sizeof(asn_DEF_TAListforMDT_tags_1[0]), /* 1 */ + asn_DEF_TAListforMDT_tags_1, /* Same as above */ + sizeof(asn_DEF_TAListforMDT_tags_1) + /sizeof(asn_DEF_TAListforMDT_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TAListforMDT_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_TAListforMDT_1, + 1, /* Single element */ + &asn_SPC_TAListforMDT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.h new file mode 100644 index 0000000..0eab84f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforMDT.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAListforMDT_H_ +#define _TAListforMDT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAC.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TAListforMDT */ +typedef struct TAListforMDT { + A_SEQUENCE_OF(TAC_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAListforMDT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAListforMDT; +extern asn_SET_OF_specifics_t asn_SPC_TAListforMDT_specs_1; +extern asn_TYPE_member_t asn_MBR_TAListforMDT_1[1]; +extern asn_per_constraints_t asn_PER_type_TAListforMDT_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAListforMDT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.c new file mode 100644 index 0000000..dc97f69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TAListforQMC.h" + +asn_per_constraints_t asn_PER_type_TAListforQMC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_TAListforQMC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_TAC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_TAListforQMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_TAListforQMC_specs_1 = { + sizeof(struct TAListforQMC), + offsetof(struct TAListforQMC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_TAListforQMC = { + "TAListforQMC", + "TAListforQMC", + &asn_OP_SEQUENCE_OF, + asn_DEF_TAListforQMC_tags_1, + sizeof(asn_DEF_TAListforQMC_tags_1) + /sizeof(asn_DEF_TAListforQMC_tags_1[0]), /* 1 */ + asn_DEF_TAListforQMC_tags_1, /* Same as above */ + sizeof(asn_DEF_TAListforQMC_tags_1) + /sizeof(asn_DEF_TAListforQMC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TAListforQMC_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_TAListforQMC_1, + 1, /* Single element */ + &asn_SPC_TAListforQMC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.h new file mode 100644 index 0000000..4c939fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TAListforQMC.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TAListforQMC_H_ +#define _TAListforQMC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TAC.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TAListforQMC */ +typedef struct TAListforQMC { + A_SEQUENCE_OF(TAC_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TAListforQMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TAListforQMC; +extern asn_SET_OF_specifics_t asn_SPC_TAListforQMC_specs_1; +extern asn_TYPE_member_t asn_MBR_TAListforQMC_1[1]; +extern asn_per_constraints_t asn_PER_type_TAListforQMC_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TAListforQMC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.c new file mode 100644 index 0000000..b75f7a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TDD-Info.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TDD_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info, eARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info, transmission_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Transmission_Bandwidth, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transmission-Bandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info, subframeAssignment), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubframeAssignment, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subframeAssignment" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Info, specialSubframe_Info), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpecialSubframe_Info, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "specialSubframe-Info" + }, + { ATF_POINTER, 1, offsetof(struct TDD_Info, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P206, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TDD_Info_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_TDD_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transmission-Bandwidth */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subframeAssignment */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* specialSubframe-Info */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_Info_specs_1 = { + sizeof(struct TDD_Info), + offsetof(struct TDD_Info, _asn_ctx), + asn_MAP_TDD_Info_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_TDD_Info_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_Info = { + "TDD-Info", + "TDD-Info", + &asn_OP_SEQUENCE, + asn_DEF_TDD_Info_tags_1, + sizeof(asn_DEF_TDD_Info_tags_1) + /sizeof(asn_DEF_TDD_Info_tags_1[0]), /* 1 */ + asn_DEF_TDD_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_TDD_Info_tags_1) + /sizeof(asn_DEF_TDD_Info_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_Info_1, + 5, /* Elements count */ + &asn_SPC_TDD_Info_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.h new file mode 100644 index 0000000..f9d9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-Info.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TDD_Info_H_ +#define _TDD_Info_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "EARFCN.h" +#include "Transmission-Bandwidth.h" +#include "SubframeAssignment.h" +#include "SpecialSubframe-Info.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TDD-Info */ +typedef struct TDD_Info { + EARFCN_t eARFCN; + Transmission_Bandwidth_t transmission_Bandwidth; + SubframeAssignment_t subframeAssignment; + SpecialSubframe_Info_t specialSubframe_Info; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TDD_Info; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_Info_specs_1; +extern asn_TYPE_member_t asn_MBR_TDD_Info_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TDD_Info_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c new file mode 100644 index 0000000..6f98d22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TDD-InfoNeighbourServedNRCell-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TDD_InfoNeighbourServedNRCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoNeighbourServedNRCell_Information, nRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRFreqInfo" + }, + { ATF_POINTER, 1, offsetof(struct TDD_InfoNeighbourServedNRCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P96, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TDD_InfoNeighbourServedNRCell_Information_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_InfoNeighbourServedNRCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoNeighbourServedNRCell_Information_specs_1 = { + sizeof(struct TDD_InfoNeighbourServedNRCell_Information), + offsetof(struct TDD_InfoNeighbourServedNRCell_Information, _asn_ctx), + asn_MAP_TDD_InfoNeighbourServedNRCell_Information_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_TDD_InfoNeighbourServedNRCell_Information_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information = { + "TDD-InfoNeighbourServedNRCell-Information", + "TDD-InfoNeighbourServedNRCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1, + sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1) + /sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */ + asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1) + /sizeof(asn_DEF_TDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_InfoNeighbourServedNRCell_Information_1, + 2, /* Elements count */ + &asn_SPC_TDD_InfoNeighbourServedNRCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h new file mode 100644 index 0000000..dd76fdc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoNeighbourServedNRCell-Information.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TDD_InfoNeighbourServedNRCell_Information_H_ +#define _TDD_InfoNeighbourServedNRCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRFreqInfo.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TDD-InfoNeighbourServedNRCell-Information */ +typedef struct TDD_InfoNeighbourServedNRCell_Information { + NRFreqInfo_t nRFreqInfo; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_InfoNeighbourServedNRCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TDD_InfoNeighbourServedNRCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoNeighbourServedNRCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_TDD_InfoNeighbourServedNRCell_Information_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TDD_InfoNeighbourServedNRCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c new file mode 100644 index 0000000..0105286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TDD-InfoServedNRCell-Information.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TDD_InfoServedNRCell_Information_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoServedNRCell_Information, nRFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFreqInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRFreqInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_InfoServedNRCell_Information, nR_TxBW), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_TxBW, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR-TxBW" + }, + { ATF_POINTER, 1, offsetof(struct TDD_InfoServedNRCell_Information, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P95, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TDD_InfoServedNRCell_Information_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_TDD_InfoServedNRCell_Information_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_InfoServedNRCell_Information_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRFreqInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nR-TxBW */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoServedNRCell_Information_specs_1 = { + sizeof(struct TDD_InfoServedNRCell_Information), + offsetof(struct TDD_InfoServedNRCell_Information, _asn_ctx), + asn_MAP_TDD_InfoServedNRCell_Information_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_TDD_InfoServedNRCell_Information_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_InfoServedNRCell_Information = { + "TDD-InfoServedNRCell-Information", + "TDD-InfoServedNRCell-Information", + &asn_OP_SEQUENCE, + asn_DEF_TDD_InfoServedNRCell_Information_tags_1, + sizeof(asn_DEF_TDD_InfoServedNRCell_Information_tags_1) + /sizeof(asn_DEF_TDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */ + asn_DEF_TDD_InfoServedNRCell_Information_tags_1, /* Same as above */ + sizeof(asn_DEF_TDD_InfoServedNRCell_Information_tags_1) + /sizeof(asn_DEF_TDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TDD_InfoServedNRCell_Information_1, + 3, /* Elements count */ + &asn_SPC_TDD_InfoServedNRCell_Information_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h new file mode 100644 index 0000000..66bbdb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TDD-InfoServedNRCell-Information.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TDD_InfoServedNRCell_Information_H_ +#define _TDD_InfoServedNRCell_Information_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NRFreqInfo.h" +#include "NR-TxBW.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TDD-InfoServedNRCell-Information */ +typedef struct TDD_InfoServedNRCell_Information { + NRFreqInfo_t nRFreqInfo; + NR_TxBW_t nR_TxBW; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_InfoServedNRCell_Information_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TDD_InfoServedNRCell_Information; +extern asn_SEQUENCE_specifics_t asn_SPC_TDD_InfoServedNRCell_Information_specs_1; +extern asn_TYPE_member_t asn_MBR_TDD_InfoServedNRCell_Information_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TDD_InfoServedNRCell_Information_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.c new file mode 100644 index 0000000..d93804b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TargetCellInUTRAN.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_TargetCellInUTRAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TargetCellInUTRAN = { + "TargetCellInUTRAN", + "TargetCellInUTRAN", + &asn_OP_OCTET_STRING, + asn_DEF_TargetCellInUTRAN_tags_1, + sizeof(asn_DEF_TargetCellInUTRAN_tags_1) + /sizeof(asn_DEF_TargetCellInUTRAN_tags_1[0]), /* 1 */ + asn_DEF_TargetCellInUTRAN_tags_1, /* Same as above */ + sizeof(asn_DEF_TargetCellInUTRAN_tags_1) + /sizeof(asn_DEF_TargetCellInUTRAN_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.h new file mode 100644 index 0000000..00f5045 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargetCellInUTRAN.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TargetCellInUTRAN_H_ +#define _TargetCellInUTRAN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TargetCellInUTRAN */ +typedef OCTET_STRING_t TargetCellInUTRAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TargetCellInUTRAN; +asn_struct_free_f TargetCellInUTRAN_free; +asn_struct_print_f TargetCellInUTRAN_print; +asn_constr_check_f TargetCellInUTRAN_constraint; +ber_type_decoder_f TargetCellInUTRAN_decode_ber; +der_type_encoder_f TargetCellInUTRAN_encode_der; +xer_type_decoder_f TargetCellInUTRAN_decode_xer; +xer_type_encoder_f TargetCellInUTRAN_encode_xer; +per_type_decoder_f TargetCellInUTRAN_decode_uper; +per_type_encoder_f TargetCellInUTRAN_encode_uper; +per_type_decoder_f TargetCellInUTRAN_decode_aper; +per_type_encoder_f TargetCellInUTRAN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TargetCellInUTRAN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c new file mode 100644 index 0000000..7aa234e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TargeteNBtoSource-eNBTransparentContainer.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TargeteNBtoSource_eNBTransparentContainer = { + "TargeteNBtoSource-eNBTransparentContainer", + "TargeteNBtoSource-eNBTransparentContainer", + &asn_OP_OCTET_STRING, + asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1, + sizeof(asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1) + /sizeof(asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1[0]), /* 1 */ + asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1, /* Same as above */ + sizeof(asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1) + /sizeof(asn_DEF_TargeteNBtoSource_eNBTransparentContainer_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h new file mode 100644 index 0000000..0f9c27f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TargeteNBtoSource-eNBTransparentContainer.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TargeteNBtoSource_eNBTransparentContainer_H_ +#define _TargeteNBtoSource_eNBTransparentContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TargeteNBtoSource-eNBTransparentContainer */ +typedef OCTET_STRING_t TargeteNBtoSource_eNBTransparentContainer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TargeteNBtoSource_eNBTransparentContainer; +asn_struct_free_f TargeteNBtoSource_eNBTransparentContainer_free; +asn_struct_print_f TargeteNBtoSource_eNBTransparentContainer_print; +asn_constr_check_f TargeteNBtoSource_eNBTransparentContainer_constraint; +ber_type_decoder_f TargeteNBtoSource_eNBTransparentContainer_decode_ber; +der_type_encoder_f TargeteNBtoSource_eNBTransparentContainer_encode_der; +xer_type_decoder_f TargeteNBtoSource_eNBTransparentContainer_decode_xer; +xer_type_encoder_f TargeteNBtoSource_eNBTransparentContainer_encode_xer; +per_type_decoder_f TargeteNBtoSource_eNBTransparentContainer_decode_uper; +per_type_encoder_f TargeteNBtoSource_eNBTransparentContainer_encode_uper; +per_type_decoder_f TargeteNBtoSource_eNBTransparentContainer_decode_aper; +per_type_encoder_f TargeteNBtoSource_eNBTransparentContainer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TargeteNBtoSource_eNBTransparentContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.c new file mode 100644 index 0000000..e5de0b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Threshold-RSRP.h" + +int +Threshold_RSRP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 97)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Threshold_RSRP_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 97 } /* (0..97) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Threshold_RSRP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Threshold_RSRP = { + "Threshold-RSRP", + "Threshold-RSRP", + &asn_OP_NativeInteger, + asn_DEF_Threshold_RSRP_tags_1, + sizeof(asn_DEF_Threshold_RSRP_tags_1) + /sizeof(asn_DEF_Threshold_RSRP_tags_1[0]), /* 1 */ + asn_DEF_Threshold_RSRP_tags_1, /* Same as above */ + sizeof(asn_DEF_Threshold_RSRP_tags_1) + /sizeof(asn_DEF_Threshold_RSRP_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Threshold_RSRP_constr_1, Threshold_RSRP_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.h new file mode 100644 index 0000000..71b59aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRP.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Threshold_RSRP_H_ +#define _Threshold_RSRP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Threshold-RSRP */ +typedef long Threshold_RSRP_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Threshold_RSRP_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Threshold_RSRP; +asn_struct_free_f Threshold_RSRP_free; +asn_struct_print_f Threshold_RSRP_print; +asn_constr_check_f Threshold_RSRP_constraint; +ber_type_decoder_f Threshold_RSRP_decode_ber; +der_type_encoder_f Threshold_RSRP_encode_der; +xer_type_decoder_f Threshold_RSRP_decode_xer; +xer_type_encoder_f Threshold_RSRP_encode_xer; +per_type_decoder_f Threshold_RSRP_decode_uper; +per_type_encoder_f Threshold_RSRP_encode_uper; +per_type_decoder_f Threshold_RSRP_decode_aper; +per_type_encoder_f Threshold_RSRP_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Threshold_RSRP_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.c new file mode 100644 index 0000000..ee0ba49 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Threshold-RSRQ.h" + +int +Threshold_RSRQ_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 34)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Threshold_RSRQ_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, 0, 34 } /* (0..34) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Threshold_RSRQ_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Threshold_RSRQ = { + "Threshold-RSRQ", + "Threshold-RSRQ", + &asn_OP_NativeInteger, + asn_DEF_Threshold_RSRQ_tags_1, + sizeof(asn_DEF_Threshold_RSRQ_tags_1) + /sizeof(asn_DEF_Threshold_RSRQ_tags_1[0]), /* 1 */ + asn_DEF_Threshold_RSRQ_tags_1, /* Same as above */ + sizeof(asn_DEF_Threshold_RSRQ_tags_1) + /sizeof(asn_DEF_Threshold_RSRQ_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Threshold_RSRQ_constr_1, Threshold_RSRQ_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.h new file mode 100644 index 0000000..93da48f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Threshold-RSRQ.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Threshold_RSRQ_H_ +#define _Threshold_RSRQ_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Threshold-RSRQ */ +typedef long Threshold_RSRQ_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Threshold_RSRQ_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Threshold_RSRQ; +asn_struct_free_f Threshold_RSRQ_free; +asn_struct_print_f Threshold_RSRQ_print; +asn_constr_check_f Threshold_RSRQ_constraint; +ber_type_decoder_f Threshold_RSRQ_decode_ber; +der_type_encoder_f Threshold_RSRQ_encode_der; +xer_type_decoder_f Threshold_RSRQ_decode_xer; +xer_type_encoder_f Threshold_RSRQ_encode_xer; +per_type_decoder_f Threshold_RSRQ_decode_uper; +per_type_encoder_f Threshold_RSRQ_encode_uper; +per_type_decoder_f Threshold_RSRQ_decode_aper; +per_type_encoder_f Threshold_RSRQ_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Threshold_RSRQ_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c new file mode 100644 index 0000000..80f2847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Time-UE-StayedInCell-EnhancedGranularity.h" + +int +Time_UE_StayedInCell_EnhancedGranularity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 40950)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Time_UE_StayedInCell_EnhancedGranularity_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 40950 } /* (0..40950) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Time_UE_StayedInCell_EnhancedGranularity = { + "Time-UE-StayedInCell-EnhancedGranularity", + "Time-UE-StayedInCell-EnhancedGranularity", + &asn_OP_NativeInteger, + asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1, + sizeof(asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1) + /sizeof(asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1[0]), /* 1 */ + asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1, /* Same as above */ + sizeof(asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1) + /sizeof(asn_DEF_Time_UE_StayedInCell_EnhancedGranularity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Time_UE_StayedInCell_EnhancedGranularity_constr_1, Time_UE_StayedInCell_EnhancedGranularity_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h new file mode 100644 index 0000000..4425e58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell-EnhancedGranularity.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Time_UE_StayedInCell_EnhancedGranularity_H_ +#define _Time_UE_StayedInCell_EnhancedGranularity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Time-UE-StayedInCell-EnhancedGranularity */ +typedef long Time_UE_StayedInCell_EnhancedGranularity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Time_UE_StayedInCell_EnhancedGranularity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Time_UE_StayedInCell_EnhancedGranularity; +asn_struct_free_f Time_UE_StayedInCell_EnhancedGranularity_free; +asn_struct_print_f Time_UE_StayedInCell_EnhancedGranularity_print; +asn_constr_check_f Time_UE_StayedInCell_EnhancedGranularity_constraint; +ber_type_decoder_f Time_UE_StayedInCell_EnhancedGranularity_decode_ber; +der_type_encoder_f Time_UE_StayedInCell_EnhancedGranularity_encode_der; +xer_type_decoder_f Time_UE_StayedInCell_EnhancedGranularity_decode_xer; +xer_type_encoder_f Time_UE_StayedInCell_EnhancedGranularity_encode_xer; +per_type_decoder_f Time_UE_StayedInCell_EnhancedGranularity_decode_uper; +per_type_encoder_f Time_UE_StayedInCell_EnhancedGranularity_encode_uper; +per_type_decoder_f Time_UE_StayedInCell_EnhancedGranularity_decode_aper; +per_type_encoder_f Time_UE_StayedInCell_EnhancedGranularity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Time_UE_StayedInCell_EnhancedGranularity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.c new file mode 100644 index 0000000..8d03086 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Time-UE-StayedInCell.h" + +int +Time_UE_StayedInCell_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Time_UE_StayedInCell_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Time_UE_StayedInCell_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Time_UE_StayedInCell = { + "Time-UE-StayedInCell", + "Time-UE-StayedInCell", + &asn_OP_NativeInteger, + asn_DEF_Time_UE_StayedInCell_tags_1, + sizeof(asn_DEF_Time_UE_StayedInCell_tags_1) + /sizeof(asn_DEF_Time_UE_StayedInCell_tags_1[0]), /* 1 */ + asn_DEF_Time_UE_StayedInCell_tags_1, /* Same as above */ + sizeof(asn_DEF_Time_UE_StayedInCell_tags_1) + /sizeof(asn_DEF_Time_UE_StayedInCell_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Time_UE_StayedInCell_constr_1, Time_UE_StayedInCell_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.h new file mode 100644 index 0000000..aeff8e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Time-UE-StayedInCell.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Time_UE_StayedInCell_H_ +#define _Time_UE_StayedInCell_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Time-UE-StayedInCell */ +typedef long Time_UE_StayedInCell_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Time_UE_StayedInCell_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Time_UE_StayedInCell; +asn_struct_free_f Time_UE_StayedInCell_free; +asn_struct_print_f Time_UE_StayedInCell_print; +asn_constr_check_f Time_UE_StayedInCell_constraint; +ber_type_decoder_f Time_UE_StayedInCell_decode_ber; +der_type_encoder_f Time_UE_StayedInCell_encode_der; +xer_type_decoder_f Time_UE_StayedInCell_decode_xer; +xer_type_encoder_f Time_UE_StayedInCell_encode_xer; +per_type_decoder_f Time_UE_StayedInCell_decode_uper; +per_type_encoder_f Time_UE_StayedInCell_encode_uper; +per_type_decoder_f Time_UE_StayedInCell_decode_aper; +per_type_encoder_f Time_UE_StayedInCell_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Time_UE_StayedInCell_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.c new file mode 100644 index 0000000..c4df0a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TimeStamp.h" + +int +TimeStamp_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TimeStamp_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TimeStamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeStamp = { + "TimeStamp", + "TimeStamp", + &asn_OP_OCTET_STRING, + asn_DEF_TimeStamp_tags_1, + sizeof(asn_DEF_TimeStamp_tags_1) + /sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */ + asn_DEF_TimeStamp_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeStamp_tags_1) + /sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeStamp_constr_1, TimeStamp_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.h new file mode 100644 index 0000000..26bed14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeStamp.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TimeStamp_H_ +#define _TimeStamp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TimeStamp */ +typedef OCTET_STRING_t TimeStamp_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TimeStamp_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TimeStamp; +asn_struct_free_f TimeStamp_free; +asn_struct_print_f TimeStamp_print; +asn_constr_check_f TimeStamp_constraint; +ber_type_decoder_f TimeStamp_decode_ber; +der_type_encoder_f TimeStamp_encode_der; +xer_type_decoder_f TimeStamp_decode_xer; +xer_type_encoder_f TimeStamp_encode_xer; +per_type_decoder_f TimeStamp_decode_uper; +per_type_encoder_f TimeStamp_encode_uper; +per_type_decoder_f TimeStamp_decode_aper; +per_type_encoder_f TimeStamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeStamp_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.c new file mode 100644 index 0000000..181619b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.h new file mode 100644 index 0000000..8f81ea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TimeToWait.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.c new file mode 100644 index 0000000..3b811c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TraceActivation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TraceActivation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation, eUTRANTraceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EUTRANTraceID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRANTraceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation, interfacesToTrace), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfacesToTrace, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfacesToTrace" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation, traceDepth), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TraceDepth, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "traceDepth" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceActivation, traceCollectionEntityIPAddress), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TraceCollectionEntityIPAddress, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "traceCollectionEntityIPAddress" + }, + { ATF_POINTER, 1, offsetof(struct TraceActivation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P207, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TraceActivation_oms_1[] = { 4 }; +static const ber_tlv_tag_t asn_DEF_TraceActivation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TraceActivation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eUTRANTraceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfacesToTrace */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* traceDepth */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* traceCollectionEntityIPAddress */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TraceActivation_specs_1 = { + sizeof(struct TraceActivation), + offsetof(struct TraceActivation, _asn_ctx), + asn_MAP_TraceActivation_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_TraceActivation_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TraceActivation = { + "TraceActivation", + "TraceActivation", + &asn_OP_SEQUENCE, + asn_DEF_TraceActivation_tags_1, + sizeof(asn_DEF_TraceActivation_tags_1) + /sizeof(asn_DEF_TraceActivation_tags_1[0]), /* 1 */ + asn_DEF_TraceActivation_tags_1, /* Same as above */ + sizeof(asn_DEF_TraceActivation_tags_1) + /sizeof(asn_DEF_TraceActivation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TraceActivation_1, + 5, /* Elements count */ + &asn_SPC_TraceActivation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.h new file mode 100644 index 0000000..789a9fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceActivation.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TraceActivation_H_ +#define _TraceActivation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "EUTRANTraceID.h" +#include "InterfacesToTrace.h" +#include "TraceDepth.h" +#include "TraceCollectionEntityIPAddress.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TraceActivation */ +typedef struct TraceActivation { + EUTRANTraceID_t eUTRANTraceID; + InterfacesToTrace_t interfacesToTrace; + TraceDepth_t traceDepth; + TraceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TraceActivation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TraceActivation; +extern asn_SEQUENCE_specifics_t asn_SPC_TraceActivation_specs_1; +extern asn_TYPE_member_t asn_MBR_TraceActivation_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TraceActivation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c new file mode 100644 index 0000000..8a3e531 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TraceCollectionEntityIPAddress.h" + +int +TraceCollectionEntityIPAddress_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 160)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TraceCollectionEntityIPAddress_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 160 } /* (SIZE(1..160,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TraceCollectionEntityIPAddress_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TraceCollectionEntityIPAddress = { + "TraceCollectionEntityIPAddress", + "TraceCollectionEntityIPAddress", + &asn_OP_BIT_STRING, + asn_DEF_TraceCollectionEntityIPAddress_tags_1, + sizeof(asn_DEF_TraceCollectionEntityIPAddress_tags_1) + /sizeof(asn_DEF_TraceCollectionEntityIPAddress_tags_1[0]), /* 1 */ + asn_DEF_TraceCollectionEntityIPAddress_tags_1, /* Same as above */ + sizeof(asn_DEF_TraceCollectionEntityIPAddress_tags_1) + /sizeof(asn_DEF_TraceCollectionEntityIPAddress_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TraceCollectionEntityIPAddress_constr_1, TraceCollectionEntityIPAddress_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h new file mode 100644 index 0000000..d98f29b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceCollectionEntityIPAddress.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TraceCollectionEntityIPAddress_H_ +#define _TraceCollectionEntityIPAddress_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TraceCollectionEntityIPAddress */ +typedef BIT_STRING_t TraceCollectionEntityIPAddress_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TraceCollectionEntityIPAddress_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TraceCollectionEntityIPAddress; +asn_struct_free_f TraceCollectionEntityIPAddress_free; +asn_struct_print_f TraceCollectionEntityIPAddress_print; +asn_constr_check_f TraceCollectionEntityIPAddress_constraint; +ber_type_decoder_f TraceCollectionEntityIPAddress_decode_ber; +der_type_encoder_f TraceCollectionEntityIPAddress_encode_der; +xer_type_decoder_f TraceCollectionEntityIPAddress_decode_xer; +xer_type_encoder_f TraceCollectionEntityIPAddress_encode_xer; +per_type_decoder_f TraceCollectionEntityIPAddress_decode_uper; +per_type_encoder_f TraceCollectionEntityIPAddress_encode_uper; +per_type_decoder_f TraceCollectionEntityIPAddress_decode_aper; +per_type_encoder_f TraceCollectionEntityIPAddress_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TraceCollectionEntityIPAddress_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.c new file mode 100644 index 0000000..bb0829a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TraceDepth.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TraceDepth_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TraceDepth_value2enum_1[] = { + { 0, 7, "minimum" }, + { 1, 6, "medium" }, + { 2, 7, "maximum" }, + { 3, 37, "minimumWithoutVendorSpecificExtension" }, + { 4, 36, "mediumWithoutVendorSpecificExtension" }, + { 5, 37, "maximumWithoutVendorSpecificExtension" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TraceDepth_enum2value_1[] = { + 2, /* maximum(2) */ + 5, /* maximumWithoutVendorSpecificExtension(5) */ + 1, /* medium(1) */ + 4, /* mediumWithoutVendorSpecificExtension(4) */ + 0, /* minimum(0) */ + 3 /* minimumWithoutVendorSpecificExtension(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TraceDepth_specs_1 = { + asn_MAP_TraceDepth_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TraceDepth_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TraceDepth_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TraceDepth = { + "TraceDepth", + "TraceDepth", + &asn_OP_NativeEnumerated, + asn_DEF_TraceDepth_tags_1, + sizeof(asn_DEF_TraceDepth_tags_1) + /sizeof(asn_DEF_TraceDepth_tags_1[0]), /* 1 */ + asn_DEF_TraceDepth_tags_1, /* Same as above */ + sizeof(asn_DEF_TraceDepth_tags_1) + /sizeof(asn_DEF_TraceDepth_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TraceDepth_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TraceDepth_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.h new file mode 100644 index 0000000..b1c4337 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TraceDepth.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TraceDepth_H_ +#define _TraceDepth_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TraceDepth { + TraceDepth_minimum = 0, + TraceDepth_medium = 1, + TraceDepth_maximum = 2, + TraceDepth_minimumWithoutVendorSpecificExtension = 3, + TraceDepth_mediumWithoutVendorSpecificExtension = 4, + TraceDepth_maximumWithoutVendorSpecificExtension = 5 + /* + * Enumeration is extensible + */ +} e_TraceDepth; + +/* TraceDepth */ +typedef long TraceDepth_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TraceDepth_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TraceDepth; +extern const asn_INTEGER_specifics_t asn_SPC_TraceDepth_specs_1; +asn_struct_free_f TraceDepth_free; +asn_struct_print_f TraceDepth_print; +asn_constr_check_f TraceDepth_constraint; +ber_type_decoder_f TraceDepth_decode_ber; +der_type_encoder_f TraceDepth_encode_der; +xer_type_decoder_f TraceDepth_decode_xer; +xer_type_encoder_f TraceDepth_encode_xer; +per_type_decoder_f TraceDepth_decode_uper; +per_type_encoder_f TraceDepth_encode_uper; +per_type_decoder_f TraceDepth_decode_aper; +per_type_encoder_f TraceDepth_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TraceDepth_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.c new file mode 100644 index 0000000..cd27f74 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.c @@ -0,0 +1,83 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "Transmission-Bandwidth.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Transmission_Bandwidth_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Transmission_Bandwidth_value2enum_1[] = { + { 0, 3, "bw6" }, + { 1, 4, "bw15" }, + { 2, 4, "bw25" }, + { 3, 4, "bw50" }, + { 4, 4, "bw75" }, + { 5, 5, "bw100" }, + { 6, 3, "bw1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_Transmission_Bandwidth_enum2value_1[] = { + 6, /* bw1(6) */ + 5, /* bw100(5) */ + 1, /* bw15(1) */ + 2, /* bw25(2) */ + 3, /* bw50(3) */ + 0, /* bw6(0) */ + 4 /* bw75(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_Transmission_Bandwidth_specs_1 = { + asn_MAP_Transmission_Bandwidth_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Transmission_Bandwidth_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Transmission_Bandwidth_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Transmission_Bandwidth = { + "Transmission-Bandwidth", + "Transmission-Bandwidth", + &asn_OP_NativeEnumerated, + asn_DEF_Transmission_Bandwidth_tags_1, + sizeof(asn_DEF_Transmission_Bandwidth_tags_1) + /sizeof(asn_DEF_Transmission_Bandwidth_tags_1[0]), /* 1 */ + asn_DEF_Transmission_Bandwidth_tags_1, /* Same as above */ + sizeof(asn_DEF_Transmission_Bandwidth_tags_1) + /sizeof(asn_DEF_Transmission_Bandwidth_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Transmission_Bandwidth_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Transmission_Bandwidth_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.h new file mode 100644 index 0000000..60e66c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/Transmission-Bandwidth.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _Transmission_Bandwidth_H_ +#define _Transmission_Bandwidth_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Transmission_Bandwidth { + Transmission_Bandwidth_bw6 = 0, + Transmission_Bandwidth_bw15 = 1, + Transmission_Bandwidth_bw25 = 2, + Transmission_Bandwidth_bw50 = 3, + Transmission_Bandwidth_bw75 = 4, + Transmission_Bandwidth_bw100 = 5, + /* + * Enumeration is extensible + */ + Transmission_Bandwidth_bw1 = 6 +} e_Transmission_Bandwidth; + +/* Transmission-Bandwidth */ +typedef long Transmission_Bandwidth_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Transmission_Bandwidth_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Transmission_Bandwidth; +extern const asn_INTEGER_specifics_t asn_SPC_Transmission_Bandwidth_specs_1; +asn_struct_free_f Transmission_Bandwidth_free; +asn_struct_print_f Transmission_Bandwidth_print; +asn_constr_check_f Transmission_Bandwidth_constraint; +ber_type_decoder_f Transmission_Bandwidth_decode_ber; +der_type_encoder_f Transmission_Bandwidth_encode_der; +xer_type_decoder_f Transmission_Bandwidth_decode_xer; +xer_type_encoder_f Transmission_Bandwidth_encode_xer; +per_type_decoder_f Transmission_Bandwidth_decode_uper; +per_type_encoder_f Transmission_Bandwidth_encode_uper; +per_type_decoder_f Transmission_Bandwidth_decode_aper; +per_type_encoder_f Transmission_Bandwidth_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Transmission_Bandwidth_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.c new file mode 100644 index 0000000..2686a29 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TransportLayerAddress.h" + +int +TransportLayerAddress_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 160)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TransportLayerAddress_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 160 } /* (SIZE(1..160,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TransportLayerAddress_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TransportLayerAddress = { + "TransportLayerAddress", + "TransportLayerAddress", + &asn_OP_BIT_STRING, + asn_DEF_TransportLayerAddress_tags_1, + sizeof(asn_DEF_TransportLayerAddress_tags_1) + /sizeof(asn_DEF_TransportLayerAddress_tags_1[0]), /* 1 */ + asn_DEF_TransportLayerAddress_tags_1, /* Same as above */ + sizeof(asn_DEF_TransportLayerAddress_tags_1) + /sizeof(asn_DEF_TransportLayerAddress_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TransportLayerAddress_constr_1, TransportLayerAddress_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.h new file mode 100644 index 0000000..f7bcd0e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TransportLayerAddress.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TransportLayerAddress_H_ +#define _TransportLayerAddress_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TransportLayerAddress */ +typedef BIT_STRING_t TransportLayerAddress_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TransportLayerAddress_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TransportLayerAddress; +asn_struct_free_f TransportLayerAddress_free; +asn_struct_print_f TransportLayerAddress_print; +asn_constr_check_f TransportLayerAddress_constraint; +ber_type_decoder_f TransportLayerAddress_decode_ber; +der_type_encoder_f TransportLayerAddress_encode_der; +xer_type_decoder_f TransportLayerAddress_decode_xer; +xer_type_encoder_f TransportLayerAddress_encode_xer; +per_type_decoder_f TransportLayerAddress_decode_uper; +per_type_encoder_f TransportLayerAddress_encode_uper; +per_type_decoder_f TransportLayerAddress_decode_aper; +per_type_encoder_f TransportLayerAddress_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TransportLayerAddress_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..032b7c5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 20, "unsuccessful-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessful-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..84092fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TriggeringMessage.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-CommonDataTypes" + * found in "../../asnFiles/X2AP-CommonDataTypes.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessful_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.c new file mode 100644 index 0000000..a699760 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TunnelInformation.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_TunnelInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TunnelInformation, transportLayerAddress), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TransportLayerAddress, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transportLayerAddress" + }, + { ATF_POINTER, 2, offsetof(struct TunnelInformation, uDP_Port_Number), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Port_Number, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uDP-Port-Number" + }, + { ATF_POINTER, 1, offsetof(struct TunnelInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P208, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_TunnelInformation_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_TunnelInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TunnelInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uDP-Port-Number */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TunnelInformation_specs_1 = { + sizeof(struct TunnelInformation), + offsetof(struct TunnelInformation, _asn_ctx), + asn_MAP_TunnelInformation_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_TunnelInformation_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TunnelInformation = { + "TunnelInformation", + "TunnelInformation", + &asn_OP_SEQUENCE, + asn_DEF_TunnelInformation_tags_1, + sizeof(asn_DEF_TunnelInformation_tags_1) + /sizeof(asn_DEF_TunnelInformation_tags_1[0]), /* 1 */ + asn_DEF_TunnelInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_TunnelInformation_tags_1) + /sizeof(asn_DEF_TunnelInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TunnelInformation_1, + 3, /* Elements count */ + &asn_SPC_TunnelInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.h new file mode 100644 index 0000000..d950390 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TunnelInformation.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TunnelInformation_H_ +#define _TunnelInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TransportLayerAddress.h" +#include "Port-Number.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* TunnelInformation */ +typedef struct TunnelInformation { + TransportLayerAddress_t transportLayerAddress; + Port_Number_t *uDP_Port_Number; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TunnelInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TunnelInformation; +extern asn_SEQUENCE_specifics_t asn_SPC_TunnelInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_TunnelInformation_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TunnelInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.c new file mode 100644 index 0000000..b846eea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.h new file mode 100644 index 0000000..e700f58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfError.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.c new file mode 100644 index 0000000..47f27a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "TypeOfMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfMessage_value2enum_1[] = { + { 0, 7, "nothing" }, + { 1, 18, "initiating-message" }, + { 2, 18, "successful-outcome" }, + { 3, 20, "unsuccessful-outcome" } +}; +static const unsigned int asn_MAP_TypeOfMessage_enum2value_1[] = { + 1, /* initiating-message(1) */ + 0, /* nothing(0) */ + 2, /* successful-outcome(2) */ + 3 /* unsuccessful-outcome(3) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfMessage_specs_1 = { + asn_MAP_TypeOfMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfMessage_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfMessage = { + "TypeOfMessage", + "TypeOfMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfMessage_tags_1, + sizeof(asn_DEF_TypeOfMessage_tags_1) + /sizeof(asn_DEF_TypeOfMessage_tags_1[0]), /* 1 */ + asn_DEF_TypeOfMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfMessage_tags_1) + /sizeof(asn_DEF_TypeOfMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.h new file mode 100644 index 0000000..9543bed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/TypeOfMessage.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-gNB-X2-IEs" + * found in "../../asnFiles/e2sm-gNB-X2-release-1-v041.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _TypeOfMessage_H_ +#define _TypeOfMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfMessage { + TypeOfMessage_nothing = 0, + TypeOfMessage_initiating_message = 1, + TypeOfMessage_successful_outcome = 2, + TypeOfMessage_unsuccessful_outcome = 3 +} e_TypeOfMessage; + +/* TypeOfMessage */ +typedef long TypeOfMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfMessage_specs_1; +asn_struct_free_f TypeOfMessage_free; +asn_struct_print_f TypeOfMessage_print; +asn_constr_check_f TypeOfMessage_constraint; +ber_type_decoder_f TypeOfMessage_decode_ber; +der_type_encoder_f TypeOfMessage_encode_der; +xer_type_decoder_f TypeOfMessage_decode_xer; +xer_type_encoder_f TypeOfMessage_encode_xer; +per_type_decoder_f TypeOfMessage_decode_uper; +per_type_encoder_f TypeOfMessage_encode_uper; +per_type_decoder_f TypeOfMessage_decode_aper; +per_type_encoder_f TypeOfMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c new file mode 100644 index 0000000..3971b12 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.c @@ -0,0 +1,136 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextInformation-SgNBModReq.h" + +#include "NRUESecurityCapabilities.h" +#include "UEAggregateMaximumBitRate.h" +#include "E-RABs-ToBeAdded-SgNBModReq-List.h" +#include "E-RABs-ToBeModified-SgNBModReq-List.h" +#include "E-RABs-ToBeReleased-SgNBModReq-List.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextInformation_SgNBModReq_1[] = { + { ATF_POINTER, 7, offsetof(struct UE_ContextInformation_SgNBModReq, nRUE_SecurityCapabilities), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRUESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRUE-SecurityCapabilities" + }, + { ATF_POINTER, 6, offsetof(struct UE_ContextInformation_SgNBModReq, sgNB_SecurityKey), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SgNBSecurityKey, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-SecurityKey" + }, + { ATF_POINTER, 5, offsetof(struct UE_ContextInformation_SgNBModReq, sgNBUEAggregateMaximumBitRate), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNBUEAggregateMaximumBitRate" + }, + { ATF_POINTER, 4, offsetof(struct UE_ContextInformation_SgNBModReq, e_RABs_ToBeAdded), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_SgNBModReq_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeAdded" + }, + { ATF_POINTER, 3, offsetof(struct UE_ContextInformation_SgNBModReq, e_RABs_ToBeModified), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_SgNBModReq_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeModified" + }, + { ATF_POINTER, 2, offsetof(struct UE_ContextInformation_SgNBModReq, e_RABs_ToBeReleased), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_SgNBModReq_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeReleased" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformation_SgNBModReq, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P52, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextInformation_SgNBModReq_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformation_SgNBModReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformation_SgNBModReq_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRUE-SecurityCapabilities */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-SecurityKey */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNBUEAggregateMaximumBitRate */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RABs-ToBeAdded */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* e-RABs-ToBeModified */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeReleased */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformation_SgNBModReq_specs_1 = { + sizeof(struct UE_ContextInformation_SgNBModReq), + offsetof(struct UE_ContextInformation_SgNBModReq, _asn_ctx), + asn_MAP_UE_ContextInformation_SgNBModReq_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_UE_ContextInformation_SgNBModReq_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation_SgNBModReq = { + "UE-ContextInformation-SgNBModReq", + "UE-ContextInformation-SgNBModReq", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformation_SgNBModReq_tags_1, + sizeof(asn_DEF_UE_ContextInformation_SgNBModReq_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_SgNBModReq_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextInformation_SgNBModReq_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformation_SgNBModReq_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_SgNBModReq_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformation_SgNBModReq_1, + 7, /* Elements count */ + &asn_SPC_UE_ContextInformation_SgNBModReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h new file mode 100644 index 0000000..1d9b3fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation-SgNBModReq.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextInformation_SgNBModReq_H_ +#define _UE_ContextInformation_SgNBModReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SgNBSecurityKey.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRUESecurityCapabilities; +struct UEAggregateMaximumBitRate; +struct E_RABs_ToBeAdded_SgNBModReq_List; +struct E_RABs_ToBeModified_SgNBModReq_List; +struct E_RABs_ToBeReleased_SgNBModReq_List; +struct ProtocolExtensionContainer; + +/* UE-ContextInformation-SgNBModReq */ +typedef struct UE_ContextInformation_SgNBModReq { + struct NRUESecurityCapabilities *nRUE_SecurityCapabilities; /* OPTIONAL */ + SgNBSecurityKey_t *sgNB_SecurityKey; /* OPTIONAL */ + struct UEAggregateMaximumBitRate *sgNBUEAggregateMaximumBitRate; /* OPTIONAL */ + struct E_RABs_ToBeAdded_SgNBModReq_List *e_RABs_ToBeAdded; /* OPTIONAL */ + struct E_RABs_ToBeModified_SgNBModReq_List *e_RABs_ToBeModified; /* OPTIONAL */ + struct E_RABs_ToBeReleased_SgNBModReq_List *e_RABs_ToBeReleased; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformation_SgNBModReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation_SgNBModReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextInformation_SgNBModReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.c new file mode 100644 index 0000000..d33b3e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.c @@ -0,0 +1,163 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextInformation.h" + +#include "HandoverRestrictionList.h" +#include "LocationReportingInformation.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, mME_UE_S1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_S1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-UE-S1AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, uESecurityCapabilities), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uESecurityCapabilities" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, aS_SecurityInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AS_SecurityInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aS-SecurityInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, uEaggregateMaximumBitRate), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uEaggregateMaximumBitRate" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformation, subscriberProfileIDforRFP), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubscriberProfileIDforRFP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subscriberProfileIDforRFP" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, e_RABs_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeSetup-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformation, rRC_Context), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_Context, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rRC-Context" + }, + { ATF_POINTER, 3, offsetof(struct UE_ContextInformation, handoverRestrictionList), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverRestrictionList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "handoverRestrictionList" + }, + { ATF_POINTER, 2, offsetof(struct UE_ContextInformation, locationReportingInformation), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LocationReportingInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "locationReportingInformation" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformation, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextInformation_oms_1[] = { 4, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uESecurityCapabilities */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aS-SecurityInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uEaggregateMaximumBitRate */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* subscriberProfileIDforRFP */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeSetup-List */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rRC-Context */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* handoverRestrictionList */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* locationReportingInformation */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformation_specs_1 = { + sizeof(struct UE_ContextInformation), + offsetof(struct UE_ContextInformation, _asn_ctx), + asn_MAP_UE_ContextInformation_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_UE_ContextInformation_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation = { + "UE-ContextInformation", + "UE-ContextInformation", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformation_tags_1, + sizeof(asn_DEF_UE_ContextInformation_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformation_tags_1) + /sizeof(asn_DEF_UE_ContextInformation_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformation_1, + 10, /* Elements count */ + &asn_SPC_UE_ContextInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.h new file mode 100644 index 0000000..f034257 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformation.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextInformation_H_ +#define _UE_ContextInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UE-S1AP-ID.h" +#include "UESecurityCapabilities.h" +#include "AS-SecurityInformation.h" +#include "UEAggregateMaximumBitRate.h" +#include "SubscriberProfileIDforRFP.h" +#include "E-RABs-ToBeSetup-List.h" +#include "RRC-Context.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HandoverRestrictionList; +struct LocationReportingInformation; +struct ProtocolExtensionContainer; + +/* UE-ContextInformation */ +typedef struct UE_ContextInformation { + UE_S1AP_ID_t mME_UE_S1AP_ID; + UESecurityCapabilities_t uESecurityCapabilities; + AS_SecurityInformation_t aS_SecurityInformation; + UEAggregateMaximumBitRate_t uEaggregateMaximumBitRate; + SubscriberProfileIDforRFP_t *subscriberProfileIDforRFP; /* OPTIONAL */ + E_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; + RRC_Context_t rRC_Context; + struct HandoverRestrictionList *handoverRestrictionList; /* OPTIONAL */ + struct LocationReportingInformation *locationReportingInformation; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c new file mode 100644 index 0000000..dd74ab1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.c @@ -0,0 +1,184 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextInformationRetrieve.h" + +#include "HandoverRestrictionList.h" +#include "LocationReportingInformation.h" +#include "MDTPLMNList.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextInformationRetrieve_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, mME_UE_S1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_S1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-UE-S1AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, uESecurityCapabilities), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uESecurityCapabilities" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, aS_SecurityInformation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AS_SecurityInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aS-SecurityInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, uEaggregateMaximumBitRate), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uEaggregateMaximumBitRate" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformationRetrieve, subscriberProfileIDforRFP), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SubscriberProfileIDforRFP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subscriberProfileIDforRFP" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, e_RABs_ToBeSetup_ListRetrieve), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeSetup_ListRetrieve, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeSetup-ListRetrieve" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextInformationRetrieve, rRC_Context), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_Context, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rRC-Context" + }, + { ATF_POINTER, 5, offsetof(struct UE_ContextInformationRetrieve, handoverRestrictionList), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverRestrictionList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "handoverRestrictionList" + }, + { ATF_POINTER, 4, offsetof(struct UE_ContextInformationRetrieve, locationReportingInformation), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LocationReportingInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "locationReportingInformation" + }, + { ATF_POINTER, 3, offsetof(struct UE_ContextInformationRetrieve, managBasedMDTallowed), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ManagementBasedMDTallowed, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "managBasedMDTallowed" + }, + { ATF_POINTER, 2, offsetof(struct UE_ContextInformationRetrieve, managBasedMDTPLMNList), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MDTPLMNList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "managBasedMDTPLMNList" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformationRetrieve, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P42, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextInformationRetrieve_oms_1[] = { 4, 7, 8, 9, 10, 11 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformationRetrieve_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformationRetrieve_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uESecurityCapabilities */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aS-SecurityInformation */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uEaggregateMaximumBitRate */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* subscriberProfileIDforRFP */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeSetup-ListRetrieve */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rRC-Context */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* handoverRestrictionList */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* locationReportingInformation */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* managBasedMDTallowed */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* managBasedMDTPLMNList */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationRetrieve_specs_1 = { + sizeof(struct UE_ContextInformationRetrieve), + offsetof(struct UE_ContextInformationRetrieve, _asn_ctx), + asn_MAP_UE_ContextInformationRetrieve_tag2el_1, + 12, /* Count of tags in the map */ + asn_MAP_UE_ContextInformationRetrieve_oms_1, /* Optional members */ + 6, 0, /* Root/Additions */ + 12, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationRetrieve = { + "UE-ContextInformationRetrieve", + "UE-ContextInformationRetrieve", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformationRetrieve_tags_1, + sizeof(asn_DEF_UE_ContextInformationRetrieve_tags_1) + /sizeof(asn_DEF_UE_ContextInformationRetrieve_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextInformationRetrieve_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformationRetrieve_tags_1) + /sizeof(asn_DEF_UE_ContextInformationRetrieve_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformationRetrieve_1, + 12, /* Elements count */ + &asn_SPC_UE_ContextInformationRetrieve_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h new file mode 100644 index 0000000..56fc971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationRetrieve.h @@ -0,0 +1,84 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextInformationRetrieve_H_ +#define _UE_ContextInformationRetrieve_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UE-S1AP-ID.h" +#include "UESecurityCapabilities.h" +#include "AS-SecurityInformation.h" +#include "UEAggregateMaximumBitRate.h" +#include "SubscriberProfileIDforRFP.h" +#include "E-RABs-ToBeSetup-ListRetrieve.h" +#include "RRC-Context.h" +#include "ManagementBasedMDTallowed.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HandoverRestrictionList; +struct LocationReportingInformation; +struct MDTPLMNList; +struct ProtocolExtensionContainer; + +/* UE-ContextInformationRetrieve */ +typedef struct UE_ContextInformationRetrieve { + UE_S1AP_ID_t mME_UE_S1AP_ID; + UESecurityCapabilities_t uESecurityCapabilities; + AS_SecurityInformation_t aS_SecurityInformation; + UEAggregateMaximumBitRate_t uEaggregateMaximumBitRate; + SubscriberProfileIDforRFP_t *subscriberProfileIDforRFP; /* OPTIONAL */ + E_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; + RRC_Context_t rRC_Context; + struct HandoverRestrictionList *handoverRestrictionList; /* OPTIONAL */ + struct LocationReportingInformation *locationReportingInformation; /* OPTIONAL */ + ManagementBasedMDTallowed_t *managBasedMDTallowed; /* OPTIONAL */ + struct MDTPLMNList *managBasedMDTPLMNList; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformationRetrieve_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationRetrieve; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextInformationRetrieve_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c new file mode 100644 index 0000000..f11cf44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.c @@ -0,0 +1,136 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextInformationSeNBModReq.h" + +#include "UESecurityCapabilities.h" +#include "UEAggregateMaximumBitRate.h" +#include "E-RABs-ToBeAdded-List-ModReq.h" +#include "E-RABs-ToBeModified-List-ModReq.h" +#include "E-RABs-ToBeReleased-List-ModReq.h" +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextInformationSeNBModReq_1[] = { + { ATF_POINTER, 7, offsetof(struct UE_ContextInformationSeNBModReq, uE_SecurityCapabilities), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UESecurityCapabilities, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uE-SecurityCapabilities" + }, + { ATF_POINTER, 6, offsetof(struct UE_ContextInformationSeNBModReq, seNB_SecurityKey), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SeNBSecurityKey, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-SecurityKey" + }, + { ATF_POINTER, 5, offsetof(struct UE_ContextInformationSeNBModReq, seNBUEAggregateMaximumBitRate), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEAggregateMaximumBitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNBUEAggregateMaximumBitRate" + }, + { ATF_POINTER, 4, offsetof(struct UE_ContextInformationSeNBModReq, e_RABs_ToBeAdded), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeAdded_List_ModReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeAdded" + }, + { ATF_POINTER, 3, offsetof(struct UE_ContextInformationSeNBModReq, e_RABs_ToBeModified), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeModified_List_ModReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeModified" + }, + { ATF_POINTER, 2, offsetof(struct UE_ContextInformationSeNBModReq, e_RABs_ToBeReleased), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_RABs_ToBeReleased_List_ModReq, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e-RABs-ToBeReleased" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextInformationSeNBModReq, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P23, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextInformationSeNBModReq_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextInformationSeNBModReq_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextInformationSeNBModReq_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uE-SecurityCapabilities */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-SecurityKey */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seNBUEAggregateMaximumBitRate */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RABs-ToBeAdded */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* e-RABs-ToBeModified */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeReleased */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextInformationSeNBModReq_specs_1 = { + sizeof(struct UE_ContextInformationSeNBModReq), + offsetof(struct UE_ContextInformationSeNBModReq, _asn_ctx), + asn_MAP_UE_ContextInformationSeNBModReq_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_UE_ContextInformationSeNBModReq_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSeNBModReq = { + "UE-ContextInformationSeNBModReq", + "UE-ContextInformationSeNBModReq", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextInformationSeNBModReq_tags_1, + sizeof(asn_DEF_UE_ContextInformationSeNBModReq_tags_1) + /sizeof(asn_DEF_UE_ContextInformationSeNBModReq_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextInformationSeNBModReq_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextInformationSeNBModReq_tags_1) + /sizeof(asn_DEF_UE_ContextInformationSeNBModReq_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextInformationSeNBModReq_1, + 7, /* Elements count */ + &asn_SPC_UE_ContextInformationSeNBModReq_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h new file mode 100644 index 0000000..cf847e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextInformationSeNBModReq.h @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextInformationSeNBModReq_H_ +#define _UE_ContextInformationSeNBModReq_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SeNBSecurityKey.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UESecurityCapabilities; +struct UEAggregateMaximumBitRate; +struct E_RABs_ToBeAdded_List_ModReq; +struct E_RABs_ToBeModified_List_ModReq; +struct E_RABs_ToBeReleased_List_ModReq; +struct ProtocolExtensionContainer; + +/* UE-ContextInformationSeNBModReq */ +typedef struct UE_ContextInformationSeNBModReq { + struct UESecurityCapabilities *uE_SecurityCapabilities; /* OPTIONAL */ + SeNBSecurityKey_t *seNB_SecurityKey; /* OPTIONAL */ + struct UEAggregateMaximumBitRate *seNBUEAggregateMaximumBitRate; /* OPTIONAL */ + struct E_RABs_ToBeAdded_List_ModReq *e_RABs_ToBeAdded; /* OPTIONAL */ + struct E_RABs_ToBeModified_List_ModReq *e_RABs_ToBeModified; /* OPTIONAL */ + struct E_RABs_ToBeReleased_List_ModReq *e_RABs_ToBeReleased; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextInformationSeNBModReq_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextInformationSeNBModReq; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextInformationSeNBModReq_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.c new file mode 100644 index 0000000..a101bb9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextKeptIndicator.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UE_ContextKeptIndicator_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_ContextKeptIndicator_value2enum_1[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_ContextKeptIndicator_enum2value_1[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_ContextKeptIndicator_specs_1 = { + asn_MAP_UE_ContextKeptIndicator_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_ContextKeptIndicator_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_ContextKeptIndicator_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextKeptIndicator = { + "UE-ContextKeptIndicator", + "UE-ContextKeptIndicator", + &asn_OP_NativeEnumerated, + asn_DEF_UE_ContextKeptIndicator_tags_1, + sizeof(asn_DEF_UE_ContextKeptIndicator_tags_1) + /sizeof(asn_DEF_UE_ContextKeptIndicator_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextKeptIndicator_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextKeptIndicator_tags_1) + /sizeof(asn_DEF_UE_ContextKeptIndicator_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UE_ContextKeptIndicator_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_ContextKeptIndicator_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.h new file mode 100644 index 0000000..bbed400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextKeptIndicator.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextKeptIndicator_H_ +#define _UE_ContextKeptIndicator_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_ContextKeptIndicator { + UE_ContextKeptIndicator_true = 0 + /* + * Enumeration is extensible + */ +} e_UE_ContextKeptIndicator; + +/* UE-ContextKeptIndicator */ +typedef long UE_ContextKeptIndicator_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_ContextKeptIndicator_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextKeptIndicator; +extern const asn_INTEGER_specifics_t asn_SPC_UE_ContextKeptIndicator_specs_1; +asn_struct_free_f UE_ContextKeptIndicator_free; +asn_struct_print_f UE_ContextKeptIndicator_print; +asn_constr_check_f UE_ContextKeptIndicator_constraint; +ber_type_decoder_f UE_ContextKeptIndicator_decode_ber; +der_type_encoder_f UE_ContextKeptIndicator_encode_der; +xer_type_decoder_f UE_ContextKeptIndicator_decode_xer; +xer_type_encoder_f UE_ContextKeptIndicator_encode_xer; +per_type_decoder_f UE_ContextKeptIndicator_decode_uper; +per_type_encoder_f UE_ContextKeptIndicator_encode_uper; +per_type_decoder_f UE_ContextKeptIndicator_decode_aper; +per_type_encoder_f UE_ContextKeptIndicator_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextKeptIndicator_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c new file mode 100644 index 0000000..ec15d14 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextReferenceAtSeNB.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSeNB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB, source_GlobalSeNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "source-GlobalSeNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB, seNB_UE_X2AP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-UE-X2AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSeNB, seNB_UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "seNB-UE-X2AP-ID-Extension" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextReferenceAtSeNB, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextReferenceAtSeNB_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtSeNB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtSeNB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalSeNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seNB-UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSeNB_specs_1 = { + sizeof(struct UE_ContextReferenceAtSeNB), + offsetof(struct UE_ContextReferenceAtSeNB, _asn_ctx), + asn_MAP_UE_ContextReferenceAtSeNB_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_UE_ContextReferenceAtSeNB_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSeNB = { + "UE-ContextReferenceAtSeNB", + "UE-ContextReferenceAtSeNB", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtSeNB_tags_1, + sizeof(asn_DEF_UE_ContextReferenceAtSeNB_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtSeNB_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtSeNB_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtSeNB_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtSeNB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtSeNB_1, + 4, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtSeNB_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h new file mode 100644 index 0000000..84b9b78 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSeNB.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextReferenceAtSeNB_H_ +#define _UE_ContextReferenceAtSeNB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "UE-X2AP-ID.h" +#include "UE-X2AP-ID-Extension.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UE-ContextReferenceAtSeNB */ +typedef struct UE_ContextReferenceAtSeNB { + GlobalENB_ID_t source_GlobalSeNB_ID; + UE_X2AP_ID_t seNB_UE_X2AP_ID; + UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtSeNB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSeNB; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextReferenceAtSeNB_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c new file mode 100644 index 0000000..861ff4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextReferenceAtSgNB.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtSgNB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSgNB, source_GlobalSgNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "source-GlobalSgNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtSgNB, sgNB_UE_X2AP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-UE-X2AP-ID" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextReferenceAtSgNB, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextReferenceAtSgNB_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtSgNB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtSgNB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalSgNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtSgNB_specs_1 = { + sizeof(struct UE_ContextReferenceAtSgNB), + offsetof(struct UE_ContextReferenceAtSgNB, _asn_ctx), + asn_MAP_UE_ContextReferenceAtSgNB_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UE_ContextReferenceAtSgNB_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSgNB = { + "UE-ContextReferenceAtSgNB", + "UE-ContextReferenceAtSgNB", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtSgNB_tags_1, + sizeof(asn_DEF_UE_ContextReferenceAtSgNB_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtSgNB_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtSgNB_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtSgNB_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtSgNB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtSgNB_1, + 3, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtSgNB_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h new file mode 100644 index 0000000..aa66299 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtSgNB.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextReferenceAtSgNB_H_ +#define _UE_ContextReferenceAtSgNB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalGNB-ID.h" +#include "SgNB-UE-X2AP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UE-ContextReferenceAtSgNB */ +typedef struct UE_ContextReferenceAtSgNB { + GlobalGNB_ID_t source_GlobalSgNB_ID; + SgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtSgNB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtSgNB; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextReferenceAtSgNB_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c new file mode 100644 index 0000000..b699093 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-ContextReferenceAtWT.h" + +#include "ProtocolExtensionContainer.h" +static asn_TYPE_member_t asn_MBR_UE_ContextReferenceAtWT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtWT, wTID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_WTID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wTID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_ContextReferenceAtWT, wT_UE_XwAP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WT_UE_XwAP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wT-UE-XwAP-ID" + }, + { ATF_POINTER, 1, offsetof(struct UE_ContextReferenceAtWT, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UE_ContextReferenceAtWT_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UE_ContextReferenceAtWT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UE_ContextReferenceAtWT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wTID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* wT-UE-XwAP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_ContextReferenceAtWT_specs_1 = { + sizeof(struct UE_ContextReferenceAtWT), + offsetof(struct UE_ContextReferenceAtWT, _asn_ctx), + asn_MAP_UE_ContextReferenceAtWT_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UE_ContextReferenceAtWT_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtWT = { + "UE-ContextReferenceAtWT", + "UE-ContextReferenceAtWT", + &asn_OP_SEQUENCE, + asn_DEF_UE_ContextReferenceAtWT_tags_1, + sizeof(asn_DEF_UE_ContextReferenceAtWT_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtWT_tags_1[0]), /* 1 */ + asn_DEF_UE_ContextReferenceAtWT_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_ContextReferenceAtWT_tags_1) + /sizeof(asn_DEF_UE_ContextReferenceAtWT_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UE_ContextReferenceAtWT_1, + 3, /* Elements count */ + &asn_SPC_UE_ContextReferenceAtWT_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h new file mode 100644 index 0000000..d3461d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-ContextReferenceAtWT.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_ContextReferenceAtWT_H_ +#define _UE_ContextReferenceAtWT_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "WTID.h" +#include "WT-UE-XwAP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UE-ContextReferenceAtWT */ +typedef struct UE_ContextReferenceAtWT { + WTID_t wTID; + WT_UE_XwAP_ID_t wT_UE_XwAP_ID; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_ContextReferenceAtWT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_ContextReferenceAtWT; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_ContextReferenceAtWT_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.c new file mode 100644 index 0000000..16f4513 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-HistoryInformation.h" + +#include "LastVisitedCell-Item.h" +asn_per_constraints_t asn_PER_type_UE_HistoryInformation_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UE_HistoryInformation_1[] = { + { ATF_POINTER, 0, 0, + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_LastVisitedCell_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UE_HistoryInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UE_HistoryInformation_specs_1 = { + sizeof(struct UE_HistoryInformation), + offsetof(struct UE_HistoryInformation, _asn_ctx), + 2, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_HistoryInformation = { + "UE-HistoryInformation", + "UE-HistoryInformation", + &asn_OP_SEQUENCE_OF, + asn_DEF_UE_HistoryInformation_tags_1, + sizeof(asn_DEF_UE_HistoryInformation_tags_1) + /sizeof(asn_DEF_UE_HistoryInformation_tags_1[0]), /* 1 */ + asn_DEF_UE_HistoryInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_HistoryInformation_tags_1) + /sizeof(asn_DEF_UE_HistoryInformation_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UE_HistoryInformation_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UE_HistoryInformation_1, + 1, /* Single element */ + &asn_SPC_UE_HistoryInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.h new file mode 100644 index 0000000..c21ba92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformation.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_HistoryInformation_H_ +#define _UE_HistoryInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct LastVisitedCell_Item; + +/* UE-HistoryInformation */ +typedef struct UE_HistoryInformation { + A_SEQUENCE_OF(struct LastVisitedCell_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_HistoryInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_HistoryInformation; +extern asn_SET_OF_specifics_t asn_SPC_UE_HistoryInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_UE_HistoryInformation_1[1]; +extern asn_per_constraints_t asn_PER_type_UE_HistoryInformation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_HistoryInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c new file mode 100644 index 0000000..24a2839 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-HistoryInformationFromTheUE.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_UE_HistoryInformationFromTheUE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_HistoryInformationFromTheUE = { + "UE-HistoryInformationFromTheUE", + "UE-HistoryInformationFromTheUE", + &asn_OP_OCTET_STRING, + asn_DEF_UE_HistoryInformationFromTheUE_tags_1, + sizeof(asn_DEF_UE_HistoryInformationFromTheUE_tags_1) + /sizeof(asn_DEF_UE_HistoryInformationFromTheUE_tags_1[0]), /* 1 */ + asn_DEF_UE_HistoryInformationFromTheUE_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_HistoryInformationFromTheUE_tags_1) + /sizeof(asn_DEF_UE_HistoryInformationFromTheUE_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h new file mode 100644 index 0000000..dee36a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-HistoryInformationFromTheUE.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_HistoryInformationFromTheUE_H_ +#define _UE_HistoryInformationFromTheUE_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-HistoryInformationFromTheUE */ +typedef OCTET_STRING_t UE_HistoryInformationFromTheUE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_HistoryInformationFromTheUE; +asn_struct_free_f UE_HistoryInformationFromTheUE_free; +asn_struct_print_f UE_HistoryInformationFromTheUE_print; +asn_constr_check_f UE_HistoryInformationFromTheUE_constraint; +ber_type_decoder_f UE_HistoryInformationFromTheUE_decode_ber; +der_type_encoder_f UE_HistoryInformationFromTheUE_encode_der; +xer_type_decoder_f UE_HistoryInformationFromTheUE_decode_xer; +xer_type_encoder_f UE_HistoryInformationFromTheUE_encode_xer; +per_type_decoder_f UE_HistoryInformationFromTheUE_decode_uper; +per_type_encoder_f UE_HistoryInformationFromTheUE_encode_uper; +per_type_decoder_f UE_HistoryInformationFromTheUE_decode_aper; +per_type_encoder_f UE_HistoryInformationFromTheUE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_HistoryInformationFromTheUE_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c new file mode 100644 index 0000000..9acd583 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-RLF-Report-Container-for-extended-bands.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_RLF_Report_Container_for_extended_bands = { + "UE-RLF-Report-Container-for-extended-bands", + "UE-RLF-Report-Container-for-extended-bands", + &asn_OP_OCTET_STRING, + asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1, + sizeof(asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1) + /sizeof(asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1[0]), /* 1 */ + asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1) + /sizeof(asn_DEF_UE_RLF_Report_Container_for_extended_bands_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h new file mode 100644 index 0000000..a7d0dd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container-for-extended-bands.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_RLF_Report_Container_for_extended_bands_H_ +#define _UE_RLF_Report_Container_for_extended_bands_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-RLF-Report-Container-for-extended-bands */ +typedef OCTET_STRING_t UE_RLF_Report_Container_for_extended_bands_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_RLF_Report_Container_for_extended_bands; +asn_struct_free_f UE_RLF_Report_Container_for_extended_bands_free; +asn_struct_print_f UE_RLF_Report_Container_for_extended_bands_print; +asn_constr_check_f UE_RLF_Report_Container_for_extended_bands_constraint; +ber_type_decoder_f UE_RLF_Report_Container_for_extended_bands_decode_ber; +der_type_encoder_f UE_RLF_Report_Container_for_extended_bands_encode_der; +xer_type_decoder_f UE_RLF_Report_Container_for_extended_bands_decode_xer; +xer_type_encoder_f UE_RLF_Report_Container_for_extended_bands_encode_xer; +per_type_decoder_f UE_RLF_Report_Container_for_extended_bands_decode_uper; +per_type_encoder_f UE_RLF_Report_Container_for_extended_bands_encode_uper; +per_type_decoder_f UE_RLF_Report_Container_for_extended_bands_decode_aper; +per_type_encoder_f UE_RLF_Report_Container_for_extended_bands_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_RLF_Report_Container_for_extended_bands_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.c new file mode 100644 index 0000000..b52a233 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-RLF-Report-Container.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_UE_RLF_Report_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_RLF_Report_Container = { + "UE-RLF-Report-Container", + "UE-RLF-Report-Container", + &asn_OP_OCTET_STRING, + asn_DEF_UE_RLF_Report_Container_tags_1, + sizeof(asn_DEF_UE_RLF_Report_Container_tags_1) + /sizeof(asn_DEF_UE_RLF_Report_Container_tags_1[0]), /* 1 */ + asn_DEF_UE_RLF_Report_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_RLF_Report_Container_tags_1) + /sizeof(asn_DEF_UE_RLF_Report_Container_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.h new file mode 100644 index 0000000..c0e2340 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-RLF-Report-Container.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_RLF_Report_Container_H_ +#define _UE_RLF_Report_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-RLF-Report-Container */ +typedef OCTET_STRING_t UE_RLF_Report_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_RLF_Report_Container; +asn_struct_free_f UE_RLF_Report_Container_free; +asn_struct_print_f UE_RLF_Report_Container_print; +asn_constr_check_f UE_RLF_Report_Container_constraint; +ber_type_decoder_f UE_RLF_Report_Container_decode_ber; +der_type_encoder_f UE_RLF_Report_Container_encode_der; +xer_type_decoder_f UE_RLF_Report_Container_decode_xer; +xer_type_encoder_f UE_RLF_Report_Container_encode_xer; +per_type_decoder_f UE_RLF_Report_Container_decode_uper; +per_type_encoder_f UE_RLF_Report_Container_encode_uper; +per_type_decoder_f UE_RLF_Report_Container_decode_aper; +per_type_encoder_f UE_RLF_Report_Container_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_RLF_Report_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.c new file mode 100644 index 0000000..778f0f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-S1AP-ID.h" + +int +UE_S1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UE_S1AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_S1AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_UE_S1AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_S1AP_ID = { + "UE-S1AP-ID", + "UE-S1AP-ID", + &asn_OP_NativeInteger, + asn_DEF_UE_S1AP_ID_tags_1, + sizeof(asn_DEF_UE_S1AP_ID_tags_1) + /sizeof(asn_DEF_UE_S1AP_ID_tags_1[0]), /* 1 */ + asn_DEF_UE_S1AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_S1AP_ID_tags_1) + /sizeof(asn_DEF_UE_S1AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UE_S1AP_ID_constr_1, UE_S1AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_UE_S1AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.h new file mode 100644 index 0000000..4afb55c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-S1AP-ID.h @@ -0,0 +1,63 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_S1AP_ID_H_ +#define _UE_S1AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-S1AP-ID */ +typedef unsigned long UE_S1AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_S1AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_S1AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_UE_S1AP_ID_specs_1; +asn_struct_free_f UE_S1AP_ID_free; +asn_struct_print_f UE_S1AP_ID_print; +asn_constr_check_f UE_S1AP_ID_constraint; +ber_type_decoder_f UE_S1AP_ID_decode_ber; +der_type_encoder_f UE_S1AP_ID_encode_der; +xer_type_decoder_f UE_S1AP_ID_decode_xer; +xer_type_encoder_f UE_S1AP_ID_encode_xer; +per_type_decoder_f UE_S1AP_ID_decode_uper; +per_type_encoder_f UE_S1AP_ID_encode_uper; +per_type_decoder_f UE_S1AP_ID_decode_aper; +per_type_encoder_f UE_S1AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_S1AP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c new file mode 100644 index 0000000..9aae9bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-X2AP-ID-Extension.h" + +int +UE_X2AP_ID_Extension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UE_X2AP_ID_Extension_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 12, 12, 0, 4095 } /* (0..4095,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UE_X2AP_ID_Extension_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_X2AP_ID_Extension = { + "UE-X2AP-ID-Extension", + "UE-X2AP-ID-Extension", + &asn_OP_NativeInteger, + asn_DEF_UE_X2AP_ID_Extension_tags_1, + sizeof(asn_DEF_UE_X2AP_ID_Extension_tags_1) + /sizeof(asn_DEF_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */ + asn_DEF_UE_X2AP_ID_Extension_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_X2AP_ID_Extension_tags_1) + /sizeof(asn_DEF_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UE_X2AP_ID_Extension_constr_1, UE_X2AP_ID_Extension_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h new file mode 100644 index 0000000..5a4d449 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID-Extension.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_X2AP_ID_Extension_H_ +#define _UE_X2AP_ID_Extension_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-X2AP-ID-Extension */ +typedef long UE_X2AP_ID_Extension_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_X2AP_ID_Extension_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_X2AP_ID_Extension; +asn_struct_free_f UE_X2AP_ID_Extension_free; +asn_struct_print_f UE_X2AP_ID_Extension_print; +asn_constr_check_f UE_X2AP_ID_Extension_constraint; +ber_type_decoder_f UE_X2AP_ID_Extension_decode_ber; +der_type_encoder_f UE_X2AP_ID_Extension_encode_der; +xer_type_decoder_f UE_X2AP_ID_Extension_decode_xer; +xer_type_encoder_f UE_X2AP_ID_Extension_encode_xer; +per_type_decoder_f UE_X2AP_ID_Extension_decode_uper; +per_type_encoder_f UE_X2AP_ID_Extension_encode_uper; +per_type_decoder_f UE_X2AP_ID_Extension_decode_aper; +per_type_encoder_f UE_X2AP_ID_Extension_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_X2AP_ID_Extension_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.c new file mode 100644 index 0000000..fd7ddb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UE-X2AP-ID.h" + +int +UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UE_X2AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UE_X2AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_X2AP_ID = { + "UE-X2AP-ID", + "UE-X2AP-ID", + &asn_OP_NativeInteger, + asn_DEF_UE_X2AP_ID_tags_1, + sizeof(asn_DEF_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_UE_X2AP_ID_tags_1[0]), /* 1 */ + asn_DEF_UE_X2AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_UE_X2AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UE_X2AP_ID_constr_1, UE_X2AP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.h new file mode 100644 index 0000000..7bdb4fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UE-X2AP-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UE_X2AP_ID_H_ +#define _UE_X2AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-X2AP-ID */ +typedef long UE_X2AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_X2AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_X2AP_ID; +asn_struct_free_f UE_X2AP_ID_free; +asn_struct_print_f UE_X2AP_ID_print; +asn_constr_check_f UE_X2AP_ID_constraint; +ber_type_decoder_f UE_X2AP_ID_decode_ber; +der_type_encoder_f UE_X2AP_ID_encode_der; +xer_type_decoder_f UE_X2AP_ID_decode_xer; +xer_type_encoder_f UE_X2AP_ID_encode_xer; +per_type_decoder_f UE_X2AP_ID_decode_uper; +per_type_encoder_f UE_X2AP_ID_encode_uper; +per_type_decoder_f UE_X2AP_ID_decode_aper; +per_type_encoder_f UE_X2AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_X2AP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c new file mode 100644 index 0000000..5657e2a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEAggregateMaximumBitRate.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UEAggregateMaximumBitRate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAggregateMaximumBitRate, uEaggregateMaximumBitRateDownlink), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uEaggregateMaximumBitRateDownlink" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEAggregateMaximumBitRate, uEaggregateMaximumBitRateUplink), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uEaggregateMaximumBitRateUplink" + }, + { ATF_POINTER, 1, offsetof(struct UEAggregateMaximumBitRate, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P209, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UEAggregateMaximumBitRate_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UEAggregateMaximumBitRate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEAggregateMaximumBitRate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uEaggregateMaximumBitRateDownlink */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uEaggregateMaximumBitRateUplink */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEAggregateMaximumBitRate_specs_1 = { + sizeof(struct UEAggregateMaximumBitRate), + offsetof(struct UEAggregateMaximumBitRate, _asn_ctx), + asn_MAP_UEAggregateMaximumBitRate_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UEAggregateMaximumBitRate_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEAggregateMaximumBitRate = { + "UEAggregateMaximumBitRate", + "UEAggregateMaximumBitRate", + &asn_OP_SEQUENCE, + asn_DEF_UEAggregateMaximumBitRate_tags_1, + sizeof(asn_DEF_UEAggregateMaximumBitRate_tags_1) + /sizeof(asn_DEF_UEAggregateMaximumBitRate_tags_1[0]), /* 1 */ + asn_DEF_UEAggregateMaximumBitRate_tags_1, /* Same as above */ + sizeof(asn_DEF_UEAggregateMaximumBitRate_tags_1) + /sizeof(asn_DEF_UEAggregateMaximumBitRate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEAggregateMaximumBitRate_1, + 3, /* Elements count */ + &asn_SPC_UEAggregateMaximumBitRate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h new file mode 100644 index 0000000..25dc3eb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAggregateMaximumBitRate.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEAggregateMaximumBitRate_H_ +#define _UEAggregateMaximumBitRate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BitRate.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UEAggregateMaximumBitRate */ +typedef struct UEAggregateMaximumBitRate { + BitRate_t uEaggregateMaximumBitRateDownlink; + BitRate_t uEaggregateMaximumBitRateUplink; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEAggregateMaximumBitRate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEAggregateMaximumBitRate; +extern asn_SEQUENCE_specifics_t asn_SPC_UEAggregateMaximumBitRate_specs_1; +extern asn_TYPE_member_t asn_MBR_UEAggregateMaximumBitRate_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEAggregateMaximumBitRate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.c new file mode 100644 index 0000000..548e666 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.c @@ -0,0 +1,122 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEAppLayerMeasConfig.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_containerForAppLayerMeasConfig_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_containerForAppLayerMeasConfig_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1000 } /* (SIZE(1..1000)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UEAppLayerMeasConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig, containerForAppLayerMeasConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, &asn_PER_memb_containerForAppLayerMeasConfig_constr_2, memb_containerForAppLayerMeasConfig_constraint_1 }, + 0, 0, /* No default value */ + "containerForAppLayerMeasConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEAppLayerMeasConfig, areaScopeOfQMC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_AreaScopeOfQMC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "areaScopeOfQMC" + }, + { ATF_POINTER, 1, offsetof(struct UEAppLayerMeasConfig, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P210, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UEAppLayerMeasConfig_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UEAppLayerMeasConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEAppLayerMeasConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* containerForAppLayerMeasConfig */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* areaScopeOfQMC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEAppLayerMeasConfig_specs_1 = { + sizeof(struct UEAppLayerMeasConfig), + offsetof(struct UEAppLayerMeasConfig, _asn_ctx), + asn_MAP_UEAppLayerMeasConfig_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UEAppLayerMeasConfig_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEAppLayerMeasConfig = { + "UEAppLayerMeasConfig", + "UEAppLayerMeasConfig", + &asn_OP_SEQUENCE, + asn_DEF_UEAppLayerMeasConfig_tags_1, + sizeof(asn_DEF_UEAppLayerMeasConfig_tags_1) + /sizeof(asn_DEF_UEAppLayerMeasConfig_tags_1[0]), /* 1 */ + asn_DEF_UEAppLayerMeasConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_UEAppLayerMeasConfig_tags_1) + /sizeof(asn_DEF_UEAppLayerMeasConfig_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEAppLayerMeasConfig_1, + 3, /* Elements count */ + &asn_SPC_UEAppLayerMeasConfig_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.h new file mode 100644 index 0000000..02bbe69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEAppLayerMeasConfig.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEAppLayerMeasConfig_H_ +#define _UEAppLayerMeasConfig_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" +#include "AreaScopeOfQMC.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UEAppLayerMeasConfig */ +typedef struct UEAppLayerMeasConfig { + OCTET_STRING_t containerForAppLayerMeasConfig; + AreaScopeOfQMC_t areaScopeOfQMC; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEAppLayerMeasConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEAppLayerMeasConfig; +extern asn_SEQUENCE_specifics_t asn_SPC_UEAppLayerMeasConfig_specs_1; +extern asn_TYPE_member_t asn_MBR_UEAppLayerMeasConfig_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEAppLayerMeasConfig_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.c new file mode 100644 index 0000000..6f436ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEContextRelease.h" + +static asn_TYPE_member_t asn_MBR_UEContextRelease_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEContextRelease, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEContextRelease_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEContextRelease_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEContextRelease_specs_1 = { + sizeof(struct UEContextRelease), + offsetof(struct UEContextRelease, _asn_ctx), + asn_MAP_UEContextRelease_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEContextRelease = { + "UEContextRelease", + "UEContextRelease", + &asn_OP_SEQUENCE, + asn_DEF_UEContextRelease_tags_1, + sizeof(asn_DEF_UEContextRelease_tags_1) + /sizeof(asn_DEF_UEContextRelease_tags_1[0]), /* 1 */ + asn_DEF_UEContextRelease_tags_1, /* Same as above */ + sizeof(asn_DEF_UEContextRelease_tags_1) + /sizeof(asn_DEF_UEContextRelease_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEContextRelease_1, + 1, /* Elements count */ + &asn_SPC_UEContextRelease_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.h new file mode 100644 index 0000000..9656a47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEContextRelease.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEContextRelease_H_ +#define _UEContextRelease_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEContextRelease */ +typedef struct UEContextRelease { + ProtocolIE_Container_119P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEContextRelease_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEContextRelease; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEContextRelease_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.c new file mode 100644 index 0000000..8e6517d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEID.h" + +int +UEID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UEID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UEID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UEID = { + "UEID", + "UEID", + &asn_OP_BIT_STRING, + asn_DEF_UEID_tags_1, + sizeof(asn_DEF_UEID_tags_1) + /sizeof(asn_DEF_UEID_tags_1[0]), /* 1 */ + asn_DEF_UEID_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_tags_1) + /sizeof(asn_DEF_UEID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UEID_constr_1, UEID_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.h new file mode 100644 index 0000000..8b96896 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEID_H_ +#define _UEID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID */ +typedef BIT_STRING_t UEID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UEID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UEID; +asn_struct_free_f UEID_free; +asn_struct_print_f UEID_print; +asn_constr_check_f UEID_constraint; +ber_type_decoder_f UEID_decode_ber; +der_type_encoder_f UEID_encode_der; +xer_type_decoder_f UEID_decode_xer; +xer_type_encoder_f UEID_encode_xer; +per_type_decoder_f UEID_decode_uper; +per_type_encoder_f UEID_encode_uper; +per_type_decoder_f UEID_decode_aper; +per_type_encoder_f UEID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.c new file mode 100644 index 0000000..801fc81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UENRMeasurement.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UENRMeasurement_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UENRMeasurement, uENRMeasurements), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCContainer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uENRMeasurements" + }, + { ATF_POINTER, 1, offsetof(struct UENRMeasurement, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P171, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UENRMeasurement_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UENRMeasurement_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UENRMeasurement_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uENRMeasurements */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UENRMeasurement_specs_1 = { + sizeof(struct UENRMeasurement), + offsetof(struct UENRMeasurement, _asn_ctx), + asn_MAP_UENRMeasurement_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UENRMeasurement_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UENRMeasurement = { + "UENRMeasurement", + "UENRMeasurement", + &asn_OP_SEQUENCE, + asn_DEF_UENRMeasurement_tags_1, + sizeof(asn_DEF_UENRMeasurement_tags_1) + /sizeof(asn_DEF_UENRMeasurement_tags_1[0]), /* 1 */ + asn_DEF_UENRMeasurement_tags_1, /* Same as above */ + sizeof(asn_DEF_UENRMeasurement_tags_1) + /sizeof(asn_DEF_UENRMeasurement_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UENRMeasurement_1, + 2, /* Elements count */ + &asn_SPC_UENRMeasurement_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.h new file mode 100644 index 0000000..18c052d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UENRMeasurement.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UENRMeasurement_H_ +#define _UENRMeasurement_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RRCContainer.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UENRMeasurement */ +typedef struct UENRMeasurement { + RRCContainer_t uENRMeasurements; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UENRMeasurement_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UENRMeasurement; +extern asn_SEQUENCE_specifics_t asn_SPC_UENRMeasurement_specs_1; +extern asn_TYPE_member_t asn_MBR_UENRMeasurement_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UENRMeasurement_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.c new file mode 100644 index 0000000..5c01060 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UESecurityCapabilities.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UESecurityCapabilities_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UESecurityCapabilities, encryptionAlgorithms), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EncryptionAlgorithms, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "encryptionAlgorithms" + }, + { ATF_NOFLAGS, 0, offsetof(struct UESecurityCapabilities, integrityProtectionAlgorithms), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IntegrityProtectionAlgorithms, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "integrityProtectionAlgorithms" + }, + { ATF_POINTER, 1, offsetof(struct UESecurityCapabilities, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P211, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UESecurityCapabilities_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UESecurityCapabilities_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UESecurityCapabilities_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* encryptionAlgorithms */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* integrityProtectionAlgorithms */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UESecurityCapabilities_specs_1 = { + sizeof(struct UESecurityCapabilities), + offsetof(struct UESecurityCapabilities, _asn_ctx), + asn_MAP_UESecurityCapabilities_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UESecurityCapabilities_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UESecurityCapabilities = { + "UESecurityCapabilities", + "UESecurityCapabilities", + &asn_OP_SEQUENCE, + asn_DEF_UESecurityCapabilities_tags_1, + sizeof(asn_DEF_UESecurityCapabilities_tags_1) + /sizeof(asn_DEF_UESecurityCapabilities_tags_1[0]), /* 1 */ + asn_DEF_UESecurityCapabilities_tags_1, /* Same as above */ + sizeof(asn_DEF_UESecurityCapabilities_tags_1) + /sizeof(asn_DEF_UESecurityCapabilities_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UESecurityCapabilities_1, + 3, /* Elements count */ + &asn_SPC_UESecurityCapabilities_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.h new file mode 100644 index 0000000..dc29c00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESecurityCapabilities.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UESecurityCapabilities_H_ +#define _UESecurityCapabilities_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "EncryptionAlgorithms.h" +#include "IntegrityProtectionAlgorithms.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UESecurityCapabilities */ +typedef struct UESecurityCapabilities { + EncryptionAlgorithms_t encryptionAlgorithms; + IntegrityProtectionAlgorithms_t integrityProtectionAlgorithms; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UESecurityCapabilities_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UESecurityCapabilities; +extern asn_SEQUENCE_specifics_t asn_SPC_UESecurityCapabilities_specs_1; +extern asn_TYPE_member_t asn_MBR_UESecurityCapabilities_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UESecurityCapabilities_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c new file mode 100644 index 0000000..b391cd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UESidelinkAggregateMaximumBitRate.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UESidelinkAggregateMaximumBitRate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UESidelinkAggregateMaximumBitRate, uESidelinkAggregateMaximumBitRate), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BitRate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uESidelinkAggregateMaximumBitRate" + }, + { ATF_POINTER, 1, offsetof(struct UESidelinkAggregateMaximumBitRate, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P212, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UESidelinkAggregateMaximumBitRate_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UESidelinkAggregateMaximumBitRate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uESidelinkAggregateMaximumBitRate */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UESidelinkAggregateMaximumBitRate_specs_1 = { + sizeof(struct UESidelinkAggregateMaximumBitRate), + offsetof(struct UESidelinkAggregateMaximumBitRate, _asn_ctx), + asn_MAP_UESidelinkAggregateMaximumBitRate_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UESidelinkAggregateMaximumBitRate_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UESidelinkAggregateMaximumBitRate = { + "UESidelinkAggregateMaximumBitRate", + "UESidelinkAggregateMaximumBitRate", + &asn_OP_SEQUENCE, + asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1, + sizeof(asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1) + /sizeof(asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1[0]), /* 1 */ + asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1, /* Same as above */ + sizeof(asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1) + /sizeof(asn_DEF_UESidelinkAggregateMaximumBitRate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UESidelinkAggregateMaximumBitRate_1, + 2, /* Elements count */ + &asn_SPC_UESidelinkAggregateMaximumBitRate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h new file mode 100644 index 0000000..7c903a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UESidelinkAggregateMaximumBitRate.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UESidelinkAggregateMaximumBitRate_H_ +#define _UESidelinkAggregateMaximumBitRate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BitRate.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UESidelinkAggregateMaximumBitRate */ +typedef struct UESidelinkAggregateMaximumBitRate { + BitRate_t uESidelinkAggregateMaximumBitRate; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UESidelinkAggregateMaximumBitRate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UESidelinkAggregateMaximumBitRate; +extern asn_SEQUENCE_specifics_t asn_SPC_UESidelinkAggregateMaximumBitRate_specs_1; +extern asn_TYPE_member_t asn_MBR_UESidelinkAggregateMaximumBitRate_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UESidelinkAggregateMaximumBitRate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.c new file mode 100644 index 0000000..41eca3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.c @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEsToBeResetList-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UEsToBeResetList_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEsToBeResetList_Item, meNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-ID" + }, + { ATF_POINTER, 3, offsetof(struct UEsToBeResetList_Item, meNB_ID_ext), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "meNB-ID-ext" + }, + { ATF_POINTER, 2, offsetof(struct UEsToBeResetList_Item, sgNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SgNB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sgNB-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEsToBeResetList_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P213, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UEsToBeResetList_Item_oms_1[] = { 1, 2, 3 }; +static const ber_tlv_tag_t asn_DEF_UEsToBeResetList_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEsToBeResetList_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-ID-ext */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEsToBeResetList_Item_specs_1 = { + sizeof(struct UEsToBeResetList_Item), + offsetof(struct UEsToBeResetList_Item, _asn_ctx), + asn_MAP_UEsToBeResetList_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_UEsToBeResetList_Item_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList_Item = { + "UEsToBeResetList-Item", + "UEsToBeResetList-Item", + &asn_OP_SEQUENCE, + asn_DEF_UEsToBeResetList_Item_tags_1, + sizeof(asn_DEF_UEsToBeResetList_Item_tags_1) + /sizeof(asn_DEF_UEsToBeResetList_Item_tags_1[0]), /* 1 */ + asn_DEF_UEsToBeResetList_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_UEsToBeResetList_Item_tags_1) + /sizeof(asn_DEF_UEsToBeResetList_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEsToBeResetList_Item_1, + 4, /* Elements count */ + &asn_SPC_UEsToBeResetList_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.h new file mode 100644 index 0000000..e0fbad5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList-Item.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEsToBeResetList_Item_H_ +#define _UEsToBeResetList_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UE-X2AP-ID.h" +#include "UE-X2AP-ID-Extension.h" +#include "SgNB-UE-X2AP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UEsToBeResetList-Item */ +typedef struct UEsToBeResetList_Item { + UE_X2AP_ID_t meNB_ID; + UE_X2AP_ID_Extension_t *meNB_ID_ext; /* OPTIONAL */ + SgNB_UE_X2AP_ID_t *sgNB_ID; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEsToBeResetList_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_UEsToBeResetList_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_UEsToBeResetList_Item_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEsToBeResetList_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.c new file mode 100644 index 0000000..653f716 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UEsToBeResetList.h" + +#include "UEsToBeResetList-Item.h" +asn_per_constraints_t asn_PER_type_UEsToBeResetList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 13, 13, 1, 8192 } /* (SIZE(1..8192)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UEsToBeResetList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEsToBeResetList_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEsToBeResetList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UEsToBeResetList_specs_1 = { + sizeof(struct UEsToBeResetList), + offsetof(struct UEsToBeResetList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList = { + "UEsToBeResetList", + "UEsToBeResetList", + &asn_OP_SEQUENCE_OF, + asn_DEF_UEsToBeResetList_tags_1, + sizeof(asn_DEF_UEsToBeResetList_tags_1) + /sizeof(asn_DEF_UEsToBeResetList_tags_1[0]), /* 1 */ + asn_DEF_UEsToBeResetList_tags_1, /* Same as above */ + sizeof(asn_DEF_UEsToBeResetList_tags_1) + /sizeof(asn_DEF_UEsToBeResetList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UEsToBeResetList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UEsToBeResetList_1, + 1, /* Single element */ + &asn_SPC_UEsToBeResetList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.h new file mode 100644 index 0000000..dc2c423 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UEsToBeResetList.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UEsToBeResetList_H_ +#define _UEsToBeResetList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEsToBeResetList_Item; + +/* UEsToBeResetList */ +typedef struct UEsToBeResetList { + A_SEQUENCE_OF(struct UEsToBeResetList_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEsToBeResetList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEsToBeResetList; +extern asn_SET_OF_specifics_t asn_SPC_UEsToBeResetList_specs_1; +extern asn_TYPE_member_t asn_MBR_UEsToBeResetList_1[1]; +extern asn_per_constraints_t asn_PER_type_UEsToBeResetList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEsToBeResetList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.c new file mode 100644 index 0000000..f724986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-GBR-PRB-usage.h" + +int +UL_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_GBR_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UL_GBR_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_GBR_PRB_usage = { + "UL-GBR-PRB-usage", + "UL-GBR-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_UL_GBR_PRB_usage_tags_1, + sizeof(asn_DEF_UL_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_GBR_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_UL_GBR_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_GBR_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_GBR_PRB_usage_constr_1, UL_GBR_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.h new file mode 100644 index 0000000..d0a6db7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-GBR-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_GBR_PRB_usage_H_ +#define _UL_GBR_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-GBR-PRB-usage */ +typedef long UL_GBR_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_GBR_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_GBR_PRB_usage; +asn_struct_free_f UL_GBR_PRB_usage_free; +asn_struct_print_f UL_GBR_PRB_usage_print; +asn_constr_check_f UL_GBR_PRB_usage_constraint; +ber_type_decoder_f UL_GBR_PRB_usage_decode_ber; +der_type_encoder_f UL_GBR_PRB_usage_encode_der; +xer_type_decoder_f UL_GBR_PRB_usage_decode_xer; +xer_type_encoder_f UL_GBR_PRB_usage_encode_xer; +per_type_decoder_f UL_GBR_PRB_usage_decode_uper; +per_type_encoder_f UL_GBR_PRB_usage_encode_uper; +per_type_decoder_f UL_GBR_PRB_usage_decode_aper; +per_type_encoder_f UL_GBR_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_GBR_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.c new file mode 100644 index 0000000..01edd90 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-HighInterferenceIndication.h" + +int +UL_HighInterferenceIndication_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 110)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_HighInterferenceIndication_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 1, 110 } /* (SIZE(1..110,...)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UL_HighInterferenceIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndication = { + "UL-HighInterferenceIndication", + "UL-HighInterferenceIndication", + &asn_OP_BIT_STRING, + asn_DEF_UL_HighInterferenceIndication_tags_1, + sizeof(asn_DEF_UL_HighInterferenceIndication_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndication_tags_1[0]), /* 1 */ + asn_DEF_UL_HighInterferenceIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_HighInterferenceIndication_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_HighInterferenceIndication_constr_1, UL_HighInterferenceIndication_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.h new file mode 100644 index 0000000..702dbc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndication.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_HighInterferenceIndication_H_ +#define _UL_HighInterferenceIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-HighInterferenceIndication */ +typedef BIT_STRING_t UL_HighInterferenceIndication_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_HighInterferenceIndication_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndication; +asn_struct_free_f UL_HighInterferenceIndication_free; +asn_struct_print_f UL_HighInterferenceIndication_print; +asn_constr_check_f UL_HighInterferenceIndication_constraint; +ber_type_decoder_f UL_HighInterferenceIndication_decode_ber; +der_type_encoder_f UL_HighInterferenceIndication_encode_der; +xer_type_decoder_f UL_HighInterferenceIndication_decode_xer; +xer_type_encoder_f UL_HighInterferenceIndication_encode_xer; +per_type_decoder_f UL_HighInterferenceIndication_decode_uper; +per_type_encoder_f UL_HighInterferenceIndication_encode_uper; +per_type_decoder_f UL_HighInterferenceIndication_decode_aper; +per_type_encoder_f UL_HighInterferenceIndication_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_HighInterferenceIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c new file mode 100644 index 0000000..af3c2c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-HighInterferenceIndicationInfo-Item.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_HighInterferenceIndicationInfo_Item, target_Cell_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ECGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "target-Cell-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_HighInterferenceIndicationInfo_Item, ul_interferenceindication), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_HighInterferenceIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ul-interferenceindication" + }, + { ATF_POINTER, 1, offsetof(struct UL_HighInterferenceIndicationInfo_Item, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P216, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UL_HighInterferenceIndicationInfo_Item_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UL_HighInterferenceIndicationInfo_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* target-Cell-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-interferenceindication */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_Item_specs_1 = { + sizeof(struct UL_HighInterferenceIndicationInfo_Item), + offsetof(struct UL_HighInterferenceIndicationInfo_Item, _asn_ctx), + asn_MAP_UL_HighInterferenceIndicationInfo_Item_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UL_HighInterferenceIndicationInfo_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo_Item = { + "UL-HighInterferenceIndicationInfo-Item", + "UL-HighInterferenceIndicationInfo-Item", + &asn_OP_SEQUENCE, + asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1, + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1[0]), /* 1 */ + asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UL_HighInterferenceIndicationInfo_Item_1, + 3, /* Elements count */ + &asn_SPC_UL_HighInterferenceIndicationInfo_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h new file mode 100644 index 0000000..478b837 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo-Item.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_HighInterferenceIndicationInfo_Item_H_ +#define _UL_HighInterferenceIndicationInfo_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ECGI.h" +#include "UL-HighInterferenceIndication.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UL-HighInterferenceIndicationInfo-Item */ +typedef struct UL_HighInterferenceIndicationInfo_Item { + ECGI_t target_Cell_ID; + UL_HighInterferenceIndication_t ul_interferenceindication; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_HighInterferenceIndicationInfo_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_HighInterferenceIndicationInfo_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c new file mode 100644 index 0000000..4fd857c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-HighInterferenceIndicationInfo.h" + +#include "UL-HighInterferenceIndicationInfo-Item.h" +asn_per_constraints_t asn_PER_type_UL_HighInterferenceIndicationInfo_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UL_HighInterferenceIndicationInfo_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UL_HighInterferenceIndicationInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_specs_1 = { + sizeof(struct UL_HighInterferenceIndicationInfo), + offsetof(struct UL_HighInterferenceIndicationInfo, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo = { + "UL-HighInterferenceIndicationInfo", + "UL-HighInterferenceIndicationInfo", + &asn_OP_SEQUENCE_OF, + asn_DEF_UL_HighInterferenceIndicationInfo_tags_1, + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_tags_1[0]), /* 1 */ + asn_DEF_UL_HighInterferenceIndicationInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_tags_1) + /sizeof(asn_DEF_UL_HighInterferenceIndicationInfo_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_HighInterferenceIndicationInfo_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UL_HighInterferenceIndicationInfo_1, + 1, /* Single element */ + &asn_SPC_UL_HighInterferenceIndicationInfo_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h new file mode 100644 index 0000000..8519155 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-HighInterferenceIndicationInfo.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_HighInterferenceIndicationInfo_H_ +#define _UL_HighInterferenceIndicationInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UL_HighInterferenceIndicationInfo_Item; + +/* UL-HighInterferenceIndicationInfo */ +typedef struct UL_HighInterferenceIndicationInfo { + A_SEQUENCE_OF(struct UL_HighInterferenceIndicationInfo_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_HighInterferenceIndicationInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_HighInterferenceIndicationInfo; +extern asn_SET_OF_specifics_t asn_SPC_UL_HighInterferenceIndicationInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_UL_HighInterferenceIndicationInfo_1[1]; +extern asn_per_constraints_t asn_PER_type_UL_HighInterferenceIndicationInfo_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_HighInterferenceIndicationInfo_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c new file mode 100644 index 0000000..33f7e39 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-InterferenceOverloadIndication-Item.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_InterferenceOverloadIndication_Item_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UL_InterferenceOverloadIndication_Item_value2enum_1[] = { + { 0, 17, "high-interference" }, + { 1, 19, "medium-interference" }, + { 2, 16, "low-interference" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UL_InterferenceOverloadIndication_Item_enum2value_1[] = { + 0, /* high-interference(0) */ + 2, /* low-interference(2) */ + 1 /* medium-interference(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UL_InterferenceOverloadIndication_Item_specs_1 = { + asn_MAP_UL_InterferenceOverloadIndication_Item_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UL_InterferenceOverloadIndication_Item_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_InterferenceOverloadIndication_Item = { + "UL-InterferenceOverloadIndication-Item", + "UL-InterferenceOverloadIndication-Item", + &asn_OP_NativeEnumerated, + asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1, + sizeof(asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1) + /sizeof(asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1[0]), /* 1 */ + asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1) + /sizeof(asn_DEF_UL_InterferenceOverloadIndication_Item_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_InterferenceOverloadIndication_Item_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UL_InterferenceOverloadIndication_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h new file mode 100644 index 0000000..4f4dec6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication-Item.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_InterferenceOverloadIndication_Item_H_ +#define _UL_InterferenceOverloadIndication_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_InterferenceOverloadIndication_Item { + UL_InterferenceOverloadIndication_Item_high_interference = 0, + UL_InterferenceOverloadIndication_Item_medium_interference = 1, + UL_InterferenceOverloadIndication_Item_low_interference = 2 + /* + * Enumeration is extensible + */ +} e_UL_InterferenceOverloadIndication_Item; + +/* UL-InterferenceOverloadIndication-Item */ +typedef long UL_InterferenceOverloadIndication_Item_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_InterferenceOverloadIndication_Item_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_InterferenceOverloadIndication_Item; +extern const asn_INTEGER_specifics_t asn_SPC_UL_InterferenceOverloadIndication_Item_specs_1; +asn_struct_free_f UL_InterferenceOverloadIndication_Item_free; +asn_struct_print_f UL_InterferenceOverloadIndication_Item_print; +asn_constr_check_f UL_InterferenceOverloadIndication_Item_constraint; +ber_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_ber; +der_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_der; +xer_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_xer; +xer_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_xer; +per_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_uper; +per_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_uper; +per_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_aper; +per_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_InterferenceOverloadIndication_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c new file mode 100644 index 0000000..7726362 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-InterferenceOverloadIndication.h" + +asn_per_constraints_t asn_PER_type_UL_InterferenceOverloadIndication_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 1, 110 } /* (SIZE(1..110)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UL_InterferenceOverloadIndication_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_UL_InterferenceOverloadIndication_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UL_InterferenceOverloadIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UL_InterferenceOverloadIndication_specs_1 = { + sizeof(struct UL_InterferenceOverloadIndication), + offsetof(struct UL_InterferenceOverloadIndication, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_InterferenceOverloadIndication = { + "UL-InterferenceOverloadIndication", + "UL-InterferenceOverloadIndication", + &asn_OP_SEQUENCE_OF, + asn_DEF_UL_InterferenceOverloadIndication_tags_1, + sizeof(asn_DEF_UL_InterferenceOverloadIndication_tags_1) + /sizeof(asn_DEF_UL_InterferenceOverloadIndication_tags_1[0]), /* 1 */ + asn_DEF_UL_InterferenceOverloadIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_InterferenceOverloadIndication_tags_1) + /sizeof(asn_DEF_UL_InterferenceOverloadIndication_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_InterferenceOverloadIndication_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UL_InterferenceOverloadIndication_1, + 1, /* Single element */ + &asn_SPC_UL_InterferenceOverloadIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h new file mode 100644 index 0000000..bd396b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-InterferenceOverloadIndication.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_InterferenceOverloadIndication_H_ +#define _UL_InterferenceOverloadIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UL-InterferenceOverloadIndication-Item.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-InterferenceOverloadIndication */ +typedef struct UL_InterferenceOverloadIndication { + A_SEQUENCE_OF(UL_InterferenceOverloadIndication_Item_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_InterferenceOverloadIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_InterferenceOverloadIndication; +extern asn_SET_OF_specifics_t asn_SPC_UL_InterferenceOverloadIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_UL_InterferenceOverloadIndication_1[1]; +extern asn_per_constraints_t asn_PER_type_UL_InterferenceOverloadIndication_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_InterferenceOverloadIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.c new file mode 100644 index 0000000..89bc807 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-Total-PRB-usage.h" + +int +UL_Total_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_Total_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UL_Total_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_Total_PRB_usage = { + "UL-Total-PRB-usage", + "UL-Total-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_UL_Total_PRB_usage_tags_1, + sizeof(asn_DEF_UL_Total_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_Total_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_UL_Total_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_Total_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_Total_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_Total_PRB_usage_constr_1, UL_Total_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.h new file mode 100644 index 0000000..76fcfb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-Total-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_Total_PRB_usage_H_ +#define _UL_Total_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-Total-PRB-usage */ +typedef long UL_Total_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_Total_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_Total_PRB_usage; +asn_struct_free_f UL_Total_PRB_usage_free; +asn_struct_print_f UL_Total_PRB_usage_print; +asn_constr_check_f UL_Total_PRB_usage_constraint; +ber_type_decoder_f UL_Total_PRB_usage_decode_ber; +der_type_encoder_f UL_Total_PRB_usage_encode_der; +xer_type_decoder_f UL_Total_PRB_usage_decode_xer; +xer_type_encoder_f UL_Total_PRB_usage_encode_xer; +per_type_decoder_f UL_Total_PRB_usage_decode_uper; +per_type_encoder_f UL_Total_PRB_usage_encode_uper; +per_type_decoder_f UL_Total_PRB_usage_decode_aper; +per_type_encoder_f UL_Total_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_Total_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.c new file mode 100644 index 0000000..e50209c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.c @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-UE-Configuration.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_UE_Configuration_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UL_UE_Configuration_value2enum_1[] = { + { 0, 7, "no-data" }, + { 1, 6, "shared" }, + { 2, 4, "only" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UL_UE_Configuration_enum2value_1[] = { + 0, /* no-data(0) */ + 2, /* only(2) */ + 1 /* shared(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UL_UE_Configuration_specs_1 = { + asn_MAP_UL_UE_Configuration_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UL_UE_Configuration_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UL_UE_Configuration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_UE_Configuration = { + "UL-UE-Configuration", + "UL-UE-Configuration", + &asn_OP_NativeEnumerated, + asn_DEF_UL_UE_Configuration_tags_1, + sizeof(asn_DEF_UL_UE_Configuration_tags_1) + /sizeof(asn_DEF_UL_UE_Configuration_tags_1[0]), /* 1 */ + asn_DEF_UL_UE_Configuration_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_UE_Configuration_tags_1) + /sizeof(asn_DEF_UL_UE_Configuration_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_UE_Configuration_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UL_UE_Configuration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.h new file mode 100644 index 0000000..11551a5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-UE-Configuration.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_UE_Configuration_H_ +#define _UL_UE_Configuration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_UE_Configuration { + UL_UE_Configuration_no_data = 0, + UL_UE_Configuration_shared = 1, + UL_UE_Configuration_only = 2 + /* + * Enumeration is extensible + */ +} e_UL_UE_Configuration; + +/* UL-UE-Configuration */ +typedef long UL_UE_Configuration_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_UE_Configuration_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_UE_Configuration; +extern const asn_INTEGER_specifics_t asn_SPC_UL_UE_Configuration_specs_1; +asn_struct_free_f UL_UE_Configuration_free; +asn_struct_print_f UL_UE_Configuration_print; +asn_constr_check_f UL_UE_Configuration_constraint; +ber_type_decoder_f UL_UE_Configuration_decode_ber; +der_type_encoder_f UL_UE_Configuration_encode_der; +xer_type_decoder_f UL_UE_Configuration_decode_xer; +xer_type_encoder_f UL_UE_Configuration_encode_xer; +per_type_decoder_f UL_UE_Configuration_decode_uper; +per_type_encoder_f UL_UE_Configuration_encode_uper; +per_type_decoder_f UL_UE_Configuration_decode_aper; +per_type_encoder_f UL_UE_Configuration_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_UE_Configuration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c new file mode 100644 index 0000000..0cce112 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-non-GBR-PRB-usage.h" + +int +UL_non_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_non_GBR_PRB_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UL_non_GBR_PRB_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_non_GBR_PRB_usage = { + "UL-non-GBR-PRB-usage", + "UL-non-GBR-PRB-usage", + &asn_OP_NativeInteger, + asn_DEF_UL_non_GBR_PRB_usage_tags_1, + sizeof(asn_DEF_UL_non_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_non_GBR_PRB_usage_tags_1[0]), /* 1 */ + asn_DEF_UL_non_GBR_PRB_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_non_GBR_PRB_usage_tags_1) + /sizeof(asn_DEF_UL_non_GBR_PRB_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_non_GBR_PRB_usage_constr_1, UL_non_GBR_PRB_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h new file mode 100644 index 0000000..7aeb88d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-non-GBR-PRB-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_non_GBR_PRB_usage_H_ +#define _UL_non_GBR_PRB_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-non-GBR-PRB-usage */ +typedef long UL_non_GBR_PRB_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_non_GBR_PRB_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_non_GBR_PRB_usage; +asn_struct_free_f UL_non_GBR_PRB_usage_free; +asn_struct_print_f UL_non_GBR_PRB_usage_print; +asn_constr_check_f UL_non_GBR_PRB_usage_constraint; +ber_type_decoder_f UL_non_GBR_PRB_usage_decode_ber; +der_type_encoder_f UL_non_GBR_PRB_usage_encode_der; +xer_type_decoder_f UL_non_GBR_PRB_usage_decode_xer; +xer_type_encoder_f UL_non_GBR_PRB_usage_encode_xer; +per_type_decoder_f UL_non_GBR_PRB_usage_decode_uper; +per_type_encoder_f UL_non_GBR_PRB_usage_encode_uper; +per_type_decoder_f UL_non_GBR_PRB_usage_decode_aper; +per_type_encoder_f UL_non_GBR_PRB_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_non_GBR_PRB_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c new file mode 100644 index 0000000..3f93933 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UL-scheduling-PDCCH-CCE-usage.h" + +int +UL_scheduling_PDCCH_CCE_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UL_scheduling_PDCCH_CCE_usage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_scheduling_PDCCH_CCE_usage = { + "UL-scheduling-PDCCH-CCE-usage", + "UL-scheduling-PDCCH-CCE-usage", + &asn_OP_NativeInteger, + asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1, + sizeof(asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1) + /sizeof(asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */ + asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1) + /sizeof(asn_DEF_UL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UL_scheduling_PDCCH_CCE_usage_constr_1, UL_scheduling_PDCCH_CCE_usage_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h new file mode 100644 index 0000000..66d1116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UL-scheduling-PDCCH-CCE-usage.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UL_scheduling_PDCCH_CCE_usage_H_ +#define _UL_scheduling_PDCCH_CCE_usage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-scheduling-PDCCH-CCE-usage */ +typedef long UL_scheduling_PDCCH_CCE_usage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UL_scheduling_PDCCH_CCE_usage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UL_scheduling_PDCCH_CCE_usage; +asn_struct_free_f UL_scheduling_PDCCH_CCE_usage_free; +asn_struct_print_f UL_scheduling_PDCCH_CCE_usage_print; +asn_constr_check_f UL_scheduling_PDCCH_CCE_usage_constraint; +ber_type_decoder_f UL_scheduling_PDCCH_CCE_usage_decode_ber; +der_type_encoder_f UL_scheduling_PDCCH_CCE_usage_encode_der; +xer_type_decoder_f UL_scheduling_PDCCH_CCE_usage_decode_xer; +xer_type_encoder_f UL_scheduling_PDCCH_CCE_usage_encode_xer; +per_type_decoder_f UL_scheduling_PDCCH_CCE_usage_decode_uper; +per_type_encoder_f UL_scheduling_PDCCH_CCE_usage_encode_uper; +per_type_decoder_f UL_scheduling_PDCCH_CCE_usage_decode_aper; +per_type_encoder_f UL_scheduling_PDCCH_CCE_usage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_scheduling_PDCCH_CCE_usage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.c new file mode 100644 index 0000000..96b54c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ULConfiguration.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ULConfiguration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULConfiguration, uL_PDCP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_UE_Configuration, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uL-PDCP" + }, + { ATF_POINTER, 1, offsetof(struct ULConfiguration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P215, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ULConfiguration_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ULConfiguration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULConfiguration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-PDCP */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULConfiguration_specs_1 = { + sizeof(struct ULConfiguration), + offsetof(struct ULConfiguration, _asn_ctx), + asn_MAP_ULConfiguration_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ULConfiguration_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULConfiguration = { + "ULConfiguration", + "ULConfiguration", + &asn_OP_SEQUENCE, + asn_DEF_ULConfiguration_tags_1, + sizeof(asn_DEF_ULConfiguration_tags_1) + /sizeof(asn_DEF_ULConfiguration_tags_1[0]), /* 1 */ + asn_DEF_ULConfiguration_tags_1, /* Same as above */ + sizeof(asn_DEF_ULConfiguration_tags_1) + /sizeof(asn_DEF_ULConfiguration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULConfiguration_1, + 2, /* Elements count */ + &asn_SPC_ULConfiguration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.h new file mode 100644 index 0000000..75b0680 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULConfiguration.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ULConfiguration_H_ +#define _ULConfiguration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UL-UE-Configuration.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ULConfiguration */ +typedef struct ULConfiguration { + UL_UE_Configuration_t uL_PDCP; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULConfiguration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULConfiguration; +extern asn_SEQUENCE_specifics_t asn_SPC_ULConfiguration_specs_1; +extern asn_TYPE_member_t asn_MBR_ULConfiguration_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULConfiguration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.c new file mode 100644 index 0000000..214e312 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ULOnlySharing.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ULOnlySharing_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULOnlySharing, uLResourceBitmapULOnlySharing), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DataTrafficResources, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLResourceBitmapULOnlySharing" + }, + { ATF_POINTER, 1, offsetof(struct ULOnlySharing, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P217, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ULOnlySharing_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_ULOnlySharing_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULOnlySharing_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLResourceBitmapULOnlySharing */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULOnlySharing_specs_1 = { + sizeof(struct ULOnlySharing), + offsetof(struct ULOnlySharing, _asn_ctx), + asn_MAP_ULOnlySharing_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ULOnlySharing_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULOnlySharing = { + "ULOnlySharing", + "ULOnlySharing", + &asn_OP_SEQUENCE, + asn_DEF_ULOnlySharing_tags_1, + sizeof(asn_DEF_ULOnlySharing_tags_1) + /sizeof(asn_DEF_ULOnlySharing_tags_1[0]), /* 1 */ + asn_DEF_ULOnlySharing_tags_1, /* Same as above */ + sizeof(asn_DEF_ULOnlySharing_tags_1) + /sizeof(asn_DEF_ULOnlySharing_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULOnlySharing_1, + 2, /* Elements count */ + &asn_SPC_ULOnlySharing_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.h new file mode 100644 index 0000000..3714069 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULOnlySharing.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ULOnlySharing_H_ +#define _ULOnlySharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "DataTrafficResources.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ULOnlySharing */ +typedef struct ULOnlySharing { + DataTrafficResources_t uLResourceBitmapULOnlySharing; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULOnlySharing_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULOnlySharing; +extern asn_SEQUENCE_specifics_t asn_SPC_ULOnlySharing_specs_1; +extern asn_TYPE_member_t asn_MBR_ULOnlySharing_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULOnlySharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c new file mode 100644 index 0000000..a9168d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ULResourceBitmapULandDLSharing.h" + +int +ULResourceBitmapULandDLSharing_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const DataTrafficResources_t *st = (const DataTrafficResources_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 6 && size <= 17600)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using DataTrafficResources, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ULResourceBitmapULandDLSharing_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 15, 15, 6, 17600 } /* (SIZE(6..17600)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ULResourceBitmapULandDLSharing_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ULResourceBitmapULandDLSharing = { + "ULResourceBitmapULandDLSharing", + "ULResourceBitmapULandDLSharing", + &asn_OP_BIT_STRING, + asn_DEF_ULResourceBitmapULandDLSharing_tags_1, + sizeof(asn_DEF_ULResourceBitmapULandDLSharing_tags_1) + /sizeof(asn_DEF_ULResourceBitmapULandDLSharing_tags_1[0]), /* 1 */ + asn_DEF_ULResourceBitmapULandDLSharing_tags_1, /* Same as above */ + sizeof(asn_DEF_ULResourceBitmapULandDLSharing_tags_1) + /sizeof(asn_DEF_ULResourceBitmapULandDLSharing_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ULResourceBitmapULandDLSharing_constr_1, ULResourceBitmapULandDLSharing_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h new file mode 100644 index 0000000..da8fabd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourceBitmapULandDLSharing.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ULResourceBitmapULandDLSharing_H_ +#define _ULResourceBitmapULandDLSharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "DataTrafficResources.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ULResourceBitmapULandDLSharing */ +typedef DataTrafficResources_t ULResourceBitmapULandDLSharing_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ULResourceBitmapULandDLSharing_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ULResourceBitmapULandDLSharing; +asn_struct_free_f ULResourceBitmapULandDLSharing_free; +asn_struct_print_f ULResourceBitmapULandDLSharing_print; +asn_constr_check_f ULResourceBitmapULandDLSharing_constraint; +ber_type_decoder_f ULResourceBitmapULandDLSharing_decode_ber; +der_type_encoder_f ULResourceBitmapULandDLSharing_encode_der; +xer_type_decoder_f ULResourceBitmapULandDLSharing_decode_xer; +xer_type_encoder_f ULResourceBitmapULandDLSharing_encode_xer; +per_type_decoder_f ULResourceBitmapULandDLSharing_decode_uper; +per_type_encoder_f ULResourceBitmapULandDLSharing_encode_uper; +per_type_decoder_f ULResourceBitmapULandDLSharing_decode_aper; +per_type_encoder_f ULResourceBitmapULandDLSharing_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULResourceBitmapULandDLSharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.c new file mode 100644 index 0000000..c451175 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ULResourcesULandDLSharing.h" + +asn_per_constraints_t asn_PER_type_ULResourcesULandDLSharing_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ULResourcesULandDLSharing_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULResourcesULandDLSharing, choice.unchanged), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unchanged" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULResourcesULandDLSharing, choice.changed), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULResourceBitmapULandDLSharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "changed" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ULResourcesULandDLSharing_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unchanged */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* changed */ +}; +asn_CHOICE_specifics_t asn_SPC_ULResourcesULandDLSharing_specs_1 = { + sizeof(struct ULResourcesULandDLSharing), + offsetof(struct ULResourcesULandDLSharing, _asn_ctx), + offsetof(struct ULResourcesULandDLSharing, present), + sizeof(((struct ULResourcesULandDLSharing *)0)->present), + asn_MAP_ULResourcesULandDLSharing_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ULResourcesULandDLSharing = { + "ULResourcesULandDLSharing", + "ULResourcesULandDLSharing", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ULResourcesULandDLSharing_constr_1, CHOICE_constraint }, + asn_MBR_ULResourcesULandDLSharing_1, + 2, /* Elements count */ + &asn_SPC_ULResourcesULandDLSharing_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.h new file mode 100644 index 0000000..3ebd15a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULResourcesULandDLSharing.h @@ -0,0 +1,77 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ULResourcesULandDLSharing_H_ +#define _ULResourcesULandDLSharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NULL.h" +#include "ULResourceBitmapULandDLSharing.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ULResourcesULandDLSharing_PR { + ULResourcesULandDLSharing_PR_NOTHING, /* No components present */ + ULResourcesULandDLSharing_PR_unchanged, + ULResourcesULandDLSharing_PR_changed + /* Extensions may appear below */ + +} ULResourcesULandDLSharing_PR; + +/* ULResourcesULandDLSharing */ +typedef struct ULResourcesULandDLSharing { + ULResourcesULandDLSharing_PR present; + union ULResourcesULandDLSharing_u { + NULL_t unchanged; + ULResourceBitmapULandDLSharing_t changed; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULResourcesULandDLSharing_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULResourcesULandDLSharing; +extern asn_CHOICE_specifics_t asn_SPC_ULResourcesULandDLSharing_specs_1; +extern asn_TYPE_member_t asn_MBR_ULResourcesULandDLSharing_1[2]; +extern asn_per_constraints_t asn_PER_type_ULResourcesULandDLSharing_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULResourcesULandDLSharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.c new file mode 100644 index 0000000..e09268b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "ULandDLSharing.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_ULandDLSharing_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULandDLSharing, uLResourcesULandDLSharing), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ULResourcesULandDLSharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "uLResourcesULandDLSharing" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULandDLSharing, dLResourcesULandDLSharing), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_DLResourcesULandDLSharing, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "dLResourcesULandDLSharing" + }, + { ATF_POINTER, 1, offsetof(struct ULandDLSharing, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P214, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_ULandDLSharing_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ULandDLSharing_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ULandDLSharing_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLResourcesULandDLSharing */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dLResourcesULandDLSharing */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ULandDLSharing_specs_1 = { + sizeof(struct ULandDLSharing), + offsetof(struct ULandDLSharing, _asn_ctx), + asn_MAP_ULandDLSharing_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ULandDLSharing_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ULandDLSharing = { + "ULandDLSharing", + "ULandDLSharing", + &asn_OP_SEQUENCE, + asn_DEF_ULandDLSharing_tags_1, + sizeof(asn_DEF_ULandDLSharing_tags_1) + /sizeof(asn_DEF_ULandDLSharing_tags_1[0]), /* 1 */ + asn_DEF_ULandDLSharing_tags_1, /* Same as above */ + sizeof(asn_DEF_ULandDLSharing_tags_1) + /sizeof(asn_DEF_ULandDLSharing_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ULandDLSharing_1, + 3, /* Elements count */ + &asn_SPC_ULandDLSharing_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.h new file mode 100644 index 0000000..d8dc31d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ULandDLSharing.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _ULandDLSharing_H_ +#define _ULandDLSharing_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ULResourcesULandDLSharing.h" +#include "DLResourcesULandDLSharing.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* ULandDLSharing */ +typedef struct ULandDLSharing { + ULResourcesULandDLSharing_t uLResourcesULandDLSharing; + DLResourcesULandDLSharing_t dLResourcesULandDLSharing; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULandDLSharing_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULandDLSharing; +extern asn_SEQUENCE_specifics_t asn_SPC_ULandDLSharing_specs_1; +extern asn_TYPE_member_t asn_MBR_ULandDLSharing_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULandDLSharing_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..54133f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,456 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_ricSubscription = 201; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_ricSubscriptionDelete = 202; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_ricServiceUpdate = 203; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_ricControl = 204; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_x2Setup = 6; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_endcX2Setup = 36; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_resourceStatusReportingInitiation = 9; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_8_id_eNBConfigurationUpdate = 8; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_9_id_endcConfigurationUpdate = 37; +static const long asn_VAL_9_reject = 0; +static const long asn_VAL_10_id_reset = 7; +static const long asn_VAL_10_reject = 0; +static const long asn_VAL_11_id_ricIndication = 205; +static const long asn_VAL_11_ignore = 1; +static const long asn_VAL_12_id_ricServiceQuery = 206; +static const long asn_VAL_12_ignore = 1; +static const long asn_VAL_13_id_loadIndication = 2; +static const long asn_VAL_13_ignore = 1; +static const long asn_VAL_14_id_gNBStatusIndication = 45; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_15_id_resourceStatusReporting = 10; +static const long asn_VAL_15_ignore = 1; +static const long asn_VAL_16_id_errorIndication = 3; +static const long asn_VAL_16_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_ricSubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_ricSubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_ricServiceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_ricControl }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_X2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_X2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_x2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCX2SetupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCX2SetupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_endcX2Setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ResourceStatusFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_resourceStatusReportingInitiation }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENBConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENBConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_eNBConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ENDCConfigurationUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_ENDCConfigurationUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_endcConfigurationUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_10_id_reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_11_id_ricIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_12_id_ricServiceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_LoadInformation }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_13_id_loadIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_GNBStatusIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_14_id_gNBStatusIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResourceStatusUpdate }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_15_id_resourceStatusReporting }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_16_id_errorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 16, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.X2SetupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_X2SetupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "X2SetupFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.ENDCX2SetupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCX2SetupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCX2SetupFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.ResourceStatusFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResourceStatusFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResourceStatusFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.ENBConfigurationUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENBConfigurationUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENBConfigurationUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.ENDCConfigurationUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ENDCConfigurationUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ENDCConfigurationUpdateFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* X2SetupFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ENDCX2SetupFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* ResourceStatusFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* ENBConfigurationUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ENDCConfigurationUpdateFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..4602923 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,130 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "../../asnFiles/e2ap-v031.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "X2SetupRequest.h" +#include "X2SetupResponse.h" +#include "X2SetupFailure.h" +#include "ENDCX2SetupRequest.h" +#include "ENDCX2SetupResponse.h" +#include "ENDCX2SetupFailure.h" +#include "ResourceStatusRequest.h" +#include "ResourceStatusResponse.h" +#include "ResourceStatusFailure.h" +#include "ENBConfigurationUpdate.h" +#include "ENBConfigurationUpdateAcknowledge.h" +#include "ENBConfigurationUpdateFailure.h" +#include "ENDCConfigurationUpdate.h" +#include "ENDCConfigurationUpdateAcknowledge.h" +#include "ENDCConfigurationUpdateFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "LoadInformation.h" +#include "GNBStatusIndication.h" +#include "ResourceStatusUpdate.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_X2SetupFailure, + UnsuccessfulOutcome__value_PR_ENDCX2SetupFailure, + UnsuccessfulOutcome__value_PR_ResourceStatusFailure, + UnsuccessfulOutcome__value_PR_ENBConfigurationUpdateFailure, + UnsuccessfulOutcome__value_PR_ENDCConfigurationUpdateFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + X2SetupFailure_t X2SetupFailure; + ENDCX2SetupFailure_t ENDCX2SetupFailure; + ResourceStatusFailure_t ResourceStatusFailure; + ENBConfigurationUpdateFailure_t ENBConfigurationUpdateFailure; + ENDCConfigurationUpdateFailure_t ENDCConfigurationUpdateFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.c new file mode 100644 index 0000000..99ca85c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.c @@ -0,0 +1,82 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UsableABSInformation.h" + +#include "UsableABSInformationFDD.h" +#include "UsableABSInformationTDD.h" +asn_per_constraints_t asn_PER_type_UsableABSInformation_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UsableABSInformation_1[] = { + { ATF_POINTER, 0, offsetof(struct UsableABSInformation, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UsableABSInformationFDD, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fdd" + }, + { ATF_POINTER, 0, offsetof(struct UsableABSInformation, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UsableABSInformationTDD, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "tdd" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_UsableABSInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */ +}; +asn_CHOICE_specifics_t asn_SPC_UsableABSInformation_specs_1 = { + sizeof(struct UsableABSInformation), + offsetof(struct UsableABSInformation, _asn_ctx), + offsetof(struct UsableABSInformation, present), + sizeof(((struct UsableABSInformation *)0)->present), + asn_MAP_UsableABSInformation_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_UsableABSInformation = { + "UsableABSInformation", + "UsableABSInformation", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_UsableABSInformation_constr_1, CHOICE_constraint }, + asn_MBR_UsableABSInformation_1, + 2, /* Elements count */ + &asn_SPC_UsableABSInformation_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.h new file mode 100644 index 0000000..87ddb44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformation.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UsableABSInformation_H_ +#define _UsableABSInformation_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UsableABSInformation_PR { + UsableABSInformation_PR_NOTHING, /* No components present */ + UsableABSInformation_PR_fdd, + UsableABSInformation_PR_tdd + /* Extensions may appear below */ + +} UsableABSInformation_PR; + +/* Forward declarations */ +struct UsableABSInformationFDD; +struct UsableABSInformationTDD; + +/* UsableABSInformation */ +typedef struct UsableABSInformation { + UsableABSInformation_PR present; + union UsableABSInformation_u { + struct UsableABSInformationFDD *fdd; + struct UsableABSInformationTDD *tdd; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UsableABSInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UsableABSInformation; +extern asn_CHOICE_specifics_t asn_SPC_UsableABSInformation_specs_1; +extern asn_TYPE_member_t asn_MBR_UsableABSInformation_1[2]; +extern asn_per_constraints_t asn_PER_type_UsableABSInformation_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UsableABSInformation_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.c new file mode 100644 index 0000000..0ec32bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.c @@ -0,0 +1,117 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UsableABSInformationFDD.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_usable_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_usable_abs_pattern_info_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UsableABSInformationFDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationFDD, usable_abs_pattern_info), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_usable_abs_pattern_info_constr_2, memb_usable_abs_pattern_info_constraint_1 }, + 0, 0, /* No default value */ + "usable-abs-pattern-info" + }, + { ATF_POINTER, 1, offsetof(struct UsableABSInformationFDD, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P218, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UsableABSInformationFDD_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UsableABSInformationFDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UsableABSInformationFDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* usable-abs-pattern-info */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationFDD_specs_1 = { + sizeof(struct UsableABSInformationFDD), + offsetof(struct UsableABSInformationFDD, _asn_ctx), + asn_MAP_UsableABSInformationFDD_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UsableABSInformationFDD_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UsableABSInformationFDD = { + "UsableABSInformationFDD", + "UsableABSInformationFDD", + &asn_OP_SEQUENCE, + asn_DEF_UsableABSInformationFDD_tags_1, + sizeof(asn_DEF_UsableABSInformationFDD_tags_1) + /sizeof(asn_DEF_UsableABSInformationFDD_tags_1[0]), /* 1 */ + asn_DEF_UsableABSInformationFDD_tags_1, /* Same as above */ + sizeof(asn_DEF_UsableABSInformationFDD_tags_1) + /sizeof(asn_DEF_UsableABSInformationFDD_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UsableABSInformationFDD_1, + 2, /* Elements count */ + &asn_SPC_UsableABSInformationFDD_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.h new file mode 100644 index 0000000..58b31e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationFDD.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UsableABSInformationFDD_H_ +#define _UsableABSInformationFDD_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UsableABSInformationFDD */ +typedef struct UsableABSInformationFDD { + BIT_STRING_t usable_abs_pattern_info; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UsableABSInformationFDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UsableABSInformationFDD; +extern asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationFDD_specs_1; +extern asn_TYPE_member_t asn_MBR_UsableABSInformationFDD_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UsableABSInformationFDD_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.c new file mode 100644 index 0000000..5ce5551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.c @@ -0,0 +1,117 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UsableABSInformationTDD.h" + +#include "ProtocolExtensionContainer.h" +static int +memb_usaable_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 1 && size <= 70)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_usaable_abs_pattern_info_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED | APC_EXTENSIBLE, 7, 7, 1, 70 } /* (SIZE(1..70,...)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UsableABSInformationTDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UsableABSInformationTDD, usaable_abs_pattern_info), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_usaable_abs_pattern_info_constr_2, memb_usaable_abs_pattern_info_constraint_1 }, + 0, 0, /* No default value */ + "usaable-abs-pattern-info" + }, + { ATF_POINTER, 1, offsetof(struct UsableABSInformationTDD, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P219, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_UsableABSInformationTDD_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UsableABSInformationTDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UsableABSInformationTDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* usaable-abs-pattern-info */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationTDD_specs_1 = { + sizeof(struct UsableABSInformationTDD), + offsetof(struct UsableABSInformationTDD, _asn_ctx), + asn_MAP_UsableABSInformationTDD_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UsableABSInformationTDD_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UsableABSInformationTDD = { + "UsableABSInformationTDD", + "UsableABSInformationTDD", + &asn_OP_SEQUENCE, + asn_DEF_UsableABSInformationTDD_tags_1, + sizeof(asn_DEF_UsableABSInformationTDD_tags_1) + /sizeof(asn_DEF_UsableABSInformationTDD_tags_1[0]), /* 1 */ + asn_DEF_UsableABSInformationTDD_tags_1, /* Same as above */ + sizeof(asn_DEF_UsableABSInformationTDD_tags_1) + /sizeof(asn_DEF_UsableABSInformationTDD_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UsableABSInformationTDD_1, + 2, /* Elements count */ + &asn_SPC_UsableABSInformationTDD_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.h new file mode 100644 index 0000000..5d84d30 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UsableABSInformationTDD.h @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UsableABSInformationTDD_H_ +#define _UsableABSInformationTDD_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* UsableABSInformationTDD */ +typedef struct UsableABSInformationTDD { + BIT_STRING_t usaable_abs_pattern_info; + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UsableABSInformationTDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UsableABSInformationTDD; +extern asn_SEQUENCE_specifics_t asn_SPC_UsableABSInformationTDD_specs_1; +extern asn_TYPE_member_t asn_MBR_UsableABSInformationTDD_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UsableABSInformationTDD_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c new file mode 100644 index 0000000..4bca7d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "UserPlaneTrafficActivityReport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_UserPlaneTrafficActivityReport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UserPlaneTrafficActivityReport_value2enum_1[] = { + { 0, 8, "inactive" }, + { 1, 12, "re-activated" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UserPlaneTrafficActivityReport_enum2value_1[] = { + 0, /* inactive(0) */ + 1 /* re-activated(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UserPlaneTrafficActivityReport_specs_1 = { + asn_MAP_UserPlaneTrafficActivityReport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UserPlaneTrafficActivityReport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UserPlaneTrafficActivityReport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UserPlaneTrafficActivityReport = { + "UserPlaneTrafficActivityReport", + "UserPlaneTrafficActivityReport", + &asn_OP_NativeEnumerated, + asn_DEF_UserPlaneTrafficActivityReport_tags_1, + sizeof(asn_DEF_UserPlaneTrafficActivityReport_tags_1) + /sizeof(asn_DEF_UserPlaneTrafficActivityReport_tags_1[0]), /* 1 */ + asn_DEF_UserPlaneTrafficActivityReport_tags_1, /* Same as above */ + sizeof(asn_DEF_UserPlaneTrafficActivityReport_tags_1) + /sizeof(asn_DEF_UserPlaneTrafficActivityReport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UserPlaneTrafficActivityReport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UserPlaneTrafficActivityReport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h new file mode 100644 index 0000000..721828e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/UserPlaneTrafficActivityReport.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _UserPlaneTrafficActivityReport_H_ +#define _UserPlaneTrafficActivityReport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UserPlaneTrafficActivityReport { + UserPlaneTrafficActivityReport_inactive = 0, + UserPlaneTrafficActivityReport_re_activated = 1 + /* + * Enumeration is extensible + */ +} e_UserPlaneTrafficActivityReport; + +/* UserPlaneTrafficActivityReport */ +typedef long UserPlaneTrafficActivityReport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UserPlaneTrafficActivityReport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UserPlaneTrafficActivityReport; +extern const asn_INTEGER_specifics_t asn_SPC_UserPlaneTrafficActivityReport_specs_1; +asn_struct_free_f UserPlaneTrafficActivityReport_free; +asn_struct_print_f UserPlaneTrafficActivityReport_print; +asn_constr_check_f UserPlaneTrafficActivityReport_constraint; +ber_type_decoder_f UserPlaneTrafficActivityReport_decode_ber; +der_type_encoder_f UserPlaneTrafficActivityReport_encode_der; +xer_type_decoder_f UserPlaneTrafficActivityReport_decode_xer; +xer_type_encoder_f UserPlaneTrafficActivityReport_encode_xer; +per_type_decoder_f UserPlaneTrafficActivityReport_decode_uper; +per_type_encoder_f UserPlaneTrafficActivityReport_encode_uper; +per_type_decoder_f UserPlaneTrafficActivityReport_decode_aper; +per_type_encoder_f UserPlaneTrafficActivityReport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UserPlaneTrafficActivityReport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.c new file mode 100644 index 0000000..9ceb59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.c @@ -0,0 +1,91 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "V2XServicesAuthorized.h" + +#include "ProtocolExtensionContainer.h" +asn_TYPE_member_t asn_MBR_V2XServicesAuthorized_1[] = { + { ATF_POINTER, 3, offsetof(struct V2XServicesAuthorized, vehicleUE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_VehicleUE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "vehicleUE" + }, + { ATF_POINTER, 2, offsetof(struct V2XServicesAuthorized, pedestrianUE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PedestrianUE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pedestrianUE" + }, + { ATF_POINTER, 1, offsetof(struct V2XServicesAuthorized, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P220, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_V2XServicesAuthorized_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_V2XServicesAuthorized_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_V2XServicesAuthorized_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* vehicleUE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pedestrianUE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_V2XServicesAuthorized_specs_1 = { + sizeof(struct V2XServicesAuthorized), + offsetof(struct V2XServicesAuthorized, _asn_ctx), + asn_MAP_V2XServicesAuthorized_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_V2XServicesAuthorized_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_V2XServicesAuthorized = { + "V2XServicesAuthorized", + "V2XServicesAuthorized", + &asn_OP_SEQUENCE, + asn_DEF_V2XServicesAuthorized_tags_1, + sizeof(asn_DEF_V2XServicesAuthorized_tags_1) + /sizeof(asn_DEF_V2XServicesAuthorized_tags_1[0]), /* 1 */ + asn_DEF_V2XServicesAuthorized_tags_1, /* Same as above */ + sizeof(asn_DEF_V2XServicesAuthorized_tags_1) + /sizeof(asn_DEF_V2XServicesAuthorized_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_V2XServicesAuthorized_1, + 3, /* Elements count */ + &asn_SPC_V2XServicesAuthorized_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.h new file mode 100644 index 0000000..b0204af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/V2XServicesAuthorized.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _V2XServicesAuthorized_H_ +#define _V2XServicesAuthorized_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "VehicleUE.h" +#include "PedestrianUE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolExtensionContainer; + +/* V2XServicesAuthorized */ +typedef struct V2XServicesAuthorized { + VehicleUE_t *vehicleUE; /* OPTIONAL */ + PedestrianUE_t *pedestrianUE; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} V2XServicesAuthorized_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_V2XServicesAuthorized; +extern asn_SEQUENCE_specifics_t asn_SPC_V2XServicesAuthorized_specs_1; +extern asn_TYPE_member_t asn_MBR_V2XServicesAuthorized_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _V2XServicesAuthorized_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.c new file mode 100644 index 0000000..6f09671 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.c @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "VehicleUE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_VehicleUE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_VehicleUE_value2enum_1[] = { + { 0, 10, "authorized" }, + { 1, 14, "not-authorized" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_VehicleUE_enum2value_1[] = { + 0, /* authorized(0) */ + 1 /* not-authorized(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_VehicleUE_specs_1 = { + asn_MAP_VehicleUE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_VehicleUE_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_VehicleUE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_VehicleUE = { + "VehicleUE", + "VehicleUE", + &asn_OP_NativeEnumerated, + asn_DEF_VehicleUE_tags_1, + sizeof(asn_DEF_VehicleUE_tags_1) + /sizeof(asn_DEF_VehicleUE_tags_1[0]), /* 1 */ + asn_DEF_VehicleUE_tags_1, /* Same as above */ + sizeof(asn_DEF_VehicleUE_tags_1) + /sizeof(asn_DEF_VehicleUE_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_VehicleUE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_VehicleUE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.h new file mode 100644 index 0000000..43ff0ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/VehicleUE.h @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _VehicleUE_H_ +#define _VehicleUE_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum VehicleUE { + VehicleUE_authorized = 0, + VehicleUE_not_authorized = 1 + /* + * Enumeration is extensible + */ +} e_VehicleUE; + +/* VehicleUE */ +typedef long VehicleUE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_VehicleUE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_VehicleUE; +extern const asn_INTEGER_specifics_t asn_SPC_VehicleUE_specs_1; +asn_struct_free_f VehicleUE_free; +asn_struct_print_f VehicleUE_print; +asn_constr_check_f VehicleUE_constraint; +ber_type_decoder_f VehicleUE_decode_ber; +der_type_encoder_f VehicleUE_encode_der; +xer_type_decoder_f VehicleUE_decode_xer; +xer_type_encoder_f VehicleUE_encode_xer; +per_type_decoder_f VehicleUE_decode_uper; +per_type_encoder_f VehicleUE_encode_uper; +per_type_decoder_f VehicleUE_decode_aper; +per_type_encoder_f VehicleUE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _VehicleUE_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.c new file mode 100644 index 0000000..7df46a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.c @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WLANMeasConfig.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_WLANMeasConfig_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_WLANMeasConfig_value2enum_1[] = { + { 0, 5, "setup" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_WLANMeasConfig_enum2value_1[] = { + 0 /* setup(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_WLANMeasConfig_specs_1 = { + asn_MAP_WLANMeasConfig_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_WLANMeasConfig_enum2value_1, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_WLANMeasConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_WLANMeasConfig = { + "WLANMeasConfig", + "WLANMeasConfig", + &asn_OP_NativeEnumerated, + asn_DEF_WLANMeasConfig_tags_1, + sizeof(asn_DEF_WLANMeasConfig_tags_1) + /sizeof(asn_DEF_WLANMeasConfig_tags_1[0]), /* 1 */ + asn_DEF_WLANMeasConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_WLANMeasConfig_tags_1) + /sizeof(asn_DEF_WLANMeasConfig_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_WLANMeasConfig_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_WLANMeasConfig_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.h new file mode 100644 index 0000000..be02f1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfig.h @@ -0,0 +1,71 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WLANMeasConfig_H_ +#define _WLANMeasConfig_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum WLANMeasConfig { + WLANMeasConfig_setup = 0 + /* + * Enumeration is extensible + */ +} e_WLANMeasConfig; + +/* WLANMeasConfig */ +typedef long WLANMeasConfig_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_WLANMeasConfig_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_WLANMeasConfig; +extern const asn_INTEGER_specifics_t asn_SPC_WLANMeasConfig_specs_1; +asn_struct_free_f WLANMeasConfig_free; +asn_struct_print_f WLANMeasConfig_print; +asn_constr_check_f WLANMeasConfig_constraint; +ber_type_decoder_f WLANMeasConfig_decode_ber; +der_type_encoder_f WLANMeasConfig_encode_der; +xer_type_decoder_f WLANMeasConfig_decode_xer; +xer_type_encoder_f WLANMeasConfig_encode_xer; +per_type_decoder_f WLANMeasConfig_decode_uper; +per_type_encoder_f WLANMeasConfig_encode_uper; +per_type_decoder_f WLANMeasConfig_decode_aper; +per_type_encoder_f WLANMeasConfig_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _WLANMeasConfig_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.c new file mode 100644 index 0000000..5bcbcbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.c @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WLANMeasConfigNameList.h" + +asn_per_constraints_t asn_PER_type_WLANMeasConfigNameList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_WLANMeasConfigNameList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_WLANName, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_WLANMeasConfigNameList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_WLANMeasConfigNameList_specs_1 = { + sizeof(struct WLANMeasConfigNameList), + offsetof(struct WLANMeasConfigNameList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_WLANMeasConfigNameList = { + "WLANMeasConfigNameList", + "WLANMeasConfigNameList", + &asn_OP_SEQUENCE_OF, + asn_DEF_WLANMeasConfigNameList_tags_1, + sizeof(asn_DEF_WLANMeasConfigNameList_tags_1) + /sizeof(asn_DEF_WLANMeasConfigNameList_tags_1[0]), /* 1 */ + asn_DEF_WLANMeasConfigNameList_tags_1, /* Same as above */ + sizeof(asn_DEF_WLANMeasConfigNameList_tags_1) + /sizeof(asn_DEF_WLANMeasConfigNameList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_WLANMeasConfigNameList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_WLANMeasConfigNameList_1, + 1, /* Single element */ + &asn_SPC_WLANMeasConfigNameList_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.h new file mode 100644 index 0000000..6263834 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasConfigNameList.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WLANMeasConfigNameList_H_ +#define _WLANMeasConfigNameList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "WLANName.h" +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* WLANMeasConfigNameList */ +typedef struct WLANMeasConfigNameList { + A_SEQUENCE_OF(WLANName_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WLANMeasConfigNameList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_WLANMeasConfigNameList; +extern asn_SET_OF_specifics_t asn_SPC_WLANMeasConfigNameList_specs_1; +extern asn_TYPE_member_t asn_MBR_WLANMeasConfigNameList_1[1]; +extern asn_per_constraints_t asn_PER_type_WLANMeasConfigNameList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _WLANMeasConfigNameList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.c new file mode 100644 index 0000000..40893a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.c @@ -0,0 +1,204 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WLANMeasurementConfiguration.h" + +#include "WLANMeasConfigNameList.h" +#include "ProtocolExtensionContainer.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_wlan_rssi_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_wlan_rtt_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_wlan_rssi_value2enum_4[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_wlan_rssi_enum2value_4[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_wlan_rssi_specs_4 = { + asn_MAP_wlan_rssi_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_wlan_rssi_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_wlan_rssi_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_wlan_rssi_4 = { + "wlan-rssi", + "wlan-rssi", + &asn_OP_NativeEnumerated, + asn_DEF_wlan_rssi_tags_4, + sizeof(asn_DEF_wlan_rssi_tags_4) + /sizeof(asn_DEF_wlan_rssi_tags_4[0]) - 1, /* 1 */ + asn_DEF_wlan_rssi_tags_4, /* Same as above */ + sizeof(asn_DEF_wlan_rssi_tags_4) + /sizeof(asn_DEF_wlan_rssi_tags_4[0]), /* 2 */ + { 0, &asn_PER_type_wlan_rssi_constr_4, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_wlan_rssi_specs_4 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_wlan_rtt_value2enum_7[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_wlan_rtt_enum2value_7[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_wlan_rtt_specs_7 = { + asn_MAP_wlan_rtt_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_wlan_rtt_enum2value_7, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_wlan_rtt_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_wlan_rtt_7 = { + "wlan-rtt", + "wlan-rtt", + &asn_OP_NativeEnumerated, + asn_DEF_wlan_rtt_tags_7, + sizeof(asn_DEF_wlan_rtt_tags_7) + /sizeof(asn_DEF_wlan_rtt_tags_7[0]) - 1, /* 1 */ + asn_DEF_wlan_rtt_tags_7, /* Same as above */ + sizeof(asn_DEF_wlan_rtt_tags_7) + /sizeof(asn_DEF_wlan_rtt_tags_7[0]), /* 2 */ + { 0, &asn_PER_type_wlan_rtt_constr_7, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_wlan_rtt_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_WLANMeasurementConfiguration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct WLANMeasurementConfiguration, wlanMeasConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WLANMeasConfig, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wlanMeasConfig" + }, + { ATF_POINTER, 4, offsetof(struct WLANMeasurementConfiguration, wlanMeasConfigNameList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WLANMeasConfigNameList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wlanMeasConfigNameList" + }, + { ATF_POINTER, 3, offsetof(struct WLANMeasurementConfiguration, wlan_rssi), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_wlan_rssi_4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wlan-rssi" + }, + { ATF_POINTER, 2, offsetof(struct WLANMeasurementConfiguration, wlan_rtt), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_wlan_rtt_7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wlan-rtt" + }, + { ATF_POINTER, 1, offsetof(struct WLANMeasurementConfiguration, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P222, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_WLANMeasurementConfiguration_oms_1[] = { 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_WLANMeasurementConfiguration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_WLANMeasurementConfiguration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wlanMeasConfig */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* wlanMeasConfigNameList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* wlan-rssi */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* wlan-rtt */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_WLANMeasurementConfiguration_specs_1 = { + sizeof(struct WLANMeasurementConfiguration), + offsetof(struct WLANMeasurementConfiguration, _asn_ctx), + asn_MAP_WLANMeasurementConfiguration_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_WLANMeasurementConfiguration_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_WLANMeasurementConfiguration = { + "WLANMeasurementConfiguration", + "WLANMeasurementConfiguration", + &asn_OP_SEQUENCE, + asn_DEF_WLANMeasurementConfiguration_tags_1, + sizeof(asn_DEF_WLANMeasurementConfiguration_tags_1) + /sizeof(asn_DEF_WLANMeasurementConfiguration_tags_1[0]), /* 1 */ + asn_DEF_WLANMeasurementConfiguration_tags_1, /* Same as above */ + sizeof(asn_DEF_WLANMeasurementConfiguration_tags_1) + /sizeof(asn_DEF_WLANMeasurementConfiguration_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_WLANMeasurementConfiguration_1, + 5, /* Elements count */ + &asn_SPC_WLANMeasurementConfiguration_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.h new file mode 100644 index 0000000..2f39048 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANMeasurementConfiguration.h @@ -0,0 +1,87 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WLANMeasurementConfiguration_H_ +#define _WLANMeasurementConfiguration_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "WLANMeasConfig.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum WLANMeasurementConfiguration__wlan_rssi { + WLANMeasurementConfiguration__wlan_rssi_true = 0 + /* + * Enumeration is extensible + */ +} e_WLANMeasurementConfiguration__wlan_rssi; +typedef enum WLANMeasurementConfiguration__wlan_rtt { + WLANMeasurementConfiguration__wlan_rtt_true = 0 + /* + * Enumeration is extensible + */ +} e_WLANMeasurementConfiguration__wlan_rtt; + +/* Forward declarations */ +struct WLANMeasConfigNameList; +struct ProtocolExtensionContainer; + +/* WLANMeasurementConfiguration */ +typedef struct WLANMeasurementConfiguration { + WLANMeasConfig_t wlanMeasConfig; + struct WLANMeasConfigNameList *wlanMeasConfigNameList; /* OPTIONAL */ + long *wlan_rssi; /* OPTIONAL */ + long *wlan_rtt; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WLANMeasurementConfiguration_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_wlan_rssi_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_wlan_rtt_7; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_WLANMeasurementConfiguration; +extern asn_SEQUENCE_specifics_t asn_SPC_WLANMeasurementConfiguration_specs_1; +extern asn_TYPE_member_t asn_MBR_WLANMeasurementConfiguration_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _WLANMeasurementConfiguration_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.c new file mode 100644 index 0000000..b2d1764 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WLANName.h" + +int +WLANName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_WLANName_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_WLANName_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_WLANName = { + "WLANName", + "WLANName", + &asn_OP_OCTET_STRING, + asn_DEF_WLANName_tags_1, + sizeof(asn_DEF_WLANName_tags_1) + /sizeof(asn_DEF_WLANName_tags_1[0]), /* 1 */ + asn_DEF_WLANName_tags_1, /* Same as above */ + sizeof(asn_DEF_WLANName_tags_1) + /sizeof(asn_DEF_WLANName_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_WLANName_constr_1, WLANName_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.h new file mode 100644 index 0000000..b201046 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WLANName.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WLANName_H_ +#define _WLANName_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* WLANName */ +typedef OCTET_STRING_t WLANName_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_WLANName_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_WLANName; +asn_struct_free_f WLANName_free; +asn_struct_print_f WLANName_print; +asn_constr_check_f WLANName_constraint; +ber_type_decoder_f WLANName_decode_ber; +der_type_encoder_f WLANName_encode_der; +xer_type_decoder_f WLANName_decode_xer; +xer_type_encoder_f WLANName_encode_xer; +per_type_decoder_f WLANName_decode_uper; +per_type_encoder_f WLANName_encode_uper; +per_type_decoder_f WLANName_decode_aper; +per_type_encoder_f WLANName_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _WLANName_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.c new file mode 100644 index 0000000..0018a5d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.c @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WT-UE-XwAP-ID.h" + +int +WT_UE_XwAP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_WT_UE_XwAP_ID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_WT_UE_XwAP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_WT_UE_XwAP_ID = { + "WT-UE-XwAP-ID", + "WT-UE-XwAP-ID", + &asn_OP_OCTET_STRING, + asn_DEF_WT_UE_XwAP_ID_tags_1, + sizeof(asn_DEF_WT_UE_XwAP_ID_tags_1) + /sizeof(asn_DEF_WT_UE_XwAP_ID_tags_1[0]), /* 1 */ + asn_DEF_WT_UE_XwAP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_WT_UE_XwAP_ID_tags_1) + /sizeof(asn_DEF_WT_UE_XwAP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_WT_UE_XwAP_ID_constr_1, WT_UE_XwAP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.h new file mode 100644 index 0000000..b919b64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WT-UE-XwAP-ID.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WT_UE_XwAP_ID_H_ +#define _WT_UE_XwAP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* WT-UE-XwAP-ID */ +typedef OCTET_STRING_t WT_UE_XwAP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_WT_UE_XwAP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_WT_UE_XwAP_ID; +asn_struct_free_f WT_UE_XwAP_ID_free; +asn_struct_print_f WT_UE_XwAP_ID_print; +asn_constr_check_f WT_UE_XwAP_ID_constraint; +ber_type_decoder_f WT_UE_XwAP_ID_decode_ber; +der_type_encoder_f WT_UE_XwAP_ID_encode_der; +xer_type_decoder_f WT_UE_XwAP_ID_decode_xer; +xer_type_encoder_f WT_UE_XwAP_ID_encode_xer; +per_type_decoder_f WT_UE_XwAP_ID_decode_uper; +per_type_encoder_f WT_UE_XwAP_ID_encode_uper; +per_type_decoder_f WT_UE_XwAP_ID_decode_aper; +per_type_encoder_f WT_UE_XwAP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _WT_UE_XwAP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.c new file mode 100644 index 0000000..863d817 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.c @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WTID-Long-Type2.h" + +int +WTID_Long_Type2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 48)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_WTID_Long_Type2_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 48, 48 } /* (SIZE(48..48)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_WTID_Long_Type2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_WTID_Long_Type2 = { + "WTID-Long-Type2", + "WTID-Long-Type2", + &asn_OP_BIT_STRING, + asn_DEF_WTID_Long_Type2_tags_1, + sizeof(asn_DEF_WTID_Long_Type2_tags_1) + /sizeof(asn_DEF_WTID_Long_Type2_tags_1[0]), /* 1 */ + asn_DEF_WTID_Long_Type2_tags_1, /* Same as above */ + sizeof(asn_DEF_WTID_Long_Type2_tags_1) + /sizeof(asn_DEF_WTID_Long_Type2_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_WTID_Long_Type2_constr_1, WTID_Long_Type2_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.h new file mode 100644 index 0000000..3a5332e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Long-Type2.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WTID_Long_Type2_H_ +#define _WTID_Long_Type2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* WTID-Long-Type2 */ +typedef BIT_STRING_t WTID_Long_Type2_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_WTID_Long_Type2_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_WTID_Long_Type2; +asn_struct_free_f WTID_Long_Type2_free; +asn_struct_print_f WTID_Long_Type2_print; +asn_constr_check_f WTID_Long_Type2_constraint; +ber_type_decoder_f WTID_Long_Type2_decode_ber; +der_type_encoder_f WTID_Long_Type2_encode_der; +xer_type_decoder_f WTID_Long_Type2_decode_xer; +xer_type_encoder_f WTID_Long_Type2_encode_xer; +per_type_decoder_f WTID_Long_Type2_decode_uper; +per_type_encoder_f WTID_Long_Type2_encode_uper; +per_type_decoder_f WTID_Long_Type2_decode_aper; +per_type_encoder_f WTID_Long_Type2_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _WTID_Long_Type2_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.c new file mode 100644 index 0000000..471cb62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.c @@ -0,0 +1,114 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WTID-Type1.h" + +static int +memb_shortWTID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 24)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_shortWTID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 24, 24 } /* (SIZE(24..24)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_WTID_Type1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct WTID_Type1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct WTID_Type1, shortWTID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_shortWTID_constr_3, memb_shortWTID_constraint_1 }, + 0, 0, /* No default value */ + "shortWTID" + }, +}; +static const ber_tlv_tag_t asn_DEF_WTID_Type1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_WTID_Type1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* shortWTID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_WTID_Type1_specs_1 = { + sizeof(struct WTID_Type1), + offsetof(struct WTID_Type1, _asn_ctx), + asn_MAP_WTID_Type1_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_WTID_Type1 = { + "WTID-Type1", + "WTID-Type1", + &asn_OP_SEQUENCE, + asn_DEF_WTID_Type1_tags_1, + sizeof(asn_DEF_WTID_Type1_tags_1) + /sizeof(asn_DEF_WTID_Type1_tags_1[0]), /* 1 */ + asn_DEF_WTID_Type1_tags_1, /* Same as above */ + sizeof(asn_DEF_WTID_Type1_tags_1) + /sizeof(asn_DEF_WTID_Type1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_WTID_Type1_1, + 2, /* Elements count */ + &asn_SPC_WTID_Type1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.h new file mode 100644 index 0000000..ba19920 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID-Type1.h @@ -0,0 +1,64 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WTID_Type1_H_ +#define _WTID_Type1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* WTID-Type1 */ +typedef struct WTID_Type1 { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t shortWTID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WTID_Type1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_WTID_Type1; +extern asn_SEQUENCE_specifics_t asn_SPC_WTID_Type1_specs_1; +extern asn_TYPE_member_t asn_MBR_WTID_Type1_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _WTID_Type1_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.c new file mode 100644 index 0000000..b29df07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.c @@ -0,0 +1,81 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WTID.h" + +#include "WTID-Type1.h" +asn_per_constraints_t asn_PER_type_WTID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_WTID_1[] = { + { ATF_POINTER, 0, offsetof(struct WTID, choice.wTID_Type1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WTID_Type1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wTID-Type1" + }, + { ATF_NOFLAGS, 0, offsetof(struct WTID, choice.wTID_Type2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_WTID_Long_Type2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "wTID-Type2" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_WTID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wTID-Type1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* wTID-Type2 */ +}; +asn_CHOICE_specifics_t asn_SPC_WTID_specs_1 = { + sizeof(struct WTID), + offsetof(struct WTID, _asn_ctx), + offsetof(struct WTID, present), + sizeof(((struct WTID *)0)->present), + asn_MAP_WTID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_WTID = { + "WTID", + "WTID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_WTID_constr_1, CHOICE_constraint }, + asn_MBR_WTID_1, + 2, /* Elements count */ + &asn_SPC_WTID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.h new file mode 100644 index 0000000..432bcd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WTID.h @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WTID_H_ +#define _WTID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "WTID-Long-Type2.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum WTID_PR { + WTID_PR_NOTHING, /* No components present */ + WTID_PR_wTID_Type1, + WTID_PR_wTID_Type2 + /* Extensions may appear below */ + +} WTID_PR; + +/* Forward declarations */ +struct WTID_Type1; + +/* WTID */ +typedef struct WTID { + WTID_PR present; + union WTID_u { + struct WTID_Type1 *wTID_Type1; + WTID_Long_Type2_t wTID_Type2; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WTID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_WTID; +extern asn_CHOICE_specifics_t asn_SPC_WTID_specs_1; +extern asn_TYPE_member_t asn_MBR_WTID_1[2]; +extern asn_per_constraints_t asn_PER_type_WTID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _WTID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.c new file mode 100644 index 0000000..a833d18 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.c @@ -0,0 +1,122 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WidebandCQI.h" + +#include "WidebandCQICodeword1.h" +#include "ProtocolExtensionContainer.h" +static int +memb_widebandCQICodeword0_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_widebandCQICodeword0_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_WidebandCQI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct WidebandCQI, widebandCQICodeword0), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_widebandCQICodeword0_constr_2, memb_widebandCQICodeword0_constraint_1 }, + 0, 0, /* No default value */ + "widebandCQICodeword0" + }, + { ATF_POINTER, 2, offsetof(struct WidebandCQI, widebandCQICodeword1), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_WidebandCQICodeword1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "widebandCQICodeword1" + }, + { ATF_POINTER, 1, offsetof(struct WidebandCQI, iE_Extensions), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolExtensionContainer_170P221, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-Extensions" + }, +}; +static const int asn_MAP_WidebandCQI_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_WidebandCQI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_WidebandCQI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* widebandCQICodeword0 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* widebandCQICodeword1 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */ +}; +asn_SEQUENCE_specifics_t asn_SPC_WidebandCQI_specs_1 = { + sizeof(struct WidebandCQI), + offsetof(struct WidebandCQI, _asn_ctx), + asn_MAP_WidebandCQI_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_WidebandCQI_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_WidebandCQI = { + "WidebandCQI", + "WidebandCQI", + &asn_OP_SEQUENCE, + asn_DEF_WidebandCQI_tags_1, + sizeof(asn_DEF_WidebandCQI_tags_1) + /sizeof(asn_DEF_WidebandCQI_tags_1[0]), /* 1 */ + asn_DEF_WidebandCQI_tags_1, /* Same as above */ + sizeof(asn_DEF_WidebandCQI_tags_1) + /sizeof(asn_DEF_WidebandCQI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_WidebandCQI_1, + 3, /* Elements count */ + &asn_SPC_WidebandCQI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.h new file mode 100644 index 0000000..7576fcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQI.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WidebandCQI_H_ +#define _WidebandCQI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct WidebandCQICodeword1; +struct ProtocolExtensionContainer; + +/* WidebandCQI */ +typedef struct WidebandCQI { + long widebandCQICodeword0; + struct WidebandCQICodeword1 *widebandCQICodeword1; /* OPTIONAL */ + struct ProtocolExtensionContainer *iE_Extensions; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WidebandCQI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_WidebandCQI; +extern asn_SEQUENCE_specifics_t asn_SPC_WidebandCQI_specs_1; +extern asn_TYPE_member_t asn_MBR_WidebandCQI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _WidebandCQI_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.c new file mode 100644 index 0000000..da2fcd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.c @@ -0,0 +1,140 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "WidebandCQICodeword1.h" + +static int +memb_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_three_bitSpatialDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_four_bitCQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_three_bitSpatialDifferentialCQI_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_WidebandCQICodeword1_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_WidebandCQICodeword1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct WidebandCQICodeword1, choice.four_bitCQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_four_bitCQI_constr_2, memb_four_bitCQI_constraint_1 }, + 0, 0, /* No default value */ + "four-bitCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct WidebandCQICodeword1, choice.three_bitSpatialDifferentialCQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_three_bitSpatialDifferentialCQI_constr_3, memb_three_bitSpatialDifferentialCQI_constraint_1 }, + 0, 0, /* No default value */ + "three-bitSpatialDifferentialCQI" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_WidebandCQICodeword1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* three-bitSpatialDifferentialCQI */ +}; +asn_CHOICE_specifics_t asn_SPC_WidebandCQICodeword1_specs_1 = { + sizeof(struct WidebandCQICodeword1), + offsetof(struct WidebandCQICodeword1, _asn_ctx), + offsetof(struct WidebandCQICodeword1, present), + sizeof(((struct WidebandCQICodeword1 *)0)->present), + asn_MAP_WidebandCQICodeword1_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_WidebandCQICodeword1 = { + "WidebandCQICodeword1", + "WidebandCQICodeword1", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_WidebandCQICodeword1_constr_1, CHOICE_constraint }, + asn_MBR_WidebandCQICodeword1_1, + 2, /* Elements count */ + &asn_SPC_WidebandCQICodeword1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.h new file mode 100644 index 0000000..27b7056 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/WidebandCQICodeword1.h @@ -0,0 +1,76 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _WidebandCQICodeword1_H_ +#define _WidebandCQICodeword1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum WidebandCQICodeword1_PR { + WidebandCQICodeword1_PR_NOTHING, /* No components present */ + WidebandCQICodeword1_PR_four_bitCQI, + WidebandCQICodeword1_PR_three_bitSpatialDifferentialCQI + /* Extensions may appear below */ + +} WidebandCQICodeword1_PR; + +/* WidebandCQICodeword1 */ +typedef struct WidebandCQICodeword1 { + WidebandCQICodeword1_PR present; + union WidebandCQICodeword1_u { + long four_bitCQI; + long three_bitSpatialDifferentialCQI; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} WidebandCQICodeword1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_WidebandCQICodeword1; +extern asn_CHOICE_specifics_t asn_SPC_WidebandCQICodeword1_specs_1; +extern asn_TYPE_member_t asn_MBR_WidebandCQICodeword1_1[2]; +extern asn_per_constraints_t asn_PER_type_WidebandCQICodeword1_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _WidebandCQICodeword1_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.c new file mode 100644 index 0000000..d32ae73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.c @@ -0,0 +1,49 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2AP-Message.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_X2AP_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_X2AP_Message = { + "X2AP-Message", + "X2AP-Message", + &asn_OP_OCTET_STRING, + asn_DEF_X2AP_Message_tags_1, + sizeof(asn_DEF_X2AP_Message_tags_1) + /sizeof(asn_DEF_X2AP_Message_tags_1[0]), /* 1 */ + asn_DEF_X2AP_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_X2AP_Message_tags_1) + /sizeof(asn_DEF_X2AP_Message_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.h new file mode 100644 index 0000000..5663f0e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2AP-Message.h @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2AP_Message_H_ +#define _X2AP_Message_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2AP-Message */ +typedef OCTET_STRING_t X2AP_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2AP_Message; +asn_struct_free_f X2AP_Message_free; +asn_struct_print_f X2AP_Message_print; +asn_constr_check_f X2AP_Message_constraint; +ber_type_decoder_f X2AP_Message_decode_ber; +der_type_encoder_f X2AP_Message_encode_der; +xer_type_decoder_f X2AP_Message_decode_xer; +xer_type_encoder_f X2AP_Message_encode_xer; +per_type_decoder_f X2AP_Message_decode_uper; +per_type_encoder_f X2AP_Message_encode_uper; +per_type_decoder_f X2AP_Message_decode_aper; +per_type_encoder_f X2AP_Message_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2AP_Message_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.c new file mode 100644 index 0000000..950cbb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2APMessageTransfer.h" + +static asn_TYPE_member_t asn_MBR_X2APMessageTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2APMessageTransfer, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P43, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2APMessageTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2APMessageTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_X2APMessageTransfer_specs_1 = { + sizeof(struct X2APMessageTransfer), + offsetof(struct X2APMessageTransfer, _asn_ctx), + asn_MAP_X2APMessageTransfer_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2APMessageTransfer = { + "X2APMessageTransfer", + "X2APMessageTransfer", + &asn_OP_SEQUENCE, + asn_DEF_X2APMessageTransfer_tags_1, + sizeof(asn_DEF_X2APMessageTransfer_tags_1) + /sizeof(asn_DEF_X2APMessageTransfer_tags_1[0]), /* 1 */ + asn_DEF_X2APMessageTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_X2APMessageTransfer_tags_1) + /sizeof(asn_DEF_X2APMessageTransfer_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2APMessageTransfer_1, + 1, /* Elements count */ + &asn_SPC_X2APMessageTransfer_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.h new file mode 100644 index 0000000..66eafdb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2APMessageTransfer.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2APMessageTransfer_H_ +#define _X2APMessageTransfer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2APMessageTransfer */ +typedef struct X2APMessageTransfer { + ProtocolIE_Container_119P43_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2APMessageTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2APMessageTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2APMessageTransfer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.c new file mode 100644 index 0000000..ea88463 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.c @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2BenefitValue.h" + +int +X2BenefitValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_X2BenefitValue_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 1, 8 } /* (1..8,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_X2BenefitValue_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_X2BenefitValue = { + "X2BenefitValue", + "X2BenefitValue", + &asn_OP_NativeInteger, + asn_DEF_X2BenefitValue_tags_1, + sizeof(asn_DEF_X2BenefitValue_tags_1) + /sizeof(asn_DEF_X2BenefitValue_tags_1[0]), /* 1 */ + asn_DEF_X2BenefitValue_tags_1, /* Same as above */ + sizeof(asn_DEF_X2BenefitValue_tags_1) + /sizeof(asn_DEF_X2BenefitValue_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_X2BenefitValue_constr_1, X2BenefitValue_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.h new file mode 100644 index 0000000..b7c09f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2BenefitValue.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-IEs" + * found in "../../asnFiles/X2AP-IEs.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2BenefitValue_H_ +#define _X2BenefitValue_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2BenefitValue */ +typedef long X2BenefitValue_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_X2BenefitValue_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_X2BenefitValue; +asn_struct_free_f X2BenefitValue_free; +asn_struct_print_f X2BenefitValue_print; +asn_constr_check_f X2BenefitValue_constraint; +ber_type_decoder_f X2BenefitValue_decode_ber; +der_type_encoder_f X2BenefitValue_encode_der; +xer_type_decoder_f X2BenefitValue_decode_xer; +xer_type_encoder_f X2BenefitValue_encode_xer; +per_type_decoder_f X2BenefitValue_decode_uper; +per_type_encoder_f X2BenefitValue_encode_uper; +per_type_decoder_f X2BenefitValue_decode_aper; +per_type_encoder_f X2BenefitValue_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2BenefitValue_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.c new file mode 100644 index 0000000..9984135 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2Release.h" + +static asn_TYPE_member_t asn_MBR_X2Release_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2Release, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P42, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2Release_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2Release_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_X2Release_specs_1 = { + sizeof(struct X2Release), + offsetof(struct X2Release, _asn_ctx), + asn_MAP_X2Release_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2Release = { + "X2Release", + "X2Release", + &asn_OP_SEQUENCE, + asn_DEF_X2Release_tags_1, + sizeof(asn_DEF_X2Release_tags_1) + /sizeof(asn_DEF_X2Release_tags_1[0]), /* 1 */ + asn_DEF_X2Release_tags_1, /* Same as above */ + sizeof(asn_DEF_X2Release_tags_1) + /sizeof(asn_DEF_X2Release_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2Release_1, + 1, /* Elements count */ + &asn_SPC_X2Release_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.h new file mode 100644 index 0000000..2e2cddf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2Release.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2Release_H_ +#define _X2Release_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2Release */ +typedef struct X2Release { + ProtocolIE_Container_119P42_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2Release_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2Release; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2Release_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.c new file mode 100644 index 0000000..24b313f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2RemovalFailure.h" + +static asn_TYPE_member_t asn_MBR_X2RemovalFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P60, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_X2RemovalFailure_specs_1 = { + sizeof(struct X2RemovalFailure), + offsetof(struct X2RemovalFailure, _asn_ctx), + asn_MAP_X2RemovalFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalFailure = { + "X2RemovalFailure", + "X2RemovalFailure", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalFailure_tags_1, + sizeof(asn_DEF_X2RemovalFailure_tags_1) + /sizeof(asn_DEF_X2RemovalFailure_tags_1[0]), /* 1 */ + asn_DEF_X2RemovalFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_X2RemovalFailure_tags_1) + /sizeof(asn_DEF_X2RemovalFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalFailure_1, + 1, /* Elements count */ + &asn_SPC_X2RemovalFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.h new file mode 100644 index 0000000..8496e01 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalFailure.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2RemovalFailure_H_ +#define _X2RemovalFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2RemovalFailure */ +typedef struct X2RemovalFailure { + ProtocolIE_Container_119P60_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2RemovalFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.c new file mode 100644 index 0000000..437b38c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2RemovalRequest.h" + +static asn_TYPE_member_t asn_MBR_X2RemovalRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P58, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_X2RemovalRequest_specs_1 = { + sizeof(struct X2RemovalRequest), + offsetof(struct X2RemovalRequest, _asn_ctx), + asn_MAP_X2RemovalRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalRequest = { + "X2RemovalRequest", + "X2RemovalRequest", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalRequest_tags_1, + sizeof(asn_DEF_X2RemovalRequest_tags_1) + /sizeof(asn_DEF_X2RemovalRequest_tags_1[0]), /* 1 */ + asn_DEF_X2RemovalRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_X2RemovalRequest_tags_1) + /sizeof(asn_DEF_X2RemovalRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalRequest_1, + 1, /* Elements count */ + &asn_SPC_X2RemovalRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.h new file mode 100644 index 0000000..925e5fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalRequest.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2RemovalRequest_H_ +#define _X2RemovalRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2RemovalRequest */ +typedef struct X2RemovalRequest { + ProtocolIE_Container_119P58_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2RemovalRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.c new file mode 100644 index 0000000..fa986ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2RemovalResponse.h" + +static asn_TYPE_member_t asn_MBR_X2RemovalResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2RemovalResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P59, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2RemovalResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2RemovalResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_X2RemovalResponse_specs_1 = { + sizeof(struct X2RemovalResponse), + offsetof(struct X2RemovalResponse, _asn_ctx), + asn_MAP_X2RemovalResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2RemovalResponse = { + "X2RemovalResponse", + "X2RemovalResponse", + &asn_OP_SEQUENCE, + asn_DEF_X2RemovalResponse_tags_1, + sizeof(asn_DEF_X2RemovalResponse_tags_1) + /sizeof(asn_DEF_X2RemovalResponse_tags_1[0]), /* 1 */ + asn_DEF_X2RemovalResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_X2RemovalResponse_tags_1) + /sizeof(asn_DEF_X2RemovalResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2RemovalResponse_1, + 1, /* Elements count */ + &asn_SPC_X2RemovalResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.h new file mode 100644 index 0000000..8c43c87 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2RemovalResponse.h @@ -0,0 +1,60 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2RemovalResponse_H_ +#define _X2RemovalResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2RemovalResponse */ +typedef struct X2RemovalResponse { + ProtocolIE_Container_119P59_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2RemovalResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2RemovalResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2RemovalResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.c new file mode 100644 index 0000000..d42ab86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2SetupFailure.h" + +asn_TYPE_member_t asn_MBR_X2SetupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P26, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupFailure_specs_1 = { + sizeof(struct X2SetupFailure), + offsetof(struct X2SetupFailure, _asn_ctx), + asn_MAP_X2SetupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupFailure = { + "X2SetupFailure", + "X2SetupFailure", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupFailure_tags_1, + sizeof(asn_DEF_X2SetupFailure_tags_1) + /sizeof(asn_DEF_X2SetupFailure_tags_1[0]), /* 1 */ + asn_DEF_X2SetupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_X2SetupFailure_tags_1) + /sizeof(asn_DEF_X2SetupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupFailure_1, + 1, /* Elements count */ + &asn_SPC_X2SetupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.h new file mode 100644 index 0000000..9b51967 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupFailure.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2SetupFailure_H_ +#define _X2SetupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2SetupFailure */ +typedef struct X2SetupFailure { + ProtocolIE_Container_119P26_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2SetupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_X2SetupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2SetupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.c new file mode 100644 index 0000000..3c87b57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2SetupRequest.h" + +asn_TYPE_member_t asn_MBR_X2SetupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P24, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupRequest_specs_1 = { + sizeof(struct X2SetupRequest), + offsetof(struct X2SetupRequest, _asn_ctx), + asn_MAP_X2SetupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupRequest = { + "X2SetupRequest", + "X2SetupRequest", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupRequest_tags_1, + sizeof(asn_DEF_X2SetupRequest_tags_1) + /sizeof(asn_DEF_X2SetupRequest_tags_1[0]), /* 1 */ + asn_DEF_X2SetupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_X2SetupRequest_tags_1) + /sizeof(asn_DEF_X2SetupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupRequest_1, + 1, /* Elements count */ + &asn_SPC_X2SetupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.h new file mode 100644 index 0000000..d1fe370 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupRequest.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2SetupRequest_H_ +#define _X2SetupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2SetupRequest */ +typedef struct X2SetupRequest { + ProtocolIE_Container_119P24_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2SetupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_X2SetupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2SetupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.c new file mode 100644 index 0000000..5134d24 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.c @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#include "X2SetupResponse.h" + +asn_TYPE_member_t asn_MBR_X2SetupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct X2SetupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_119P25, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_X2SetupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_X2SetupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_X2SetupResponse_specs_1 = { + sizeof(struct X2SetupResponse), + offsetof(struct X2SetupResponse, _asn_ctx), + asn_MAP_X2SetupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_X2SetupResponse = { + "X2SetupResponse", + "X2SetupResponse", + &asn_OP_SEQUENCE, + asn_DEF_X2SetupResponse_tags_1, + sizeof(asn_DEF_X2SetupResponse_tags_1) + /sizeof(asn_DEF_X2SetupResponse_tags_1[0]), /* 1 */ + asn_DEF_X2SetupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_X2SetupResponse_tags_1) + /sizeof(asn_DEF_X2SetupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_X2SetupResponse_1, + 1, /* Elements count */ + &asn_SPC_X2SetupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.h new file mode 100644 index 0000000..69d609a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/X2SetupResponse.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "X2AP-PDU-Contents" + * found in "../../asnFiles/X2AP-PDU-Contents.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.` + */ + +#ifndef _X2SetupResponse_H_ +#define _X2SetupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* X2SetupResponse */ +typedef struct X2SetupResponse { + ProtocolIE_Container_119P25_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} X2SetupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_X2SetupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_X2SetupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_X2SetupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _X2SetupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..a231462 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..5b1f5fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,70 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..b138c43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.c @@ -0,0 +1,106 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..f55909a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_SET_OF.h @@ -0,0 +1,90 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.c new file mode 100644 index 0000000..a797261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.c @@ -0,0 +1,499 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.h new file mode 100644 index 0000000..5369cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_application.h @@ -0,0 +1,189 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..c142f4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.c @@ -0,0 +1,351 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..20f6911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_bit_data.h @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs.h new file mode 100644 index 0000000..21a04b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs.h @@ -0,0 +1,126 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..81794fa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.c @@ -0,0 +1,335 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..d812ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_codecs_prim.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_constant.h new file mode 100644 index 0000000..64a3988 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_constant.h @@ -0,0 +1,87 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define maxofRANfunctionID (256) +#define maxofRICactionID (16) +#define maxEARFCN (65535) +#define maxEARFCNPlusOne (65536) +#define newmaxEARFCN (262143) +#define maxInterfaces (16) +#define maxCellineNB (256) +#define maxnoofBands (16) +#define maxnoofBearers (256) +#define maxNrOfErrors (256) +#define maxnoofPDCP_SN (16) +#define maxnoofEPLMNs (15) +#define maxnoofEPLMNsPlusOne (16) +#define maxnoofForbLACs (4096) +#define maxnoofForbTACs (4096) +#define maxnoofBPLMNs (6) +#define maxnoofNeighbours (512) +#define maxnoofPRBs (110) +#define maxPools (16) +#define maxnoofCells (16) +#define maxnoofMBSFN (8) +#define maxFailedMeasObjects (32) +#define maxnoofCellIDforMDT (32) +#define maxnoofTAforMDT (8) +#define maxnoofMBMSServiceAreaIdentities (256) +#define maxnoofMDTPLMNs (16) +#define maxnoofCoMPHypothesisSet (256) +#define maxnoofCoMPCells (32) +#define maxUEReport (128) +#define maxCellReport (9) +#define maxnoofPA (3) +#define maxCSIProcess (4) +#define maxCSIReport (2) +#define maxSubband (14) +#define maxofNRNeighbours (1024) +#define maxCellinengNB (16384) +#define maxnooftimeperiods (2) +#define maxnoofCellIDforQMC (32) +#define maxnoofTAforQMC (8) +#define maxnoofPLMNforQMC (16) +#define maxUEsinengNBDU (8192) +#define maxnoofProtectedResourcePatterns (16) +#define maxnoNRcellsSpectrumSharingWithE_UTRA (64) +#define maxnoofNrCellBands (32) +#define maxnoofBluetoothName (4) +#define maxnoofWLANName (4) +#define maxPrivateIEs (65535) +#define maxProtocolExtensions (65535) +#define maxProtocolIEs (65535) +#define maxofInterfaceProtocolIE (15) +#define maxofActionParameters (255) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.c new file mode 100644 index 0000000..8c02a27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.c @@ -0,0 +1,66 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.h new file mode 100644 index 0000000..c2761a5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_internal.h @@ -0,0 +1,177 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_ioc.h new file mode 100644 index 0000000..9674a8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_ioc.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..6bfc2b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.c @@ -0,0 +1,74 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..ed8c5a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_random_fill.h @@ -0,0 +1,69 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_system.h new file mode 100644 index 0000000..f89feb8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/asn_system.h @@ -0,0 +1,168 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.c new file mode 100644 index 0000000..02d91df --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.c @@ -0,0 +1,301 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.h new file mode 100644 index 0000000..6c41bf8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_decoder.h @@ -0,0 +1,84 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..5b897fe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.c @@ -0,0 +1,186 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..96d8322 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_length.h @@ -0,0 +1,68 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..1548b22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.c @@ -0,0 +1,162 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..8eac6d9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/ber_tlv_tag.h @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..d78bfef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.c @@ -0,0 +1,1551 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..cd6c7e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_CHOICE.h @@ -0,0 +1,98 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..fc1ca72 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2077 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a7e81e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,86 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..f565a17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,376 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..890c66d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..8737109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.c @@ -0,0 +1,1459 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..dd2b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_SET_OF.h @@ -0,0 +1,67 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..9479c06 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.c @@ -0,0 +1,98 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..59ac617 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constr_TYPE.h @@ -0,0 +1,280 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.c new file mode 100644 index 0000000..5051c34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.c @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.h new file mode 100644 index 0000000..3b17311 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/constraints.h @@ -0,0 +1,80 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/converter-example.mk new file mode 100644 index 0000000..73f73ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/converter-example.mk @@ -0,0 +1,50 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +include ./Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + ./converter-example.c\ + ./pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D. ../../asnFiles/e2ap-v031.asn ../../asnFiles/X2AP-PDU-Contents.asn ../../asnFiles/X2AP-Constants.asn ../../asnFiles/X2AP-Containers.asn ../../asnFiles/X2AP-IEs.asn ../../asnFiles/X2AP-CommonDataTypes.asn ../../asnFiles/e2sm-gNB-X2-release-1-v041.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.c new file mode 100644 index 0000000..a54f2f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.c @@ -0,0 +1,212 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.h new file mode 100644 index 0000000..7fa1163 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/der_encoder.h @@ -0,0 +1,86 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/pdu_collection.c new file mode 100644 index 0000000..6dbb55d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/pdu_collection.c @@ -0,0 +1,189 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2AP_PDU; +extern struct asn_TYPE_descriptor_s asn_DEF_HandoverRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_HandoverRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_HandoverPreparationFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_HandoverReport; +extern struct asn_TYPE_descriptor_s asn_DEF_SNStatusTransfer; +extern struct asn_TYPE_descriptor_s asn_DEF_UEContextRelease; +extern struct asn_TYPE_descriptor_s asn_DEF_HandoverCancel; +extern struct asn_TYPE_descriptor_s asn_DEF_PrivateMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_MobilityChangeRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_MobilityChangeAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_MobilityChangeFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_RLFIndication; +extern struct asn_TYPE_descriptor_s asn_DEF_CellActivationRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_CellActivationResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_CellActivationFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_X2Release; +extern struct asn_TYPE_descriptor_s asn_DEF_X2APMessageTransfer; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBAdditionRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBAdditionRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBAdditionRequestReject; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBReconfigurationComplete; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationRequestReject; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBModificationRefuse; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBReleaseRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBReleaseRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBReleaseConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_SeNBCounterCheckRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_X2RemovalRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_X2RemovalResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_X2RemovalFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_RetrieveUEContextRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_RetrieveUEContextResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_RetrieveUEContextFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBAdditionRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBAdditionRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBAdditionRequestReject; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReconfigurationComplete; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationRequestReject; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBModificationRefuse; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReleaseRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReleaseRequestAcknowledge; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReleaseRequestReject; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReleaseRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBReleaseConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBCounterCheckRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBChangeRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBChangeConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_RRCTransfer; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBChangeRefuse; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCCellActivationRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCCellActivationResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCCellActivationFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_SecondaryRATDataUsageReport; +extern struct asn_TYPE_descriptor_s asn_DEF_SgNBActivityNotification; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCPartialResetRequired; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCPartialResetConfirm; +extern struct asn_TYPE_descriptor_s asn_DEF_EUTRANRCellResourceCoordinationRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_EUTRANRCellResourceCoordinationResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCX2RemovalRequest; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCX2RemovalResponse; +extern struct asn_TYPE_descriptor_s asn_DEF_ENDCX2RemovalFailure; +extern struct asn_TYPE_descriptor_s asn_DEF_DataForwardingAddressIndication; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_eventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_actionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_indicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_indicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_callProcessID; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_controlHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_gNB_X2_controlMessage; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2AP-PDU-Descriptions in ../../asnFiles/e2ap-v031.asn */ + &asn_DEF_E2AP_PDU, + /* From module X2AP-PDU-Contents in ../../asnFiles/X2AP-PDU-Contents.asn */ + &asn_DEF_HandoverRequest, + &asn_DEF_HandoverRequestAcknowledge, + &asn_DEF_HandoverPreparationFailure, + &asn_DEF_HandoverReport, + &asn_DEF_SNStatusTransfer, + &asn_DEF_UEContextRelease, + &asn_DEF_HandoverCancel, + &asn_DEF_PrivateMessage, + &asn_DEF_MobilityChangeRequest, + &asn_DEF_MobilityChangeAcknowledge, + &asn_DEF_MobilityChangeFailure, + &asn_DEF_RLFIndication, + &asn_DEF_CellActivationRequest, + &asn_DEF_CellActivationResponse, + &asn_DEF_CellActivationFailure, + &asn_DEF_X2Release, + &asn_DEF_X2APMessageTransfer, + &asn_DEF_SeNBAdditionRequest, + &asn_DEF_SeNBAdditionRequestAcknowledge, + &asn_DEF_SeNBAdditionRequestReject, + &asn_DEF_SeNBReconfigurationComplete, + &asn_DEF_SeNBModificationRequest, + &asn_DEF_SeNBModificationRequestAcknowledge, + &asn_DEF_SeNBModificationRequestReject, + &asn_DEF_SeNBModificationRequired, + &asn_DEF_SeNBModificationConfirm, + &asn_DEF_SeNBModificationRefuse, + &asn_DEF_SeNBReleaseRequest, + &asn_DEF_SeNBReleaseRequired, + &asn_DEF_SeNBReleaseConfirm, + &asn_DEF_SeNBCounterCheckRequest, + &asn_DEF_X2RemovalRequest, + &asn_DEF_X2RemovalResponse, + &asn_DEF_X2RemovalFailure, + &asn_DEF_RetrieveUEContextRequest, + &asn_DEF_RetrieveUEContextResponse, + &asn_DEF_RetrieveUEContextFailure, + &asn_DEF_SgNBAdditionRequest, + &asn_DEF_SgNBAdditionRequestAcknowledge, + &asn_DEF_SgNBAdditionRequestReject, + &asn_DEF_SgNBReconfigurationComplete, + &asn_DEF_SgNBModificationRequest, + &asn_DEF_SgNBModificationRequestAcknowledge, + &asn_DEF_SgNBModificationRequestReject, + &asn_DEF_SgNBModificationRequired, + &asn_DEF_SgNBModificationConfirm, + &asn_DEF_SgNBModificationRefuse, + &asn_DEF_SgNBReleaseRequest, + &asn_DEF_SgNBReleaseRequestAcknowledge, + &asn_DEF_SgNBReleaseRequestReject, + &asn_DEF_SgNBReleaseRequired, + &asn_DEF_SgNBReleaseConfirm, + &asn_DEF_SgNBCounterCheckRequest, + &asn_DEF_SgNBChangeRequired, + &asn_DEF_SgNBChangeConfirm, + &asn_DEF_RRCTransfer, + &asn_DEF_SgNBChangeRefuse, + &asn_DEF_ENDCCellActivationRequest, + &asn_DEF_ENDCCellActivationResponse, + &asn_DEF_ENDCCellActivationFailure, + &asn_DEF_SecondaryRATDataUsageReport, + &asn_DEF_SgNBActivityNotification, + &asn_DEF_ENDCPartialResetRequired, + &asn_DEF_ENDCPartialResetConfirm, + &asn_DEF_EUTRANRCellResourceCoordinationRequest, + &asn_DEF_EUTRANRCellResourceCoordinationResponse, + &asn_DEF_ENDCX2RemovalRequest, + &asn_DEF_ENDCX2RemovalResponse, + &asn_DEF_ENDCX2RemovalFailure, + &asn_DEF_DataForwardingAddressIndication, + /* From module E2SM-gNB-X2-IEs in ../../asnFiles/e2sm-gNB-X2-release-1-v041.asn */ + &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + &asn_DEF_E2SM_gNB_X2_actionDefinition, + &asn_DEF_E2SM_gNB_X2_indicationHeader, + &asn_DEF_E2SM_gNB_X2_indicationMessage, + &asn_DEF_E2SM_gNB_X2_callProcessID, + &asn_DEF_E2SM_gNB_X2_controlHeader, + &asn_DEF_E2SM_gNB_X2_controlMessage, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.c new file mode 100644 index 0000000..36aa312 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.c @@ -0,0 +1,203 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.h new file mode 100644 index 0000000..c230647 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_decoder.h @@ -0,0 +1,100 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.c new file mode 100644 index 0000000..39bcd2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.c @@ -0,0 +1,283 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.h new file mode 100644 index 0000000..0aa86e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_encoder.h @@ -0,0 +1,111 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.c new file mode 100644 index 0000000..1238919 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.c @@ -0,0 +1,551 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.h new file mode 100644 index 0000000..eb1d1f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_opentype.h @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.c new file mode 100644 index 0000000..0d70e1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.c @@ -0,0 +1,507 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.h new file mode 100644 index 0000000..38d90d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/per_support.h @@ -0,0 +1,145 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.c new file mode 100644 index 0000000..3f8e876 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.c @@ -0,0 +1,387 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.h new file mode 100644 index 0000000..2c9d569 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_decoder.h @@ -0,0 +1,124 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.c new file mode 100644 index 0000000..94a30f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.c @@ -0,0 +1,255 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.h new file mode 100644 index 0000000..2489c54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_encoder.h @@ -0,0 +1,101 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.c new file mode 100644 index 0000000..4219b3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.c @@ -0,0 +1,245 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.h new file mode 100644 index 0000000..1df2656 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ASN1c/xer_support.h @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/CMakeLists.txt new file mode 100644 index 0000000..c4e867a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/CMakeLists.txt @@ -0,0 +1,61 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(e2sim) + +set (E2SIM_ROOT ./) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB E2SIM_SOURCES + "${E2SIM_ROOT}/e2sim.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(e2sim ${E2SIM_SOURCES}) +target_link_libraries( e2sim ${SCTP_STD_LIB} ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + "${E2SIM_ROOT}/ricsim.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ricsim ${RICSIM_SOURCES}) +target_link_libraries( ricsim ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/README.md b/ric_benchmarking/e2-interface/e2sim/previous/README.md new file mode 100644 index 0000000..ed260c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/README.md @@ -0,0 +1,95 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + + +# INSTALLATION (tested on Ubuntu 16.04) + 1. Install dependencies + $ sudo apt-get update + $ sudo apt-get install -y + build-essential + git + cmake + libsctp-dev + lksctp-tools + autoconf + automake + libtool + bison + flex + libboost-all-dev + $ sudo apt-get clean + + 2. SET ENVIRONMENT VARIABLE + Add this line to `~/.bashrc` + export E2SIM_DIR= + + 3. Build the official e2sim + $ ./build_e2sim + +# USAGE + $ $E2SIM_DIR/build/e2sim [SERVER IP] [PORT] + + By default, SERVER IP = 127.0.0.1, PORT = 36421 + The RIC (i.e., E2 Manager) will need to setup X2 or E2 connection to e2sim on + this SERVER IP and PORT + +# DOCKER + * Build docker image: run this command from $E2SIM_DIR + $ sudo docker build -f docker/Dockerfile -t [DOCKER_IMAGE]:[TAG] . + + * Example how to run docker container + $ sudo docker run --rm --net host -it [DOCKER_IMAGE]:[TAG] sh -c "./build/e2sim [SERVER IP] [PORT]" + ex: sudo docker run --rm --net host -it e2sim:1.0.0 sh -c "./build/e2sim 127.0.0.1 36422" + +# SUPPORTED MESSAGE FLOWS +- RESOURCE STATUS REQUEST (RIC -> RAN) version 1.4.0 November 16, 2019 +- RESOURCE STATUS RESPONSE (RAN -> RIC) +- RESOURCE STATUS UPDATE (RAN -> RIC) + +- RIC INDICATION (RAN -> RIC) version 1.3.0 September 13, 2019 + SgNBAdditionRequest + +- RIC SUBSCRIPTION REQUEST (RIC -> RAN) version 1.2.0 May 24, 2019 +- RIC SUBSCRIPTION RESPONSE (RAN -> RIC) +- RIC SUBSCRIPTION FAILURE (RAN -> RIC) + +- ENDC X2 SETUP REQUEST (RIC -> RAN) +- ENDC X2 SETUP RESPONSE (RAN -> RIC) + +- X2 SETUP REQUEST (RIC -> RAN) +- X2 SETUP RESPONSE (RAN -> RIC) + +# GENERATING ASN1C CODES FOR E2AP, E2SM, X2AP + 1. Install asn1c compiler + ./tools/install_asn1c + + 2. Generate asn1c codes using e2ap, e2sm and x2ap specs + This requires the following files in tools/asn_defs + - e2ap-v031.asn + - e2sm-gNB-X2-release-1-v041.asn + - x2ap-no-desc-15-04.asn + +# Change logs: + 11/16/2019: - Switch back to using asn1c compiler + - add support to Resource Status Request, Response, and Update (over X2) + 05/24/2019: add support for RIC SUBSCRIPTION REQUEST, RESPONSE, and FAILURE + 05/21/2019: add support for ENDC X2 SETUP + no longer use asn1c + all X2AP and E2AP messages are encapsulated into E2AP-PDU + 03/12/2019: currently supports sending and receiving X2 SETUP messages diff --git a/ric_benchmarking/e2-interface/e2sim/previous/build_e2sim b/ric_benchmarking/e2-interface/e2sim/previous/build_e2sim new file mode 100644 index 0000000..80a53c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/build_e2sim @@ -0,0 +1,86 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +E2SIM_VERSION='1.4.0' +export E2SIM_DIR=$PWD +source $E2SIM_DIR/tools/build_helper.bash +DOCKER_IMAGE='e2sim' + +print_help() { + echo " + This program installs E2 Simulator + You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14 + The program is run by default with no option + + USAGE: + ./build_e2sim [OPTIONS] + + OPTIONS: + --clean + Erase all files to make a rebuild from start + --docker + Build docker image + -h + Print this help + " +} + +function main(){ + case "$1" in + --clean) + echo_info "Will clean all previously producted files under build/" + rm -rf $E2SIM_DIR/build + echo_success "Clean Done" + exit + ;; + + --docker) + echo "Will build docker image ${DOCKER_IMAGE}:${E2SIM_VERSION}" + sudo docker build -f docker/Dockerfile -t $DOCKER_IMAGE:$E2SIM_VERSION . + exit + ;; + + "") + ;; + + -h) + print_help + exit 1;; + + *) + echo_error "Unknown option $1" + exit + esac + + BUILD_DIR=$E2SIM_DIR/build + mkdir -p $BUILD_DIR + + echo_info "Will build e2sim" + cd $BUILD_DIR + rm -rf CMakeCache.txt + cmake .. + make -j`nproc` + + echo_success "e2sim compiled" +} + +main "$@" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/docker/Dockerfile new file mode 100644 index 0000000..1233a12 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/Dockerfile @@ -0,0 +1,54 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +FROM ubuntu:16.04 + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + +# Copy E2Sim sources into the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/container-tag.yaml b/ric_benchmarking/e2-interface/e2sim/previous/docker/container-tag.yaml new file mode 100644 index 0000000..5df0816 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/container-tag.yaml @@ -0,0 +1,2 @@ +--- +tag: 0.1.1 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/DockerFile_old b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/DockerFile_old new file mode 100644 index 0000000..17aa6bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/DockerFile_old @@ -0,0 +1,53 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build: $ sudo docker build -f docker/Dockerfile -t e2sim . + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + && apt-get clean + +# Install E2Sim +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c +RUN ./build_e2sim --clean +RUN ./build_e2sim + +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile new file mode 100644 index 0000000..6cbfbf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile @@ -0,0 +1,42 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +FROM e2sim_base + +# ------------ COPY E2SIM codes ------------------ +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +# ensure an empty rt is there if none is mounted at spinup +COPY docker/empty.rt /usr/local/route/local.rt + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim + +#-------------- Configure rmr ------------------------- +ENV RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt + +ENV RMR_RTG_SVC=localhost:9990 +ENV E2TERM_RMR_RCV_PORT=48886 +ENV DEMO_SENDER_PTO=1 +ENV DEMO_MAX_PAYLOAD_BYTES=240 + +# --------------- Run E2Termination --------------------- +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile_base b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile_base new file mode 100644 index 0000000..7ac932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/Dockerfile_base @@ -0,0 +1,60 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build with 2 steps +# $ sudo docker build -f docker/Dockerfile_base -t e2sim_base . +# $ sudo docker build -f docker/Dockerfile -t e2sim . +# +# run e2 termination +# $ sudo docker run --rm --net host -it e2sim sh -c "./build/e2sim 127.0.0.2" + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex + +# For rmr +RUN apt-get install -y bash vim ksh iputils-ping +RUN apt-get clean + +# Copy E2Sim to the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c + +#-------------INSTALL rmr ------------------------ +RUN ./docker/install_rmr diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/configure_rmr b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/configure_rmr new file mode 100644 index 0000000..ff0a685 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/configure_rmr @@ -0,0 +1,27 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +export RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +export RMR_RTG_SVC=localhost:9990 +#export DUMMY_SENDER_RMR_RCV_PORT=48086 +export E2TERM_RMR_RCV_PORT=48886 +export DEMO_SENDER_PTO=1 +export DEMO_MAX_PAYLOAD_BYTES=240 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/empty.rt b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/empty.rt new file mode 100644 index 0000000..0063bb9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/empty.rt @@ -0,0 +1,5 @@ +# an empty route table to put into an image so there is some file there +# if on image start nothing is mounted onto /usr/local/route + +newrt|start +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_asn1c new file mode 100644 index 0000000..daf4bfe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_asn1c @@ -0,0 +1,29 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +echo "Will install asn1c" +cd tools +rm -rf asn1c +git clone https://gitlab.eurecom.fr/oai/asn1c.git +cd asn1c +git checkout 0a7524184f16e7093990a31d8d4db487a16e5782 +autoreconf -iv +./configure +make +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_rmr b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_rmr new file mode 100644 index 0000000..522df48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/install_rmr @@ -0,0 +1,32 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# pull rmr to $E2SIM_DIR/ and checkout the 'stable' demo commit, +# then build and install in /usr/local + +echo "Will install rmr" +rm -rf rmr +git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr +date; ls -al /usr/local/lib +cd rmr +git checkout 6735f136906ce2 +mkdir .build +cd .build +cmake .. +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/docker/old/local.rt b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/local.rt new file mode 100644 index 0000000..84ea983 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/docker/old/local.rt @@ -0,0 +1,9 @@ +newrt|start +#RMR_RCV_PORT of the receiver is 6560 +rte|0|localhost:6560 + +# this is needed so that receiver acks can be sent via rmr_rts_msg() calls +# here e2 agent is the name of the machine +# is the RMR_RCV_PORT of the sender +rte|89|e2agent:48086 +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_C_RNTI_constr_1 CC_NOTUSED = { + { 0, 0 }, + 2 /* (SIZE(2..2)) */}; +asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + &asn_OP_OCTET_STRING, + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + { &asn_OER_type_C_RNTI_constr_1, &asn_PER_type_C_RNTI_constr_1, C_RNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/C-RNTI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef OCTET_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_C_RNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +oer_type_decoder_f C_RNTI_decode_oer; +oer_type_encoder_f C_RNTI_encode_oer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; +per_type_decoder_f C_RNTI_decode_aper; +per_type_encoder_f C_RNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem = { + "CU-CP-Usage-Report-CellResourceReportItem", + "CU-CP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_CellResourceReportItem_H_ +#define _CU_CP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_UeResourceReportItem; + +/* CU-CP-Usage-Report-CellResourceReportItem */ +typedef struct CU_CP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 16384)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_CP_Usage_Report_Per_UE), + offsetof(struct CU_CP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE = { + "CU-CP-Usage-Report-Per-UE", + "CU-CP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_Per_UE_H_ +#define _CU_CP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_CellResourceReportItem; + +/* CU-CP-Usage-Report-Per-UE */ +typedef struct CU_CP_Usage_Report_Per_UE { + struct CU_CP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, serving_Cell_RF_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serving-Cell-RF-Type" + }, + { ATF_POINTER, 1, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, neighbor_Cell_RF), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbor-Cell-RF" + }, +}; +static const int asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serving-Cell-RF-Type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighbor-Cell-RF */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem = { + "CU-CP-Usage-Report-UeResourceReportItem", + "CU-CP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_UeResourceReportItem_H_ +#define _CU_CP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-CP-Usage-Report-UeResourceReportItem */ +typedef struct CU_CP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + OCTET_STRING_t *serving_Cell_RF_Type; /* OPTIONAL */ + OCTET_STRING_t *neighbor_Cell_RF; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_CP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem = { + "CU-UP-Usage-Report-CellResourceReportItem", + "CU-UP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_CellResourceReportItem_H_ +#define _CU_UP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_UeResourceReportItem; + +/* CU-UP-Usage-Report-CellResourceReportItem */ +typedef struct CU_UP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_UP_Usage_Report_Per_UE), + offsetof(struct CU_UP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE = { + "CU-UP-Usage-Report-Per-UE", + "CU-UP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_Per_UE_H_ +#define _CU_UP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_CellResourceReportItem; + +/* CU-UP-Usage-Report-Per-UE */ +typedef struct CU_UP_Usage_Report_Per_UE { + struct CU_UP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem = { + "CU-UP-Usage-Report-UeResourceReportItem", + "CU-UP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_UeResourceReportItem_H_ +#define _CU_UP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-UP-Usage-Report-UeResourceReportItem */ +typedef struct CU_UP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_UP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CUUPMeasurement-Container.h" + +static int +memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmnList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PlmnID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = { + sizeof(struct CUUPMeasurement_Container__plmnList), + offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmnList_2 = { + "plmnList", + "plmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_plmnList_tags_2, + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */ + asn_DEF_plmnList_tags_2, /* Same as above */ + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */ + { &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_plmnList_2, + 1, /* Single element */ + &asn_SPC_plmnList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_plmnList_2, + 0, + { &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2, memb_plmnList_constraint_1 }, + 0, 0, /* No default value */ + "plmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = { + sizeof(struct CUUPMeasurement_Container), + offsetof(struct CUUPMeasurement_Container, _asn_ctx), + asn_MAP_CUUPMeasurement_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container = { + "CUUPMeasurement-Container", + "CUUPMeasurement-Container", + &asn_OP_SEQUENCE, + asn_DEF_CUUPMeasurement_Container_tags_1, + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + asn_DEF_CUUPMeasurement_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CUUPMeasurement_Container_1, + 1, /* Elements count */ + &asn_SPC_CUUPMeasurement_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CUUPMeasurement-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CUUPMeasurement_Container_H_ +#define _CUUPMeasurement_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PlmnID_List; + +/* CUUPMeasurement-Container */ +typedef struct CUUPMeasurement_Container { + struct CUUPMeasurement_Container__plmnList { + A_SEQUENCE_OF(struct PlmnID_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CUUPMeasurement_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PlmnID-List.h" + +#endif /* _CUUPMeasurement_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.c new file mode 100644 index 0000000..1027911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.h new file mode 100644 index 0000000..1b829a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c new file mode 100644 index 0000000..1709929 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.c @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h new file mode 100644 index 0000000..d175009 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseMisc.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..e5b11b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..72329ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseProtocol.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c new file mode 100644 index 0000000..11d9e4e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h new file mode 100644 index 0000000..417532f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRIC.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..6773fd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..4270eb3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseRICservice.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c new file mode 100644 index 0000000..08a317d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f3fe969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CauseTransport.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CellResourceReportListItem.h" + +static int +memb_dl_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = { + sizeof(struct CellResourceReportListItem__servedPlmnPerCellList), + offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = { + "servedPlmnPerCellList", + "servedPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_servedPlmnPerCellList_tags_5, + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */ + asn_DEF_servedPlmnPerCellList_tags_5, /* Same as above */ + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */ + { &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_servedPlmnPerCellList_5, + 1, /* Single element */ + &asn_SPC_servedPlmnPerCellList_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3, memb_dl_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "dl-TotalofAvailablePRBs" + }, + { ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4, memb_ul_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "ul-TotalofAvailablePRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_servedPlmnPerCellList_5, + 0, + { &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5, memb_servedPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "servedPlmnPerCellList" + }, +}; +static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = { + sizeof(struct CellResourceReportListItem), + offsetof(struct CellResourceReportListItem, _asn_ctx), + asn_MAP_CellResourceReportListItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellResourceReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = { + "CellResourceReportListItem", + "CellResourceReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_CellResourceReportListItem_tags_1, + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + asn_DEF_CellResourceReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellResourceReportListItem_1, + 4, /* Elements count */ + &asn_SPC_CellResourceReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CellResourceReportListItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CellResourceReportListItem_H_ +#define _CellResourceReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedPlmnPerCellListItem; + +/* CellResourceReportListItem */ +typedef struct CellResourceReportListItem { + NRCGI_t nRCGI; + long *dl_TotalofAvailablePRBs; /* OPTIONAL */ + long *ul_TotalofAvailablePRBs; /* OPTIONAL */ + struct CellResourceReportListItem__servedPlmnPerCellList { + A_SEQUENCE_OF(struct ServedPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } servedPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellResourceReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[4]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ServedPlmnPerCellListItem.h" + +#endif /* _CellResourceReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.c new file mode 100644 index 0000000..217d8e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.h new file mode 100644 index 0000000..ab1ecf2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Criticality.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..0306093 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..1222f03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..502517f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3f0d07b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..825808b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9cef6bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem), + offsetof(struct DU_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem = { + "DU-Usage-Report-CellResourceReportItem", + "DU-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_CellResourceReportItem_H_ +#define _DU_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_UeResourceReportItem; + +/* DU-Usage-Report-CellResourceReportItem */ +typedef struct DU_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-UeResourceReportItem.h" + +#endif /* _DU_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct DU_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct DU_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1 = { + sizeof(struct DU_Usage_Report_Per_UE), + offsetof(struct DU_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_DU_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE = { + "DU-Usage-Report-Per-UE", + "DU-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_DU_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_Per_UE_H_ +#define _DU_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_CellResourceReportItem; + +/* DU-Usage-Report-Per-UE */ +typedef struct DU_Usage_Report_Per_UE { + struct DU_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-CellResourceReportItem.h" + +#endif /* _DU_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,138 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-UeResourceReportItem.h" + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct DU_Usage_Report_UeResourceReportItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct DU_Usage_Report_UeResourceReportItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_UeResourceReportItem), + offsetof(struct DU_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem = { + "DU-Usage-Report-UeResourceReportItem", + "DU-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_UeResourceReportItem_H_ +#define _DU_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DU-Usage-Report-UeResourceReportItem */ +typedef struct DU_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DU_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..94650be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..6f3f1c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-ActionDefinition.h" + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition), + offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { + "E2SM-KPM-ActionDefinition", + "E2SM-KPM-ActionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-ActionDefinition.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_ActionDefinition_H_ +#define _E2SM_KPM_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition */ +typedef struct E2SM_KPM_ActionDefinition { + RIC_Style_Type_t ric_Style_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" + +static int +memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Trigger_ConditionIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { + "policyTest-List", + "policyTest-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_policyTest_List_tags_2, + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_policyTest_List_tags_2, /* Same as above */ + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ + { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_policyTest_List_2, + 1, /* Single element */ + &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_policyTest_List_2, + 0, + { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + 0, 0, /* No default value */ + "policyTest-List" + }, +}; +static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { + "E2SM-KPM-EventTriggerDefinition-Format1", + "E2SM-KPM-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ +#define _E2SM_KPM_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Trigger_ConditionIE_Item; + +/* E2SM-KPM-EventTriggerDefinition-Format1 */ +typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { + struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { + A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *policyTest_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Trigger-ConditionIE-Item.h" + +#endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_H_ +#define _E2SM_KPM_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_EventTriggerDefinition_PR { + E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_EventTriggerDefinition_PR; + +/* E2SM-KPM-EventTriggerDefinition */ +typedef struct E2SM_KPM_EventTriggerDefinition { + E2SM_KPM_EventTriggerDefinition_PR present; + union E2SM_KPM_EventTriggerDefinition_u { + E2SM_KPM_EventTriggerDefinition_Format1_t eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader-Format1.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { + { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "id-GlobalKPMnode-ID" + }, + { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_Report_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "message-Type" + }, + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-Name" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-GNB-ID" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader_Format1), + offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { + "E2SM-KPM-IndicationHeader-Format1", + "E2SM-KPM-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, + 10, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_Format1_H_ +#define _E2SM_KPM_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include "UE-Report-Type.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalKPMnode_ID; +struct NRCGI; +struct SNSSAI; +struct GNB_Name; +struct GlobalgNB_ID; + +/* E2SM-KPM-IndicationHeader-Format1 */ +typedef struct E2SM_KPM_IndicationHeader_Format1 { + struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ + struct NRCGI *nRCGI; /* OPTIONAL */ + PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ + struct SNSSAI *sliceID; /* OPTIONAL */ + long *fiveQI; /* OPTIONAL */ + long *qci; /* OPTIONAL */ + UE_Report_Type_t *message_Type; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + struct GNB_Name *gNB_Name; /* OPTIONAL */ + struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "GlobalKPMnode-ID.h" +#include "NRCGI.h" +#include "SNSSAI.h" +#include "GNB-Name.h" +#include "GlobalgNB-ID.h" + +#endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader, present), + sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationHeader.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_H_ +#define _E2SM_KPM_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-IndicationHeader-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationHeader_PR { + E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationHeader_PR; + +/* E2SM-KPM-IndicationHeader */ +typedef struct E2SM_KPM_IndicationHeader { + E2SM_KPM_IndicationHeader_PR present; + union E2SM_KPM_IndicationHeader_u { + E2SM_KPM_IndicationHeader_Format1_t indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage-Format1.h" + +static int +memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 8)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PM_Containers_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), + offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { + "pm-Containers", + "pm-Containers", + &asn_OP_SEQUENCE_OF, + asn_DEF_pm_Containers_tags_2, + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ + asn_DEF_pm_Containers_tags_2, /* Same as above */ + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ + { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_pm_Containers_2, + 1, /* Single element */ + &asn_SPC_pm_Containers_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pm_Containers_2, + 0, + { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + 0, 0, /* No default value */ + "pm-Containers" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1), + offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { + "E2SM-KPM-IndicationMessage-Format1", + "E2SM-KPM-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format1_H_ +#define _E2SM_KPM_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PM_Containers_List; + +/* E2SM-KPM-IndicationMessage-Format1 */ +typedef struct E2SM_KPM_IndicationMessage_Format1 { + struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { + A_SEQUENCE_OF(struct PM_Containers_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pm_Containers; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PM-Containers-List.h" + +#endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.c @@ -0,0 +1,107 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage.h" + +static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), + asn_MAP_indicationMessage_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { + "indicationMessage", + "indicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, + asn_MBR_indicationMessage_3, + 1, /* Elements count */ + &asn_SPC_indicationMessage_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationMessage_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { + "E2SM-KPM-IndicationMessage", + "E2SM-KPM-IndicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-IndicationMessage.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_H_ +#define _E2SM_KPM_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "E2SM-KPM-IndicationMessage-Format1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { + E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationMessage__indicationMessage_PR; + +/* E2SM-KPM-IndicationMessage */ +typedef struct E2SM_KPM_IndicationMessage { + RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_IndicationMessage__indicationMessage { + E2SM_KPM_IndicationMessage__indicationMessage_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_u { + E2SM_KPM_IndicationMessage_Format1_t indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-RANfunction-Description.h" + +static int +memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_EventTriggerStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { + "ric-EventTriggerStyle-List", + "ric-EventTriggerStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_EventTriggerStyle_List_tags_4, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ + { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_4, + 1, /* Single element */ + &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_ReportStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { + "ric-ReportStyle-List", + "ric-ReportStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_ReportStyle_List_tags_6, + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ + { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_6, + 1, /* Single element */ + &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ric_EventTriggerStyle_List_4, + 0, + { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_6, + 0, + { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-ReportStyle-List" + }, +}; +static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), + asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { + "e2SM-KPM-RANfunction-Item", + "e2SM-KPM-RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_e2SM_KPM_RANfunction_Item_3, + 2, /* Elements count */ + &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, ranFunction_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunction_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_e2SM_KPM_RANfunction_Item_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e2SM-KPM-RANfunction-Item" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { + sizeof(struct E2SM_KPM_RANfunction_Description), + offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), + asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { + "E2SM-KPM-RANfunction-Description", + "E2SM-KPM-RANfunction-Description", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_RANfunction_Description_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2SM-KPM-RANfunction-Description.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_RANfunction_Description_H_ +#define _E2SM_KPM_RANfunction_Description_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunction-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RIC_EventTriggerStyle_List; +struct RIC_ReportStyle_List; + +/* E2SM-KPM-RANfunction-Description */ +typedef struct E2SM_KPM_RANfunction_Description { + RANfunction_Name_t ranFunction_Name; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } e2SM_KPM_RANfunction_Item; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_RANfunction_Description_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RIC-EventTriggerStyle-List.h" +#include "RIC-ReportStyle-List.h" + +#endif /* _E2SM_KPM_RANfunction_Description_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..49cae9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..4dee64b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..cefa91b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..2b8b070 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..b607aa1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..ccec4bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..824871d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..7e142ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c new file mode 100644 index 0000000..212c6fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8af6b41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..e8fc32f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..f97a53c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-CUUP-PM-Format.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItemFormat, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_CUUP_PM_Format__perQCIReportList), + offsetof(struct EPC_CUUP_PM_Format__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = { + sizeof(struct EPC_CUUP_PM_Format), + offsetof(struct EPC_CUUP_PM_Format, _asn_ctx), + asn_MAP_EPC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format = { + "EPC-CUUP-PM-Format", + "EPC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_EPC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_EPC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_EPC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_CUUP_PM_Format_H_ +#define _EPC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItemFormat; + +/* EPC-CUUP-PM-Format */ +typedef struct EPC_CUUP_PM_Format { + struct EPC_CUUP_PM_Format__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItemFormat) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItemFormat.h" + +#endif /* _EPC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-DU-PM-Container.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_DU_PM_Container__perQCIReportList), + offsetof(struct EPC_DU_PM_Container__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = { + sizeof(struct EPC_DU_PM_Container), + offsetof(struct EPC_DU_PM_Container, _asn_ctx), + asn_MAP_EPC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container = { + "EPC-DU-PM-Container", + "EPC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_EPC_DU_PM_Container_tags_1, + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_EPC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_EPC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/EPC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_DU_PM_Container_H_ +#define _EPC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItem; + +/* EPC-DU-PM-Container */ +typedef struct EPC_DU_PM_Container { + struct EPC_DU_PM_Container__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItem.h" + +#endif /* _EPC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..e971c4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..a209847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-CUUP-PM-Format.h" + +static int +memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SliceToReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = { + sizeof(struct FGC_CUUP_PM_Format__sliceToReportList), + offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = { + "sliceToReportList", + "sliceToReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_sliceToReportList_tags_2, + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_sliceToReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_sliceToReportList_2, + 1, /* Single element */ + &asn_SPC_sliceToReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sliceToReportList_2, + 0, + { &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2, memb_sliceToReportList_constraint_1 }, + 0, 0, /* No default value */ + "sliceToReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = { + sizeof(struct FGC_CUUP_PM_Format), + offsetof(struct FGC_CUUP_PM_Format, _asn_ctx), + asn_MAP_FGC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format = { + "FGC-CUUP-PM-Format", + "FGC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_FGC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_FGC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_FGC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_CUUP_PM_Format_H_ +#define _FGC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SliceToReportListItem; + +/* FGC-CUUP-PM-Format */ +typedef struct FGC_CUUP_PM_Format { + struct FGC_CUUP_PM_Format__sliceToReportList { + A_SEQUENCE_OF(struct SliceToReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sliceToReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SliceToReportListItem.h" + +#endif /* _FGC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-DU-PM-Container.h" + +static int +memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SlicePerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = { + sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList), + offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = { + "slicePerPlmnPerCellList", + "slicePerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_slicePerPlmnPerCellList_tags_2, + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */ + asn_DEF_slicePerPlmnPerCellList_tags_2, /* Same as above */ + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */ + { &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_slicePerPlmnPerCellList_2, + 1, /* Single element */ + &asn_SPC_slicePerPlmnPerCellList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_slicePerPlmnPerCellList_2, + 0, + { &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2, memb_slicePerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "slicePerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = { + sizeof(struct FGC_DU_PM_Container), + offsetof(struct FGC_DU_PM_Container, _asn_ctx), + asn_MAP_FGC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container = { + "FGC-DU-PM-Container", + "FGC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_FGC_DU_PM_Container_tags_1, + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_FGC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_FGC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FGC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_DU_PM_Container_H_ +#define _FGC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SlicePerPlmnPerCellListItem; + +/* FGC-DU-PM-Container */ +typedef struct FGC_DU_PM_Container { + struct FGC_DU_PM_Container__slicePerPlmnPerCellList { + A_SEQUENCE_OF(struct SlicePerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } slicePerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SlicePerPlmnPerCellListItem.h" + +#endif /* _FGC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnListItem), + offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = { + "FQIPERSlicesPerPlmnListItem", + "FQIPERSlicesPerPlmnListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnListItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnListItem_H_ +#define _FQIPERSlicesPerPlmnListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnListItem */ +typedef struct FQIPERSlicesPerPlmnListItem { + long fiveQI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnPerCellListItem), + offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = { + "FQIPERSlicesPerPlmnPerCellListItem", + "FQIPERSlicesPerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnPerCellListItem_H_ +#define _FQIPERSlicesPerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnPerCellListItem */ +typedef struct FQIPERSlicesPerPlmnPerCellListItem { + long fiveQI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-CP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_CP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_CP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_CP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_CP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_CP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name = { + "GNB-CU-CP-Name", + "GNB-CU-CP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_CP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_CP_Name_constr_1, &asn_PER_type_GNB_CU_CP_Name_constr_1, GNB_CU_CP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-CP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_CP_Name_H_ +#define _GNB_CU_CP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-Name */ +typedef PrintableString_t GNB_CU_CP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name; +asn_struct_free_f GNB_CU_CP_Name_free; +asn_struct_print_f GNB_CU_CP_Name_print; +asn_constr_check_f GNB_CU_CP_Name_constraint; +ber_type_decoder_f GNB_CU_CP_Name_decode_ber; +der_type_encoder_f GNB_CU_CP_Name_encode_der; +xer_type_decoder_f GNB_CU_CP_Name_decode_xer; +xer_type_encoder_f GNB_CU_CP_Name_encode_xer; +oer_type_decoder_f GNB_CU_CP_Name_decode_oer; +oer_type_encoder_f GNB_CU_CP_Name_encode_oer; +per_type_decoder_f GNB_CU_CP_Name_decode_uper; +per_type_encoder_f GNB_CU_CP_Name_encode_uper; +per_type_decoder_f GNB_CU_CP_Name_decode_aper; +per_type_encoder_f GNB_CU_CP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..737a4f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..e6b9c43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_UP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_UP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_UP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_UP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_UP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name = { + "GNB-CU-UP-Name", + "GNB-CU-UP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_UP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_Name_constr_1, &asn_PER_type_GNB_CU_UP_Name_constr_1, GNB_CU_UP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-CU-UP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_Name_H_ +#define _GNB_CU_UP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-Name */ +typedef PrintableString_t GNB_CU_UP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name; +asn_struct_free_f GNB_CU_UP_Name_free; +asn_struct_print_f GNB_CU_UP_Name_print; +asn_constr_check_f GNB_CU_UP_Name_constraint; +ber_type_decoder_f GNB_CU_UP_Name_decode_ber; +der_type_encoder_f GNB_CU_UP_Name_encode_der; +xer_type_decoder_f GNB_CU_UP_Name_decode_xer; +xer_type_encoder_f GNB_CU_UP_Name_encode_xer; +oer_type_decoder_f GNB_CU_UP_Name_decode_oer; +oer_type_encoder_f GNB_CU_UP_Name_encode_oer; +per_type_decoder_f GNB_CU_UP_Name_decode_uper; +per_type_encoder_f GNB_CU_UP_Name_encode_uper; +per_type_decoder_f GNB_CU_UP_Name_decode_aper; +per_type_encoder_f GNB_CU_UP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..65e23da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_DU_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_DU_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_DU_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_DU_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_DU_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name = { + "GNB-DU-Name", + "GNB-DU-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_DU_Name_tags_1, + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_Name_constr_1, &asn_PER_type_GNB_DU_Name_constr_1, GNB_DU_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-DU-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_Name_H_ +#define _GNB_DU_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-Name */ +typedef PrintableString_t GNB_DU_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name; +asn_struct_free_f GNB_DU_Name_free; +asn_struct_print_f GNB_DU_Name_print; +asn_constr_check_f GNB_DU_Name_constraint; +ber_type_decoder_f GNB_DU_Name_decode_ber; +der_type_encoder_f GNB_DU_Name_encode_der; +xer_type_decoder_f GNB_DU_Name_decode_xer; +xer_type_encoder_f GNB_DU_Name_encode_xer; +oer_type_decoder_f GNB_DU_Name_decode_oer; +oer_type_encoder_f GNB_DU_Name_encode_oer; +per_type_decoder_f GNB_DU_Name_decode_uper; +per_type_encoder_f GNB_DU_Name_encode_uper; +per_type_decoder_f GNB_DU_Name_decode_aper; +per_type_encoder_f GNB_DU_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..81bc2b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..cf5438c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-Name.h" + +static asn_oer_constraints_t asn_OER_type_GNB_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_DU_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-DU-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-CU-UP-Name */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1 = { + sizeof(struct GNB_Name), + offsetof(struct GNB_Name, _asn_ctx), + offsetof(struct GNB_Name, present), + sizeof(((struct GNB_Name *)0)->present), + asn_MAP_GNB_Name_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_Name = { + "GNB-Name", + "GNB-Name", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_Name_constr_1, &asn_PER_type_GNB_Name_constr_1, CHOICE_constraint }, + asn_MBR_GNB_Name_1, + 3, /* Elements count */ + &asn_SPC_GNB_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GNB-Name.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_Name_H_ +#define _GNB_Name_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-DU-Name.h" +#include "GNB-CU-CP-Name.h" +#include "GNB-CU-UP-Name.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_Name_PR { + GNB_Name_PR_NOTHING, /* No components present */ + GNB_Name_PR_gNB_DU_Name, + GNB_Name_PR_gNB_CU_CP_Name, + GNB_Name_PR_gNB_CU_UP_Name + /* Extensions may appear below */ + +} GNB_Name_PR; + +/* GNB-Name */ +typedef struct GNB_Name { + GNB_Name_PR present; + union GNB_Name_u { + GNB_DU_Name_t gNB_DU_Name; + GNB_CU_CP_Name_t gNB_CU_CP_Name; + GNB_CU_UP_Name_t gNB_CU_UP_Name; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_Name; +extern asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_Name_1[3]; +extern asn_per_constraints_t asn_PER_type_GNB_Name_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..0b194e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..339797e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..f31a018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..6047414 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..2728634 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..0bae91d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..25f0346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..2f36099 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..91e427b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..d6767bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..58f3724 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..bd653ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.c @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ID.h" + +static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ID), + offsetof(struct GlobalKPMnode_ID, _asn_ctx), + offsetof(struct GlobalKPMnode_ID, present), + sizeof(((struct GlobalKPMnode_ID *)0)->present), + asn_MAP_GlobalKPMnode_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = { + "GlobalKPMnode-ID", + "GlobalKPMnode-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalKPMnode_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalKPMnode_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ID.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ID_H_ +#define _GlobalKPMnode_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalKPMnode-gNB-ID.h" +#include "GlobalKPMnode-en-gNB-ID.h" +#include "GlobalKPMnode-ng-eNB-ID.h" +#include "GlobalKPMnode-eNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalKPMnode_ID_PR { + GlobalKPMnode_ID_PR_NOTHING, /* No components present */ + GlobalKPMnode_ID_PR_gNB, + GlobalKPMnode_ID_PR_en_gNB, + GlobalKPMnode_ID_PR_ng_eNB, + GlobalKPMnode_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalKPMnode_ID_PR; + +/* GlobalKPMnode-ID */ +typedef struct GlobalKPMnode_ID { + GlobalKPMnode_ID_PR present; + union GlobalKPMnode_ID_u { + GlobalKPMnode_gNB_ID_t gNB; + GlobalKPMnode_en_gNB_ID_t en_gNB; + GlobalKPMnode_ng_eNB_ID_t ng_eNB; + GlobalKPMnode_eNB_ID_t eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_eNB_ID), + offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID = { + "GlobalKPMnode-eNB-ID", + "GlobalKPMnode-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_eNB_ID_H_ +#define _GlobalKPMnode_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-eNB-ID */ +typedef struct GlobalKPMnode_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_en_gNB_ID), + offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID = { + "GlobalKPMnode-en-gNB-ID", + "GlobalKPMnode-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_en_gNB_ID_H_ +#define _GlobalKPMnode_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-en-gNB-ID */ +typedef struct GlobalKPMnode_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_gNB_ID), + offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalKPMnode_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = { + "GlobalKPMnode-gNB-ID", + "GlobalKPMnode-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalKPMnode_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_gNB_ID_H_ +#define _GlobalKPMnode_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-gNB-ID */ +typedef struct GlobalKPMnode_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ng_eNB_ID), + offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID = { + "GlobalKPMnode-ng-eNB-ID", + "GlobalKPMnode-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ng_eNB_ID_H_ +#define _GlobalKPMnode_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-ng-eNB-ID */ +typedef struct GlobalKPMnode_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..f113921 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..c1ab6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..07f8116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..1e254a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..bfcc098 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..e31846d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..d220e9a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..e8246ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..de67caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.c @@ -0,0 +1,389 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..a8a01f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..c1bec19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + converter-example.c\ + pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..8abd4f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,240 @@ +ASN_MODULE_SRCS= \ + GlobalKPMnode-ID.c \ + GlobalKPMnode-gNB-ID.c \ + GlobalgNB-ID.c \ + GNB-CU-UP-ID.c \ + GNB-DU-ID.c \ + GNB-ID-Choice.c \ + GlobalKPMnode-en-gNB-ID.c \ + GlobalenGNB-ID.c \ + ENGNB-ID.c \ + GlobalKPMnode-ng-eNB-ID.c \ + GlobalngeNB-ID.c \ + ENB-ID-Choice.c \ + GlobalKPMnode-eNB-ID.c \ + GlobalENB-ID.c \ + ENB-ID.c \ + NRCGI.c \ + PLMN-Identity.c \ + NRCellIdentity.c \ + SNSSAI.c \ + C-RNTI.c \ + RIC-Style-Type.c \ + RIC-Style-Name.c \ + RIC-Format-Type.c \ + E2SM-KPM-EventTriggerDefinition.c \ + E2SM-KPM-EventTriggerDefinition-Format1.c \ + E2SM-KPM-ActionDefinition.c \ + E2SM-KPM-IndicationHeader.c \ + E2SM-KPM-IndicationHeader-Format1.c \ + E2SM-KPM-IndicationMessage.c \ + E2SM-KPM-IndicationMessage-Format1.c \ + PM-Containers-List.c \ + E2SM-KPM-RANfunction-Description.c \ + NI-Type.c \ + RAN-Container.c \ + Timestamp.c \ + Trigger-ConditionIE-Item.c \ + RT-Period-IE.c \ + RANcallProcess-ID-string.c \ + RANfunction-Name.c \ + RIC-EventTriggerStyle-List.c \ + RIC-ReportStyle-List.c \ + PF-Container.c \ + GNB-Name.c \ + GNB-CU-CP-Name.c \ + GNB-DU-Name.c \ + GNB-CU-UP-Name.c \ + UE-Report-Type.c \ + ODU-PF-Container.c \ + CellResourceReportListItem.c \ + ServedPlmnPerCellListItem.c \ + FGC-DU-PM-Container.c \ + SlicePerPlmnPerCellListItem.c \ + FQIPERSlicesPerPlmnPerCellListItem.c \ + EPC-DU-PM-Container.c \ + PerQCIReportListItem.c \ + DU-Usage-Report-Per-UE.c \ + DU-Usage-Report-CellResourceReportItem.c \ + DU-Usage-Report-UeResourceReportItem.c \ + OCUCP-PF-Container.c \ + CU-CP-Usage-Report-Per-UE.c \ + CU-CP-Usage-Report-CellResourceReportItem.c \ + CU-CP-Usage-Report-UeResourceReportItem.c \ + OCUUP-PF-Container.c \ + PF-ContainerListItem.c \ + CUUPMeasurement-Container.c \ + PlmnID-List.c \ + FGC-CUUP-PM-Format.c \ + SliceToReportListItem.c \ + FQIPERSlicesPerPlmnListItem.c \ + EPC-CUUP-PM-Format.c \ + PerQCIReportListItemFormat.c \ + CU-UP-Usage-Report-Per-UE.c \ + CU-UP-Usage-Report-CellResourceReportItem.c \ + CU-UP-Usage-Report-UeResourceReportItem.c + +ASN_MODULE_HDRS= \ + GlobalKPMnode-ID.h \ + GlobalKPMnode-gNB-ID.h \ + GlobalgNB-ID.h \ + GNB-CU-UP-ID.h \ + GNB-DU-ID.h \ + GNB-ID-Choice.h \ + GlobalKPMnode-en-gNB-ID.h \ + GlobalenGNB-ID.h \ + ENGNB-ID.h \ + GlobalKPMnode-ng-eNB-ID.h \ + GlobalngeNB-ID.h \ + ENB-ID-Choice.h \ + GlobalKPMnode-eNB-ID.h \ + GlobalENB-ID.h \ + ENB-ID.h \ + NRCGI.h \ + PLMN-Identity.h \ + NRCellIdentity.h \ + SNSSAI.h \ + C-RNTI.h \ + RIC-Style-Type.h \ + RIC-Style-Name.h \ + RIC-Format-Type.h \ + E2SM-KPM-EventTriggerDefinition.h \ + E2SM-KPM-EventTriggerDefinition-Format1.h \ + E2SM-KPM-ActionDefinition.h \ + E2SM-KPM-IndicationHeader.h \ + E2SM-KPM-IndicationHeader-Format1.h \ + E2SM-KPM-IndicationMessage.h \ + E2SM-KPM-IndicationMessage-Format1.h \ + PM-Containers-List.h \ + E2SM-KPM-RANfunction-Description.h \ + NI-Type.h \ + RAN-Container.h \ + Timestamp.h \ + Trigger-ConditionIE-Item.h \ + RT-Period-IE.h \ + RANcallProcess-ID-string.h \ + RANfunction-Name.h \ + RIC-EventTriggerStyle-List.h \ + RIC-ReportStyle-List.h \ + PF-Container.h \ + GNB-Name.h \ + GNB-CU-CP-Name.h \ + GNB-DU-Name.h \ + GNB-CU-UP-Name.h \ + UE-Report-Type.h \ + ODU-PF-Container.h \ + CellResourceReportListItem.h \ + ServedPlmnPerCellListItem.h \ + FGC-DU-PM-Container.h \ + SlicePerPlmnPerCellListItem.h \ + FQIPERSlicesPerPlmnPerCellListItem.h \ + EPC-DU-PM-Container.h \ + PerQCIReportListItem.h \ + DU-Usage-Report-Per-UE.h \ + DU-Usage-Report-CellResourceReportItem.h \ + DU-Usage-Report-UeResourceReportItem.h \ + OCUCP-PF-Container.h \ + CU-CP-Usage-Report-Per-UE.h \ + CU-CP-Usage-Report-CellResourceReportItem.h \ + CU-CP-Usage-Report-UeResourceReportItem.h \ + OCUUP-PF-Container.h \ + PF-ContainerListItem.h \ + CUUPMeasurement-Container.h \ + PlmnID-List.h \ + FGC-CUUP-PM-Format.h \ + SliceToReportListItem.h \ + FQIPERSlicesPerPlmnListItem.h \ + EPC-CUUP-PM-Format.h \ + PerQCIReportListItemFormat.h \ + CU-UP-Usage-Report-Per-UE.h \ + CU-UP-Usage-Report-CellResourceReportItem.h \ + CU-UP-Usage-Report-UeResourceReportItem.h + +ASN_MODULE_HDRS+=OPEN_TYPE.h +ASN_MODULE_SRCS+=OPEN_TYPE.c +ASN_MODULE_HDRS+=constr_CHOICE.h +ASN_MODULE_HDRS+=INTEGER.h +ASN_MODULE_SRCS+=INTEGER.c +ASN_MODULE_HDRS+=NativeEnumerated.h +ASN_MODULE_SRCS+=NativeEnumerated.c +ASN_MODULE_HDRS+=NativeInteger.h +ASN_MODULE_SRCS+=NativeInteger.c +ASN_MODULE_HDRS+=PrintableString.h +ASN_MODULE_SRCS+=PrintableString.c +ASN_MODULE_HDRS+=OCTET_STRING.h +ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=asn_SET_OF.h +ASN_MODULE_SRCS+=asn_SET_OF.c +ASN_MODULE_SRCS+=constr_CHOICE.c +ASN_MODULE_HDRS+=constr_SEQUENCE.h +ASN_MODULE_SRCS+=constr_SEQUENCE.c +ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=constr_SET_OF.h +ASN_MODULE_SRCS+=constr_SET_OF.c +ASN_MODULE_HDRS+=asn_application.h +ASN_MODULE_SRCS+=asn_application.c +ASN_MODULE_HDRS+=asn_ioc.h +ASN_MODULE_HDRS+=asn_system.h +ASN_MODULE_HDRS+=asn_codecs.h +ASN_MODULE_HDRS+=asn_internal.h +ASN_MODULE_SRCS+=asn_internal.c +ASN_MODULE_HDRS+=asn_random_fill.h +ASN_MODULE_SRCS+=asn_random_fill.c +ASN_MODULE_HDRS+=asn_bit_data.h +ASN_MODULE_SRCS+=asn_bit_data.c +ASN_MODULE_SRCS+=OCTET_STRING.c +ASN_MODULE_HDRS+=BIT_STRING.h +ASN_MODULE_SRCS+=BIT_STRING.c +ASN_MODULE_SRCS+=asn_codecs_prim.c +ASN_MODULE_HDRS+=asn_codecs_prim.h +ASN_MODULE_HDRS+=ber_tlv_length.h +ASN_MODULE_SRCS+=ber_tlv_length.c +ASN_MODULE_HDRS+=ber_tlv_tag.h +ASN_MODULE_SRCS+=ber_tlv_tag.c +ASN_MODULE_HDRS+=ber_decoder.h +ASN_MODULE_SRCS+=ber_decoder.c +ASN_MODULE_HDRS+=der_encoder.h +ASN_MODULE_SRCS+=der_encoder.c +ASN_MODULE_HDRS+=constr_TYPE.h +ASN_MODULE_SRCS+=constr_TYPE.c +ASN_MODULE_HDRS+=constraints.h +ASN_MODULE_SRCS+=constraints.c +ASN_MODULE_HDRS+=xer_support.h +ASN_MODULE_SRCS+=xer_support.c +ASN_MODULE_HDRS+=xer_decoder.h +ASN_MODULE_SRCS+=xer_decoder.c +ASN_MODULE_HDRS+=xer_encoder.h +ASN_MODULE_SRCS+=xer_encoder.c +ASN_MODULE_HDRS+=per_support.h +ASN_MODULE_SRCS+=per_support.c +ASN_MODULE_HDRS+=per_decoder.h +ASN_MODULE_SRCS+=per_decoder.c +ASN_MODULE_HDRS+=per_encoder.h +ASN_MODULE_SRCS+=per_encoder.c +ASN_MODULE_HDRS+=per_opentype.h +ASN_MODULE_SRCS+=per_opentype.c +ASN_MODULE_HDRS+=oer_decoder.h +ASN_MODULE_HDRS+=oer_encoder.h +ASN_MODULE_HDRS+=oer_support.h +ASN_MODULE_SRCS+=oer_decoder.c +ASN_MODULE_SRCS+=oer_encoder.c +ASN_MODULE_SRCS+=oer_support.c +ASN_MODULE_SRCS+=OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=INTEGER_oer.c +ASN_MODULE_SRCS+=BIT_STRING_oer.c +ASN_MODULE_SRCS+=OCTET_STRING_oer.c +ASN_MODULE_SRCS+=NativeInteger_oer.c +ASN_MODULE_SRCS+=NativeEnumerated_oer.c +ASN_MODULE_SRCS+=constr_CHOICE_oer.c +ASN_MODULE_SRCS+=constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NI-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_NI_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NI_Type_value2enum_1[] = { + { 0, 4, "x2-u" }, + { 1, 4, "xn-u" }, + { 2, 4, "f1-u" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NI_Type_enum2value_1[] = { + 2, /* f1-u(2) */ + 0, /* x2-u(0) */ + 1 /* xn-u(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = { + asn_MAP_NI_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NI_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NI_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NI_Type = { + "NI-Type", + "NI-Type", + &asn_OP_NativeEnumerated, + asn_DEF_NI_Type_tags_1, + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + asn_DEF_NI_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NI_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NI-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NI_Type_H_ +#define _NI_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NI_Type { + NI_Type_x2_u = 0, + NI_Type_xn_u = 1, + NI_Type_f1_u = 2 + /* + * Enumeration is extensible + */ +} e_NI_Type; + +/* NI-Type */ +typedef long NI_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NI_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NI_Type; +extern const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1; +asn_struct_free_f NI_Type_free; +asn_struct_print_f NI_Type_print; +asn_constr_check_f NI_Type_constraint; +ber_type_decoder_f NI_Type_decode_ber; +der_type_encoder_f NI_Type_encode_der; +xer_type_decoder_f NI_Type_decode_xer; +xer_type_encoder_f NI_Type_encode_xer; +oer_type_decoder_f NI_Type_decode_oer; +oer_type_encoder_f NI_Type_encode_oer; +per_type_decoder_f NI_Type_decode_uper; +per_type_encoder_f NI_Type_encode_uper; +per_type_decoder_f NI_Type_decode_aper; +per_type_encoder_f NI_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NI_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCGI.h" + +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 2, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCGI.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentity_t nRCellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCellIdentity.h" + +int +NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 36 /* (SIZE(36..36)) */}; +asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { + "NRCellIdentity", + "NRCellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentity_tags_1, + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NRCellIdentity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCellIdentity_H_ +#define _NRCellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentity */ +typedef BIT_STRING_t NRCellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentity; +asn_struct_free_f NRCellIdentity_free; +asn_struct_print_f NRCellIdentity_print; +asn_constr_check_f NRCellIdentity_constraint; +ber_type_decoder_f NRCellIdentity_decode_ber; +der_type_encoder_f NRCellIdentity_encode_der; +xer_type_decoder_f NRCellIdentity_decode_xer; +xer_type_encoder_f NRCellIdentity_encode_xer; +oer_type_decoder_f NRCellIdentity_decode_oer; +oer_type_encoder_f NRCellIdentity_encode_oer; +per_type_decoder_f NRCellIdentity_decode_uper; +per_type_encoder_f NRCellIdentity_encode_uper; +per_type_decoder_f NRCellIdentity_decode_aper; +per_type_encoder_f NRCellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUCP-PF-Container.h" + +static int +memb_numberOfActive_UEs_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_3[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_numberOfActive_UEs_constr_4, &asn_PER_memb_numberOfActive_UEs_constr_4, memb_numberOfActive_UEs_constraint_3 }, + 0, 0, /* No default value */ + "numberOfActive-UEs" + }, +}; +static const int asn_MAP_cu_CP_Resource_Status_oms_3[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_3 = { + sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status), + offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx), + asn_MAP_cu_CP_Resource_Status_tag2el_3, + 1, /* Count of tags in the map */ + asn_MAP_cu_CP_Resource_Status_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_3 = { + "cu-CP-Resource-Status", + "cu-CP-Resource-Status", + &asn_OP_SEQUENCE, + asn_DEF_cu_CP_Resource_Status_tags_3, + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]) - 1, /* 1 */ + asn_DEF_cu_CP_Resource_Status_tags_3, /* Same as above */ + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_cu_CP_Resource_Status_3, + 1, /* Elements count */ + &asn_SPC_cu_CP_Resource_Status_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container, gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cu_CP_Resource_Status_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-CP-Resource-Status" + }, +}; +static const int asn_MAP_OCUCP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cu-CP-Resource-Status */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = { + sizeof(struct OCUCP_PF_Container), + offsetof(struct OCUCP_PF_Container, _asn_ctx), + asn_MAP_OCUCP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUCP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container = { + "OCUCP-PF-Container", + "OCUCP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUCP_PF_Container_tags_1, + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUCP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUCP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUCP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUCP-PF-Container.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUCP_PF_Container_H_ +#define _OCUCP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-CP-Name.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OCUCP-PF-Container */ +typedef struct OCUCP_PF_Container { + GNB_CU_CP_Name_t *gNB_CU_CP_Name; /* OPTIONAL */ + struct OCUCP_PF_Container__cu_CP_Resource_Status { + long *numberOfActive_UEs; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cu_CP_Resource_Status; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUCP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCUCP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.c @@ -0,0 +1,141 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUUP-PF-Container.h" + +static int +memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pf_ContainerList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PF_ContainerListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_3 = { + sizeof(struct OCUUP_PF_Container__pf_ContainerList), + offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_3 = { + "pf-ContainerList", + "pf-ContainerList", + &asn_OP_SEQUENCE_OF, + asn_DEF_pf_ContainerList_tags_3, + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]) - 1, /* 1 */ + asn_DEF_pf_ContainerList_tags_3, /* Same as above */ + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]), /* 2 */ + { &asn_OER_type_pf_ContainerList_constr_3, &asn_PER_type_pf_ContainerList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_pf_ContainerList_3, + 1, /* Single element */ + &asn_SPC_pf_ContainerList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUUP_PF_Container, gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pf_ContainerList_3, + 0, + { &asn_OER_memb_pf_ContainerList_constr_3, &asn_PER_memb_pf_ContainerList_constr_3, memb_pf_ContainerList_constraint_1 }, + 0, 0, /* No default value */ + "pf-ContainerList" + }, +}; +static const int asn_MAP_OCUUP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pf-ContainerList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = { + sizeof(struct OCUUP_PF_Container), + offsetof(struct OCUUP_PF_Container, _asn_ctx), + asn_MAP_OCUUP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUUP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container = { + "OCUUP-PF-Container", + "OCUUP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUUP_PF_Container_tags_1, + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUUP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUUP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUUP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OCUUP-PF-Container.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUUP_PF_Container_H_ +#define _OCUUP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-UP-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_ContainerListItem; + +/* OCUUP-PF-Container */ +typedef struct OCUUP_PF_Container { + GNB_CU_UP_Name_t *gNB_CU_UP_Name; /* OPTIONAL */ + struct OCUUP_PF_Container__pf_ContainerList { + A_SEQUENCE_OF(struct PF_ContainerListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pf_ContainerList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUUP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-ContainerListItem.h" + +#endif /* _OCUUP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ODU-PF-Container.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellResourceReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct ODU_PF_Container__cellResourceReportList), + offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = { + sizeof(struct ODU_PF_Container), + offsetof(struct ODU_PF_Container, _asn_ctx), + asn_MAP_ODU_PF_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container = { + "ODU-PF-Container", + "ODU-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_ODU_PF_Container_tags_1, + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_ODU_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ODU_PF_Container_1, + 1, /* Elements count */ + &asn_SPC_ODU_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ODU-PF-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ODU_PF_Container_H_ +#define _ODU_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellResourceReportListItem; + +/* ODU-PF-Container */ +typedef struct ODU_PF_Container { + struct ODU_PF_Container__cellResourceReportList { + A_SEQUENCE_OF(struct CellResourceReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ODU_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellResourceReportListItem.h" + +#endif /* _ODU_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-Container.h" + +static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oDU), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ODU_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_CP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUCP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_UP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUUP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */ +}; +asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = { + sizeof(struct PF_Container), + offsetof(struct PF_Container, _asn_ctx), + offsetof(struct PF_Container, present), + sizeof(((struct PF_Container *)0)->present), + asn_MAP_PF_Container_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_Container = { + "PF-Container", + "PF-Container", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint }, + asn_MBR_PF_Container_1, + 3, /* Elements count */ + &asn_SPC_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-Container.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_Container_H_ +#define _PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "ODU-PF-Container.h" +#include "OCUCP-PF-Container.h" +#include "OCUUP-PF-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PF_Container_PR { + PF_Container_PR_NOTHING, /* No components present */ + PF_Container_PR_oDU, + PF_Container_PR_oCU_CP, + PF_Container_PR_oCU_UP + /* Extensions may appear below */ + +} PF_Container_PR; + +/* PF-Container */ +typedef struct PF_Container { + PF_Container_PR present; + union PF_Container_u { + ODU_PF_Container_t oDU; + OCUCP_PF_Container_t oCU_CP; + OCUUP_PF_Container_t oCU_UP; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_Container; +extern asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_Container_1[3]; +extern asn_per_constraints_t asn_PER_type_PF_Container_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-ContainerListItem.h" + +asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NI_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-type" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CUUPMeasurement_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "o-CU-UP-PM-Container" + }, +}; +static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = { + sizeof(struct PF_ContainerListItem), + offsetof(struct PF_ContainerListItem, _asn_ctx), + asn_MAP_PF_ContainerListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem = { + "PF-ContainerListItem", + "PF-ContainerListItem", + &asn_OP_SEQUENCE, + asn_DEF_PF_ContainerListItem_tags_1, + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + asn_DEF_PF_ContainerListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PF_ContainerListItem_1, + 2, /* Elements count */ + &asn_SPC_PF_ContainerListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PF-ContainerListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_ContainerListItem_H_ +#define _PF_ContainerListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NI-Type.h" +#include "CUUPMeasurement-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PF-ContainerListItem */ +typedef struct PF_ContainerListItem { + NI_Type_t interface_type; + CUUPMeasurement_Container_t o_CU_UP_PM_Container; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_ContainerListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_ContainerListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..e3754f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..6835400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PM-Containers-List.h" + +asn_TYPE_member_t asn_MBR_PM_Containers_List_1[] = { + { ATF_POINTER, 2, offsetof(struct PM_Containers_List, performanceContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "performanceContainer" + }, + { ATF_POINTER, 1, offsetof(struct PM_Containers_List, theRANContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAN_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "theRANContainer" + }, +}; +static const int asn_MAP_PM_Containers_List_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_PM_Containers_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1 = { + sizeof(struct PM_Containers_List), + offsetof(struct PM_Containers_List, _asn_ctx), + asn_MAP_PM_Containers_List_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PM_Containers_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PM_Containers_List = { + "PM-Containers-List", + "PM-Containers-List", + &asn_OP_SEQUENCE, + asn_DEF_PM_Containers_List_tags_1, + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + asn_DEF_PM_Containers_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PM_Containers_List_1, + 2, /* Elements count */ + &asn_SPC_PM_Containers_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PM-Containers-List.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PM_Containers_List_H_ +#define _PM_Containers_List_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_Container; +struct RAN_Container; + +/* PM-Containers-List */ +typedef struct PM_Containers_List { + struct PF_Container *performanceContainer; /* OPTIONAL */ + struct RAN_Container *theRANContainer; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PM_Containers_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PM_Containers_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PM_Containers_List_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-Container.h" +#include "RAN-Container.h" + +#endif /* _PM_Containers_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItem.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = { + sizeof(struct PerQCIReportListItem), + offsetof(struct PerQCIReportListItem, _asn_ctx), + asn_MAP_PerQCIReportListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = { + "PerQCIReportListItem", + "PerQCIReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItem_tags_1, + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItem_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItem_H_ +#define _PerQCIReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItem */ +typedef struct PerQCIReportListItem { + long qci; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItemFormat.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = { + sizeof(struct PerQCIReportListItemFormat), + offsetof(struct PerQCIReportListItemFormat, _asn_ctx), + asn_MAP_PerQCIReportListItemFormat_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItemFormat_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = { + "PerQCIReportListItemFormat", + "PerQCIReportListItemFormat", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItemFormat_tags_1, + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItemFormat_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItemFormat_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItemFormat_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PerQCIReportListItemFormat.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItemFormat_H_ +#define _PerQCIReportListItemFormat_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItemFormat */ +typedef struct PerQCIReportListItemFormat { + long qci; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItemFormat_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItemFormat_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PlmnID-List.h" + +asn_TYPE_member_t asn_MBR_PlmnID_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PlmnID_List, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct PlmnID_List, cu_UP_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct PlmnID_List, cu_UP_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-EPC" + }, +}; +static const int asn_MAP_PlmnID_List_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PlmnID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PlmnID_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1 = { + sizeof(struct PlmnID_List), + offsetof(struct PlmnID_List, _asn_ctx), + asn_MAP_PlmnID_List_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PlmnID_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PlmnID_List = { + "PlmnID-List", + "PlmnID-List", + &asn_OP_SEQUENCE, + asn_DEF_PlmnID_List_tags_1, + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + asn_DEF_PlmnID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PlmnID_List_1, + 3, /* Elements count */ + &asn_SPC_PlmnID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PlmnID-List.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PlmnID_List_H_ +#define _PlmnID_List_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_CUUP_PM_Format; +struct EPC_CUUP_PM_Format; + +/* PlmnID-List */ +typedef struct PlmnID_List { + PLMN_Identity_t pLMN_Identity; + struct FGC_CUUP_PM_Format *cu_UP_PM_5GC; /* OPTIONAL */ + struct EPC_CUUP_PM_Format *cu_UP_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PlmnID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PlmnID_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PlmnID_List_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-CUUP-PM-Format.h" +#include "EPC-CUUP-PM-Format.h" + +#endif /* _PlmnID_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.c new file mode 100644 index 0000000..4f55ae3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.h new file mode 100644 index 0000000..8f93430 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Presence.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..0e488d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..a2e8fe8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProcedureCode.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4046387 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,810 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..5034a64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c9d5808 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..3376410 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..ad1c8b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..5b730c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..f77445b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..1837ac8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..af5597c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7190 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..573edcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..9c7e653 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..8193bd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..9afe610 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..f6d2261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..c516962 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..b17c298 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.c @@ -0,0 +1,127 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RAN-Container.h" + +static asn_oer_constraints_t asn_OER_type_reportContainer_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_reportContainer_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportContainer_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oDU_UE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DU_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_CP_UE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_CP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_UP_UE), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_UP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP-UE" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_reportContainer_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU-UE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP-UE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP-UE */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportContainer_specs_3 = { + sizeof(struct RAN_Container__reportContainer), + offsetof(struct RAN_Container__reportContainer, _asn_ctx), + offsetof(struct RAN_Container__reportContainer, present), + sizeof(((struct RAN_Container__reportContainer *)0)->present), + asn_MAP_reportContainer_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportContainer_3 = { + "reportContainer", + "reportContainer", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_reportContainer_constr_3, &asn_PER_type_reportContainer_constr_3, CHOICE_constraint }, + asn_MBR_reportContainer_3, + 3, /* Elements count */ + &asn_SPC_reportContainer_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RAN_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, timestamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Timestamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, reportContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportContainer_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportContainer" + }, +}; +static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RAN_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1 = { + sizeof(struct RAN_Container), + offsetof(struct RAN_Container, _asn_ctx), + asn_MAP_RAN_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RAN_Container = { + "RAN-Container", + "RAN-Container", + &asn_OP_SEQUENCE, + asn_DEF_RAN_Container_tags_1, + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + asn_DEF_RAN_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RAN_Container_1, + 2, /* Elements count */ + &asn_SPC_RAN_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RAN-Container.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RAN_Container_H_ +#define _RAN_Container_H_ + + +#include + +/* Including external dependencies */ +#include "Timestamp.h" +#include "DU-Usage-Report-Per-UE.h" +#include "CU-CP-Usage-Report-Per-UE.h" +#include "CU-UP-Usage-Report-Per-UE.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAN_Container__reportContainer_PR { + RAN_Container__reportContainer_PR_NOTHING, /* No components present */ + RAN_Container__reportContainer_PR_oDU_UE, + RAN_Container__reportContainer_PR_oCU_CP_UE, + RAN_Container__reportContainer_PR_oCU_UP_UE + /* Extensions may appear below */ + +} RAN_Container__reportContainer_PR; + +/* RAN-Container */ +typedef struct RAN_Container { + Timestamp_t timestamp; + struct RAN_Container__reportContainer { + RAN_Container__reportContainer_PR present; + union RAN_Container__reportContainer_u { + DU_Usage_Report_Per_UE_t oDU_UE; + CU_CP_Usage_Report_Per_UE_t oCU_CP_UE; + CU_UP_Usage_Report_Per_UE_t oCU_UP_UE; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportContainer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RAN_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAN_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_RAN_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAN_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANcallProcess-ID-string.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RANcallProcess_ID_string_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RANcallProcess_ID_string_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RANcallProcess_ID_string_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = { + "RANcallProcess-ID-string", + "RANcallProcess-ID-string", + &asn_OP_PrintableString, + asn_DEF_RANcallProcess_ID_string_tags_1, + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + asn_DEF_RANcallProcess_ID_string_tags_1, /* Same as above */ + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + { &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANcallProcess-ID-string.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANcallProcess_ID_string_H_ +#define _RANcallProcess_ID_string_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANcallProcess-ID-string */ +typedef PrintableString_t RANcallProcess_ID_string_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string; +asn_struct_free_f RANcallProcess_ID_string_free; +asn_struct_print_f RANcallProcess_ID_string_print; +asn_constr_check_f RANcallProcess_ID_string_constraint; +ber_type_decoder_f RANcallProcess_ID_string_decode_ber; +der_type_encoder_f RANcallProcess_ID_string_encode_der; +xer_type_decoder_f RANcallProcess_ID_string_decode_xer; +xer_type_encoder_f RANcallProcess_ID_string_encode_xer; +oer_type_decoder_f RANcallProcess_ID_string_decode_oer; +oer_type_encoder_f RANcallProcess_ID_string_encode_oer; +per_type_decoder_f RANcallProcess_ID_string_decode_uper; +per_type_encoder_f RANcallProcess_ID_string_encode_uper; +per_type_decoder_f RANcallProcess_ID_string_decode_aper; +per_type_encoder_f RANcallProcess_ID_string_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANcallProcess_ID_string_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..f1554d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..e7fd073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.c @@ -0,0 +1,316 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANfunction-Name.h" + +static const int permitted_alphabet_table_2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_2[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_2(const void *sptr) { + const int *table = permitted_alphabet_table_2; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_ranFunction_ShortName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_2(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_ShortName_2_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_2)/sizeof(permitted_alphabet_table_2[0])) + return -1; + return permitted_alphabet_table_2[value] - 1; +} +static int asn_PER_MAP_ranFunction_ShortName_2_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_2)/sizeof(permitted_alphabet_code2value_2[0])) + return -1; + return permitted_alphabet_code2value_2[code]; +} +static int +memb_ranFunction_E2SM_OID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000) + && !check_permitted_alphabet_3(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_E2SM_OID_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_ranFunction_E2SM_OID_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} +static int +memb_ranFunction_Description_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_4(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_Description_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} +static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, + asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_Description_4_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_Description_4_c2v /* PER code to value map */ +}; +asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_ShortName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-ShortName" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_E2SM_OID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-E2SM-OID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_Description), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-Description" + }, + { ATF_POINTER, 1, offsetof(struct RANfunction_Name, ranFunction_Instance), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Instance" + }, +}; +static const int asn_MAP_RANfunction_Name_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_RANfunction_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-ShortName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunction-E2SM-OID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunction-Description */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunction-Instance */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1 = { + sizeof(struct RANfunction_Name), + offsetof(struct RANfunction_Name, _asn_ctx), + asn_MAP_RANfunction_Name_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RANfunction_Name_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Name = { + "RANfunction-Name", + "RANfunction-Name", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Name_tags_1, + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Name_1, + 4, /* Elements count */ + &asn_SPC_RANfunction_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunction-Name.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANfunction_Name_H_ +#define _RANfunction_Name_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Name */ +typedef struct RANfunction_Name { + PrintableString_t ranFunction_ShortName; + PrintableString_t ranFunction_E2SM_OID; + PrintableString_t ranFunction_Description; + long *ranFunction_Instance; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Name; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..3d8697d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..4e54dde --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..7661a88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..9b3be69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..fc95705 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..f0a61a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..985330a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..033ed53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a0b271b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..58ec9ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionRevision.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..f55d0a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..9e45736 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..c52b90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..b8bd23c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..fb5c08d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..386c289 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-EventTriggerStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_List), + offsetof(struct RIC_EventTriggerStyle_List, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_List_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List = { + "RIC-EventTriggerStyle-List", + "RIC-EventTriggerStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_List_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_List_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-EventTriggerStyle-List.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_EventTriggerStyle_List_H_ +#define _RIC_EventTriggerStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-List */ +typedef struct RIC_EventTriggerStyle_List { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Format-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Format_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type = { + "RIC-Format-Type", + "RIC-Format-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Format_Type_tags_1, + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Format_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Format-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Format_Type_H_ +#define _RIC_Format_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Format-Type */ +typedef long RIC_Format_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type; +asn_struct_free_f RIC_Format_Type_free; +asn_struct_print_f RIC_Format_Type_print; +asn_constr_check_f RIC_Format_Type_constraint; +ber_type_decoder_f RIC_Format_Type_decode_ber; +der_type_encoder_f RIC_Format_Type_encode_der; +xer_type_decoder_f RIC_Format_Type_decode_xer; +xer_type_encoder_f RIC_Format_Type_encode_xer; +oer_type_decoder_f RIC_Format_Type_decode_oer; +oer_type_encoder_f RIC_Format_Type_encode_oer; +per_type_decoder_f RIC_Format_Type_decode_uper; +per_type_encoder_f RIC_Format_Type_encode_uper; +per_type_decoder_f RIC_Format_Type_decode_aper; +per_type_encoder_f RIC_Format_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Format_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-ReportStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1 = { + sizeof(struct RIC_ReportStyle_List), + offsetof(struct RIC_ReportStyle_List, _asn_ctx), + asn_MAP_RIC_ReportStyle_List_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List = { + "RIC-ReportStyle-List", + "RIC-ReportStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_List_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_List_1, + 4, /* Elements count */ + &asn_SPC_RIC_ReportStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-ReportStyle-List.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_ReportStyle_List_H_ +#define _RIC_ReportStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-List */ +typedef struct RIC_ReportStyle_List { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RIC_Style_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RIC_Style_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RIC_Style_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RIC_Style_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RIC_Style_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { + "RIC-Style-Name", + "RIC-Style-Name", + &asn_OP_PrintableString, + asn_DEF_RIC_Style_Name_tags_1, + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Name_H_ +#define _RIC_Style_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Name */ +typedef PrintableString_t RIC_Style_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name; +asn_struct_free_f RIC_Style_Name_free; +asn_struct_print_f RIC_Style_Name_print; +asn_constr_check_f RIC_Style_Name_constraint; +ber_type_decoder_f RIC_Style_Name_decode_ber; +der_type_encoder_f RIC_Style_Name_encode_der; +xer_type_decoder_f RIC_Style_Name_decode_xer; +xer_type_encoder_f RIC_Style_Name_encode_xer; +oer_type_decoder_f RIC_Style_Name_decode_oer; +oer_type_encoder_f RIC_Style_Name_encode_oer; +per_type_decoder_f RIC_Style_Name_decode_uper; +per_type_encoder_f RIC_Style_Name_encode_uper; +per_type_decoder_f RIC_Style_Name_decode_aper; +per_type_encoder_f RIC_Style_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Style_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type = { + "RIC-Style-Type", + "RIC-Style-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Style_Type_tags_1, + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RIC-Style-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Type_H_ +#define _RIC_Style_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Type */ +typedef long RIC_Style_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type; +asn_struct_free_f RIC_Style_Type_free; +asn_struct_print_f RIC_Style_Type_print; +asn_constr_check_f RIC_Style_Type_constraint; +ber_type_decoder_f RIC_Style_Type_decode_ber; +der_type_encoder_f RIC_Style_Type_encode_der; +xer_type_decoder_f RIC_Style_Type_decode_xer; +xer_type_encoder_f RIC_Style_Type_encode_xer; +oer_type_decoder_f RIC_Style_Type_decode_oer; +oer_type_encoder_f RIC_Style_Type_encode_oer; +per_type_decoder_f RIC_Style_Type_decode_uper; +per_type_encoder_f RIC_Style_Type_encode_uper; +per_type_decoder_f RIC_Style_Type_decode_aper; +per_type_encoder_f RIC_Style_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..0b566bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..d7f13c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..692fd38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..8eaf217 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..515679d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..48645e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..51f45f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..95bbadf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..2e8bc94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..c3f5d07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..dd1d941 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..e1eeca6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.c new file mode 100644 index 0000000..ecd1ea7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.h new file mode 100644 index 0000000..b21d3a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.c new file mode 100644 index 0000000..69f2101 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.h new file mode 100644 index 0000000..b51809c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactionType.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..c1445fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..7acfeb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..a7d682f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..d388b85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcallProcessID.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..d69a24c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..73f9da7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..eb3d6d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..63dbb73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..044706c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..919f11c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..2b0400b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..f26977c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..f3df4b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..5cc6cc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..c40874d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..94481fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..2b54af3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..f35e61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..8dc0c58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..627ebaa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICcontrolStatus.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..4c892e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..f323980 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.c new file mode 100644 index 0000000..be2a72a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.h new file mode 100644 index 0000000..8a8173d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..31e2f7f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..0d1448d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..096f61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..97ce63e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..74782d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..30d8c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationSN.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c new file mode 100644 index 0000000..81beabe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ae14d7a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICindicationType.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dfe67b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h new file mode 100644 index 0000000..24636d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..a2c83c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7db0a4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..8ec4465 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..f9353cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..fe21337 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..ec27597 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..61334b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..71e1e62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..04b54c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..1560efb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..4ff78c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..f25c782 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..70a20c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9b93735 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..39475fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..cd5b0f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..f0a7a43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..fb43397 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d6ed804 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..836322b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..64e2e45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..1008fb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..dae24c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..c622986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..18f61c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..159b5e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..6bd2096 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RICtimeToWait.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RT-Period-IE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = { + { 0, 4, "ms10" }, + { 1, 4, "ms20" }, + { 2, 4, "ms32" }, + { 3, 4, "ms40" }, + { 4, 4, "ms60" }, + { 5, 4, "ms64" }, + { 6, 4, "ms70" }, + { 7, 4, "ms80" }, + { 8, 5, "ms128" }, + { 9, 5, "ms160" }, + { 10, 5, "ms256" }, + { 11, 5, "ms320" }, + { 12, 5, "ms512" }, + { 13, 5, "ms640" }, + { 14, 6, "ms1024" }, + { 15, 6, "ms1280" }, + { 16, 6, "ms2048" }, + { 17, 6, "ms2560" }, + { 18, 6, "ms5120" }, + { 19, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = { + 0, /* ms10(0) */ + 14, /* ms1024(14) */ + 19, /* ms10240(19) */ + 8, /* ms128(8) */ + 15, /* ms1280(15) */ + 9, /* ms160(9) */ + 1, /* ms20(1) */ + 16, /* ms2048(16) */ + 10, /* ms256(10) */ + 17, /* ms2560(17) */ + 2, /* ms32(2) */ + 11, /* ms320(11) */ + 3, /* ms40(3) */ + 12, /* ms512(12) */ + 18, /* ms5120(18) */ + 4, /* ms60(4) */ + 5, /* ms64(5) */ + 13, /* ms640(13) */ + 6, /* ms70(6) */ + 7 /* ms80(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = { + asn_MAP_RT_Period_IE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RT_Period_IE_enum2value_1, /* N => "tag"; sorted by N */ + 20, /* Number of elements in the maps */ + 21, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = { + "RT-Period-IE", + "RT-Period-IE", + &asn_OP_NativeEnumerated, + asn_DEF_RT_Period_IE_tags_1, + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + asn_DEF_RT_Period_IE_tags_1, /* Same as above */ + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + { &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RT_Period_IE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/RT-Period-IE.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RT_Period_IE_H_ +#define _RT_Period_IE_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RT_Period_IE { + RT_Period_IE_ms10 = 0, + RT_Period_IE_ms20 = 1, + RT_Period_IE_ms32 = 2, + RT_Period_IE_ms40 = 3, + RT_Period_IE_ms60 = 4, + RT_Period_IE_ms64 = 5, + RT_Period_IE_ms70 = 6, + RT_Period_IE_ms80 = 7, + RT_Period_IE_ms128 = 8, + RT_Period_IE_ms160 = 9, + RT_Period_IE_ms256 = 10, + RT_Period_IE_ms320 = 11, + RT_Period_IE_ms512 = 12, + RT_Period_IE_ms640 = 13, + RT_Period_IE_ms1024 = 14, + RT_Period_IE_ms1280 = 15, + RT_Period_IE_ms2048 = 16, + RT_Period_IE_ms2560 = 17, + RT_Period_IE_ms5120 = 18, + RT_Period_IE_ms10240 = 19 + /* + * Enumeration is extensible + */ +} e_RT_Period_IE; + +/* RT-Period-IE */ +typedef long RT_Period_IE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RT_Period_IE; +extern const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1; +asn_struct_free_f RT_Period_IE_free; +asn_struct_print_f RT_Period_IE_print; +asn_constr_check_f RT_Period_IE_constraint; +ber_type_decoder_f RT_Period_IE_decode_ber; +der_type_encoder_f RT_Period_IE_encode_der; +xer_type_decoder_f RT_Period_IE_decode_xer; +xer_type_encoder_f RT_Period_IE_encode_xer; +oer_type_decoder_f RT_Period_IE_decode_oer; +oer_type_encoder_f RT_Period_IE_encode_oer; +per_type_decoder_f RT_Period_IE_decode_uper; +per_type_encoder_f RT_Period_IE_encode_uper; +per_type_decoder_f RT_Period_IE_decode_aper; +per_type_encoder_f RT_Period_IE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RT_Period_IE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c new file mode 100644 index 0000000..3f96a6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h new file mode 100644 index 0000000..e7f6ec8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c new file mode 100644 index 0000000..c8afcc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h new file mode 100644 index 0000000..08a576e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SNSSAI.h" + +static int +memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = { + { 0, 0 }, + 1 /* (SIZE(1..1)) */}; +static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SNSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2, memb_sST_constraint_1 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct SNSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3, memb_sD_constraint_1 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_SNSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SNSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1 = { + sizeof(struct SNSSAI), + offsetof(struct SNSSAI, _asn_ctx), + asn_MAP_SNSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SNSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNSSAI = { + "SNSSAI", + "SNSSAI", + &asn_OP_SEQUENCE, + asn_DEF_SNSSAI_tags_1, + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + asn_DEF_SNSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNSSAI_1, + 2, /* Elements count */ + &asn_SPC_SNSSAI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SNSSAI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SNSSAI_H_ +#define _SNSSAI_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNSSAI */ +typedef struct SNSSAI { + OCTET_STRING_t sST; + OCTET_STRING_t *sD; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_SNSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNSSAI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ServedPlmnPerCellListItem.h" + +asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-EPC" + }, +}; +static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = { + sizeof(struct ServedPlmnPerCellListItem), + offsetof(struct ServedPlmnPerCellListItem, _asn_ctx), + asn_MAP_ServedPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ServedPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = { + "ServedPlmnPerCellListItem", + "ServedPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_ServedPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_ServedPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_ServedPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ServedPlmnPerCellListItem.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ServedPlmnPerCellListItem_H_ +#define _ServedPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_DU_PM_Container; +struct EPC_DU_PM_Container; + +/* ServedPlmnPerCellListItem */ +typedef struct ServedPlmnPerCellListItem { + PLMN_Identity_t pLMN_Identity; + struct FGC_DU_PM_Container *du_PM_5GC; /* OPTIONAL */ + struct EPC_DU_PM_Container *du_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-DU-PM-Container.h" +#include "EPC-DU-PM-Container.h" + +#endif /* _ServedPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SlicePerPlmnPerCellListItem.h" + +static int +memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = { + sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList), + offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = { + "fQIPERSlicesPerPlmnPerCellList", + "fQIPERSlicesPerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnPerCellList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnPerCellList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = { + sizeof(struct SlicePerPlmnPerCellListItem), + offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx), + asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem = { + "SlicePerPlmnPerCellListItem", + "SlicePerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SlicePerPlmnPerCellListItem_1, + 2, /* Elements count */ + &asn_SPC_SlicePerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SlicePerPlmnPerCellListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SlicePerPlmnPerCellListItem_H_ +#define _SlicePerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnPerCellListItem; + +/* SlicePerPlmnPerCellListItem */ +typedef struct SlicePerPlmnPerCellListItem { + SNSSAI_t sliceID; + struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SlicePerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +#endif /* _SlicePerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SliceToReportListItem.h" + +static int +memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = { + sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList), + offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = { + "fQIPERSlicesPerPlmnList", + "fQIPERSlicesPerPlmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3, memb_fQIPERSlicesPerPlmnList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = { + sizeof(struct SliceToReportListItem), + offsetof(struct SliceToReportListItem, _asn_ctx), + asn_MAP_SliceToReportListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem = { + "SliceToReportListItem", + "SliceToReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_SliceToReportListItem_tags_1, + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + asn_DEF_SliceToReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SliceToReportListItem_1, + 2, /* Elements count */ + &asn_SPC_SliceToReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SliceToReportListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SliceToReportListItem_H_ +#define _SliceToReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnListItem; + +/* SliceToReportListItem */ +typedef struct SliceToReportListItem { + SNSSAI_t sliceID; + struct SliceToReportListItem__fQIPERSlicesPerPlmnList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SliceToReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnListItem.h" + +#endif /* _SliceToReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..55bad07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..fd04d94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c new file mode 100644 index 0000000..c4eec34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h new file mode 100644 index 0000000..6fad8ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TimeToWait.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Timestamp.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Timestamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Timestamp = { + "Timestamp", + "Timestamp", + &asn_OP_OCTET_STRING, + asn_DEF_Timestamp_tags_1, + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + asn_DEF_Timestamp_tags_1, /* Same as above */ + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Timestamp.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Timestamp_H_ +#define _Timestamp_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timestamp */ +typedef OCTET_STRING_t Timestamp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Timestamp; +asn_struct_free_f Timestamp_free; +asn_struct_print_f Timestamp_print; +asn_constr_check_f Timestamp_constraint; +ber_type_decoder_f Timestamp_decode_ber; +der_type_encoder_f Timestamp_encode_der; +xer_type_decoder_f Timestamp_decode_xer; +xer_type_encoder_f Timestamp_encode_xer; +oer_type_decoder_f Timestamp_decode_oer; +oer_type_encoder_f Timestamp_encode_oer; +per_type_decoder_f Timestamp_decode_uper; +per_type_encoder_f Timestamp_encode_uper; +per_type_decoder_f Timestamp_decode_aper; +per_type_encoder_f Timestamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Timestamp_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Trigger-ConditionIE-Item.h" + +asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RT_Period_IE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "report-Period-IE" + }, +}; +static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = { + sizeof(struct Trigger_ConditionIE_Item), + offsetof(struct Trigger_ConditionIE_Item, _asn_ctx), + asn_MAP_Trigger_ConditionIE_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item = { + "Trigger-ConditionIE-Item", + "Trigger-ConditionIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_Trigger_ConditionIE_Item_tags_1, + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + asn_DEF_Trigger_ConditionIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Trigger_ConditionIE_Item_1, + 1, /* Elements count */ + &asn_SPC_Trigger_ConditionIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/Trigger-ConditionIE-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Trigger_ConditionIE_Item_H_ +#define _Trigger_ConditionIE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RT-Period-IE.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trigger-ConditionIE-Item */ +typedef struct Trigger_ConditionIE_Item { + RT_Period_IE_t report_Period_IE; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Trigger_ConditionIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Trigger_ConditionIE_Item_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..45dcd5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..734cefa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TriggeringMessage.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c new file mode 100644 index 0000000..76beba5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h new file mode 100644 index 0000000..9451b1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/TypeOfError.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "UE-Report-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_Report_Type_value2enum_1[] = { + { 0, 17, "oDU-Report-Per-UE" }, + { 1, 20, "oCU-CP-Report-Per-UE" }, + { 2, 20, "oCU-UP-Report-Per-UE" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_Report_Type_enum2value_1[] = { + 1, /* oCU-CP-Report-Per-UE(1) */ + 2, /* oCU-UP-Report-Per-UE(2) */ + 0 /* oDU-Report-Per-UE(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1 = { + asn_MAP_UE_Report_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_Report_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_Report_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_Report_Type = { + "UE-Report-Type", + "UE-Report-Type", + &asn_OP_NativeEnumerated, + asn_DEF_UE_Report_Type_tags_1, + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + asn_DEF_UE_Report_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_UE_Report_Type_constr_1, &asn_PER_type_UE_Report_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_Report_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UE-Report-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _UE_Report_Type_H_ +#define _UE_Report_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_Report_Type { + UE_Report_Type_oDU_Report_Per_UE = 0, + UE_Report_Type_oCU_CP_Report_Per_UE = 1, + UE_Report_Type_oCU_UP_Report_Per_UE = 2 + /* + * Enumeration is extensible + */ +} e_UE_Report_Type; + +/* UE-Report-Type */ +typedef long UE_Report_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_Report_Type; +extern const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1; +asn_struct_free_f UE_Report_Type_free; +asn_struct_print_f UE_Report_Type_print; +asn_constr_check_f UE_Report_Type_constraint; +ber_type_decoder_f UE_Report_Type_decode_ber; +der_type_encoder_f UE_Report_Type_encode_der; +xer_type_decoder_f UE_Report_Type_decode_xer; +xer_type_encoder_f UE_Report_Type_encode_xer; +oer_type_decoder_f UE_Report_Type_decode_oer; +oer_type_encoder_f UE_Report_Type_encode_oer; +per_type_decoder_f UE_Report_Type_decode_uper; +per_type_encoder_f UE_Report_Type_encode_uper; +per_type_decoder_f UE_Report_Type_decode_aper; +per_type_encoder_f UE_Report_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_Report_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..327134e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,349 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..7762209 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_constant.h new file mode 100644 index 0000000..af5a0fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_constant.h @@ -0,0 +1,30 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#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) +#define maxofRANparamters (65536) +#define maxUeReport (32) +#define maxCellingNB (16384) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/converter-example.mk new file mode 100644 index 0000000..0109476 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + converter-example.c\ + pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c new file mode 100644 index 0000000..0d559a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/pdu_collection.c @@ -0,0 +1,25 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_EventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_ActionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_RANfunction_Description; +extern struct asn_TYPE_descriptor_s asn_DEF_RANcallProcess_ID_string; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2SM-KPM-IEs in /home/rshacham/e2sm-kpm-v01.02.asn */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition, + &asn_DEF_E2SM_KPM_ActionDefinition, + &asn_DEF_E2SM_KPM_IndicationHeader, + &asn_DEF_E2SM_KPM_IndicationMessage, + &asn_DEF_E2SM_KPM_RANfunction_Description, + &asn_DEF_RANcallProcess_ID_string, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/CMakeLists.txt new file mode 100644 index 0000000..ab5778a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/CMakeLists.txt @@ -0,0 +1,79 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + + + +project(e2sim) + +set (E2SIM_ROOT ./) + + +include_directories("${E2SIM_ROOT}") +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + + +#set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG ON) + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsgf +find_package( Threads REQUIRED ) + +#---------------------------------------------- +file(GLOB E2SIM_SOURCES + "${E2SIM_ROOT}/e2sim.cpp" + "${E2SIM_ROOT}/encode_kpm.cpp" + "${E2SIM_ROOT}/kpm_callbacks.cpp" + "${E2SIM_ROOT}/encode_e2apv1.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + + ) + +add_executable(e2sim ${E2SIM_SOURCES}) +target_link_libraries( e2sim ${SCTP_STD_LIB} ) +target_link_libraries( e2sim Threads::Threads ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + + "${E2SIM_ROOT}/ricsim.cpp" + "${E2SIM_ROOT}/encode_kpm.cpp" + "${E2SIM_ROOT}/encode_e2apv1.cpp" + "${E2SIM_ROOT}/kpm_callbacks.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ricsim ${RICSIM_SOURCES}) +target_link_libraries( ricsim ${SCTP_STD_LIB} ) +target_link_libraries( e2sim Threads::Threads ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/Dockerfile new file mode 100644 index 0000000..348fe48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/Dockerfile @@ -0,0 +1,55 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +FROM ubuntu:16.04 + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + +# Copy E2Sim sources into the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim +CMD ./build/e2sim 10.107.70.168 36422 \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/README.md b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/README.md new file mode 100644 index 0000000..4277232 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/README.md @@ -0,0 +1,62 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +This is an update to E2 Simulator, based on E2AP v1. + + + +# INSTALLATION (tested on Ubuntu 16.04) + 1. Install dependencies + $ sudo apt-get update + $ sudo apt-get install -y + build-essential + git + cmake + libsctp-dev + lksctp-tools + autoconf + automake + libtool + bison + flex + libboost-all-dev + $ sudo apt-get clean + + 2. SET ENVIRONMENT VARIABLE + Add this line to `~/.bashrc` + export E2SIM_DIR= + + 3. Build the official e2sim + $ ./build_e2sim + +# USAGE + $ $E2SIM_DIR/build/e2sim [SERVER IP] [PORT] + + By default, SERVER IP = 127.0.0.1, PORT = 36421 + The RIC (i.e., E2 Manager) will need to setup X2 or E2 connection to e2sim on + this SERVER IP and PORT + +# DOCKER + * Build docker image: run this command from $E2SIM_DIR + $ sudo docker build -f docker/Dockerfile -t [DOCKER_IMAGE]:[TAG] . + + * Example how to run docker container + $ sudo docker run --rm --net host -it [DOCKER_IMAGE]:[TAG] sh -c "./build/e2sim [SERVER IP] [PORT]" + ex: sudo docker run --rm --net host -it e2sim:1.0.0 sh -c "./build/e2sim 127.0.0.1 36422" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/build_e2sim b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/build_e2sim new file mode 100644 index 0000000..80a53c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/build_e2sim @@ -0,0 +1,86 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +E2SIM_VERSION='1.4.0' +export E2SIM_DIR=$PWD +source $E2SIM_DIR/tools/build_helper.bash +DOCKER_IMAGE='e2sim' + +print_help() { + echo " + This program installs E2 Simulator + You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14 + The program is run by default with no option + + USAGE: + ./build_e2sim [OPTIONS] + + OPTIONS: + --clean + Erase all files to make a rebuild from start + --docker + Build docker image + -h + Print this help + " +} + +function main(){ + case "$1" in + --clean) + echo_info "Will clean all previously producted files under build/" + rm -rf $E2SIM_DIR/build + echo_success "Clean Done" + exit + ;; + + --docker) + echo "Will build docker image ${DOCKER_IMAGE}:${E2SIM_VERSION}" + sudo docker build -f docker/Dockerfile -t $DOCKER_IMAGE:$E2SIM_VERSION . + exit + ;; + + "") + ;; + + -h) + print_help + exit 1;; + + *) + echo_error "Unknown option $1" + exit + esac + + BUILD_DIR=$E2SIM_DIR/build + mkdir -p $BUILD_DIR + + echo_info "Will build e2sim" + cd $BUILD_DIR + rm -rf CMakeCache.txt + cmake .. + make -j`nproc` + + echo_success "e2sim compiled" +} + +main "$@" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/cellMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/cellMeasReport.txt new file mode 100644 index 0000000..2c0890f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/cellMeasReport.txt @@ -0,0 +1,40 @@ +{ + "cellMeasReport": { + "du-id": 1000, + "cellMeasReportList": [ + + { + "nrCellIdentity": 0, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 10, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + }, + + { + "nrCellIdentity": 1, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 0, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/Dockerfile new file mode 100644 index 0000000..1233a12 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/Dockerfile @@ -0,0 +1,54 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +FROM ubuntu:16.04 + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + +# Copy E2Sim sources into the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/container-tag.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/container-tag.yaml new file mode 100644 index 0000000..5df0816 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/container-tag.yaml @@ -0,0 +1,2 @@ +--- +tag: 0.1.1 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/DockerFile_old b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/DockerFile_old new file mode 100644 index 0000000..17aa6bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/DockerFile_old @@ -0,0 +1,53 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build: $ sudo docker build -f docker/Dockerfile -t e2sim . + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + && apt-get clean + +# Install E2Sim +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c +RUN ./build_e2sim --clean +RUN ./build_e2sim + +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile new file mode 100644 index 0000000..6cbfbf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile @@ -0,0 +1,42 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +FROM e2sim_base + +# ------------ COPY E2SIM codes ------------------ +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +# ensure an empty rt is there if none is mounted at spinup +COPY docker/empty.rt /usr/local/route/local.rt + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim + +#-------------- Configure rmr ------------------------- +ENV RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt + +ENV RMR_RTG_SVC=localhost:9990 +ENV E2TERM_RMR_RCV_PORT=48886 +ENV DEMO_SENDER_PTO=1 +ENV DEMO_MAX_PAYLOAD_BYTES=240 + +# --------------- Run E2Termination --------------------- +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile_base b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile_base new file mode 100644 index 0000000..7ac932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/Dockerfile_base @@ -0,0 +1,60 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build with 2 steps +# $ sudo docker build -f docker/Dockerfile_base -t e2sim_base . +# $ sudo docker build -f docker/Dockerfile -t e2sim . +# +# run e2 termination +# $ sudo docker run --rm --net host -it e2sim sh -c "./build/e2sim 127.0.0.2" + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex + +# For rmr +RUN apt-get install -y bash vim ksh iputils-ping +RUN apt-get clean + +# Copy E2Sim to the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c + +#-------------INSTALL rmr ------------------------ +RUN ./docker/install_rmr diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/configure_rmr b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/configure_rmr new file mode 100644 index 0000000..ff0a685 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/configure_rmr @@ -0,0 +1,27 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +export RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +export RMR_RTG_SVC=localhost:9990 +#export DUMMY_SENDER_RMR_RCV_PORT=48086 +export E2TERM_RMR_RCV_PORT=48886 +export DEMO_SENDER_PTO=1 +export DEMO_MAX_PAYLOAD_BYTES=240 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/empty.rt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/empty.rt new file mode 100644 index 0000000..0063bb9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/empty.rt @@ -0,0 +1,5 @@ +# an empty route table to put into an image so there is some file there +# if on image start nothing is mounted onto /usr/local/route + +newrt|start +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_asn1c new file mode 100644 index 0000000..daf4bfe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_asn1c @@ -0,0 +1,29 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +echo "Will install asn1c" +cd tools +rm -rf asn1c +git clone https://gitlab.eurecom.fr/oai/asn1c.git +cd asn1c +git checkout 0a7524184f16e7093990a31d8d4db487a16e5782 +autoreconf -iv +./configure +make +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_rmr b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_rmr new file mode 100644 index 0000000..522df48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/install_rmr @@ -0,0 +1,32 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# pull rmr to $E2SIM_DIR/ and checkout the 'stable' demo commit, +# then build and install in /usr/local + +echo "Will install rmr" +rm -rf rmr +git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr +date; ls -al /usr/local/lib +cd rmr +git checkout 6735f136906ce2 +mkdir .build +cd .build +cmake .. +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/local.rt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/local.rt new file mode 100644 index 0000000..84ea983 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/docker/old/local.rt @@ -0,0 +1,9 @@ +newrt|start +#RMR_RCV_PORT of the receiver is 6560 +rte|0|localhost:6560 + +# this is needed so that receiver acks can be sent via rmr_rts_msg() calls +# here e2 agent is the name of the machine +# is the RMR_RCV_PORT of the sender +rte|89|e2agent:48086 +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.cpp new file mode 100644 index 0000000..72785b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.cpp @@ -0,0 +1,174 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "encode_e2apv1.hpp" + +using namespace std; + +int client_fd = 0; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + printf("Calling encode_and_send_sctp_data\n"); + + printf("client_fd is %d\n", client_fd); + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + + printf("after encoding pdu\n"); + + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + printf("calling sctp_send_data\n"); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data() +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf, false); + } +} + + +int main(int argc, char* argv[]){ + + printf("Start E2 Agent (E2 Simulator\n"); + + ifstream simfile; + string line; + + simfile.open("simulation.txt", ios::in); + + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + } + + simfile.close(); + + } + + + printf("encoding now the user level - DU\n"); + + E2SM_KPM_IndicationMessage_t *indMsg = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + + //encode_kpm_report_rancontainer_du(indMsg); + encode_kpm_report_style1(indMsg); + + + + bool xmlenc = false; + + options_t ops = read_input_options(argc, argv); + + printf("After reading input options\n"); + + //E2 Agent will automatically restart upon sctp disconnection + // int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + + client_fd = sctp_start_client(ops.server_ip, ops.server_port); + E2AP_PDU_t* pdu_setup = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + printf("After starting client\n"); + printf("client_fd value is %d\n", client_fd); + + // generate_e2apv1_subscription_request(pdu_setup); + generate_e2apv1_setup_request(pdu_setup); + + printf("After generating e2setup req\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_setup); + + printf("After XER Encoding\n"); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, pdu_setup, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_setup, buffer, buffer_size); + //auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu_setup, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(client_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-REQUEST to peer"); + } + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf, xmlenc); + if (xmlenc) xmlenc = false; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.hpp new file mode 100644 index 0000000..9af2552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim.hpp @@ -0,0 +1,5 @@ +#include "E2AP-PDU.h" + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu); + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int socket_fd); diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_C_RNTI_constr_1 CC_NOTUSED = { + { 0, 0 }, + 2 /* (SIZE(2..2)) */}; +asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + &asn_OP_OCTET_STRING, + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + { &asn_OER_type_C_RNTI_constr_1, &asn_PER_type_C_RNTI_constr_1, C_RNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/C-RNTI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef OCTET_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_C_RNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +oer_type_decoder_f C_RNTI_decode_oer; +oer_type_encoder_f C_RNTI_encode_oer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; +per_type_decoder_f C_RNTI_decode_aper; +per_type_encoder_f C_RNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem = { + "CU-CP-Usage-Report-CellResourceReportItem", + "CU-CP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_CellResourceReportItem_H_ +#define _CU_CP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_UeResourceReportItem; + +/* CU-CP-Usage-Report-CellResourceReportItem */ +typedef struct CU_CP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 16384)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_CP_Usage_Report_Per_UE), + offsetof(struct CU_CP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE = { + "CU-CP-Usage-Report-Per-UE", + "CU-CP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_Per_UE_H_ +#define _CU_CP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_CellResourceReportItem; + +/* CU-CP-Usage-Report-Per-UE */ +typedef struct CU_CP_Usage_Report_Per_UE { + struct CU_CP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, serving_Cell_RF_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serving-Cell-RF-Type" + }, + { ATF_POINTER, 1, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, neighbor_Cell_RF), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbor-Cell-RF" + }, +}; +static const int asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serving-Cell-RF-Type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighbor-Cell-RF */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem = { + "CU-CP-Usage-Report-UeResourceReportItem", + "CU-CP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_UeResourceReportItem_H_ +#define _CU_CP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-CP-Usage-Report-UeResourceReportItem */ +typedef struct CU_CP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + OCTET_STRING_t *serving_Cell_RF_Type; /* OPTIONAL */ + OCTET_STRING_t *neighbor_Cell_RF; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_CP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem = { + "CU-UP-Usage-Report-CellResourceReportItem", + "CU-UP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_CellResourceReportItem_H_ +#define _CU_UP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_UeResourceReportItem; + +/* CU-UP-Usage-Report-CellResourceReportItem */ +typedef struct CU_UP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_UP_Usage_Report_Per_UE), + offsetof(struct CU_UP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE = { + "CU-UP-Usage-Report-Per-UE", + "CU-UP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_Per_UE_H_ +#define _CU_UP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_CellResourceReportItem; + +/* CU-UP-Usage-Report-Per-UE */ +typedef struct CU_UP_Usage_Report_Per_UE { + struct CU_UP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem = { + "CU-UP-Usage-Report-UeResourceReportItem", + "CU-UP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_UeResourceReportItem_H_ +#define _CU_UP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-UP-Usage-Report-UeResourceReportItem */ +typedef struct CU_UP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_UP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CUUPMeasurement-Container.h" + +static int +memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmnList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PlmnID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = { + sizeof(struct CUUPMeasurement_Container__plmnList), + offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmnList_2 = { + "plmnList", + "plmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_plmnList_tags_2, + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */ + asn_DEF_plmnList_tags_2, /* Same as above */ + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */ + { &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_plmnList_2, + 1, /* Single element */ + &asn_SPC_plmnList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_plmnList_2, + 0, + { &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2, memb_plmnList_constraint_1 }, + 0, 0, /* No default value */ + "plmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = { + sizeof(struct CUUPMeasurement_Container), + offsetof(struct CUUPMeasurement_Container, _asn_ctx), + asn_MAP_CUUPMeasurement_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container = { + "CUUPMeasurement-Container", + "CUUPMeasurement-Container", + &asn_OP_SEQUENCE, + asn_DEF_CUUPMeasurement_Container_tags_1, + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + asn_DEF_CUUPMeasurement_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CUUPMeasurement_Container_1, + 1, /* Elements count */ + &asn_SPC_CUUPMeasurement_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CUUPMeasurement-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CUUPMeasurement_Container_H_ +#define _CUUPMeasurement_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PlmnID_List; + +/* CUUPMeasurement-Container */ +typedef struct CUUPMeasurement_Container { + struct CUUPMeasurement_Container__plmnList { + A_SEQUENCE_OF(struct PlmnID_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CUUPMeasurement_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PlmnID-List.h" + +#endif /* _CUUPMeasurement_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c new file mode 100644 index 0000000..1027911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h new file mode 100644 index 0000000..1b829a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c new file mode 100644 index 0000000..1709929 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.c @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h new file mode 100644 index 0000000..d175009 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseMisc.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..e5b11b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..72329ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseProtocol.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c new file mode 100644 index 0000000..11d9e4e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h new file mode 100644 index 0000000..417532f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRIC.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..6773fd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..4270eb3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseRICservice.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c new file mode 100644 index 0000000..08a317d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f3fe969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CauseTransport.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CellResourceReportListItem.h" + +static int +memb_dl_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = { + sizeof(struct CellResourceReportListItem__servedPlmnPerCellList), + offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = { + "servedPlmnPerCellList", + "servedPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_servedPlmnPerCellList_tags_5, + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */ + asn_DEF_servedPlmnPerCellList_tags_5, /* Same as above */ + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */ + { &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_servedPlmnPerCellList_5, + 1, /* Single element */ + &asn_SPC_servedPlmnPerCellList_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3, memb_dl_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "dl-TotalofAvailablePRBs" + }, + { ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4, memb_ul_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "ul-TotalofAvailablePRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_servedPlmnPerCellList_5, + 0, + { &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5, memb_servedPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "servedPlmnPerCellList" + }, +}; +static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = { + sizeof(struct CellResourceReportListItem), + offsetof(struct CellResourceReportListItem, _asn_ctx), + asn_MAP_CellResourceReportListItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellResourceReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = { + "CellResourceReportListItem", + "CellResourceReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_CellResourceReportListItem_tags_1, + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + asn_DEF_CellResourceReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellResourceReportListItem_1, + 4, /* Elements count */ + &asn_SPC_CellResourceReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CellResourceReportListItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CellResourceReportListItem_H_ +#define _CellResourceReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedPlmnPerCellListItem; + +/* CellResourceReportListItem */ +typedef struct CellResourceReportListItem { + NRCGI_t nRCGI; + long *dl_TotalofAvailablePRBs; /* OPTIONAL */ + long *ul_TotalofAvailablePRBs; /* OPTIONAL */ + struct CellResourceReportListItem__servedPlmnPerCellList { + A_SEQUENCE_OF(struct ServedPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } servedPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellResourceReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[4]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ServedPlmnPerCellListItem.h" + +#endif /* _CellResourceReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c new file mode 100644 index 0000000..217d8e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h new file mode 100644 index 0000000..ab1ecf2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Criticality.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..0306093 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..1222f03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..502517f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3f0d07b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..825808b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9cef6bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem), + offsetof(struct DU_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem = { + "DU-Usage-Report-CellResourceReportItem", + "DU-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_CellResourceReportItem_H_ +#define _DU_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_UeResourceReportItem; + +/* DU-Usage-Report-CellResourceReportItem */ +typedef struct DU_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-UeResourceReportItem.h" + +#endif /* _DU_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct DU_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct DU_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1 = { + sizeof(struct DU_Usage_Report_Per_UE), + offsetof(struct DU_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_DU_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE = { + "DU-Usage-Report-Per-UE", + "DU-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_DU_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_Per_UE_H_ +#define _DU_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_CellResourceReportItem; + +/* DU-Usage-Report-Per-UE */ +typedef struct DU_Usage_Report_Per_UE { + struct DU_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-CellResourceReportItem.h" + +#endif /* _DU_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,138 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-UeResourceReportItem.h" + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct DU_Usage_Report_UeResourceReportItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct DU_Usage_Report_UeResourceReportItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_UeResourceReportItem), + offsetof(struct DU_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem = { + "DU-Usage-Report-UeResourceReportItem", + "DU-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/DU-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_UeResourceReportItem_H_ +#define _DU_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DU-Usage-Report-UeResourceReportItem */ +typedef struct DU_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DU_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..94650be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..6f3f1c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-ActionDefinition.h" + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition), + offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { + "E2SM-KPM-ActionDefinition", + "E2SM-KPM-ActionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-ActionDefinition.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_ActionDefinition_H_ +#define _E2SM_KPM_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition */ +typedef struct E2SM_KPM_ActionDefinition { + RIC_Style_Type_t ric_Style_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" + +static int +memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Trigger_ConditionIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { + "policyTest-List", + "policyTest-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_policyTest_List_tags_2, + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_policyTest_List_tags_2, /* Same as above */ + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ + { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_policyTest_List_2, + 1, /* Single element */ + &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_policyTest_List_2, + 0, + { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + 0, 0, /* No default value */ + "policyTest-List" + }, +}; +static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { + "E2SM-KPM-EventTriggerDefinition-Format1", + "E2SM-KPM-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ +#define _E2SM_KPM_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Trigger_ConditionIE_Item; + +/* E2SM-KPM-EventTriggerDefinition-Format1 */ +typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { + struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { + A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *policyTest_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Trigger-ConditionIE-Item.h" + +#endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-EventTriggerDefinition.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_H_ +#define _E2SM_KPM_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_EventTriggerDefinition_PR { + E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_EventTriggerDefinition_PR; + +/* E2SM-KPM-EventTriggerDefinition */ +typedef struct E2SM_KPM_EventTriggerDefinition { + E2SM_KPM_EventTriggerDefinition_PR present; + union E2SM_KPM_EventTriggerDefinition_u { + E2SM_KPM_EventTriggerDefinition_Format1_t eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader-Format1.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { + { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "id-GlobalKPMnode-ID" + }, + { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_Report_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "message-Type" + }, + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-Name" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-GNB-ID" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader_Format1), + offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { + "E2SM-KPM-IndicationHeader-Format1", + "E2SM-KPM-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, + 10, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_Format1_H_ +#define _E2SM_KPM_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include "UE-Report-Type.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalKPMnode_ID; +struct NRCGI; +struct SNSSAI; +struct GNB_Name; +struct GlobalgNB_ID; + +/* E2SM-KPM-IndicationHeader-Format1 */ +typedef struct E2SM_KPM_IndicationHeader_Format1 { + struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ + struct NRCGI *nRCGI; /* OPTIONAL */ + PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ + struct SNSSAI *sliceID; /* OPTIONAL */ + long *fiveQI; /* OPTIONAL */ + long *qci; /* OPTIONAL */ + UE_Report_Type_t *message_Type; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + struct GNB_Name *gNB_Name; /* OPTIONAL */ + struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "GlobalKPMnode-ID.h" +#include "NRCGI.h" +#include "SNSSAI.h" +#include "GNB-Name.h" +#include "GlobalgNB-ID.h" + +#endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader, present), + sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationHeader.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_H_ +#define _E2SM_KPM_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-IndicationHeader-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationHeader_PR { + E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationHeader_PR; + +/* E2SM-KPM-IndicationHeader */ +typedef struct E2SM_KPM_IndicationHeader { + E2SM_KPM_IndicationHeader_PR present; + union E2SM_KPM_IndicationHeader_u { + E2SM_KPM_IndicationHeader_Format1_t indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage-Format1.h" + +static int +memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 8)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PM_Containers_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), + offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { + "pm-Containers", + "pm-Containers", + &asn_OP_SEQUENCE_OF, + asn_DEF_pm_Containers_tags_2, + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ + asn_DEF_pm_Containers_tags_2, /* Same as above */ + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ + { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_pm_Containers_2, + 1, /* Single element */ + &asn_SPC_pm_Containers_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pm_Containers_2, + 0, + { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + 0, 0, /* No default value */ + "pm-Containers" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1), + offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { + "E2SM-KPM-IndicationMessage-Format1", + "E2SM-KPM-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format1_H_ +#define _E2SM_KPM_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PM_Containers_List; + +/* E2SM-KPM-IndicationMessage-Format1 */ +typedef struct E2SM_KPM_IndicationMessage_Format1 { + struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { + A_SEQUENCE_OF(struct PM_Containers_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pm_Containers; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PM-Containers-List.h" + +#endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.c @@ -0,0 +1,107 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage.h" + +static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), + asn_MAP_indicationMessage_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { + "indicationMessage", + "indicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, + asn_MBR_indicationMessage_3, + 1, /* Elements count */ + &asn_SPC_indicationMessage_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationMessage_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { + "E2SM-KPM-IndicationMessage", + "E2SM-KPM-IndicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-IndicationMessage.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_H_ +#define _E2SM_KPM_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "E2SM-KPM-IndicationMessage-Format1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { + E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationMessage__indicationMessage_PR; + +/* E2SM-KPM-IndicationMessage */ +typedef struct E2SM_KPM_IndicationMessage { + RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_IndicationMessage__indicationMessage { + E2SM_KPM_IndicationMessage__indicationMessage_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_u { + E2SM_KPM_IndicationMessage_Format1_t indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-RANfunction-Description.h" + +static int +memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_EventTriggerStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { + "ric-EventTriggerStyle-List", + "ric-EventTriggerStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_EventTriggerStyle_List_tags_4, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ + { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_4, + 1, /* Single element */ + &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_ReportStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { + "ric-ReportStyle-List", + "ric-ReportStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_ReportStyle_List_tags_6, + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ + { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_6, + 1, /* Single element */ + &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ric_EventTriggerStyle_List_4, + 0, + { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_6, + 0, + { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-ReportStyle-List" + }, +}; +static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), + asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { + "e2SM-KPM-RANfunction-Item", + "e2SM-KPM-RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_e2SM_KPM_RANfunction_Item_3, + 2, /* Elements count */ + &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, ranFunction_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunction_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_e2SM_KPM_RANfunction_Item_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e2SM-KPM-RANfunction-Item" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { + sizeof(struct E2SM_KPM_RANfunction_Description), + offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), + asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { + "E2SM-KPM-RANfunction-Description", + "E2SM-KPM-RANfunction-Description", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_RANfunction_Description_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2SM-KPM-RANfunction-Description.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_RANfunction_Description_H_ +#define _E2SM_KPM_RANfunction_Description_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunction-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RIC_EventTriggerStyle_List; +struct RIC_ReportStyle_List; + +/* E2SM-KPM-RANfunction-Description */ +typedef struct E2SM_KPM_RANfunction_Description { + RANfunction_Name_t ranFunction_Name; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } e2SM_KPM_RANfunction_Item; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_RANfunction_Description_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RIC-EventTriggerStyle-List.h" +#include "RIC-ReportStyle-List.h" + +#endif /* _E2SM_KPM_RANfunction_Description_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..49cae9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..4dee64b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..cefa91b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..2b8b070 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..b607aa1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..ccec4bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..824871d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..7e142ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c new file mode 100644 index 0000000..212c6fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8af6b41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..e8fc32f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..f97a53c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-CUUP-PM-Format.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItemFormat, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_CUUP_PM_Format__perQCIReportList), + offsetof(struct EPC_CUUP_PM_Format__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = { + sizeof(struct EPC_CUUP_PM_Format), + offsetof(struct EPC_CUUP_PM_Format, _asn_ctx), + asn_MAP_EPC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format = { + "EPC-CUUP-PM-Format", + "EPC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_EPC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_EPC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_EPC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_CUUP_PM_Format_H_ +#define _EPC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItemFormat; + +/* EPC-CUUP-PM-Format */ +typedef struct EPC_CUUP_PM_Format { + struct EPC_CUUP_PM_Format__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItemFormat) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItemFormat.h" + +#endif /* _EPC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-DU-PM-Container.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_DU_PM_Container__perQCIReportList), + offsetof(struct EPC_DU_PM_Container__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = { + sizeof(struct EPC_DU_PM_Container), + offsetof(struct EPC_DU_PM_Container, _asn_ctx), + asn_MAP_EPC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container = { + "EPC-DU-PM-Container", + "EPC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_EPC_DU_PM_Container_tags_1, + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_EPC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_EPC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/EPC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_DU_PM_Container_H_ +#define _EPC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItem; + +/* EPC-DU-PM-Container */ +typedef struct EPC_DU_PM_Container { + struct EPC_DU_PM_Container__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItem.h" + +#endif /* _EPC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..e971c4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..a209847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-CUUP-PM-Format.h" + +static int +memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SliceToReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = { + sizeof(struct FGC_CUUP_PM_Format__sliceToReportList), + offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = { + "sliceToReportList", + "sliceToReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_sliceToReportList_tags_2, + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_sliceToReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_sliceToReportList_2, + 1, /* Single element */ + &asn_SPC_sliceToReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sliceToReportList_2, + 0, + { &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2, memb_sliceToReportList_constraint_1 }, + 0, 0, /* No default value */ + "sliceToReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = { + sizeof(struct FGC_CUUP_PM_Format), + offsetof(struct FGC_CUUP_PM_Format, _asn_ctx), + asn_MAP_FGC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format = { + "FGC-CUUP-PM-Format", + "FGC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_FGC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_FGC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_FGC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_CUUP_PM_Format_H_ +#define _FGC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SliceToReportListItem; + +/* FGC-CUUP-PM-Format */ +typedef struct FGC_CUUP_PM_Format { + struct FGC_CUUP_PM_Format__sliceToReportList { + A_SEQUENCE_OF(struct SliceToReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sliceToReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SliceToReportListItem.h" + +#endif /* _FGC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-DU-PM-Container.h" + +static int +memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SlicePerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = { + sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList), + offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = { + "slicePerPlmnPerCellList", + "slicePerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_slicePerPlmnPerCellList_tags_2, + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */ + asn_DEF_slicePerPlmnPerCellList_tags_2, /* Same as above */ + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */ + { &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_slicePerPlmnPerCellList_2, + 1, /* Single element */ + &asn_SPC_slicePerPlmnPerCellList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_slicePerPlmnPerCellList_2, + 0, + { &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2, memb_slicePerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "slicePerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = { + sizeof(struct FGC_DU_PM_Container), + offsetof(struct FGC_DU_PM_Container, _asn_ctx), + asn_MAP_FGC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container = { + "FGC-DU-PM-Container", + "FGC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_FGC_DU_PM_Container_tags_1, + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_FGC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_FGC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FGC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_DU_PM_Container_H_ +#define _FGC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SlicePerPlmnPerCellListItem; + +/* FGC-DU-PM-Container */ +typedef struct FGC_DU_PM_Container { + struct FGC_DU_PM_Container__slicePerPlmnPerCellList { + A_SEQUENCE_OF(struct SlicePerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } slicePerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SlicePerPlmnPerCellListItem.h" + +#endif /* _FGC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnListItem), + offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = { + "FQIPERSlicesPerPlmnListItem", + "FQIPERSlicesPerPlmnListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnListItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnListItem_H_ +#define _FQIPERSlicesPerPlmnListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnListItem */ +typedef struct FQIPERSlicesPerPlmnListItem { + long fiveQI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnPerCellListItem), + offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = { + "FQIPERSlicesPerPlmnPerCellListItem", + "FQIPERSlicesPerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnPerCellListItem_H_ +#define _FQIPERSlicesPerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnPerCellListItem */ +typedef struct FQIPERSlicesPerPlmnPerCellListItem { + long fiveQI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-CP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_CP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_CP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_CP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_CP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_CP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name = { + "GNB-CU-CP-Name", + "GNB-CU-CP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_CP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_CP_Name_constr_1, &asn_PER_type_GNB_CU_CP_Name_constr_1, GNB_CU_CP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-CP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_CP_Name_H_ +#define _GNB_CU_CP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-Name */ +typedef PrintableString_t GNB_CU_CP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name; +asn_struct_free_f GNB_CU_CP_Name_free; +asn_struct_print_f GNB_CU_CP_Name_print; +asn_constr_check_f GNB_CU_CP_Name_constraint; +ber_type_decoder_f GNB_CU_CP_Name_decode_ber; +der_type_encoder_f GNB_CU_CP_Name_encode_der; +xer_type_decoder_f GNB_CU_CP_Name_decode_xer; +xer_type_encoder_f GNB_CU_CP_Name_encode_xer; +oer_type_decoder_f GNB_CU_CP_Name_decode_oer; +oer_type_encoder_f GNB_CU_CP_Name_encode_oer; +per_type_decoder_f GNB_CU_CP_Name_decode_uper; +per_type_encoder_f GNB_CU_CP_Name_encode_uper; +per_type_decoder_f GNB_CU_CP_Name_decode_aper; +per_type_encoder_f GNB_CU_CP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..737a4f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..e6b9c43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_UP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_UP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_UP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_UP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_UP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name = { + "GNB-CU-UP-Name", + "GNB-CU-UP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_UP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_Name_constr_1, &asn_PER_type_GNB_CU_UP_Name_constr_1, GNB_CU_UP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-CU-UP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_Name_H_ +#define _GNB_CU_UP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-Name */ +typedef PrintableString_t GNB_CU_UP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name; +asn_struct_free_f GNB_CU_UP_Name_free; +asn_struct_print_f GNB_CU_UP_Name_print; +asn_constr_check_f GNB_CU_UP_Name_constraint; +ber_type_decoder_f GNB_CU_UP_Name_decode_ber; +der_type_encoder_f GNB_CU_UP_Name_encode_der; +xer_type_decoder_f GNB_CU_UP_Name_decode_xer; +xer_type_encoder_f GNB_CU_UP_Name_encode_xer; +oer_type_decoder_f GNB_CU_UP_Name_decode_oer; +oer_type_encoder_f GNB_CU_UP_Name_encode_oer; +per_type_decoder_f GNB_CU_UP_Name_decode_uper; +per_type_encoder_f GNB_CU_UP_Name_encode_uper; +per_type_decoder_f GNB_CU_UP_Name_decode_aper; +per_type_encoder_f GNB_CU_UP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..65e23da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_DU_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_DU_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_DU_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_DU_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_DU_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name = { + "GNB-DU-Name", + "GNB-DU-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_DU_Name_tags_1, + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_Name_constr_1, &asn_PER_type_GNB_DU_Name_constr_1, GNB_DU_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-DU-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_Name_H_ +#define _GNB_DU_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-Name */ +typedef PrintableString_t GNB_DU_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name; +asn_struct_free_f GNB_DU_Name_free; +asn_struct_print_f GNB_DU_Name_print; +asn_constr_check_f GNB_DU_Name_constraint; +ber_type_decoder_f GNB_DU_Name_decode_ber; +der_type_encoder_f GNB_DU_Name_encode_der; +xer_type_decoder_f GNB_DU_Name_decode_xer; +xer_type_encoder_f GNB_DU_Name_encode_xer; +oer_type_decoder_f GNB_DU_Name_decode_oer; +oer_type_encoder_f GNB_DU_Name_encode_oer; +per_type_decoder_f GNB_DU_Name_decode_uper; +per_type_encoder_f GNB_DU_Name_encode_uper; +per_type_decoder_f GNB_DU_Name_decode_aper; +per_type_encoder_f GNB_DU_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..81bc2b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..cf5438c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-Name.h" + +static asn_oer_constraints_t asn_OER_type_GNB_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_DU_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-DU-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-CU-UP-Name */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1 = { + sizeof(struct GNB_Name), + offsetof(struct GNB_Name, _asn_ctx), + offsetof(struct GNB_Name, present), + sizeof(((struct GNB_Name *)0)->present), + asn_MAP_GNB_Name_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_Name = { + "GNB-Name", + "GNB-Name", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_Name_constr_1, &asn_PER_type_GNB_Name_constr_1, CHOICE_constraint }, + asn_MBR_GNB_Name_1, + 3, /* Elements count */ + &asn_SPC_GNB_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GNB-Name.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_Name_H_ +#define _GNB_Name_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-DU-Name.h" +#include "GNB-CU-CP-Name.h" +#include "GNB-CU-UP-Name.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_Name_PR { + GNB_Name_PR_NOTHING, /* No components present */ + GNB_Name_PR_gNB_DU_Name, + GNB_Name_PR_gNB_CU_CP_Name, + GNB_Name_PR_gNB_CU_UP_Name + /* Extensions may appear below */ + +} GNB_Name_PR; + +/* GNB-Name */ +typedef struct GNB_Name { + GNB_Name_PR present; + union GNB_Name_u { + GNB_DU_Name_t gNB_DU_Name; + GNB_CU_CP_Name_t gNB_CU_CP_Name; + GNB_CU_UP_Name_t gNB_CU_UP_Name; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_Name; +extern asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_Name_1[3]; +extern asn_per_constraints_t asn_PER_type_GNB_Name_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..0b194e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..339797e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..f31a018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..6047414 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..2728634 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..0bae91d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..25f0346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..2f36099 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..91e427b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..d6767bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..58f3724 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..bd653ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.c @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ID.h" + +static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ID), + offsetof(struct GlobalKPMnode_ID, _asn_ctx), + offsetof(struct GlobalKPMnode_ID, present), + sizeof(((struct GlobalKPMnode_ID *)0)->present), + asn_MAP_GlobalKPMnode_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = { + "GlobalKPMnode-ID", + "GlobalKPMnode-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalKPMnode_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalKPMnode_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ID.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ID_H_ +#define _GlobalKPMnode_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalKPMnode-gNB-ID.h" +#include "GlobalKPMnode-en-gNB-ID.h" +#include "GlobalKPMnode-ng-eNB-ID.h" +#include "GlobalKPMnode-eNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalKPMnode_ID_PR { + GlobalKPMnode_ID_PR_NOTHING, /* No components present */ + GlobalKPMnode_ID_PR_gNB, + GlobalKPMnode_ID_PR_en_gNB, + GlobalKPMnode_ID_PR_ng_eNB, + GlobalKPMnode_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalKPMnode_ID_PR; + +/* GlobalKPMnode-ID */ +typedef struct GlobalKPMnode_ID { + GlobalKPMnode_ID_PR present; + union GlobalKPMnode_ID_u { + GlobalKPMnode_gNB_ID_t gNB; + GlobalKPMnode_en_gNB_ID_t en_gNB; + GlobalKPMnode_ng_eNB_ID_t ng_eNB; + GlobalKPMnode_eNB_ID_t eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_eNB_ID), + offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID = { + "GlobalKPMnode-eNB-ID", + "GlobalKPMnode-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_eNB_ID_H_ +#define _GlobalKPMnode_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-eNB-ID */ +typedef struct GlobalKPMnode_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_en_gNB_ID), + offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID = { + "GlobalKPMnode-en-gNB-ID", + "GlobalKPMnode-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_en_gNB_ID_H_ +#define _GlobalKPMnode_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-en-gNB-ID */ +typedef struct GlobalKPMnode_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_gNB_ID), + offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalKPMnode_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = { + "GlobalKPMnode-gNB-ID", + "GlobalKPMnode-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalKPMnode_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_gNB_ID_H_ +#define _GlobalKPMnode_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-gNB-ID */ +typedef struct GlobalKPMnode_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ng_eNB_ID), + offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID = { + "GlobalKPMnode-ng-eNB-ID", + "GlobalKPMnode-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalKPMnode-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ng_eNB_ID_H_ +#define _GlobalKPMnode_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-ng-eNB-ID */ +typedef struct GlobalKPMnode_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..f113921 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..c1ab6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..07f8116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..1e254a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..bfcc098 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..e31846d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..d220e9a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..e8246ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..de67caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.c @@ -0,0 +1,389 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..a8a01f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..c1bec19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + converter-example.c\ + pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..8abd4f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,240 @@ +ASN_MODULE_SRCS= \ + GlobalKPMnode-ID.c \ + GlobalKPMnode-gNB-ID.c \ + GlobalgNB-ID.c \ + GNB-CU-UP-ID.c \ + GNB-DU-ID.c \ + GNB-ID-Choice.c \ + GlobalKPMnode-en-gNB-ID.c \ + GlobalenGNB-ID.c \ + ENGNB-ID.c \ + GlobalKPMnode-ng-eNB-ID.c \ + GlobalngeNB-ID.c \ + ENB-ID-Choice.c \ + GlobalKPMnode-eNB-ID.c \ + GlobalENB-ID.c \ + ENB-ID.c \ + NRCGI.c \ + PLMN-Identity.c \ + NRCellIdentity.c \ + SNSSAI.c \ + C-RNTI.c \ + RIC-Style-Type.c \ + RIC-Style-Name.c \ + RIC-Format-Type.c \ + E2SM-KPM-EventTriggerDefinition.c \ + E2SM-KPM-EventTriggerDefinition-Format1.c \ + E2SM-KPM-ActionDefinition.c \ + E2SM-KPM-IndicationHeader.c \ + E2SM-KPM-IndicationHeader-Format1.c \ + E2SM-KPM-IndicationMessage.c \ + E2SM-KPM-IndicationMessage-Format1.c \ + PM-Containers-List.c \ + E2SM-KPM-RANfunction-Description.c \ + NI-Type.c \ + RAN-Container.c \ + Timestamp.c \ + Trigger-ConditionIE-Item.c \ + RT-Period-IE.c \ + RANcallProcess-ID-string.c \ + RANfunction-Name.c \ + RIC-EventTriggerStyle-List.c \ + RIC-ReportStyle-List.c \ + PF-Container.c \ + GNB-Name.c \ + GNB-CU-CP-Name.c \ + GNB-DU-Name.c \ + GNB-CU-UP-Name.c \ + UE-Report-Type.c \ + ODU-PF-Container.c \ + CellResourceReportListItem.c \ + ServedPlmnPerCellListItem.c \ + FGC-DU-PM-Container.c \ + SlicePerPlmnPerCellListItem.c \ + FQIPERSlicesPerPlmnPerCellListItem.c \ + EPC-DU-PM-Container.c \ + PerQCIReportListItem.c \ + DU-Usage-Report-Per-UE.c \ + DU-Usage-Report-CellResourceReportItem.c \ + DU-Usage-Report-UeResourceReportItem.c \ + OCUCP-PF-Container.c \ + CU-CP-Usage-Report-Per-UE.c \ + CU-CP-Usage-Report-CellResourceReportItem.c \ + CU-CP-Usage-Report-UeResourceReportItem.c \ + OCUUP-PF-Container.c \ + PF-ContainerListItem.c \ + CUUPMeasurement-Container.c \ + PlmnID-List.c \ + FGC-CUUP-PM-Format.c \ + SliceToReportListItem.c \ + FQIPERSlicesPerPlmnListItem.c \ + EPC-CUUP-PM-Format.c \ + PerQCIReportListItemFormat.c \ + CU-UP-Usage-Report-Per-UE.c \ + CU-UP-Usage-Report-CellResourceReportItem.c \ + CU-UP-Usage-Report-UeResourceReportItem.c + +ASN_MODULE_HDRS= \ + GlobalKPMnode-ID.h \ + GlobalKPMnode-gNB-ID.h \ + GlobalgNB-ID.h \ + GNB-CU-UP-ID.h \ + GNB-DU-ID.h \ + GNB-ID-Choice.h \ + GlobalKPMnode-en-gNB-ID.h \ + GlobalenGNB-ID.h \ + ENGNB-ID.h \ + GlobalKPMnode-ng-eNB-ID.h \ + GlobalngeNB-ID.h \ + ENB-ID-Choice.h \ + GlobalKPMnode-eNB-ID.h \ + GlobalENB-ID.h \ + ENB-ID.h \ + NRCGI.h \ + PLMN-Identity.h \ + NRCellIdentity.h \ + SNSSAI.h \ + C-RNTI.h \ + RIC-Style-Type.h \ + RIC-Style-Name.h \ + RIC-Format-Type.h \ + E2SM-KPM-EventTriggerDefinition.h \ + E2SM-KPM-EventTriggerDefinition-Format1.h \ + E2SM-KPM-ActionDefinition.h \ + E2SM-KPM-IndicationHeader.h \ + E2SM-KPM-IndicationHeader-Format1.h \ + E2SM-KPM-IndicationMessage.h \ + E2SM-KPM-IndicationMessage-Format1.h \ + PM-Containers-List.h \ + E2SM-KPM-RANfunction-Description.h \ + NI-Type.h \ + RAN-Container.h \ + Timestamp.h \ + Trigger-ConditionIE-Item.h \ + RT-Period-IE.h \ + RANcallProcess-ID-string.h \ + RANfunction-Name.h \ + RIC-EventTriggerStyle-List.h \ + RIC-ReportStyle-List.h \ + PF-Container.h \ + GNB-Name.h \ + GNB-CU-CP-Name.h \ + GNB-DU-Name.h \ + GNB-CU-UP-Name.h \ + UE-Report-Type.h \ + ODU-PF-Container.h \ + CellResourceReportListItem.h \ + ServedPlmnPerCellListItem.h \ + FGC-DU-PM-Container.h \ + SlicePerPlmnPerCellListItem.h \ + FQIPERSlicesPerPlmnPerCellListItem.h \ + EPC-DU-PM-Container.h \ + PerQCIReportListItem.h \ + DU-Usage-Report-Per-UE.h \ + DU-Usage-Report-CellResourceReportItem.h \ + DU-Usage-Report-UeResourceReportItem.h \ + OCUCP-PF-Container.h \ + CU-CP-Usage-Report-Per-UE.h \ + CU-CP-Usage-Report-CellResourceReportItem.h \ + CU-CP-Usage-Report-UeResourceReportItem.h \ + OCUUP-PF-Container.h \ + PF-ContainerListItem.h \ + CUUPMeasurement-Container.h \ + PlmnID-List.h \ + FGC-CUUP-PM-Format.h \ + SliceToReportListItem.h \ + FQIPERSlicesPerPlmnListItem.h \ + EPC-CUUP-PM-Format.h \ + PerQCIReportListItemFormat.h \ + CU-UP-Usage-Report-Per-UE.h \ + CU-UP-Usage-Report-CellResourceReportItem.h \ + CU-UP-Usage-Report-UeResourceReportItem.h + +ASN_MODULE_HDRS+=OPEN_TYPE.h +ASN_MODULE_SRCS+=OPEN_TYPE.c +ASN_MODULE_HDRS+=constr_CHOICE.h +ASN_MODULE_HDRS+=INTEGER.h +ASN_MODULE_SRCS+=INTEGER.c +ASN_MODULE_HDRS+=NativeEnumerated.h +ASN_MODULE_SRCS+=NativeEnumerated.c +ASN_MODULE_HDRS+=NativeInteger.h +ASN_MODULE_SRCS+=NativeInteger.c +ASN_MODULE_HDRS+=PrintableString.h +ASN_MODULE_SRCS+=PrintableString.c +ASN_MODULE_HDRS+=OCTET_STRING.h +ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=asn_SET_OF.h +ASN_MODULE_SRCS+=asn_SET_OF.c +ASN_MODULE_SRCS+=constr_CHOICE.c +ASN_MODULE_HDRS+=constr_SEQUENCE.h +ASN_MODULE_SRCS+=constr_SEQUENCE.c +ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=constr_SET_OF.h +ASN_MODULE_SRCS+=constr_SET_OF.c +ASN_MODULE_HDRS+=asn_application.h +ASN_MODULE_SRCS+=asn_application.c +ASN_MODULE_HDRS+=asn_ioc.h +ASN_MODULE_HDRS+=asn_system.h +ASN_MODULE_HDRS+=asn_codecs.h +ASN_MODULE_HDRS+=asn_internal.h +ASN_MODULE_SRCS+=asn_internal.c +ASN_MODULE_HDRS+=asn_random_fill.h +ASN_MODULE_SRCS+=asn_random_fill.c +ASN_MODULE_HDRS+=asn_bit_data.h +ASN_MODULE_SRCS+=asn_bit_data.c +ASN_MODULE_SRCS+=OCTET_STRING.c +ASN_MODULE_HDRS+=BIT_STRING.h +ASN_MODULE_SRCS+=BIT_STRING.c +ASN_MODULE_SRCS+=asn_codecs_prim.c +ASN_MODULE_HDRS+=asn_codecs_prim.h +ASN_MODULE_HDRS+=ber_tlv_length.h +ASN_MODULE_SRCS+=ber_tlv_length.c +ASN_MODULE_HDRS+=ber_tlv_tag.h +ASN_MODULE_SRCS+=ber_tlv_tag.c +ASN_MODULE_HDRS+=ber_decoder.h +ASN_MODULE_SRCS+=ber_decoder.c +ASN_MODULE_HDRS+=der_encoder.h +ASN_MODULE_SRCS+=der_encoder.c +ASN_MODULE_HDRS+=constr_TYPE.h +ASN_MODULE_SRCS+=constr_TYPE.c +ASN_MODULE_HDRS+=constraints.h +ASN_MODULE_SRCS+=constraints.c +ASN_MODULE_HDRS+=xer_support.h +ASN_MODULE_SRCS+=xer_support.c +ASN_MODULE_HDRS+=xer_decoder.h +ASN_MODULE_SRCS+=xer_decoder.c +ASN_MODULE_HDRS+=xer_encoder.h +ASN_MODULE_SRCS+=xer_encoder.c +ASN_MODULE_HDRS+=per_support.h +ASN_MODULE_SRCS+=per_support.c +ASN_MODULE_HDRS+=per_decoder.h +ASN_MODULE_SRCS+=per_decoder.c +ASN_MODULE_HDRS+=per_encoder.h +ASN_MODULE_SRCS+=per_encoder.c +ASN_MODULE_HDRS+=per_opentype.h +ASN_MODULE_SRCS+=per_opentype.c +ASN_MODULE_HDRS+=oer_decoder.h +ASN_MODULE_HDRS+=oer_encoder.h +ASN_MODULE_HDRS+=oer_support.h +ASN_MODULE_SRCS+=oer_decoder.c +ASN_MODULE_SRCS+=oer_encoder.c +ASN_MODULE_SRCS+=oer_support.c +ASN_MODULE_SRCS+=OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=INTEGER_oer.c +ASN_MODULE_SRCS+=BIT_STRING_oer.c +ASN_MODULE_SRCS+=OCTET_STRING_oer.c +ASN_MODULE_SRCS+=NativeInteger_oer.c +ASN_MODULE_SRCS+=NativeEnumerated_oer.c +ASN_MODULE_SRCS+=constr_CHOICE_oer.c +ASN_MODULE_SRCS+=constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NI-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_NI_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NI_Type_value2enum_1[] = { + { 0, 4, "x2-u" }, + { 1, 4, "xn-u" }, + { 2, 4, "f1-u" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NI_Type_enum2value_1[] = { + 2, /* f1-u(2) */ + 0, /* x2-u(0) */ + 1 /* xn-u(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = { + asn_MAP_NI_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NI_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NI_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NI_Type = { + "NI-Type", + "NI-Type", + &asn_OP_NativeEnumerated, + asn_DEF_NI_Type_tags_1, + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + asn_DEF_NI_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NI_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NI-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NI_Type_H_ +#define _NI_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NI_Type { + NI_Type_x2_u = 0, + NI_Type_xn_u = 1, + NI_Type_f1_u = 2 + /* + * Enumeration is extensible + */ +} e_NI_Type; + +/* NI-Type */ +typedef long NI_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NI_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NI_Type; +extern const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1; +asn_struct_free_f NI_Type_free; +asn_struct_print_f NI_Type_print; +asn_constr_check_f NI_Type_constraint; +ber_type_decoder_f NI_Type_decode_ber; +der_type_encoder_f NI_Type_encode_der; +xer_type_decoder_f NI_Type_decode_xer; +xer_type_encoder_f NI_Type_encode_xer; +oer_type_decoder_f NI_Type_decode_oer; +oer_type_encoder_f NI_Type_encode_oer; +per_type_decoder_f NI_Type_decode_uper; +per_type_encoder_f NI_Type_encode_uper; +per_type_decoder_f NI_Type_decode_aper; +per_type_encoder_f NI_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NI_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCGI.h" + +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 2, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCGI.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentity_t nRCellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCellIdentity.h" + +int +NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 36 /* (SIZE(36..36)) */}; +asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { + "NRCellIdentity", + "NRCellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentity_tags_1, + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NRCellIdentity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCellIdentity_H_ +#define _NRCellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentity */ +typedef BIT_STRING_t NRCellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentity; +asn_struct_free_f NRCellIdentity_free; +asn_struct_print_f NRCellIdentity_print; +asn_constr_check_f NRCellIdentity_constraint; +ber_type_decoder_f NRCellIdentity_decode_ber; +der_type_encoder_f NRCellIdentity_encode_der; +xer_type_decoder_f NRCellIdentity_decode_xer; +xer_type_encoder_f NRCellIdentity_encode_xer; +oer_type_decoder_f NRCellIdentity_decode_oer; +oer_type_encoder_f NRCellIdentity_encode_oer; +per_type_decoder_f NRCellIdentity_decode_uper; +per_type_encoder_f NRCellIdentity_encode_uper; +per_type_decoder_f NRCellIdentity_decode_aper; +per_type_encoder_f NRCellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUCP-PF-Container.h" + +static int +memb_numberOfActive_UEs_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_3[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_numberOfActive_UEs_constr_4, &asn_PER_memb_numberOfActive_UEs_constr_4, memb_numberOfActive_UEs_constraint_3 }, + 0, 0, /* No default value */ + "numberOfActive-UEs" + }, +}; +static const int asn_MAP_cu_CP_Resource_Status_oms_3[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_3 = { + sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status), + offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx), + asn_MAP_cu_CP_Resource_Status_tag2el_3, + 1, /* Count of tags in the map */ + asn_MAP_cu_CP_Resource_Status_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_3 = { + "cu-CP-Resource-Status", + "cu-CP-Resource-Status", + &asn_OP_SEQUENCE, + asn_DEF_cu_CP_Resource_Status_tags_3, + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]) - 1, /* 1 */ + asn_DEF_cu_CP_Resource_Status_tags_3, /* Same as above */ + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_cu_CP_Resource_Status_3, + 1, /* Elements count */ + &asn_SPC_cu_CP_Resource_Status_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container, gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cu_CP_Resource_Status_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-CP-Resource-Status" + }, +}; +static const int asn_MAP_OCUCP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cu-CP-Resource-Status */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = { + sizeof(struct OCUCP_PF_Container), + offsetof(struct OCUCP_PF_Container, _asn_ctx), + asn_MAP_OCUCP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUCP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container = { + "OCUCP-PF-Container", + "OCUCP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUCP_PF_Container_tags_1, + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUCP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUCP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUCP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUCP-PF-Container.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUCP_PF_Container_H_ +#define _OCUCP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-CP-Name.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OCUCP-PF-Container */ +typedef struct OCUCP_PF_Container { + GNB_CU_CP_Name_t *gNB_CU_CP_Name; /* OPTIONAL */ + struct OCUCP_PF_Container__cu_CP_Resource_Status { + long *numberOfActive_UEs; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cu_CP_Resource_Status; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUCP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCUCP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.c @@ -0,0 +1,141 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUUP-PF-Container.h" + +static int +memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pf_ContainerList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PF_ContainerListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_3 = { + sizeof(struct OCUUP_PF_Container__pf_ContainerList), + offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_3 = { + "pf-ContainerList", + "pf-ContainerList", + &asn_OP_SEQUENCE_OF, + asn_DEF_pf_ContainerList_tags_3, + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]) - 1, /* 1 */ + asn_DEF_pf_ContainerList_tags_3, /* Same as above */ + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]), /* 2 */ + { &asn_OER_type_pf_ContainerList_constr_3, &asn_PER_type_pf_ContainerList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_pf_ContainerList_3, + 1, /* Single element */ + &asn_SPC_pf_ContainerList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUUP_PF_Container, gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pf_ContainerList_3, + 0, + { &asn_OER_memb_pf_ContainerList_constr_3, &asn_PER_memb_pf_ContainerList_constr_3, memb_pf_ContainerList_constraint_1 }, + 0, 0, /* No default value */ + "pf-ContainerList" + }, +}; +static const int asn_MAP_OCUUP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pf-ContainerList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = { + sizeof(struct OCUUP_PF_Container), + offsetof(struct OCUUP_PF_Container, _asn_ctx), + asn_MAP_OCUUP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUUP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container = { + "OCUUP-PF-Container", + "OCUUP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUUP_PF_Container_tags_1, + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUUP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUUP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUUP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OCUUP-PF-Container.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUUP_PF_Container_H_ +#define _OCUUP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-UP-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_ContainerListItem; + +/* OCUUP-PF-Container */ +typedef struct OCUUP_PF_Container { + GNB_CU_UP_Name_t *gNB_CU_UP_Name; /* OPTIONAL */ + struct OCUUP_PF_Container__pf_ContainerList { + A_SEQUENCE_OF(struct PF_ContainerListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pf_ContainerList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUUP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-ContainerListItem.h" + +#endif /* _OCUUP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ODU-PF-Container.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellResourceReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct ODU_PF_Container__cellResourceReportList), + offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = { + sizeof(struct ODU_PF_Container), + offsetof(struct ODU_PF_Container, _asn_ctx), + asn_MAP_ODU_PF_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container = { + "ODU-PF-Container", + "ODU-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_ODU_PF_Container_tags_1, + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_ODU_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ODU_PF_Container_1, + 1, /* Elements count */ + &asn_SPC_ODU_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ODU-PF-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ODU_PF_Container_H_ +#define _ODU_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellResourceReportListItem; + +/* ODU-PF-Container */ +typedef struct ODU_PF_Container { + struct ODU_PF_Container__cellResourceReportList { + A_SEQUENCE_OF(struct CellResourceReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ODU_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellResourceReportListItem.h" + +#endif /* _ODU_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-Container.h" + +static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oDU), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ODU_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_CP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUCP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_UP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUUP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */ +}; +asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = { + sizeof(struct PF_Container), + offsetof(struct PF_Container, _asn_ctx), + offsetof(struct PF_Container, present), + sizeof(((struct PF_Container *)0)->present), + asn_MAP_PF_Container_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_Container = { + "PF-Container", + "PF-Container", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint }, + asn_MBR_PF_Container_1, + 3, /* Elements count */ + &asn_SPC_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-Container.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_Container_H_ +#define _PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "ODU-PF-Container.h" +#include "OCUCP-PF-Container.h" +#include "OCUUP-PF-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PF_Container_PR { + PF_Container_PR_NOTHING, /* No components present */ + PF_Container_PR_oDU, + PF_Container_PR_oCU_CP, + PF_Container_PR_oCU_UP + /* Extensions may appear below */ + +} PF_Container_PR; + +/* PF-Container */ +typedef struct PF_Container { + PF_Container_PR present; + union PF_Container_u { + ODU_PF_Container_t oDU; + OCUCP_PF_Container_t oCU_CP; + OCUUP_PF_Container_t oCU_UP; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_Container; +extern asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_Container_1[3]; +extern asn_per_constraints_t asn_PER_type_PF_Container_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-ContainerListItem.h" + +asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NI_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-type" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CUUPMeasurement_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "o-CU-UP-PM-Container" + }, +}; +static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = { + sizeof(struct PF_ContainerListItem), + offsetof(struct PF_ContainerListItem, _asn_ctx), + asn_MAP_PF_ContainerListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem = { + "PF-ContainerListItem", + "PF-ContainerListItem", + &asn_OP_SEQUENCE, + asn_DEF_PF_ContainerListItem_tags_1, + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + asn_DEF_PF_ContainerListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PF_ContainerListItem_1, + 2, /* Elements count */ + &asn_SPC_PF_ContainerListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PF-ContainerListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_ContainerListItem_H_ +#define _PF_ContainerListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NI-Type.h" +#include "CUUPMeasurement-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PF-ContainerListItem */ +typedef struct PF_ContainerListItem { + NI_Type_t interface_type; + CUUPMeasurement_Container_t o_CU_UP_PM_Container; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_ContainerListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_ContainerListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..e3754f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..6835400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PM-Containers-List.h" + +asn_TYPE_member_t asn_MBR_PM_Containers_List_1[] = { + { ATF_POINTER, 2, offsetof(struct PM_Containers_List, performanceContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "performanceContainer" + }, + { ATF_POINTER, 1, offsetof(struct PM_Containers_List, theRANContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAN_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "theRANContainer" + }, +}; +static const int asn_MAP_PM_Containers_List_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_PM_Containers_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1 = { + sizeof(struct PM_Containers_List), + offsetof(struct PM_Containers_List, _asn_ctx), + asn_MAP_PM_Containers_List_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PM_Containers_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PM_Containers_List = { + "PM-Containers-List", + "PM-Containers-List", + &asn_OP_SEQUENCE, + asn_DEF_PM_Containers_List_tags_1, + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + asn_DEF_PM_Containers_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PM_Containers_List_1, + 2, /* Elements count */ + &asn_SPC_PM_Containers_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PM-Containers-List.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PM_Containers_List_H_ +#define _PM_Containers_List_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_Container; +struct RAN_Container; + +/* PM-Containers-List */ +typedef struct PM_Containers_List { + struct PF_Container *performanceContainer; /* OPTIONAL */ + struct RAN_Container *theRANContainer; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PM_Containers_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PM_Containers_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PM_Containers_List_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-Container.h" +#include "RAN-Container.h" + +#endif /* _PM_Containers_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItem.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = { + sizeof(struct PerQCIReportListItem), + offsetof(struct PerQCIReportListItem, _asn_ctx), + asn_MAP_PerQCIReportListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = { + "PerQCIReportListItem", + "PerQCIReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItem_tags_1, + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItem_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItem_H_ +#define _PerQCIReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItem */ +typedef struct PerQCIReportListItem { + long qci; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItemFormat.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = { + sizeof(struct PerQCIReportListItemFormat), + offsetof(struct PerQCIReportListItemFormat, _asn_ctx), + asn_MAP_PerQCIReportListItemFormat_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItemFormat_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = { + "PerQCIReportListItemFormat", + "PerQCIReportListItemFormat", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItemFormat_tags_1, + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItemFormat_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItemFormat_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItemFormat_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PerQCIReportListItemFormat.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItemFormat_H_ +#define _PerQCIReportListItemFormat_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItemFormat */ +typedef struct PerQCIReportListItemFormat { + long qci; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItemFormat_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItemFormat_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PlmnID-List.h" + +asn_TYPE_member_t asn_MBR_PlmnID_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PlmnID_List, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct PlmnID_List, cu_UP_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct PlmnID_List, cu_UP_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-EPC" + }, +}; +static const int asn_MAP_PlmnID_List_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PlmnID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PlmnID_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1 = { + sizeof(struct PlmnID_List), + offsetof(struct PlmnID_List, _asn_ctx), + asn_MAP_PlmnID_List_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PlmnID_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PlmnID_List = { + "PlmnID-List", + "PlmnID-List", + &asn_OP_SEQUENCE, + asn_DEF_PlmnID_List_tags_1, + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + asn_DEF_PlmnID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PlmnID_List_1, + 3, /* Elements count */ + &asn_SPC_PlmnID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PlmnID-List.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PlmnID_List_H_ +#define _PlmnID_List_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_CUUP_PM_Format; +struct EPC_CUUP_PM_Format; + +/* PlmnID-List */ +typedef struct PlmnID_List { + PLMN_Identity_t pLMN_Identity; + struct FGC_CUUP_PM_Format *cu_UP_PM_5GC; /* OPTIONAL */ + struct EPC_CUUP_PM_Format *cu_UP_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PlmnID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PlmnID_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PlmnID_List_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-CUUP-PM-Format.h" +#include "EPC-CUUP-PM-Format.h" + +#endif /* _PlmnID_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c new file mode 100644 index 0000000..4f55ae3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h new file mode 100644 index 0000000..8f93430 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Presence.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..0e488d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..a2e8fe8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProcedureCode.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4046387 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,810 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..5034a64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c9d5808 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..3376410 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..ad1c8b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..5b730c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..f77445b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..1837ac8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..af5597c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7190 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..573edcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..9c7e653 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..8193bd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..9afe610 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..f6d2261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..c516962 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..b17c298 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.c @@ -0,0 +1,127 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RAN-Container.h" + +static asn_oer_constraints_t asn_OER_type_reportContainer_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_reportContainer_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportContainer_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oDU_UE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DU_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_CP_UE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_CP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_UP_UE), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_UP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP-UE" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_reportContainer_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU-UE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP-UE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP-UE */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportContainer_specs_3 = { + sizeof(struct RAN_Container__reportContainer), + offsetof(struct RAN_Container__reportContainer, _asn_ctx), + offsetof(struct RAN_Container__reportContainer, present), + sizeof(((struct RAN_Container__reportContainer *)0)->present), + asn_MAP_reportContainer_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportContainer_3 = { + "reportContainer", + "reportContainer", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_reportContainer_constr_3, &asn_PER_type_reportContainer_constr_3, CHOICE_constraint }, + asn_MBR_reportContainer_3, + 3, /* Elements count */ + &asn_SPC_reportContainer_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RAN_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, timestamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Timestamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, reportContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportContainer_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportContainer" + }, +}; +static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RAN_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1 = { + sizeof(struct RAN_Container), + offsetof(struct RAN_Container, _asn_ctx), + asn_MAP_RAN_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RAN_Container = { + "RAN-Container", + "RAN-Container", + &asn_OP_SEQUENCE, + asn_DEF_RAN_Container_tags_1, + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + asn_DEF_RAN_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RAN_Container_1, + 2, /* Elements count */ + &asn_SPC_RAN_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RAN-Container.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RAN_Container_H_ +#define _RAN_Container_H_ + + +#include + +/* Including external dependencies */ +#include "Timestamp.h" +#include "DU-Usage-Report-Per-UE.h" +#include "CU-CP-Usage-Report-Per-UE.h" +#include "CU-UP-Usage-Report-Per-UE.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAN_Container__reportContainer_PR { + RAN_Container__reportContainer_PR_NOTHING, /* No components present */ + RAN_Container__reportContainer_PR_oDU_UE, + RAN_Container__reportContainer_PR_oCU_CP_UE, + RAN_Container__reportContainer_PR_oCU_UP_UE + /* Extensions may appear below */ + +} RAN_Container__reportContainer_PR; + +/* RAN-Container */ +typedef struct RAN_Container { + Timestamp_t timestamp; + struct RAN_Container__reportContainer { + RAN_Container__reportContainer_PR present; + union RAN_Container__reportContainer_u { + DU_Usage_Report_Per_UE_t oDU_UE; + CU_CP_Usage_Report_Per_UE_t oCU_CP_UE; + CU_UP_Usage_Report_Per_UE_t oCU_UP_UE; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportContainer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RAN_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAN_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_RAN_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAN_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANcallProcess-ID-string.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RANcallProcess_ID_string_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RANcallProcess_ID_string_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RANcallProcess_ID_string_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = { + "RANcallProcess-ID-string", + "RANcallProcess-ID-string", + &asn_OP_PrintableString, + asn_DEF_RANcallProcess_ID_string_tags_1, + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + asn_DEF_RANcallProcess_ID_string_tags_1, /* Same as above */ + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + { &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANcallProcess-ID-string.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANcallProcess_ID_string_H_ +#define _RANcallProcess_ID_string_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANcallProcess-ID-string */ +typedef PrintableString_t RANcallProcess_ID_string_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string; +asn_struct_free_f RANcallProcess_ID_string_free; +asn_struct_print_f RANcallProcess_ID_string_print; +asn_constr_check_f RANcallProcess_ID_string_constraint; +ber_type_decoder_f RANcallProcess_ID_string_decode_ber; +der_type_encoder_f RANcallProcess_ID_string_encode_der; +xer_type_decoder_f RANcallProcess_ID_string_decode_xer; +xer_type_encoder_f RANcallProcess_ID_string_encode_xer; +oer_type_decoder_f RANcallProcess_ID_string_decode_oer; +oer_type_encoder_f RANcallProcess_ID_string_encode_oer; +per_type_decoder_f RANcallProcess_ID_string_decode_uper; +per_type_encoder_f RANcallProcess_ID_string_encode_uper; +per_type_decoder_f RANcallProcess_ID_string_decode_aper; +per_type_encoder_f RANcallProcess_ID_string_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANcallProcess_ID_string_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..f1554d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..e7fd073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.c @@ -0,0 +1,316 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANfunction-Name.h" + +static const int permitted_alphabet_table_2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_2[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_2(const void *sptr) { + const int *table = permitted_alphabet_table_2; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_ranFunction_ShortName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_2(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_ShortName_2_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_2)/sizeof(permitted_alphabet_table_2[0])) + return -1; + return permitted_alphabet_table_2[value] - 1; +} +static int asn_PER_MAP_ranFunction_ShortName_2_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_2)/sizeof(permitted_alphabet_code2value_2[0])) + return -1; + return permitted_alphabet_code2value_2[code]; +} +static int +memb_ranFunction_E2SM_OID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000) + && !check_permitted_alphabet_3(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_E2SM_OID_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_ranFunction_E2SM_OID_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} +static int +memb_ranFunction_Description_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_4(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_Description_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} +static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, + asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_Description_4_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_Description_4_c2v /* PER code to value map */ +}; +asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_ShortName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-ShortName" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_E2SM_OID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-E2SM-OID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_Description), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-Description" + }, + { ATF_POINTER, 1, offsetof(struct RANfunction_Name, ranFunction_Instance), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Instance" + }, +}; +static const int asn_MAP_RANfunction_Name_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_RANfunction_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-ShortName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunction-E2SM-OID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunction-Description */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunction-Instance */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1 = { + sizeof(struct RANfunction_Name), + offsetof(struct RANfunction_Name, _asn_ctx), + asn_MAP_RANfunction_Name_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RANfunction_Name_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Name = { + "RANfunction-Name", + "RANfunction-Name", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Name_tags_1, + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Name_1, + 4, /* Elements count */ + &asn_SPC_RANfunction_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunction-Name.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANfunction_Name_H_ +#define _RANfunction_Name_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Name */ +typedef struct RANfunction_Name { + PrintableString_t ranFunction_ShortName; + PrintableString_t ranFunction_E2SM_OID; + PrintableString_t ranFunction_Description; + long *ranFunction_Instance; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Name; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..3d8697d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..4e54dde --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..7661a88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..9b3be69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..fc95705 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..f0a61a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..985330a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..033ed53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a0b271b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..58ec9ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionRevision.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..f55d0a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..9e45736 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..c52b90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..b8bd23c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..fb5c08d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..386c289 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-EventTriggerStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_List), + offsetof(struct RIC_EventTriggerStyle_List, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_List_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List = { + "RIC-EventTriggerStyle-List", + "RIC-EventTriggerStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_List_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_List_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-EventTriggerStyle-List.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_EventTriggerStyle_List_H_ +#define _RIC_EventTriggerStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-List */ +typedef struct RIC_EventTriggerStyle_List { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Format-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Format_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type = { + "RIC-Format-Type", + "RIC-Format-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Format_Type_tags_1, + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Format_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Format-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Format_Type_H_ +#define _RIC_Format_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Format-Type */ +typedef long RIC_Format_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type; +asn_struct_free_f RIC_Format_Type_free; +asn_struct_print_f RIC_Format_Type_print; +asn_constr_check_f RIC_Format_Type_constraint; +ber_type_decoder_f RIC_Format_Type_decode_ber; +der_type_encoder_f RIC_Format_Type_encode_der; +xer_type_decoder_f RIC_Format_Type_decode_xer; +xer_type_encoder_f RIC_Format_Type_encode_xer; +oer_type_decoder_f RIC_Format_Type_decode_oer; +oer_type_encoder_f RIC_Format_Type_encode_oer; +per_type_decoder_f RIC_Format_Type_decode_uper; +per_type_encoder_f RIC_Format_Type_encode_uper; +per_type_decoder_f RIC_Format_Type_decode_aper; +per_type_encoder_f RIC_Format_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Format_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-ReportStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1 = { + sizeof(struct RIC_ReportStyle_List), + offsetof(struct RIC_ReportStyle_List, _asn_ctx), + asn_MAP_RIC_ReportStyle_List_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List = { + "RIC-ReportStyle-List", + "RIC-ReportStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_List_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_List_1, + 4, /* Elements count */ + &asn_SPC_RIC_ReportStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-ReportStyle-List.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_ReportStyle_List_H_ +#define _RIC_ReportStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-List */ +typedef struct RIC_ReportStyle_List { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RIC_Style_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RIC_Style_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RIC_Style_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RIC_Style_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RIC_Style_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { + "RIC-Style-Name", + "RIC-Style-Name", + &asn_OP_PrintableString, + asn_DEF_RIC_Style_Name_tags_1, + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Name_H_ +#define _RIC_Style_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Name */ +typedef PrintableString_t RIC_Style_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name; +asn_struct_free_f RIC_Style_Name_free; +asn_struct_print_f RIC_Style_Name_print; +asn_constr_check_f RIC_Style_Name_constraint; +ber_type_decoder_f RIC_Style_Name_decode_ber; +der_type_encoder_f RIC_Style_Name_encode_der; +xer_type_decoder_f RIC_Style_Name_decode_xer; +xer_type_encoder_f RIC_Style_Name_encode_xer; +oer_type_decoder_f RIC_Style_Name_decode_oer; +oer_type_encoder_f RIC_Style_Name_encode_oer; +per_type_decoder_f RIC_Style_Name_decode_uper; +per_type_encoder_f RIC_Style_Name_encode_uper; +per_type_decoder_f RIC_Style_Name_decode_aper; +per_type_encoder_f RIC_Style_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Style_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type = { + "RIC-Style-Type", + "RIC-Style-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Style_Type_tags_1, + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RIC-Style-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Type_H_ +#define _RIC_Style_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Type */ +typedef long RIC_Style_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type; +asn_struct_free_f RIC_Style_Type_free; +asn_struct_print_f RIC_Style_Type_print; +asn_constr_check_f RIC_Style_Type_constraint; +ber_type_decoder_f RIC_Style_Type_decode_ber; +der_type_encoder_f RIC_Style_Type_encode_der; +xer_type_decoder_f RIC_Style_Type_decode_xer; +xer_type_encoder_f RIC_Style_Type_encode_xer; +oer_type_decoder_f RIC_Style_Type_decode_oer; +oer_type_encoder_f RIC_Style_Type_encode_oer; +per_type_decoder_f RIC_Style_Type_decode_uper; +per_type_encoder_f RIC_Style_Type_encode_uper; +per_type_decoder_f RIC_Style_Type_decode_aper; +per_type_encoder_f RIC_Style_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..0b566bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..d7f13c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..692fd38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..8eaf217 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..515679d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..48645e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..51f45f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..95bbadf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..2e8bc94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..c3f5d07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..dd1d941 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..e1eeca6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c new file mode 100644 index 0000000..ecd1ea7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h new file mode 100644 index 0000000..b21d3a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c new file mode 100644 index 0000000..69f2101 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h new file mode 100644 index 0000000..b51809c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactionType.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..c1445fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..7acfeb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..a7d682f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..d388b85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcallProcessID.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..d69a24c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..73f9da7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..eb3d6d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..63dbb73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..044706c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..919f11c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..2b0400b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..f26977c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..f3df4b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..5cc6cc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..c40874d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..94481fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..2b54af3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..f35e61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..8dc0c58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..627ebaa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICcontrolStatus.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..4c892e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..f323980 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c new file mode 100644 index 0000000..be2a72a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h new file mode 100644 index 0000000..8a8173d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..31e2f7f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..0d1448d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..096f61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..97ce63e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..74782d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..30d8c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationSN.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c new file mode 100644 index 0000000..81beabe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ae14d7a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICindicationType.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dfe67b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h new file mode 100644 index 0000000..24636d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..a2c83c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7db0a4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..8ec4465 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..f9353cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..fe21337 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..ec27597 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..61334b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..71e1e62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..04b54c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..1560efb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..4ff78c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..f25c782 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..70a20c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9b93735 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..39475fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..cd5b0f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..f0a7a43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..fb43397 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d6ed804 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..836322b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..64e2e45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..1008fb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..dae24c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..c622986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..18f61c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..159b5e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..6bd2096 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RICtimeToWait.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RT-Period-IE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = { + { 0, 4, "ms10" }, + { 1, 4, "ms20" }, + { 2, 4, "ms32" }, + { 3, 4, "ms40" }, + { 4, 4, "ms60" }, + { 5, 4, "ms64" }, + { 6, 4, "ms70" }, + { 7, 4, "ms80" }, + { 8, 5, "ms128" }, + { 9, 5, "ms160" }, + { 10, 5, "ms256" }, + { 11, 5, "ms320" }, + { 12, 5, "ms512" }, + { 13, 5, "ms640" }, + { 14, 6, "ms1024" }, + { 15, 6, "ms1280" }, + { 16, 6, "ms2048" }, + { 17, 6, "ms2560" }, + { 18, 6, "ms5120" }, + { 19, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = { + 0, /* ms10(0) */ + 14, /* ms1024(14) */ + 19, /* ms10240(19) */ + 8, /* ms128(8) */ + 15, /* ms1280(15) */ + 9, /* ms160(9) */ + 1, /* ms20(1) */ + 16, /* ms2048(16) */ + 10, /* ms256(10) */ + 17, /* ms2560(17) */ + 2, /* ms32(2) */ + 11, /* ms320(11) */ + 3, /* ms40(3) */ + 12, /* ms512(12) */ + 18, /* ms5120(18) */ + 4, /* ms60(4) */ + 5, /* ms64(5) */ + 13, /* ms640(13) */ + 6, /* ms70(6) */ + 7 /* ms80(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = { + asn_MAP_RT_Period_IE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RT_Period_IE_enum2value_1, /* N => "tag"; sorted by N */ + 20, /* Number of elements in the maps */ + 21, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = { + "RT-Period-IE", + "RT-Period-IE", + &asn_OP_NativeEnumerated, + asn_DEF_RT_Period_IE_tags_1, + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + asn_DEF_RT_Period_IE_tags_1, /* Same as above */ + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + { &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RT_Period_IE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/RT-Period-IE.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RT_Period_IE_H_ +#define _RT_Period_IE_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RT_Period_IE { + RT_Period_IE_ms10 = 0, + RT_Period_IE_ms20 = 1, + RT_Period_IE_ms32 = 2, + RT_Period_IE_ms40 = 3, + RT_Period_IE_ms60 = 4, + RT_Period_IE_ms64 = 5, + RT_Period_IE_ms70 = 6, + RT_Period_IE_ms80 = 7, + RT_Period_IE_ms128 = 8, + RT_Period_IE_ms160 = 9, + RT_Period_IE_ms256 = 10, + RT_Period_IE_ms320 = 11, + RT_Period_IE_ms512 = 12, + RT_Period_IE_ms640 = 13, + RT_Period_IE_ms1024 = 14, + RT_Period_IE_ms1280 = 15, + RT_Period_IE_ms2048 = 16, + RT_Period_IE_ms2560 = 17, + RT_Period_IE_ms5120 = 18, + RT_Period_IE_ms10240 = 19 + /* + * Enumeration is extensible + */ +} e_RT_Period_IE; + +/* RT-Period-IE */ +typedef long RT_Period_IE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RT_Period_IE; +extern const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1; +asn_struct_free_f RT_Period_IE_free; +asn_struct_print_f RT_Period_IE_print; +asn_constr_check_f RT_Period_IE_constraint; +ber_type_decoder_f RT_Period_IE_decode_ber; +der_type_encoder_f RT_Period_IE_encode_der; +xer_type_decoder_f RT_Period_IE_decode_xer; +xer_type_encoder_f RT_Period_IE_encode_xer; +oer_type_decoder_f RT_Period_IE_decode_oer; +oer_type_encoder_f RT_Period_IE_encode_oer; +per_type_decoder_f RT_Period_IE_decode_uper; +per_type_encoder_f RT_Period_IE_encode_uper; +per_type_decoder_f RT_Period_IE_decode_aper; +per_type_encoder_f RT_Period_IE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RT_Period_IE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c new file mode 100644 index 0000000..3f96a6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h new file mode 100644 index 0000000..e7f6ec8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c new file mode 100644 index 0000000..c8afcc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h new file mode 100644 index 0000000..08a576e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SNSSAI.h" + +static int +memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = { + { 0, 0 }, + 1 /* (SIZE(1..1)) */}; +static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SNSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2, memb_sST_constraint_1 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct SNSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3, memb_sD_constraint_1 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_SNSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SNSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1 = { + sizeof(struct SNSSAI), + offsetof(struct SNSSAI, _asn_ctx), + asn_MAP_SNSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SNSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNSSAI = { + "SNSSAI", + "SNSSAI", + &asn_OP_SEQUENCE, + asn_DEF_SNSSAI_tags_1, + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + asn_DEF_SNSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNSSAI_1, + 2, /* Elements count */ + &asn_SPC_SNSSAI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SNSSAI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SNSSAI_H_ +#define _SNSSAI_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNSSAI */ +typedef struct SNSSAI { + OCTET_STRING_t sST; + OCTET_STRING_t *sD; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_SNSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNSSAI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ServedPlmnPerCellListItem.h" + +asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-EPC" + }, +}; +static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = { + sizeof(struct ServedPlmnPerCellListItem), + offsetof(struct ServedPlmnPerCellListItem, _asn_ctx), + asn_MAP_ServedPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ServedPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = { + "ServedPlmnPerCellListItem", + "ServedPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_ServedPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_ServedPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_ServedPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ServedPlmnPerCellListItem.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ServedPlmnPerCellListItem_H_ +#define _ServedPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_DU_PM_Container; +struct EPC_DU_PM_Container; + +/* ServedPlmnPerCellListItem */ +typedef struct ServedPlmnPerCellListItem { + PLMN_Identity_t pLMN_Identity; + struct FGC_DU_PM_Container *du_PM_5GC; /* OPTIONAL */ + struct EPC_DU_PM_Container *du_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-DU-PM-Container.h" +#include "EPC-DU-PM-Container.h" + +#endif /* _ServedPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SlicePerPlmnPerCellListItem.h" + +static int +memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = { + sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList), + offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = { + "fQIPERSlicesPerPlmnPerCellList", + "fQIPERSlicesPerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnPerCellList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnPerCellList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = { + sizeof(struct SlicePerPlmnPerCellListItem), + offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx), + asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem = { + "SlicePerPlmnPerCellListItem", + "SlicePerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SlicePerPlmnPerCellListItem_1, + 2, /* Elements count */ + &asn_SPC_SlicePerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SlicePerPlmnPerCellListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SlicePerPlmnPerCellListItem_H_ +#define _SlicePerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnPerCellListItem; + +/* SlicePerPlmnPerCellListItem */ +typedef struct SlicePerPlmnPerCellListItem { + SNSSAI_t sliceID; + struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SlicePerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +#endif /* _SlicePerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SliceToReportListItem.h" + +static int +memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = { + sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList), + offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = { + "fQIPERSlicesPerPlmnList", + "fQIPERSlicesPerPlmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3, memb_fQIPERSlicesPerPlmnList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = { + sizeof(struct SliceToReportListItem), + offsetof(struct SliceToReportListItem, _asn_ctx), + asn_MAP_SliceToReportListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem = { + "SliceToReportListItem", + "SliceToReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_SliceToReportListItem_tags_1, + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + asn_DEF_SliceToReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SliceToReportListItem_1, + 2, /* Elements count */ + &asn_SPC_SliceToReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SliceToReportListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SliceToReportListItem_H_ +#define _SliceToReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnListItem; + +/* SliceToReportListItem */ +typedef struct SliceToReportListItem { + SNSSAI_t sliceID; + struct SliceToReportListItem__fQIPERSlicesPerPlmnList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SliceToReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnListItem.h" + +#endif /* _SliceToReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..55bad07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..fd04d94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c new file mode 100644 index 0000000..c4eec34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h new file mode 100644 index 0000000..6fad8ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TimeToWait.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Timestamp.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Timestamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Timestamp = { + "Timestamp", + "Timestamp", + &asn_OP_OCTET_STRING, + asn_DEF_Timestamp_tags_1, + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + asn_DEF_Timestamp_tags_1, /* Same as above */ + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Timestamp.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Timestamp_H_ +#define _Timestamp_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timestamp */ +typedef OCTET_STRING_t Timestamp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Timestamp; +asn_struct_free_f Timestamp_free; +asn_struct_print_f Timestamp_print; +asn_constr_check_f Timestamp_constraint; +ber_type_decoder_f Timestamp_decode_ber; +der_type_encoder_f Timestamp_encode_der; +xer_type_decoder_f Timestamp_decode_xer; +xer_type_encoder_f Timestamp_encode_xer; +oer_type_decoder_f Timestamp_decode_oer; +oer_type_encoder_f Timestamp_encode_oer; +per_type_decoder_f Timestamp_decode_uper; +per_type_encoder_f Timestamp_encode_uper; +per_type_decoder_f Timestamp_decode_aper; +per_type_encoder_f Timestamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Timestamp_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Trigger-ConditionIE-Item.h" + +asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RT_Period_IE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "report-Period-IE" + }, +}; +static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = { + sizeof(struct Trigger_ConditionIE_Item), + offsetof(struct Trigger_ConditionIE_Item, _asn_ctx), + asn_MAP_Trigger_ConditionIE_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item = { + "Trigger-ConditionIE-Item", + "Trigger-ConditionIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_Trigger_ConditionIE_Item_tags_1, + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + asn_DEF_Trigger_ConditionIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Trigger_ConditionIE_Item_1, + 1, /* Elements count */ + &asn_SPC_Trigger_ConditionIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/Trigger-ConditionIE-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Trigger_ConditionIE_Item_H_ +#define _Trigger_ConditionIE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RT-Period-IE.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trigger-ConditionIE-Item */ +typedef struct Trigger_ConditionIE_Item { + RT_Period_IE_t report_Period_IE; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Trigger_ConditionIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Trigger_ConditionIE_Item_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..45dcd5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..734cefa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TriggeringMessage.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c new file mode 100644 index 0000000..76beba5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h new file mode 100644 index 0000000..9451b1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/TypeOfError.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "UE-Report-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_Report_Type_value2enum_1[] = { + { 0, 17, "oDU-Report-Per-UE" }, + { 1, 20, "oCU-CP-Report-Per-UE" }, + { 2, 20, "oCU-UP-Report-Per-UE" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_Report_Type_enum2value_1[] = { + 1, /* oCU-CP-Report-Per-UE(1) */ + 2, /* oCU-UP-Report-Per-UE(2) */ + 0 /* oDU-Report-Per-UE(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1 = { + asn_MAP_UE_Report_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_Report_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_Report_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_Report_Type = { + "UE-Report-Type", + "UE-Report-Type", + &asn_OP_NativeEnumerated, + asn_DEF_UE_Report_Type_tags_1, + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + asn_DEF_UE_Report_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_UE_Report_Type_constr_1, &asn_PER_type_UE_Report_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_Report_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UE-Report-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _UE_Report_Type_H_ +#define _UE_Report_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_Report_Type { + UE_Report_Type_oDU_Report_Per_UE = 0, + UE_Report_Type_oCU_CP_Report_Per_UE = 1, + UE_Report_Type_oCU_UP_Report_Per_UE = 2 + /* + * Enumeration is extensible + */ +} e_UE_Report_Type; + +/* UE-Report-Type */ +typedef long UE_Report_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_Report_Type; +extern const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1; +asn_struct_free_f UE_Report_Type_free; +asn_struct_print_f UE_Report_Type_print; +asn_constr_check_f UE_Report_Type_constraint; +ber_type_decoder_f UE_Report_Type_decode_ber; +der_type_encoder_f UE_Report_Type_encode_der; +xer_type_decoder_f UE_Report_Type_decode_xer; +xer_type_encoder_f UE_Report_Type_encode_xer; +oer_type_decoder_f UE_Report_Type_decode_oer; +oer_type_encoder_f UE_Report_Type_encode_oer; +per_type_decoder_f UE_Report_Type_decode_uper; +per_type_encoder_f UE_Report_Type_encode_uper; +per_type_decoder_f UE_Report_Type_decode_aper; +per_type_encoder_f UE_Report_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_Report_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..327134e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,349 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..7762209 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h new file mode 100644 index 0000000..af5a0fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_constant.h @@ -0,0 +1,30 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#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) +#define maxofRANparamters (65536) +#define maxUeReport (32) +#define maxCellingNB (16384) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk new file mode 100644 index 0000000..0109476 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + converter-example.c\ + pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c new file mode 100644 index 0000000..0d559a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/pdu_collection.c @@ -0,0 +1,25 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_EventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_ActionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_RANfunction_Description; +extern struct asn_TYPE_descriptor_s asn_DEF_RANcallProcess_ID_string; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2SM-KPM-IEs in /home/rshacham/e2sm-kpm-v01.02.asn */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition, + &asn_DEF_E2SM_KPM_ActionDefinition, + &asn_DEF_E2SM_KPM_IndicationHeader, + &asn_DEF_E2SM_KPM_IndicationMessage, + &asn_DEF_E2SM_KPM_RANfunction_Description, + &asn_DEF_RANcallProcess_ID_string, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt new file mode 100644 index 0000000..fe21e5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/CMakeLists.txt @@ -0,0 +1,80 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + + + +project(e2sim) + +set (E2SIM_ROOT ./) + + +include_directories("${E2SIM_ROOT}") +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + + +#set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG ON) + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsgf +find_package( Threads REQUIRED ) + +#---------------------------------------------- +file(GLOB E2SIM_SOURCES + "${E2SIM_ROOT}/e2sim.cpp" + "${E2SIM_ROOT}/encode_kpm.cpp" + "${E2SIM_ROOT}/kpm_callbacks.cpp" + "${E2SIM_ROOT}/encode_e2apv1.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + + ) + +#add_executable(e2sim ${E2SIM_SOURCES}) +add_executable(kpm_callbacks ${E2SIM_SOURCES}) +#target_link_libraries( e2sim ${SCTP_STD_LIB} ) +target_link_libraries( kpm_callbacks ${SCTP_STD_LIB} ) +#target_link_libraries( e2sim Threads::Threads ) +target_link_libraries( kpm_callbacks Threads::Threads ) + +#---------------------------------------------- +#file(GLOB RICSIM_SOURCES + +# "${E2SIM_ROOT}/ricsim.cpp" +# "${E2SIM_ROOT}/encode_e2apv1.cpp" +# "${E2SIM_ROOT}/src/DEF/*.cpp" +# "${E2SIM_ROOT}/src/SCTP/*.cpp" +# "${E2SIM_ROOT}/src/E2APr/*.c" +# "${E2SIM_ROOT}/src/E2APr/*.cpp" +# "${E2SIM_ROOT}/ASN1c/*.c" +# ) +#add_executable(ricsim ${RICSIM_SOURCES}) +#target_link_libraries( ricsim ${SCTP_STD_LIB} ) + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/Dockerfile new file mode 100644 index 0000000..348fe48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/Dockerfile @@ -0,0 +1,55 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +FROM ubuntu:16.04 + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + +# Copy E2Sim sources into the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim +CMD ./build/e2sim 10.107.70.168 36422 \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/README.md b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/README.md new file mode 100644 index 0000000..4277232 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/README.md @@ -0,0 +1,62 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +This is an update to E2 Simulator, based on E2AP v1. + + + +# INSTALLATION (tested on Ubuntu 16.04) + 1. Install dependencies + $ sudo apt-get update + $ sudo apt-get install -y + build-essential + git + cmake + libsctp-dev + lksctp-tools + autoconf + automake + libtool + bison + flex + libboost-all-dev + $ sudo apt-get clean + + 2. SET ENVIRONMENT VARIABLE + Add this line to `~/.bashrc` + export E2SIM_DIR= + + 3. Build the official e2sim + $ ./build_e2sim + +# USAGE + $ $E2SIM_DIR/build/e2sim [SERVER IP] [PORT] + + By default, SERVER IP = 127.0.0.1, PORT = 36421 + The RIC (i.e., E2 Manager) will need to setup X2 or E2 connection to e2sim on + this SERVER IP and PORT + +# DOCKER + * Build docker image: run this command from $E2SIM_DIR + $ sudo docker build -f docker/Dockerfile -t [DOCKER_IMAGE]:[TAG] . + + * Example how to run docker container + $ sudo docker run --rm --net host -it [DOCKER_IMAGE]:[TAG] sh -c "./build/e2sim [SERVER IP] [PORT]" + ex: sudo docker run --rm --net host -it e2sim:1.0.0 sh -c "./build/e2sim 127.0.0.1 36422" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/build_e2sim b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/build_e2sim new file mode 100644 index 0000000..80a53c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/build_e2sim @@ -0,0 +1,86 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +E2SIM_VERSION='1.4.0' +export E2SIM_DIR=$PWD +source $E2SIM_DIR/tools/build_helper.bash +DOCKER_IMAGE='e2sim' + +print_help() { + echo " + This program installs E2 Simulator + You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14 + The program is run by default with no option + + USAGE: + ./build_e2sim [OPTIONS] + + OPTIONS: + --clean + Erase all files to make a rebuild from start + --docker + Build docker image + -h + Print this help + " +} + +function main(){ + case "$1" in + --clean) + echo_info "Will clean all previously producted files under build/" + rm -rf $E2SIM_DIR/build + echo_success "Clean Done" + exit + ;; + + --docker) + echo "Will build docker image ${DOCKER_IMAGE}:${E2SIM_VERSION}" + sudo docker build -f docker/Dockerfile -t $DOCKER_IMAGE:$E2SIM_VERSION . + exit + ;; + + "") + ;; + + -h) + print_help + exit 1;; + + *) + echo_error "Unknown option $1" + exit + esac + + BUILD_DIR=$E2SIM_DIR/build + mkdir -p $BUILD_DIR + + echo_info "Will build e2sim" + cd $BUILD_DIR + rm -rf CMakeCache.txt + cmake .. + make -j`nproc` + + echo_success "e2sim compiled" +} + +main "$@" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt new file mode 100644 index 0000000..2c0890f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/cellMeasReport.txt @@ -0,0 +1,40 @@ +{ + "cellMeasReport": { + "du-id": 1000, + "cellMeasReportList": [ + + { + "nrCellIdentity": 0, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 10, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + }, + + { + "nrCellIdentity": 1, + "pdcpByteMeasReport": { + "measTimestampPdcpBytes": "2020-04-09 14:33:33,559", + "measPeriodPdcpBytes": 0, + "pdcpBytesDl": 0, + "pdcpBytesUl": 0 + }, + "prbMeasReport": { + "measTimestampPrb": "2020-04-09 14:33:33,559", + "measPeriodPrb": 0, + "availPrbDl": 0, + "availPrbUl": 0 + } + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile new file mode 100644 index 0000000..1233a12 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/Dockerfile @@ -0,0 +1,54 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +FROM ubuntu:16.04 + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + tcpdump \ + net-tools \ + nmap \ + && apt-get clean + +# Copy E2Sim sources into the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml new file mode 100644 index 0000000..5df0816 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/container-tag.yaml @@ -0,0 +1,2 @@ +--- +tag: 0.1.1 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old new file mode 100644 index 0000000..17aa6bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/DockerFile_old @@ -0,0 +1,53 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build: $ sudo docker build -f docker/Dockerfile -t e2sim . + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + && apt-get clean + +# Install E2Sim +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c +RUN ./build_e2sim --clean +RUN ./build_e2sim + +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile new file mode 100644 index 0000000..6cbfbf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile @@ -0,0 +1,42 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +FROM e2sim_base + +# ------------ COPY E2SIM codes ------------------ +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} + +# ensure an empty rt is there if none is mounted at spinup +COPY docker/empty.rt /usr/local/route/local.rt + +#------------- Build E2SIM ----------------------- +RUN ./build_e2sim --clean +RUN ./build_e2sim + +#-------------- Configure rmr ------------------------- +ENV RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt + +ENV RMR_RTG_SVC=localhost:9990 +ENV E2TERM_RMR_RCV_PORT=48886 +ENV DEMO_SENDER_PTO=1 +ENV DEMO_MAX_PAYLOAD_BYTES=240 + +# --------------- Run E2Termination --------------------- +CMD ./build/e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base new file mode 100644 index 0000000..7ac932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/Dockerfile_base @@ -0,0 +1,60 @@ +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Docker file to build container for E2 Simulator, for which it can be called +# to run both the E2 Agent and E2 Termination. +# Note: run docker comamnds from root directory of e2sim, e.g., $E2SIM_DIR +# +# build with 2 steps +# $ sudo docker build -f docker/Dockerfile_base -t e2sim_base . +# $ sudo docker build -f docker/Dockerfile -t e2sim . +# +# run e2 termination +# $ sudo docker run --rm --net host -it e2sim sh -c "./build/e2sim 127.0.0.2" + +FROM ubuntu:16.04 + + +# location in the container +ENV E2SIM_DIR /home/e2sim + +# Install necessary packages +RUN apt-get update \ + && apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex + +# For rmr +RUN apt-get install -y bash vim ksh iputils-ping +RUN apt-get clean + +# Copy E2Sim to the container +COPY ./ ${E2SIM_DIR} +WORKDIR ${E2SIM_DIR} +RUN ./docker/install_asn1c + +#-------------INSTALL rmr ------------------------ +RUN ./docker/install_rmr diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr new file mode 100644 index 0000000..ff0a685 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/configure_rmr @@ -0,0 +1,27 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +export RMR_SEED_RT=/usr/local/route/local.rt +#export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +export RMR_RTG_SVC=localhost:9990 +#export DUMMY_SENDER_RMR_RCV_PORT=48086 +export E2TERM_RMR_RCV_PORT=48886 +export DEMO_SENDER_PTO=1 +export DEMO_MAX_PAYLOAD_BYTES=240 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt new file mode 100644 index 0000000..0063bb9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/empty.rt @@ -0,0 +1,5 @@ +# an empty route table to put into an image so there is some file there +# if on image start nothing is mounted onto /usr/local/route + +newrt|start +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c new file mode 100644 index 0000000..daf4bfe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_asn1c @@ -0,0 +1,29 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +echo "Will install asn1c" +cd tools +rm -rf asn1c +git clone https://gitlab.eurecom.fr/oai/asn1c.git +cd asn1c +git checkout 0a7524184f16e7093990a31d8d4db487a16e5782 +autoreconf -iv +./configure +make +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr new file mode 100644 index 0000000..522df48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/install_rmr @@ -0,0 +1,32 @@ +#!/bin/bash +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# pull rmr to $E2SIM_DIR/ and checkout the 'stable' demo commit, +# then build and install in /usr/local + +echo "Will install rmr" +rm -rf rmr +git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr +date; ls -al /usr/local/lib +cd rmr +git checkout 6735f136906ce2 +mkdir .build +cd .build +cmake .. +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt new file mode 100644 index 0000000..84ea983 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/docker/old/local.rt @@ -0,0 +1,9 @@ +newrt|start +#RMR_RCV_PORT of the receiver is 6560 +rte|0|localhost:6560 + +# this is needed so that receiver acks can be sent via rmr_rts_msg() calls +# here e2 agent is the name of the machine +# is the RMR_RCV_PORT of the sender +rte|89|e2agent:48086 +newrt|end diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.cpp new file mode 100644 index 0000000..145556e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.cpp @@ -0,0 +1,185 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "e2sim.hpp" +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "encode_e2apv1.hpp" + +using namespace std; + +int client_fd = 0; + +void E2Sim::register_subscription_callback(long func_id, SubscriptionCallback cb) { + printf("%%%%about to register callback for subscription for func_id %d\n", func_id); + subscription_callbacks[func_id] = cb; + +} + +SubscriptionCallback E2Sim::get_subscription_callback(long func_id) { + printf("%%%%we are getting the subscription callback for func id %d\n", func_id); + SubscriptionCallback cb = subscription_callbacks[func_id]; + return cb; + +} + +void E2Sim::register_e2sm(long func_id, OCTET_STRING_t *ostr) { + + //Error conditions: + //If we already have an entry for func_id + + printf("%%%%about to register e2sm func desc for %d\n", func_id); + + ran_functions_registered[func_id] = ostr; + +} + + +void E2Sim::encode_and_send_sctp_data(E2AP_PDU_t* pdu) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + + +void E2Sim::wait_for_sctp_data() +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf, false, this); + } +} + + +int E2Sim::run_loop(int argc, char* argv[]){ + + printf("Start E2 Agent (E2 Simulator\n"); + + ifstream simfile; + string line; + + simfile.open("simulation.txt", ios::in); + + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + } + + simfile.close(); + + } + + bool xmlenc = false; + + options_t ops = read_input_options(argc, argv); + + printf("After reading input options\n"); + + //E2 Agent will automatically restart upon sctp disconnection + // int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + + client_fd = sctp_start_client(ops.server_ip, ops.server_port); + E2AP_PDU_t* pdu_setup = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + printf("After starting client\n"); + printf("client_fd value is %d\n", client_fd); + + std::vector all_funcs; + + //Loop through RAN function definitions that are registered + + for (std::pair elem : ran_functions_registered) { + printf("looping through ran func\n"); + ran_func_info next_func; + + next_func.ranFunctionId = elem.first; + next_func.ranFunctionDesc = elem.second; + next_func.ranFunctionRev = (long)2; + all_funcs.push_back(next_func); + } + + printf("about to call setup request encode\n"); + + generate_e2apv1_setup_request_parameterized(pdu_setup, all_funcs); + + printf("After generating e2setup req\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_setup); + + printf("After XER Encoding\n"); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, pdu_setup, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_setup, buffer, buffer_size); + + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(client_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-REQUEST to peer"); + } + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf, xmlenc, this); + if (xmlenc) xmlenc = false; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.hpp new file mode 100644 index 0000000..a8cb564 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/e2sim.hpp @@ -0,0 +1,37 @@ +#ifndef E2SIM_HPP +#define E2SIM_HPP + +#include + +extern "C" { +#include "E2AP-PDU.h" +#include "OCTET_STRING.h" +} + +typedef void (*SubscriptionCallback)(E2AP_PDU_t*); + +class E2Sim; +class E2Sim { + +private: + + std::unordered_map ran_functions_registered; + std::unordered_map subscription_callbacks; + + void wait_for_sctp_data(); + +public: + + SubscriptionCallback get_subscription_callback(long func_id); + + void register_e2sm(long func_id, OCTET_STRING_t* ostr); + + void register_subscription_callback(long func_id, SubscriptionCallback cb); + + void encode_and_send_sctp_data(E2AP_PDU_t* pdu); + + int run_loop(int argc, char* argv[]); + +}; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp new file mode 100644 index 0000000..11fd06d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.cpp @@ -0,0 +1,1150 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + +#include +#include + + +#include "encode_e2apv1.hpp" + +extern "C" { +#include "E2SM-KPM-RANfunction-Description.h" + +#include "e2ap_asn1c_codec.h" +#include "GlobalE2node-ID.h" +#include "GlobalE2node-gNB-ID.h" +#include "GlobalgNB-ID.h" +#include "OCTET_STRING.h" +#include "asn_application.h" +#include "GNB-ID-Choice.h" +#include "ProtocolIE-Field.h" +#include "E2setupRequest.h" +#include "RICaction-ToBeSetup-Item.h" +#include "RICactions-ToBeSetup-List.h" +#include "RICeventTriggerDefinition.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "ProtocolIE-SingleContainer.h" +#include "RANfunctions-List.h" +#include "RICindication.h" +#include "RICsubsequentActionType.h" +#include "RICsubsequentAction.h" +#include "RICtimeToWait.h" + +} + +void generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu) { + + char* ran_function_op_type = getenv("RAN_FUNCTION_OP_TYPE"); + LOG_D("Ran funciton : %s", ran_function_op_type); + ProtocolIE_ID_t prID; + if (ran_function_op_type != NULL) + { + if (strcmp(ran_function_op_type, "ADD") == 0) + { + prID = ProtocolIE_ID_id_RANfunctionsAdded; + } + else if (strcmp(ran_function_op_type, "DELETE")) + { + prID = ProtocolIE_ID_id_RANfunctionsDeleted; + } + } + else + { + prID = ProtocolIE_ID_id_RANfunctionsModified; + } + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = 1; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded); + ranfuncdesc_str->size = er.encoded; + memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded); + + + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)3; + + + RICserviceUpdate_IEs_t *e2serviceUpdateList = (RICserviceUpdate_IEs_t *)calloc(1, sizeof(RICserviceUpdate_IEs_t)); + e2serviceUpdateList->id = prID; /// is it correct ??? + e2serviceUpdateList->criticality = Criticality_reject; + e2serviceUpdateList->value.present = RICserviceUpdate_IEs__value_PR_RANfunctions_List; + ASN_SEQUENCE_ADD(&e2serviceUpdateList->value.choice.RANfunctions_List.list, itemIes); + + RICserviceUpdate_t *ricServiceUpdate = (RICserviceUpdate_t *)calloc(1, sizeof(RICserviceUpdate_t)); + ASN_SEQUENCE_ADD(&ricServiceUpdate->protocolIEs.list, e2serviceUpdateList); + + InitiatingMessage_t *initiatingMessage = (InitiatingMessage_t *)calloc(1, sizeof(InitiatingMessage_t)); + initiatingMessage->criticality = Criticality_reject; + initiatingMessage->procedureCode = ProcedureCode_id_RICserviceUpdate; + initiatingMessage->value.present = InitiatingMessage__value_PR_RICserviceUpdate; + initiatingMessage->value.choice.RICserviceUpdate = *ricServiceUpdate; + + E2AP_PDU_PR pres6 = E2AP_PDU_PR_initiatingMessage; + e2ap_pdu->present = pres6; + e2ap_pdu->choice.initiatingMessage = initiatingMessage; +} + +long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { + + RICsubscriptionRequest_t orig_req = + e2ap_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long func_id; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) { + func_id = next_ie->value.choice.RANfunctionID; + } + + } + + return func_id; + +} + +void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, std::vector all_funcs) { + // long ranFunctionId, uint8_t *ranFuncDescEncoded, int ranFuncLength) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + + for (int i = 0; i < all_funcs.size(); i++) { + + ran_func_info nextRanFunc = all_funcs.at(i); + long nextRanFuncId = nextRanFunc.ranFunctionId; + OCTET_STRING_t *nextRanFuncDesc = nextRanFunc.ranFunctionDesc; + long nextRanFuncRev = nextRanFunc.ranFunctionRev; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = nextRanFuncId; + + int ranFuncLength = strlen((char*)nextRanFuncDesc); + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *nextRanFuncDesc; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = nextRanFuncRev; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + } + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + +void generate_e2apv1_setup_request(E2AP_PDU_t *e2ap_pdu) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = 1; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded); + ranfuncdesc_str->size = er.encoded; + memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded); + + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + + +void generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) { + + E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t)); + ricid_bstring->buf = buf; + ricid_bstring->size = 4; + ricid_bstring->bits_unused = 0; + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmn->buf = buf2; + plmn->size = 5; + + GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t)); + globalricid->pLMN_Identity = *plmn; + globalricid->ric_ID = *ricid_bstring; + + E2setupResponseIEs__value_PR pres1; + pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID; + + resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID; + resp_ies1->criticality = 0; + resp_ies1->value.present = pres1; + resp_ies1->value.choice.GlobalRIC_ID = *globalricid; + + E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t)); + int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1); + + + SuccessfulOutcome__value_PR pres; + pres = SuccessfulOutcome__value_PR_E2setupResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = 1; + successoutcome->criticality = 0; + successoutcome->value.present = pres; + successoutcome->value.choice.E2setupResponse = *e2setupresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + +} + + +void generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) { + + fprintf(stderr, "in sub 1\n"); + RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 2\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid); + fprintf(stderr, "in sub 3\n"); + auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 4\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid); + + fprintf(stderr, "in generate sub\n"); + uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers"; + fprintf(stderr, "in gen sub 1\n"); + OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + triggerdef->buf = (uint8_t *)calloc(1,20); + triggerdef->size = 20; + memcpy(triggerdef->buf, buf2, triggerdef->size); + + + fprintf(stderr, "sub1\n"); + ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item; + + RICaction_ToBeSetup_ItemIEs__value_PR pres6; + pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + + printf("sub2\n"); + + uint8_t *buf5 = (uint8_t *)"ActionDef"; + + OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + actdef->buf = (uint8_t *)calloc(1,9); + actdef->size = 9; + memcpy(triggerdef->buf, buf5, 9); + + auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t)); + ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa); + + sa->ricTimeToWait = RICtimeToWait_w500ms; + sa->ricSubsequentActionType = RICsubsequentActionType_continue; + + printf("sub3\n"); + + RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item_ies->id = proto_id; + action_item_ies->criticality = 0; + + action_item_ies->value.present = pres6; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa; + + + printf("sub5\n"); + + + RICsubscriptionRequest_IEs__value_PR pres3; + printf("sub6.1\n"); + pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; + ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails; + printf("sub6.2\n"); + + ricsubrid->criticality = 0; + ricsubrid->value.present = pres3; + printf("sub6.3\n"); + + ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef; + printf("sub6.4\n"); + + ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies); + + printf("sub7\n"); + + + ricreqid->id = ProtocolIE_ID_id_RICrequestID; + ricreqid->criticality = 0; + ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID; + ricreqid->value.choice.RICrequestID.ricRequestorID = 22; + ricreqid->value.choice.RICrequestID.ricInstanceID = 6; + + RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t)); + + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid); + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid); + + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = ProcedureCode_id_RICsubscription; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.RICsubscriptionRequest = *ricsubreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + +} + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], + long reqActionIdsRejected[], int accept_size, int reject_size, + long reqRequestorId, long reqInstanceId) { + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + + int numAccept = accept_size; + int numReject = reject_size; + + + + for (int i=0; i < numAccept ; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsAccepted[i]; + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + if (numReject > 0) { + + RICsubscriptionResponse_IEs_t *ricactionrejected = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + ricactionrejected->criticality = 0; + ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + RICaction_NotAdmitted_List_t* rejectlist = + (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t)); + ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist; + + for (int i=0; i < numReject; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsRejected[i]; + + RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t)); + noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item; + noadmitie->criticality = 0; + noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item; + noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected); + } + } + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + +} + +void generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) { + + //Gather details of the request + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long responseRequestorId; + long responseInstanceId; + long responseActionId; + + std::vector actionIds; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + responseRequestorId = requestorId; + responseInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + for (int i=0; i < actionCount; i++) { + //RICaction_ToBeSetup_Item_t + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + fprintf(stderr, "Next Action ID %ld\n", actionId); + responseActionId = actionId; + actionIds.push_back(responseActionId); + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", responseRequestorId); + fprintf(stderr, "instanceId %d\n", responseInstanceId); + + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i)); + + } + + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = actionIds.at(i); + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + +} + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, + long requestorId, + long instanceId, + long ranFunctionId, + long actionId, + long seqNum, + uint8_t *ind_header_buf, + int header_length, + uint8_t *ind_message_buf, + int message_length) { + + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId; + ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = ranFunctionId; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = actionId; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = seqNum; + + //Indication type is REPORT + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + + hdr_str->buf = (uint8_t*)calloc(1,header_length); + hdr_str->size = header_length; + memcpy(hdr_str->buf, ind_header_buf, header_length); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = header_length; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + + + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = message_length; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *cpid_buf = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + + printf("5.1\n"); + + int cpid_buf_len = strlen((char*)cpid_buf); + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len); + ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len; + + memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len); + + printf("5.2\n"); + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + printf("5.3\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + + printf("5.35\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + + printf("5.36\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + printf("5.4\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + + printf("5.5\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + // ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + +} + +void generate_e2apv1_indication_request(E2AP_PDU *e2ap_pdu) { + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = 25; + ricind_ies->value.choice.RICrequestID.ricInstanceID = 3; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = 70; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = 80; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = 45; + + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + hdr_str->buf = (uint8_t*)calloc(1,12); + hdr_str->size = 12; + memcpy(hdr_str->buf, buf2, 12); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,12); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = 12; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, buf2, 12); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + + + + E2SM_KPM_RANfunction_Description_t *e2sm_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + + encode_kpm_function_description(e2sm_desc); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + e2sm_desc, e2smbuffer, e2smbuffer_size); + + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *msg_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + msg_str->buf = (uint8_t*)calloc(1,er.encoded); + msg_str->size = er.encoded; + memcpy(msg_str->buf, e2smbuffer, er.encoded); + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = er.encoded; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, e2smbuffer, er.encoded); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *buf4 = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + cpid_str.buf = buf4; + cpid_str.size = 4; + + + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID = cpid_str; + + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + /* + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + */ + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); +} + + +void generate_e2apv1_indication_response(E2AP_PDU *e2ap_pdu) { + + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp new file mode 100644 index 0000000..c072c65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_e2apv1.hpp @@ -0,0 +1,75 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ENCODE_E2APV1_HPP +#define ENCODE_E2APV1_HPP +/* +#include +#include +#include +*/ + +//#include +//#include +//#include +#include + +//#include "e2sim_sctp.hpp" +//#include "e2ap_message_handler.hpp" +#include "encode_kpm.hpp" + + +extern "C" { + //#include "e2sim_defs.h" +#include "E2AP-PDU.h" + + +} + +struct ran_func_info { + long ranFunctionId; + OCTET_STRING_t *ranFunctionDesc; + long ranFunctionRev; +}; + +long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu); + +void buildSubsReq(E2AP_PDU_t *pdu); + +void generate_e2apv1_setup_request(E2AP_PDU_t *setup_req_pdu); + +//void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, long ranFuncId, uint8_t* ranFuncDesc, int ranFuncLength); +void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, std::vector all_funcs); + +void generate_e2apv1_setup_response(E2AP_PDU_t *setup_resp_pdu); + +void generate_e2apv1_subscription_request(E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_subscription_response(E2AP_PDU_t *sub_resp_pdu, E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_indication_request(E2AP_PDU_t *ind_req_pdu); + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId); + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length); + +void generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp new file mode 100644 index 0000000..d518a36 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.cpp @@ -0,0 +1,1853 @@ +#include +#include +#include +#include +#include + +#include "encode_kpm.hpp" + +using namespace std; + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc) { + + printf("kpm0\n"); + + uint8_t *buf = (uint8_t*)"ORAN-E2SM-KPM"; + uint8_t *buf2 = (uint8_t*)"KPM monitor"; + uint8_t *buf3 = (uint8_t*)"OID123"; + + OCTET_STRING_t *sname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sname->buf = (uint8_t*)calloc(1,13); + + memcpy(sname->buf, buf, 13); + sname->size = strlen((char*)buf); + ranfunc_desc->ranFunction_Name.ranFunction_ShortName = *sname; + + long inst = 1; + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); + + // ranfunc_desc->ranFunction_Name.ranFunction_Description = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.buf = (uint8_t*)calloc(1,strlen((char*)buf2)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_Description.buf, buf2, strlen((char*)buf2)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.size = strlen((char*)buf2); + ranfunc_desc->ranFunction_Name.ranFunction_Instance = &inst; + + printf("kpm0.9\n"); + + // ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t*)calloc(1,strlen((char*)buf3)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf, buf3, strlen((char*)buf3)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char*)buf3); + + printf("kpm2\n"); + + + RIC_EventTriggerStyle_List_t *trigger_style = + (RIC_EventTriggerStyle_List_t*)calloc(1, sizeof(RIC_EventTriggerStyle_List_t)); + trigger_style->ric_EventTriggerStyle_Type = 1; + uint8_t *buf4 = (uint8_t*)"Periodic report"; + // trigger_style->ric_EventTriggerStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + trigger_style->ric_EventTriggerStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf4)); + memcpy(trigger_style->ric_EventTriggerStyle_Name.buf, buf4, strlen((char*)buf4)); + trigger_style->ric_EventTriggerStyle_Name.size = strlen((char*)buf4); + trigger_style->ric_EventTriggerFormat_Type = 5; + + printf("kpm3\n"); + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List)); + + int ret = ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List->list , trigger_style); + printf("ret is %d\n", ret); + + RIC_ReportStyle_List_t *report_style1 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style1->ric_ReportStyle_Type = 1; + + uint8_t *buf5 = (uint8_t*)"O-DU Measurement Container for the 5GC connected deployment"; + + printf("kpm4\n"); + + // report_style1->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style1->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf5)); + memcpy(report_style1->ric_ReportStyle_Name.buf, buf5, strlen((char*)buf5)); + report_style1->ric_ReportStyle_Name.size = strlen((char*)buf5); + report_style1->ric_IndicationHeaderFormat_Type = 1; + report_style1->ric_IndicationMessageFormat_Type = 1; + + printf("kpm5\n"); + + RIC_ReportStyle_List_t *report_style2 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style2->ric_ReportStyle_Type = 2; + + uint8_t *buf6 = (uint8_t*)"O-DU Measurement Container for the EPC connected deployment"; + + // report_style2->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + + + report_style2->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf6)); + memcpy(report_style2->ric_ReportStyle_Name.buf, buf6, strlen((char*)buf6)); + report_style2->ric_ReportStyle_Name.size = strlen((char*)buf6); + report_style2->ric_IndicationHeaderFormat_Type = 1; + report_style2->ric_IndicationMessageFormat_Type = 1; + + printf("kpm6\n"); + + RIC_ReportStyle_List_t *report_style3 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style3->ric_ReportStyle_Type = 3; + + uint8_t *buf7 = (uint8_t*)"O-CU-CP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style3->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf7)); + memcpy(report_style3->ric_ReportStyle_Name.buf, buf7, strlen((char*)buf7)); + report_style3->ric_ReportStyle_Name.size = strlen((char*)buf7); + report_style3->ric_IndicationHeaderFormat_Type = 1; + report_style3->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style4 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style4->ric_ReportStyle_Type = 4; + + uint8_t *buf8 = (uint8_t*)"O-CU-CP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style4->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf8)); + memcpy(report_style4->ric_ReportStyle_Name.buf, buf8, strlen((char*)buf8)); + report_style4->ric_ReportStyle_Name.size = strlen((char*)buf8); + report_style4->ric_IndicationHeaderFormat_Type = 1; + report_style4->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style5 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style5->ric_ReportStyle_Type = 5; + + uint8_t *buf9 = (uint8_t*)"O-CU-UP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style5->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf9)); + memcpy(report_style5->ric_ReportStyle_Name.buf, buf9, strlen((char*)buf9)); + report_style5->ric_ReportStyle_Name.size = strlen((char*)buf9); + report_style5->ric_IndicationHeaderFormat_Type = 1; + report_style5->ric_IndicationMessageFormat_Type = 1; + + + RIC_ReportStyle_List_t *report_style6 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style6->ric_ReportStyle_Type = 6; + + uint8_t *buf10 = (uint8_t*)"O-CU-UP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style6->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf10)); + memcpy(report_style6->ric_ReportStyle_Name.buf, buf10, strlen((char*)buf10)); + report_style6->ric_ReportStyle_Name.size = strlen((char*)buf10); + report_style6->ric_IndicationHeaderFormat_Type = 1; + report_style6->ric_IndicationMessageFormat_Type = 1; + + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List)); + + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style1); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style2); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style3); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style4); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style5); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style6); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); +} + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_UP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_UP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_UP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_UP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_UP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_UP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + + ue_report_item->c_RNTI = *crnti; + ue_report_item->pDCPBytesDL = bytesdl; + ue_report_item->pDCPBytesUL = bytesul; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_UP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_UP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + int plmnid_size = strlen((char*)plmnid_buf); + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(plmnid_size,1); + plmnidstr->size = plmnid_size; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + + int nrcellid_size = strlen((char*)nrcellid_buf); + nrcellid->buf = (uint8_t*)calloc(1, nrcellid_size); + memcpy(nrcellid->buf, nrcellid_buf, nrcellid_size); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + + int crnti_size = strlen((char*)crnti_buf); + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1, crnti_size); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_buf); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_buf, crnti->size); + + // uint8_t *buf_serving = (uint8_t*)"RSRP10"; + + int serving_buf_len = strlen((char*)serving_buf); + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(serving_buf_len,1); + servingstr->size = serving_buf_len; + memcpy(servingstr->buf, serving_buf, servingstr->size); + + + int neighbor_buf_len = strlen((char*)neighbor_buf); + // uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ts->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->size = neighbor_buf_len; + memcpy(neighborstr->buf, neighbor_buf, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + + +void encode_kpm_odu_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + DU_Usage_Report_CellResourceReportItem_t *report_item = + (DU_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(DU_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + printf("enc3.1\n"); + + DU_Usage_Report_UeResourceReportItem *ue_report_item = + (DU_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(DU_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + long lval1 = 2; + long lval2 = 1; + + ue_report_item->c_RNTI = *crnti; + ue_report_item->dl_PRBUsage = &lval1; + + printf("enc5\n"); + + ue_report_item->ul_PRBUsage = &lval2; + + printf("enc6\n"); + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oDU_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oDU_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_odu_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco, plmnid_buf, + nrcellid_buf, crnti_buf, + serving_buf, neighbor_buf); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + int pdcp_bytesdl, + int pdcp_bytesul) { + + +} + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + //encode_kpm_ocuup_user_level(ranco); + + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + // xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + long fiveqi, + long dl_prb_usage, + long ul_prb_usage, + uint8_t* sd_buf, + uint8_t* sst_buf, + uint8_t* plmnid_buf, + uint8_t* nrcellid_buf, + long *dl_prbs, + long *ul_prbs) { + + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, nrcellid_buf, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = dl_prbs; + listitem1->ul_TotalofAvailablePRBs = ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + long fiveqi = 8; + long dl_prb_usage = 50; + long ul_prb_usage = 70; + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + long dl_prbs = (long)100; + long ul_prbs = (long)120; + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = &dl_prbs; + listitem1->ul_TotalofAvailablePRBs = &ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *gnbcuupname_buf, + int bytes_dl, + int bytes_ul, + uint8_t *sst_buf, + uint8_t *sd_buf, + uint8_t *plmnid_buf) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + // uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, gnbcuupname_buf, gnbcuupname->size); + + + //We need to convert bytes_dl into array of uint8_t + + int array_size_dl; + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + if (bytes_dl <= 64) { + array_size_dl = 1; + + uint8_t buffer[array_size_dl]; + buffer[0] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf,buffer,1); + bytesdl->size = 1; + + } else if (bytes_dl <= 16384) { + array_size_dl = 2; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 8) & 0xFF; + buffer[1] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(2,1); + memcpy(bytesdl->buf,buffer,2); + bytesdl->size = 2; + + } else if (bytes_dl <= 4194304) { + array_size_dl = 3; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 16) & 0xFF; + buffer[1] = (bytes_dl >> 8) & 0xFF; + buffer[2] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(3,1); + memcpy(bytesdl->buf,buffer,3); + bytesdl->size = 3; + + } else if (bytes_dl <= 1073741824) { + array_size_dl = 4; + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 24) & 0xFF; + buffer[1] = (bytes_dl >> 16) & 0xFF; + buffer[2] = (bytes_dl >> 8) & 0xFF; + buffer[3] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(4,1); + memcpy(bytesdl->buf,buffer,4); + bytesdl->size = 4; + } + + + //We need to convert bytes_ul into array of uint8_t + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + int array_size_ul; + + if (bytes_ul <= 64) { + array_size_ul = 1; + + uint8_t buffer[array_size_ul]; + buffer[0] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf,buffer,1); + bytesul->size = 1; + + } else if (bytes_ul <= 16384) { + array_size_ul = 2; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 8) & 0xFF; + buffer[1] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(2,1); + memcpy(bytesul->buf,buffer,2); + bytesul->size = 2; + + } else if (bytes_ul <= 4194304) { + array_size_ul = 3; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 16) & 0xFF; + buffer[1] = (bytes_ul >> 8) & 0xFF; + buffer[2] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(3,1); + memcpy(bytesul->buf,buffer,3); + bytesul->size = 3; + + } else if (bytes_ul <= 1073741824) { + array_size_ul = 4; + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 24) & 0xFF; + buffer[1] = (bytes_ul >> 16) & 0xFF; + buffer[2] = (bytes_ul >> 8) & 0xFF; + buffer[3] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(4,1); + memcpy(bytesul->buf,buffer,4); + bytesul->size = 4; + } + + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,sst_buf,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, sd_buf, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + /* + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + //std::string gn = "GNBCUUP5"; + //std::vector gnvec(gn.begin(), gn.end()); + //uint8_t *buf = &gnvec[0]; + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + // std::string sl = "SLICE4"; + // std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + */ +} + +/* +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage) { + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + std::string gn = "GNBCUUP5"; + std::vector gnvec(gn.begin(), gn.end()); + uint8_t *buf = &gnvec[0]; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + std::string sl = "SLICE4"; + std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"SLICE4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + std::string sd = "SD1"; + std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(6,1); + snssai->sST.size = 6; + memcpy(snssai->sST.buf, buf1, 6); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + auto era = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + std::string pl = "PLMNID7"; + std::vector plvec(pl.begin(), pl.end()); + uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(1,7); + plmnid->size = 7; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + auto er = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} +*/ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp new file mode 100644 index 0000000..682814c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/encode_kpm.hpp @@ -0,0 +1,45 @@ +#ifndef ENCODE_KPM_HPP +#define ENCODE_KPM_HPP + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" +} + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc); + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_odu_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco); + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage,uint8_t *plmnid_buf,uint8_t *nrcellid_buf,uint8_t *crnti_buf,const uint8_t *serving_buf, const uint8_t *neighbor_buf); + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *plmnid_buf, uint8_t *nrcellid_buf, uint8_t *crnti_buf,int pdcp_bytesdl, int pdcp_bytesul); + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, long fiveqi, long dl_prb_usage, long ul_prb_usage, uint8_t* sd_buf, uint8_t* sst_buf,uint8_t* plmnid_buf, uint8_t* nrcellid_buf, long *dl_prbs, long *ul_prbs); + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *gnbcuupname_buf, int bytes_dl,int bytes_ul, uint8_t *sst_buf, uint8_t *sd_buf, uint8_t *plmnid_buf); + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp new file mode 100644 index 0000000..5f9b7f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/extras/ricsim.cpp @@ -0,0 +1,216 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "GlobalE2node-ID.h" + #include "GlobalE2node-gNB-ID.h" + #include "GlobalgNB-ID.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "GNB-ID-Choice.h" + #include "ProtocolIE-Field.h" + #include "E2setupRequest.h" +} + +using namespace std; + +/* +struct { + type **array; + int count; + int size; + void (*free)(decltype(*array)); +} +*/ + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + // E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + + printf("out0\n"); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t gnb_bstring; + gnb_bstring.buf = buf; + gnb_bstring.size = 4; + gnb_bstring.bits_unused = 0; + + printf("out1\n"); + + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t plmn; + plmn.buf = buf2; + plmn.size = 5; + + GNB_ID_Choice_t gnbchoice; + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice.present = pres2; + gnbchoice.choice.gnb_ID = gnb_bstring; + + GlobalgNB_ID_t gnb; + gnb.plmn_id = plmn; + gnb.gnb_id = gnbchoice; + + + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = gnb; + + /* + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + */ + + GlobalE2node_ID_t globale2nodeid; + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid.present = pres; + globale2nodeid.choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequest_t));; + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 4; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = globale2nodeid; + e2setuprid->value.present = pres3; + + + E2setupRequest_t e2setupreq; + e2setupreq.protocolIEs.list.size = sizeof(E2setupRequestIEs); + e2setupreq.protocolIEs.list.count = 1; + e2setupreq.protocolIEs.list.array = &e2setuprid; + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 1; + initmsg->criticality = 0; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + E2AP_PDU_t *e2ap_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU_t)); + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + printf("over here\n"); + + asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + printf("over here 55\n"); + + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_SetupRequest2.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + // E2setupRequest_t* pdu_setup = smaller_e2ap_xml_to_pdu("E2AP_PartSetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + // encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + /* + GlobalE2node_ID_t* pdu_setup = smaller_e2ap_xml_to_pdu("GlobalE2node-ID.xml"); + + asn_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + */ + /* + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + */ + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + /* + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + */ + //4. Receive RICSubscriptionResponse + while(1){ + wait_for_sctp_data(client_fd); + } + + + //--------------------------------------- + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/README.md b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/README.md new file mode 100644 index 0000000..dfff99a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/README.md @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +# +# the test repo needs to be on the same parent path as the dep repo +# simply run e2sim_install.sh from this directory +# diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml new file mode 100644 index 0000000..f3a950c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/Chart.yaml @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Kubernetes +name: e2sim +version: 0.1.0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl new file mode 100644 index 0000000..ce3748d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/_helpers.tpl @@ -0,0 +1,49 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "e2sim.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "e2sim.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "e2sim.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl new file mode 100644 index 0000000..35e01c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl @@ -0,0 +1,54 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} +#!/bin/sh + +# Launch the e2 simulator on ${E2SIM_BIND_ADDR}:${E2SIM_BIND_PORT} +# If E2SIM_BIND_ADDR is not supplied, picks the address of the interface +# associated with the default route for E2SIM_BIND_AF (either +# "inet" [default] or "inet6"). + +if [ -z "${E2SIM_BIND_ADDR}" ]; then + if [ `echo "x${E2SIM_BIND_AF}x" | tr [A-Z] [a-z]` != "xinet6x" ]; then + AF='inet' + DEFROUTE='0/0' + LO='127.0.0.1' + else + AF='inet6' + DEFROUTE='::0/0' + LO='00:00:00:00:00:00' + fi + if [ -z "${E2SIM_BIND_IF}" ]; then + # bind on the address associated with the default route + E2SIM_BIND_IF=`ip -br -f ${AF} route show ${DEFROUTE}| sed 's/.*dev[\ ]*\([^\ ]*\).*/\1/'` + if [ -z ${E2SIM_BIND_IF} ]; then + # this is kinda bogus, but it's the only real fallback: take the first + # non-loopback interface. + E2SIM_BIND_IF=`ip -f ${AF} -o link list up | grep -v LOOPBACK | head -1 |awk -F: '{print $2}'` + fi + fi + E2SIM_BIND_ADDR=`ip -f ${AF} -o addr show ${E2SIM_BIND_IF:-eth0} scope global | sed -e 's/.*inet[6\ ]*\([^\ ]*\)\/.*/\1/'` +fi + +if [ -z $E2SIM_BIND_ADDR ]; then + # search failed. be nondestructively useless. + echo "No suitable address found, binding on loopback addess ${LO}" + E2SIM_BIND_ADDR=${LO} +else + echo "e2sim starting at ${E2SIM_BIND_ADDR}:${E2SIM_PORT:-36421}" +fi + +${E2SIM:-/home/e2sim/build/e2sim} ${E2SIM_BIND_ADDR} ${E2SIM_PORT:-36421} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml new file mode 100644 index 0000000..ec30488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/configmap-e2sim-bin.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap-e2sim-bin + namespace: {{ .Release.Namespace }} +data: + e2sim-run.sh: | + {{- include "e2sim/templates/bin/_e2sim-run.sh.tpl" . | indent 4 }} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml new file mode 100644 index 0000000..21475f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/templates/deployment.yaml @@ -0,0 +1,79 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ include "e2sim.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "e2sim.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + spec: + hostNetwork: true + containers: + - name: {{ include "e2sim.name" . }} + image: "{{ .Values.image.repository }}/{{ .Values.image.name }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /e2sim-run.sh + ports: + - containerPort: {{ .Values.service.port }} + env: + - name: E2SIM_NETWORK_TYPE + value: {{ .Values.e2sim.network.type | default "host" }} + - name: E2SIM_PORT + value: {{ .Values.e2sim.network.port | default 36421 |quote}} + - name: E2SIM_BIND_ADDR + value: {{ .Values.e2sim.network.address }} + - name: E2SIM_BIND_IF + value: {{ .Values.e2sim.network.interface }} + - name: E2SIM_BIND_AF + value: {{ .Values.e2sim.network.addressFamily | default "inet" }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + - name: localtime + mountPath: /etc/localtime + readOnly: true + - name: e2sim-bin + subPath: e2sim-run.sh + mountPath: /e2sim-run.sh + resources: + volumes: + - name: dshm + emptyDir: + medium: Memory + - name: localtime + hostPath: + path: /etc/localtime + - name: e2sim-bin + configMap: + name: configmap-e2sim-bin + defaultMode: 0755 + imagePullSecrets: + - name: {{ .Values.image.repositoryCred }} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml new file mode 100644 index 0000000..5f5cbca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim/values.yaml @@ -0,0 +1,48 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +replicaCount: 1 + +image: + repository: snapshot.docker.ranco-dev-tools.eastus.cloudapp.azure.com:10001 + repositoryCred: docker-reg-cred + # for local testing + #repository: ric/testsuite + name: test/e2sim + tag: latest + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: "" + +e2sim: + network: + # network implementation type: hostnetworking or DANM + # type: ["host"]|"danm" + # where e2sim should listen for SCTP connections: + # o if "address" is supplied, listen on that IP (v4 or v6) address + # o if "address" is not supplied and "interface" is supplied, listen on the + # first globally-scoped address on that interface of family "addressFamily" + # (default "inet") + # o if neither "address" nor "interface" is supplied, listen on the first + # globally-scoped address of family "addressFamily" (default "inet") on + # the interface associated with the container's default route, if any; if + # the container does not have a default route, the first interface with + # a globally-scoped address will be used. + # address: addr + # interface: ifname + # addressFamily: ["inet"]|"inet6" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh new file mode 100644 index 0000000..9b9a13c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/helm/e2sim_install.sh @@ -0,0 +1,78 @@ +#!/bin/bash +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +OVERRIDEYAML=$1 + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +#/root/test/ric_robot_suite/helm +# extract the base to find root to dep + +BASE=${DIR%/test*} + +# /data/ORAN-OSC/it/dep/ric-platform/50-RIC-Platform/bin/install +BASEDIR05=$BASE/dep/ric-platform/50-RIC-Platform/ +BASEDIRCOMMON=$BASE/dep/ric-common/Common-Template/helm/ric-common + +echo "Using etc/ric.conf from $BASEDIR05" + + +source $BASEDIR05/etc/ric.conf + + +if [ -z "$RICPLT_RELEASE_NAME" ];then + RELEASE_NAME=$helm_release_name +else + RELEASE_NAME=$RICPLT_RELEASE_NAME +fi + +# Namespace configuration +if [ -z "$RICPLT_NAMESPACE" ];then + PLT_NAMESPACE=$plt_namespace +else + PLT_NAMESPACE=$RICPLT_NAMESPACE +fi + + + +RICPLT_COMPONENTS="e2sim" + +echo "Deploying RIC Platform components [$RICPLT_COMPONENTS]" +echo "Platform Namespace: $PLT_NAMESPACE" +echo "Helm Release Name: $RELEASE_NAME" + + +COMMON_CHART_VERSION=$(cat $BASEDIRCOMMON/Chart.yaml | grep version | awk '{print $2}') + +helm package -d /tmp $BASEDIRCOMMON + + +for component in $RICPLT_COMPONENTS; do + echo "Preparing chart for comonent $component" + mkdir -p $DIR/$component/charts/ + cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $DIR/$component/charts/ + if [ -z $OVERRIDEYAML ]; then + echo "helm install --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + else + echo "helm install -f $OVERRIDEYAML --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install -f $OVERRIDEYAML --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + fi +done diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp new file mode 100644 index 0000000..58ba3b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.cpp @@ -0,0 +1,646 @@ + + +#include +#include +#include + + + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" + #include "E2AP-PDU.h" + #include "RICsubscriptionRequest.h" + #include "RICsubscriptionResponse.h" + #include "RICactionType.h" + #include "ProtocolIE-Field.h" + #include "ProtocolIE-SingleContainer.h" + #include "InitiatingMessage.h" +} + +#include "kpm_callbacks.hpp" +#include "encode_kpm.hpp" + +#include "encode_e2apv1.hpp" + +#include +#include + + +using json = nlohmann::json; + +using namespace std; +class E2Sim; + + +E2Sim e2sim; + +int main(int argc, char* argv[]) { + + asn_codec_ctx_t *opt_cod; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + fprintf(stderr, "here is encoded message %s\n", e2smbuffer); + + uint8_t *ranfuncdesc = (uint8_t*)calloc(1,er.encoded); + memcpy(ranfuncdesc, e2smbuffer, er.encoded); + + printf("this is the char array %s\n", (char*)ranfuncdesc); + + OCTET_STRING_t *ranfunc_ostr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfunc_ostr->buf = (uint8_t*)calloc(1,er.encoded); + ranfunc_ostr->size = er.encoded; + memcpy(ranfunc_ostr->buf,e2smbuffer,er.encoded); + + printf("!!!lenth of ranfuncdesc is %d\n", strlen((char*)ranfuncdesc)); + printf("value of this index is %d\n", ranfuncdesc[0]); + printf("value of this index is %d\n", ranfuncdesc[1]); + printf("value of this index is %d\n", ranfuncdesc[2]); + printf("value of this index is %d\n", ranfuncdesc[3]); + printf("value of this index is %d\n", ranfuncdesc[4]); + printf("value of this index is %d\n", ranfuncdesc[5]); + printf("value of this index is %d\n", ranfuncdesc[6]); + printf("value of this index is %d\n", ranfuncdesc[10]); + printf("value of this index is %d\n", ranfuncdesc[15]); + printf("value of this index is %d\n", ranfuncdesc[100]); + printf("value of this index is %d\n", ranfuncdesc[101]); + + e2sim.register_e2sm(1,ranfunc_ostr); + e2sim.register_subscription_callback(1,&callback_kpm_subscription_request); + + e2sim.run_loop(argc, argv); + +} + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId) { + + //Process simulation file + + ifstream simfile; + string line; + + long seqNum = 1; + + simfile.open("simulation.txt", ios::in); + + cout << "step1" << endl; + + std::ifstream ue_stream("ueMeasReport.txt"); + std::ifstream cell_stream("cellMeasReport.txt"); + + json all_ues_json; + + ue_stream >> all_ues_json; + + json all_cells_json; + + cell_stream >> all_cells_json; + + asn_codec_ctx_t *opt_cod; + + cout << "UE RF Measurements" << endl; + cout << "******************" << endl; + + int numMeasReports = (all_ues_json["/ueMeasReport/ueMeasReportList"_json_pointer]).size(); + + for (int i = 0; i < numMeasReports; i++) { + int nextCellId; + int nextRsrp; + int nextRsrq; + int nextRssinr; + cout << "UE number " + i << endl; + cout << "**********" << endl; + json::json_pointer p1(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_ues_json[p1].get(); + cout << "Serving Cell " << nextCellId << endl; + + json::json_pointer p2(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrp"); + nextRsrp = all_ues_json[p2].get(); + cout << " RSRP " << nextRsrp << endl; + json::json_pointer p3(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrq"); + nextRsrq = all_ues_json[p3].get(); + cout << " RSRQ " << nextRsrq << endl; + json::json_pointer p4(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rssinr"); + nextRssinr = all_ues_json[p4].get(); + cout << " RSSINR " << nextRssinr << endl; + + json::json_pointer p5(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList"); + + int numNeighborCells = (all_ues_json[p5]).size(); + + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)calloc(1,2); + + if (nextCellId == 0) { + uint8_t *buf2 = (uint8_t*)"12"; + memcpy(crnti_buf, buf2, 2); + } else if (nextCellId == 1) { + uint8_t *buf2 = (uint8_t*)"22"; + memcpy(crnti_buf, buf2, 2); + } + + std::string serving_str = "{\"rsrp\": " + std::to_string(nextRsrp) + ", \"rsrq\": " + + std::to_string(nextRsrq) + ", \"rssinr\": " + std::to_string(nextRssinr) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + std::string neighbor_str = "["; + + int nextNbCell; + int nextNbRsrp; + int nextNbRsrq; + int nextNbRssinr; + + for (int j = 0; j < numNeighborCells; j++) { + json::json_pointer p8(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList/" + std::to_string(j) + "/nbCellIdentity"); + nextNbCell = all_ues_json[p8].get(); + cout << "Neighbor Cell " << all_ues_json[p8] << endl; + json::json_pointer p9(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrp"); + nextNbRsrp = all_ues_json[p9].get(); + cout << " RSRP " << nextNbRsrp << endl; + + json::json_pointer p10(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrq"); + nextNbRsrq = all_ues_json[p10].get(); + cout << " RSRQ " << nextNbRsrq << endl; + + json::json_pointer p11(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rssinr"); + nextNbRssinr = all_ues_json[p11].get(); + cout << " RSSINR " << nextNbRssinr << endl; + + if (j != 0) { + neighbor_str += ","; + + } + + neighbor_str += "{\"CID\" : \"" + std::to_string(nextNbCell) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(nextNbRsrp) + + ", \"rsrq\": " + std::to_string(nextNbRsrq) + ", \"rssinr\": " + std::to_string(nextNbRssinr) + "}}"; + + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + printf("Neighbor string\n%s", neighbor_buf); + + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 6, e2smbuffer3, er3.encoded); + + e2sim.encode_and_send_sctp_data(pdu3); + + seqNum++; + + } + + + cout << "Cell Measurements" << endl; + cout << "******************" << endl; + + int numCellMeasReports = (all_cells_json["/cellMeasReport/cellMeasReportList"_json_pointer]).size(); + + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + + for (int i = 0; i < numCellMeasReports; i++) { + + int nextCellId; + int nextPdcpBytesDL; + int nextPdcpBytesUL; + int nextPRBBytesDL; + int nextPRBBytesUL; + + json::json_pointer p1(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_cells_json[p1].get(); + cout << std::string("Cell number ") << nextCellId << endl; + + cout << "**********" << endl; + + json::json_pointer p2(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesDl"); + nextPdcpBytesDL = all_cells_json[p2].get(); + cout << std::string(" PDCP Bytes DL ") << nextPdcpBytesDL << endl; + + json::json_pointer p3(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesUl"); + nextPdcpBytesUL = all_cells_json[p3].get(); + cout << std::string(" PDCP Bytes UL ") << nextPdcpBytesUL << endl; + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = nextPdcpBytesDL; + + int bytes_ul = nextPdcpBytesUL; + + // int bytes_dl = 3905; + // int bytes_ul = 1609321; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf2 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu2, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf2, 6, e2smbuffer2, er2.encoded); + + e2sim.encode_and_send_sctp_data(pdu2); + + seqNum++; + + + + json::json_pointer p4(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/prbMeasReport/availPrbDl"); + nextPRBBytesDL = all_cells_json[p4].get(); + cout << std::string(" PRB Bytes DL ") << all_cells_json[p4] << endl; + + json::json_pointer p5(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/prbMeasReport/availPrbUl"); + nextPRBBytesUL = all_cells_json[p5].get(); + cout << std::string(" PRB Bytes UL ") << all_cells_json[p5] << endl; + + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = nextPRBBytesDL; + long ul_prbs = nextPRBBytesUL; + + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)"header"; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 6, e2smbuffer, er.encoded); + + e2sim.encode_and_send_sctp_data(pdu); + + seqNum++; + + } + + + /* + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = 100; + long ul_prbs = 50; + + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)"header"; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 6, e2smbuffer, er.encoded); + + encode_and_send_sctp_data(pdu, socket_fd); + + seqNum++; + + //REPORT Message 2 -- Encode and send OCUUP cell-level report + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = 40000; + int bytes_ul = 50000; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf2 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu2, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf2, 6, e2smbuffer2, er2.encoded); + + encode_and_send_sctp_data(pdu2, socket_fd); + + seqNum++; + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)"12"; + // uint8_t *serving_buf = (uint8_t*)"RSRP10"; + //uint8_t *neighbor_buf = (uint8_t*)"-10,-15"; + int rsrpServ = 10; + int rsrqServ = 0; + int rssinrServ = 0; + + std::string serving_str = "{\"rsrp\": " + std::to_string(rsrpServ) + ", \"rsrq\": " + + std::to_string(rsrqServ) + ", \"rssinr\": " + std::to_string(rssinrServ) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + + neighbor_cell_entry n_entries[3]; + n_entries[0] = {"123", 10, 0, 0}; + n_entries[1] = {"456", 10, 0, 0}; + n_entries[2] = {"789", 10, 0, 0}; + + std::string neighbor_str = "["; + + for (int i=0; i < sizeof(n_entries)/sizeof(n_entries[0]); i++) { + + if (i != 0) { + neighbor_str += ","; + } + neighbor_str += "{\"CID\" : \"" + std::string(n_entries[i].cellid) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(n_entries[i].rsrp) + + ", \"rsrq\": " + std::to_string(n_entries[i].rsrq) + ", \"rssinr\": " + std::to_string(n_entries[i].rsrp) + "}}"; + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + printf("Neighbor string\n%s", neighbor_buf); + + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 6, e2smbuffer3, er3.encoded); + + encode_and_send_sctp_data(pdu3, socket_fd); + + seqNum++; + + //Encode and send OCUUP user-level report + + + + //Encode and send ODU user-level report + + + + + } + + simfile.close(); + + } + */ + +} + +void callback_kpm_subscription_request(E2AP_PDU_t *sub_req_pdu) { + + + //Record RIC Request ID + //Go through RIC action to be Setup List + //Find first entry with REPORT action Type + //Record ricActionID + //Encode subscription response + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long reqRequestorId; + long reqInstanceId; + long reqActionId; + + std::vector actionIdsAccept; + std::vector actionIdsReject; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + reqRequestorId = requestorId; + reqInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + //We are ignoring the trigger definition + + //We identify the first action whose type is REPORT + //That is the only one accepted; all others are rejected + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + bool foundAction = false; + + for (int i=0; i < actionCount; i++) { + + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + RICactionType_t actionType = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionType; + + if (!foundAction && actionType == RICactionType_report) { + reqActionId = actionId; + actionIdsAccept.push_back(reqActionId); + printf("adding accept\n"); + foundAction = true; + } else { + reqActionId = actionId; + printf("adding reject\n"); + actionIdsReject.push_back(reqActionId); + } + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", reqRequestorId); + fprintf(stderr, "instanceId %d\n", reqInstanceId); + + + for (int i=0; i < actionIdsAccept.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIdsAccept.at(i)); + + } + + E2AP_PDU *e2ap_pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long *accept_array = &actionIdsAccept[0]; + long *reject_array = &actionIdsReject[0]; + int accept_size = actionIdsAccept.size(); + int reject_size = actionIdsReject.size(); + + generate_e2apv1_subscription_response_success(e2ap_pdu, accept_array, reject_array, accept_size, reject_size, reqRequestorId, reqInstanceId); + + e2sim.encode_and_send_sctp_data(e2ap_pdu); + + //Start thread for sending REPORT messages + + // std::thread loop_thread; + + long funcId = 1; + + run_report_loop(reqRequestorId, reqInstanceId, funcId, reqActionId); + + // loop_thread = std::thread(&run_report_loop); + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp new file mode 100644 index 0000000..b0207d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/kpm_callbacks.hpp @@ -0,0 +1,6 @@ + +#include "e2sim.hpp" + +void callback_kpm_subscription_request(E2AP_PDU_t *pdu); + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId); diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/simulation.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/simulation.txt new file mode 100644 index 0000000..c1eedb7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/simulation.txt @@ -0,0 +1,3 @@ +This is a silulation file +This is a simulation +This is a a a a a simulation file! diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp new file mode 100644 index 0000000..3affd81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/asn.hpp @@ -0,0 +1,27 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/version.hpp" +#include "asn/elements.hpp" +#include "asn/constraints.hpp" +#include "asn/variant.hpp" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp new file mode 100644 index 0000000..3a42ad5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/codec.hpp @@ -0,0 +1,931 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/ber/common.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tag.hpp" +#include "asn/ber/length.hpp" +#include "asn/ber/visitor.hpp" +#include "asn/ber/opentype.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +pack (X.690) +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack (X.690) +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* ExplicitCodec: Codec for elements with EXPLICIT tag +***************************************************************************************/ +template +struct ExplicitCodec +{ + using tag_t = Tag; + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + Element::run(static_cast(ie), ctx); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + { + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("EX buffer: %s", static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + Element::run(static_cast(ie), ctx); + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + Element::run(static_cast(ie), ctx); + + buffer.set_end(end); + } + } + + } + } +}; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.690 8.2) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(1, ctx); + if(ie.get()) + Tools::put_bytes(0xFF, 1, ctx); + else + Tools::put_bytes(0, 1, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length != 1) + { + ctx.refErrorCtx().sizeRangeError(length, 1, 1); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t value; + Tools::get_bytes(value, 1, ctx); + ie.set(value > 0); + } + } + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.690 8.3) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.690 8.4) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* REAL: Encoding the real type (X.690 8.5) +***************************************************************************************/ +//missing... +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.690 8.6) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + + uint8_t tail = ie.get_bitqty() % 8; + + size_t length = ie.get_buffer().size(); + Length::encode(length + 1, ctx); + + auto & buffer = ctx.refBuffer(); + buffer.putByte((8 - tail) & 0x7F); + + if (tail) + { + buffer.putBytes(ie.get_buffer().data(), length - 1); + u8 last_byte = *(ie.get_buffer().data() + length - 1); + + last_byte <<= 8 - tail; + buffer.putBytes(&last_byte, 1); + } + else + { + buffer.putBytes(ie.get_buffer().data(), length); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + size_t len_bytes = length - 1; + size_t bitqty = len_bytes << 3; + + if((data_in[0] & 0x80) || (bitqty < data_in[0])) + { + ctx.refErrorCtx().valueRangeError(data_in[0]); + } + else + { + bitqty = bitqty - data_in[0]; + uint8_t* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, &data_in[1], len_bytes); + const u8 shift = bitqty % 8; + if (shift) + { + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(bitqty, data_out); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.690 8.7) +* Restricted Character string types (X.690 8.23) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.690 8.8) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(0, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length) + ctx.refErrorCtx().sizeRangeError(length); + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + } + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.690 8.9) +* SET: Encoding the set type (X.690 8.11) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + VisitorEncoderSeq ve(ctx, ie); + ie.encode(ve); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) //todo: support arbitrary order of IEs in SET + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + VisitorDecoderSeq vd(ctx, ie); + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + ie.decode(vd); + if(ctx) + { + if(invalid_tag != vd.get_unhandled_tag()) + { + tag_value_t _tag = vd.get_unhandled_tag(); + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else // it should be the end-of-contents octets (8.1.5) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + ie.decode(vd); + tag_value_t _tag = vd.get_unhandled_tag(); + if(invalid_tag != _tag) + { + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && buffer.getBytesLeft() > 0); + } + else + ctx.refErrorCtx().tagError(static_cast(tag)); // unexpected tag + } + buffer.set_end(end); + } + } + + } + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.690 8.10) +* SET OF: Encoding the set-of type (X.690 8.12) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + for (auto& elem : ie) + { + Element::run(elem, ctx); + } + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + tag_value_t elm_tag = get_tag(ctx); + + while(ctx && Element::is_matched(elm_tag)) + { + add_element(ie, ctx, &elm_tag); + elm_tag = get_tag(ctx); + } + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (elm_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + while(ctx && buffer.getBytesLeft() > 0) + add_element(ie, ctx); + + buffer.set_end(end); + } + } + } + } + +private: + static void inline add_element(IE& ie, DecoderCtx& ctx, tag_value_t const* elm_tag = nullptr) + { + uint8_t* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + Element::run(*v, ctx, elm_tag); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + } + } +}; + +/*************************************************************************************** +* CHOICE: Encoding the choice type +***************************************************************************************/ +struct ChoiceVisitorEncoder +{ + ChoiceVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator()(IE const& ie) + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + + EncoderCtx& m_ctx; +}; + +struct ChoiceVisitorDecoder +{ + ChoiceVisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag) {} + + template bool operator()(IE& ie) + { + Element::run(ie, m_ctx, &m_tag); + return static_cast(m_ctx); + } + + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(!m_valid && Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector {tag}; + IE::enumerate(selector); + return selector.is_valid(); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceVisitorEncoder ve(ctx); + + if(ctx && !ie.encode(ve)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + Selector selector {tag}; + IE::enumerate(selector); + + if(!selector.is_valid()) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + ChoiceVisitorDecoder vd {ctx, tag}; + if(ctx && !ie.decode(selector.get_idx(), vd)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + } +}; + +template +struct ElementType > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector(tag); + IE::enumerate(selector); + + return selector.is_valid(); + } +}; + +/*************************************************************************************** +* Identifier +***************************************************************************************/ +template +struct Identifier +{ + static bool inline is_matched(tag_value_t _tag) + { + return ElementType::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ElementType::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ElementType::run(ie, ctx, tag); + } +}; + +template +struct Identifier > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static bool inline is_matched(tag_value_t _tag) + { + return Identifier::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + Identifier::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t const* tag_ptr = nullptr) + { + if (ctx) + { + ctx.ie_name(IE::name()); + + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + if(ctx) + Identifier::run(ie, ctx, tag); + } + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp new file mode 100644 index 0000000..edd830b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/common.hpp @@ -0,0 +1,51 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "asn/buffer.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tools.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace ber { + +template struct Element; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp new file mode 100644 index 0000000..4159f00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/context.hpp @@ -0,0 +1,118 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp new file mode 100644 index 0000000..51b387c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/length.hpp @@ -0,0 +1,103 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +constexpr size_t indefinite_length = std::numeric_limits::max(); + +/*************************************************************************************** +* Length +***************************************************************************************/ +struct Length +{ + static size_t inline get(int64_t value) + { + size_t length = 1; + + if(value != 0) + { + size_t extra_sign_bits = __builtin_clrsbll(value); + length = sizeof(value) - (extra_sign_bits >> 3) ; + } + + return length; + } + + static void inline encode(size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + if(length <= 0x7F) + { + buffer.putByte(static_cast(length)); + } + else + { + size_t lenlen = get(length); + if(lenlen > 0x7F) + { + ctx.refErrorCtx().sizeRangeError(length, 0, 0x7F); + } + else + { + uint8_t bt = static_cast(lenlen); + bt |= 0x80; + buffer.putByte(bt); + Tools::put_bytes(length, lenlen, ctx); + } + } + + } + + static size_t inline decode(DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + size_t length = 0; + + uint8_t const* data = buffer.getBytes(1); + + if(data) + { + if(!(data[0] & 0x80)) + { + length = data[0]; + } + else + { + size_t lenlen = data[0] & 0x7F; + + if(lenlen) + Tools::get_bytes(length, lenlen, ctx); + else + length = indefinite_length; + } + } + + return length; + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp new file mode 100644 index 0000000..0ff9366 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/opentype.hpp @@ -0,0 +1,73 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* OpenType +***************************************************************************************/ +struct OpenType +{ + static tag_value_t decode(DecoderCtx& ctx, size_t& length, tag_value_t const* tag_ptr = nullptr) + { + auto & buffer = ctx.refBuffer(); + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + length = Length::decode(ctx); + + if(!length) + { + //just return + } + else if(length == indefinite_length) + { + tag_value_t _tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length); + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + size_t _length; + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + decode(ctx, _length); + buffer.set_end(end); + } + } + return tag; + } +}; + +} //namespace ber +} //namespace asn \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp new file mode 100644 index 0000000..dba9733 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tag.hpp @@ -0,0 +1,163 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define IE_CLASS_SHIFT 6 +#define IE_PC_SHIFT 5 +#define IE_BIG_TAG_FST_OCTET 0b011111 + +namespace asn { +namespace ber { + +constexpr tag_value_t invalid_tag = std::numeric_limits::max(); + +/*************************************************************************************** +* Tag +***************************************************************************************/ +template +struct Tag; + +template +struct Tag > +{ + static constexpr tag_value_t value() + { + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= static_cast(IE::asn_identifier_t::tag_value); + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + ctx.refBuffer().putByte(static_cast(value())); + } +}; + + +template +struct Tag= 31) > > +{ + static constexpr tag_value_t value() + { + static_assert(IE::asn_identifier_t::tag_value > 0, "null tag value"); + + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= IE_BIG_TAG_FST_OCTET; + + size_t leadbits = __builtin_clzll(IE::asn_identifier_t::tag_value); + tag_value_t tv = IE::asn_identifier_t::tag_value << leadbits; + size_t length = sizeof(tag_value_t)*CHAR_BIT - leadbits; + + size_t shift = sizeof(tag_value_t)*CHAR_BIT - 7; + + size_t lb = length % 7; + if(lb) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> (shift + 7 - lb)); + tv <<= lb; + length -= lb; + } + + while(length) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> shift); + tv <<= 7; + length -= 7; + } + v &= ((tag_value_t)-1) & ~((tag_value_t) 0x80); + + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + size_t size = 0; + tag_value_t tv = data(size); + ctx.refBuffer().putBytes(reinterpret_cast(&tv), size); + } + +private: + + static constexpr tag_value_t data(size_t& size) + { + tag_value_t rv = 0; + tag_value_t tv = value(); + size = sizeof(tag_value_t) - (__builtin_clzll(tv) >> 3); + + uint8_t* ptr = reinterpret_cast(&rv); + + size_t shift = (size - 1) * 8; + for(size_t i = 0; i < size; ++i) + { + ptr[i] = static_cast(tv >> shift); + shift -= 8; + } + + return rv; + } +}; + +inline +tag_value_t get_tag(DecoderCtx& ctx) +{ + tag_value_t rv = 0; + auto & buffer = ctx.refBuffer(); + uint8_t const* data = buffer.getBytes(1); + + if (data) + { + rv = data[0]; + if((data[0] & 0x1F) == IE_BIG_TAG_FST_OCTET) + { + size_t limit = sizeof(tag_value_t) - 1; + while((data = buffer.getBytes(1))) + { + if(!limit) + { + ctx.refErrorCtx().sizeRangeError(0); + break; + } + + rv <<= 8; + rv |= data[0]; + --limit; + + if(!(data[0] & 0x80)) + break; + } + } + } + return rv; +} + +} //namespace ber +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp new file mode 100644 index 0000000..9f9bc9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/tools.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; + + + template + static void put_bytes(T value, size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + size_t shift = (length - 1) << 3; + for(size_t i = 0; i < length; ++i) + { + buffer.putByte(static_cast(value >> shift)); + shift -= 8; + } + } + + template + static void get_bytes(T& value, size_t length, DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + value = 0; + uint8_t const* data = buffer.getBytes(length); + + if(data) + { + value = data[0]; + for(size_t i = 1; i < length; ++i) + { + value <<= 8; + value |= data[i]; + } + } + } + +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp new file mode 100644 index 0000000..98c1f05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/ber/visitor.hpp @@ -0,0 +1,177 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* VisitorEncoder +***************************************************************************************/ +struct VisitorEncoder +{ + VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx){} + + template bool operator() (ELM const& elm) + { + if(m_ctx) + Element::run(elm, m_ctx); + return static_cast(m_ctx); + } +private: + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* VisitorDecoder +***************************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag){} + + template bool operator() (ELM& elm) + { + if(m_ctx) + Element::run(elm, m_ctx, &m_tag); + return static_cast(m_ctx); + } + +private: + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +/*************************************************************************************** +* VisitorAdapter +***************************************************************************************/ +template +struct VisitorAdapter //default +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + Element::run(ie, ctx, &tag); + } +}; + +template +struct VisitorAdapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + VisitorDecoder v(ctx, tag); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; + +/*************************************************************************************** +* VisitorEncoderSeq +***************************************************************************************/ +template +struct VisitorEncoderSeq +{ + VisitorEncoderSeq(EncoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM const& elm) + { + if(ELM::optional) + { + if(elm.is_valid()) + VisitorAdapter::run(elm, m_ctx, m_cont); + } + else + VisitorAdapter::run(elm, m_ctx, m_cont); + } + + EncoderCtx& m_ctx; + CONT const& m_cont; +}; + + +/*************************************************************************************** +* VisitorDecoderSeq +***************************************************************************************/ +template +struct VisitorDecoderSeq +{ + VisitorDecoderSeq(DecoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM& elm) + { + if(m_ctx) + { + tag_value_t tag; + + if(invalid_tag == m_tag && m_ctx.refBuffer().getBytesLeft()) + { + m_tag = get_tag(m_ctx); + } + tag = m_tag; + + if(m_ctx) + { + if (!Element::is_matched(tag)) + { + if(!ELM::optional) + { + m_ctx.refErrorCtx().tagError(static_cast(tag)); + } + } + else + { + m_tag = invalid_tag; + VisitorAdapter::run(elm, m_ctx, m_cont, tag); + elm.setpresent(true); + } + } + } + } + + tag_value_t get_unhandled_tag() const {return m_tag;} + + DecoderCtx& m_ctx; + tag_value_t m_tag {invalid_tag}; + CONT const& m_cont; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp new file mode 100644 index 0000000..4022b48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/buffer.hpp @@ -0,0 +1,689 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/error_context.hpp" +#include "value_traits.hpp" + +//#define CODEC_BIT_TRACE_ENABLE +#ifdef CODEC_BIT_TRACE_ENABLE + #define CODEC_BIT_TRACE(FMT, args...) printf("%s[%u]:" FMT "\n", std::strrchr(__FILE__, '/') + 1, __LINE__, ##args) +#else + #define CODEC_BIT_TRACE(...) +#endif + +namespace asn { + +template +struct bit_accessor; + +template +struct bit_accessor_cross_byte; + +template +class buffer +{ +public: + typedef PTR pointer; + + explicit buffer(error_context& err) + : m_errCtx(err) + {} + + void reset(pointer data, u32 size) + { + m_start = data; + m_end = m_start + size; + m_current = m_start; + m_shift = 0; + } + + u32 getOffset() const { return begin() - m_start; } + + u32 getBytesLeft() const { return end() - begin(); } + u32 getBytesUsed() const { return getOffset() + (get_shift() ? 1 : 0); } + + u8 get_shift() const { return m_shift; } + void reset_shift() { m_shift = 0; } + void byte_align() { if (get_shift()) { m_shift = 0; ++m_current; } } + + pointer advance(u32 delta) { pointer p = begin(); m_current += delta; return p; } + + pointer begin() const { return m_current; } + + void set_begin(pointer ptr, u8 bit_shift) + { + if (m_start <= ptr && ptr <= end()) + { + m_current = ptr; + m_shift = bit_shift; + } + } + + pointer end() const { return m_end; } + void set_end(pointer v) { m_end = v; } + + bool checkAlignment(char const* name, u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + return false; + } + + bool checkBytesLeft(char const* name, u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(char const* name, u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(name, getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(char const* name, u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(char const* name, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(char const* name, u32 max_requested, u32& num_bytes) + { + if (checkAlignment(name)) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(char const* name, u8 byte) + { + if (checkBytesAndAlignment(name, 1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(char const* name, void const* in, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + return true; + } + return false; + } + + bool checkAlignment(u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + return false; + } + + bool checkBytesLeft(u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(u32 num_bytes) + { + if (checkBytesAndAlignment(num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(u32 max_requested, u32& num_bytes) + { + if (checkAlignment()) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(u8 byte) + { + if (checkBytesAndAlignment(1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(void const* in, u32 num_bytes) + { + if (num_bytes) + { + if(checkBytesAndAlignment(num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + } + else + return false; + } + return true; + } + + char const* toString() const + { + static char sz[64]; + u8 const* p = begin(); + snprintf(sz, sizeof(sz), "%02X %02X %02X %02X [%02X]=%p@%u..%p -%u bits: +%u bytes", p[-4], p[-3], p[-2], p[-1], p[0], p + , getOffset(), end(), get_shift(), getBytesLeft()); + return sz; + } + +private: + template + friend class bit_accessor; + + template + friend struct bit_accessor_cross_byte; + + template + void push_u8(U value) { *m_current++ = static_cast(value); } + template + void put_u8(U value) { m_current[0] = static_cast(value); } + +//khxm68: TODO: won't compile without it. WTF?! +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + u8 get_u8() const { return m_current[0]; } +#pragma GCC diagnostic pop + u8 extract_u8(u8 value, u8 mask, u8 shift) const + { return (get_u8() & ~(mask << shift)) | ((value & mask) << shift); } + + u16 get_u16() const { return (static_cast(m_current[0]) << 8) | m_current[1]; } + u16 extract_u16(u16 value, u16 mask, u16 shift) const + { return (get_u16() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u24() const { return (static_cast(m_current[0]) << 16) | (static_cast(m_current[1]) << 8) | m_current[2]; } + u32 extract_u24(u32 value, u32 mask, u32 shift) const + { return (get_u24() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u32() const { return (static_cast(m_current[0]) << 24) | (static_cast(m_current[1]) << 16) | (static_cast(m_current[2]) << 8) | m_current[3]; } + u32 extract_u32(u32 value, u32 mask, u32 shift) const + { return (get_u32() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 getBitsLeft() const { return begin() == end() ? 0 : (getBytesLeft()*8 - get_shift()); } + + void bit_advance(u8 num_bits) + { + m_shift += num_bits; + if (get_shift() > 7) + { + reset_shift(); + m_current++; + } + } + + pointer m_current; + pointer m_end; + pointer m_start; + u8 m_shift; + error_context& m_errCtx; +}; + +template //LSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //LSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = buf.extract_u16(value, mask, shift); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + +template //LSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //LSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + + +template //MSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //MSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = buf.extract_u16(value, mask, shift); + + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + + +template //MSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //MSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + +/******************************************************************************** +bit_accessor_cross_byte +*********************************************************************************/ +template<> +struct bit_accessor_cross_byte //MSB +{ + static bool put(u8 value, u8 length, buffer& buf) + { + u8 spare = 8 - buf.get_shift(); + + if (spare < length) + { + length -= spare; + u8 chunk = value >> length; + u8 const mask = static_cast((1u << spare) - 1); + u8 data = buf.extract_u8(chunk, mask, 0); + buf.put_u8(data); + + buf.bit_advance(spare); + } + if (buf.checkBytesLeft(1)) + { + u8 const mask = static_cast((1u << length) - 1); + u8 const shift = 8 - buf.get_shift() - length; + u8 data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + buf.bit_advance(length); + + return true; + } + return false; + } + + static u8 get(u8 length, buffer& buf) + { + u8 rval {0}; + u8 const mask = static_cast((1u << length) - 1); + u8 const spare = 8 - buf.get_shift(); + if (spare < length) + { + length -= spare; + rval = buf.get_u8() << length; + buf.bit_advance(spare); + } + if (length && buf.checkBytesLeft(1)) + { + u8 val = buf.get_u8(); + val = val >> (8 - length - buf.get_shift()); + rval |= val; + rval &= mask; + buf.bit_advance(length); + } + return rval; + } + + static void padByte(buffer& buf) + { + if (buf.get_shift()) + { + u8 mask = static_cast((1u << buf.get_shift()) - 1); + mask = mask << (8 - buf.get_shift()); + buf.begin()[0] &= mask; + buf.bit_advance(8 - buf.get_shift()); + } + } + + static void padByte(buffer& buf) + { + if(buf.get_shift()) + buf.bit_advance(8 - buf.get_shift()); + } + + static bool put(const u8* in, size_t len, buffer& buf, u8 trail_bitsqty) + { + if (len) + { + if (trail_bitsqty) + { + buf.putBytes(in, len - 1); + u8 last_byte = in[len - 1]; + last_byte = last_byte >> (8 - trail_bitsqty); + return put(last_byte, trail_bitsqty, buf); + } + buf.putBytes(in, len); + } + return true; + } +}; + +} //end: namespace asn + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp new file mode 100644 index 0000000..008be98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/chunked_allocator.hpp @@ -0,0 +1,84 @@ +#pragma once + +/******************************************************************************* +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include //std::bad_alloc +#include +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +template +class chunked_allocator +{ +public: + using allocator_t = ALLOC; + + chunked_allocator() + { + put_chunk(new_chunk()); + } + + template + decltype(auto) emplace_back(TSEQ& v) + { + try + { + return v.emplace_back(m_allocator); + } + catch (std::bad_alloc const&) + { + put_chunk(new_chunk()); + return v.emplace_back(m_allocator); + } + } + + uint8_t* alloc_bytes(std::size_t sz) + { + //TODO: unify allocation: now it returns nullptr instead of throw! + auto* ret = m_allocator.alloc_bytes(sz); + if (!ret) + { + put_chunk(new_chunk()); + ret = m_allocator.alloc_bytes(sz); + } + return ret; + } + +private: + static constexpr std::size_t CHUNK_SIZE = 32*1024; + using chunk_t = std::array; + using chunks_t = std::list; + + chunk_t& new_chunk() { return m_chunks.emplace_back(); } + void put_chunk(chunk_t& c) { m_allocator.reset(c.data(), c.size()); } + + + allocator_t m_allocator; + chunks_t m_chunks; +}; + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp new file mode 100644 index 0000000..e8e787d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/constraints.hpp @@ -0,0 +1,140 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +using bound_t = int64_t; + +enum class constraint_type : uint8_t +{ + UNCONSTRAINED, + CONSTRAINED, + SEMICONSTRAINED, + CONSTRAINED_EXTENDED, + SEMICONSTRAINED_EXTENDED +}; + +template +struct span +{ + static_assert(UB >= LB, "UPPER >= LOWER"); + static constexpr bound_t lower_bound = LB; + static constexpr bound_t upper_bound = UB; +}; + +template +struct pair +{ + T const lower_bound; + T const upper_bound; +}; + +template +struct one : span {}; + +struct max : one::max()> {}; +struct min : one::min()> {}; + +static constexpr bound_t MAX = std::numeric_limits::max(); +static constexpr bound_t MIN = std::numeric_limits::min(); + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = std::min({RANGE::lower_bound...}); + static constexpr bound_t upper_bound = std::max({RANGE::upper_bound...}); + + static constexpr constraint_type type = + (Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED : + (Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED : + (Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED : constraint_type::UNCONSTRAINED; + + static constexpr bool is_signed = lower_bound < 0; + + static constexpr bound_t num_spans = static_cast(sizeof...(RANGE)); + static constexpr pair bounds[] = {{RANGE::lower_bound, RANGE::upper_bound}...}; + + using boundary_type = bound_t; + + static constexpr bool is_extended(bound_t val) + { + for (bound_t i = 0; i < num_spans; ++i) + { + auto const& p = bounds[i]; + if (val <= p.upper_bound) + { + if(val < p.lower_bound) + return true; + return false; + } + } + return true; + } +}; + +template +constexpr pair constraints::bounds[]; + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr constraint_type type = constraint_type::UNCONSTRAINED; + static constexpr bound_t lower_bound = std::numeric_limits::min(); + static constexpr bound_t upper_bound = std::numeric_limits::max(); + + static constexpr bool is_extended(bound_t val) {return true;} +}; + +/*************************************************************************************** +* RANGE for sequences +***************************************************************************************/ +template +struct seq_range +{ + static_assert(Extended || TotalNumEntries > 0, "TotalNumEntries must be > 0"); + static_assert(NumExtEntries <= TotalNumEntries, "NumExtEntries must be <= TotalNumEntries"); + + static constexpr constraint_type type = Extended ? constraint_type::CONSTRAINED_EXTENDED : constraint_type::CONSTRAINED; + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = 0; + static constexpr bound_t upper_bound = TotalNumEntries - NumExtEntries - 1; + static constexpr bound_t default_value = lower_bound; + static constexpr bound_t total_num_entries = TotalNumEntries; + + using boundary_type = bound_t; + using value_type = uint32_t; +}; + +} // namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp new file mode 100644 index 0000000..9cbcd42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/elements.hpp @@ -0,0 +1,565 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/constraints.hpp" +#include "asn/identifier.hpp" + +namespace asn { + +enum class element_type : uint8_t +{ + T_BOOLEAN + ,T_INTEGER + ,T_ENUMERATED + ,T_REAL + ,T_BITSTRING + ,T_OCTETSTRING + ,T_NULL + ,T_SEQUENCE + ,T_SEQUENCE_OF + ,T_SET + ,T_SET_OF + ,T_CHOICE + ,T_OBJECTIDENTIFIER + ,T_OBJFIELD_FTV + ,T_OBJFIELD_TF +}; + +/*************************************************************************************** +* BASE +***************************************************************************************/ + +struct base +{ + static constexpr bool optional = false; + static constexpr bool extension = false; + + static constexpr char const* name() {return "";} + + void setpresent(bool p) {is_set = p;} + void clear() {is_set = false;} + + bool is_valid() const {return is_set;} + +protected: + base() {} + void set() {is_set = true;} +protected: + bool is_set {false}; + + base& operator=(const base&) = delete; + base (const base&) = delete; +}; + +/*************************************************************************************** +* IE_NULL +***************************************************************************************/ + +struct nulltype : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::NULL_TYPE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_NULL; + static constexpr const char* name() {return "NULL";} + + void clear() {} +}; + +/*************************************************************************************** +* T_BOOLEAN +***************************************************************************************/ + +struct boolean : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BOOLEAN), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BOOLEAN; + static constexpr const char* name() {return "BOOLEAN";} + + using value_type = bool; + + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = false; base::clear();} + +private: + value_type m_value {false}; +}; + +/*************************************************************************************** +* T_INTEGER +***************************************************************************************/ +template < class Constraint = constraints > +struct integer : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::INTEGER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_INTEGER; + static constexpr const char* name() {return "INTEGER";} + + using constraint_t = Constraint; + using value_type = int64_t; + + bool equal(value_type v) const {return m_value == v;} + + void set(value_type v) { m_value = v; base::set();} + value_type get() const { return m_value; } + + void clear() { m_value = 0; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_ENUMERATED +***************************************************************************************/ +template +struct enumerated : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::ENUMERATED), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_ENUMERATED; + static constexpr const char* name() {return "ENUMERATED";} + + using constraint_t = seq_range; + using value_type = typename constraint_t::value_type; + + bool equal(value_type v) const {return m_value == v;} + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = constraint_t::default_value; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_OCTETSTRING +***************************************************************************************/ +template< class Constraint = constraints > +struct ostring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::OCTET_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OCTETSTRING; + static constexpr const char* name() {return "OCTET STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data) : m_size(size), m_data(reinterpret_cast(data)) {} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + + using const_iterator = uint8_t const*; + const_iterator begin() const { return data(); } + const_iterator end() const { return begin() + size(); } + + void assign(void const* p, size_t sz) { m_data = static_cast(p); m_size = sz; } + + private: + const uint8_t* m_data{ 0 }; + size_t m_size{ 0 }; + }; + + value_type const& get() const { return m_value; } + + //Use std::string, std::vector or IE_OSTR::value_type + template value_type const& set(T const& tval) + { + set(tval.size(), tval.data()); + base::set(); + return m_value; + } + + void set(size_t size, void const* data) + { + m_value.assign(data, size); + base::set(); + } + + template + ostring& emplace(AT& allocator, size_t size, uint8_t const * data_in) + { + if(size) + { + base::clear(); + uint8_t* data_out = allocator.alloc_bytes(size); + if (data_out) + { + memcpy(data_out, data_in, size); + set(size, data_out); + } + } + else + base::set(); + return *this; + } + + template + ostring& emplace(AT& allocator, T const& tval) + { + return emplace(allocator, tval.size(), reinterpret_cast(tval.data())); + } + + void clear() { m_value = value_type{}; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_BITSTRING +***************************************************************************************/ +template > +struct bstring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BIT_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BITSTRING; + static constexpr const char* name() {return "BIT STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data, size_t bitqty) : m_size(size), m_data(reinterpret_cast(data)), m_bitqty(bitqty){} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + size_t bitqty() const { return m_bitqty; } + + void assign(void const* p, size_t sz, size_t bits) { m_data = static_cast(p); m_size = sz; m_bitqty = bits; } + + private: + const uint8_t* m_data{ nullptr }; + size_t m_size{ 0 }; + size_t m_bitqty{ 0 }; + }; + + value_type const& get_buffer() const { return m_value; } + + size_t get_bitqty() const { return m_value.bitqty(); } + + //Use std::string, std::vector or IE_BSTR::value_type + template value_type const& set_buffer(T& tval, size_t bitqty) + { + m_value.assign(tval.data(), tval.size(), bitqty); + base::set(); + return m_value; + } + + void set_buffer(size_t bitqty, const uint8_t* data) + { + m_value.assign(data, (bitqty +7) >> 3, bitqty); + base::set(); + } + + template + bstring& emplace_buffer(AT& allocator, size_t bitqty, uint8_t const * data_in) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + memcpy(data_out, data_in, size); + set_buffer(bitqty, data_out); + return *this; + } + + void clear() { m_value = value_type{}; base::clear();} + + uint64_t get_number() const + { + uint64_t retval{0}; + size_t i = 0; + for(; i < m_value.size() - 1; ++i) + { + retval <<= 8; + retval |= m_value.data()[i]; + } + + uint8_t shift = m_value.bitqty() % 8; + if (shift) + { + retval <<= shift; + } + else + { + retval <<= 8; + } + + retval |= m_value.data()[i]; + + return retval; + } + + template + void set_number(AT& allocator, size_t bitqty, uint64_t data) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + + const uint8_t shift = bitqty % 8; + if (shift) + { + data_out[size-1] = data & (0xFF >> (8 - shift)); + data >>= shift; + } + else + { + data_out[size-1] = data & (0xFF); + data >>= 8; + } + + for (size_t i = 1; i <= size - 1; i++) + { + data_out[size-1-i] = data & (0xFF); + data >>= 8; + } + + m_value.assign(data_out, size, bitqty); + base::set(); + } + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_CHOICE +***************************************************************************************/ +template +struct choice : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::CHOICE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_CHOICE; + static constexpr const char* name() {return "CHOICE";} + + using constraint_t = seq_range; + using index_type = size_t; + using value_type = size_t; + + static constexpr index_type fst_index = 1; + static constexpr index_type ext_index = fst_index + TotalNumEntries; + + static index_type normalize(index_type idx) {return idx - fst_index;} + static index_type denormalize(index_type idx) {return idx + fst_index;} +}; + +/*************************************************************************************** +* T_SEQUENCE +***************************************************************************************/ +template +struct sequence : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE; + static constexpr const char* name() {return "SEQUENCE";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; + +}; + +/*************************************************************************************** +* T_SEQUENCE_OF +***************************************************************************************/ +template > +struct sequenceof : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE_OF; + static constexpr const char* name() {return "SEQUENCE OF";} + + struct value_type : T, boost::intrusive::list_base_hook< boost::intrusive::link_mode > + { + value_type(){} + private: + value_type& operator=(const value_type&) = delete; + value_type (const value_type&) = delete; + }; + + using values_t = boost::intrusive::list>; + using constraint_t = Constraint; + using element_t = T; + + void clear() { m_list.clear(); base::clear();} + size_t size() const { return m_list.size(); } + template + void sort(Predicate const& p) { m_list.sort(p); } + + template + void set(V& v) {for(auto & e : v) {m_list.push_back(e);} base::set();} + + void push_back(value_type& v) { m_list.push_back(v); base::set();} + + template //Note: Allocator must return word alligned buffer! + T& emplace_back(AT& allocator) + { + uint8_t* data = allocator.alloc_bytes(sizeof(value_type)); + if(!data) + throw std::bad_alloc(); + value_type* v = new (data) value_type; + push_back(*v); + return *v; + }; + + using iterator = typename values_t::iterator; + iterator begin() { return m_list.begin(); } + iterator end() { return m_list.end(); } + + using const_iterator = typename values_t::const_iterator; + const_iterator begin() const { return m_list.begin(); } + const_iterator end() const { return m_list.end(); } + + sequenceof(){} + +private: + values_t m_list; +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct fixedtypefield : T +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_FTV; + + T& ref_nested() {return *this;} + T const & ref_nested() const {return *this;} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct typefield : base +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_TF; + static constexpr const char* name() {return "type-field";} + + typefield& ref_nested() {return *this;} + typefield const& ref_nested() const {return *this;} + + bool is_unknown() const {return false;} +}; + +/*************************************************************************************** +* T_OBJECTIDENTIFIER +***************************************************************************************/ +struct oid : ostring<> +{ + using asn_identifier_t = identifier(tag_rvalue_t::OBJECT_IDENTIFIER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OBJECTIDENTIFIER; + static constexpr const char* name() {return "OBJECT IDENTIFIER";} +}; + +/*************************************************************************************** +* T_PRINTABLESTRING +***************************************************************************************/ +template > +struct printable_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::PrintableString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "PrintableString";} +}; + +/*************************************************************************************** +* T_IA5_STRING +***************************************************************************************/ +template > +struct ia5_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::IA5String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_GRAPHIC_STRING +***************************************************************************************/ +template > +struct graphic_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::GraphicString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_UTF8_STRING +***************************************************************************************/ +template > +struct utf8_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::UTF8String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "UTF8String";} +}; + +/*************************************************************************************** +* T_SET +***************************************************************************************/ +template +struct set : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET; + static constexpr const char* name() {return "SET";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; +}; + +/*************************************************************************************** +* T_SET_OF +***************************************************************************************/ +template > +struct setof : sequenceof +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET_OF; + static constexpr const char* name() {return "SET OF";} +}; +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp new file mode 100644 index 0000000..8a7285a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/error_context.hpp @@ -0,0 +1,267 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + + +// Local Includes: Application specific classes, functions, and libraries +#include "type_defs.h" + +namespace asn { + +class error_context +{ +public: + enum error_e : u8 + { + SUCCESS = 0 + ,INCORRECT_LENGTH_BITS + ,INCORRECT_LENGTH_BYTES + ,ALIGNMENT + ,INCORRECT_VALUE + ,INCORRECT_CHOICE_TAG + ,INCORRECT_IE_TAG + ,VALUE_OUT_OF_RANGE + ,SIZE_OUT_OF_RANGE + ,ALLOC_NO_MEMORY + ,NO_OBJECT + ,NO_MANDATORY + ,WRONG_END_OF_CONTENT + ,UNSUPPORTED + ,UNSPECIFIED + }; + + explicit operator bool() const { return SUCCESS == m_error; } + + void reset() { m_error = SUCCESS; } + error_e getError() const { return m_error; } + + char const* toString() const; + + void alignmentError(u32 shift); + void lengthErrorBytes(u32 bytes_left, u32 requested); + void lengthErrorBits(u32 bits_left, u32 requested); + void valueError(u32 got, u32 expected, u32 ofs); + void tagError(u32 tag); + void valueRangeError(size_t value); + void sizeRangeError(size_t size, size_t low = 0, size_t high = 0); + void allocatorNoMem(size_t bytes_left, size_t bytes_required); + void errorUnsupported() {setError(UNSUPPORTED);} + void errorUnspecified() {setError(UNSPECIFIED);} + void errorNoObject(const char* container_name_); + void errorNoMandatory(); + void errorWrongEndOfContent() {setError(WRONG_END_OF_CONTENT);} + + //to inline in choice decoder: TODO: think of changing it! + void choiceError(char const* name, u32 id) + { + m_name = name; + m_param[0] = id; + setError(INCORRECT_CHOICE_TAG); + } + //Name of the being processed IE + void ie_name(const char* name) { m_ie_name = name; } + char const* ie_name() const { return m_ie_name; } + + void container_name(const char* name) { m_container_name = name; } + char const* container_name() const { return m_container_name; } + + +private: + void setError(error_e n) { m_error = n; } + + enum { MAX_PARAMS = 3 }; + error_e m_error; + char const* m_name; + char const* m_ie_name {""}; + char const* m_container_name {""}; + size_t m_param[MAX_PARAMS]; + +}; + +inline +void error_context::errorNoObject(const char* c_name) +{ + container_name(c_name); + m_name = m_ie_name; + setError(NO_OBJECT); +} + +inline +void error_context::errorNoMandatory() +{ + m_name = m_ie_name; + setError(NO_MANDATORY); +} + +inline +void error_context::alignmentError(u32 shift) +{ + m_name = m_ie_name; + m_param[0] = shift; + setError(ALIGNMENT); +} + +inline +void error_context::lengthErrorBytes(u32 bytes_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BYTES); +} + +inline +void error_context::lengthErrorBits(u32 bits_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bits_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BITS); +} + +inline +void error_context::valueError(u32 got, u32 expected, u32 ofs) +{ + m_name = m_ie_name; + m_param[0] = got; + m_param[1] = expected; + m_param[2] = ofs; + setError(INCORRECT_VALUE); +} + +inline +void error_context::tagError(u32 tag) +{ + m_name = m_ie_name; + m_param[0] = tag; + setError(INCORRECT_IE_TAG); +} + +inline +void error_context::valueRangeError(size_t value) +{ + m_name = m_ie_name; + m_param[0] = value; + setError(VALUE_OUT_OF_RANGE); +} + +inline +void error_context::sizeRangeError(size_t size, size_t low, size_t high) +{ + m_name = m_ie_name; + m_param[0] = size; + m_param[1] = low; + m_param[2] = high; + setError(SIZE_OUT_OF_RANGE); +} + +inline +void error_context::allocatorNoMem(size_t bytes_left, size_t bytes_required) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = bytes_required; + setError(ALLOC_NO_MEMORY); +} + +inline +char const* error_context::toString() const +{ + static char sz[256]; + + switch (m_error) + { + case SUCCESS: + return "OK"; + + case INCORRECT_LENGTH_BITS: + snprintf(sz, sizeof(sz)-1, "%zu bits left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + + case INCORRECT_LENGTH_BYTES: + snprintf(sz, sizeof(sz)-1, "%zu bytes left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + case ALIGNMENT: + snprintf(sz, sizeof(sz)-1, "misaligned '%s::%s': shift %zu bits", m_container_name, m_name, m_param[0]); + break; + + case INCORRECT_VALUE: + snprintf(sz, sizeof(sz)-1, "Wrong value of '%s::%s' at %zu: 0x%zX expected=0x%zX", m_container_name, m_name, m_param[2], m_param[0], m_param[1]); + break; + + case INCORRECT_CHOICE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong choice tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case INCORRECT_IE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case VALUE_OUT_OF_RANGE: + snprintf(sz, sizeof(sz) - 1, "Value is out of the range '%s::%s': value: %zu", m_container_name, m_name, m_param[0]); + break; + + case SIZE_OUT_OF_RANGE: + if (m_param[2]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range [%zu, %zu] in '%s::%s'", m_param[0], m_param[1], m_param[2], m_container_name, m_name); + } + else + { + if (m_param[1]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is less than %zu in '%s::%s'", m_param[0], m_param[1], m_container_name, m_name); + } + else + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range in '%s::%s'", m_param[0], m_container_name, m_name); + } + } + break; + + case ALLOC_NO_MEMORY: + snprintf(sz, sizeof(sz) - 1, "Allocator memory has ended '%s::%s': left bytes: %zu; required bytes: %zu", m_container_name, m_name, m_param[0], m_param[1]); + break; + case NO_OBJECT: + snprintf(sz, sizeof(sz) - 1, "Component relation constraint violated '%s::%s'", m_container_name, m_name); + break; + case NO_MANDATORY: + snprintf(sz, sizeof(sz) - 1, "no mandatory '%s::%s' is found", m_container_name, m_name); + break; + case UNSUPPORTED: + snprintf(sz, sizeof(sz) - 1, "unsupported object '%s::%s' is found", m_container_name, m_name); + return "unsupported"; + break; + case UNSPECIFIED: + snprintf(sz, sizeof(sz) - 1, "unspecified object '%s::%s' is found", m_container_name, m_name); + return "unspecified"; + break; + case WRONG_END_OF_CONTENT: + snprintf(sz, sizeof(sz) - 1, "wrong end of content in object '%s::%s'", m_container_name, m_name); + return "wrong end of content"; + break; + } + + return sz; +} + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp new file mode 100644 index 0000000..9b603fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/identifier.hpp @@ -0,0 +1,97 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +enum class class_type_t : uint8_t +{ + UNIVERSAL + ,APPLICATION + ,CONTEXT + ,PRIVATE + ,UNSPECIFIED //reserved for internal use +}; + +enum class tag_type_t : uint8_t +{ + EXPLICIT + ,IMPLICIT + ,AUTOMATIC +}; + +using tag_value_t = uint64_t; + +template +struct identifier +{ + static constexpr class_type_t class_type = CT; + static constexpr tag_value_t tag_value = TAG; + static constexpr tag_type_t tag_type = TT; +}; + + +enum class tag_rvalue_t : tag_value_t +{ + BOOLEAN = 1 + ,INTEGER = 2 + ,BIT_STRING = 3 + ,OCTET_STRING = 4 + ,NULL_TYPE = 5 + ,OBJECT_IDENTIFIER = 6 + ,REAL = 9 + ,ENUMERATED = 10 + ,SEQUENCE = 16 + ,SEQUENCE_OF = 16 + ,UTF8String = 12 + ,NumericString = 18 + ,IA5String = 22 + ,VisibleString = 26 + ,DATE = 31 + ,TIME_OF_DAY = 32 + ,DATE_TIME = 33 + ,DURATION = 34 + ,ObjectDescriptor = 7 + ,EXTERNAL = 8 + ,EMBEDDED_PDV = 11 + ,OID_IRI = 35 + ,RELATIVE_OID_IRI = 36 + ,SET = 17 + ,SET_OF = 17 + ,UTCTime = 23 + ,GeneralizedTime = 24 + ,PrintableString = 19 + ,T61String = 20 + ,VideotexString = 21 + ,GraphicString = 25 + ,GeneralString = 27 + ,UniversalString = 28 + ,CHARACTER_STRING = 29 + ,BMPString = 30 + ,ISO646String = 26 + ,TeletexString = 20 + ,CHOICE = 99 // fake id for internal use +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp new file mode 100644 index 0000000..6ba2f15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/binary_integer.hpp @@ -0,0 +1,168 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/length.hpp" + +namespace asn { +namespace per { + +template +struct BinaryIntegerLength; + +/*************************************************************************************** +* Encoding of a non-negative-binary-integer (X.691 10.3) +***************************************************************************************/ +template +struct NonnegativeBinaryInteger +{ + static void inline run(u64 val, EncoderCtx& ctx) + { + if(val) + { + size_t const len = sizeof(val) - (__builtin_clzll(val) >> 3); + + BinaryIntegerLength< Range >::run(ctx, len); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 buff[len]; + size_t shift = (len - 1) << 3; + for(size_t i = 0; i < len; ++i) + { + buff[i] = static_cast(val >> shift); + shift -= 8; + } + + ctx.refBuffer().putBytes(buff, len); + } + else + { + BinaryIntegerLength< Range >::run(ctx, 1); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(0); + } + } + template + static void inline run(T& retval, DecoderCtx& ctx, bool extended_val) + { + retval = 0; + size_t len = (size_t)BinaryIntegerLength< Range >::run(ctx, extended_val); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(len); + + if (data) + { + for (size_t i = 0; i < len; ++i) + { + retval = retval << 8; + retval |= data[i]; + } + } + } +}; + +/*************************************************************************************** +* Encoding of a 2's-complement-binary-integer (X.691 10.4) +***************************************************************************************/ + +template +struct TwosComplementBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u64 val = ie.get(); + u64 tval = val; + u64 mask = static_cast(-128); + u8 len = 1; + u8 i = 7; + + u8 buf[8]; + + while (len < 8) + { + buf[i] = static_cast(tval); + if (!(val & mask) || (val & mask) == mask) + break; + mask = mask << 8; + tval = tval >> 8; + len++; + i--; + } + + ctx.refBuffer().putByte(len) && ctx.refBuffer().putBytes(&buf[i], len); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = nullptr; + typename IE::value_type val = 0; + + u8 const* len = ctx.refBuffer().getBytes(1); + + if (len && (*len) <= 8 && (data = ctx.refBuffer().getBytes(*len))) + { + for (u8 i = 0; i < *len; ++i) + { + val = val << 8; + val |= data[i]; + } + } + ie.set(val); + } +}; + +/*************************************************************************************** +* Encoding of a normally small non-negativebinary integer (X.691 10.6) +***************************************************************************************/ +template +struct NormallySmallNonnegativeBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx, typename IE::constraint_t::boundary_type val) + { + if (val <= 63) + { + Tools::bit_accessor::put(static_cast(val), 7, ctx.refBuffer()); //7 bits ('0' indicator + value) + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); //1 bit ('1' indicator) + NonnegativeBinaryInteger::run(val, ctx); + } + } + static TValue inline run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) { + TValue rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, true); + return rval; + } + return Tools::bit_accessor::get(6, ctx.refBuffer()); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp new file mode 100644 index 0000000..5d25599 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/bstring.hpp @@ -0,0 +1,279 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +//15.11 Default +template +struct BitstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +//15.8 Zero length +template +struct BitstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//15.9 Up to 6 bits, fixed length +template +struct BitstringNoExt 0)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[0])) & (0xFF >> (8 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(1); + if (data) + { + data[0] = Tools::bit_accessor::get(IE::constraint_t::upper_bound, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; +template +struct BitstringNoExt 8)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(ie.get_buffer().data()[0], 8, ctx.refBuffer()); + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[1])) & (0xFF >> (16 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(2); + if (data) + { + data[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data[1] = Tools::bit_accessor::get(IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 2); + } +}; + +//15.10 More than 6 bits, up to 64K bits, fixed length +template +struct BitstringNoExt 16)) +>> +{ + constexpr static size_t len_bytes = (IE::constraint_t::upper_bound + 7) >> 3; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + if (ie.get_buffer().size() != len_bytes) + { + ctx.refErrorCtx().sizeRangeError(ie.get_buffer().size(), len_bytes, len_bytes); + } + else + { + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = IE::constraint_t::upper_bound % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(IE::constraint_t::upper_bound, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +/**************************************************/ + +template +struct Bitstring; + +//15.6 : Extension present +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + + if (ie.get_bitqty() <= IE::constraint_t::upper_bound && ie.get_bitqty() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + BitstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = LengthDeterminant::run(ctx, true); + const size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + else + BitstringNoExt::run(ie, ctx); + } +}; + +//15.7 : No extension +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp new file mode 100644 index 0000000..f0d115c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/choice.hpp @@ -0,0 +1,136 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +Choice +*********************************************************************************/ + +/**************************************************/ +//22.6-7 Default +template +struct ChoiceNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ConstrainedWholeNumber::run(ctx, IE::normalize(ie.get_index())); + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::index_type idx = ConstrainedWholeNumber::run(ctx); + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } +}; + +//22.4 One alternative +template +struct ChoiceNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(0), ve); + } +}; + +/**************************************************/ + +template +struct Choice; + +//22.5 Extension present +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto idx = IE::normalize(ie.get_index()); + if (idx <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ChoiceNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, idx - IE::constraint_t::upper_bound - 1); + OpenTypeVisitorEncoder ve{ ctx }; + ie.encode(ve); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + typename IE::index_type idx = IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx); + if (idx >= IE::constraint_t::total_num_entries) + { + ie.set_unknown(); + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + else + { + OpenTypeVisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } + } + else + ChoiceNoExt::run(ie, ctx); + } +}; + +//22.6 No extension +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp new file mode 100644 index 0000000..176792a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/codec.hpp @@ -0,0 +1,325 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/elements.hpp" +#include "asn/per/context.hpp" +#include "asn/per/length.hpp" +#include "asn/per/integer.hpp" +#include "asn/per/enumerated.hpp" +#include "asn/per/ostring.hpp" +#include "asn/per/bstring.hpp" +#include "asn/per/sequence_of.hpp" +#include "asn/per/sequence.hpp" +#include "asn/per/choice.hpp" +#include "asn/per/visitor.hpp" +#include "asn/per/oid.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +pack +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.691 11) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get()), 1, ctx.refBuffer()); + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(0 != Tools::bit_accessor::get(1, ctx.refBuffer())); + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.691 12) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Integer::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Integer::run(ie, ctx); + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.691 13) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } +}; +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.691 15) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Bitstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Bitstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.691 16) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Octetstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Octetstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.691 17) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) { /*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.setpresent(true); + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.691 18) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + Seq::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ctx.m_container = &ie; + Seq::run(ie, ctx); + ctx.m_container = nullptr; + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.691 19) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + SequenceOf::run(ie, ctx); + + for (auto& elem : ie) + Element::run(elem, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + SequenceOf::run(ie, ctx); + + for (auto & elem : ie) + Element::run(elem, ctx); + } +}; +/*************************************************************************************** +* SET: Encoding the set type (X.691 20) +***************************************************************************************/ + + +/*************************************************************************************** +* SET OF: Encoding the set-of type (X.691 21) +***************************************************************************************/ + +/*************************************************************************************** +* CHOICE: Encoding the choice type (X.691 22) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(ie.is_valid()) + { + ctx.container_name(IE::name()); + Choice::run(ie, ctx); + } + else + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + ctx.m_container = &ie; + Choice::run(ie, ctx); + ctx.m_container = nullptr; + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type (X.691 23) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Oid::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Oid::run(ie, ctx); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + if (IE_TYPE != element_type::T_SEQUENCE && !ie.is_valid()) + { + ctx.refErrorCtx().errorNoMandatory(); + } + else + ElementType::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + if (ctx) + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + ElementType::run(ie, ctx); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp new file mode 100644 index 0000000..5b92100 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/common.hpp @@ -0,0 +1,58 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "type_defs.h" + +#include "asn/buffer.hpp" +#include "context.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace per { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; +}; + +template +struct Element; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp new file mode 100644 index 0000000..2a5d7e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/context.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + typedef u64 map_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + m_map = 0; + m_container = nullptr; + } + + bool map_elm() + { + //m_map = (m_map << 1) | (m_map >> (sizeof(m_map)*CHAR_BIT - 1)); + //return m_map & 1u; + + constexpr map_type mask = ((map_type)1) << (sizeof(map_type)*CHAR_BIT - 1); + + bool rv = m_map & mask; + m_map = m_map << 1; + + return rv; + } + + map_type set_map(map_type map) + { + map_type rval = m_map; + m_map = map; + return rval; + } + + map_type get_map() const {return m_map;} + + //Pointer to container (SEQ | CHO) + void* m_container{ nullptr }; + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + //Optional or Extension elements' presence bitmap. Used in sequences + map_type m_map{ 0 }; + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp new file mode 100644 index 0000000..c2e8851 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/enumerated.hpp @@ -0,0 +1,79 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +template +struct Enumerated; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() > IE::constraint_t::upper_bound) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, ie.get() - IE::constraint_t::upper_bound - 1); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + ie.set(IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx)); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp new file mode 100644 index 0000000..7bb93c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/integer.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +template +struct Integer; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Integer > +{ + //X.691 12.1 + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + //X.691 12.2 + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + //X.691 12.2.4, 12.2.6, 10.8s + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +// (X.691 10.7) +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(IE::constraint_t::lower_bound + val); + } +}; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(val + IE::constraint_t::lower_bound); + } + } +}; + +/*************************************************************************************** +* Encoding of an unconstrained whole number (X.691 10.8) +***************************************************************************************/ + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp new file mode 100644 index 0000000..488a830 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/length.hpp @@ -0,0 +1,238 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +* Encoding of a length determinant (X.691 10.9) +*********************************************************************************/ + +template +struct LengthDeterminant; + +struct LengthDeterminantDefault //Unconstrained length +{ + static u8 bytes_needed(size_t len) + { + if (len <= 127) + return 1; + return 2; + } + + static void run(EncoderCtx& ctx, size_t len) + { + if (len <= 127) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(len)); + } + else if (len < 16384) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + len += 0x8000; + ctx.refBuffer().putByte(static_cast(len >> 8)); + ctx.refBuffer().putByte(static_cast(len)); + } + else + { + //todo: 10.9.3.8.1 for len >= 16K + } + } + static size_t run(DecoderCtx& ctx) + { + size_t rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + { + if (*data & 0x80) + { + rval = (*data & 0x7F) << 8; + data = ctx.refBuffer().getBytes(1); + if (data) + rval |= *data; + } + else + rval = *data; + } + return rval; + } +}; + +//10.9.3.3 +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return ConstrainedWholeNumber::run(ctx); + } +}; +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + if (len > Range::upper_bound || len < Range::lower_bound) + LengthDeterminantDefault::run(ctx, len); + else + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + if (extended_len) + return LengthDeterminantDefault::run(ctx); + + return ConstrainedWholeNumber::run(ctx); + } +}; + +template +struct LengthDeterminant= 65536) > > +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +//10.9.3.4 : for "normally small length". bitmaps, sequence types +template +struct NormallySmallLength; + +template +struct NormallySmallLength > +{ + static_assert(Length > 0, "NormallySmallLength must be > 0"); + + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put((u8)(Length - 1), 7, ctx.refBuffer()); + } + static size_t run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + return LengthDeterminantDefault::run(ctx); + return Tools::bit_accessor::get(6, ctx.refBuffer()) + 1; + } +}; + +template +struct NormallySmallLength 64)> > +{ + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminantDefault::run(ctx, Length); + } +}; + +/* +* BinaryIntegerLength +*/ + +template +struct NBytes +{ + static constexpr bound_t value = std::log2( N ) / 8 + 1; +}; + +template +struct NBytes > +{ + static constexpr bound_t value = 1; +}; + +template +struct NRange +{ + static constexpr bound_t lower_bound = B1; + static constexpr bound_t upper_bound = B2; +}; + +template +struct NRange > +{ + static constexpr bound_t lower_bound = B2; + static constexpr bound_t upper_bound = B1; +}; + +template +struct BinaryIntegerLength +{ + typedef NRange< + NBytes::value, + NBytes::value + > nrange; + + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr bound_t lower_bound = nrange::lower_bound; + static constexpr bound_t upper_bound = nrange::upper_bound; + + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminant::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminant::run(ctx, extended_len); + } +}; + +template +struct BinaryIntegerLength> +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp new file mode 100644 index 0000000..c4f222a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/oid.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct Oid +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + size_t len = ie.get().size(); + + if (len > 255) + { + ctx.refErrorCtx().valueError(len, 0, 0); + } + else + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(reinterpret_cast(&len), 1); + ctx.refBuffer().putBytes(ie.get().data(), len); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + uint8_t const* data_in = ctx.refBuffer().getBytes(1); // length + + if(data_in) + { + size_t len = *data_in; + data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp new file mode 100644 index 0000000..4d601bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/ostring.hpp @@ -0,0 +1,209 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template < class IE, class Enable = void> +struct Octetstring; + +//16.8 Default +template +struct OctetstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + + } +}; + +//16.5 Zero length +template +struct OctetstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//16.6 Up to two octets, fixed length +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(1); + if (data_out) { + data_out[0] = data_in; + ie.set(1, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; + +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + Tools::bit_accessor::put(static_cast(ie.get().data()[1]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in[2]; + data_in[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data_in[1] = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(sizeof(data_in)); + if (data_out) { + data_out[0] = data_in[0]; + data_out[1] = data_in[1]; + ie.set(sizeof(data_in), data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, sizeof(data_in)); + } +}; + +//16.7 More than 2 octets, up to 64K, fixed length +template +struct OctetstringNoExt 2)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), ie.get().size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = (size_t)IE::constraint_t::upper_bound; + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } +}; + +/**************************************************/ + +//16.3 : Extension present +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + if (size <= IE::constraint_t::upper_bound && size >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + OctetstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + size_t len = LengthDeterminant::run(ctx, true); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } + else + OctetstringNoExt::run(ie, ctx); + } +}; + +//16.4 : No extension +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + else + { + OctetstringNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + OctetstringNoExt::run(ie, ctx); + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp new file mode 100644 index 0000000..e533e80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence.hpp @@ -0,0 +1,568 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/****************************************************************** + * Adapter + *****************************************************************/ +template +struct Adapter +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } +}; +template +struct Adapter> +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + VisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; +template +struct Adapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + if(ie.is_unknown()) //skip the unknown Open Type + { + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + } +}; + +/****************************************************************** + * RootEncoder + *****************************************************************/ +template +struct RootEncoder +{ + RootEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + { + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + Adapter::run(ie, m_ctx, m_cont); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * RootDecoder + *****************************************************************/ +template +struct RootDecoder +{ + RootDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + { + if(IE::optional) + { + if(m_ctx.map_elm()) + { + ie.setpresent(true); + Adapter::run(ie, m_ctx, m_cont); + } + else + ie.setpresent(false); + } + else + { + Adapter::run(ie, m_ctx, m_cont); + } + } + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtEncoder + *****************************************************************/ +template +struct ExtEncoder +{ + explicit ExtEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Adapter::run(ie, m_ctx, m_cont); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + return false; + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtDecoder + *****************************************************************/ +template +struct ExtDecoder +{ + explicit ExtDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if (m_ctx.map_elm()) + { + ie.setpresent(true); + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Adapter::run(ie, m_ctx, m_cont); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + buffer.set_end(end); + } + else + { + ie.setpresent(false); + } + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * SeqMap + *****************************************************************/ +template +struct SeqMap; + +/* +template +struct SeqMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + u8 k = IE::num_opt_entries / 8; // num of full bytes in a seq map mask + u8 fb_bits = IE::num_opt_entries % 8; // num of first byte bits (without padding) + + if (fb_bits) { + // Put a part of a first byte (without padding, only seq map own bits) + Tools::bit_accessor::put((u8)(val >> 8*k), fb_bits, ctx.refBuffer()); + } + + // Put other bytes (full bytes) + for (int i = (k-1); i >= 0; i--) { + Tools::bit_accessor::put((u8)(val >> 8*i), 8, ctx.refBuffer()); + } + } + + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + uint num_opts = IE::num_opt_entries; + u64 res = 0; + u8 k = 1; + u8 lb_bits = IE::num_opt_entries % 8; // num of last byte bits (without padding) + + while (num_opts >= 8) { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(8, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + + k++; + num_opts -= 8; + } + + if (lb_bits > 0) { + // (8 - lb_bits) - padding in a last byte + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k + 8 - lb_bits; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(lb_bits, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + } + + return res; + } +} +; +*/ + +template +struct SeqMap > //todo: to add code for more than 8 optional elements +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + Tools::bit_accessor::put((u8)val, IE::num_opt_entries, ctx.refBuffer()); + } + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - IE::num_opt_entries; + DecoderCtx::map_type rval = Tools::bit_accessor::get(IE::num_opt_entries, ctx.refBuffer()); + rval = rval << shift; + return rval; + } +}; + +/****************************************************************** + * SeqExtMap + *****************************************************************/ +template +struct SeqExtMap +{ + static void inline run(EncoderCtx& ctx, size_t val) {} + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t len = NormallySmallLength<1>::run(ctx); + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - len; + u8 tmp; + DecoderCtx::map_type rval{ 0 }; + u8 val; + + while (len) { + tmp = len > 8 ? 8 : (u8)len; + val = Tools::bit_accessor::get(tmp, ctx.refBuffer()); + rval = rval << tmp; + rval |= val; + len -= tmp; + } + rval = rval << shift; + return rval; + } +}; + +template +struct SeqExtMap 0)) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + Tools::bit_accessor::put((u8)val, NumExtEntries, ctx.refBuffer()); + } +}; + +template +struct SeqExtMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + + size_t len = NumExtEntries; + size_t tmp; + + while (len) { + tmp = len > 8 ? 8 : len; + Tools::bit_accessor::put((u8)val, tmp, ctx.refBuffer()); + val = val >> tmp; + len -= tmp; + } + } +}; + +/****************************************************************** + * SeqMapBuilder + *****************************************************************/ +struct SeqMapBuilder +{ + SeqMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(!IE::extension && IE::optional) + { + m_map = m_map << 1; + if(ie.is_valid()) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqExtMapBuilder + *****************************************************************/ +struct SeqExtMapBuilder +{ + SeqExtMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(IE::extension) + { + m_map = m_map << 1; + if(!IE::optional || (IE::optional && ie.is_valid())) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqNoExtDefault + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExtDefault +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + RootEncoder ve(ctx, ie); + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx, DecoderCtx::map_type map = 0) + { + RootDecoder ve(ctx, ie); + + DecoderCtx::map_type old_map = ctx.set_map(map); + ie.decode(ve); + ctx.set_map(old_map); + } +}; + +/****************************************************************** + * SeqNoExt + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } +}; + +//18.2 OPT/DEF present within the extension root +template +struct SeqNoExt 0) > > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqMapBuilder mb(map); + ie.encode(mb); + SeqMap::run(ctx, map); + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx, SeqMap::run(ctx)); + } +}; + +/****************************************************************** + * Seq + *****************************************************************/ +template +struct Seq; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqExtMapBuilder emb(map); + ie.encode(emb); + + if (map) { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + SeqExtMap::run(ctx, map); + ExtEncoder ove(ctx, ie); + ie.encode(ove); + } + else { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + SeqNoExt::run(ie, ctx); + + auto old_map = ctx.set_map(SeqExtMap::run(ctx)); // we do not know how many exts can be received + { + ExtDecoder ove(ctx, ie); + ie.decode(ove); + + auto& buffer = ctx.refBuffer(); + while(ctx.get_map()) + { + if(ctx.map_elm()) //skip unknown extensions + { + size_t size = LengthDeterminantDefault::run(ctx); + if (buffer.getBytesLeft() < size) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + break; + } + buffer.advance(size); + } + } + } + ctx.set_map(old_map); + } + else + SeqNoExt::run(ie, ctx); + } +}; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp new file mode 100644 index 0000000..d4e21a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/sequence_of.hpp @@ -0,0 +1,156 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct SequenceOf; + +//19.6 Default +template +struct SequenceOfNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +//16.6 +template +struct SequenceOfNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + for (size_t i = 0; i < IE::constraint_t::upper_bound; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +/**************************************************/ + +//19.4 Extension present +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.size() <= IE::constraint_t::upper_bound && ie.size() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SequenceOfNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + size_t len = LengthDeterminant::run(ctx, true); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + //v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } + else + SequenceOfNoExt::run(ie, ctx); + } +}; + +//19.5-6 No extension +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (IE::constraint_t::lower_bound >= 0 && ie.size() < size_t(IE::constraint_t::lower_bound)) + { + ctx.refErrorCtx().sizeRangeError(ie.size(), size_t(IE::constraint_t::lower_bound)); + } + else + { + SequenceOfNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SequenceOfNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp new file mode 100644 index 0000000..f379044 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/visitor.hpp @@ -0,0 +1,141 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +VisitorEncoder +*********************************************************************************/ +struct VisitorEncoder +{ + explicit VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/******************************************************************************** +VisitorDecoder +*********************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Encode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorEncoder +{ + explicit OpenTypeVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Element::run(ie, m_ctx); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Decode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorDecoder +{ + explicit OpenTypeVisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Element::run(ie, m_ctx); + buffer.set_end(end); + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp new file mode 100644 index 0000000..c614998 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/per/whole_number.hpp @@ -0,0 +1,147 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +/*************************************************************************************** +* Encoding of a constrained whole number (X.691 10.5) +***************************************************************************************/ + +template +struct length_determinant; + +template +struct length_determinant > { static constexpr bound_t value = 0; }; + +template +struct length_determinant > { static constexpr bound_t value = 1; }; + +template +struct length_determinant 1) > > { static constexpr bound_t value = boost::static_log2<(R - 1)>::value + 1; }; + +/*************************************************************************************** +***************************************************************************************/ + +template +struct ConstrainedWholeNumber; + +//Bit-field case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::put(static_cast(val - Range::lower_bound), + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } + static V inline run(DecoderCtx& ctx) + { + return Range::lower_bound + Tools::bit_accessor::get( + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } +}; + +//One octet case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(val - Range::lower_bound)); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + rval = Range::lower_bound + data[0]; + return rval; + } +}; + +//Two octets case +template +struct ConstrainedWholeNumber (Range::lower_bound + 255)) && (Range::upper_bound <= (Range::lower_bound + 65535))> > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& v) + { + u64 val = static_cast(v - Range::lower_bound); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte((u8)(val >> 8)); + ctx.refBuffer().putByte((u8)val); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(2); + if (data) { + rval = data[0]; + rval = rval << 8; + rval |= data[1]; + rval += Range::lower_bound; + } + return rval; + } +}; + +//Indefinite case +template +struct ConstrainedWholeNumber Range::lower_bound + 65535) > > +{ + struct NormalizedValueRange + { + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr boundary_type lower_bound = 0; + static constexpr boundary_type upper_bound = Range::upper_bound - Range::lower_bound; + }; + + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + NonnegativeBinaryInteger::run(val - Range::lower_bound, ctx); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, false); + return rval + Range::lower_bound; + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp new file mode 100644 index 0000000..b21eaef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/printer.hpp @@ -0,0 +1,338 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" + +namespace asn{ + +/******************************************************************************** +Utility +**********************************S***********************************************/ +inline void skip_row(std::ostream* str, size_t row_shift) + //{*str << std::string(row_shift, ' ');} +{ + std::string s(row_shift, ' '); + str->write(s.data(), s.size()); +} + +inline void print_hex(std::ostream* str, size_t size, const uint8_t* data, size_t row_shift) +{ + *str << std::setfill('0') << std::hex << std::noshowbase; + for (size_t i = 0; i < size; ++i) + { + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)data[i] << " "; + if (0x0f == (i & 0x0f)) { *str << '\n'; } + } +} + +/******************************************************************************** + +Print + +*********************************************************************************/ + + +/******************************************************************************** +default implementation for IE +*********************************************************************************/ +template +struct Print; + +template +void print(IE const& ie, std::ostream& out, size_t row_shift) +{ + Print::run(ie, &out, row_shift); +} + +template +std::string get_printed(IE const& ie, size_t row_shift = 0) +{ + std::stringstream out; + print(ie, out, row_shift); + return out.str(); +} + + +/******************************************************************************** +VisitorPrinter +*********************************************************************************/ +struct VisitorPrinter +{ + VisitorPrinter(std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift) {} + + template + bool operator() (IE & ie) + { + Print::run(ie, m_pStream, m_RowShift); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; +}; + +/****************************************************************** + * PrinterAdapter + *****************************************************************/ +template +struct PrinterAdapter +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + Print::run(ie, str, row_shift); + } +}; +template +struct PrinterAdapter> +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; +template +struct PrinterAdapter > +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; + +/******************************************************************************** +SeqVisitorPrinter +*********************************************************************************/ +template +struct SeqVisitorPrinter +{ + SeqVisitorPrinter(Container const& cont, std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift), m_cont(cont) {} + + template + bool operator() (IE & ie) + { + if(!IE::optional || ie.is_valid()) + PrinterAdapter::run(ie, m_pStream, m_RowShift, m_cont); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; + Container const& m_cont; +}; + + +/******************************************************************************** +T_NULL +*********************************************************************************/ + +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +/******************************************************************************** +T_BOOLEAN +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << (ie.get() ? "true" : "false")<< std::endl; + } +}; + +/******************************************************************************** +T_INTEGER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_ENUMERATED +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_BITSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + auto& val = ie.get_buffer(); + *str << IE::name() << " = "; + + print_hex(str, val.size() - 1, val.data(), row_shift + strlen(IE::name()) + 3); + + size_t i = val.size() - 1; + uint8_t c = val.data()[i]; + uint8_t b = val.bitqty() % 8; + if (b != 0) c = c << (8 - b); + + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)c; + + *str << " (" << std::dec << val.bitqty() << " bits)" << std::endl; + + } +}; + +/******************************************************************************** +T_OCTETSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = "; + auto & val = ie.get(); + print_hex(str, val.size(), val.data(), row_shift + strlen(IE::name()) + 3); + *str << std::endl; + } +}; + +/******************************************************************************** +T_SEQUENCE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SET +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + + +/******************************************************************************** +T_CHOICE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + VisitorPrinter vp(str, row_shift+1); + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SEQUENCE_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_SET_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_OBJECTIDENTIFIER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h new file mode 100644 index 0000000..e7cc539 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/type_defs.h @@ -0,0 +1,36 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp new file mode 100644 index 0000000..ae1ad74 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/utility.hpp @@ -0,0 +1,88 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn +{ + +struct allocator +{ + allocator() = default; + + allocator(void* data, size_t size) { reset(data, size); } + + template + explicit allocator(T (&buf)[SZ]) : allocator(buf, SZ * sizeof(T)) { } + + void reset(void* data, size_t size) + { + std::size_t space = size; + m_begin = static_cast(std::align(alignment, size, data, space)); + m_end = m_begin ? m_begin + space : nullptr; + m_current = m_begin; + m_ref_counter = 0; + } + + uint8_t* alloc_bytes(std::size_t size) + { + std::size_t const esize = (size + alignment - 1) & -alignment; + if (m_current + esize > m_end) { return nullptr; } //throw std::bad_alloc(); + + uint8_t* const rval = m_current; + m_current += esize; + return rval; + } + + size_t add_ref() { return ++m_ref_counter; } + size_t release() + { + if (m_ref_counter) --m_ref_counter; + if (m_ref_counter == 0) reset(); + return m_ref_counter; + } + size_t ref_counter() const { return m_ref_counter; } +private: + //called by last release() when m_ref_counter becomes 0 + void reset() + { + m_current = m_begin; + } + + + enum : std::size_t + { + alignment = alignof(std::size_t) + }; + + uint8_t* m_begin { nullptr }; //set in reset() + uint8_t* m_current { nullptr }; //changed by alloc_bytes + uint8_t* m_end { nullptr }; + + size_t m_ref_counter {0}; +}; + +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp new file mode 100644 index 0000000..4b67374 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/value_traits.hpp @@ -0,0 +1,187 @@ +#ifndef _STDEX_VALUE_TRAITS_HPP_INCLUDED_ +#define _STDEX_VALUE_TRAITS_HPP_INCLUDED_ + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "type_defs.h" + +namespace stdex { +namespace value { + +namespace mpl = boost::mpl; + +//NOTE! length is in bits +typedef mpl::int_<8> _8; +typedef mpl::int_<16> _16; +typedef mpl::int_<24> _24; +typedef mpl::int_<32> _32; +typedef mpl::int_<40> _40; +typedef mpl::int_<48> _48; +typedef mpl::int_<56> _56; +typedef mpl::int_<64> _64; + +template +struct bits_to_bytes : mpl::int_< (num_bits + 7) / 8 > {}; + +/****************************************************************************** +* Class: value::traits +* Description: select min integer type to fit LEN bits +* Notes: LEN is positive integer type (mpl::int_) = number of bits +******************************************************************************/ +template struct traits; + +template +struct traits + >::type +> +{ + typedef _8 value_length; + typedef u8 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _16 value_length; + typedef u16 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _24 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _32 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _40 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _48 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _56 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _64 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits + >::type +> +{ + typedef LEN value_length; + struct value_type {u8 value[bits_to_bytes::value];}; + typedef value_type const& param_type; +}; + + +//template +//struct traits +// >::type +//> +//{ +// typedef LEN value_length; +// struct value_type {unsigned char value[LEN::value/8];}; +// typedef value_type const& param_type; +// +//}; + +/****************************************************************************** +* Class: value::traits_c +* Description: select min integer type to fit BITS bits +* Notes: N is positive integer value = number of bits +******************************************************************************/ +template +struct traits_c : traits > +{ +}; + +} //end: namespace value + +} //end: namespace stdex + +#ifdef _MSC_VER +#pragma component( mintypeinfo, off ) +#endif + +#endif //_STDEX_VALUE_TRAITS_HPP_INCLUDED_ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp new file mode 100644 index 0000000..be205aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/variant.hpp @@ -0,0 +1,146 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + + +// Local Includes: Application specific classes, functions, and libraries + + +namespace asn{ + +template +struct variant +{ + typedef variant self_type; + + template + static void check_size () {static_assert(sizeof (T) <= S, "wrong type");} + + variant () + : typeinfo (nullptr) + {} + + template + variant (const T& t) + : typeinfo (&typeid (T)) + { + check_size(); + new (as_()) T (t); + } + + ~variant () + { + assert(!typeinfo); + } + + template + T& build () + { + assert(!typeinfo); + typeinfo = & typeid (T); + return *new (as_()) T; + } + + template + T& build (const T& t) + { + assert(!typeinfo); + check_size(); + typeinfo = & typeid (T); + return *new (as_ ()) T (t); + } + + template + T& as() + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + const T& as() const + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + void swap(self_type& other) + { + assert (typeinfo); + assert (*typeinfo == *other.typeinfo); + std::swap (as (), other.as ()); + } + + template + void move(self_type& other) + { + build (); + swap (other); + other.destroy (); + } + + template + void copy(const self_type& other) + { + build (other.as ()); + } + + template + void destroy() + { + as ().~T (); + typeinfo = nullptr; + } + +private: + self_type& operator=(const self_type&){} + variant (const self_type&){} + + template + T* as_() + { + void *p = buffer.raw; + return static_cast (p); + } + + template + const T* as_() const + { + const void *p = buffer.raw; + return static_cast (p); + } + + union + { + long double align_me; + char raw[S]; + } buffer; + + const std::type_info *typeinfo; +}; + +} //namspace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp new file mode 100644 index 0000000..50854f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/asn/version.hpp @@ -0,0 +1,27 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define ASN_API_VERSION_MAJOR 5 +#define ASN_API_VERSION_MINOR 0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp new file mode 100644 index 0000000..2ed8200 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-Constants.hpp @@ -0,0 +1,244 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-RANfunction-Item ProtocolIE-ID ::= 60001 +*/ + +constexpr int64_t id_RANfunction_Item = 60001; +/* +id-RANfunctionDefinition ProtocolIE-ID ::= 60002 +*/ + +constexpr int64_t id_RANfunctionDefinition = 60002; +/* +id-RANfunctionID ProtocolIE-ID ::= 60003 +*/ + +constexpr int64_t id_RANfunctionID = 60003; +/* +id-RANfunctionID-Item ProtocolIE-ID ::= 60004 +*/ + +constexpr int64_t id_RANfunctionID_Item = 60004; +/* +id-RANfunctionIEcause-Item ProtocolIE-ID ::= 60005 +*/ + +constexpr int64_t id_RANfunctionIEcause_Item = 60005; +/* +id-RANfunctionsAccepted ProtocolIE-ID ::= 60006 +*/ + +constexpr int64_t id_RANfunctionsAccepted = 60006; +/* +id-RANfunctionsAdded ProtocolIE-ID ::= 60007 +*/ + +constexpr int64_t id_RANfunctionsAdded = 60007; +/* +id-RANfunctionsDeleted ProtocolIE-ID ::= 60008 +*/ + +constexpr int64_t id_RANfunctionsDeleted = 60008; +/* +id-RANfunctionsModified ProtocolIE-ID ::= 60009 +*/ + +constexpr int64_t id_RANfunctionsModified = 60009; +/* +id-RANfunctionsRejected ProtocolIE-ID ::= 60010 +*/ + +constexpr int64_t id_RANfunctionsRejected = 60010; +/* +id-RICaction-Admitted-Item ProtocolIE-ID ::= 60013 +*/ + +constexpr int64_t id_RICaction_Admitted_Item = 60013; +/* +id-RICaction-NotAdmitted-Item ProtocolIE-ID ::= 60015 +*/ + +constexpr int64_t id_RICaction_NotAdmitted_Item = 60015; +/* +id-RICaction-ToBeSetup-Item ProtocolIE-ID ::= 60011 +*/ + +constexpr int64_t id_RICaction_ToBeSetup_Item = 60011; +/* +id-RICactionDefinition ProtocolIE-ID ::= 60016 +*/ + +constexpr int64_t id_RICactionDefinition = 60016; +/* +id-RICactionID ProtocolIE-ID ::= 60017 +*/ + +constexpr int64_t id_RICactionID = 60017; +/* +id-RICactionType ProtocolIE-ID ::= 60018 +*/ + +constexpr int64_t id_RICactionType = 60018; +/* +id-RICactions-Admitted ProtocolIE-ID ::= 60012 +*/ + +constexpr int64_t id_RICactions_Admitted = 60012; +/* +id-RICactions-NotAdmitted ProtocolIE-ID ::= 60014 +*/ + +constexpr int64_t id_RICactions_NotAdmitted = 60014; +/* +id-RICcallProcessID ProtocolIE-ID ::= 60019 +*/ + +constexpr int64_t id_RICcallProcessID = 60019; +/* +id-RICcause ProtocolIE-ID ::= 60020 +*/ + +constexpr int64_t id_RICcause = 60020; +/* +id-RICcontrolAckRequest ProtocolIE-ID ::= 60021 +*/ + +constexpr int64_t id_RICcontrolAckRequest = 60021; +/* +id-RICcontrolHeader ProtocolIE-ID ::= 60022 +*/ + +constexpr int64_t id_RICcontrolHeader = 60022; +/* +id-RICcontrolMessage ProtocolIE-ID ::= 60023 +*/ + +constexpr int64_t id_RICcontrolMessage = 60023; +/* +id-RICcontrolStatus ProtocolIE-ID ::= 60024 +*/ + +constexpr int64_t id_RICcontrolStatus = 60024; +/* +id-RICeventTriggerDefinition ProtocolIE-ID ::= 60025 +*/ + +constexpr int64_t id_RICeventTriggerDefinition = 60025; +/* +id-RICindicationHeader ProtocolIE-ID ::= 60026 +*/ + +constexpr int64_t id_RICindicationHeader = 60026; +/* +id-RICindicationMessage ProtocolIE-ID ::= 60027 +*/ + +constexpr int64_t id_RICindicationMessage = 60027; +/* +id-RICindicationSN ProtocolIE-ID ::= 60028 +*/ + +constexpr int64_t id_RICindicationSN = 60028; +/* +id-RICindicationType ProtocolIE-ID ::= 60029 +*/ + +constexpr int64_t id_RICindicationType = 60029; +/* +id-RICrequestID ProtocolIE-ID ::= 60030 +*/ + +constexpr int64_t id_RICrequestID = 60030; +/* +id-RICrequestSequenceNumber ProtocolIE-ID ::= 60032 +*/ + +constexpr int64_t id_RICrequestSequenceNumber = 60032; +/* +id-RICrequestorID ProtocolIE-ID ::= 60031 +*/ + +constexpr int64_t id_RICrequestorID = 60031; +/* +id-RICsubscription ProtocolIE-ID ::= 60033 +*/ + +constexpr int64_t id_RICsubscription = 60033; +/* +id-RICsubsequentAction ProtocolIE-ID ::= 60034 +*/ + +constexpr int64_t id_RICsubsequentAction = 60034; +/* +id-RICsubsequentActionType ProtocolIE-ID ::= 60035 +*/ + +constexpr int64_t id_RICsubsequentActionType = 60035; +/* +id-RICtimeToWait ProtocolIE-ID ::= 60036 +*/ + +constexpr int64_t id_RICtimeToWait = 60036; +/* +id-ricControl ProcedureCode ::= 204 +*/ + +constexpr int64_t id_ricControl = 204; +/* +id-ricIndication ProcedureCode ::= 205 +*/ + +constexpr int64_t id_ricIndication = 205; +/* +id-ricServiceQuery ProcedureCode ::= 206 +*/ + +constexpr int64_t id_ricServiceQuery = 206; +/* +id-ricServiceUpdate ProcedureCode ::= 203 +*/ + +constexpr int64_t id_ricServiceUpdate = 203; +/* +id-ricSubscription ProcedureCode ::= 201 +*/ + +constexpr int64_t id_ricSubscription = 201; +/* +id-ricSubscriptionDelete ProcedureCode ::= 202 +*/ + +constexpr int64_t id_ricSubscriptionDelete = 202; +/* +maxofRANfunctionID INTEGER ::=256 +*/ + +constexpr int64_t maxofRANfunctionID = 256; +/* +maxofRICactionID INTEGER ::= 16 +*/ + +constexpr int64_t maxofRICactionID = 16; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp new file mode 100644 index 0000000..40f7bbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-IEs.hpp @@ -0,0 +1,568 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" + +/* +CauseRIC ::= ENUMERATED { + 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, + function-not-required, + excessive-functions, + ric-resource-limit, + ... +} +*/ + +struct CauseRIC : asn::enumerated<13, 0, true> +{ + static constexpr const char* name() {return "CauseRIC";} + using parent_t = asn::enumerated<13, 0, true>; + typedef enum { + 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 + ,function_not_required + ,excessive_functions + ,ric_resource_limit + } index_t; + +}; + +/* +RANfunctionDefinition ::= OCTET STRING +*/ + +struct RANfunctionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RANfunctionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RANfunctionID ::= INTEGER (0..4095) +*/ + +struct RANfunctionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RANfunctionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionDefinition ::= OCTET STRING +*/ + +struct RICactionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICactionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICactionID ::= INTEGER (0..255) +*/ + +struct RICactionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICactionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... +} +*/ + +struct RICactionType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICactionType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + report + ,insert + ,policy + } index_t; + +}; + +/* +RICcallProcessID ::= OCTET STRING +*/ + +struct RICcallProcessID : asn::ostring<> +{ + static constexpr const char* name() {return "RICcallProcessID";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ric CauseRIC, + ... +} +*/ + +struct RICcause : asn::choice<5, 0, true> +{ + static constexpr const char* name() {return "RICcause";} + using parent_t = asn::choice<5, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 6;} + void set_unknown() { set_index(6); } + ~RICcause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + struct ric_t : CauseRIC + { + static constexpr const char* name() {return "ric_t";} + using parent_t = CauseRIC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + case 5: set_index(5); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + case 5: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + ric_t& select_ric() { if(get_index() != 5) { clear(); set_index(5); return var.build();} return var.as();} + ric_t const* get_ric() const { if(get_index() == 5) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + char dummy5[sizeof(ric_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RICcontrolAckRequest ::= ENUMERATED{ + noAck, + ack, + nAck, + ... +} +*/ + +struct RICcontrolAckRequest : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolAckRequest";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + noAck + ,ack + ,nAck + } index_t; + +}; + +/* +RICcontrolHeader ::= OCTET STRING +*/ + +struct RICcontrolHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolMessage ::= OCTET STRING +*/ + +struct RICcontrolMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolStatus ::= ENUMERATED{ + success, + rejected, + failed, + ... +} +*/ + +struct RICcontrolStatus : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolStatus";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + success + ,rejected + ,failed + } index_t; + +}; + +/* +RICeventTriggerDefinition ::= OCTET STRING +*/ + +struct RICeventTriggerDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICeventTriggerDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationHeader ::= OCTET STRING +*/ + +struct RICindicationHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationMessage ::= OCTET STRING +*/ + +struct RICindicationMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationSN ::= INTEGER (0..65535) +*/ + +struct RICindicationSN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICindicationSN";} + using parent_t = asn::integer<>; + +}; + +/* +RICindicationType ::= ENUMERATED{ + report, + insert, + ... +} +*/ + +struct RICindicationType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICindicationType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + report + ,insert + } index_t; + +}; + +/* +RICrequestID ::= SEQUENCE { + ricRequestorID INTEGER (0..65535), + ricRequestSequenceNumber INTEGER (0..65535), + ... +} +*/ + +struct RICrequestID : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICrequestID";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricRequestorID_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestorID_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestorID_t& ref_ricRequestorID() {return ricRequestorID;} + ricRequestorID_t const& ref_ricRequestorID() const {return ricRequestorID;} + struct ricRequestSequenceNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestSequenceNumber_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestSequenceNumber_t& ref_ricRequestSequenceNumber() {return ricRequestSequenceNumber;} + ricRequestSequenceNumber_t const& ref_ricRequestSequenceNumber() const {return ricRequestSequenceNumber;} + template void decode(V& v) + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + template void encode(V& v) const + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + void clear() + { + ricRequestorID.clear(); + ricRequestSequenceNumber.clear(); + + }; + private: + ricRequestorID_t ricRequestorID; + ricRequestSequenceNumber_t ricRequestSequenceNumber; + +}; +/* +RICsubsequentActionType ::= ENUMERATED{ + continue, + wait, + ... +} +*/ + +struct RICsubsequentActionType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICsubsequentActionType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + Continue + ,wait + } index_t; + +}; + +/* +RICtimeToWait ::= ENUMERATED{ + zero, + w1ms, + w2ms, + w5ms, + w10ms, + w20ms, + w30ms, + w40ms, + w50ms, + w100ms, + w200ms, + w500ms, + w1s, + w2s, + w5s, + w10s, + w20s, + w60s, + ... +} +*/ + +struct RICtimeToWait : asn::enumerated<18, 0, true> +{ + static constexpr const char* name() {return "RICtimeToWait";} + using parent_t = asn::enumerated<18, 0, true>; + typedef enum { + zero + ,w1ms + ,w2ms + ,w5ms + ,w10ms + ,w20ms + ,w30ms + ,w40ms + ,w50ms + ,w100ms + ,w200ms + ,w500ms + ,w1s + ,w2s + ,w5s + ,w10s + ,w20s + ,w60s + } index_t; + +}; + +/* +RICsubsequentAction ::=SEQUENCE{ + ricSubsequentActionType RICsubsequentActionType, + ricTimeToWait RICtimeToWait, + ... +} +*/ + +struct RICsubsequentAction : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubsequentAction";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricSubsequentActionType_t : RICsubsequentActionType + { + static constexpr const char* name() {return "ricSubsequentActionType_t";} + using parent_t = RICsubsequentActionType; + + }; + ricSubsequentActionType_t& ref_ricSubsequentActionType() {return ricSubsequentActionType;} + ricSubsequentActionType_t const& ref_ricSubsequentActionType() const {return ricSubsequentActionType;} + struct ricTimeToWait_t : RICtimeToWait + { + static constexpr const char* name() {return "ricTimeToWait_t";} + using parent_t = RICtimeToWait; + + }; + ricTimeToWait_t& ref_ricTimeToWait() {return ricTimeToWait;} + ricTimeToWait_t const& ref_ricTimeToWait() const {return ricTimeToWait;} + template void decode(V& v) + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + template void encode(V& v) const + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + void clear() + { + ricSubsequentActionType.clear(); + ricTimeToWait.clear(); + + }; + private: + ricSubsequentActionType_t ricSubsequentActionType; + ricTimeToWait_t ricTimeToWait; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp new file mode 100644 index 0000000..e2073d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Contents.hpp @@ -0,0 +1,5512 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "E2AP-IEs.hpp" +#include "X2AP-IEs.hpp" +#include "X2AP-Constants.hpp" +#include "X2AP-Containers.hpp" +#include "E2AP-Constants.hpp" + +/* +RANfunction-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ranFunctionDefinition RANfunctionDefinition, + ... +} +*/ + +struct RANfunction_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunction-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ranFunctionDefinition_t : RANfunctionDefinition + { + static constexpr const char* name() {return "ranFunctionDefinition_t";} + using parent_t = RANfunctionDefinition; + + }; + ranFunctionDefinition_t& ref_ranFunctionDefinition() {return ranFunctionDefinition;} + ranFunctionDefinition_t const& ref_ranFunctionDefinition() const {return ranFunctionDefinition;} + template void decode(V& v) + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + void clear() + { + ranFunctionID.clear(); + ranFunctionDefinition.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ranFunctionDefinition_t ranFunctionDefinition; + +}; +/* +RANfunction-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunction-Item CRITICALITY ignore TYPE RANfunction-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunction_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(id_RANfunction_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunction_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunction_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunction_Item& select_id_RANfunction_Item() { return set(1); } + RANfunction_Item const* get_id_RANfunction_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunction_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunction_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionID-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ... +} +*/ + +struct RANfunctionID_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionID-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + template void decode(V& v) + { + v(ranFunctionID); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + + }; + void clear() + { + ranFunctionID.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + +}; +/* +RANfunctionID-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionID-Item CRITICALITY ignore TYPE RANfunctionID-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionID_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(id_RANfunctionID_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionID_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionID_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionID_Item& select_id_RANfunctionID_Item() { return set(1); } + RANfunctionID_Item const* get_id_RANfunctionID_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionID_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionIDcause-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ricCause RICcause, + ... +} +*/ + +struct RANfunctionIDcause_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionIDcause-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ranFunctionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ricCause); + + }; + void clear() + { + ranFunctionID.clear(); + ricCause.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ricCause_t ricCause; + +}; +/* +RANfunctionIDcause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionIEcause-Item CRITICALITY ignore TYPE RANfunctionIDcause-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionIDcause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(id_RANfunctionIEcause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionIEcause_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionIEcause_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionIDcause_Item& select_id_RANfunctionIEcause_Item() { return set(1); } + RANfunctionIDcause_Item const* get_id_RANfunctionIEcause_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionIEcause_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionIDcause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunction-ItemIEs} } +*/ + +struct RANfunctions_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctions_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctions_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctions-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsID-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container{{RANfunctionID-ItemIEs}} +*/ + +struct RANfunctionsID_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsID_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsID_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsID-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsIDcause-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunctionIDcause-ItemIEs} } +*/ + +struct RANfunctionsIDcause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsIDcause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsIDcause_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsIDcause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-Admitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ... +} +*/ + +struct RICaction_Admitted_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-Admitted-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + template void decode(V& v) + { + v(ricActionID); + + }; + template void encode(V& v) const + { + v(ricActionID); + + }; + void clear() + { + ricActionID.clear(); + + }; + private: + ricActionID_t ricActionID; + +}; +/* +RICaction-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-Admitted-Item CRITICALITY ignore TYPE RICaction-Admitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(id_RICaction_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_Admitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_Admitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_Admitted_Item& select_id_RICaction_Admitted_Item() { return set(1); } + RICaction_Admitted_Item const* get_id_RICaction_Admitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_Admitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-Admitted-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container{{RICaction-Admitted-ItemIEs}} +*/ + +struct RICaction_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-NotAdmitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ricCause RICcause, + ... +} +*/ + +struct RICaction_NotAdmitted_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ricActionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricCause); + + }; + void clear() + { + ricActionID.clear(); + ricCause.clear(); + + }; + private: + ricActionID_t ricActionID; + ricCause_t ricCause; + +}; +/* +RICaction-NotAdmitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-NotAdmitted-Item CRITICALITY ignore TYPE RICaction-NotAdmitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_NotAdmitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(id_RICaction_NotAdmitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_NotAdmitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_NotAdmitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_NotAdmitted_Item& select_id_RICaction_NotAdmitted_Item() { return set(1); } + RICaction_NotAdmitted_Item const* get_id_RICaction_NotAdmitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_NotAdmitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_NotAdmitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-NotAdmitted-List ::= SEQUENCE (SIZE(0..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-NotAdmitted-ItemIEs} } +*/ + +struct RICaction_NotAdmitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_NotAdmitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_NotAdmitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-ToBeSetup-Item ::= SEQUENCE { + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ... +} +*/ + +struct RICaction_ToBeSetup_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "RICaction-ToBeSetup-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricActionType_t : RICactionType + { + static constexpr const char* name() {return "ricActionType_t";} + using parent_t = RICactionType; + + }; + ricActionType_t& ref_ricActionType() {return ricActionType;} + ricActionType_t const& ref_ricActionType() const {return ricActionType;} + struct ricActionDefinition_t : RICactionDefinition + { + static constexpr const char* name() {return "ricActionDefinition_t";} + using parent_t = RICactionDefinition; + static constexpr bool optional = true; + + }; + ricActionDefinition_t& set_ricActionDefinition() { ricActionDefinition.setpresent(true); return ricActionDefinition;} + ricActionDefinition_t const* get_ricActionDefinition() const {return ricActionDefinition.is_valid() ? &ricActionDefinition : nullptr;} + struct ricSubsequentAction_t : RICsubsequentAction + { + static constexpr const char* name() {return "ricSubsequentAction_t";} + using parent_t = RICsubsequentAction; + static constexpr bool optional = true; + + }; + ricSubsequentAction_t& set_ricSubsequentAction() { ricSubsequentAction.setpresent(true); return ricSubsequentAction;} + ricSubsequentAction_t const* get_ricSubsequentAction() const {return ricSubsequentAction.is_valid() ? &ricSubsequentAction : nullptr;} + template void decode(V& v) + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + void clear() + { + ricActionID.clear(); + ricActionType.clear(); + ricActionDefinition.clear(); + ricSubsequentAction.clear(); + + }; + private: + ricActionID_t ricActionID; + ricActionType_t ricActionType; + ricActionDefinition_t ricActionDefinition; + ricSubsequentAction_t ricSubsequentAction; + +}; +/* +RICaction-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-ToBeSetup-Item CRITICALITY ignore TYPE RICaction-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(id_RICaction_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_ToBeSetup_Item& select_id_RICaction_ToBeSetup_Item() { return set(1); } + RICaction_ToBeSetup_Item const* get_id_RICaction_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } +*/ + +struct RICactions_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICactions_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICactions_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICactions-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICcontrolAcknowledge-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolStatus() { set(id_RICcontrolStatus); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolStatus)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolStatus);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolStatus() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolStatus& select_id_RICcontrolStatus() { return set(4); } + RICcontrolStatus const* get_id_RICcontrolStatus() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolStatus()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolStatus)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolStatus() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolAcknowledge-IEs}}, + ... +} +*/ + +struct RICcontrolAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolFailure-IEs X2AP-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-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}, + ... +} +*/ + +struct RICcontrolFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcause() { set(id_RICcause); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcause)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcause() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcause& select_id_RICcause() { return set(4); } + RICcause const* get_id_RICcause() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcause()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcause() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolFailure-IEs}}, + ... +} +*/ + +struct RICcontrolFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolRequest-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolHeader() { set(id_RICcontrolHeader); type=4;} + void select_id_RICcontrolMessage() { set(id_RICcontrolMessage); type=5;} + void select_id_RICcontrolAckRequest() { set(id_RICcontrolAckRequest); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolHeader)) { type = 4; return true; } + else if(equal(id_RICcontrolMessage)) { type = 5; return true; } + else if(equal(id_RICcontrolAckRequest)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolHeader);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICcontrolMessage);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICcontrolAckRequest);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolHeader() { set(reject); type=4;} + void select_id_RICcontrolMessage() { set(reject); type=5;} + void select_id_RICcontrolAckRequest() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolHeader& select_id_RICcontrolHeader() { return set(4); } + RICcontrolHeader const* get_id_RICcontrolHeader() const { return get(4); } + RICcontrolMessage& select_id_RICcontrolMessage() { return set(5); } + RICcontrolMessage const* get_id_RICcontrolMessage() const { return get(5); } + RICcontrolAckRequest& select_id_RICcontrolAckRequest() { return set(6); } + RICcontrolAckRequest const* get_id_RICcontrolAckRequest() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolHeader()); return true; + case 5: v(select_id_RICcontrolMessage()); return true; + case 6: v(select_id_RICcontrolAckRequest()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolAckRequest)]; + char dummy4[sizeof(RICcontrolHeader)]; + char dummy5[sizeof(RICcontrolMessage)]; + char dummy6[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolHeader() { set(mandatory); type=4;} + void select_id_RICcontrolMessage() { set(mandatory); type=5;} + void select_id_RICcontrolAckRequest() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolRequest-IEs}}, + ... +} +*/ + +struct RICcontrolRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICindication-IEs X2AP-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 mandatory}| + { 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}, + ... +} +*/ + +struct RICindication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactionID() { set(id_RICactionID); type=3;} + void select_id_RICindicationSN() { set(id_RICindicationSN); type=4;} + void select_id_RICindicationType() { set(id_RICindicationType); type=5;} + void select_id_RICindicationHeader() { set(id_RICindicationHeader); type=6;} + void select_id_RICindicationMessage() { set(id_RICindicationMessage); type=7;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactionID)) { type = 3; return true; } + else if(equal(id_RICindicationSN)) { type = 4; return true; } + else if(equal(id_RICindicationType)) { type = 5; return true; } + else if(equal(id_RICindicationHeader)) { type = 6; return true; } + else if(equal(id_RICindicationMessage)) { type = 7; return true; } + else if(equal(id_RICcallProcessID)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactionID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICindicationSN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICindicationType);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICindicationHeader);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RICindicationMessage);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactionID() { set(reject); type=3;} + void select_id_RICindicationSN() { set(reject); type=4;} + void select_id_RICindicationType() { set(reject); type=5;} + void select_id_RICindicationHeader() { set(reject); type=6;} + void select_id_RICindicationMessage() { set(reject); type=7;} + void select_id_RICcallProcessID() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICactionID& select_id_RICactionID() { return set(3); } + RICactionID const* get_id_RICactionID() const { return get(3); } + RICindicationSN& select_id_RICindicationSN() { return set(4); } + RICindicationSN const* get_id_RICindicationSN() const { return get(4); } + RICindicationType& select_id_RICindicationType() { return set(5); } + RICindicationType const* get_id_RICindicationType() const { return get(5); } + RICindicationHeader& select_id_RICindicationHeader() { return set(6); } + RICindicationHeader const* get_id_RICindicationHeader() const { return get(6); } + RICindicationMessage& select_id_RICindicationMessage() { return set(7); } + RICindicationMessage const* get_id_RICindicationMessage() const { return get(7); } + RICcallProcessID& select_id_RICcallProcessID() { return set(8); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactionID()); return true; + case 4: v(select_id_RICindicationSN()); return true; + case 5: v(select_id_RICindicationType()); return true; + case 6: v(select_id_RICindicationHeader()); return true; + case 7: v(select_id_RICindicationMessage()); return true; + case 8: v(select_id_RICcallProcessID()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICactionID)]; + char dummy3[sizeof(RICcallProcessID)]; + char dummy4[sizeof(RICindicationHeader)]; + char dummy5[sizeof(RICindicationMessage)]; + char dummy6[sizeof(RICindicationSN)]; + char dummy7[sizeof(RICindicationType)]; + char dummy8[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactionID() { set(mandatory); type=3;} + void select_id_RICindicationSN() { set(mandatory); type=4;} + void select_id_RICindicationType() { set(mandatory); type=5;} + void select_id_RICindicationHeader() { set(mandatory); type=6;} + void select_id_RICindicationMessage() { set(mandatory); type=7;} + void select_id_RICcallProcessID() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICindication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICindication-IEs}}, + ... +} +*/ + +struct RICindication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICindication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceQuery-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceQuery_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceQuery ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceQuery-IEs}}, + ... +} +*/ + +struct RICserviceQuery : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceQuery";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdate-IEs X2AP-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}, + ... +} +*/ + +struct RICserviceUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(id_RANfunctionsAdded); type=1;} + void select_id_RANfunctionsModified() { set(id_RANfunctionsModified); type=2;} + void select_id_RANfunctionsDeleted() { set(id_RANfunctionsDeleted); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAdded)) { type = 1; return true; } + else if(equal(id_RANfunctionsModified)) { type = 2; return true; } + else if(equal(id_RANfunctionsDeleted)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAdded);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsModified);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RANfunctionsDeleted);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(reject); type=1;} + void select_id_RANfunctionsModified() { set(reject); type=2;} + void select_id_RANfunctionsDeleted() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctions_List& select_id_RANfunctionsAdded() { return set(1); } + RANfunctions_List const* get_id_RANfunctionsAdded() const { return get(1); } + RANfunctions_List& select_id_RANfunctionsModified() { return set(2); } + RANfunctions_List const* get_id_RANfunctionsModified() const { return get(2); } + RANfunctionsID_List& select_id_RANfunctionsDeleted() { return set(3); } + RANfunctionsID_List const* get_id_RANfunctionsDeleted() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAdded()); return true; + case 2: v(select_id_RANfunctionsModified()); return true; + case 3: v(select_id_RANfunctionsDeleted()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctions_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(optional); type=1;} + void select_id_RANfunctionsModified() { set(optional); type=2;} + void select_id_RANfunctionsDeleted() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdate-IEs}}, + ... +} +*/ + +struct RICserviceUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}| + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else if(equal(id_RANfunctionsRejected)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + void select_id_RANfunctionsRejected() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(2); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: v(select_id_RANfunctionsRejected()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + void select_id_RANfunctionsRejected() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsRejected)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(reject); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(1); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsRejected()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(optional); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateFailure-IEs}}, + ... +} +*/ + +struct RICserviceUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... +} +*/ + +struct RICsubscription : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscription";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricEventTriggerDefinition_t : RICeventTriggerDefinition + { + static constexpr const char* name() {return "ricEventTriggerDefinition_t";} + using parent_t = RICeventTriggerDefinition; + + }; + ricEventTriggerDefinition_t& ref_ricEventTriggerDefinition() {return ricEventTriggerDefinition;} + ricEventTriggerDefinition_t const& ref_ricEventTriggerDefinition() const {return ricEventTriggerDefinition;} + struct ricAction_ToBeSetup_List_t : RICactions_ToBeSetup_List + { + static constexpr const char* name() {return "ricAction_ToBeSetup_List_t";} + using parent_t = RICactions_ToBeSetup_List; + + }; + ricAction_ToBeSetup_List_t& ref_ricAction_ToBeSetup_List() {return ricAction_ToBeSetup_List;} + ricAction_ToBeSetup_List_t const& ref_ricAction_ToBeSetup_List() const {return ricAction_ToBeSetup_List;} + template void decode(V& v) + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + template void encode(V& v) const + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + void clear() + { + ricEventTriggerDefinition.clear(); + ricAction_ToBeSetup_List.clear(); + + }; + private: + ricEventTriggerDefinition_t ricEventTriggerDefinition; + ricAction_ToBeSetup_List_t ricAction_ToBeSetup_List; + +}; +/* +RICsubscriptionDeleteFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcause() { set(id_RICcause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcause() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcause& select_id_RICcause() { return set(3); } + RICcause const* get_id_RICcause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionFailure-IEs X2AP-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}, + ... +} +*/ + +struct RICsubscriptionFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_NotAdmitted() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(3); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_NotAdmitted()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_NotAdmitted() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICsubscription CRITICALITY reject TYPE RICsubscription PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICsubscription() { set(id_RICsubscription); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICsubscription)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICsubscription);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICsubscription() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICsubscription& select_id_RICsubscription() { return set(3); } + RICsubscription const* get_id_RICsubscription() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICsubscription()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + char dummy3[sizeof(RICsubscription)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICsubscription() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionResponse-IEs X2AP-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 }, + ... +} +*/ + +struct RICsubscriptionResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_Admitted() { set(id_RICactions_Admitted); type=3;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_Admitted)) { type = 3; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_Admitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_Admitted() { set(reject); type=3;} + void select_id_RICactions_NotAdmitted() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_Admitted_List& select_id_RICactions_Admitted() { return set(3); } + RICaction_Admitted_List const* get_id_RICactions_Admitted() const { return get(3); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(4); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_Admitted()); return true; + case 4: v(select_id_RICactions_NotAdmitted()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICaction_Admitted_List)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_Admitted() { set(mandatory); type=3;} + void select_id_RICactions_NotAdmitted() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container{{RICsubscriptionResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..f426b97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp @@ -0,0 +1,980 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" +#include "E2AP-PDU-Contents.hpp" +#include "E2AP-Constants.hpp" + +/* +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] +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= { + E2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + E2AP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionRequest& select_id_ricSubscription() { return set(1); } + RICsubscriptionRequest const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteRequest& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteRequest const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdate& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdate const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolRequest& select_id_ricControl() { return set(4); } + RICcontrolRequest const* get_id_ricControl() const { return get(4); } + X2SetupRequest& select_id_x2Setup() { return set(5); } + X2SetupRequest const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetRequest& select_id_reset() { return set(10); } + ResetRequest const* get_id_reset() const { return get(10); } + RICindication& select_id_ricIndication() { return set(11); } + RICindication const* get_id_ricIndication() const { return get(11); } + RICserviceQuery& select_id_ricServiceQuery() { return set(12); } + RICserviceQuery const* get_id_ricServiceQuery() const { return get(12); } + LoadInformation& select_id_loadIndication() { return set(13); } + LoadInformation const* get_id_loadIndication() const { return get(13); } + GNBStatusIndication& select_id_gNBStatusIndication() { return set(14); } + GNBStatusIndication const* get_id_gNBStatusIndication() const { return get(14); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(15); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(15); } + ErrorIndication& select_id_errorIndication() { return set(16); } + ErrorIndication const* get_id_errorIndication() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 11: v(select_id_ricIndication()); return true; + case 12: v(select_id_ricServiceQuery()); return true; + case 13: v(select_id_loadIndication()); return true; + case 14: v(select_id_gNBStatusIndication()); return true; + case 15: v(select_id_resourceStatusReporting()); return true; + case 16: v(select_id_errorIndication()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdate)]; + char dummy2[sizeof(ENDCConfigurationUpdate)]; + char dummy3[sizeof(ENDCX2SetupRequest)]; + char dummy4[sizeof(ErrorIndication)]; + char dummy5[sizeof(GNBStatusIndication)]; + char dummy6[sizeof(LoadInformation)]; + char dummy7[sizeof(RICcontrolRequest)]; + char dummy8[sizeof(RICindication)]; + char dummy9[sizeof(RICserviceQuery)]; + char dummy10[sizeof(RICserviceUpdate)]; + char dummy11[sizeof(RICsubscriptionDeleteRequest)]; + char dummy12[sizeof(RICsubscriptionRequest)]; + char dummy13[sizeof(ResetRequest)]; + char dummy14[sizeof(ResourceStatusRequest)]; + char dummy15[sizeof(ResourceStatusUpdate)]; + char dummy16[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionResponse& select_id_ricSubscription() { return set(1); } + RICsubscriptionResponse const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteResponse& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteResponse const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateAcknowledge& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateAcknowledge const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolAcknowledge& select_id_ricControl() { return set(4); } + RICcontrolAcknowledge const* get_id_ricControl() const { return get(4); } + X2SetupResponse& select_id_x2Setup() { return set(5); } + X2SetupResponse const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetResponse& select_id_reset() { return set(10); } + ResetResponse const* get_id_reset() const { return get(10); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy2[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCX2SetupResponse)]; + char dummy4[sizeof(RICcontrolAcknowledge)]; + char dummy5[sizeof(RICserviceUpdateAcknowledge)]; + char dummy6[sizeof(RICsubscriptionDeleteResponse)]; + char dummy7[sizeof(RICsubscriptionResponse)]; + char dummy8[sizeof(ResetResponse)]; + char dummy9[sizeof(ResourceStatusResponse)]; + char dummy10[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionFailure& select_id_ricSubscription() { return set(1); } + RICsubscriptionFailure const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteFailure& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteFailure const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateFailure& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateFailure const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolFailure& select_id_ricControl() { return set(4); } + RICcontrolFailure const* get_id_ricControl() const { return get(4); } + X2SetupFailure& select_id_x2Setup() { return set(5); } + X2SetupFailure const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(9); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateFailure)]; + char dummy2[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCX2SetupFailure)]; + char dummy4[sizeof(RICcontrolFailure)]; + char dummy5[sizeof(RICserviceUpdateFailure)]; + char dummy6[sizeof(RICsubscriptionDeleteFailure)]; + char dummy7[sizeof(RICsubscriptionFailure)]; + char dummy8[sizeof(ResourceStatusFailure)]; + char dummy9[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(id_ricSubscription); type=1;} + void select_id_ricSubscriptionDelete() { set(id_ricSubscriptionDelete); type=2;} + void select_id_ricServiceUpdate() { set(id_ricServiceUpdate); type=3;} + void select_id_ricControl() { set(id_ricControl); type=4;} + void select_id_x2Setup() { set(id_x2Setup); type=5;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=6;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=7;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=8;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=9;} + void select_id_reset() { set(id_reset); type=10;} + void select_id_ricIndication() { set(id_ricIndication); type=11;} + void select_id_ricServiceQuery() { set(id_ricServiceQuery); type=12;} + void select_id_loadIndication() { set(id_loadIndication); type=13;} + void select_id_gNBStatusIndication() { set(id_gNBStatusIndication); type=14;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=15;} + void select_id_errorIndication() { set(id_errorIndication); type=16;} + E2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ricSubscription)) { type = 1; return true; } + else if(equal(id_ricSubscriptionDelete)) { type = 2; return true; } + else if(equal(id_ricServiceUpdate)) { type = 3; return true; } + else if(equal(id_ricControl)) { type = 4; return true; } + else if(equal(id_x2Setup)) { type = 5; return true; } + else if(equal(id_endcX2Setup)) { type = 6; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 7; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 8; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 9; return true; } + else if(equal(id_reset)) { type = 10; return true; } + else if(equal(id_ricIndication)) { type = 11; return true; } + else if(equal(id_ricServiceQuery)) { type = 12; return true; } + else if(equal(id_loadIndication)) { type = 13; return true; } + else if(equal(id_gNBStatusIndication)) { type = 14; return true; } + else if(equal(id_resourceStatusReporting)) { type = 15; return true; } + else if(equal(id_errorIndication)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ricSubscription);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ricSubscriptionDelete);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ricServiceUpdate);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ricControl);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_reset);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ricIndication);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_ricServiceQuery);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_gNBStatusIndication);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(reject); type=1;} + void select_id_ricSubscriptionDelete() { set(reject); type=2;} + void select_id_ricServiceUpdate() { set(reject); type=3;} + void select_id_ricControl() { set(reject); type=4;} + void select_id_x2Setup() { set(reject); type=5;} + void select_id_endcX2Setup() { set(reject); type=6;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=7;} + void select_id_eNBConfigurationUpdate() { set(reject); type=8;} + void select_id_endcConfigurationUpdate() { set(reject); type=9;} + void select_id_reset() { set(reject); type=10;} + void select_id_ricIndication() { set(ignore); type=11;} + void select_id_ricServiceQuery() { set(ignore); type=12;} + void select_id_loadIndication() { set(ignore); type=13;} + void select_id_gNBStatusIndication() { set(ignore); type=14;} + void select_id_resourceStatusReporting() { set(ignore); type=15;} + void select_id_errorIndication() { set(ignore); type=16;} + E2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(ignore)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(ignore);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +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}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +E2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct E2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "E2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~E2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp new file mode 100644 index 0000000..0e1bb53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp @@ -0,0 +1,188 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + + +/* +Criticality ::= ENUMERATED { reject, ignore, notify } +*/ + +struct Criticality : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Criticality";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + reject + ,ignore + ,notify + } index_t; + +}; + +/* +Presence ::= ENUMERATED { optional, conditional, mandatory } +*/ + +struct Presence : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Presence";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + optional + ,conditional + ,mandatory + } index_t; + +}; + +/* +maxPrivateIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxPrivateIEs = 65535; +/* +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} +*/ + +struct PrivateIE_ID : asn::choice<2, 0, false> +{ + static constexpr const char* name() {return "PrivateIE-ID";} + using parent_t = asn::choice<2, 0, false>; + index_type get_index() const {return index;} + ~PrivateIE_ID() {clear();} + struct local_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "local_t";} + using parent_t = asn::integer<>; + + }; + + struct global_t : asn::oid + { + static constexpr const char* name() {return "global_t";} + using parent_t = asn::oid; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + local_t& select_local() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + local_t const* get_local() const { if(get_index() == 1) { return &var.as();} return nullptr; } + global_t& select_global() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + global_t const* get_global() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(local_t)]; + char dummy2[sizeof(global_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ProcedureCode ::= INTEGER (0..255) +*/ + +struct ProcedureCode : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProcedureCode";} + using parent_t = asn::integer<>; + +}; + +/* +maxProtocolIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolIEs = 65535; +/* +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) +*/ + +struct ProtocolIE_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProtocolIE-ID";} + using parent_t = asn::integer<>; + +}; + +/* +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} +*/ + +struct TriggeringMessage : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "TriggeringMessage";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + initiating_message + ,successful_outcome + ,unsuccessful_outcome + } index_t; + +}; + +/* +maxProtocolExtensions INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolExtensions = 65535; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp new file mode 100644 index 0000000..28be45d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Constants.hpp @@ -0,0 +1,2054 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-ABS-Status ProtocolIE-ID ::= 63 +*/ + +constexpr int64_t id_ABS_Status = 63; +/* +id-ABSInformation ProtocolIE-ID ::= 61 +*/ + +constexpr int64_t id_ABSInformation = 61; +/* +id-ActivatedCellList ProtocolIE-ID ::= 58 +*/ + +constexpr int64_t id_ActivatedCellList = 58; +/* +id-ActivatedNRCellList ProtocolIE-ID ::= 268 +*/ + +constexpr int64_t id_ActivatedNRCellList = 268; +/* +id-ActivationID ProtocolIE-ID ::= 256 +*/ + +constexpr int64_t id_ActivationID = 256; +/* +id-AdditionalSpecialSubframe-Info ProtocolIE-ID ::= 97 +*/ + +constexpr int64_t id_AdditionalSpecialSubframe_Info = 97; +/* +id-AdditionalSpecialSubframeExtension-Info ProtocolIE-ID ::= 179 +*/ + +constexpr int64_t id_AdditionalSpecialSubframeExtension_Info = 179; +/* +id-AdmittedSplitSRBs ProtocolIE-ID ::= 212 +*/ + +constexpr int64_t id_AdmittedSplitSRBs = 212; +/* +id-AdmittedSplitSRBsrelease ProtocolIE-ID ::= 281 +*/ + +constexpr int64_t id_AdmittedSplitSRBsrelease = 281; +/* +id-AerialUEsubscriptionInformation ProtocolIE-ID ::= 277 +*/ + +constexpr int64_t id_AerialUEsubscriptionInformation = 277; +/* +id-BandwidthReducedSI ProtocolIE-ID ::= 180 +*/ + +constexpr int64_t id_BandwidthReducedSI = 180; +/* +id-BearerType ProtocolIE-ID ::= 171 +*/ + +constexpr int64_t id_BearerType = 171; +/* +id-BluetoothMeasurementConfiguration ProtocolIE-ID ::= 303 +*/ + +constexpr int64_t id_BluetoothMeasurementConfiguration = 303; +/* +id-CNTypeRestrictions ProtocolIE-ID ::= 301 +*/ + +constexpr int64_t id_CNTypeRestrictions = 301; +/* +id-CSG-Id ProtocolIE-ID ::= 70 +*/ + +constexpr int64_t id_CSG_Id = 70; +/* +id-CSGMembershipStatus ProtocolIE-ID ::= 71 +*/ + +constexpr int64_t id_CSGMembershipStatus = 71; +/* +id-CSIReportList ProtocolIE-ID ::= 146 +*/ + +constexpr int64_t id_CSIReportList = 146; +/* +id-Cause ProtocolIE-ID ::= 5 +*/ + +constexpr int64_t id_Cause = 5; +/* +id-CellAssistanceInformation ProtocolIE-ID ::= 251 +*/ + +constexpr int64_t id_CellAssistanceInformation = 251; +/* +id-CellInformation ProtocolIE-ID ::= 6 +*/ + +constexpr int64_t id_CellInformation = 6; +/* +id-CellInformation-Item ProtocolIE-ID ::= 7 +*/ + +constexpr int64_t id_CellInformation_Item = 7; +/* +id-CellMeasurementResult ProtocolIE-ID ::= 32 +*/ + +constexpr int64_t id_CellMeasurementResult = 32; +/* +id-CellMeasurementResult-Item ProtocolIE-ID ::= 33 +*/ + +constexpr int64_t id_CellMeasurementResult_Item = 33; +/* +id-CellReportingIndicator ProtocolIE-ID ::= 170 +*/ + +constexpr int64_t id_CellReportingIndicator = 170; +/* +id-CellToReport ProtocolIE-ID ::= 29 +*/ + +constexpr int64_t id_CellToReport = 29; +/* +id-CellToReport-Item ProtocolIE-ID ::= 31 +*/ + +constexpr int64_t id_CellToReport_Item = 31; +/* +id-CoMPInformation ProtocolIE-ID ::= 108 +*/ + +constexpr int64_t id_CoMPInformation = 108; +/* +id-CompleteFailureCauseInformation-Item ProtocolIE-ID ::= 69 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_Item = 69; +/* +id-CompleteFailureCauseInformation-List ProtocolIE-ID ::= 68 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_List = 68; +/* +id-CompositeAvailableCapacityGroup ProtocolIE-ID ::= 42 +*/ + +constexpr int64_t id_CompositeAvailableCapacityGroup = 42; +/* +id-Correlation-ID ProtocolIE-ID ::= 166 +*/ + +constexpr int64_t id_Correlation_ID = 166; +/* +id-CoverageModificationList ProtocolIE-ID ::= 143 +*/ + +constexpr int64_t id_CoverageModificationList = 143; +/* +id-CriticalityDiagnostics ProtocolIE-ID ::= 17 +*/ + +constexpr int64_t id_CriticalityDiagnostics = 17; +/* +id-DL-EARFCNExtension ProtocolIE-ID ::= 96 +*/ + +constexpr int64_t id_DL_EARFCNExtension = 96; +/* +id-DL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 193 +*/ + +constexpr int64_t id_DL_scheduling_PDCCH_CCE_usage = 193; +/* +id-DLCOUNTValueExtended ProtocolIE-ID ::= 93 +*/ + +constexpr int64_t id_DLCOUNTValueExtended = 93; +/* +id-DLCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 152 +*/ + +constexpr int64_t id_DLCOUNTValuePDCP_SNlength18 = 152; +/* +id-DataTrafficResourceIndication ProtocolIE-ID ::= 287 +*/ + +constexpr int64_t id_DataTrafficResourceIndication = 287; +/* +id-DeactivationIndication ProtocolIE-ID ::= 59 +*/ + +constexpr int64_t id_DeactivationIndication = 59; +/* +id-DownlinkPacketLossRate ProtocolIE-ID ::= 273 +*/ + +constexpr int64_t id_DownlinkPacketLossRate = 273; +/* +id-DynamicDLTransmissionInformation ProtocolIE-ID ::= 106 +*/ + +constexpr int64_t id_DynamicDLTransmissionInformation = 106; +/* +id-E-RAB-Item ProtocolIE-ID ::= 2 +*/ + +constexpr int64_t id_E_RAB_Item = 2; +/* +id-E-RABUsageReport-Item ProtocolIE-ID ::= 263 +*/ + +constexpr int64_t id_E_RABUsageReport_Item = 263; +/* +id-E-RABs-Admitted-Item ProtocolIE-ID ::= 0 +*/ + +constexpr int64_t id_E_RABs_Admitted_Item = 0; +/* +id-E-RABs-Admitted-List ProtocolIE-ID ::= 1 +*/ + +constexpr int64_t id_E_RABs_Admitted_List = 1; +/* +id-E-RABs-Admitted-ToBeAdded-Item ProtocolIE-ID ::= 121 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_Item = 121; +/* +id-E-RABs-Admitted-ToBeAdded-List ProtocolIE-ID ::= 120 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_List = 120; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckItem ProtocolIE-ID ::= 131 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckList ProtocolIE-ID ::= 128 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckList = 128; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ProtocolIE-ID ::= 213 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ProtocolIE-ID ::= 210 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ProtocolIE-ID ::= 222 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAckList ProtocolIE-ID ::= 219 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219; +/* +id-E-RABs-Admitted-ToBeModified-ModAckItem ProtocolIE-ID ::= 132 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckItem = 132; +/* +id-E-RABs-Admitted-ToBeModified-ModAckList ProtocolIE-ID ::= 129 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckList = 129; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item ProtocolIE-ID ::= 223 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAckList ProtocolIE-ID ::= 220 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckItem ProtocolIE-ID ::= 133 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckList ProtocolIE-ID ::= 130 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckList = 130; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item ProtocolIE-ID ::= 224 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAckList ProtocolIE-ID ::= 221 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ProtocolIE-ID ::= 319 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ProtocolIE-ID ::= 318 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConf-Item ProtocolIE-ID ::= 295 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConfList ProtocolIE-ID ::= 294 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294; +/* +id-E-RABs-DataForwardingAddress-Item ProtocolIE-ID ::= 308 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_Item = 308; +/* +id-E-RABs-DataForwardingAddress-List ProtocolIE-ID ::= 307 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_List = 307; +/* +id-E-RABs-NotAdmitted-List ProtocolIE-ID ::= 3 +*/ + +constexpr int64_t id_E_RABs_NotAdmitted_List = 3; +/* +id-E-RABs-SubjectToCounterCheck-List ProtocolIE-ID ::= 141 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheck_List = 141; +/* +id-E-RABs-SubjectToCounterCheckItem ProtocolIE-ID ::= 142 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheckItem = 142; +/* +id-E-RABs-SubjectToSgNBCounterCheck-Item ProtocolIE-ID ::= 236 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_Item = 236; +/* +id-E-RABs-SubjectToSgNBCounterCheck-List ProtocolIE-ID ::= 235 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_List = 235; +/* +id-E-RABs-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 19 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_Item = 19; +/* +id-E-RABs-SubjectToStatusTransfer-List ProtocolIE-ID ::= 18 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_List = 18; +/* +id-E-RABs-ToBeAdded-Item ProtocolIE-ID ::= 118 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_Item = 118; +/* +id-E-RABs-ToBeAdded-List ProtocolIE-ID ::= 117 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_List = 117; +/* +id-E-RABs-ToBeAdded-ModReqItem ProtocolIE-ID ::= 125 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_ModReqItem = 125; +/* +id-E-RABs-ToBeAdded-SgNBAddReq-Item ProtocolIE-ID ::= 209 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209; +/* +id-E-RABs-ToBeAdded-SgNBAddReqList ProtocolIE-ID ::= 205 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReqList = 205; +/* +id-E-RABs-ToBeAdded-SgNBModReq-Item ProtocolIE-ID ::= 216 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBModReq_Item = 216; +/* +id-E-RABs-ToBeModified-ModReqItem ProtocolIE-ID ::= 126 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_ModReqItem = 126; +/* +id-E-RABs-ToBeModified-SgNBModReq-Item ProtocolIE-ID ::= 217 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReq_Item = 217; +/* +id-E-RABs-ToBeModified-SgNBModReqd-Item ProtocolIE-ID ::= 228 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqd_Item = 228; +/* +id-E-RABs-ToBeModified-SgNBModReqdList ProtocolIE-ID ::= 226 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqdList = 226; +/* +id-E-RABs-ToBeReleased-List-RelConf ProtocolIE-ID ::= 139 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelConf = 139; +/* +id-E-RABs-ToBeReleased-List-RelReq ProtocolIE-ID ::= 137 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelReq = 137; +/* +id-E-RABs-ToBeReleased-ModReqItem ProtocolIE-ID ::= 127 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqItem = 127; +/* +id-E-RABs-ToBeReleased-ModReqd ProtocolIE-ID ::= 134 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqd = 134; +/* +id-E-RABs-ToBeReleased-ModReqdItem ProtocolIE-ID ::= 135 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqdItem = 135; +/* +id-E-RABs-ToBeReleased-RelConfItem ProtocolIE-ID ::= 140 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelConfItem = 140; +/* +id-E-RABs-ToBeReleased-RelReqItem ProtocolIE-ID ::= 138 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelReqItem = 138; +/* +id-E-RABs-ToBeReleased-SgNBChaConf-Item ProtocolIE-ID ::= 230 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230; +/* +id-E-RABs-ToBeReleased-SgNBChaConfList ProtocolIE-ID ::= 229 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConfList = 229; +/* +id-E-RABs-ToBeReleased-SgNBModReq-Item ProtocolIE-ID ::= 218 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReq_Item = 218; +/* +id-E-RABs-ToBeReleased-SgNBModReqd-Item ProtocolIE-ID ::= 227 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227; +/* +id-E-RABs-ToBeReleased-SgNBModReqdList ProtocolIE-ID ::= 225 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqdList = 225; +/* +id-E-RABs-ToBeReleased-SgNBRelConf-Item ProtocolIE-ID ::= 234 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234; +/* +id-E-RABs-ToBeReleased-SgNBRelConfList ProtocolIE-ID ::= 233 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConfList = 233; +/* +id-E-RABs-ToBeReleased-SgNBRelReq-Item ProtocolIE-ID ::= 232 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232; +/* +id-E-RABs-ToBeReleased-SgNBRelReqList ProtocolIE-ID ::= 231 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqList = 231; +/* +id-E-RABs-ToBeReleased-SgNBRelReqd-Item ProtocolIE-ID ::= 321 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321; +/* +id-E-RABs-ToBeReleased-SgNBRelReqdList ProtocolIE-ID ::= 320 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqdList = 320; +/* +id-E-RABs-ToBeSetup-Item ProtocolIE-ID ::= 4 +*/ + +constexpr int64_t id_E_RABs_ToBeSetup_Item = 4; +/* +id-E-RABs-ToBeSetupRetrieve-Item ProtocolIE-ID ::= 174 +*/ + +constexpr int64_t id_E_RABs_ToBeSetupRetrieve_Item = 174; +/* +id-ECGI ProtocolIE-ID ::= 316 +*/ + +constexpr int64_t id_ECGI = 316; +/* +id-ENB1-Cell-ID ProtocolIE-ID ::= 43 +*/ + +constexpr int64_t id_ENB1_Cell_ID = 43; +/* +id-ENB1-Measurement-ID ProtocolIE-ID ::= 39 +*/ + +constexpr int64_t id_ENB1_Measurement_ID = 39; +/* +id-ENB1-Mobility-Parameters ProtocolIE-ID ::= 46 +*/ + +constexpr int64_t id_ENB1_Mobility_Parameters = 46; +/* +id-ENB2-Cell-ID ProtocolIE-ID ::= 44 +*/ + +constexpr int64_t id_ENB2_Cell_ID = 44; +/* +id-ENB2-Measurement-ID ProtocolIE-ID ::= 40 +*/ + +constexpr int64_t id_ENB2_Measurement_ID = 40; +/* +id-ENB2-Mobility-Parameters-Modification-Range ProtocolIE-ID ::= 47 +*/ + +constexpr int64_t id_ENB2_Mobility_Parameters_Modification_Range = 47; +/* +id-ENB2-Proposed-Mobility-Parameters ProtocolIE-ID ::= 45 +*/ + +constexpr int64_t id_ENB2_Proposed_Mobility_Parameters = 45; +/* +id-ERABActivityNotifyItemList ProtocolIE-ID ::= 297 +*/ + +constexpr int64_t id_ERABActivityNotifyItemList = 297; +/* +id-ExpectedUEBehaviour ProtocolIE-ID ::= 104 +*/ + +constexpr int64_t id_ExpectedUEBehaviour = 104; +/* +id-ExtendedULInterferenceOverloadInfo ProtocolIE-ID ::= 100 +*/ + +constexpr int64_t id_ExtendedULInterferenceOverloadInfo = 100; +/* +id-FailureCellCRNTI ProtocolIE-ID ::= 50 +*/ + +constexpr int64_t id_FailureCellCRNTI = 50; +/* +id-FailureCellECGI ProtocolIE-ID ::= 53 +*/ + +constexpr int64_t id_FailureCellECGI = 53; +/* +id-FailureCellPCI ProtocolIE-ID ::= 48 +*/ + +constexpr int64_t id_FailureCellPCI = 48; +/* +id-FreqBandIndicatorPriority ProtocolIE-ID ::= 160 +*/ + +constexpr int64_t id_FreqBandIndicatorPriority = 160; +/* +id-GNBOverloadInformation ProtocolIE-ID ::= 310 +*/ + +constexpr int64_t id_GNBOverloadInformation = 310; +/* +id-GUGroupIDList ProtocolIE-ID ::= 24 +*/ + +constexpr int64_t id_GUGroupIDList = 24; +/* +id-GUGroupIDToAddList ProtocolIE-ID ::= 34 +*/ + +constexpr int64_t id_GUGroupIDToAddList = 34; +/* +id-GUGroupIDToDeleteList ProtocolIE-ID ::= 35 +*/ + +constexpr int64_t id_GUGroupIDToDeleteList = 35; +/* +id-GUMMEI-ID ProtocolIE-ID ::= 23 +*/ + +constexpr int64_t id_GUMMEI_ID = 23; +/* +id-GW-TransportLayerAddress ProtocolIE-ID ::= 165 +*/ + +constexpr int64_t id_GW_TransportLayerAddress = 165; +/* +id-GlobalENB-ID ProtocolIE-ID ::= 21 +*/ + +constexpr int64_t id_GlobalENB_ID = 21; +/* +id-Globalen-gNB-ID ProtocolIE-ID ::= 252 +*/ + +constexpr int64_t id_Globalen_gNB_ID = 252; +/* +id-HO-cause ProtocolIE-ID ::= 80 +*/ + +constexpr int64_t id_HO_cause = 80; +/* +id-HandoverReportType ProtocolIE-ID ::= 54 +*/ + +constexpr int64_t id_HandoverReportType = 54; +/* +id-HandoverRestrictionList ProtocolIE-ID ::= 240 +*/ + +constexpr int64_t id_HandoverRestrictionList = 240; +/* +id-InitiatingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 245 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcConfigUpdate = 245; +/* +id-InitiatingNodeType-EndcX2Removal ProtocolIE-ID ::= 298 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Removal = 298; +/* +id-InitiatingNodeType-EndcX2Setup ProtocolIE-ID ::= 244 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Setup = 244; +/* +id-InitiatingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 285 +*/ + +constexpr int64_t id_InitiatingNodeType_EutranrCellResourceCoordination = 285; +/* +id-IntendedULDLConfiguration ProtocolIE-ID ::= 99 +*/ + +constexpr int64_t id_IntendedULDLConfiguration = 99; +/* +id-InvokeIndication ProtocolIE-ID ::= 62 +*/ + +constexpr int64_t id_InvokeIndication = 62; +/* +id-LHN-ID ProtocolIE-ID ::= 159 +*/ + +constexpr int64_t id_LHN_ID = 159; +/* +id-ListofEUTRACellsinEUTRACoordinationReq ProtocolIE-ID ::= 289 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationReq = 289; +/* +id-ListofEUTRACellsinEUTRACoordinationResp ProtocolIE-ID ::= 290 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationResp = 290; +/* +id-ListofEUTRACellsinNRCoordinationReq ProtocolIE-ID ::= 291 +*/ + +constexpr int64_t id_ListofEUTRACellsinNRCoordinationReq = 291; +/* +id-ListofNRCellsinNRCoordinationReq ProtocolIE-ID ::= 292 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationReq = 292; +/* +id-ListofNRCellsinNRCoordinationResp ProtocolIE-ID ::= 293 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationResp = 293; +/* +id-M3Configuration ProtocolIE-ID ::= 85 +*/ + +constexpr int64_t id_M3Configuration = 85; +/* +id-M4Configuration ProtocolIE-ID ::= 86 +*/ + +constexpr int64_t id_M4Configuration = 86; +/* +id-M5Configuration ProtocolIE-ID ::= 87 +*/ + +constexpr int64_t id_M5Configuration = 87; +/* +id-M6Configuration ProtocolIE-ID ::= 161 +*/ + +constexpr int64_t id_M6Configuration = 161; +/* +id-M7Configuration ProtocolIE-ID ::= 162 +*/ + +constexpr int64_t id_M7Configuration = 162; +/* +id-MBMS-Service-Area-List ProtocolIE-ID ::= 79 +*/ + +constexpr int64_t id_MBMS_Service_Area_List = 79; +/* +id-MBSFN-Subframe-Info ProtocolIE-ID ::= 56 +*/ + +constexpr int64_t id_MBSFN_Subframe_Info = 56; +/* +id-MDT-Location-Info ProtocolIE-ID ::= 88 +*/ + +constexpr int64_t id_MDT_Location_Info = 88; +/* +id-MDTConfiguration ProtocolIE-ID ::= 72 +*/ + +constexpr int64_t id_MDTConfiguration = 72; +/* +id-MakeBeforeBreakIndicator ProtocolIE-ID ::= 181 +*/ + +constexpr int64_t id_MakeBeforeBreakIndicator = 181; +/* +id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 89 +*/ + +constexpr int64_t id_ManagementBasedMDTPLMNList = 89; +/* +id-ManagementBasedMDTallowed ProtocolIE-ID ::= 74 +*/ + +constexpr int64_t id_ManagementBasedMDTallowed = 74; +/* +id-Masked-IMEISV ProtocolIE-ID ::= 98 +*/ + +constexpr int64_t id_Masked_IMEISV = 98; +/* +id-MeNB-UE-X2AP-ID ProtocolIE-ID ::= 111 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID = 111; +/* +id-MeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 157 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID_Extension = 157; +/* +id-MeNBCell-ID ProtocolIE-ID ::= 279 +*/ + +constexpr int64_t id_MeNBCell_ID = 279; +/* +id-MeNBCoordinationAssistanceInformation ProtocolIE-ID ::= 323 +*/ + +constexpr int64_t id_MeNBCoordinationAssistanceInformation = 323; +/* +id-MeNBResourceCoordinationInformation ProtocolIE-ID ::= 257 +*/ + +constexpr int64_t id_MeNBResourceCoordinationInformation = 257; +/* +id-MeNBtoSeNBContainer ProtocolIE-ID ::= 119 +*/ + +constexpr int64_t id_MeNBtoSeNBContainer = 119; +/* +id-MeNBtoSgNBContainer ProtocolIE-ID ::= 206 +*/ + +constexpr int64_t id_MeNBtoSgNBContainer = 206; +/* +id-Measurement-ID ProtocolIE-ID ::= 37 +*/ + +constexpr int64_t id_Measurement_ID = 37; +/* +id-MeasurementFailureCause-Item ProtocolIE-ID ::= 67 +*/ + +constexpr int64_t id_MeasurementFailureCause_Item = 67; +/* +id-MeasurementInitiationResult-Item ProtocolIE-ID ::= 66 +*/ + +constexpr int64_t id_MeasurementInitiationResult_Item = 66; +/* +id-MeasurementInitiationResult-List ProtocolIE-ID ::= 65 +*/ + +constexpr int64_t id_MeasurementInitiationResult_List = 65; +/* +id-MobilityInformation ProtocolIE-ID ::= 82 +*/ + +constexpr int64_t id_MobilityInformation = 82; +/* +id-MultibandInfoList ProtocolIE-ID ::= 84 +*/ + +constexpr int64_t id_MultibandInfoList = 84; +/* +id-NRCGI ProtocolIE-ID ::= 322 +*/ + +constexpr int64_t id_NRCGI = 322; +/* +id-NRS-NSSS-PowerOffset ProtocolIE-ID ::= 282 +*/ + +constexpr int64_t id_NRS_NSSS_PowerOffset = 282; +/* +id-NRUESecurityCapabilities ProtocolIE-ID ::= 248 +*/ + +constexpr int64_t id_NRUESecurityCapabilities = 248; +/* +id-NRrestrictionin5GS ProtocolIE-ID ::= 305 +*/ + +constexpr int64_t id_NRrestrictionin5GS = 305; +/* +id-NRrestrictioninEPSasSecondaryRAT ProtocolIE-ID ::= 202 +*/ + +constexpr int64_t id_NRrestrictioninEPSasSecondaryRAT = 202; +/* +id-NSSS-NumOccasionDifferentPrecoder ProtocolIE-ID ::= 283 +*/ + +constexpr int64_t id_NSSS_NumOccasionDifferentPrecoder = 283; +/* +id-NeighbourTAC ProtocolIE-ID ::= 76 +*/ + +constexpr int64_t id_NeighbourTAC = 76; +/* +id-New-eNB-UE-X2AP-ID ProtocolIE-ID ::= 9 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID = 9; +/* +id-New-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 155 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID_Extension = 155; +/* +id-NewEUTRANCellIdentifier ProtocolIE-ID ::= 175 +*/ + +constexpr int64_t id_NewEUTRANCellIdentifier = 175; +/* +id-Number-of-Antennaports ProtocolIE-ID ::= 41 +*/ + +constexpr int64_t id_Number_of_Antennaports = 41; +/* +id-OffsetOfNbiotChannelNumberToDL-EARFCN ProtocolIE-ID ::= 177 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177; +/* +id-OffsetOfNbiotChannelNumberToUL-EARFCN ProtocolIE-ID ::= 178 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178; +/* +id-Old-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 264 +*/ + +constexpr int64_t id_Old_SgNB_UE_X2AP_ID = 264; +/* +id-Old-eNB-UE-X2AP-ID ProtocolIE-ID ::= 10 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID = 10; +/* +id-Old-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 156 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID_Extension = 156; +/* +id-PDCPChangeIndication ProtocolIE-ID ::= 249 +*/ + +constexpr int64_t id_PDCPChangeIndication = 249; +/* +id-PRACH-Configuration ProtocolIE-ID ::= 55 +*/ + +constexpr int64_t id_PRACH_Configuration = 55; +/* +id-PartialSuccessIndicator ProtocolIE-ID ::= 64 +*/ + +constexpr int64_t id_PartialSuccessIndicator = 64; +/* +id-ProSeAuthorized ProtocolIE-ID ::= 103 +*/ + +constexpr int64_t id_ProSeAuthorized = 103; +/* +id-ProSeUEtoNetworkRelaying ProtocolIE-ID ::= 149 +*/ + +constexpr int64_t id_ProSeUEtoNetworkRelaying = 149; +/* +id-ProtectedEUTRAResourceIndication ProtocolIE-ID ::= 284 +*/ + +constexpr int64_t id_ProtectedEUTRAResourceIndication = 284; +/* +id-RLC-Status ProtocolIE-ID ::= 300 +*/ + +constexpr int64_t id_RLC_Status = 300; +/* +id-RLCMode-transferred ProtocolIE-ID ::= 317 +*/ + +constexpr int64_t id_RLCMode_transferred = 317; +/* +id-RNL-Header ProtocolIE-ID ::= 101 +*/ + +constexpr int64_t id_RNL_Header = 101; +/* +id-RRCConfigIndication ProtocolIE-ID ::= 272 +*/ + +constexpr int64_t id_RRCConfigIndication = 272; +/* +id-RRCConnReestabIndicator ProtocolIE-ID ::= 78 +*/ + +constexpr int64_t id_RRCConnReestabIndicator = 78; +/* +id-RRCConnSetupIndicator ProtocolIE-ID ::= 75 +*/ + +constexpr int64_t id_RRCConnSetupIndicator = 75; +/* +id-RRCContainer ProtocolIE-ID ::= 237 +*/ + +constexpr int64_t id_RRCContainer = 237; +/* +id-RSRPMRList ProtocolIE-ID ::= 110 +*/ + +constexpr int64_t id_RSRPMRList = 110; +/* +id-Re-establishmentCellECGI ProtocolIE-ID ::= 49 +*/ + +constexpr int64_t id_Re_establishmentCellECGI = 49; +/* +id-ReceiveStatusOfULPDCPSDUsExtended ProtocolIE-ID ::= 91 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsExtended = 91; +/* +id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ProtocolIE-ID ::= 150 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150; +/* +id-Registration-Request ProtocolIE-ID ::= 28 +*/ + +constexpr int64_t id_Registration_Request = 28; +/* +id-ReportCharacteristics ProtocolIE-ID ::= 38 +*/ + +constexpr int64_t id_ReportCharacteristics = 38; +/* +id-ReportingPeriodicity ProtocolIE-ID ::= 30 +*/ + +constexpr int64_t id_ReportingPeriodicity = 30; +/* +id-ReportingPeriodicityCSIR ProtocolIE-ID ::= 145 +*/ + +constexpr int64_t id_ReportingPeriodicityCSIR = 145; +/* +id-ReportingPeriodicityRSRPMR ProtocolIE-ID ::= 109 +*/ + +constexpr int64_t id_ReportingPeriodicityRSRPMR = 109; +/* +id-RequestedSplitSRBs ProtocolIE-ID ::= 208 +*/ + +constexpr int64_t id_RequestedSplitSRBs = 208; +/* +id-RequestedSplitSRBsrelease ProtocolIE-ID ::= 280 +*/ + +constexpr int64_t id_RequestedSplitSRBsrelease = 280; +/* +id-RespondingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 247 +*/ + +constexpr int64_t id_RespondingNodeType_EndcConfigUpdate = 247; +/* +id-RespondingNodeType-EndcX2Removal ProtocolIE-ID ::= 299 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Removal = 299; +/* +id-RespondingNodeType-EndcX2Setup ProtocolIE-ID ::= 246 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Setup = 246; +/* +id-RespondingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 286 +*/ + +constexpr int64_t id_RespondingNodeType_EutranrCellResourceCoordination = 286; +/* +id-ResponseInformationSeNBReconfComp ProtocolIE-ID ::= 123 +*/ + +constexpr int64_t id_ResponseInformationSeNBReconfComp = 123; +/* +id-ResponseInformationSgNBReconfComp ProtocolIE-ID ::= 214 +*/ + +constexpr int64_t id_ResponseInformationSgNBReconfComp = 214; +/* +id-SCGChangeIndication ProtocolIE-ID ::= 136 +*/ + +constexpr int64_t id_SCGChangeIndication = 136; +/* +id-SCGConfigurationQuery ProtocolIE-ID ::= 241 +*/ + +constexpr int64_t id_SCGConfigurationQuery = 241; +/* +id-SGNB-Addition-Trigger-Ind ProtocolIE-ID ::= 278 +*/ + +constexpr int64_t id_SGNB_Addition_Trigger_Ind = 278; +/* +id-SIPTO-BearerDeactivationIndication ProtocolIE-ID ::= 164 +*/ + +constexpr int64_t id_SIPTO_BearerDeactivationIndication = 164; +/* +id-SIPTO-Correlation-ID ProtocolIE-ID ::= 167 +*/ + +constexpr int64_t id_SIPTO_Correlation_ID = 167; +/* +id-SIPTO-L-GW-TransportLayerAddress ProtocolIE-ID ::= 168 +*/ + +constexpr int64_t id_SIPTO_L_GW_TransportLayerAddress = 168; +/* +id-SRBType ProtocolIE-ID ::= 238 +*/ + +constexpr int64_t id_SRBType = 238; +/* +id-SRVCCOperationPossible ProtocolIE-ID ::= 36 +*/ + +constexpr int64_t id_SRVCCOperationPossible = 36; +/* +id-SeNB-UE-X2AP-ID ProtocolIE-ID ::= 112 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID = 112; +/* +id-SeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 158 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID_Extension = 158; +/* +id-SeNBSecurityKey ProtocolIE-ID ::= 114 +*/ + +constexpr int64_t id_SeNBSecurityKey = 114; +/* +id-SeNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 115 +*/ + +constexpr int64_t id_SeNBUEAggregateMaximumBitRate = 115; +/* +id-SeNBtoMeNBContainer ProtocolIE-ID ::= 122 +*/ + +constexpr int64_t id_SeNBtoMeNBContainer = 122; +/* +id-SecondaryRATUsageReport ProtocolIE-ID ::= 255 +*/ + +constexpr int64_t id_SecondaryRATUsageReport = 255; +/* +id-SecondaryRATUsageReport-Item ProtocolIE-ID ::= 266 +*/ + +constexpr int64_t id_SecondaryRATUsageReport_Item = 266; +/* +id-SecondaryRATUsageReportList ProtocolIE-ID ::= 265 +*/ + +constexpr int64_t id_SecondaryRATUsageReportList = 265; +/* +id-SelectedPLMN ProtocolIE-ID ::= 269 +*/ + +constexpr int64_t id_SelectedPLMN = 269; +/* +id-ServedCells ProtocolIE-ID ::= 20 +*/ + +constexpr int64_t id_ServedCells = 20; +/* +id-ServedCellsToActivate ProtocolIE-ID ::= 57 +*/ + +constexpr int64_t id_ServedCellsToActivate = 57; +/* +id-ServedCellsToAdd ProtocolIE-ID ::= 25 +*/ + +constexpr int64_t id_ServedCellsToAdd = 25; +/* +id-ServedCellsToDelete ProtocolIE-ID ::= 27 +*/ + +constexpr int64_t id_ServedCellsToDelete = 27; +/* +id-ServedCellsToModify ProtocolIE-ID ::= 26 +*/ + +constexpr int64_t id_ServedCellsToModify = 26; +/* +id-ServedEUTRAcellsENDCX2ManagementList ProtocolIE-ID ::= 250 +*/ + +constexpr int64_t id_ServedEUTRAcellsENDCX2ManagementList = 250; +/* +id-ServedEUTRAcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 260 +*/ + +constexpr int64_t id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260; +/* +id-ServedEUTRAcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 259 +*/ + +constexpr int64_t id_ServedEUTRAcellsToModifyListENDCConfUpd = 259; +/* +id-ServedNRCellsToActivate ProtocolIE-ID ::= 267 +*/ + +constexpr int64_t id_ServedNRCellsToActivate = 267; +/* +id-ServedNRcellsENDCX2ManagementList ProtocolIE-ID ::= 253 +*/ + +constexpr int64_t id_ServedNRcellsENDCX2ManagementList = 253; +/* +id-ServedNRcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 262 +*/ + +constexpr int64_t id_ServedNRcellsToDeleteListENDCConfUpd = 262; +/* +id-ServedNRcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 261 +*/ + +constexpr int64_t id_ServedNRcellsToModifyListENDCConfUpd = 261; +/* +id-ServingPLMN ProtocolIE-ID ::= 116 +*/ + +constexpr int64_t id_ServingPLMN = 116; +/* +id-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 207 +*/ + +constexpr int64_t id_SgNB_UE_X2AP_ID = 207; +/* +id-SgNBActivityNotification ProcedureCode ::= 42 +*/ + +constexpr int64_t id_SgNBActivityNotification = 42; +/* +id-SgNBCoordinationAssistanceInformation ProtocolIE-ID ::= 324 +*/ + +constexpr int64_t id_SgNBCoordinationAssistanceInformation = 324; +/* +id-SgNBResourceCoordinationInformation ProtocolIE-ID ::= 258 +*/ + +constexpr int64_t id_SgNBResourceCoordinationInformation = 258; +/* +id-SgNBSecurityKey ProtocolIE-ID ::= 203 +*/ + +constexpr int64_t id_SgNBSecurityKey = 203; +/* +id-SgNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 204 +*/ + +constexpr int64_t id_SgNBUEAggregateMaximumBitRate = 204; +/* +id-SgNBtoMeNBContainer ProtocolIE-ID ::= 211 +*/ + +constexpr int64_t id_SgNBtoMeNBContainer = 211; +/* +id-ShortMAC-I ProtocolIE-ID ::= 51 +*/ + +constexpr int64_t id_ShortMAC_I = 51; +/* +id-SignallingBasedMDTPLMNList ProtocolIE-ID ::= 90 +*/ + +constexpr int64_t id_SignallingBasedMDTPLMNList = 90; +/* +id-SourceCellCRNTI ProtocolIE-ID ::= 83 +*/ + +constexpr int64_t id_SourceCellCRNTI = 83; +/* +id-SourceCellECGI ProtocolIE-ID ::= 52 +*/ + +constexpr int64_t id_SourceCellECGI = 52; +/* +id-SpectrumSharingGroupID ProtocolIE-ID ::= 288 +*/ + +constexpr int64_t id_SpectrumSharingGroupID = 288; +/* +id-SplitSRB ProtocolIE-ID ::= 242 +*/ + +constexpr int64_t id_SplitSRB = 242; +/* +id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 275 +*/ + +constexpr int64_t id_SubscriberProfileIDforRFP = 275; +/* +id-Subscription-Based-UE-DifferentiationInfo ProtocolIE-ID ::= 309 +*/ + +constexpr int64_t id_Subscription_Based_UE_DifferentiationInfo = 309; +/* +id-Target-SgNB-ID ProtocolIE-ID ::= 239 +*/ + +constexpr int64_t id_Target_SgNB_ID = 239; +/* +id-TargetCell-ID ProtocolIE-ID ::= 11 +*/ + +constexpr int64_t id_TargetCell_ID = 11; +/* +id-TargetCellInUTRAN ProtocolIE-ID ::= 81 +*/ + +constexpr int64_t id_TargetCellInUTRAN = 81; +/* +id-TargeteNBtoSource-eNBTransparentContainer ProtocolIE-ID ::= 12 +*/ + +constexpr int64_t id_TargeteNBtoSource_eNBTransparentContainer = 12; +/* +id-Time-UE-StayedInCell-EnhancedGranularity ProtocolIE-ID ::= 77 +*/ + +constexpr int64_t id_Time_UE_StayedInCell_EnhancedGranularity = 77; +/* +id-TimeToWait ProtocolIE-ID ::= 22 +*/ + +constexpr int64_t id_TimeToWait = 22; +/* +id-TraceActivation ProtocolIE-ID ::= 13 +*/ + +constexpr int64_t id_TraceActivation = 13; +/* +id-Tunnel-Information-for-BBF ProtocolIE-ID ::= 163 +*/ + +constexpr int64_t id_Tunnel_Information_for_BBF = 163; +/* +id-UE-ContextInformation ProtocolIE-ID ::= 14 +*/ + +constexpr int64_t id_UE_ContextInformation = 14; +/* +id-UE-ContextInformation-SgNBModReq ProtocolIE-ID ::= 215 +*/ + +constexpr int64_t id_UE_ContextInformation_SgNBModReq = 215; +/* +id-UE-ContextInformationRetrieve ProtocolIE-ID ::= 173 +*/ + +constexpr int64_t id_UE_ContextInformationRetrieve = 173; +/* +id-UE-ContextInformationSeNBModReq ProtocolIE-ID ::= 124 +*/ + +constexpr int64_t id_UE_ContextInformationSeNBModReq = 124; +/* +id-UE-ContextKeptIndicator ProtocolIE-ID ::= 154 +*/ + +constexpr int64_t id_UE_ContextKeptIndicator = 154; +/* +id-UE-ContextReferenceAtSeNB ProtocolIE-ID ::= 153 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSeNB = 153; +/* +id-UE-ContextReferenceAtSgNB ProtocolIE-ID ::= 254 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSgNB = 254; +/* +id-UE-ContextReferenceAtWT ProtocolIE-ID ::= 182 +*/ + +constexpr int64_t id_UE_ContextReferenceAtWT = 182; +/* +id-UE-HistoryInformation ProtocolIE-ID ::= 15 +*/ + +constexpr int64_t id_UE_HistoryInformation = 15; +/* +id-UE-HistoryInformationFromTheUE ProtocolIE-ID ::= 105 +*/ + +constexpr int64_t id_UE_HistoryInformationFromTheUE = 105; +/* +id-UE-RLF-Report-Container ProtocolIE-ID ::= 60 +*/ + +constexpr int64_t id_UE_RLF_Report_Container = 60; +/* +id-UE-RLF-Report-Container-for-extended-bands ProtocolIE-ID ::= 107 +*/ + +constexpr int64_t id_UE_RLF_Report_Container_for_extended_bands = 107; +/* +id-UE-SecurityCapabilities ProtocolIE-ID ::= 113 +*/ + +constexpr int64_t id_UE_SecurityCapabilities = 113; +/* +id-UE-X2AP-ID ProtocolIE-ID ::= 16 +*/ + +constexpr int64_t id_UE_X2AP_ID = 16; +/* +id-UEAppLayerMeasConfig ProtocolIE-ID ::= 195 +*/ + +constexpr int64_t id_UEAppLayerMeasConfig = 195; +/* +id-UEContextLevelUserPlaneActivity ProtocolIE-ID ::= 296 +*/ + +constexpr int64_t id_UEContextLevelUserPlaneActivity = 296; +/* +id-UEID ProtocolIE-ID ::= 147 +*/ + +constexpr int64_t id_UEID = 147; +/* +id-UENRMeasurement ProtocolIE-ID ::= 243 +*/ + +constexpr int64_t id_UENRMeasurement = 243; +/* +id-UESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 184 +*/ + +constexpr int64_t id_UESidelinkAggregateMaximumBitRate = 184; +/* +id-UEs-Admitted-ToBeReset ProtocolIE-ID ::= 271 +*/ + +constexpr int64_t id_UEs_Admitted_ToBeReset = 271; +/* +id-UEs-ToBeReset ProtocolIE-ID ::= 270 +*/ + +constexpr int64_t id_UEs_ToBeReset = 270; +/* +id-UL-EARFCNExtension ProtocolIE-ID ::= 95 +*/ + +constexpr int64_t id_UL_EARFCNExtension = 95; +/* +id-UL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 194 +*/ + +constexpr int64_t id_UL_scheduling_PDCCH_CCE_usage = 194; +/* +id-ULCOUNTValueExtended ProtocolIE-ID ::= 92 +*/ + +constexpr int64_t id_ULCOUNTValueExtended = 92; +/* +id-ULCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 151 +*/ + +constexpr int64_t id_ULCOUNTValuePDCP_SNlength18 = 151; +/* +id-UplinkPacketLossRate ProtocolIE-ID ::= 274 +*/ + +constexpr int64_t id_UplinkPacketLossRate = 274; +/* +id-V2XServicesAuthorized ProtocolIE-ID ::= 176 +*/ + +constexpr int64_t id_V2XServicesAuthorized = 176; +/* +id-WLANMeasurementConfiguration ProtocolIE-ID ::= 304 +*/ + +constexpr int64_t id_WLANMeasurementConfiguration = 304; +/* +id-WT-UE-ContextKeptIndicator ProtocolIE-ID ::= 183 +*/ + +constexpr int64_t id_WT_UE_ContextKeptIndicator = 183; +/* +id-X2RemovalThreshold ProtocolIE-ID ::= 169 +*/ + +constexpr int64_t id_X2RemovalThreshold = 169; +/* +id-cellActivation ProcedureCode ::= 15 +*/ + +constexpr int64_t id_cellActivation = 15; +/* +id-dL-Forwarding ProtocolIE-ID ::= 306 +*/ + +constexpr int64_t id_dL_Forwarding = 306; +/* +id-dLPDCPSnLength ProtocolIE-ID ::= 311 +*/ + +constexpr int64_t id_dLPDCPSnLength = 311; +/* +id-dataForwardingAddressIndication ProcedureCode ::= 44 +*/ + +constexpr int64_t id_dataForwardingAddressIndication = 44; +/* +id-duplicationActivation ProtocolIE-ID ::= 315 +*/ + +constexpr int64_t id_duplicationActivation = 315; +/* +id-eARFCNExtension ProtocolIE-ID ::= 94 +*/ + +constexpr int64_t id_eARFCNExtension = 94; +/* +id-eNBConfigurationUpdate ProcedureCode ::= 8 +*/ + +constexpr int64_t id_eNBConfigurationUpdate = 8; +/* +id-eUTRANRCellResourceCoordination ProcedureCode ::= 41 +*/ + +constexpr int64_t id_eUTRANRCellResourceCoordination = 41; +/* +id-endcCellActivation ProcedureCode ::= 39 +*/ + +constexpr int64_t id_endcCellActivation = 39; +/* +id-endcConfigurationUpdate ProcedureCode ::= 37 +*/ + +constexpr int64_t id_endcConfigurationUpdate = 37; +/* +id-endcPartialReset ProcedureCode ::= 40 +*/ + +constexpr int64_t id_endcPartialReset = 40; +/* +id-endcX2Removal ProcedureCode ::= 43 +*/ + +constexpr int64_t id_endcX2Removal = 43; +/* +id-endcX2Setup ProcedureCode ::= 36 +*/ + +constexpr int64_t id_endcX2Setup = 36; +/* +id-enhancedRNTP ProtocolIE-ID ::= 148 +*/ + +constexpr int64_t id_enhancedRNTP = 148; +/* +id-errorIndication ProcedureCode ::= 3 +*/ + +constexpr int64_t id_errorIndication = 3; +/* +id-extended-e-RAB-GuaranteedBitrateDL ProtocolIE-ID ::= 198 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateDL = 198; +/* +id-extended-e-RAB-GuaranteedBitrateUL ProtocolIE-ID ::= 199 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateUL = 199; +/* +id-extended-e-RAB-MaximumBitrateDL ProtocolIE-ID ::= 196 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateDL = 196; +/* +id-extended-e-RAB-MaximumBitrateUL ProtocolIE-ID ::= 197 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateUL = 197; +/* +id-extended-uEaggregateMaximumBitRateDownlink ProtocolIE-ID ::= 200 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateDownlink = 200; +/* +id-extended-uEaggregateMaximumBitRateUplink ProtocolIE-ID ::= 201 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateUplink = 201; +/* +id-gNBStatusIndication ProcedureCode ::= 45 +*/ + +constexpr int64_t id_gNBStatusIndication = 45; +/* +id-handoverCancel ProcedureCode ::= 1 +*/ + +constexpr int64_t id_handoverCancel = 1; +/* +id-handoverPreparation ProcedureCode ::= 0 +*/ + +constexpr int64_t id_handoverPreparation = 0; +/* +id-handoverReport ProcedureCode ::= 14 +*/ + +constexpr int64_t id_handoverReport = 14; +/* +id-lCID ProtocolIE-ID ::= 314 +*/ + +constexpr int64_t id_lCID = 314; +/* +id-loadIndication ProcedureCode ::= 2 +*/ + +constexpr int64_t id_loadIndication = 2; +/* +id-meNBinitiatedSeNBModificationPreparation ProcedureCode ::= 21 +*/ + +constexpr int64_t id_meNBinitiatedSeNBModificationPreparation = 21; +/* +id-meNBinitiatedSeNBRelease ProcedureCode ::= 23 +*/ + +constexpr int64_t id_meNBinitiatedSeNBRelease = 23; +/* +id-meNBinitiatedSgNBModificationPreparation ProcedureCode ::= 29 +*/ + +constexpr int64_t id_meNBinitiatedSgNBModificationPreparation = 29; +/* +id-meNBinitiatedSgNBRelease ProcedureCode ::= 31 +*/ + +constexpr int64_t id_meNBinitiatedSgNBRelease = 31; +/* +id-mobilitySettingsChange ProcedureCode ::= 12 +*/ + +constexpr int64_t id_mobilitySettingsChange = 12; +/* +id-new-drb-ID-req ProtocolIE-ID ::= 325 +*/ + +constexpr int64_t id_new_drb_ID_req = 325; +/* +id-privateMessage ProcedureCode ::= 11 +*/ + +constexpr int64_t id_privateMessage = 11; +/* +id-rLFIndication ProcedureCode ::= 13 +*/ + +constexpr int64_t id_rLFIndication = 13; +/* +id-rRCTransfer ProcedureCode ::= 35 +*/ + +constexpr int64_t id_rRCTransfer = 35; +/* +id-reset ProcedureCode ::= 7 +*/ + +constexpr int64_t id_reset = 7; +/* +id-resourceStatusReporting ProcedureCode ::= 10 +*/ + +constexpr int64_t id_resourceStatusReporting = 10; +/* +id-resourceStatusReportingInitiation ProcedureCode ::= 9 +*/ + +constexpr int64_t id_resourceStatusReportingInitiation = 9; +/* +id-resumeID ProtocolIE-ID ::= 172 +*/ + +constexpr int64_t id_resumeID = 172; +/* +id-retrieveUEContext ProcedureCode ::= 26 +*/ + +constexpr int64_t id_retrieveUEContext = 26; +/* +id-seNBAdditionPreparation ProcedureCode ::= 19 +*/ + +constexpr int64_t id_seNBAdditionPreparation = 19; +/* +id-seNBCounterCheck ProcedureCode ::= 25 +*/ + +constexpr int64_t id_seNBCounterCheck = 25; +/* +id-seNBReconfigurationCompletion ProcedureCode ::= 20 +*/ + +constexpr int64_t id_seNBReconfigurationCompletion = 20; +/* +id-seNBinitiatedSeNBModification ProcedureCode ::= 22 +*/ + +constexpr int64_t id_seNBinitiatedSeNBModification = 22; +/* +id-seNBinitiatedSeNBRelease ProcedureCode ::= 24 +*/ + +constexpr int64_t id_seNBinitiatedSeNBRelease = 24; +/* +id-secondaryRATDataUsageReport ProcedureCode ::= 38 +*/ + +constexpr int64_t id_secondaryRATDataUsageReport = 38; +/* +id-secondarymeNBULGTPTEIDatPDCP ProtocolIE-ID ::= 313 +*/ + +constexpr int64_t id_secondarymeNBULGTPTEIDatPDCP = 313; +/* +id-secondarysgNBDLGTPTEIDatPDCP ProtocolIE-ID ::= 312 +*/ + +constexpr int64_t id_secondarysgNBDLGTPTEIDatPDCP = 312; +/* +id-serviceType ProtocolIE-ID ::= 276 +*/ + +constexpr int64_t id_serviceType = 276; +/* +id-sgNBAdditionPreparation ProcedureCode ::= 27 +*/ + +constexpr int64_t id_sgNBAdditionPreparation = 27; +/* +id-sgNBChange ProcedureCode ::= 34 +*/ + +constexpr int64_t id_sgNBChange = 34; +/* +id-sgNBCounterCheck ProcedureCode ::= 33 +*/ + +constexpr int64_t id_sgNBCounterCheck = 33; +/* +id-sgNBReconfigurationCompletion ProcedureCode ::= 28 +*/ + +constexpr int64_t id_sgNBReconfigurationCompletion = 28; +/* +id-sgNBinitiatedSgNBModification ProcedureCode ::= 30 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBModification = 30; +/* +id-sgNBinitiatedSgNBRelease ProcedureCode ::= 32 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBRelease = 32; +/* +id-snStatusTransfer ProcedureCode ::= 4 +*/ + +constexpr int64_t id_snStatusTransfer = 4; +/* +id-uEContextRelease ProcedureCode ::= 5 +*/ + +constexpr int64_t id_uEContextRelease = 5; +/* +id-uL-GTPtunnelEndpoint ProtocolIE-ID ::= 185 +*/ + +constexpr int64_t id_uL_GTPtunnelEndpoint = 185; +/* +id-uLpDCPSnLength ProtocolIE-ID ::= 302 +*/ + +constexpr int64_t id_uLpDCPSnLength = 302; +/* +id-x2APMessage ProtocolIE-ID ::= 102 +*/ + +constexpr int64_t id_x2APMessage = 102; +/* +id-x2APMessageTransfer ProcedureCode ::= 17 +*/ + +constexpr int64_t id_x2APMessageTransfer = 17; +/* +id-x2Release ProcedureCode ::= 16 +*/ + +constexpr int64_t id_x2Release = 16; +/* +id-x2Removal ProcedureCode ::= 18 +*/ + +constexpr int64_t id_x2Removal = 18; +/* +id-x2Setup ProcedureCode ::= 6 +*/ + +constexpr int64_t id_x2Setup = 6; +/* +maxCSIProcess INTEGER ::= 4 +*/ + +constexpr int64_t maxCSIProcess = 4; +/* +maxCSIReport INTEGER ::= 2 +*/ + +constexpr int64_t maxCSIReport = 2; +/* +maxCellReport INTEGER ::= 9 +*/ + +constexpr int64_t maxCellReport = 9; +/* +maxCellineNB INTEGER ::= 256 +*/ + +constexpr int64_t maxCellineNB = 256; +/* +maxCellinengNB INTEGER ::= 16384 +*/ + +constexpr int64_t maxCellinengNB = 16384; +/* +maxEARFCN INTEGER ::= 65535 +*/ + +constexpr int64_t maxEARFCN = 65535; +/* +maxEARFCNPlusOne INTEGER ::= 65536 +*/ + +constexpr int64_t maxEARFCNPlusOne = 65536; +/* +maxFailedMeasObjects INTEGER ::= 32 +*/ + +constexpr int64_t maxFailedMeasObjects = 32; +/* +maxInterfaces INTEGER ::= 16 +*/ + +constexpr int64_t maxInterfaces = 16; +/* +maxNrOfErrors INTEGER ::= 256 +*/ + +constexpr int64_t maxNrOfErrors = 256; +/* +maxPools INTEGER ::= 16 +*/ + +constexpr int64_t maxPools = 16; +/* +maxSubband INTEGER ::= 14 +*/ + +constexpr int64_t maxSubband = 14; +/* +maxUEReport INTEGER ::= 128 +*/ + +constexpr int64_t maxUEReport = 128; +/* +maxUEsinengNBDU INTEGER ::= 8192 +*/ + +constexpr int64_t maxUEsinengNBDU = 8192; +/* +maxnoNRcellsSpectrumSharingWithE-UTRA INTEGER ::= 64 +*/ + +constexpr int64_t maxnoNRcellsSpectrumSharingWithE_UTRA = 64; +/* +maxnoofBPLMNs INTEGER ::= 6 +*/ + +constexpr int64_t maxnoofBPLMNs = 6; +/* +maxnoofBands INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofBands = 16; +/* +maxnoofBearers INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofBearers = 256; +/* +maxnoofBluetoothName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofBluetoothName = 4; +/* +maxnoofCellIDforMDT INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforMDT = 32; +/* +maxnoofCellIDforQMC INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforQMC = 32; +/* +maxnoofCells INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofCells = 16; +/* +maxnoofCoMPCells INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCoMPCells = 32; +/* +maxnoofCoMPHypothesisSet INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofCoMPHypothesisSet = 256; +/* +maxnoofEPLMNs INTEGER ::= 15 +*/ + +constexpr int64_t maxnoofEPLMNs = 15; +/* +maxnoofEPLMNsPlusOne INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofEPLMNsPlusOne = 16; +/* +maxnoofForbLACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbLACs = 4096; +/* +maxnoofForbTACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbTACs = 4096; +/* +maxnoofMBMSServiceAreaIdentities INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofMBMSServiceAreaIdentities = 256; +/* +maxnoofMBSFN INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofMBSFN = 8; +/* +maxnoofMDTPLMNs INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofMDTPLMNs = 16; +/* +maxnoofNeighbours INTEGER ::= 512 +*/ + +constexpr int64_t maxnoofNeighbours = 512; +/* +maxnoofNrCellBands INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofNrCellBands = 32; +/* +maxnoofPA INTEGER ::= 3 +*/ + +constexpr int64_t maxnoofPA = 3; +/* +maxnoofPDCP-SN INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPDCP_SN = 16; +/* +maxnoofPLMNforQMC INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPLMNforQMC = 16; +/* +maxnoofPRBs INTEGER ::= 110 +*/ + +constexpr int64_t maxnoofPRBs = 110; +/* +maxnoofProtectedResourcePatterns INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofProtectedResourcePatterns = 16; +/* +maxnoofTAforMDT INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforMDT = 8; +/* +maxnoofTAforQMC INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforQMC = 8; +/* +maxnoofWLANName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofWLANName = 4; +/* +maxnooftimeperiods INTEGER ::= 2 +*/ + +constexpr int64_t maxnooftimeperiods = 2; +/* +maxofNRNeighbours INTEGER ::= 1024 +*/ + +constexpr int64_t maxofNRNeighbours = 1024; +/* +newmaxEARFCN INTEGER ::= 262143 +*/ + +constexpr int64_t newmaxEARFCN = 262143; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp new file mode 100644 index 0000000..09545bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-Containers.hpp @@ -0,0 +1,700 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +X2AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PRIVATE_IES +{ + struct id_t : PrivateIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = PrivateIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct PrivateIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "PrivateIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} +*/ + +template +struct PrivateIE_Container_elm : PrivateIE_Field +{ + static constexpr const char* name() {return "PrivateIE_Container_elm";} + using parent_t = PrivateIE_Field; + +}; +template +struct PrivateIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "PrivateIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_EXTENSION +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} +*/ + +template +struct ProtocolExtensionField : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolExtensionField";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : ExtensionSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename ExtensionSetParam::id_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : ExtensionSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename ExtensionSetParam::criticality_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct extensionValue_t : ExtensionSetParam::Extension_t + { + static constexpr const char* name() {return "extensionValue_t";} + using parent_t = typename ExtensionSetParam::Extension_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::Extension_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::Extension_t::encode(c.id.get_index(), v); + }; + }; + extensionValue_t& ref_extensionValue() {return extensionValue;} + extensionValue_t const& ref_extensionValue() const {return extensionValue;} + template void decode(V& v) + { + v(id); + v(criticality); + v(extensionValue); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(extensionValue); + + }; + void clear() + { + id.clear(); + criticality.clear(); + extensionValue.clear(); + + }; + private: + id_t id; + criticality_t criticality; + extensionValue_t extensionValue; + +}; +/* +ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} +*/ + +template +struct ProtocolExtensionContainer_elm : ProtocolExtensionField +{ + static constexpr const char* name() {return "ProtocolExtensionContainer_elm";} + using parent_t = ProtocolExtensionField; + +}; +template +struct ProtocolExtensionContainer : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolExtensionContainer";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_IES +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Container_elm : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE_Container_elm";} + using parent_t = ProtocolIE_Field; + +}; +template +struct ProtocolIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerList_elm : ProtocolIE_Container +{ + static constexpr const char* name() {return "ProtocolIE_ContainerList_elm";} + using parent_t = ProtocolIE_Container; + +}; +template +struct ProtocolIE_ContainerList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-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 +} +*/ + +struct X2AP_PROTOCOL_IES_PAIR +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct firstCriticality_t : Criticality + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = Criticality; + + }; + struct secondCriticality_t : Criticality + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_FieldPair : asn::sequence<5, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-FieldPair";} + using parent_t = asn::sequence<5, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct firstCriticality_t : IEsSetParam::firstCriticality_t + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = typename IEsSetParam::firstCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::firstCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::firstCriticality_t::encode(c.id.get_index(), v); + }; + }; + firstCriticality_t& ref_firstCriticality() {return firstCriticality;} + firstCriticality_t const& ref_firstCriticality() const {return firstCriticality;} + struct firstValue_t : IEsSetParam::FirstValue_t + { + static constexpr const char* name() {return "firstValue_t";} + using parent_t = typename IEsSetParam::FirstValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::FirstValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::FirstValue_t::encode(c.id.get_index(), v); + }; + }; + firstValue_t& ref_firstValue() {return firstValue;} + firstValue_t const& ref_firstValue() const {return firstValue;} + struct secondCriticality_t : IEsSetParam::secondCriticality_t + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = typename IEsSetParam::secondCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::secondCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::secondCriticality_t::encode(c.id.get_index(), v); + }; + }; + secondCriticality_t& ref_secondCriticality() {return secondCriticality;} + secondCriticality_t const& ref_secondCriticality() const {return secondCriticality;} + struct secondValue_t : IEsSetParam::SecondValue_t + { + static constexpr const char* name() {return "secondValue_t";} + using parent_t = typename IEsSetParam::SecondValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::SecondValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::SecondValue_t::encode(c.id.get_index(), v); + }; + }; + secondValue_t& ref_secondValue() {return secondValue;} + secondValue_t const& ref_secondValue() const {return secondValue;} + template void decode(V& v) + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + template void encode(V& v) const + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + void clear() + { + id.clear(); + firstCriticality.clear(); + firstValue.clear(); + secondCriticality.clear(); + secondValue.clear(); + + }; + private: + id_t id; + firstCriticality_t firstCriticality; + firstValue_t firstValue; + secondCriticality_t secondCriticality; + secondValue_t secondValue; + +}; +/* +ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPair_elm : ProtocolIE_FieldPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPair_elm";} + using parent_t = ProtocolIE_FieldPair; + +}; +template +struct ProtocolIE_ContainerPair : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPair";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPairList_elm : ProtocolIE_ContainerPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPairList_elm";} + using parent_t = ProtocolIE_ContainerPair; + +}; +template +struct ProtocolIE_ContainerPairList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPairList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Single_Container : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE-Single-Container";} + using parent_t = ProtocolIE_Field; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp new file mode 100644 index 0000000..f056563 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp @@ -0,0 +1,35962 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-Constants.hpp" +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-Containers.hpp" + +/* +DL-ABS-status::= INTEGER (0..100) +*/ + +struct DL_ABS_status : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-ABS-status";} + using parent_t = asn::integer<>; + +}; + +/* +UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationFDD ::= SEQUENCE { + usable-abs-pattern-info BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationFDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;} + usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usable_abs_pattern_info_t usable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationTDD ::= SEQUENCE { + usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationTDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usaable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usaable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;} + usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usaable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usaable_abs_pattern_info_t usaable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformation ::= CHOICE { + fdd UsableABSInformationFDD, + tdd UsableABSInformationTDD, + ... +} +*/ + +struct UsableABSInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "UsableABSInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~UsableABSInformation() {clear();} + struct fdd_t : UsableABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = UsableABSInformationFDD; + + }; + struct tdd_t : UsableABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = UsableABSInformationTDD; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABS_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABS-Status ::= SEQUENCE { + dL-ABS-status DL-ABS-status, + usableABSInformation UsableABSInformation, + iE-Extensions ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABS_Status : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ABS-Status";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_ABS_status_t : DL_ABS_status + { + static constexpr const char* name() {return "dL_ABS_status_t";} + using parent_t = DL_ABS_status; + + }; + dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;} + dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;} + struct usableABSInformation_t : UsableABSInformation + { + static constexpr const char* name() {return "usableABSInformation_t";} + using parent_t = UsableABSInformation; + + }; + usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;} + usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + void clear() + { + dL_ABS_status.clear(); + usableABSInformation.clear(); + iE_Extensions.clear(); + + }; + private: + dL_ABS_status_t dL_ABS_status; + usableABSInformation_t usableABSInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationFDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(40)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationFDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationFDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationTDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(1..70, ...)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationTDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationTDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformation ::= CHOICE { + fdd ABSInformationFDD, + tdd ABSInformationTDD, + abs-inactive NULL, + ... +} +*/ + +struct ABSInformation : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "ABSInformation";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~ABSInformation() {clear();} + struct fdd_t : ABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = ABSInformationFDD; + + }; + struct tdd_t : ABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = ABSInformationTDD; + + }; + struct abs_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "abs_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + char dummy3[sizeof(abs_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Key-eNodeB-Star ::= BIT STRING (SIZE(256)) +*/ + +struct Key_eNodeB_Star : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Key-eNodeB-Star";} + using parent_t = asn::bstring<>; + +}; + +/* +NextHopChainingCount ::= INTEGER (0..7) +*/ + +struct NextHopChainingCount : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NextHopChainingCount";} + using parent_t = asn::integer<>; + +}; + +/* +AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AS_SecurityInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AS-SecurityInformation ::= SEQUENCE { + key-eNodeB-star Key-eNodeB-Star, + nextHopChainingCount NextHopChainingCount, + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AS_SecurityInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "AS-SecurityInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct key_eNodeB_star_t : Key_eNodeB_Star + { + static constexpr const char* name() {return "key_eNodeB_star_t";} + using parent_t = Key_eNodeB_Star; + + }; + key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;} + key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;} + struct nextHopChainingCount_t : NextHopChainingCount + { + static constexpr const char* name() {return "nextHopChainingCount_t";} + using parent_t = NextHopChainingCount; + + }; + nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;} + nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + void clear() + { + key_eNodeB_star.clear(); + nextHopChainingCount.clear(); + iE_Extensions.clear(); + + }; + private: + key_eNodeB_star_t key_eNodeB_star; + nextHopChainingCount_t nextHopChainingCount; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivationID ::= INTEGER (0..255) +*/ + +struct ActivationID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ActivationID";} + using parent_t = asn::integer<>; + +}; + +/* +AdditionalSpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ... +} +*/ + +struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";} + using parent_t = asn::enumerated<10, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + ,ssp9 + } index_t; + +}; + +/* +CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixDL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixDL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixUL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixUL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframe-Info ::= SEQUENCE { + additionalspecialSubframePatterns AdditionalSpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns + { + static constexpr const char* name() {return "additionalspecialSubframePatterns_t";} + using parent_t = AdditionalSpecialSubframePatterns; + + }; + additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;} + additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatterns_t additionalspecialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AdditionalSpecialSubframePatternsExtension ::= ENUMERATED { + ssp10, + ... +} +*/ + +struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ssp10 + } index_t; + +}; + +/* +AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframeExtension-Info ::= SEQUENCE { + additionalspecialSubframePatternsExtension AdditionalSpecialSubframePatternsExtension, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension + { + static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";} + using parent_t = AdditionalSpecialSubframePatternsExtension; + + }; + additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;} + additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatternsExtension.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AerialUEsubscriptionInformation ::= ENUMERATED { + allowed, + not-allowed, + ... +} +*/ + +struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "AerialUEsubscriptionInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + allowed + ,not_allowed + } index_t; + +}; + +/* +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) +*/ + +struct PriorityLevel : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PriorityLevel";} + using parent_t = asn::integer<>; + enum {spare = 0, highest = 1, lowest = 14, no_priority = 15}; + +}; + +/* +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} +*/ + +struct Pre_emptionCapability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionCapability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + shall_not_trigger_pre_emption + ,may_trigger_pre_emption + } index_t; + +}; + +/* +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} +*/ + +struct Pre_emptionVulnerability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionVulnerability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + not_pre_emptable + ,pre_emptable + } index_t; + +}; + +/* +AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AllocationAndRetentionPriority_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AllocationAndRetentionPriority";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct priorityLevel_t : PriorityLevel + { + static constexpr const char* name() {return "priorityLevel_t";} + using parent_t = PriorityLevel; + + }; + priorityLevel_t& ref_priorityLevel() {return priorityLevel;} + priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;} + struct pre_emptionCapability_t : Pre_emptionCapability + { + static constexpr const char* name() {return "pre_emptionCapability_t";} + using parent_t = Pre_emptionCapability; + + }; + pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;} + pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;} + struct pre_emptionVulnerability_t : Pre_emptionVulnerability + { + static constexpr const char* name() {return "pre_emptionVulnerability_t";} + using parent_t = Pre_emptionVulnerability; + + }; + pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;} + pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + void clear() + { + priorityLevel.clear(); + pre_emptionCapability.clear(); + pre_emptionVulnerability.clear(); + iE_Extensions.clear(); + + }; + private: + priorityLevel_t priorityLevel; + pre_emptionCapability_t pre_emptionCapability; + pre_emptionVulnerability_t pre_emptionVulnerability; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMN-Identity ::= OCTET STRING (SIZE(3)) +*/ + +struct PLMN_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PLMN-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) +*/ + +struct EUTRANCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ECGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ECGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ECGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eUTRANcellIdentifier_t : EUTRANCellIdentifier + { + static constexpr const char* name() {return "eUTRANcellIdentifier_t";} + using parent_t = EUTRANCellIdentifier; + + }; + eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;} + eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eUTRANcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eUTRANcellIdentifier_t eUTRANcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI +*/ + +struct CellIdListforMDT_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforMDT_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedMDT::= SEQUENCE { + cellIdListforMDT CellIdListforMDT, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforMDT_t : CellIdListforMDT + { + static constexpr const char* name() {return "cellIdListforMDT_t";} + using parent_t = CellIdListforMDT; + + }; + cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;} + cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforMDT_t cellIdListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAC ::= OCTET STRING (SIZE (2)) +*/ + +struct TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC +*/ + +struct TAListforMDT_elm : TAC +{ + static constexpr const char* name() {return "TAListforMDT_elm";} + using parent_t = TAC; + +}; +struct TAListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedMDT::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforMDT_t : TAListforMDT + { + static constexpr const char* name() {return "tAListforMDT_t";} + using parent_t = TAListforMDT; + + }; + tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;} + tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforMDT_t tAListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAI_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAI-Item ::= SEQUENCE { + tAC TAC, + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAI_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TAI-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + void clear() + { + tAC.clear(); + pLMN_Identity.clear(); + iE_Extensions.clear(); + + }; + private: + tAC_t tAC; + pLMN_Identity_t pLMN_Identity; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item +*/ + +struct TAIListforMDT_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforMDT_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforMDT_t : TAIListforMDT + { + static constexpr const char* name() {return "tAIListforMDT_t";} + using parent_t = TAIListforMDT; + + }; + tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;} + tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAIListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforMDT_t tAIListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfMDT ::= CHOICE { + cellBased CellBasedMDT, + tABased TABasedMDT, + pLMNWide NULL, + ..., + tAIBased TAIBasedMDT +} +*/ + +struct AreaScopeOfMDT : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "AreaScopeOfMDT";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfMDT() {clear();} + struct cellBased_t : CellBasedMDT + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedMDT; + + }; + struct tABased_t : TABasedMDT + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedMDT; + + }; + struct pLMNWide_t : asn::nulltype + { + static constexpr const char* name() {return "pLMNWide_t";} + using parent_t = asn::nulltype; + + }; + struct tAIBased_t : TAIBasedMDT + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedMDT; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(pLMNWide_t)]; + char dummy4[sizeof(tAIBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI +*/ + +struct CellIdListforQMC_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforQMC_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedQMC::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforQMC_t : CellIdListforQMC + { + static constexpr const char* name() {return "cellIdListforQMC_t";} + using parent_t = CellIdListforQMC; + + }; + cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;} + cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforQMC_t cellIdListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC +*/ + +struct TAListforQMC_elm : TAC +{ + static constexpr const char* name() {return "TAListforQMC_elm";} + using parent_t = TAC; + +}; +struct TAListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforQMC_t : TAListforQMC + { + static constexpr const char* name() {return "tAListforQMC_t";} + using parent_t = TAListforQMC; + + }; + tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;} + tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforQMC_t tAListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item +*/ + +struct TAIListforQMC_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforQMC_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforQMC_t : TAIListforQMC + { + static constexpr const char* name() {return "tAIListforQMC_t";} + using parent_t = TAIListforQMC; + + }; + tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;} + tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAIListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforQMC_t tAIListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity +*/ + +struct PLMNListforQMC_elm : PLMN_Identity +{ + static constexpr const char* name() {return "PLMNListforQMC_elm";} + using parent_t = PLMN_Identity; + +}; +struct PLMNListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "PLMNListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PLMNAreaBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "PLMNAreaBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct plmnListforQMC_t : PLMNListforQMC + { + static constexpr const char* name() {return "plmnListforQMC_t";} + using parent_t = PLMNListforQMC; + + }; + plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;} + plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + void clear() + { + plmnListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + plmnListforQMC_t plmnListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + ... +} +*/ + +struct AreaScopeOfQMC : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "AreaScopeOfQMC";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfQMC() {clear();} + struct cellBased_t : CellBasedQMC + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedQMC; + + }; + struct tABased_t : TABasedQMC + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedQMC; + + }; + struct tAIBased_t : TAIBasedQMC + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedQMC; + + }; + struct pLMNAreaBased_t : PLMNAreaBasedQMC + { + static constexpr const char* name() {return "pLMNAreaBased_t";} + using parent_t = PLMNAreaBasedQMC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as();} return nullptr; } + pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(tAIBased_t)]; + char dummy4[sizeof(pLMNAreaBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +FreqBandIndicator ::= INTEGER (1..256, ...) +*/ + +struct FreqBandIndicator : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FreqBandIndicator";} + using parent_t = asn::integer<>; + +}; + +/* +BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BandInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BandInfo ::= SEQUENCE { + freqBandIndicator FreqBandIndicator, + iE-Extensions ProtocolExtensionContainer { {BandInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BandInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "BandInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicator_t : FreqBandIndicator + { + static constexpr const char* name() {return "freqBandIndicator_t";} + using parent_t = FreqBandIndicator; + + }; + freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;} + freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicator_t freqBandIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +BandwidthReducedSI::= ENUMERATED { + scheduled, + ... +} +*/ + +struct BandwidthReducedSI : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BandwidthReducedSI";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + scheduled + } index_t; + +}; + +/* +BearerType ::= ENUMERATED { + non-IP, + ... +} +*/ + +struct BearerType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BearerType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + non_IP + } index_t; + +}; + +/* +BenefitMetric ::= INTEGER (-101..100, ...) +*/ + +struct BenefitMetric : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BenefitMetric";} + using parent_t = asn::integer<>; + +}; + +/* +BitRate ::= INTEGER (0..10000000000) +*/ + +struct BitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BitRate";} + using parent_t = asn::integer<>; + +}; + +/* +BluetoothMeasConfig::= ENUMERATED {setup,...} +*/ + +struct BluetoothMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BluetoothMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +BluetoothName ::= OCTET STRING (SIZE (1..248)) +*/ + +struct BluetoothName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BluetoothName";} + using parent_t = asn::ostring<>; + +}; + +/* +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName +*/ + +struct BluetoothMeasConfigNameList_elm : BluetoothName +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";} + using parent_t = BluetoothName; + +}; +struct BluetoothMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BluetoothMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "BluetoothMeasurementConfiguration";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct bluetoothMeasConfig_t : BluetoothMeasConfig + { + static constexpr const char* name() {return "bluetoothMeasConfig_t";} + using parent_t = BluetoothMeasConfig; + + }; + bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;} + bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;} + struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList + { + static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";} + using parent_t = BluetoothMeasConfigNameList; + static constexpr bool optional = true; + + }; + bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;} + bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;} + struct bt_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "bt_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;} + bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + void clear() + { + bluetoothMeasConfig.clear(); + bluetoothMeasConfigNameList.clear(); + bt_rssi.clear(); + iE_Extensions.clear(); + + }; + private: + bluetoothMeasConfig_t bluetoothMeasConfig; + bluetoothMeasConfigNameList_t bluetoothMeasConfigNameList; + bt_rssi_t bt_rssi; + iE_Extensions_t iE_Extensions; + +}; +/* +BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity +*/ + +struct BroadcastPLMNs_Item_elm : PLMN_Identity +{ + static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";} + using parent_t = PLMN_Identity; + +}; +struct BroadcastPLMNs_Item : asn::sequenceof +{ + static constexpr const char* name() {return "BroadcastPLMNs-Item";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CNTypeRestrictionsItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CNTypeRestrictionsItem ::= SEQUENCE { + plmn-Id PLMN-Identity, + cn-type ENUMERATED {fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CNTypeRestrictionsItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct plmn_Id_t : PLMN_Identity + { + static constexpr const char* name() {return "plmn_Id_t";} + using parent_t = PLMN_Identity; + + }; + plmn_Id_t& ref_plmn_Id() {return plmn_Id;} + plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;} + struct cn_type_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "cn_type_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + fiveGC_forbidden + } index_t; + + }; + + cn_type_t& ref_cn_type() {return cn_type;} + cn_type_t const& ref_cn_type() const {return cn_type;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + void clear() + { + plmn_Id.clear(); + cn_type.clear(); + iE_Extensions.clear(); + + }; + private: + plmn_Id_t plmn_Id; + cn_type_t cn_type; + iE_Extensions_t iE_Extensions; + +}; +/* +CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem +*/ + +struct CNTypeRestrictions_elm : CNTypeRestrictionsItem +{ + static constexpr const char* name() {return "CNTypeRestrictions_elm";} + using parent_t = CNTypeRestrictionsItem; + +}; +struct CNTypeRestrictions : asn::sequenceof +{ + static constexpr const char* name() {return "CNTypeRestrictions";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PDCP-SNExtended ::= INTEGER (0..32767) +*/ + +struct PDCP_SNExtended : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNExtended";} + using parent_t = asn::integer<>; + +}; + +/* +HFNModified ::= INTEGER (0..131071) +*/ + +struct HFNModified : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNModified";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTValueExtended_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTValueExtended ::= SEQUENCE { + pDCP-SNExtended PDCP-SNExtended, + hFNModified HFNModified, + iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTValueExtended : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTValueExtended";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNExtended_t : PDCP_SNExtended + { + static constexpr const char* name() {return "pDCP_SNExtended_t";} + using parent_t = PDCP_SNExtended; + + }; + pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;} + pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;} + struct hFNModified_t : HFNModified + { + static constexpr const char* name() {return "hFNModified_t";} + using parent_t = HFNModified; + + }; + hFNModified_t& ref_hFNModified() {return hFNModified;} + hFNModified_t const& ref_hFNModified() const {return hFNModified;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNExtended.clear(); + hFNModified.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNExtended_t pDCP_SNExtended; + hFNModified_t hFNModified; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SN ::= INTEGER (0..4095) +*/ + +struct PDCP_SN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SN";} + using parent_t = asn::integer<>; + +}; + +/* +HFN ::= INTEGER (0..1048575) +*/ + +struct HFN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFN";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvalue_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvalue ::= SEQUENCE { + pDCP-SN PDCP-SN, + hFN HFN, + iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvalue : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvalue";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SN_t : PDCP_SN + { + static constexpr const char* name() {return "pDCP_SN_t";} + using parent_t = PDCP_SN; + + }; + pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;} + pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;} + struct hFN_t : HFN + { + static constexpr const char* name() {return "hFN_t";} + using parent_t = HFN; + + }; + hFN_t& ref_hFN() {return hFN;} + hFN_t const& ref_hFN() const {return hFN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SN.clear(); + hFN.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SN_t pDCP_SN; + hFN_t hFN; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SNlength18 ::= INTEGER (0..262143) +*/ + +struct PDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +HFNforPDCP-SNlength18 ::= INTEGER (0..16383) +*/ + +struct HFNforPDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNforPDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvaluePDCP-SNlength18 ::= SEQUENCE { + pDCP-SNlength18 PDCP-SNlength18, + hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, + iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNlength18_t : PDCP_SNlength18 + { + static constexpr const char* name() {return "pDCP_SNlength18_t";} + using parent_t = PDCP_SNlength18; + + }; + pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;} + pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;} + struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18 + { + static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";} + using parent_t = HFNforPDCP_SNlength18; + + }; + hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;} + hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNlength18.clear(); + hFNforPDCP_SNlength18.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNlength18_t pDCP_SNlength18; + hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + iE_Extensions_t iE_Extensions; + +}; +/* +CRNTI ::= BIT STRING (SIZE (16)) +*/ + +struct CRNTI : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CRNTI";} + using parent_t = asn::bstring<>; + +}; + +/* +CSG-Id ::= BIT STRING (SIZE (27)) +*/ + +struct CSG_Id : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CSG-Id";} + using parent_t = asn::bstring<>; + +}; + +/* +CSGMembershipStatus ::= ENUMERATED { + member, + not-member +} +*/ + +struct CSGMembershipStatus : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "CSGMembershipStatus";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + member + ,not_member + } index_t; + +}; + +/* +UEID ::= BIT STRING (SIZE (16)) +*/ + +struct UEID : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UEID";} + using parent_t = asn::bstring<>; + +}; + +/* +WidebandCQICodeword1::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + ... +} +*/ + +struct WidebandCQICodeword1 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WidebandCQICodeword1";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WidebandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WidebandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WidebandCQI ::= SEQUENCE { + widebandCQICodeword0 INTEGER (0..15, ...), + widebandCQICodeword1 WidebandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WidebandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "WidebandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct widebandCQICodeword0_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "widebandCQICodeword0_t";} + using parent_t = asn::integer<>; + + }; + + widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;} + widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;} + struct widebandCQICodeword1_t : WidebandCQICodeword1 + { + static constexpr const char* name() {return "widebandCQICodeword1_t";} + using parent_t = WidebandCQICodeword1; + static constexpr bool optional = true; + + }; + widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;} + widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + widebandCQICodeword0.clear(); + widebandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + widebandCQICodeword0_t widebandCQICodeword0; + widebandCQICodeword1_t widebandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandSize ::= ENUMERATED { + size2, + size3, + size4, + size6, + size8, + ... +} +*/ + +struct SubbandSize : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "SubbandSize";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + size2 + ,size3 + ,size4 + ,size6 + ,size8 + } index_t; + +}; + +/* +SubbandCQICodeword0 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword0 : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword0";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~SubbandCQICodeword0() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy3[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQICodeword1 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword1 : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword1";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~SubbandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy4[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQI ::= SEQUENCE { + subbandCQICodeword0 SubbandCQICodeword0, + subbandCQICodeword1 SubbandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "SubbandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct subbandCQICodeword0_t : SubbandCQICodeword0 + { + static constexpr const char* name() {return "subbandCQICodeword0_t";} + using parent_t = SubbandCQICodeword0; + + }; + subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;} + subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;} + struct subbandCQICodeword1_t : SubbandCQICodeword1 + { + static constexpr const char* name() {return "subbandCQICodeword1_t";} + using parent_t = SubbandCQICodeword1; + static constexpr bool optional = true; + + }; + subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;} + subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + subbandCQICodeword0.clear(); + subbandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQICodeword0_t subbandCQICodeword0; + subbandCQICodeword1_t subbandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQIItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQIItem ::= SEQUENCE { + subbandCQI SubbandCQI, + subbandIndex INTEGER (0..27,...), + iE-Extensions ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQIItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SubbandCQIItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct subbandCQI_t : SubbandCQI + { + static constexpr const char* name() {return "subbandCQI_t";} + using parent_t = SubbandCQI; + + }; + subbandCQI_t& ref_subbandCQI() {return subbandCQI;} + subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;} + struct subbandIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "subbandIndex_t";} + using parent_t = asn::integer<>; + + }; + + subbandIndex_t& ref_subbandIndex() {return subbandIndex;} + subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + void clear() + { + subbandCQI.clear(); + subbandIndex.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQI_t subbandCQI; + subbandIndex_t subbandIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem +*/ + +struct SubbandCQIList_elm : SubbandCQIItem +{ + static constexpr const char* name() {return "SubbandCQIList_elm";} + using parent_t = SubbandCQIItem; + +}; +struct SubbandCQIList : asn::sequenceof +{ + static constexpr const char* name() {return "SubbandCQIList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcessItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF + SEQUENCE { + rI INTEGER (1..8, ...), + widebandCQI WidebandCQI, + subbandSize SubbandSize, + subbandCQIList SubbandCQIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct rI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rI_t";} + using parent_t = asn::integer<>; + + }; + + rI_t& ref_rI() {return rI;} + rI_t const& ref_rI() const {return rI;} + struct widebandCQI_t : WidebandCQI + { + static constexpr const char* name() {return "widebandCQI_t";} + using parent_t = WidebandCQI; + + }; + widebandCQI_t& ref_widebandCQI() {return widebandCQI;} + widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;} + struct subbandSize_t : SubbandSize + { + static constexpr const char* name() {return "subbandSize_t";} + using parent_t = SubbandSize; + + }; + subbandSize_t& ref_subbandSize() {return subbandSize;} + subbandSize_t const& ref_subbandSize() const {return subbandSize;} + struct subbandCQIList_t : SubbandCQIList + { + static constexpr const char* name() {return "subbandCQIList_t";} + using parent_t = SubbandCQIList; + static constexpr bool optional = true; + + }; + subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;} + subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + void clear() + { + rI.clear(); + widebandCQI.clear(); + subbandSize.clear(); + subbandCQIList.clear(); + iE_Extensions.clear(); + + }; + private: + rI_t rI; + widebandCQI_t widebandCQI; + subbandSize_t subbandSize; + subbandCQIList_t subbandCQIList; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcessItem : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcess_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF + SEQUENCE { + cSIProcessConfigurationIndex INTEGER (1..7, ...), + cSIReportPerCSIProcessItem CSIReportPerCSIProcessItem, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cSIProcessConfigurationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";} + using parent_t = asn::integer<>; + + }; + + cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;} + cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;} + struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem + { + static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";} + using parent_t = CSIReportPerCSIProcessItem; + + }; + cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;} + cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + void clear() + { + cSIProcessConfigurationIndex.clear(); + cSIReportPerCSIProcessItem.clear(); + iE_Extensions.clear(); + + }; + private: + cSIProcessConfigurationIndex_t cSIProcessConfigurationIndex; + cSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcess : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + uEID UEID, + cSIReportPerCSIProcess CSIReportPerCSIProcess, + iE-Extensions ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportList_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportList_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEID_t : UEID + { + static constexpr const char* name() {return "uEID_t";} + using parent_t = UEID; + + }; + uEID_t& ref_uEID() {return uEID;} + uEID_t const& ref_uEID() const {return uEID;} + struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess + { + static constexpr const char* name() {return "cSIReportPerCSIProcess_t";} + using parent_t = CSIReportPerCSIProcess; + + }; + cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;} + cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + void clear() + { + uEID.clear(); + cSIReportPerCSIProcess.clear(); + iE_Extensions.clear(); + + }; + private: + uEID_t uEID; + cSIReportPerCSIProcess_t cSIReportPerCSIProcess; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportList : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CapacityValue ::= INTEGER (0..100) +*/ + +struct CapacityValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CapacityValue";} + using parent_t = asn::integer<>; + +}; + +/* +CauseRadioNetwork ::= ENUMERATED { + handover-desirable-for-radio-reasons, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + partial-handover, + unknown-new-eNB-UE-X2AP-ID, + unknown-old-eNB-UE-X2AP-ID, + unknown-pair-of-UE-X2AP-ID, + ho-target-not-allowed, + tx2relocoverall-expiry, + trelocprep-expiry, + cell-not-available, + no-radio-resources-available-in-target-cell, + invalid-MME-GroupID, + unknown-MME-Code, + encryption-and-or-integrity-protection-algorithms-not-supported, + reportCharacteristicsEmpty, + noReportPeriodicity, + existingMeasurementID, + unknown-eNB-Measurement-ID, + measurement-temporarily-not-available, + unspecified, + ..., + load-balancing, + handover-optimisation, + value-out-of-allowed-range, + multiple-E-RAB-ID-instances, + switch-off-ongoing, + not-supported-QCI-value, + measurement-not-supported-for-the-object, + tDCoverall-expiry, + tDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-aupported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + mCG-Mobility, + sCG-Mobility, + count-reaches-max-value, + unknown-old-en-gNB-UE-X2AP-ID, + pDCP-Overload + +} +*/ + +struct CauseRadioNetwork : asn::enumerated<51, 29, true> +{ + static constexpr const char* name() {return "CauseRadioNetwork";} + using parent_t = asn::enumerated<51, 29, true>; + typedef enum { + handover_desirable_for_radio_reasons + ,time_critical_handover + ,resource_optimisation_handover + ,reduce_load_in_serving_cell + ,partial_handover + ,unknown_new_eNB_UE_X2AP_ID + ,unknown_old_eNB_UE_X2AP_ID + ,unknown_pair_of_UE_X2AP_ID + ,ho_target_not_allowed + ,tx2relocoverall_expiry + ,trelocprep_expiry + ,cell_not_available + ,no_radio_resources_available_in_target_cell + ,invalid_MME_GroupID + ,unknown_MME_Code + ,encryption_and_or_integrity_protection_algorithms_not_supported + ,reportCharacteristicsEmpty + ,noReportPeriodicity + ,existingMeasurementID + ,unknown_eNB_Measurement_ID + ,measurement_temporarily_not_available + ,unspecified + ,load_balancing + ,handover_optimisation + ,value_out_of_allowed_range + ,multiple_E_RAB_ID_instances + ,switch_off_ongoing + ,not_supported_QCI_value + ,measurement_not_supported_for_the_object + ,tDCoverall_expiry + ,tDCprep_expiry + ,action_desirable_for_radio_reasons + ,reduce_load + ,resource_optimisation + ,time_critical_action + ,target_not_allowed + ,no_radio_resources_available + ,invalid_QoS_combination + ,encryption_algorithms_not_aupported + ,procedure_cancelled + ,rRM_purpose + ,improve_user_bit_rate + ,user_inactivity + ,radio_connection_with_UE_lost + ,failure_in_the_radio_interface_procedure + ,bearer_option_not_supported + ,mCG_Mobility + ,sCG_Mobility + ,count_reaches_max_value + ,unknown_old_en_gNB_UE_X2AP_ID + ,pDCP_Overload + } index_t; + +}; + +/* +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} +*/ + +struct CauseTransport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CauseTransport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + transport_resource_unavailable + ,unspecified + } index_t; + +}; + +/* +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + unspecified, + abstract-syntax-error-falsely-constructed-message, + ... +} +*/ + +struct CauseProtocol : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "CauseProtocol";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + transfer_syntax_error + ,abstract_syntax_error_reject + ,abstract_syntax_error_ignore_and_notify + ,message_not_compatible_with_receiver_state + ,semantic_error + ,unspecified + ,abstract_syntax_error_falsely_constructed_message + } index_t; + +}; + +/* +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + om-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} +*/ + +struct CauseMisc : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "CauseMisc";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + control_processing_overload + ,hardware_failure + ,om_intervention + ,not_enough_user_plane_processing_resources + ,unspecified + } index_t; + +}; + +/* +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ... +} +*/ + +struct Cause : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "Cause";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~Cause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } +*/ + +struct Cell_Size : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "Cell-Size";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + verysmall + ,small + ,medium + ,large + } index_t; + +}; + +/* +CellCapacityClassValue ::= INTEGER (1..100, ...) +*/ + +struct CellCapacityClassValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CellCapacityClassValue";} + using parent_t = asn::integer<>; + +}; + +/* +CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...} +*/ + +struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellDeploymentStatusIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + pre_change_notification + } index_t; + +}; + +/* +ReplacingCellsList-Item ::= SEQUENCE { + eCGI ECGI, + ... +} +*/ + +struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ReplacingCellsList-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + template void decode(V& v) + { + v(eCGI); + + }; + template void encode(V& v) const + { + v(eCGI); + + }; + void clear() + { + eCGI.clear(); + + }; + private: + eCGI_t eCGI; + +}; +/* +ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item +*/ + +struct ReplacingCellsList_elm : ReplacingCellsList_Item +{ + static constexpr const char* name() {return "ReplacingCellsList_elm";} + using parent_t = ReplacingCellsList_Item; + +}; +struct ReplacingCellsList : asn::sequenceof +{ + static constexpr const char* name() {return "ReplacingCellsList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellReplacingInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellReplacingInfo ::= SEQUENCE { + replacingCellsList ReplacingCellsList, + iE-Extensions ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellReplacingInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellReplacingInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct replacingCellsList_t : ReplacingCellsList + { + static constexpr const char* name() {return "replacingCellsList_t";} + using parent_t = ReplacingCellsList; + + }; + replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;} + replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(replacingCellsList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(replacingCellsList); + v(iE_Extensions); + + }; + void clear() + { + replacingCellsList.clear(); + iE_Extensions.clear(); + + }; + private: + replacingCellsList_t replacingCellsList; + iE_Extensions_t iE_Extensions; + +}; +/* +CellReportingIndicator ::= ENUMERATED {stop-request, ... } +*/ + +struct CellReportingIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellReportingIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + stop_request + } index_t; + +}; + +/* +CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellType_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellType ::= SEQUENCE { + cell-Size Cell-Size, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellType : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellType";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_Size_t : Cell_Size + { + static constexpr const char* name() {return "cell_Size_t";} + using parent_t = Cell_Size; + + }; + cell_Size_t& ref_cell_Size() {return cell_Size;} + cell_Size_t const& ref_cell_Size() const {return cell_Size;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_Size); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_Size); + v(iE_Extensions); + + }; + void clear() + { + cell_Size.clear(); + iE_Extensions.clear(); + + }; + private: + cell_Size_t cell_Size; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPHypothesisSetItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPHypothesisSetItem ::= SEQUENCE { + coMPCellID ECGI, + coMPHypothesis BIT STRING (SIZE(6..4400, ...)), + iE-Extensions ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPHypothesisSetItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPCellID_t : ECGI + { + static constexpr const char* name() {return "coMPCellID_t";} + using parent_t = ECGI; + + }; + coMPCellID_t& ref_coMPCellID() {return coMPCellID;} + coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;} + struct coMPHypothesis_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coMPHypothesis_t";} + using parent_t = asn::bstring<>; + + }; + + coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;} + coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + void clear() + { + coMPCellID.clear(); + coMPHypothesis.clear(); + iE_Extensions.clear(); + + }; + private: + coMPCellID_t coMPCellID; + coMPHypothesis_t coMPHypothesis; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem +*/ + +struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem +{ + static constexpr const char* name() {return "CoMPHypothesisSet_elm";} + using parent_t = CoMPHypothesisSetItem; + +}; +struct CoMPHypothesisSet : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPHypothesisSet";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF + SEQUENCE { + coMPHypothesisSet CoMPHypothesisSet, + benefitMetric BenefitMetric, + iE-Extensions ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationItem_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPHypothesisSet_t : CoMPHypothesisSet + { + static constexpr const char* name() {return "coMPHypothesisSet_t";} + using parent_t = CoMPHypothesisSet; + + }; + coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;} + coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;} + struct benefitMetric_t : BenefitMetric + { + static constexpr const char* name() {return "benefitMetric_t";} + using parent_t = BenefitMetric; + + }; + benefitMetric_t& ref_benefitMetric() {return benefitMetric;} + benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + void clear() + { + coMPHypothesisSet.clear(); + benefitMetric.clear(); + iE_Extensions.clear(); + + }; + private: + coMPHypothesisSet_t coMPHypothesisSet; + benefitMetric_t benefitMetric; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationItem : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF + SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationStartTime_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationStartTime : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationStartTime";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformation ::= SEQUENCE { + coMPInformationItem CoMPInformationItem, + coMPInformationStartTime CoMPInformationStartTime, + iE-Extensions ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPInformationItem_t : CoMPInformationItem + { + static constexpr const char* name() {return "coMPInformationItem_t";} + using parent_t = CoMPInformationItem; + + }; + coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;} + coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;} + struct coMPInformationStartTime_t : CoMPInformationStartTime + { + static constexpr const char* name() {return "coMPInformationStartTime_t";} + using parent_t = CoMPInformationStartTime; + + }; + coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;} + coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + void clear() + { + coMPInformationItem.clear(); + coMPInformationStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + coMPInformationItem_t coMPInformationItem; + coMPInformationStartTime_t coMPInformationStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacity_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "CompositeAvailableCapacity";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cellCapacityClassValue_t : CellCapacityClassValue + { + static constexpr const char* name() {return "cellCapacityClassValue_t";} + using parent_t = CellCapacityClassValue; + static constexpr bool optional = true; + + }; + cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;} + cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;} + struct capacityValue_t : CapacityValue + { + static constexpr const char* name() {return "capacityValue_t";} + using parent_t = CapacityValue; + + }; + capacityValue_t& ref_capacityValue() {return capacityValue;} + capacityValue_t const& ref_capacityValue() const {return capacityValue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + void clear() + { + cellCapacityClassValue.clear(); + capacityValue.clear(); + iE_Extensions.clear(); + + }; + private: + cellCapacityClassValue_t cellCapacityClassValue; + capacityValue_t capacityValue; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacityGroup_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompositeAvailableCapacityGroup";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;} + dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;} + struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;} + uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + void clear() + { + dL_CompositeAvailableCapacity.clear(); + uL_CompositeAvailableCapacity.clear(); + iE_Extensions.clear(); + + }; + private: + dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + iE_Extensions_t iE_Extensions; + +}; +/* +Correlation-ID ::= OCTET STRING (SIZE (4)) +*/ + +struct Correlation_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Correlation-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +CoverageModification-Item ::= SEQUENCE { + eCGI ECGI, + coverageState INTEGER (0..15, ...), + cellDeploymentStatusIndicator CellDeploymentStatusIndicator OPTIONAL, + cellReplacingInfo CellReplacingInfo OPTIONAL, +-- Included in case the Cell Deployment Status Indicator IE is present + ... +} +*/ + +struct CoverageModification_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "CoverageModification-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct coverageState_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coverageState_t";} + using parent_t = asn::integer<>; + + }; + + coverageState_t& ref_coverageState() {return coverageState;} + coverageState_t const& ref_coverageState() const {return coverageState;} + struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator + { + static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";} + using parent_t = CellDeploymentStatusIndicator; + static constexpr bool optional = true; + + }; + cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;} + cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;} + struct cellReplacingInfo_t : CellReplacingInfo + { + static constexpr const char* name() {return "cellReplacingInfo_t";} + using parent_t = CellReplacingInfo; + static constexpr bool optional = true; + + }; + cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;} + cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + template void encode(V& v) const + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + void clear() + { + eCGI.clear(); + coverageState.clear(); + cellDeploymentStatusIndicator.clear(); + cellReplacingInfo.clear(); + + }; + private: + eCGI_t eCGI; + coverageState_t coverageState; + cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator; + cellReplacingInfo_t cellReplacingInfo; + +}; +/* +CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item +*/ + +struct CoverageModificationList_elm : CoverageModification_Item +{ + static constexpr const char* name() {return "CoverageModificationList_elm";} + using parent_t = CoverageModification_Item; + +}; +struct CoverageModificationList : asn::sequenceof +{ + static constexpr const char* name() {return "CoverageModificationList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +*/ + +struct TypeOfError : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "TypeOfError";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_understood + ,missing + } index_t; + +}; + +/* +CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct iECriticality_t : Criticality + { + static constexpr const char* name() {return "iECriticality_t";} + using parent_t = Criticality; + + }; + iECriticality_t& ref_iECriticality() {return iECriticality;} + iECriticality_t const& ref_iECriticality() const {return iECriticality;} + struct iE_ID_t : ProtocolIE_ID + { + static constexpr const char* name() {return "iE_ID_t";} + using parent_t = ProtocolIE_ID; + + }; + iE_ID_t& ref_iE_ID() {return iE_ID;} + iE_ID_t const& ref_iE_ID() const {return iE_ID;} + struct typeOfError_t : TypeOfError + { + static constexpr const char* name() {return "typeOfError_t";} + using parent_t = TypeOfError; + + }; + typeOfError_t& ref_typeOfError() {return typeOfError;} + typeOfError_t const& ref_typeOfError() const {return typeOfError;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + void clear() + { + iECriticality.clear(); + iE_ID.clear(); + typeOfError.clear(); + iE_Extensions.clear(); + + }; + private: + iECriticality_t iECriticality; + iE_ID_t iE_ID; + typeOfError_t typeOfError; + iE_Extensions_t iE_Extensions; + +}; +struct CriticalityDiagnostics_IE_List : asn::sequenceof +{ + static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "CriticalityDiagnostics";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + static constexpr bool optional = true; + + }; + procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;} + procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;} + struct triggeringMessage_t : TriggeringMessage + { + static constexpr const char* name() {return "triggeringMessage_t";} + using parent_t = TriggeringMessage; + static constexpr bool optional = true; + + }; + triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;} + triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;} + struct procedureCriticality_t : Criticality + { + static constexpr const char* name() {return "procedureCriticality_t";} + using parent_t = Criticality; + static constexpr bool optional = true; + + }; + procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;} + procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;} + struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List + { + static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";} + using parent_t = CriticalityDiagnostics_IE_List; + static constexpr bool optional = true; + + }; + iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;} + iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + void clear() + { + procedureCode.clear(); + triggeringMessage.clear(); + procedureCriticality.clear(); + iEsCriticalityDiagnostics.clear(); + iE_Extensions.clear(); + + }; + private: + procedureCode_t procedureCode; + triggeringMessage_t triggeringMessage; + procedureCriticality_t procedureCriticality; + iEsCriticalityDiagnostics_t iEsCriticalityDiagnostics; + iE_Extensions_t iE_Extensions; + +}; +/* +DL-Forwarding ::= ENUMERATED { + dL-forwardingProposed, + ... +} +*/ + +struct DL_Forwarding : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DL-Forwarding";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + dL_forwardingProposed + } index_t; + +}; + +/* +DL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct DL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) +*/ + +struct DataTrafficResources : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DataTrafficResources";} + using parent_t = asn::bstring<>; + +}; + +/* +DLResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct DLResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +DLResourcesULandDLSharing ::= CHOICE { +unchanged NULL, + changed DLResourceBitmapULandDLSharing, + ... +} +*/ + +struct DLResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DLResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DLResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : DLResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = DLResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +DRB-ID ::= INTEGER (1..32) +*/ + +struct DRB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DRB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULOnlySharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULOnlySharing ::= SEQUENCE{ + uLResourceBitmapULOnlySharing DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULOnlySharing : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULOnlySharing";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uLResourceBitmapULOnlySharing_t : DataTrafficResources + { + static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";} + using parent_t = DataTrafficResources; + + }; + uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;} + uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourceBitmapULOnlySharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing; + iE_Extensions_t iE_Extensions; + +}; +/* +ULResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct ULResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +ULResourcesULandDLSharing ::= CHOICE { + unchanged NULL, + changed ULResourceBitmapULandDLSharing, + ... +} +*/ + +struct ULResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ULResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ULResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : ULResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = ULResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULandDLSharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULandDLSharing ::= SEQUENCE{ + uLResourcesULandDLSharing ULResourcesULandDLSharing, + dLResourcesULandDLSharing DLResourcesULandDLSharing, + iE-Extensions ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULandDLSharing : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ULandDLSharing";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing + { + static constexpr const char* name() {return "uLResourcesULandDLSharing_t";} + using parent_t = ULResourcesULandDLSharing; + + }; + uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;} + uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;} + struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing + { + static constexpr const char* name() {return "dLResourcesULandDLSharing_t";} + using parent_t = DLResourcesULandDLSharing; + + }; + dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;} + dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourcesULandDLSharing.clear(); + dLResourcesULandDLSharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourcesULandDLSharing_t uLResourcesULandDLSharing; + dLResourcesULandDLSharing_t dLResourcesULandDLSharing; + iE_Extensions_t iE_Extensions; + +}; +/* +SharedResourceType ::= CHOICE{ + uLOnlySharing ULOnlySharing, + uLandDLSharing ULandDLSharing, + ... +} +*/ + +struct SharedResourceType : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SharedResourceType";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SharedResourceType() {clear();} + struct uLOnlySharing_t : ULOnlySharing + { + static constexpr const char* name() {return "uLOnlySharing_t";} + using parent_t = ULOnlySharing; + + }; + struct uLandDLSharing_t : ULandDLSharing + { + static constexpr const char* name() {return "uLandDLSharing_t";} + using parent_t = ULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(uLOnlySharing_t)]; + char dummy2[sizeof(uLandDLSharing_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...} +*/ + +struct SubframeType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SubframeType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + mbsfn + ,nonmbsfn + } index_t; + +}; + +/* +ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ReservedSubframePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ReservedSubframePattern ::= SEQUENCE{ + subframeType SubframeType, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mBSFNControlRegionLength INTEGER (0..3), + iE-Extensions ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ReservedSubframePattern : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ReservedSubframePattern";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct subframeType_t : SubframeType + { + static constexpr const char* name() {return "subframeType_t";} + using parent_t = SubframeType; + + }; + subframeType_t& ref_subframeType() {return subframeType;} + subframeType_t const& ref_subframeType() const {return subframeType;} + struct reservedSubframePattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = asn::bstring<>; + + }; + + reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;} + reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + + }; + + mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + void clear() + { + subframeType.clear(); + reservedSubframePattern.clear(); + mBSFNControlRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + subframeType_t subframeType; + reservedSubframePattern_t reservedSubframePattern; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DataTrafficResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN INTEGER (0..1023), + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, +... +} +*/ + +struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "DataTrafficResourceIndication";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct sharedResourceType_t : SharedResourceType + { + static constexpr const char* name() {return "sharedResourceType_t";} + using parent_t = SharedResourceType; + + }; + sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;} + sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;} + struct reservedSubframePattern_t : ReservedSubframePattern + { + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = ReservedSubframePattern; + static constexpr bool optional = true; + + }; + reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;} + reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + sharedResourceType.clear(); + reservedSubframePattern.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + sharedResourceType_t sharedResourceType; + reservedSubframePattern_t reservedSubframePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +DeactivationIndication::= ENUMERATED { + deactivated, + ... +} +*/ + +struct DeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + deactivated + } index_t; + +}; + +/* +DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DeliveryStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DeliveryStatus ::= SEQUENCE { + highestSuccessDeliveredPDCPSN INTEGER (0..4095), + iE-Extensions ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DeliveryStatus : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "DeliveryStatus";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct highestSuccessDeliveredPDCPSN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";} + using parent_t = asn::integer<>; + + }; + + highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;} + highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + void clear() + { + highestSuccessDeliveredPDCPSN.clear(); + iE_Extensions.clear(); + + }; + private: + highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN; + iE_Extensions_t iE_Extensions; + +}; +/* +DuplicationActivation::= ENUMERATED {active, inactive, ...} +*/ + +struct DuplicationActivation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "DuplicationActivation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + active + ,inactive + } index_t; + +}; + +/* +PA-Values ::= ENUMERATED { + dB-6, + dB-4dot77, + dB-3, + dB-1dot77, + dB0, + dB1, + dB2, + dB3, + ... +} +*/ + +struct PA_Values : asn::enumerated<8, 0, true> +{ + static constexpr const char* name() {return "PA-Values";} + using parent_t = asn::enumerated<8, 0, true>; + typedef enum { + dB_6 + ,dB_4dot77 + ,dB_3 + ,dB_1dot77 + ,dB0 + ,dB1 + ,dB2 + ,dB3 + } index_t; + +}; + +/* +DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DynamicNAICSInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DynamicNAICSInformation ::= SEQUENCE { + transmissionModes BIT STRING (SIZE(8)) OPTIONAL, + pB-information INTEGER(0..3) OPTIONAL, + pA-list SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values, + iE-Extensions ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "DynamicNAICSInformation";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct transmissionModes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "transmissionModes_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;} + transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;} + struct pB_information_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pB_information_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;} + pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;} + struct pA_list_t_elm : PA_Values + { + static constexpr const char* name() {return "pA_list_t_elm";} + using parent_t = PA_Values; + + }; + struct pA_list_t : asn::sequenceof + { + static constexpr const char* name() {return "pA_list_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + pA_list_t& ref_pA_list() {return pA_list;} + pA_list_t const& ref_pA_list() const {return pA_list;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + void clear() + { + transmissionModes.clear(); + pB_information.clear(); + pA_list.clear(); + iE_Extensions.clear(); + + }; + private: + transmissionModes_t transmissionModes; + pB_information_t pB_information; + pA_list_t pA_list; + iE_Extensions_t iE_Extensions; + +}; +/* +DynamicDLTransmissionInformation ::= CHOICE { + naics-active DynamicNAICSInformation, + naics-inactive NULL, + ... +} +*/ + +struct DynamicDLTransmissionInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DynamicDLTransmissionInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DynamicDLTransmissionInformation() {clear();} + struct naics_active_t : DynamicNAICSInformation + { + static constexpr const char* name() {return "naics_active_t";} + using parent_t = DynamicNAICSInformation; + + }; + struct naics_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "naics_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as();} return nullptr; } + naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(naics_active_t)]; + char dummy2[sizeof(naics_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RAB-ID ::= INTEGER (0..15, ...) +*/ + +struct E_RAB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "E-RAB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RAB_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RAB-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RAB_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(id_E_RAB_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RAB_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RAB_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RAB_Item& select_id_E_RAB_Item() { return set(1); } + E_RAB_Item const* get_id_E_RAB_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RAB_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RAB_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +QCI ::= INTEGER (0..255) +*/ + +struct QCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "QCI";} + using parent_t = asn::integer<>; + +}; + +/* +ExtendedBitRate ::= INTEGER (10000000001..4000000000000,...) +*/ + +struct ExtendedBitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ExtendedBitRate";} + using parent_t = asn::integer<>; + +}; + +/* +GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for maximum bitrate > 10Gbps -- + { ID id-extended-e-RAB-MaximumBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-MaximumBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct GBR_QosInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; } + else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateDL);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set(1); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get(1); } + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set(2); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get(2); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set(3); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get(3); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set(4); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_e_RAB_MaximumBitrateDL()); return true; + case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true; + case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true; + case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GBR_QosInformation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "GBR-QosInformation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_MaximumBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;} + e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;} + struct e_RAB_MaximumBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;} + e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;} + struct e_RAB_GuaranteedBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;} + e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;} + struct e_RAB_GuaranteedBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;} + e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_MaximumBitrateDL.clear(); + e_RAB_MaximumBitrateUL.clear(); + e_RAB_GuaranteedBitrateDL.clear(); + e_RAB_GuaranteedBitrateUL.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_MaximumBitrateDL_t e_RAB_MaximumBitrateDL; + e_RAB_MaximumBitrateUL_t e_RAB_MaximumBitrateUL; + e_RAB_GuaranteedBitrateDL_t e_RAB_GuaranteedBitrateDL; + e_RAB_GuaranteedBitrateUL_t e_RAB_GuaranteedBitrateUL; + iE_Extensions_t iE_Extensions; + +}; +/* +Packet-LossRate ::= INTEGER(0..1000) +*/ + +struct Packet_LossRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Packet-LossRate";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance – + { ID id-DownlinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}| + { ID id-UplinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;} + void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DownlinkPacketLossRate)) { type = 1; return true; } + else if(equal(id_UplinkPacketLossRate)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DownlinkPacketLossRate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(ignore); type=1;} + void select_id_UplinkPacketLossRate() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Packet_LossRate& select_id_DownlinkPacketLossRate() { return set(1); } + Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get(1); } + Packet_LossRate& select_id_UplinkPacketLossRate() { return set(2); } + Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DownlinkPacketLossRate()); return true; + case 2: v(select_id_UplinkPacketLossRate()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Packet_LossRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(optional); type=1;} + void select_id_UplinkPacketLossRate() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Level-QoS-Parameters ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct qCI_t : QCI + { + static constexpr const char* name() {return "qCI_t";} + using parent_t = QCI; + + }; + qCI_t& ref_qCI() {return qCI;} + qCI_t const& ref_qCI() const {return qCI;} + struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority + { + static constexpr const char* name() {return "allocationAndRetentionPriority_t";} + using parent_t = AllocationAndRetentionPriority; + + }; + allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;} + allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;} + struct gbrQosInformation_t : GBR_QosInformation + { + static constexpr const char* name() {return "gbrQosInformation_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;} + gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + void clear() + { + qCI.clear(); + allocationAndRetentionPriority.clear(); + gbrQosInformation.clear(); + iE_Extensions.clear(); + + }; + private: + qCI_t qCI; + allocationAndRetentionPriority_t allocationAndRetentionPriority; + gbrQosInformation_t gbrQosInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } +*/ + +struct E_RAB_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RAB_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RAB_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RAB-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..4294967295), + usageCountDL INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABUsageReport-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct startTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;} + startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;} + struct endTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "endTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;} + endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;} + struct usageCountUL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountUL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountUL_t& ref_usageCountUL() {return usageCountUL;} + usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;} + struct usageCountDL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountDL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountDL_t& ref_usageCountDL() {return usageCountDL;} + usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + void clear() + { + startTimeStamp.clear(); + endTimeStamp.clear(); + usageCountUL.clear(); + usageCountDL.clear(); + iE_Extensions.clear(); + + }; + private: + startTimeStamp_t startTimeStamp; + endTimeStamp_t endTimeStamp; + usageCountUL_t usageCountUL; + usageCountDL_t usageCountDL; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABUsageReport-Item CRITICALITY ignore TYPE E-RABUsageReport-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(id_E_RABUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set(1); } + E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} } +*/ + +struct E_RABUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +EARFCN ::= INTEGER (0..maxEARFCN) +*/ + +struct EARFCN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCN";} + using parent_t = asn::integer<>; + +}; + +/* +EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...) +*/ + +struct EARFCNExtension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCNExtension";} + using parent_t = asn::integer<>; + +}; + +/* +EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EN_DC_ResourceConfigurationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EN-DC-ResourceConfiguration ::= SEQUENCE { + pDCPatSgNB ENUMERATED {present, not-present, ...}, + mCGresources ENUMERATED {present, not-present, ...}, + sCGresources ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} } OPTIONAL, + ... +} +*/ + +struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "EN-DC-ResourceConfiguration";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct pDCPatSgNB_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "pDCPatSgNB_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;} + pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;} + struct mCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "mCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + mCGresources_t& ref_mCGresources() {return mCGresources;} + mCGresources_t const& ref_mCGresources() const {return mCGresources;} + struct sCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "sCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + sCGresources_t& ref_sCGresources() {return sCGresources;} + sCGresources_t const& ref_sCGresources() const {return sCGresources;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + void clear() + { + pDCPatSgNB.clear(); + mCGresources.clear(); + sCGresources.clear(); + iE_Extensions.clear(); + + }; + private: + pDCPatSgNB_t pDCPatSgNB; + mCGresources_t mCGresources; + sCGresources_t sCGresources; + iE_Extensions_t iE_Extensions; + +}; +/* +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)) +} +*/ + +struct ENB_ID : asn::choice<4, 2, true> +{ + static constexpr const char* name() {return "ENB-ID";} + using parent_t = asn::choice<4, 2, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~ENB_ID() {clear();} + struct macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct home_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "home_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct short_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "short_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct long_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "long_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as();} return nullptr; } + short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as();} return nullptr; } + long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(macro_eNB_ID_t)]; + char dummy2[sizeof(home_eNB_ID_t)]; + char dummy3[sizeof(short_Macro_eNB_ID_t)]; + char dummy4[sizeof(long_Macro_eNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity +*/ + +struct EPLMNs_elm : PLMN_Identity +{ + static constexpr const char* name() {return "EPLMNs_elm";} + using parent_t = PLMN_Identity; + +}; +struct EPLMNs : asn::sequenceof +{ + static constexpr const char* name() {return "EPLMNs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} +*/ + +struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "UserPlaneTrafficActivityReport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + inactive + ,re_activated + } index_t; + +}; + +/* +ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ERABActivityNotifyItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ERABActivityNotifyItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + activityReport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ERABActivityNotifyItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct activityReport_t : UserPlaneTrafficActivityReport + { + static constexpr const char* name() {return "activityReport_t";} + using parent_t = UserPlaneTrafficActivityReport; + + }; + activityReport_t& ref_activityReport() {return activityReport;} + activityReport_t const& ref_activityReport() const {return activityReport;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + activityReport.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + activityReport_t activityReport; + iE_Extensions_t iE_Extensions; + +}; +/* +ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem +*/ + +struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";} + using parent_t = ERABActivityNotifyItem; + +}; +struct ERABActivityNotifyItemList : asn::sequenceof +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ..., + bw1 +} +*/ + +struct Transmission_Bandwidth : asn::enumerated<7, 1, true> +{ + static constexpr const char* name() {return "Transmission-Bandwidth";} + using parent_t = asn::enumerated<7, 1, true>; + typedef enum { + bw6 + ,bw15 + ,bw25 + ,bw50 + ,bw75 + ,bw100 + ,bw1 + } index_t; + +}; + +/* +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ... +} +*/ + +struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true> +{ + static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";} + using parent_t = asn::enumerated<21, 0, true>; + typedef enum { + minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,minusZeroDotFive + ,zero + ,one + ,two + ,three + ,four + ,five + ,six + ,seven + ,eight + ,nine + } index_t; + +}; + +/* +NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...} +*/ + +struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NRS-NSSS-PowerOffset";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + minusThree + ,zero + ,three + } index_t; + +}; + +/* +NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...} +*/ + +struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + two + ,four + ,eight + } index_t; + +}; + +/* +FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| + { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, + ... +} +*/ + +struct FDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;} + void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UL_EARFCNExtension)) { type = 1; return true; } + else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; } + else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; } + else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UL_EARFCNExtension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(reject); type=1;} + void select_id_DL_EARFCNExtension() { set(reject); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EARFCNExtension& select_id_UL_EARFCNExtension() { return set(1); } + EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get(1); } + EARFCNExtension& select_id_DL_EARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get(2); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set(3); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get(3); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set(4); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get(4); } + NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set(5); } + NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get(5); } + NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set(6); } + NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UL_EARFCNExtension()); return true; + case 2: v(select_id_DL_EARFCNExtension()); return true; + case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true; + case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true; + case 5: v(select_id_NRS_NSSS_PowerOffset()); return true; + case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(NRS_NSSS_PowerOffset)]; + char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)]; + char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(optional); type=1;} + void select_id_DL_EARFCNExtension() { set(optional); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-Info ::= SEQUENCE { + uL-EARFCN EARFCN, + dL-EARFCN EARFCN, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct uL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "uL_EARFCN_t";} + using parent_t = EARFCN; + + }; + uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;} + uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;} + struct dL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "dL_EARFCN_t";} + using parent_t = EARFCN; + + }; + dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;} + dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;} + struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;} + uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;} + struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;} + dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + void clear() + { + uL_EARFCN.clear(); + dL_EARFCN.clear(); + uL_Transmission_Bandwidth.clear(); + dL_Transmission_Bandwidth.clear(); + iE_Extensions.clear(); + + }; + private: + uL_EARFCN_t uL_EARFCN; + dL_EARFCN_t dL_EARFCN; + uL_Transmission_Bandwidth_t uL_Transmission_Bandwidth; + dL_Transmission_Bandwidth_t dL_Transmission_Bandwidth; + iE_Extensions_t iE_Extensions; + +}; +/* +SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} +*/ + +struct SubframeAssignment : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "SubframeAssignment";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sa0 + ,sa1 + ,sa2 + ,sa3 + ,sa4 + ,sa5 + ,sa6 + } index_t; + +}; + +/* +SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ... +} +*/ + +struct SpecialSubframePatterns : asn::enumerated<9, 0, true> +{ + static constexpr const char* name() {return "SpecialSubframePatterns";} + using parent_t = asn::enumerated<9, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + } index_t; + +}; + +/* +SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns SpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct specialSubframePatterns_t : SpecialSubframePatterns + { + static constexpr const char* name() {return "specialSubframePatterns_t";} + using parent_t = SpecialSubframePatterns; + + }; + specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;} + specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + specialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + specialSubframePatterns_t specialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}, + ... +} +*/ + +struct TDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_AdditionalSpecialSubframe_Info)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframe_Info);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set(1); } + AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set(3); } + AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_AdditionalSpecialSubframe_Info()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)]; + char dummy2[sizeof(AdditionalSpecialSubframe_Info)]; + char dummy3[sizeof(EARFCNExtension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-Info ::= SEQUENCE { + eARFCN EARFCN, + transmission-Bandwidth Transmission-Bandwidth, + subframeAssignment SubframeAssignment, + specialSubframe-Info SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;} + transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;} + struct subframeAssignment_t : SubframeAssignment + { + static constexpr const char* name() {return "subframeAssignment_t";} + using parent_t = SubframeAssignment; + + }; + subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;} + subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;} + struct specialSubframe_Info_t : SpecialSubframe_Info + { + static constexpr const char* name() {return "specialSubframe_Info_t";} + using parent_t = SpecialSubframe_Info; + + }; + specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;} + specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + void clear() + { + eARFCN.clear(); + transmission_Bandwidth.clear(); + subframeAssignment.clear(); + specialSubframe_Info.clear(); + iE_Extensions.clear(); + + }; + private: + eARFCN_t eARFCN; + transmission_Bandwidth_t transmission_Bandwidth; + subframeAssignment_t subframeAssignment; + specialSubframe_Info_t specialSubframe_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +EUTRA-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + ... +} +*/ + +struct EUTRA_Mode_Info : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "EUTRA-Mode-Info";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~EUTRA_Mode_Info() {clear();} + struct fDD_t : FDD_Info + { + static constexpr const char* name() {return "fDD_t";} + using parent_t = FDD_Info; + + }; + struct tDD_t : TDD_Info + { + static constexpr const char* name() {return "tDD_t";} + using parent_t = TDD_Info; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fDD_t)]; + char dummy2[sizeof(tDD_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANTraceID ::= OCTET STRING (SIZE (8)) +*/ + +struct EUTRANTraceID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANTraceID";} + using parent_t = asn::ostring<>; + +}; + +/* +EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct EncryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EncryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +RNTP-Threshold ::= ENUMERATED { + minusInfinity, + minusEleven, + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + zero, + one, + two, + three, + ... +} +*/ + +struct RNTP_Threshold : asn::enumerated<16, 0, true> +{ + static constexpr const char* name() {return "RNTP-Threshold";} + using parent_t = asn::enumerated<16, 0, true>; + typedef enum { + minusInfinity + ,minusEleven + ,minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,zero + ,one + ,two + ,three + } index_t; + +}; + +/* +EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTPStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTPStartTime ::= SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "EnhancedRNTPStartTime";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +/* +EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTP_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTP ::= SEQUENCE { + enhancedRNTPBitmap BIT STRING (SIZE(12..8800, ...)), + rNTP-High-Power-Threshold RNTP-Threshold, + enhancedRNTPStartTime EnhancedRNTPStartTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct EnhancedRNTP : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "EnhancedRNTP";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct enhancedRNTPBitmap_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "enhancedRNTPBitmap_t";} + using parent_t = asn::bstring<>; + + }; + + enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;} + enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;} + struct rNTP_High_Power_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;} + rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;} + struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime + { + static constexpr const char* name() {return "enhancedRNTPStartTime_t";} + using parent_t = EnhancedRNTPStartTime; + static constexpr bool optional = true; + + }; + enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;} + enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + void clear() + { + enhancedRNTPBitmap.clear(); + rNTP_High_Power_Threshold.clear(); + enhancedRNTPStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + enhancedRNTPBitmap_t enhancedRNTPBitmap; + rNTP_High_Power_Threshold_t rNTP_High_Power_Threshold; + enhancedRNTPStartTime_t enhancedRNTPStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +EventType ::= ENUMERATED{ + change-of-serving-cell, + ... +} +*/ + +struct EventType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "EventType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + change_of_serving_cell + } index_t; + +}; + +/* +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedActivityPeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedActivityPeriod";} + using parent_t = asn::integer<>; + +}; + +/* +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} +*/ + +struct ExpectedHOInterval : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "ExpectedHOInterval";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sec15 + ,sec30 + ,sec60 + ,sec90 + ,sec120 + ,sec180 + ,long_time + } index_t; + +}; + +/* +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedIdlePeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedIdlePeriod";} + using parent_t = asn::integer<>; + +}; + +/* +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} +*/ + +struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + subscription_information + ,statistics + } index_t; + +}; + +/* +ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEActivityBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ExpectedUEActivityBehaviour";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct expectedActivityPeriod_t : ExpectedActivityPeriod + { + static constexpr const char* name() {return "expectedActivityPeriod_t";} + using parent_t = ExpectedActivityPeriod; + static constexpr bool optional = true; + + }; + expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;} + expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;} + struct expectedIdlePeriod_t : ExpectedIdlePeriod + { + static constexpr const char* name() {return "expectedIdlePeriod_t";} + using parent_t = ExpectedIdlePeriod; + static constexpr bool optional = true; + + }; + expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;} + expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;} + struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation + { + static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";} + using parent_t = SourceOfUEActivityBehaviourInformation; + static constexpr bool optional = true; + + }; + sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;} + sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + void clear() + { + expectedActivityPeriod.clear(); + expectedIdlePeriod.clear(); + sourceofUEActivityBehaviourInformation.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivityPeriod_t expectedActivityPeriod; + expectedIdlePeriod_t expectedIdlePeriod; + sourceofUEActivityBehaviourInformation_t sourceofUEActivityBehaviourInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEBehaviour ::= SEQUENCE { + expectedActivity ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ExpectedUEBehaviour";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct expectedActivity_t : ExpectedUEActivityBehaviour + { + static constexpr const char* name() {return "expectedActivity_t";} + using parent_t = ExpectedUEActivityBehaviour; + static constexpr bool optional = true; + + }; + expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;} + expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;} + struct expectedHOInterval_t : ExpectedHOInterval + { + static constexpr const char* name() {return "expectedHOInterval_t";} + using parent_t = ExpectedHOInterval; + static constexpr bool optional = true; + + }; + expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;} + expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + void clear() + { + expectedActivity.clear(); + expectedHOInterval.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivity_t expectedActivity; + expectedHOInterval_t expectedHOInterval; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-InterferenceOverloadIndication-Item ::= ENUMERATED { + high-interference, + medium-interference, + low-interference, + ... +} +*/ + +struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + high_interference + ,medium_interference + ,low_interference + } index_t; + +}; + +/* +UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item +*/ + +struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item +{ + static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";} + using parent_t = UL_InterferenceOverloadIndication_Item; + +}; +struct UL_InterferenceOverloadIndication : asn::sequenceof +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExtendedULInterferenceOverloadInfo ::= SEQUENCE { + associatedSubframes BIT STRING (SIZE (5)), + extended-ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication, + iE-Extensions ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct associatedSubframes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "associatedSubframes_t";} + using parent_t = asn::bstring<>; + + }; + + associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;} + associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;} + struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + + }; + extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;} + extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + void clear() + { + associatedSubframes.clear(); + extended_ul_InterferenceOverloadIndication.clear(); + iE_Extensions.clear(); + + }; + private: + associatedSubframes_t associatedSubframes; + extended_ul_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +FiveGS-TAC ::= OCTET STRING (SIZE (3)) +*/ + +struct FiveGS_TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FiveGS-TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenInterRATs ::= ENUMERATED { + all, + geran, + utran, + cdma2000, + ..., + geranandutran, + cdma2000andutran + +} +*/ + +struct ForbiddenInterRATs : asn::enumerated<6, 2, true> +{ + static constexpr const char* name() {return "ForbiddenInterRATs";} + using parent_t = asn::enumerated<6, 2, true>; + typedef enum { + all + ,geran + ,utran + ,cdma2000 + ,geranandutran + ,cdma2000andutran + } index_t; + +}; + +/* +LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) +*/ + +struct LAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC +*/ + +struct ForbiddenLACs_elm : LAC +{ + static constexpr const char* name() {return "ForbiddenLACs_elm";} + using parent_t = LAC; + +}; +struct ForbiddenLACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenLAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenLAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenLACs ForbiddenLACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenLAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenLACs_t : ForbiddenLACs + { + static constexpr const char* name() {return "forbiddenLACs_t";} + using parent_t = ForbiddenLACs; + + }; + forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;} + forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenLACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenLACs_t forbiddenLACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item +*/ + +struct ForbiddenLAs_elm : ForbiddenLAs_Item +{ + static constexpr const char* name() {return "ForbiddenLAs_elm";} + using parent_t = ForbiddenLAs_Item; + +}; +struct ForbiddenLAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC +*/ + +struct ForbiddenTACs_elm : TAC +{ + static constexpr const char* name() {return "ForbiddenTACs_elm";} + using parent_t = TAC; + +}; +struct ForbiddenTACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenTAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenTAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenTAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenTACs_t : ForbiddenTACs + { + static constexpr const char* name() {return "forbiddenTACs_t";} + using parent_t = ForbiddenTACs; + + }; + forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;} + forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenTACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenTACs_t forbiddenTACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item +*/ + +struct ForbiddenTAs_elm : ForbiddenTAs_Item +{ + static constexpr const char* name() {return "ForbiddenTAs_elm";} + using parent_t = ForbiddenTAs_Item; + +}; +struct ForbiddenTAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Fourframes ::= BIT STRING (SIZE (24)) +*/ + +struct Fourframes : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Fourframes";} + using parent_t = asn::bstring<>; + +}; + +/* +FreqBandIndicatorPriority ::= ENUMERATED { + not-broadcasted, + broadcasted, + ... +} +*/ + +struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "FreqBandIndicatorPriority";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_broadcasted + ,broadcasted + } index_t; + +}; + +/* +SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SupportedSULFreqBandItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "SupportedSULFreqBandItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + iE_Extensions_t iE_Extensions; + +}; +/* +FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FreqBandNrItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FreqBandNrItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FreqBandNrItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct supportedSULBandList_t_elm : SupportedSULFreqBandItem + { + static constexpr const char* name() {return "supportedSULBandList_t_elm";} + using parent_t = SupportedSULFreqBandItem; + + }; + struct supportedSULBandList_t : asn::sequenceof + { + static constexpr const char* name() {return "supportedSULBandList_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;} + supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + supportedSULBandList.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + supportedSULBandList_t supportedSULBandList; + iE_Extensions_t iE_Extensions; + +}; +/* +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE (22..32)), + ... +} +*/ + +struct GNB_ID : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "GNB-ID";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~GNB_ID() {clear();} + struct gNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(gNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...} +*/ + +struct GNBOverloadInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "GNBOverloadInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + overloaded + ,not_overloaded + } index_t; + +}; + +/* +GTP-TEI ::= OCTET STRING (SIZE (4)) +*/ + +struct GTP_TEI : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "GTP-TEI";} + using parent_t = asn::ostring<>; + +}; + +/* +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TransportLayerAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TransportLayerAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GTPtunnelEndpoint_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GTPtunnelEndpoint ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEI, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GTPtunnelEndpoint";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct gTP_TEID_t : GTP_TEI + { + static constexpr const char* name() {return "gTP_TEID_t";} + using parent_t = GTP_TEI; + + }; + gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;} + gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + gTP_TEID.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + gTP_TEID_t gTP_TEID; + iE_Extensions_t iE_Extensions; + +}; +/* +MME-Group-ID ::= OCTET STRING (SIZE (2)) +*/ + +struct MME_Group_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Group-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GU_Group_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GU-Group-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mME-Group-ID MME-Group-ID, + iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GU_Group_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GU-Group-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct mME_Group_ID_t : MME_Group_ID + { + static constexpr const char* name() {return "mME_Group_ID_t";} + using parent_t = MME_Group_ID; + + }; + mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;} + mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + mME_Group_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + mME_Group_ID_t mME_Group_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID +*/ + +struct GUGroupIDList_elm : GU_Group_ID +{ + static constexpr const char* name() {return "GUGroupIDList_elm";} + using parent_t = GU_Group_ID; + +}; +struct GUGroupIDList : asn::sequenceof +{ + static constexpr const char* name() {return "GUGroupIDList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MME-Code ::= OCTET STRING (SIZE (1)) +*/ + +struct MME_Code : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Code";} + using parent_t = asn::ostring<>; + +}; + +/* +GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GUMMEI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GUMMEI ::= SEQUENCE { + + gU-Group-ID GU-Group-ID, + mME-Code MME-Code, + iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GUMMEI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GUMMEI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct gU_Group_ID_t : GU_Group_ID + { + static constexpr const char* name() {return "gU_Group_ID_t";} + using parent_t = GU_Group_ID; + + }; + gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;} + gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;} + struct mME_Code_t : MME_Code + { + static constexpr const char* name() {return "mME_Code_t";} + using parent_t = MME_Code; + + }; + mME_Code_t& ref_mME_Code() {return mME_Code;} + mME_Code_t const& ref_mME_Code() const {return mME_Code;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + void clear() + { + gU_Group_ID.clear(); + mME_Code.clear(); + iE_Extensions.clear(); + + }; + private: + gU_Group_ID_t gU_Group_ID; + mME_Code_t mME_Code; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalENB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalENB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalENB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalENB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eNB_ID_t : ENB_ID + { + static constexpr const char* name() {return "eNB_ID_t";} + using parent_t = ENB_ID; + + }; + eNB_ID_t& ref_eNB_ID() {return eNB_ID;} + eNB_ID_t const& ref_eNB_ID() const {return eNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eNB_ID_t eNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalGNB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalGNB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalGNB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalGNB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct gNB_ID_t : GNB_ID + { + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = GNB_ID; + + }; + gNB_ID_t& ref_gNB_ID() {return gNB_ID;} + gNB_ID_t const& ref_gNB_ID() const {return gNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + gNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + gNB_ID_t gNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +LoadIndicator ::= ENUMERATED { + lowLoad, + mediumLoad, + highLoad, + overLoad, + ... +} +*/ + +struct LoadIndicator : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "LoadIndicator";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + lowLoad + ,mediumLoad + ,highLoad + ,overLoad + } index_t; + +}; + +/* +HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct HWLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HWLoadIndicator ::= SEQUENCE { + dLHWLoadIndicator LoadIndicator, + uLHWLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HWLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "HWLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;} + dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;} + struct uLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;} + uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLHWLoadIndicator.clear(); + uLHWLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLHWLoadIndicator_t dLHWLoadIndicator; + uLHWLoadIndicator_t uLHWLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + ..., + interRATpingpong +} +*/ + +struct HandoverReportType : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "HandoverReportType";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + hoTooEarly + ,hoToWrongCell + ,interRATpingpong + } index_t; + +}; + +/* +NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED { + nRrestrictedinEPSasSecondaryRAT, + ... +} +*/ + +struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedinEPSasSecondaryRAT + } index_t; + +}; + +/* +NRrestrictionin5GS ::= ENUMERATED { + nRrestrictedin5GS, + ... +} +*/ + +struct NRrestrictionin5GS : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictionin5GS";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedin5GS + } index_t; + +}; + +/* +HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRrestrictioninEPSasSecondaryRAT CRITICALITY ignore EXTENSION NRrestrictioninEPSasSecondaryRAT PRESENCE optional}| + { ID id-CNTypeRestrictions CRITICALITY ignore EXTENSION CNTypeRestrictions PRESENCE optional}| + { ID id-NRrestrictionin5GS CRITICALITY ignore EXTENSION NRrestrictionin5GS PRESENCE optional}, + ... +} +*/ + +struct HandoverRestrictionList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;} + void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;} + void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; } + else if(equal(id_CNTypeRestrictions)) { type = 2; return true; } + else if(equal(id_NRrestrictionin5GS)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRrestrictioninEPSasSecondaryRAT);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;} + void select_id_CNTypeRestrictions() { set(ignore); type=2;} + void select_id_NRrestrictionin5GS() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set(1); } + NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get(1); } + CNTypeRestrictions& select_id_CNTypeRestrictions() { return set(2); } + CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get(2); } + NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set(3); } + NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRrestrictioninEPSasSecondaryRAT()); return true; + case 2: v(select_id_CNTypeRestrictions()); return true; + case 3: v(select_id_NRrestrictionin5GS()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CNTypeRestrictions)]; + char dummy2[sizeof(NRrestrictionin5GS)]; + char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;} + void select_id_CNTypeRestrictions() { set(optional); type=2;} + void select_id_NRrestrictionin5GS() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRestrictionList ::= SEQUENCE { + servingPLMN PLMN-Identity, + equivalentPLMNs EPLMNs OPTIONAL, + forbiddenTAs ForbiddenTAs OPTIONAL, + forbiddenLAs ForbiddenLAs OPTIONAL, + forbiddenInterRATs ForbiddenInterRATs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HandoverRestrictionList : asn::sequence<6, 0, true, 5> +{ + static constexpr const char* name() {return "HandoverRestrictionList";} + using parent_t = asn::sequence<6, 0, true, 5>; + struct servingPLMN_t : PLMN_Identity + { + static constexpr const char* name() {return "servingPLMN_t";} + using parent_t = PLMN_Identity; + + }; + servingPLMN_t& ref_servingPLMN() {return servingPLMN;} + servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;} + struct equivalentPLMNs_t : EPLMNs + { + static constexpr const char* name() {return "equivalentPLMNs_t";} + using parent_t = EPLMNs; + static constexpr bool optional = true; + + }; + equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;} + equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;} + struct forbiddenTAs_t : ForbiddenTAs + { + static constexpr const char* name() {return "forbiddenTAs_t";} + using parent_t = ForbiddenTAs; + static constexpr bool optional = true; + + }; + forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;} + forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;} + struct forbiddenLAs_t : ForbiddenLAs + { + static constexpr const char* name() {return "forbiddenLAs_t";} + using parent_t = ForbiddenLAs; + static constexpr bool optional = true; + + }; + forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;} + forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;} + struct forbiddenInterRATs_t : ForbiddenInterRATs + { + static constexpr const char* name() {return "forbiddenInterRATs_t";} + using parent_t = ForbiddenInterRATs; + static constexpr bool optional = true; + + }; + forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;} + forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + void clear() + { + servingPLMN.clear(); + equivalentPLMNs.clear(); + forbiddenTAs.clear(); + forbiddenLAs.clear(); + forbiddenInterRATs.clear(); + iE_Extensions.clear(); + + }; + private: + servingPLMN_t servingPLMN; + equivalentPLMNs_t equivalentPLMNs; + forbiddenTAs_t forbiddenTAs; + forbiddenLAs_t forbiddenLAs; + forbiddenInterRATs_t forbiddenInterRATs; + iE_Extensions_t iE_Extensions; + +}; +/* +IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct IntegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "IntegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +InterfacesToTrace ::= BIT STRING (SIZE (8)) +*/ + +struct InterfacesToTrace : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "InterfacesToTrace";} + using parent_t = asn::bstring<>; + +}; + +/* +InvokeIndication ::= ENUMERATED{ + abs-information, + ..., + naics-information-start, + naics-information-stop +} +*/ + +struct InvokeIndication : asn::enumerated<3, 2, true> +{ + static constexpr const char* name() {return "InvokeIndication";} + using parent_t = asn::enumerated<3, 2, true>; + typedef enum { + abs_information + ,naics_information_start + ,naics_information_stop + } index_t; + +}; + +/* +LCID ::= INTEGER(1..32, ...) +*/ + +struct LCID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LCID";} + using parent_t = asn::integer<>; + +}; + +/* +LHN-ID ::= OCTET STRING(SIZE (32..256)) +*/ + +struct LHN_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LHN-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +Time-UE-StayedInCell ::= INTEGER (0..4095) +*/ + +struct Time_UE_StayedInCell : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell";} + using parent_t = asn::integer<>; + +}; + +/* +Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) +*/ + +struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";} + using parent_t = asn::integer<>; + +}; + +/* +LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- + { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| + { ID id-HO-cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;} + void select_id_HO_cause() { set(id_HO_cause); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; } + else if(equal(id_HO_cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Time_UE_StayedInCell_EnhancedGranularity);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;} + void select_id_HO_cause() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set(1); } + Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get(1); } + Cause& select_id_HO_cause() { return set(2); } + Cause const* get_id_HO_cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Time_UE_StayedInCell_EnhancedGranularity()); return true; + case 2: v(select_id_HO_cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;} + void select_id_HO_cause() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LastVisitedEUTRANCellInformation ::= SEQUENCE { + global-Cell-ID ECGI, + cellType CellType, + time-UE-StayedInCell Time-UE-StayedInCell, + iE-Extensions ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct global_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "global_Cell_ID_t";} + using parent_t = ECGI; + + }; + global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;} + global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;} + struct cellType_t : CellType + { + static constexpr const char* name() {return "cellType_t";} + using parent_t = CellType; + + }; + cellType_t& ref_cellType() {return cellType;} + cellType_t const& ref_cellType() const {return cellType;} + struct time_UE_StayedInCell_t : Time_UE_StayedInCell + { + static constexpr const char* name() {return "time_UE_StayedInCell_t";} + using parent_t = Time_UE_StayedInCell; + + }; + time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;} + time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + void clear() + { + global_Cell_ID.clear(); + cellType.clear(); + time_UE_StayedInCell.clear(); + iE_Extensions.clear(); + + }; + private: + global_Cell_ID_t global_Cell_ID; + cellType_t cellType; + time_UE_StayedInCell_t time_UE_StayedInCell; + iE_Extensions_t iE_Extensions; + +}; +/* +LastVisitedUTRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedUTRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedUTRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedGERANCellInformation ::= CHOICE { + undefined NULL, + ... +} +*/ + +struct LastVisitedGERANCellInformation : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "LastVisitedGERANCellInformation";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~LastVisitedGERANCellInformation() {clear();} + struct undefined_t : asn::nulltype + { + static constexpr const char* name() {return "undefined_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(undefined_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +LastVisitedNGRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedNGRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedNGRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedCell-Item ::= CHOICE { + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + ..., + nG-RAN-Cell LastVisitedNGRANCellInformation +} +*/ + +struct LastVisitedCell_Item : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "LastVisitedCell-Item";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~LastVisitedCell_Item() {clear();} + struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation + { + static constexpr const char* name() {return "e_UTRAN_Cell_t";} + using parent_t = LastVisitedEUTRANCellInformation; + + }; + struct uTRAN_Cell_t : LastVisitedUTRANCellInformation + { + static constexpr const char* name() {return "uTRAN_Cell_t";} + using parent_t = LastVisitedUTRANCellInformation; + + }; + struct gERAN_Cell_t : LastVisitedGERANCellInformation + { + static constexpr const char* name() {return "gERAN_Cell_t";} + using parent_t = LastVisitedGERANCellInformation; + + }; + struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation + { + static constexpr const char* name() {return "nG_RAN_Cell_t";} + using parent_t = LastVisitedNGRANCellInformation; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as();} return nullptr; } + gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as();} return nullptr; } + nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(e_UTRAN_Cell_t)]; + char dummy2[sizeof(uTRAN_Cell_t)]; + char dummy3[sizeof(gERAN_Cell_t)]; + char dummy4[sizeof(nG_RAN_Cell_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} +*/ + +struct Links_to_log : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Links-to-log";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + uplink + ,downlink + ,both_uplink_and_downlink + } index_t; + +}; + +/* +ReportArea ::= ENUMERATED{ + ecgi, + ... +} +*/ + +struct ReportArea : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ReportArea";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ecgi + } index_t; + +}; + +/* +LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ + ... +} +*/ + +struct LocationReportingInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LocationReportingInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "LocationReportingInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct eventType_t : EventType + { + static constexpr const char* name() {return "eventType_t";} + using parent_t = EventType; + + }; + eventType_t& ref_eventType() {return eventType;} + eventType_t const& ref_eventType() const {return eventType;} + struct reportArea_t : ReportArea + { + static constexpr const char* name() {return "reportArea_t";} + using parent_t = ReportArea; + + }; + reportArea_t& ref_reportArea() {return reportArea;} + reportArea_t const& ref_reportArea() const {return reportArea;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + void clear() + { + eventType.clear(); + reportArea.clear(); + iE_Extensions.clear(); + + }; + private: + eventType_t eventType; + reportArea_t reportArea; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} +*/ + +struct ReportIntervalMDT : asn::enumerated<13, 0, false> +{ + static constexpr const char* name() {return "ReportIntervalMDT";} + using parent_t = asn::enumerated<13, 0, false>; + typedef enum { + ms120 + ,ms240 + ,ms480 + ,ms640 + ,ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + ,min6 + ,min12 + ,min30 + ,min60 + } index_t; + +}; + +/* +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} +*/ + +struct ReportAmountMDT : asn::enumerated<8, 0, false> +{ + static constexpr const char* name() {return "ReportAmountMDT";} + using parent_t = asn::enumerated<8, 0, false>; + typedef enum { + r1 + ,r2 + ,r4 + ,r8 + ,r16 + ,r32 + ,r64 + ,rinfinity + } index_t; + +}; + +/* +M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1PeriodicReporting_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1PeriodicReporting : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M1PeriodicReporting";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct reportInterval_t : ReportIntervalMDT + { + static constexpr const char* name() {return "reportInterval_t";} + using parent_t = ReportIntervalMDT; + + }; + reportInterval_t& ref_reportInterval() {return reportInterval;} + reportInterval_t const& ref_reportInterval() const {return reportInterval;} + struct reportAmount_t : ReportAmountMDT + { + static constexpr const char* name() {return "reportAmount_t";} + using parent_t = ReportAmountMDT; + + }; + reportAmount_t& ref_reportAmount() {return reportAmount;} + reportAmount_t const& ref_reportAmount() const {return reportAmount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + void clear() + { + reportInterval.clear(); + reportAmount.clear(); + iE_Extensions.clear(); + + }; + private: + reportInterval_t reportInterval; + reportAmount_t reportAmount; + iE_Extensions_t iE_Extensions; + +}; +/* +M1ReportingTrigger::= ENUMERATED{ + periodic, + a2eventtriggered, + ..., + a2eventtriggered-periodic +} +*/ + +struct M1ReportingTrigger : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "M1ReportingTrigger";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + periodic + ,a2eventtriggered + ,a2eventtriggered_periodic + } index_t; + +}; + +/* +Threshold-RSRP ::= INTEGER(0..97) +*/ + +struct Threshold_RSRP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRP";} + using parent_t = asn::integer<>; + +}; + +/* +Threshold-RSRQ ::= INTEGER(0..34) +*/ + +struct Threshold_RSRQ : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRQ";} + using parent_t = asn::integer<>; + +}; + +/* +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} +*/ + +struct MeasurementThresholdA2 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "MeasurementThresholdA2";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~MeasurementThresholdA2() {clear();} + struct threshold_RSRP_t : Threshold_RSRP + { + static constexpr const char* name() {return "threshold_RSRP_t";} + using parent_t = Threshold_RSRP; + + }; + struct threshold_RSRQ_t : Threshold_RSRQ + { + static constexpr const char* name() {return "threshold_RSRQ_t";} + using parent_t = Threshold_RSRQ; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as();} return nullptr; } + threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(threshold_RSRP_t)]; + char dummy2[sizeof(threshold_RSRQ_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1ThresholdEventA2_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M1ThresholdEventA2";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct measurementThreshold_t : MeasurementThresholdA2 + { + static constexpr const char* name() {return "measurementThreshold_t";} + using parent_t = MeasurementThresholdA2; + + }; + measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;} + measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementThreshold); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementThreshold); + v(iE_Extensions); + + }; + void clear() + { + measurementThreshold.clear(); + iE_Extensions.clear(); + + }; + private: + measurementThreshold_t measurementThreshold; + iE_Extensions_t iE_Extensions; + +}; +/* +M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } +*/ + +struct M3period : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "M3period";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + ms100 + ,ms1000 + ,ms10000 + } index_t; + +}; + +/* +M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M3Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M3Configuration ::= SEQUENCE { + m3period M3period, + iE-Extensions ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M3Configuration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M3Configuration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct m3period_t : M3period + { + static constexpr const char* name() {return "m3period_t";} + using parent_t = M3period; + + }; + m3period_t& ref_m3period() {return m3period;} + m3period_t const& ref_m3period() const {return m3period;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m3period); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m3period); + v(iE_Extensions); + + }; + void clear() + { + m3period.clear(); + iE_Extensions.clear(); + + }; + private: + m3period_t m3period; + iE_Extensions_t iE_Extensions; + +}; +/* +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M4period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M4period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M4Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M4Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M4Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m4period_t : M4period + { + static constexpr const char* name() {return "m4period_t";} + using parent_t = M4period; + + }; + m4period_t& ref_m4period() {return m4period;} + m4period_t const& ref_m4period() const {return m4period;} + struct m4_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m4_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;} + m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m4period.clear(); + m4_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m4period_t m4period; + m4_links_to_log_t m4_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M5period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M5period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M5Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M5Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M5Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m5period_t : M5period + { + static constexpr const char* name() {return "m5period_t";} + using parent_t = M5period; + + }; + m5period_t& ref_m5period() {return m5period;} + m5period_t const& ref_m5period() const {return m5period;} + struct m5_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m5_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;} + m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m5period.clear(); + m5_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m5period_t m5period; + m5_links_to_log_t m5_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } +*/ + +struct M6report_interval : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "M6report-interval";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + } index_t; + +}; + +/* +M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } +*/ + +struct M6delay_threshold : asn::enumerated<12, 0, true> +{ + static constexpr const char* name() {return "M6delay-threshold";} + using parent_t = asn::enumerated<12, 0, true>; + typedef enum { + ms30 + ,ms40 + ,ms50 + ,ms60 + ,ms70 + ,ms80 + ,ms90 + ,ms100 + ,ms150 + ,ms300 + ,ms500 + ,ms750 + } index_t; + +}; + +/* +M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M6Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M6Configuration ::= SEQUENCE { + m6report-interval M6report-interval, + m6delay-threshold M6delay-threshold OPTIONAL, +-- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” -- + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M6Configuration : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "M6Configuration";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct m6report_interval_t : M6report_interval + { + static constexpr const char* name() {return "m6report_interval_t";} + using parent_t = M6report_interval; + + }; + m6report_interval_t& ref_m6report_interval() {return m6report_interval;} + m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;} + struct m6delay_threshold_t : M6delay_threshold + { + static constexpr const char* name() {return "m6delay_threshold_t";} + using parent_t = M6delay_threshold; + static constexpr bool optional = true; + + }; + m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;} + m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;} + struct m6_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m6_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;} + m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m6report_interval.clear(); + m6delay_threshold.clear(); + m6_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m6report_interval_t m6report_interval; + m6delay_threshold_t m6delay_threshold; + m6_links_to_log_t m6_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M7period ::= INTEGER(1..60, ...) +*/ + +struct M7period : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "M7period";} + using parent_t = asn::integer<>; + +}; + +/* +M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M7Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M7Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M7Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m7period_t : M7period + { + static constexpr const char* name() {return "m7period_t";} + using parent_t = M7period; + + }; + m7period_t& ref_m7period() {return m7period;} + m7period_t const& ref_m7period() const {return m7period;} + struct m7_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m7_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;} + m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m7period.clear(); + m7_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m7period_t m7period; + m7_links_to_log_t m7_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) +*/ + +struct MBMS_Service_Area_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MBMS-Service-Area-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity +*/ + +struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity +{ + static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";} + using parent_t = MBMS_Service_Area_Identity; + +}; +struct MBMS_Service_Area_Identity_List : asn::sequenceof +{ + static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RadioframeAllocationPeriod ::= ENUMERATED{ + n1, + n2, + n4, + n8, + n16, + n32, + ... +} +*/ + +struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "RadioframeAllocationPeriod";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + n1 + ,n2 + ,n4 + ,n8 + ,n16 + ,n32 + } index_t; + +}; + +/* +RadioframeAllocationOffset ::= INTEGER (0..7, ...) +*/ + +struct RadioframeAllocationOffset : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RadioframeAllocationOffset";} + using parent_t = asn::integer<>; + +}; + +/* +Oneframe ::= BIT STRING (SIZE (6)) +*/ + +struct Oneframe : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Oneframe";} + using parent_t = asn::bstring<>; + +}; + +/* +SubframeAllocation ::= CHOICE { + oneframe Oneframe, + fourframes Fourframes, + ... +} +*/ + +struct SubframeAllocation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SubframeAllocation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SubframeAllocation() {clear();} + struct oneframe_t : Oneframe + { + static constexpr const char* name() {return "oneframe_t";} + using parent_t = Oneframe; + + }; + struct fourframes_t : Fourframes + { + static constexpr const char* name() {return "fourframes_t";} + using parent_t = Fourframes; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as();} return nullptr; } + fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(oneframe_t)]; + char dummy2[sizeof(fourframes_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MBSFN_Subframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MBSFN-Subframe-Info ::= SEQUENCE { + radioframeAllocationPeriod RadioframeAllocationPeriod, + radioframeAllocationOffset RadioframeAllocationOffset, + subframeAllocation SubframeAllocation, + iE-Extensions ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "MBSFN-Subframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod + { + static constexpr const char* name() {return "radioframeAllocationPeriod_t";} + using parent_t = RadioframeAllocationPeriod; + + }; + radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;} + radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;} + struct radioframeAllocationOffset_t : RadioframeAllocationOffset + { + static constexpr const char* name() {return "radioframeAllocationOffset_t";} + using parent_t = RadioframeAllocationOffset; + + }; + radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;} + radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;} + struct subframeAllocation_t : SubframeAllocation + { + static constexpr const char* name() {return "subframeAllocation_t";} + using parent_t = SubframeAllocation; + + }; + subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;} + subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + void clear() + { + radioframeAllocationPeriod.clear(); + radioframeAllocationOffset.clear(); + subframeAllocation.clear(); + iE_Extensions.clear(); + + }; + private: + radioframeAllocationPeriod_t radioframeAllocationPeriod; + radioframeAllocationOffset_t radioframeAllocationOffset; + subframeAllocation_t subframeAllocation; + iE_Extensions_t iE_Extensions; + +}; +/* +MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info +*/ + +struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info +{ + static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";} + using parent_t = MBSFN_Subframe_Info; + +}; +struct MBSFN_Subframe_Infolist : asn::sequenceof +{ + static constexpr const char* name() {return "MBSFN-Subframe-Infolist";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} +*/ + +struct MDT_Activation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "MDT-Activation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + immediate_MDT_only + ,immediate_MDT_and_Trace + } index_t; + +}; + +/* +MeasurementsToActivate::= BIT STRING (SIZE (8)) +*/ + +struct MeasurementsToActivate : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MeasurementsToActivate";} + using parent_t = asn::bstring<>; + +}; + +/* +MDT-Location-Info ::= BIT STRING (SIZE (8)) +*/ + +struct MDT_Location_Info : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MDT-Location-Info";} + using parent_t = asn::bstring<>; + +}; + +/* +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity +*/ + +struct MDTPLMNList_elm : PLMN_Identity +{ + static constexpr const char* name() {return "MDTPLMNList_elm";} + using parent_t = PLMN_Identity; + +}; +struct MDTPLMNList : asn::sequenceof +{ + static constexpr const char* name() {return "MDTPLMNList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasConfig::= ENUMERATED {setup,...} +*/ + +struct WLANMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "WLANMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +WLANName ::= OCTET STRING (SIZE (1..32)) +*/ + +struct WLANName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WLANName";} + using parent_t = asn::ostring<>; + +}; + +/* +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName +*/ + +struct WLANMeasConfigNameList_elm : WLANName +{ + static constexpr const char* name() {return "WLANMeasConfigNameList_elm";} + using parent_t = WLANName; + +}; +struct WLANMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "WLANMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WLANMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "WLANMeasurementConfiguration";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct wlanMeasConfig_t : WLANMeasConfig + { + static constexpr const char* name() {return "wlanMeasConfig_t";} + using parent_t = WLANMeasConfig; + + }; + wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;} + wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;} + struct wlanMeasConfigNameList_t : WLANMeasConfigNameList + { + static constexpr const char* name() {return "wlanMeasConfigNameList_t";} + using parent_t = WLANMeasConfigNameList; + static constexpr bool optional = true; + + }; + wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;} + wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;} + struct wlan_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;} + wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;} + struct wlan_rtt_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rtt_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;} + wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + void clear() + { + wlanMeasConfig.clear(); + wlanMeasConfigNameList.clear(); + wlan_rssi.clear(); + wlan_rtt.clear(); + iE_Extensions.clear(); + + }; + private: + wlanMeasConfig_t wlanMeasConfig; + wlanMeasConfigNameList_t wlanMeasConfigNameList; + wlan_rssi_t wlan_rssi; + wlan_rtt_t wlan_rtt; + iE_Extensions_t iE_Extensions; + +}; +/* +MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| + {ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| + {ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| + {ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| + {ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional}| + {ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| + {ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}| + { ID id-BluetoothMeasurementConfiguration CRITICALITY ignore EXTENSION BluetoothMeasurementConfiguration PRESENCE optional}| + { ID id-WLANMeasurementConfiguration CRITICALITY ignore EXTENSION WLANMeasurementConfiguration PRESENCE optional}, + ... +} +*/ + +struct MDT_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(id_M3Configuration); type=1;} + void select_id_M4Configuration() { set(id_M4Configuration); type=2;} + void select_id_M5Configuration() { set(id_M5Configuration); type=3;} + void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;} + void select_id_M6Configuration() { set(id_M6Configuration); type=6;} + void select_id_M7Configuration() { set(id_M7Configuration); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;} + void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_M3Configuration)) { type = 1; return true; } + else if(equal(id_M4Configuration)) { type = 2; return true; } + else if(equal(id_M5Configuration)) { type = 3; return true; } + else if(equal(id_MDT_Location_Info)) { type = 4; return true; } + else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; } + else if(equal(id_M6Configuration)) { type = 6; return true; } + else if(equal(id_M7Configuration)) { type = 7; return true; } + else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; } + else if(equal(id_WLANMeasurementConfiguration)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_M3Configuration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(ignore); type=1;} + void select_id_M4Configuration() { set(ignore); type=2;} + void select_id_M5Configuration() { set(ignore); type=3;} + void select_id_MDT_Location_Info() { set(ignore); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;} + void select_id_M6Configuration() { set(ignore); type=6;} + void select_id_M7Configuration() { set(ignore); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;} + void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + M3Configuration& select_id_M3Configuration() { return set(1); } + M3Configuration const* get_id_M3Configuration() const { return get(1); } + M4Configuration& select_id_M4Configuration() { return set(2); } + M4Configuration const* get_id_M4Configuration() const { return get(2); } + M5Configuration& select_id_M5Configuration() { return set(3); } + M5Configuration const* get_id_M5Configuration() const { return get(3); } + MDT_Location_Info& select_id_MDT_Location_Info() { return set(4); } + MDT_Location_Info const* get_id_MDT_Location_Info() const { return get(4); } + MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set(5); } + MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get(5); } + M6Configuration& select_id_M6Configuration() { return set(6); } + M6Configuration const* get_id_M6Configuration() const { return get(6); } + M7Configuration& select_id_M7Configuration() { return set(7); } + M7Configuration const* get_id_M7Configuration() const { return get(7); } + BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set(8); } + BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get(8); } + WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set(9); } + WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_M3Configuration()); return true; + case 2: v(select_id_M4Configuration()); return true; + case 3: v(select_id_M5Configuration()); return true; + case 4: v(select_id_MDT_Location_Info()); return true; + case 5: v(select_id_SignallingBasedMDTPLMNList()); return true; + case 6: v(select_id_M6Configuration()); return true; + case 7: v(select_id_M7Configuration()); return true; + case 8: v(select_id_BluetoothMeasurementConfiguration()); return true; + case 9: v(select_id_WLANMeasurementConfiguration()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BluetoothMeasurementConfiguration)]; + char dummy2[sizeof(M3Configuration)]; + char dummy3[sizeof(M4Configuration)]; + char dummy4[sizeof(M5Configuration)]; + char dummy5[sizeof(M6Configuration)]; + char dummy6[sizeof(M7Configuration)]; + char dummy7[sizeof(MDTPLMNList)]; + char dummy8[sizeof(MDT_Location_Info)]; + char dummy9[sizeof(WLANMeasurementConfiguration)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(conditional); type=1;} + void select_id_M4Configuration() { set(conditional); type=2;} + void select_id_M5Configuration() { set(conditional); type=3;} + void select_id_MDT_Location_Info() { set(optional); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;} + void select_id_M6Configuration() { set(conditional); type=6;} + void select_id_M7Configuration() { set(conditional); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;} + void select_id_WLANMeasurementConfiguration() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(conditional)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(conditional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(conditional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MDT-Configuration ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT, + measurementsToActivate MeasurementsToActivate, + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic, or event-triggered periodic reporting for measurement M1 + iE-Extensions ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MDT_Configuration : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "MDT-Configuration";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct mdt_Activation_t : MDT_Activation + { + static constexpr const char* name() {return "mdt_Activation_t";} + using parent_t = MDT_Activation; + + }; + mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;} + mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;} + struct areaScopeOfMDT_t : AreaScopeOfMDT + { + static constexpr const char* name() {return "areaScopeOfMDT_t";} + using parent_t = AreaScopeOfMDT; + + }; + areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;} + areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;} + struct measurementsToActivate_t : MeasurementsToActivate + { + static constexpr const char* name() {return "measurementsToActivate_t";} + using parent_t = MeasurementsToActivate; + + }; + measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;} + measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;} + struct m1reportingTrigger_t : M1ReportingTrigger + { + static constexpr const char* name() {return "m1reportingTrigger_t";} + using parent_t = M1ReportingTrigger; + + }; + m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;} + m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;} + struct m1thresholdeventA2_t : M1ThresholdEventA2 + { + static constexpr const char* name() {return "m1thresholdeventA2_t";} + using parent_t = M1ThresholdEventA2; + static constexpr bool optional = true; + + }; + m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;} + m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;} + struct m1periodicReporting_t : M1PeriodicReporting + { + static constexpr const char* name() {return "m1periodicReporting_t";} + using parent_t = M1PeriodicReporting; + static constexpr bool optional = true; + + }; + m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;} + m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + void clear() + { + mdt_Activation.clear(); + areaScopeOfMDT.clear(); + measurementsToActivate.clear(); + m1reportingTrigger.clear(); + m1thresholdeventA2.clear(); + m1periodicReporting.clear(); + iE_Extensions.clear(); + + }; + private: + mdt_Activation_t mdt_Activation; + areaScopeOfMDT_t areaScopeOfMDT; + measurementsToActivate_t measurementsToActivate; + m1reportingTrigger_t m1reportingTrigger; + m1thresholdeventA2_t m1thresholdeventA2; + m1periodicReporting_t m1periodicReporting; + iE_Extensions_t iE_Extensions; + +}; +/* +MakeBeforeBreakIndicator::= ENUMERATED {true, ...} +*/ + +struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MakeBeforeBreakIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} +*/ + +struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ManagementBasedMDTallowed";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allowed + } index_t; + +}; + +/* +Masked-IMEISV ::= BIT STRING (SIZE (64)) +*/ + +struct Masked_IMEISV : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Masked-IMEISV";} + using parent_t = asn::bstring<>; + +}; + +/* +MeNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +NRCellIdentifier ::= BIT STRING (SIZE (36)) +*/ + +struct NRCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRCGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRCGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRCGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct nRcellIdentifier_t : NRCellIdentifier + { + static constexpr const char* name() {return "nRcellIdentifier_t";} + using parent_t = NRCellIdentifier; + + }; + nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;} + nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + nRcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + nRcellIdentifier_t nRcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional}| + { ID id-MeNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct MeNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(id_NRCGI); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRCGI)) { type = 1; return true; } + else if(equal(id_MeNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRCGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(ignore); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRCGI& select_id_NRCGI() { return set(1); } + NRCGI const* get_id_NRCGI() const { return get(1); } + MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set(2); } + MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRCGI()); return true; + case 2: v(select_id_MeNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeNBCoordinationAssistanceInformation)]; + char dummy2[sizeof(NRCGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(optional); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeNBResourceCoordinationInformation ::= SEQUENCE { + eUTRA-Cell-ID ECGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "MeNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eUTRA_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "eUTRA_Cell_ID_t";} + using parent_t = ECGI; + + }; + eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;} + eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + eUTRA_Cell_ID.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRA_Cell_ID_t eUTRA_Cell_ID; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBtoSeNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +MeNBtoSgNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSgNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSgNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +Measurement-ID ::= INTEGER (1..4095, ...) +*/ + +struct Measurement_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Measurement-ID";} + using parent_t = asn::integer<>; + +}; + +/* +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct handoverTriggerChange_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChange_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;} + handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;} + template void decode(V& v) + { + v(handoverTriggerChange); + + }; + template void encode(V& v) const + { + v(handoverTriggerChange); + + }; + void clear() + { + handoverTriggerChange.clear(); + + }; + private: + handoverTriggerChange_t handoverTriggerChange; + +}; +/* +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersModificationRange";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct handoverTriggerChangeLowerLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;} + handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;} + struct handoverTriggerChangeUpperLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;} + handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;} + template void decode(V& v) + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + template void encode(V& v) const + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + void clear() + { + handoverTriggerChangeLowerLimit.clear(); + handoverTriggerChangeUpperLimit.clear(); + + }; + private: + handoverTriggerChangeLowerLimit_t handoverTriggerChangeLowerLimit; + handoverTriggerChangeUpperLimit_t handoverTriggerChangeUpperLimit; + +}; +/* +MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo +*/ + +struct MultibandInfoList_elm : BandInfo +{ + static constexpr const char* name() {return "MultibandInfoList_elm";} + using parent_t = BandInfo; + +}; +struct MultibandInfoList : asn::sequenceof +{ + static constexpr const char* name() {return "MultibandInfoList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} +*/ + +struct NRSCS : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "NRSCS";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + scs15 + ,scs30 + ,scs60 + ,scs120 + } index_t; + +}; + +/* +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} +*/ + +struct NRNRB : asn::enumerated<29, 0, true> +{ + static constexpr const char* name() {return "NRNRB";} + using parent_t = asn::enumerated<29, 0, true>; + typedef enum { + nrb11 + ,nrb18 + ,nrb24 + ,nrb25 + ,nrb31 + ,nrb32 + ,nrb38 + ,nrb51 + ,nrb52 + ,nrb65 + ,nrb66 + ,nrb78 + ,nrb79 + ,nrb93 + ,nrb106 + ,nrb107 + ,nrb121 + ,nrb132 + ,nrb133 + ,nrb135 + ,nrb160 + ,nrb162 + ,nrb189 + ,nrb216 + ,nrb217 + ,nrb245 + ,nrb264 + ,nrb270 + ,nrb273 + } index_t; + +}; + +/* +NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NR_TxBW_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NR_TxBW : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NR-TxBW";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRSCS_t : NRSCS + { + static constexpr const char* name() {return "nRSCS_t";} + using parent_t = NRSCS; + + }; + nRSCS_t& ref_nRSCS() {return nRSCS;} + nRSCS_t const& ref_nRSCS() const {return nRSCS;} + struct nRNRB_t : NRNRB + { + static constexpr const char* name() {return "nRNRB_t";} + using parent_t = NRNRB; + + }; + nRNRB_t& ref_nRNRB() {return nRNRB;} + nRNRB_t const& ref_nRNRB() const {return nRNRB;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + void clear() + { + nRSCS.clear(); + nRNRB.clear(); + iE_Extensions.clear(); + + }; + private: + nRSCS_t nRSCS; + nRNRB_t nRNRB; + iE_Extensions_t iE_Extensions; + +}; +/* +SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SULInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SULInformation ::= SEQUENCE { + sUL-ARFCN INTEGER (0.. 3279165), + sUL-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {SULInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SULInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SULInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct sUL_ARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "sUL_ARFCN_t";} + using parent_t = asn::integer<>; + + }; + + sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;} + sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;} + struct sUL_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "sUL_TxBW_t";} + using parent_t = NR_TxBW; + + }; + sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;} + sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + void clear() + { + sUL_ARFCN.clear(); + sUL_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + sUL_ARFCN_t sUL_ARFCN; + sUL_TxBW_t sUL_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRFreqInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... +} +*/ + +struct NRFreqInfo : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "NRFreqInfo";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nRARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "nRARFCN_t";} + using parent_t = asn::integer<>; + + }; + + nRARFCN_t& ref_nRARFCN() {return nRARFCN;} + nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;} + struct freqBandListNr_t_elm : FreqBandNrItem + { + static constexpr const char* name() {return "freqBandListNr_t_elm";} + using parent_t = FreqBandNrItem; + + }; + struct freqBandListNr_t : asn::sequenceof + { + static constexpr const char* name() {return "freqBandListNr_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;} + freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;} + struct sULInformation_t : SULInformation + { + static constexpr const char* name() {return "sULInformation_t";} + using parent_t = SULInformation; + static constexpr bool optional = true; + + }; + sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;} + sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + void clear() + { + nRARFCN.clear(); + freqBandListNr.clear(); + sULInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nRARFCN_t nRARFCN; + freqBandListNr_t freqBandListNr; + sULInformation_t sULInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +NRPCI ::= INTEGER (0..1007) +*/ + +struct NRPCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRPCI";} + using parent_t = asn::integer<>; + +}; + +/* +NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRencryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRencryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRintegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRUESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRUESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRUESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRencryptionAlgorithms_t : NRencryptionAlgorithms + { + static constexpr const char* name() {return "nRencryptionAlgorithms_t";} + using parent_t = NRencryptionAlgorithms; + + }; + nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;} + nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;} + struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms + { + static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";} + using parent_t = NRintegrityProtectionAlgorithms; + + }; + nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;} + nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + nRencryptionAlgorithms.clear(); + nRintegrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + nRencryptionAlgorithms_t nRencryptionAlgorithms; + nRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +PCI ::= INTEGER (0..503, ...) +*/ + +struct PCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PCI";} + using parent_t = asn::integer<>; + +}; + +/* +Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}, + ... +} +*/ + +struct Neighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(id_NeighbourTAC); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NeighbourTAC)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NeighbourTAC);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + TAC& select_id_NeighbourTAC() { return set(1); } + TAC const* get_id_NeighbourTAC() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NeighbourTAC()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(TAC)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE { + eCGI ECGI, + pCI PCI, + eARFCN EARFCN, + iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "Neighbour_Information_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + void clear() + { + eCGI.clear(); + pCI.clear(); + eARFCN.clear(); + iE_Extensions.clear(); + + }; + private: + eCGI_t eCGI; + pCI_t pCI; + eARFCN_t eARFCN; + iE_Extensions_t iE_Extensions; + +}; +struct Neighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "Neighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NewDRBIDrequest::= ENUMERATED {true, ...} +*/ + +struct NewDRBIDrequest : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NewDRBIDrequest";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +Number-of-Antennaports ::= ENUMERATED { + an1, + an2, + an4, + ... +} +*/ + +struct Number_of_Antennaports : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Number-of-Antennaports";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + an1 + ,an2 + ,an4 + } index_t; + +}; + +/* +PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...} +*/ + +struct PDCPChangeIndication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPChangeIndication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + s_KgNB_update_required + ,pDCP_data_recovery_required + } index_t; + +}; + +/* +PDCPSnLength ::= ENUMERATED {twelve-bits,eighteen-bits,...} +*/ + +struct PDCPSnLength : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPSnLength";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + twelve_bits + ,eighteen_bits + } index_t; + +}; + +/* +PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PRACH_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- + iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PRACH_Configuration : asn::sequence<6, 0, true, 2> +{ + static constexpr const char* name() {return "PRACH-Configuration";} + using parent_t = asn::sequence<6, 0, true, 2>; + struct rootSequenceIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rootSequenceIndex_t";} + using parent_t = asn::integer<>; + + }; + + rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;} + rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;} + struct zeroCorrelationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "zeroCorrelationIndex_t";} + using parent_t = asn::integer<>; + + }; + + zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;} + zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;} + struct highSpeedFlag_t : asn::boolean + { + static constexpr const char* name() {return "highSpeedFlag_t";} + using parent_t = asn::boolean; + + }; + highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;} + highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;} + struct prach_FreqOffset_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_FreqOffset_t";} + using parent_t = asn::integer<>; + + }; + + prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;} + prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;} + struct prach_ConfigIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_ConfigIndex_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;} + prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + void clear() + { + rootSequenceIndex.clear(); + zeroCorrelationIndex.clear(); + highSpeedFlag.clear(); + prach_FreqOffset.clear(); + prach_ConfigIndex.clear(); + iE_Extensions.clear(); + + }; + private: + rootSequenceIndex_t rootSequenceIndex; + zeroCorrelationIndex_t zeroCorrelationIndex; + highSpeedFlag_t highSpeedFlag; + prach_FreqOffset_t prach_FreqOffset; + prach_ConfigIndex_t prach_ConfigIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct PedestrianUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PedestrianUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +Port-Number ::= OCTET STRING (SIZE (2)) +*/ + +struct Port_Number : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Port-Number";} + using parent_t = asn::ostring<>; + +}; + +/* +ProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectDiscovery : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectDiscovery";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectCommunication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectCommunication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeUEtoNetworkRelaying ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, + ... +} +*/ + +struct ProSeAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ProSeUEtoNetworkRelaying)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ProSeUEtoNetworkRelaying);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set(1); } + ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ProSeUEtoNetworkRelaying()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ProSeUEtoNetworkRelaying)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProSeAuthorized ::= SEQUENCE { + proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, + proSeDirectCommunication ProSeDirectCommunication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProSeAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ProSeAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct proSeDirectDiscovery_t : ProSeDirectDiscovery + { + static constexpr const char* name() {return "proSeDirectDiscovery_t";} + using parent_t = ProSeDirectDiscovery; + static constexpr bool optional = true; + + }; + proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;} + proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;} + struct proSeDirectCommunication_t : ProSeDirectCommunication + { + static constexpr const char* name() {return "proSeDirectCommunication_t";} + using parent_t = ProSeDirectCommunication; + static constexpr bool optional = true; + + }; + proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;} + proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + void clear() + { + proSeDirectDiscovery.clear(); + proSeDirectCommunication.clear(); + iE_Extensions.clear(); + + }; + private: + proSeDirectDiscovery_t proSeDirectDiscovery; + proSeDirectCommunication_t proSeDirectCommunication; + iE_Extensions_t iE_Extensions; + +}; +/* +ResourceType ::= ENUMERATED { + downlinknonCRS, + cRS, + uplink, + ... +} +*/ + +struct ResourceType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "ResourceType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + downlinknonCRS + ,cRS + ,uplink + } index_t; + +}; + +/* +ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedFootprintTimePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimePeriodicity INTEGER (1..320, ...), + protectedFootprintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedFootprintTimePattern";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct protectedFootprintTimePeriodicity_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;} + protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;} + struct protectedFootprintStartTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintStartTime_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;} + protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + void clear() + { + protectedFootprintTimePeriodicity.clear(); + protectedFootprintStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + protectedFootprintTimePeriodicity_t protectedFootprintTimePeriodicity; + protectedFootprintStartTime_t protectedFootprintStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedResourceList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedResourceList-Item ::= SEQUENCE { + resourceType ResourceType, + intraPRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedResourceList-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct resourceType_t : ResourceType + { + static constexpr const char* name() {return "resourceType_t";} + using parent_t = ResourceType; + + }; + resourceType_t& ref_resourceType() {return resourceType;} + resourceType_t const& ref_resourceType() const {return resourceType;} + struct intraPRBProtectedResourceFootprint_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";} + using parent_t = asn::bstring<>; + + }; + + intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;} + intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;} + struct protectedFootprintFrequencyPattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";} + using parent_t = asn::bstring<>; + + }; + + protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;} + protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;} + struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern + { + static constexpr const char* name() {return "protectedFootprintTimePattern_t";} + using parent_t = ProtectedFootprintTimePattern; + + }; + protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;} + protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + void clear() + { + resourceType.clear(); + intraPRBProtectedResourceFootprint.clear(); + protectedFootprintFrequencyPattern.clear(); + protectedFootprintTimePattern.clear(); + iE_Extensions.clear(); + + }; + private: + resourceType_t resourceType; + intraPRBProtectedResourceFootprint_t intraPRBProtectedResourceFootprint; + protectedFootprintFrequencyPattern_t protectedFootprintFrequencyPattern; + protectedFootprintTimePattern_t protectedFootprintTimePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item +*/ + +struct ProtectedResourceList_elm : ProtectedResourceList_Item +{ + static constexpr const char* name() {return "ProtectedResourceList_elm";} + using parent_t = ProtectedResourceList_Item; + +}; +struct ProtectedResourceList : asn::sequenceof +{ + static constexpr const char* name() {return "ProtectedResourceList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} -- Rapporteur: missing extension -- +*/ + +struct ProtectedEUTRAResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedEUTRAResourceIndication::= SEQUENCE { + activationSFN INTEGER (0..1023), + protectedResourceList ProtectedResourceList, + mBSFNControlRegionLength INTEGER (0..3) OPTIONAL, + pDCCHRegionLength INTEGER (1..3) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct protectedResourceList_t : ProtectedResourceList + { + static constexpr const char* name() {return "protectedResourceList_t";} + using parent_t = ProtectedResourceList; + + }; + protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;} + protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;} + struct pDCCHRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCHRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;} + pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + protectedResourceList.clear(); + mBSFNControlRegionLength.clear(); + pDCCHRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + protectedResourceList_t protectedResourceList; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + pDCCHRegionLength_t pDCCHRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} +*/ + +struct Reestablishment_Indication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "Reestablishment-Indication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + reestablished + } index_t; + +}; + +/* +RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RLC_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RLC_Status : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RLC-Status";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct reestablishment_Indication_t : Reestablishment_Indication + { + static constexpr const char* name() {return "reestablishment_Indication_t";} + using parent_t = Reestablishment_Indication; + + }; + reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;} + reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + void clear() + { + reestablishment_Indication.clear(); + iE_Extensions.clear(); + + }; + private: + reestablishment_Indication_t reestablishment_Indication; + iE_Extensions_t iE_Extensions; + +}; +/* +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} +*/ + +struct RLCMode : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "RLCMode";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + rlc_am + ,rlc_um_bidirectional + ,rlc_um_unidirectional_ul + ,rlc_um_unidirectional_dl + } index_t; + +}; + +/* +RRC-Config-Ind ::= ENUMERATED { + full-config, + delta-config, + ... +} +*/ + +struct RRC_Config_Ind : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RRC-Config-Ind";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + full_config + ,delta_config + } index_t; + +}; + +/* +RRC-Context ::= OCTET STRING +*/ + +struct RRC_Context : asn::ostring<> +{ + static constexpr const char* name() {return "RRC-Context";} + using parent_t = asn::ostring<>; + +}; + +/* +RRCConnReestabIndicator ::= ENUMERATED { + reconfigurationFailure, handoverFailure, otherFailure, ... +} +*/ + +struct RRCConnReestabIndicator : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RRCConnReestabIndicator";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + reconfigurationFailure + ,handoverFailure + ,otherFailure + } index_t; + +}; + +/* +RRCConnSetupIndicator::= ENUMERATED { + rrcConnSetup, + ... +} +*/ + +struct RRCConnSetupIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "RRCConnSetupIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + rrcConnSetup + } index_t; + +}; + +/* +RRCContainer ::= OCTET STRING +*/ + +struct RRCContainer : asn::ostring<> +{ + static constexpr const char* name() {return "RRCContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RSRPMeasurementResult_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF + SEQUENCE { + rSRPCellID ECGI, + rSRPMeasured INTEGER (0..97, ...), + iE-Extensions ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMeasurementResult_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct rSRPCellID_t : ECGI + { + static constexpr const char* name() {return "rSRPCellID_t";} + using parent_t = ECGI; + + }; + rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;} + rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;} + struct rSRPMeasured_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rSRPMeasured_t";} + using parent_t = asn::integer<>; + + }; + + rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;} + rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + void clear() + { + rSRPCellID.clear(); + rSRPMeasured.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPCellID_t rSRPCellID; + rSRPMeasured_t rSRPMeasured; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMeasurementResult : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMeasurementResult";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional}, + ... +} +*/ + +struct RSRPMRList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(id_UEID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UEID& select_id_UEID() { return set(1); } + UEID const* get_id_UEID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + rSRPMeasurementResult RSRPMeasurementResult, + iE-Extensions ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMRList_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMRList_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct rSRPMeasurementResult_t : RSRPMeasurementResult + { + static constexpr const char* name() {return "rSRPMeasurementResult_t";} + using parent_t = RSRPMeasurementResult; + + }; + rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;} + rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + void clear() + { + rSRPMeasurementResult.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPMeasurementResult_t rSRPMeasurementResult; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMRList : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMRList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct UL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-DL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION DL-scheduling-PDCCH-CCE-usage PRESENCE optional}| + + {ID id-UL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION UL-scheduling-PDCCH-CCE-usage PRESENCE optional}, + ... +} +*/ + +struct RadioResourceStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; } + else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DL_scheduling_PDCCH_CCE_usage);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set(1); } + DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get(1); } + UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set(2); } + UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DL_scheduling_PDCCH_CCE_usage()); return true; + case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)]; + char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RadioResourceStatus : asn::sequence<7, 0, true, 1> +{ + static constexpr const char* name() {return "RadioResourceStatus";} + using parent_t = asn::sequence<7, 0, true, 1>; + struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_GBR_PRB_usage_t";} + using parent_t = DL_GBR_PRB_usage; + + }; + dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;} + dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;} + struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_GBR_PRB_usage_t";} + using parent_t = UL_GBR_PRB_usage; + + }; + uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;} + uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;} + struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";} + using parent_t = DL_non_GBR_PRB_usage; + + }; + dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;} + dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;} + struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";} + using parent_t = UL_non_GBR_PRB_usage; + + }; + uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;} + uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;} + struct dL_Total_PRB_usage_t : DL_Total_PRB_usage + { + static constexpr const char* name() {return "dL_Total_PRB_usage_t";} + using parent_t = DL_Total_PRB_usage; + + }; + dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;} + dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;} + struct uL_Total_PRB_usage_t : UL_Total_PRB_usage + { + static constexpr const char* name() {return "uL_Total_PRB_usage_t";} + using parent_t = UL_Total_PRB_usage; + + }; + uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;} + uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + void clear() + { + dL_GBR_PRB_usage.clear(); + uL_GBR_PRB_usage.clear(); + dL_non_GBR_PRB_usage.clear(); + uL_non_GBR_PRB_usage.clear(); + dL_Total_PRB_usage.clear(); + uL_Total_PRB_usage.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GBR_PRB_usage_t dL_GBR_PRB_usage; + uL_GBR_PRB_usage_t uL_GBR_PRB_usage; + dL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + uL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + dL_Total_PRB_usage_t dL_Total_PRB_usage; + uL_Total_PRB_usage_t uL_Total_PRB_usage; + iE_Extensions_t iE_Extensions; + +}; +/* +ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) +*/ + +struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) +*/ + +struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) +*/ + +struct ReceiveStatusofULPDCPSDUs : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";} + using parent_t = asn::bstring<>; + +}; + +/* +Registration-Request ::= ENUMERATED { + start, + stop, + ..., + partial-stop, + add +} +*/ + +struct Registration_Request : asn::enumerated<4, 2, true> +{ + static constexpr const char* name() {return "Registration-Request";} + using parent_t = asn::enumerated<4, 2, true>; + typedef enum { + start + ,stop + ,partial_stop + ,add + } index_t; + +}; + +/* +RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-enhancedRNTP CRITICALITY ignore EXTENSION EnhancedRNTP PRESENCE optional }, + ... +} +*/ + +struct RelativeNarrowbandTxPower_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(id_enhancedRNTP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_enhancedRNTP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_enhancedRNTP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EnhancedRNTP& select_id_enhancedRNTP() { return set(1); } + EnhancedRNTP const* get_id_enhancedRNTP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_enhancedRNTP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EnhancedRNTP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RelativeNarrowbandTxPower ::= SEQUENCE { + + rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), + rNTP-Threshold RNTP-Threshold, + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + p-B INTEGER (0..3,...), + pDCCH-InterferenceImpact INTEGER (0..4,...), + iE-Extensions ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "RelativeNarrowbandTxPower";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct rNTP_PerPRB_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rNTP_PerPRB_t";} + using parent_t = asn::bstring<>; + + }; + + rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;} + rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;} + struct rNTP_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;} + rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct p_B_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "p_B_t";} + using parent_t = asn::integer<>; + + }; + + p_B_t& ref_p_B() {return p_B;} + p_B_t const& ref_p_B() const {return p_B;} + struct pDCCH_InterferenceImpact_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";} + using parent_t = asn::integer<>; + + }; + + pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;} + pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + void clear() + { + rNTP_PerPRB.clear(); + rNTP_Threshold.clear(); + numberOfCellSpecificAntennaPorts.clear(); + p_B.clear(); + pDCCH_InterferenceImpact.clear(); + iE_Extensions.clear(); + + }; + private: + rNTP_PerPRB_t rNTP_PerPRB; + rNTP_Threshold_t rNTP_Threshold; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + p_B_t p_B; + pDCCH_InterferenceImpact_t pDCCH_InterferenceImpact; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportCharacteristics ::= BIT STRING (SIZE (32)) +*/ + +struct ReportCharacteristics : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReportCharacteristics";} + using parent_t = asn::bstring<>; + +}; + +/* +ReportingPeriodicityCSIR ::= ENUMERATED { + ms5, + ms10, + ms20, + ms40, + ms80, +... +} +*/ + +struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityCSIR";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms5 + ,ms10 + ,ms20 + ,ms40 + ,ms80 + } index_t; + +}; + +/* +ReportingPeriodicityRSRPMR ::= ENUMERATED { + one-hundred-20-ms, + two-hundred-40-ms, + four-hundred-80-ms, + six-hundred-40-ms, +... +} +*/ + +struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_hundred_20_ms + ,two_hundred_40_ms + ,four_hundred_80_ms + ,six_hundred_40_ms + } index_t; + +}; + +/* +ResumeID ::= CHOICE { + non-truncated BIT STRING(SIZE(40)), + truncated BIT STRING(SIZE(24)), + ... +} +*/ + +struct ResumeID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResumeID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResumeID() {clear();} + struct non_truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "non_truncated_t";} + using parent_t = asn::bstring<>; + + }; + + struct truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "truncated_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as();} return nullptr; } + truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(non_truncated_t)]; + char dummy2[sizeof(truncated_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct S1TNLLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +S1TNLLoadIndicator ::= SEQUENCE { + dLS1TNLLoadIndicator LoadIndicator, + uLS1TNLLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "S1TNLLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;} + dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;} + struct uLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;} + uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLS1TNLLoadIndicator.clear(); + uLS1TNLLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLS1TNLLoadIndicator_t dLS1TNLLoadIndicator; + uLS1TNLLoadIndicator_t uLS1TNLLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...} +*/ + +struct SCGChangeIndication : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SCGChangeIndication";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + pDCPCountWrapAround + ,pSCellChange + ,other + } index_t; + +}; + +/* +SCGConfigurationQuery ::= ENUMERATED {true,...} +*/ + +struct SCGConfigurationQuery : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SCGConfigurationQuery";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SGNB-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-eNB-HO, + intra-eNB-HO, + ... +} +*/ + +struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + sn_change + ,inter_eNB_HO + ,intra_eNB_HO + } index_t; + +}; + +/* +SIPTOBearerDeactivationIndication ::= ENUMERATED { + true, + ... +} +*/ + +struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SRBType ::= ENUMERATED {srb1, srb2, ...} +*/ + +struct SRBType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SRBType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + srb1 + ,srb2 + } index_t; + +}; + +/* +SRVCCOperationPossible ::= ENUMERATED { + possible, + ... +} +*/ + +struct SRVCCOperationPossible : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SRVCCOperationPossible";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + possible + } index_t; + +}; + +/* +ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ScheduledCommunicationTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ScheduledCommunicationTime";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct dayofWeek_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dayofWeek_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;} + dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;} + struct timeofDayStart_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayStart_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;} + timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;} + struct timeofDayEnd_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayEnd_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;} + timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + void clear() + { + dayofWeek.clear(); + timeofDayStart.clear(); + timeofDayEnd.clear(); + iE_Extensions.clear(); + + }; + private: + dayofWeek_t dayofWeek; + timeofDayStart_t timeofDayStart; + timeofDayEnd_t timeofDayEnd; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SeNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SeNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SeNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SeNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SeNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SecondaryRATUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReport-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + secondaryRATType ENUMERATED {nr, ...}, + e-RABUsageReportList E-RABUsageReportList, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SecondaryRATUsageReport-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct secondaryRATType_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "secondaryRATType_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nr + } index_t; + + }; + + secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;} + secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;} + struct e_RABUsageReportList_t : E_RABUsageReportList + { + static constexpr const char* name() {return "e_RABUsageReportList_t";} + using parent_t = E_RABUsageReportList; + + }; + e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;} + e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + secondaryRATType.clear(); + e_RABUsageReportList.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + secondaryRATType_t secondaryRATType; + e_RABUsageReportList_t e_RABUsageReportList; + iE_Extensions_t iE_Extensions; + +}; +/* +SecondaryRATUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-SecondaryRATUsageReport-Item CRITICALITY reject TYPE SecondaryRATUsageReport-Item PRESENCE mandatory}, + ... +} +*/ + +struct SecondaryRATUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SecondaryRATUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set(1); } + SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SecondaryRATUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}} +*/ + +struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct SecondaryRATUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCell_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional}| + { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional}| + { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional}| + { ID id-CSG-Id CRITICALITY ignore EXTENSION CSG-Id PRESENCE optional}| + { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION MBMS-Service-Area-Identity-List PRESENCE optional}| + { ID id-MultibandInfoList CRITICALITY ignore EXTENSION MultibandInfoList PRESENCE optional}| + { ID id-FreqBandIndicatorPriority CRITICALITY ignore EXTENSION FreqBandIndicatorPriority PRESENCE optional}| + { ID id-BandwidthReducedSI CRITICALITY ignore EXTENSION BandwidthReducedSI PRESENCE optional}| + { ID id-ProtectedEUTRAResourceIndication CRITICALITY ignore EXTENSION ProtectedEUTRAResourceIndication PRESENCE optional}, + ... +} +*/ + +struct ServedCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;} + void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;} + void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;} + void select_id_CSG_Id() { set(id_CSG_Id); type=4;} + void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;} + void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;} + void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;} + void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Number_of_Antennaports)) { type = 1; return true; } + else if(equal(id_PRACH_Configuration)) { type = 2; return true; } + else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; } + else if(equal(id_CSG_Id)) { type = 4; return true; } + else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; } + else if(equal(id_MultibandInfoList)) { type = 6; return true; } + else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; } + else if(equal(id_BandwidthReducedSI)) { type = 8; return true; } + else if(equal(id_ProtectedEUTRAResourceIndication)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Number_of_Antennaports);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(ignore); type=1;} + void select_id_PRACH_Configuration() { set(ignore); type=2;} + void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;} + void select_id_CSG_Id() { set(ignore); type=4;} + void select_id_MBMS_Service_Area_List() { set(ignore); type=5;} + void select_id_MultibandInfoList() { set(ignore); type=6;} + void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;} + void select_id_BandwidthReducedSI() { set(ignore); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Number_of_Antennaports& select_id_Number_of_Antennaports() { return set(1); } + Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get(1); } + PRACH_Configuration& select_id_PRACH_Configuration() { return set(2); } + PRACH_Configuration const* get_id_PRACH_Configuration() const { return get(2); } + MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set(3); } + MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get(3); } + CSG_Id& select_id_CSG_Id() { return set(4); } + CSG_Id const* get_id_CSG_Id() const { return get(4); } + MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set(5); } + MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get(5); } + MultibandInfoList& select_id_MultibandInfoList() { return set(6); } + MultibandInfoList const* get_id_MultibandInfoList() const { return get(6); } + FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set(7); } + FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get(7); } + BandwidthReducedSI& select_id_BandwidthReducedSI() { return set(8); } + BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get(8); } + ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set(9); } + ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Number_of_Antennaports()); return true; + case 2: v(select_id_PRACH_Configuration()); return true; + case 3: v(select_id_MBSFN_Subframe_Info()); return true; + case 4: v(select_id_CSG_Id()); return true; + case 5: v(select_id_MBMS_Service_Area_List()); return true; + case 6: v(select_id_MultibandInfoList()); return true; + case 7: v(select_id_FreqBandIndicatorPriority()); return true; + case 8: v(select_id_BandwidthReducedSI()); return true; + case 9: v(select_id_ProtectedEUTRAResourceIndication()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BandwidthReducedSI)]; + char dummy2[sizeof(CSG_Id)]; + char dummy3[sizeof(FreqBandIndicatorPriority)]; + char dummy4[sizeof(MBMS_Service_Area_Identity_List)]; + char dummy5[sizeof(MBSFN_Subframe_Infolist)]; + char dummy6[sizeof(MultibandInfoList)]; + char dummy7[sizeof(Number_of_Antennaports)]; + char dummy8[sizeof(PRACH_Configuration)]; + char dummy9[sizeof(ProtectedEUTRAResourceIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(optional); type=1;} + void select_id_PRACH_Configuration() { set(optional); type=2;} + void select_id_MBSFN_Subframe_Info() { set(optional); type=3;} + void select_id_CSG_Id() { set(optional); type=4;} + void select_id_MBMS_Service_Area_List() { set(optional); type=5;} + void select_id_MultibandInfoList() { set(optional); type=6;} + void select_id_FreqBandIndicatorPriority() { set(optional); type=7;} + void select_id_BandwidthReducedSI() { set(optional); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information ::= SEQUENCE { + pCI PCI, + cellId ECGI, + tAC TAC, + broadcastPLMNs BroadcastPLMNs-Item, + eUTRA-Mode-Info EUTRA-Mode-Info, + iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCell_Information : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCell-Information";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct cellId_t : ECGI + { + static constexpr const char* name() {return "cellId_t";} + using parent_t = ECGI; + + }; + cellId_t& ref_cellId() {return cellId;} + cellId_t const& ref_cellId() const {return cellId;} + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct eUTRA_Mode_Info_t : EUTRA_Mode_Info + { + static constexpr const char* name() {return "eUTRA_Mode_Info_t";} + using parent_t = EUTRA_Mode_Info; + + }; + eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;} + eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + void clear() + { + pCI.clear(); + cellId.clear(); + tAC.clear(); + broadcastPLMNs.clear(); + eUTRA_Mode_Info.clear(); + iE_Extensions.clear(); + + }; + private: + pCI_t pCI; + cellId_t cellId; + tAC_t tAC; + broadcastPLMNs_t broadcastPLMNs; + eUTRA_Mode_Info_t eUTRA_Mode_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCells_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCells_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +struct ServedCells : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCells";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServiceType ::= ENUMERATED{ + qMC-for-streaming-service, + qMC-for-MTSI-service, + ... +} +*/ + +struct ServiceType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ServiceType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + qMC_for_streaming_service + ,qMC_for_MTSI_service + } index_t; + +}; + +/* +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) +*/ + +struct SgNB_UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNB-UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +SgNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ECGI CRITICALITY ignore EXTENSION ECGI PRESENCE optional}| + { ID id-SgNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(id_ECGI); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ECGI)) { type = 1; return true; } + else if(equal(id_SgNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ECGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(ignore); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ECGI() { return set(1); } + ECGI const* get_id_ECGI() const { return get(1); } + SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set(2); } + SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ECGI()); return true; + case 2: v(select_id_SgNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(SgNBCoordinationAssistanceInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(optional); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBResourceCoordinationInformation ::= SEQUENCE { + nR-CGI NRCGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "SgNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nR_CGI_t : NRCGI + { + static constexpr const char* name() {return "nR_CGI_t";} + using parent_t = NRCGI; + + }; + nR_CGI_t& ref_nR_CGI() {return nR_CGI;} + nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + nR_CGI.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nR_CGI_t nR_CGI; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SgNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SgNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SgNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SgNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +ShortMAC-I ::= BIT STRING (SIZE(16)) +*/ + +struct ShortMAC_I : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ShortMAC-I";} + using parent_t = asn::bstring<>; + +}; + +/* +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) +*/ + +struct SpectrumSharingGroupID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SpectrumSharingGroupID";} + using parent_t = asn::integer<>; + +}; + +/* +SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SplitSRB_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SplitSRB ::= SEQUENCE { + rrcContainer RRCContainer OPTIONAL, + srbType SRBType, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SplitSRB : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "SplitSRB";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct rrcContainer_t : RRCContainer + { + static constexpr const char* name() {return "rrcContainer_t";} + using parent_t = RRCContainer; + static constexpr bool optional = true; + + }; + rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;} + rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;} + struct srbType_t : SRBType + { + static constexpr const char* name() {return "srbType_t";} + using parent_t = SRBType; + + }; + srbType_t& ref_srbType() {return srbType;} + srbType_t const& ref_srbType() const {return srbType;} + struct deliveryStatus_t : DeliveryStatus + { + static constexpr const char* name() {return "deliveryStatus_t";} + using parent_t = DeliveryStatus; + static constexpr bool optional = true; + + }; + deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;} + deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + void clear() + { + rrcContainer.clear(); + srbType.clear(); + deliveryStatus.clear(); + iE_Extensions.clear(); + + }; + private: + rrcContainer_t rrcContainer; + srbType_t srbType; + deliveryStatus_t deliveryStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...} +*/ + +struct SplitSRBs : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SplitSRBs";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + srb1 + ,srb2 + ,srb1and2 + } index_t; + +}; + +/* +SubscriberProfileIDforRFP ::= INTEGER (1..256) +*/ + +struct SubscriberProfileIDforRFP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SubscriberProfileIDforRFP";} + using parent_t = asn::integer<>; + +}; + +/* +Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ...} OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "periodicCommunicationIndicator_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + periodically + ,ondemand + } index_t; + + }; + + periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;} + periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;} + struct periodicTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "periodicTime_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;} + periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;} + struct scheduledCommunicationTime_t : ScheduledCommunicationTime + { + static constexpr const char* name() {return "scheduledCommunicationTime_t";} + using parent_t = ScheduledCommunicationTime; + static constexpr bool optional = true; + + }; + scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;} + scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;} + struct stationaryIndication_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "stationaryIndication_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + stationary + ,mobile + } index_t; + + }; + + stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;} + stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;} + struct trafficProfile_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "trafficProfile_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + single_packet + ,dual_packets + ,multiple_packets + } index_t; + + }; + + trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;} + trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;} + struct batteryIndication_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "batteryIndication_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + battery_powered + ,battery_powered_not_rechargeable_or_replaceable + ,not_battery_powered + } index_t; + + }; + + batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;} + batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + void clear() + { + periodicCommunicationIndicator.clear(); + periodicTime.clear(); + scheduledCommunicationTime.clear(); + stationaryIndication.clear(); + trafficProfile.clear(); + batteryIndication.clear(); + iE_Extensions.clear(); + + }; + private: + periodicCommunicationIndicator_t periodicCommunicationIndicator; + periodicTime_t periodicTime; + scheduledCommunicationTime_t scheduledCommunicationTime; + stationaryIndication_t stationaryIndication; + trafficProfile_t trafficProfile; + batteryIndication_t batteryIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] +*/ + +struct TargetCellInUTRAN : asn::ostring<> +{ + static constexpr const char* name() {return "TargetCellInUTRAN";} + using parent_t = asn::ostring<>; + +}; + +/* +TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING +*/ + +struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<> +{ + static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} +*/ + +struct TimeToWait : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TimeToWait";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + v1s + ,v2s + ,v5s + ,v10s + ,v20s + ,v60s + } index_t; + +}; + +/* +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} +*/ + +struct TraceDepth : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TraceDepth";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + minimum + ,medium + ,maximum + ,minimumWithoutVendorSpecificExtension + ,mediumWithoutVendorSpecificExtension + ,maximumWithoutVendorSpecificExtension + } index_t; + +}; + +/* +TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TraceCollectionEntityIPAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TraceCollectionEntityIPAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-serviceType CRITICALITY ignore EXTENSION ServiceType PRESENCE optional}, + ... +} +*/ + +struct UEAppLayerMeasConfig_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(id_serviceType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_serviceType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_serviceType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ServiceType& select_id_serviceType() { return set(1); } + ServiceType const* get_id_serviceType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_serviceType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServiceType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAppLayerMeasConfig ::= SEQUENCE { + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..1000)), + areaScopeOfQMC AreaScopeOfQMC, + iE-Extensions ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAppLayerMeasConfig";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct containerForAppLayerMeasConfig_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";} + using parent_t = asn::ostring<>; + + }; + + containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;} + containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;} + struct areaScopeOfQMC_t : AreaScopeOfQMC + { + static constexpr const char* name() {return "areaScopeOfQMC_t";} + using parent_t = AreaScopeOfQMC; + + }; + areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;} + areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + void clear() + { + containerForAppLayerMeasConfig.clear(); + areaScopeOfQMC.clear(); + iE_Extensions.clear(); + + }; + private: + containerForAppLayerMeasConfig_t containerForAppLayerMeasConfig; + areaScopeOfQMC_t areaScopeOfQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}| + { ID id-UEAppLayerMeasConfig CRITICALITY ignore EXTENSION UEAppLayerMeasConfig PRESENCE optional}, + ... +} +*/ + +struct TraceActivation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(id_MDTConfiguration); type=1;} + void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MDTConfiguration)) { type = 1; return true; } + else if(equal(id_UEAppLayerMeasConfig)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MDTConfiguration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(ignore); type=1;} + void select_id_UEAppLayerMeasConfig() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + MDT_Configuration& select_id_MDTConfiguration() { return set(1); } + MDT_Configuration const* get_id_MDTConfiguration() const { return get(1); } + UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set(2); } + UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MDTConfiguration()); return true; + case 2: v(select_id_UEAppLayerMeasConfig()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDT_Configuration)]; + char dummy2[sizeof(UEAppLayerMeasConfig)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(optional); type=1;} + void select_id_UEAppLayerMeasConfig() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TraceActivation ::= SEQUENCE { + eUTRANTraceID EUTRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TraceActivation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TraceActivation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eUTRANTraceID_t : EUTRANTraceID + { + static constexpr const char* name() {return "eUTRANTraceID_t";} + using parent_t = EUTRANTraceID; + + }; + eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;} + eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;} + struct interfacesToTrace_t : InterfacesToTrace + { + static constexpr const char* name() {return "interfacesToTrace_t";} + using parent_t = InterfacesToTrace; + + }; + interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;} + interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;} + struct traceDepth_t : TraceDepth + { + static constexpr const char* name() {return "traceDepth_t";} + using parent_t = TraceDepth; + + }; + traceDepth_t& ref_traceDepth() {return traceDepth;} + traceDepth_t const& ref_traceDepth() const {return traceDepth;} + struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress + { + static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";} + using parent_t = TraceCollectionEntityIPAddress; + + }; + traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;} + traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + void clear() + { + eUTRANTraceID.clear(); + interfacesToTrace.clear(); + traceDepth.clear(); + traceCollectionEntityIPAddress.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRANTraceID_t eUTRANTraceID; + interfacesToTrace_t interfacesToTrace; + traceDepth_t traceDepth; + traceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + iE_Extensions_t iE_Extensions; + +}; +/* +Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Tunnel_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TunnelInformation ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + uDP-Port-Number Port-Number OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TunnelInformation : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "TunnelInformation";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct uDP_Port_Number_t : Port_Number + { + static constexpr const char* name() {return "uDP_Port_Number_t";} + using parent_t = Port_Number; + static constexpr bool optional = true; + + }; + uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;} + uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + uDP_Port_Number.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + uDP_Port_Number_t uDP_Port_Number; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextKeptIndicator ::= ENUMERATED { + true, + ... +} +*/ + +struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "UE-ContextKeptIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item +*/ + +struct UE_HistoryInformation_elm : LastVisitedCell_Item +{ + static constexpr const char* name() {return "UE_HistoryInformation_elm";} + using parent_t = LastVisitedCell_Item; + +}; +struct UE_HistoryInformation : asn::sequenceof +{ + static constexpr const char* name() {return "UE-HistoryInformation";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UE-HistoryInformationFromTheUE ::= OCTET STRING +*/ + +struct UE_HistoryInformationFromTheUE : asn::ostring<> +{ + static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container::= OCTET STRING +*/ + +struct UE_RLF_Report_Container : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING +*/ + +struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-S1AP-ID ::= INTEGER (0.. 4294967295) +*/ + +struct UE_S1AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-S1AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-X2AP-ID ::= INTEGER (0..4095) +*/ + +struct UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...) +*/ + +struct UE_X2AP_ID_Extension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID-Extension";} + using parent_t = asn::integer<>; + +}; + +/* +UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-extended-uEaggregateMaximumBitRateDownlink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-uEaggregateMaximumBitRateUplink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct UEAggregate_MaximumBitrate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; } + else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateDownlink);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set(1); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get(1); } + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set(2); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_uEaggregateMaximumBitRateDownlink()); return true; + case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAggregateMaximumBitRate ::= SEQUENCE { + uEaggregateMaximumBitRateDownlink BitRate, + uEaggregateMaximumBitRateUplink BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAggregateMaximumBitRate";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEaggregateMaximumBitRateDownlink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;} + uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;} + struct uEaggregateMaximumBitRateUplink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;} + uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + void clear() + { + uEaggregateMaximumBitRateDownlink.clear(); + uEaggregateMaximumBitRateUplink.clear(); + iE_Extensions.clear(); + + }; + private: + uEaggregateMaximumBitRateDownlink_t uEaggregateMaximumBitRateDownlink; + uEaggregateMaximumBitRateUplink_t uEaggregateMaximumBitRateUplink; + iE_Extensions_t iE_Extensions; + +}; +/* +UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UENRMeasurement_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UENRMeasurement ::= SEQUENCE { + uENRMeasurements RRCContainer, + iE-Extensions ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UENRMeasurement : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UENRMeasurement";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uENRMeasurements_t : RRCContainer + { + static constexpr const char* name() {return "uENRMeasurements_t";} + using parent_t = RRCContainer; + + }; + uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;} + uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + void clear() + { + uENRMeasurements.clear(); + iE_Extensions.clear(); + + }; + private: + uENRMeasurements_t uENRMeasurements; + iE_Extensions_t iE_Extensions; + +}; +/* +UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UESecurityCapabilities ::= SEQUENCE { + encryptionAlgorithms EncryptionAlgorithms, + integrityProtectionAlgorithms IntegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct UESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct encryptionAlgorithms_t : EncryptionAlgorithms + { + static constexpr const char* name() {return "encryptionAlgorithms_t";} + using parent_t = EncryptionAlgorithms; + + }; + encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;} + encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;} + struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms + { + static constexpr const char* name() {return "integrityProtectionAlgorithms_t";} + using parent_t = IntegrityProtectionAlgorithms; + + }; + integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;} + integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + encryptionAlgorithms.clear(); + integrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + encryptionAlgorithms_t encryptionAlgorithms; + integrityProtectionAlgorithms_t integrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +UESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uESidelinkAggregateMaximumBitRate_t : BitRate + { + static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";} + using parent_t = BitRate; + + }; + uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;} + uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + void clear() + { + uESidelinkAggregateMaximumBitRate.clear(); + iE_Extensions.clear(); + + }; + private: + uESidelinkAggregateMaximumBitRate_t uESidelinkAggregateMaximumBitRate; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UEsToBeResetList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEsToBeResetList-Item::= SEQUENCE { + meNB-ID UE-X2AP-ID, + meNB-ID-ext UE-X2AP-ID-Extension OPTIONAL, + sgNB-ID SgNB-UE-X2AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "UEsToBeResetList-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct meNB_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "meNB_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + meNB_ID_t& ref_meNB_ID() {return meNB_ID;} + meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;} + struct meNB_ID_ext_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "meNB_ID_ext_t";} + using parent_t = UE_X2AP_ID_Extension; + static constexpr bool optional = true; + + }; + meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;} + meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;} + struct sgNB_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + static constexpr bool optional = true; + + }; + sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;} + sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + void clear() + { + meNB_ID.clear(); + meNB_ID_ext.clear(); + sgNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + meNB_ID_t meNB_ID; + meNB_ID_ext_t meNB_ID_ext; + sgNB_ID_t sgNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item +*/ + +struct UEsToBeResetList_elm : UEsToBeResetList_Item +{ + static constexpr const char* name() {return "UEsToBeResetList_elm";} + using parent_t = UEsToBeResetList_Item; + +}; +struct UEsToBeResetList : asn::sequenceof +{ + static constexpr const char* name() {return "UEsToBeResetList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) +*/ + +struct UL_HighInterferenceIndication : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-HighInterferenceIndication";} + using parent_t = asn::bstring<>; + +}; + +/* +UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { + target-Cell-ID ECGI, + ul-interferenceindication UL-HighInterferenceIndication, + iE-Extensions ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct target_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "target_Cell_ID_t";} + using parent_t = ECGI; + + }; + target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;} + target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;} + struct ul_interferenceindication_t : UL_HighInterferenceIndication + { + static constexpr const char* name() {return "ul_interferenceindication_t";} + using parent_t = UL_HighInterferenceIndication; + + }; + ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;} + ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + void clear() + { + target_Cell_ID.clear(); + ul_interferenceindication.clear(); + iE_Extensions.clear(); + + }; + private: + target_Cell_ID_t target_Cell_ID; + ul_interferenceindication_t ul_interferenceindication; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item +*/ + +struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item +{ + static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";} + using parent_t = UL_HighInterferenceIndicationInfo_Item; + +}; +struct UL_HighInterferenceIndicationInfo : asn::sequenceof +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... } +*/ + +struct UL_UE_Configuration : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-UE-Configuration";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + no_data + ,shared + ,only + } index_t; + +}; + +/* +ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULConfiguration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULConfiguration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uL_PDCP_t : UL_UE_Configuration + { + static constexpr const char* name() {return "uL_PDCP_t";} + using parent_t = UL_UE_Configuration; + + }; + uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;} + uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_PDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_PDCP); + v(iE_Extensions); + + }; + void clear() + { + uL_PDCP.clear(); + iE_Extensions.clear(); + + }; + private: + uL_PDCP_t uL_PDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct VehicleUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "VehicleUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct V2XServicesAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +V2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "V2XServicesAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct vehicleUE_t : VehicleUE + { + static constexpr const char* name() {return "vehicleUE_t";} + using parent_t = VehicleUE; + static constexpr bool optional = true; + + }; + vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;} + vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;} + struct pedestrianUE_t : PedestrianUE + { + static constexpr const char* name() {return "pedestrianUE_t";} + using parent_t = PedestrianUE; + static constexpr bool optional = true; + + }; + pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;} + pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + void clear() + { + vehicleUE.clear(); + pedestrianUE.clear(); + iE_Extensions.clear(); + + }; + private: + vehicleUE_t vehicleUE; + pedestrianUE_t pedestrianUE; + iE_Extensions_t iE_Extensions; + +}; +/* +WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3)) +*/ + +struct WT_UE_XwAP_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WT-UE-XwAP-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +WTID-Type1 ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + shortWTID BIT STRING (SIZE(24)), + ... +} +*/ + +struct WTID_Type1 : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "WTID-Type1";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct shortWTID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "shortWTID_t";} + using parent_t = asn::bstring<>; + + }; + + shortWTID_t& ref_shortWTID() {return shortWTID;} + shortWTID_t const& ref_shortWTID() const {return shortWTID;} + template void decode(V& v) + { + v(pLMN_Identity); + v(shortWTID); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(shortWTID); + + }; + void clear() + { + pLMN_Identity.clear(); + shortWTID.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + shortWTID_t shortWTID; + +}; +/* +WTID-Long-Type2 ::= BIT STRING (SIZE(48)) +*/ + +struct WTID_Long_Type2 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WTID-Long-Type2";} + using parent_t = asn::bstring<>; + +}; + +/* +WTID ::= CHOICE { + wTID-Type1 WTID-Type1, + wTID-Type2 WTID-Long-Type2, + ... +} +*/ + +struct WTID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WTID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WTID() {clear();} + struct wTID_Type1_t : WTID_Type1 + { + static constexpr const char* name() {return "wTID_Type1_t";} + using parent_t = WTID_Type1; + + }; + struct wTID_Type2_t : WTID_Long_Type2 + { + static constexpr const char* name() {return "wTID_Type2_t";} + using parent_t = WTID_Long_Type2; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as();} return nullptr; } + wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(wTID_Type1_t)]; + char dummy2[sizeof(wTID_Type2_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +X2BenefitValue ::= INTEGER (1..8, ...) +*/ + +struct X2BenefitValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "X2BenefitValue";} + using parent_t = asn::integer<>; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp new file mode 100644 index 0000000..dd85f97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Contents.hpp @@ -0,0 +1,68476 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" +#include "X2AP-Containers.hpp" +#include "X2AP-Constants.hpp" + +/* +ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedCellList-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item +*/ + +struct ActivatedCellList_elm : ActivatedCellList_Item +{ + static constexpr const char* name() {return "ActivatedCellList_elm";} + using parent_t = ActivatedCellList_Item; + +}; +struct ActivatedCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ActivatedNRCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedNRCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedNRCellList-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedNRCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedNRCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedNRCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedNRCellList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ActivatedNRCellList-Item +*/ + +struct ActivatedNRCellList_elm : ActivatedNRCellList_Item +{ + static constexpr const char* name() {return "ActivatedNRCellList_elm";} + using parent_t = ActivatedNRCellList_Item; + +}; +struct ActivatedNRCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedNRCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct CellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, + ... +} +*/ + +struct CellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToActivate-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item +*/ + +struct ServedCellsToActivate_elm : ServedCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedCellsToActivate_elm";} + using parent_t = ServedCellsToActivate_Item; + +}; +struct ServedCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}, + ... +} +*/ + +struct CellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(id_ServedCellsToActivate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToActivate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToActivate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCellsToActivate& select_id_ServedCellsToActivate() { return set(1); } + ServedCellsToActivate const* get_id_ServedCellsToActivate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToActivate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, + ... +} +*/ + +struct CellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct CellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(id_ActivatedCellList); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedCellList)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedCellList& select_id_ActivatedCellList() { return set(1); } + ActivatedCellList const* get_id_ActivatedCellList() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedCellList()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedCellList)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, + ... +} +*/ + +struct CellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +Limited-list-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Limited_list_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Limited-list ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {Limited-list-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Limited_list_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "Limited_list_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +struct Limited_list : asn::sequenceof +{ + static constexpr const char* name() {return "Limited-list";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellAssistanceInformation ::= CHOICE { + limited-list Limited-list, + full-list ENUMERATED {allServedNRcells, ...}, + ... +} +*/ + +struct CellAssistanceInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "CellAssistanceInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~CellAssistanceInformation() {clear();} + struct limited_list_t : Limited_list + { + static constexpr const char* name() {return "limited_list_t";} + using parent_t = Limited_list; + + }; + struct full_list_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "full_list_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allServedNRcells + } index_t; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + limited_list_t& select_limited_list() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + limited_list_t const* get_limited_list() const { if(get_index() == 1) { return &var.as();} return nullptr; } + full_list_t& select_full_list() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + full_list_t const* get_full_list() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(limited_list_t)]; + char dummy2[sizeof(full_list_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ABSInformation CRITICALITY ignore EXTENSION ABSInformation PRESENCE optional }| +{ ID id-InvokeIndication CRITICALITY ignore EXTENSION InvokeIndication PRESENCE optional }| +{ ID id-IntendedULDLConfiguration CRITICALITY ignore EXTENSION SubframeAssignment PRESENCE optional }| +{ ID id-ExtendedULInterferenceOverloadInfo CRITICALITY ignore EXTENSION ExtendedULInterferenceOverloadInfo PRESENCE optional }| +{ ID id-CoMPInformation CRITICALITY ignore EXTENSION CoMPInformation PRESENCE optional }| +{ ID id-DynamicDLTransmissionInformation CRITICALITY ignore EXTENSION DynamicDLTransmissionInformation PRESENCE optional }, + ... +} +*/ + +struct CellInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(id_ABSInformation); type=1;} + void select_id_InvokeIndication() { set(id_InvokeIndication); type=2;} + void select_id_IntendedULDLConfiguration() { set(id_IntendedULDLConfiguration); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(id_ExtendedULInterferenceOverloadInfo); type=4;} + void select_id_CoMPInformation() { set(id_CoMPInformation); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(id_DynamicDLTransmissionInformation); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ABSInformation)) { type = 1; return true; } + else if(equal(id_InvokeIndication)) { type = 2; return true; } + else if(equal(id_IntendedULDLConfiguration)) { type = 3; return true; } + else if(equal(id_ExtendedULInterferenceOverloadInfo)) { type = 4; return true; } + else if(equal(id_CoMPInformation)) { type = 5; return true; } + else if(equal(id_DynamicDLTransmissionInformation)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ABSInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_InvokeIndication);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_IntendedULDLConfiguration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ExtendedULInterferenceOverloadInfo);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CoMPInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DynamicDLTransmissionInformation);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(ignore); type=1;} + void select_id_InvokeIndication() { set(ignore); type=2;} + void select_id_IntendedULDLConfiguration() { set(ignore); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(ignore); type=4;} + void select_id_CoMPInformation() { set(ignore); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ABSInformation& select_id_ABSInformation() { return set(1); } + ABSInformation const* get_id_ABSInformation() const { return get(1); } + InvokeIndication& select_id_InvokeIndication() { return set(2); } + InvokeIndication const* get_id_InvokeIndication() const { return get(2); } + SubframeAssignment& select_id_IntendedULDLConfiguration() { return set(3); } + SubframeAssignment const* get_id_IntendedULDLConfiguration() const { return get(3); } + ExtendedULInterferenceOverloadInfo& select_id_ExtendedULInterferenceOverloadInfo() { return set(4); } + ExtendedULInterferenceOverloadInfo const* get_id_ExtendedULInterferenceOverloadInfo() const { return get(4); } + CoMPInformation& select_id_CoMPInformation() { return set(5); } + CoMPInformation const* get_id_CoMPInformation() const { return get(5); } + DynamicDLTransmissionInformation& select_id_DynamicDLTransmissionInformation() { return set(6); } + DynamicDLTransmissionInformation const* get_id_DynamicDLTransmissionInformation() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ABSInformation()); return true; + case 2: v(select_id_InvokeIndication()); return true; + case 3: v(select_id_IntendedULDLConfiguration()); return true; + case 4: v(select_id_ExtendedULInterferenceOverloadInfo()); return true; + case 5: v(select_id_CoMPInformation()); return true; + case 6: v(select_id_DynamicDLTransmissionInformation()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABSInformation)]; + char dummy2[sizeof(CoMPInformation)]; + char dummy3[sizeof(DynamicDLTransmissionInformation)]; + char dummy4[sizeof(ExtendedULInterferenceOverloadInfo)]; + char dummy5[sizeof(InvokeIndication)]; + char dummy6[sizeof(SubframeAssignment)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(optional); type=1;} + void select_id_InvokeIndication() { set(optional); type=2;} + void select_id_IntendedULDLConfiguration() { set(optional); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(optional); type=4;} + void select_id_CoMPInformation() { set(optional); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-Item ::= SEQUENCE { + cell-ID ECGI, + ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, + ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, + relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellInformation_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellInformation-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + static constexpr bool optional = true; + + }; + ul_InterferenceOverloadIndication_t& set_ul_InterferenceOverloadIndication() { ul_InterferenceOverloadIndication.setpresent(true); return ul_InterferenceOverloadIndication;} + ul_InterferenceOverloadIndication_t const* get_ul_InterferenceOverloadIndication() const {return ul_InterferenceOverloadIndication.is_valid() ? &ul_InterferenceOverloadIndication : nullptr;} + struct ul_HighInterferenceIndicationInfo_t : UL_HighInterferenceIndicationInfo + { + static constexpr const char* name() {return "ul_HighInterferenceIndicationInfo_t";} + using parent_t = UL_HighInterferenceIndicationInfo; + static constexpr bool optional = true; + + }; + ul_HighInterferenceIndicationInfo_t& set_ul_HighInterferenceIndicationInfo() { ul_HighInterferenceIndicationInfo.setpresent(true); return ul_HighInterferenceIndicationInfo;} + ul_HighInterferenceIndicationInfo_t const* get_ul_HighInterferenceIndicationInfo() const {return ul_HighInterferenceIndicationInfo.is_valid() ? &ul_HighInterferenceIndicationInfo : nullptr;} + struct relativeNarrowbandTxPower_t : RelativeNarrowbandTxPower + { + static constexpr const char* name() {return "relativeNarrowbandTxPower_t";} + using parent_t = RelativeNarrowbandTxPower; + static constexpr bool optional = true; + + }; + relativeNarrowbandTxPower_t& set_relativeNarrowbandTxPower() { relativeNarrowbandTxPower.setpresent(true); return relativeNarrowbandTxPower;} + relativeNarrowbandTxPower_t const* get_relativeNarrowbandTxPower() const {return relativeNarrowbandTxPower.is_valid() ? &relativeNarrowbandTxPower : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + ul_InterferenceOverloadIndication.clear(); + ul_HighInterferenceIndicationInfo.clear(); + relativeNarrowbandTxPower.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + ul_InterferenceOverloadIndication_t ul_InterferenceOverloadIndication; + ul_HighInterferenceIndicationInfo_t ul_HighInterferenceIndicationInfo; + relativeNarrowbandTxPower_t relativeNarrowbandTxPower; + iE_Extensions_t iE_Extensions; + +}; +/* +CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } +} +*/ + +struct CellInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(id_CellInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_Item& select_id_CellInformation_Item() { return set(1); } + CellInformation_Item const* get_id_CellInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } +*/ + +struct CellInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional}| + { ID id-ABS-Status CRITICALITY ignore EXTENSION ABS-Status PRESENCE optional}| + { ID id-RSRPMRList CRITICALITY ignore EXTENSION RSRPMRList PRESENCE optional}| + { ID id-CSIReportList CRITICALITY ignore EXTENSION CSIReportList PRESENCE optional}| + { ID id-CellReportingIndicator CRITICALITY ignore EXTENSION CellReportingIndicator PRESENCE optional}, + ... +} +*/ + +struct CellMeasurementResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(id_CompositeAvailableCapacityGroup); type=1;} + void select_id_ABS_Status() { set(id_ABS_Status); type=2;} + void select_id_RSRPMRList() { set(id_RSRPMRList); type=3;} + void select_id_CSIReportList() { set(id_CSIReportList); type=4;} + void select_id_CellReportingIndicator() { set(id_CellReportingIndicator); type=5;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompositeAvailableCapacityGroup)) { type = 1; return true; } + else if(equal(id_ABS_Status)) { type = 2; return true; } + else if(equal(id_RSRPMRList)) { type = 3; return true; } + else if(equal(id_CSIReportList)) { type = 4; return true; } + else if(equal(id_CellReportingIndicator)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompositeAvailableCapacityGroup);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ABS_Status);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RSRPMRList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSIReportList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellReportingIndicator);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(ignore); type=1;} + void select_id_ABS_Status() { set(ignore); type=2;} + void select_id_RSRPMRList() { set(ignore); type=3;} + void select_id_CSIReportList() { set(ignore); type=4;} + void select_id_CellReportingIndicator() { set(ignore); type=5;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + CompositeAvailableCapacityGroup& select_id_CompositeAvailableCapacityGroup() { return set(1); } + CompositeAvailableCapacityGroup const* get_id_CompositeAvailableCapacityGroup() const { return get(1); } + ABS_Status& select_id_ABS_Status() { return set(2); } + ABS_Status const* get_id_ABS_Status() const { return get(2); } + RSRPMRList& select_id_RSRPMRList() { return set(3); } + RSRPMRList const* get_id_RSRPMRList() const { return get(3); } + CSIReportList& select_id_CSIReportList() { return set(4); } + CSIReportList const* get_id_CSIReportList() const { return get(4); } + CellReportingIndicator& select_id_CellReportingIndicator() { return set(5); } + CellReportingIndicator const* get_id_CellReportingIndicator() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompositeAvailableCapacityGroup()); return true; + case 2: v(select_id_ABS_Status()); return true; + case 3: v(select_id_RSRPMRList()); return true; + case 4: v(select_id_CSIReportList()); return true; + case 5: v(select_id_CellReportingIndicator()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABS_Status)]; + char dummy2[sizeof(CSIReportList)]; + char dummy3[sizeof(CellReportingIndicator)]; + char dummy4[sizeof(CompositeAvailableCapacityGroup)]; + char dummy5[sizeof(RSRPMRList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(optional); type=1;} + void select_id_ABS_Status() { set(optional); type=2;} + void select_id_RSRPMRList() { set(optional); type=3;} + void select_id_CSIReportList() { set(optional); type=4;} + void select_id_CellReportingIndicator() { set(optional); type=5;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-Item ::= SEQUENCE { + cell-ID ECGI, + hWLoadIndicator HWLoadIndicator OPTIONAL, + s1TNLLoadIndicator S1TNLLoadIndicator OPTIONAL, + radioResourceStatus RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellMeasurementResult_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellMeasurementResult-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct hWLoadIndicator_t : HWLoadIndicator + { + static constexpr const char* name() {return "hWLoadIndicator_t";} + using parent_t = HWLoadIndicator; + static constexpr bool optional = true; + + }; + hWLoadIndicator_t& set_hWLoadIndicator() { hWLoadIndicator.setpresent(true); return hWLoadIndicator;} + hWLoadIndicator_t const* get_hWLoadIndicator() const {return hWLoadIndicator.is_valid() ? &hWLoadIndicator : nullptr;} + struct s1TNLLoadIndicator_t : S1TNLLoadIndicator + { + static constexpr const char* name() {return "s1TNLLoadIndicator_t";} + using parent_t = S1TNLLoadIndicator; + static constexpr bool optional = true; + + }; + s1TNLLoadIndicator_t& set_s1TNLLoadIndicator() { s1TNLLoadIndicator.setpresent(true); return s1TNLLoadIndicator;} + s1TNLLoadIndicator_t const* get_s1TNLLoadIndicator() const {return s1TNLLoadIndicator.is_valid() ? &s1TNLLoadIndicator : nullptr;} + struct radioResourceStatus_t : RadioResourceStatus + { + static constexpr const char* name() {return "radioResourceStatus_t";} + using parent_t = RadioResourceStatus; + static constexpr bool optional = true; + + }; + radioResourceStatus_t& set_radioResourceStatus() { radioResourceStatus.setpresent(true); return radioResourceStatus;} + radioResourceStatus_t const* get_radioResourceStatus() const {return radioResourceStatus.is_valid() ? &radioResourceStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + hWLoadIndicator.clear(); + s1TNLLoadIndicator.clear(); + radioResourceStatus.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + hWLoadIndicator_t hWLoadIndicator; + s1TNLLoadIndicator_t s1TNLLoadIndicator; + radioResourceStatus_t radioResourceStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory} +} +*/ + +struct CellMeasurementResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(id_CellMeasurementResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellMeasurementResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellMeasurementResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellMeasurementResult_Item& select_id_CellMeasurementResult_Item() { return set(1); } + CellMeasurementResult_Item const* get_id_CellMeasurementResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellMeasurementResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } +*/ + +struct CellMeasurementResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellMeasurementResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellMeasurementResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellMeasurementResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellToReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-Item ::= SEQUENCE { + cell-ID ECGI, + iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellToReport_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellToReport-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory} +} +*/ + +struct CellToReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(id_CellToReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellToReport_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellToReport_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellToReport_Item& select_id_CellToReport_Item() { return set(1); } + CellToReport_Item const* get_id_CellToReport_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellToReport_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } +*/ + +struct CellToReport_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellToReport_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellToReport_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellToReport-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementFailureCause_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-Item ::= SEQUENCE { + measurementFailedReportCharacteristics ReportCharacteristics, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementFailureCause_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "MeasurementFailureCause-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct measurementFailedReportCharacteristics_t : ReportCharacteristics + { + static constexpr const char* name() {return "measurementFailedReportCharacteristics_t";} + using parent_t = ReportCharacteristics; + + }; + measurementFailedReportCharacteristics_t& ref_measurementFailedReportCharacteristics() {return measurementFailedReportCharacteristics;} + measurementFailedReportCharacteristics_t const& ref_measurementFailedReportCharacteristics() const {return measurementFailedReportCharacteristics;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + measurementFailedReportCharacteristics.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + measurementFailedReportCharacteristics_t measurementFailedReportCharacteristics; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE MeasurementFailureCause-Item PRESENCE mandatory} +} +*/ + +struct MeasurementFailureCause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(id_MeasurementFailureCause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementFailureCause_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementFailureCause_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementFailureCause_Item& select_id_MeasurementFailureCause_Item() { return set(1); } + MeasurementFailureCause_Item const* get_id_MeasurementFailureCause_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementFailureCause_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementFailureCause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..maxFailedMeasObjects)) OF ProtocolIE-Single-Container { {MeasurementFailureCause-ItemIEs} } +*/ + +struct MeasurementFailureCause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementFailureCause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementFailureCause_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementFailureCause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompleteFailureCauseInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List, + iE-Extensions ProtocolExtensionContainer { {CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompleteFailureCauseInformation_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + + }; + measurementFailureCause_List_t& ref_measurementFailureCause_List() {return measurementFailureCause_List;} + measurementFailureCause_List_t const& ref_measurementFailureCause_List() const {return measurementFailureCause_List;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE CompleteFailureCauseInformation-Item PRESENCE mandatory} +} +*/ + +struct CompleteFailureCauseInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(id_CompleteFailureCauseInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompleteFailureCauseInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CompleteFailureCauseInformation_Item& select_id_CompleteFailureCauseInformation_Item() { return set(1); } + CompleteFailureCauseInformation_Item const* get_id_CompleteFailureCauseInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompleteFailureCauseInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CompleteFailureCauseInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CompleteFailureCauseInformation-ItemIEs} } +*/ + +struct CompleteFailureCauseInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CompleteFailureCauseInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-DataForwardingAddress-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dl-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-DataForwardingAddress-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dl_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dl_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + dl_GTPtunnelEndpoint_t& ref_dl_GTPtunnelEndpoint() {return dl_GTPtunnelEndpoint;} + dl_GTPtunnelEndpoint_t const& ref_dl_GTPtunnelEndpoint() const {return dl_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dl_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dl_GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-DataForwardingAddress-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-DataForwardingAddress-Item CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(id_E_RABs_DataForwardingAddress_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_DataForwardingAddress_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_DataForwardingAddress_Item& select_id_E_RABs_DataForwardingAddress_Item() { return set(1); } + E_RABs_DataForwardingAddress_Item const* get_id_E_RABs_DataForwardingAddress_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_DataForwardingAddress_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-DataForwardingAddress-ItemIEs} } +*/ + +struct E_RABs_DataForwardingAddress_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_DataForwardingAddress_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_DataForwardingAddress_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +DataForwardingAddressIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-DataForwardingAddress-List CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-List PRESENCE mandatory}, + ... +} +*/ + +struct DataForwardingAddressIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(id_E_RABs_DataForwardingAddress_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 1; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_E_RABs_DataForwardingAddress_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(1); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(1); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + E_RABs_DataForwardingAddress_List& select_id_E_RABs_DataForwardingAddress_List() { return set(4); } + E_RABs_DataForwardingAddress_List const* get_id_E_RABs_DataForwardingAddress_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 2: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_E_RABs_DataForwardingAddress_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataForwardingAddressIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{DataForwardingAddressIndication-IEs}}, + ... +} +*/ + +struct DataForwardingAddressIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "DataForwardingAddressIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTP_TunnelEndpoint_t& set_uL_GTP_TunnelEndpoint() { uL_GTP_TunnelEndpoint.setpresent(true); return uL_GTP_TunnelEndpoint;} + uL_GTP_TunnelEndpoint_t const* get_uL_GTP_TunnelEndpoint() const {return uL_GTP_TunnelEndpoint.is_valid() ? &uL_GTP_TunnelEndpoint : nullptr;} + struct dL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTP_TunnelEndpoint_t& set_dL_GTP_TunnelEndpoint() { dL_GTP_TunnelEndpoint.setpresent(true); return dL_GTP_TunnelEndpoint;} + dL_GTP_TunnelEndpoint_t const* get_dL_GTP_TunnelEndpoint() const {return dL_GTP_TunnelEndpoint.is_valid() ? &dL_GTP_TunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_GTP_TunnelEndpoint.clear(); + dL_GTP_TunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_GTP_TunnelEndpoint_t uL_GTP_TunnelEndpoint; + dL_GTP_TunnelEndpoint_t dL_GTP_TunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(id_E_RABs_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_Item& select_id_E_RABs_Admitted_Item() { return set(1); } + E_RABs_Admitted_Item const* get_id_E_RABs_Admitted_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } +*/ + +struct E_RABs_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(id_E_RABs_Admitted_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_Item& select_id_E_RABs_Admitted_ToBeAdded_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_Item const* get_id_E_RABs_Admitted_ToBeAdded_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(id_E_RABs_Admitted_ToBeAdded_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_ModAckItem& select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeAdded_ModAckItem const* get_id_E_RABs_Admitted_ToBeAdded_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + seNB_GTPtunnelEndpoint_t& set_seNB_GTPtunnelEndpoint() { seNB_GTPtunnelEndpoint.setpresent(true); return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const* get_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint.is_valid() ? &seNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeModified_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(id_E_RABs_Admitted_ToBeModified_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_ModAckItem& select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeModified_ModAckItem const* get_id_E_RABs_Admitted_ToBeModified_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-secondarysgNBDLGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}| + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(id_secondarysgNBDLGTPTEIDatPDCP); type=1;} + void select_id_RLC_Status() { set(id_RLC_Status); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_secondarysgNBDLGTPTEIDatPDCP)) { type = 1; return true; } + else if(equal(id_RLC_Status)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_secondarysgNBDLGTPTEIDatPDCP);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(ignore); type=1;} + void select_id_RLC_Status() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_secondarysgNBDLGTPTEIDatPDCP() { return set(1); } + GTPtunnelEndpoint const* get_id_secondarysgNBDLGTPTEIDatPDCP() const { return get(1); } + RLC_Status& select_id_RLC_Status() { return set(2); } + RLC_Status const* get_id_RLC_Status() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_secondarysgNBDLGTPTEIDatPDCP()); return true; + case 2: v(select_id_RLC_Status()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(optional); type=1;} + void select_id_RLC_Status() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeModified_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToReleased-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToReleased_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(id_E_RABs_Admitted_ToBeReleased_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_ModAckItem& select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { return set(1); } + E_RABs_Admitted_ToReleased_ModAckItem const* get_id_E_RABs_Admitted_ToBeReleased_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToReleased-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToReleased_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF + ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + void clear() + { + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + iE_Extensions.clear(); + + }; + private: + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs X2AP-PROTOCOL-IES ::= { +{ ID id-E-RABs-AdmittedToBeModified-SgNBModConf-Item CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConf-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_AdmittedToBeModified_SgNBModConf_Item& select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { return set(1); } + E_RABs_AdmittedToBeModified_SgNBModConf_Item const* get_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_AdmittedToBeModified_SgNBModConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConfList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container + { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs} } +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_AdmittedToBeModified_SgNBModConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_AdmittedToBeModified_SgNBModConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToCounterCheckItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheckItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToCounterCheckItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItem : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheckItem";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToCounterCheckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToCounterCheckItem CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheckItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(id_E_RABs_SubjectToCounterCheckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToCounterCheckItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheckItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToCounterCheckItem& select_id_E_RABs_SubjectToCounterCheckItem() { return set(1); } + E_RABs_SubjectToCounterCheckItem const* get_id_E_RABs_SubjectToCounterCheckItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToCounterCheckItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToCounterCheckItemIEs} } +*/ + +struct E_RABs_SubjectToCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToSgNBCounterCheck-Item CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(id_E_RABs_SubjectToSgNBCounterCheck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToSgNBCounterCheck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToSgNBCounterCheck_Item& select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { return set(1); } + E_RABs_SubjectToSgNBCounterCheck_Item const* get_id_E_RABs_SubjectToSgNBCounterCheck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToSgNBCounterCheck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToSgNBCounterCheck-ItemIEs} } +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToSgNBCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToSgNBCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| + { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}| + { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| + { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(id_ReceiveStatusOfULPDCPSDUsExtended); type=1;} + void select_id_ULCOUNTValueExtended() { set(id_ULCOUNTValueExtended); type=2;} + void select_id_DLCOUNTValueExtended() { set(id_DLCOUNTValueExtended); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(id_ULCOUNTValuePDCP_SNlength18); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(id_DLCOUNTValuePDCP_SNlength18); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ReceiveStatusOfULPDCPSDUsExtended)) { type = 1; return true; } + else if(equal(id_ULCOUNTValueExtended)) { type = 2; return true; } + else if(equal(id_DLCOUNTValueExtended)) { type = 3; return true; } + else if(equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)) { type = 4; return true; } + else if(equal(id_ULCOUNTValuePDCP_SNlength18)) { type = 5; return true; } + else if(equal(id_DLCOUNTValuePDCP_SNlength18)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsExtended);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ULCOUNTValueExtended);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_DLCOUNTValueExtended);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ULCOUNTValuePDCP_SNlength18);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DLCOUNTValuePDCP_SNlength18);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(ignore); type=1;} + void select_id_ULCOUNTValueExtended() { set(ignore); type=2;} + void select_id_DLCOUNTValueExtended() { set(ignore); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(ignore); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(ignore); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ReceiveStatusOfULPDCPSDUsExtended& select_id_ReceiveStatusOfULPDCPSDUsExtended() { return set(1); } + ReceiveStatusOfULPDCPSDUsExtended const* get_id_ReceiveStatusOfULPDCPSDUsExtended() const { return get(1); } + COUNTValueExtended& select_id_ULCOUNTValueExtended() { return set(2); } + COUNTValueExtended const* get_id_ULCOUNTValueExtended() const { return get(2); } + COUNTValueExtended& select_id_DLCOUNTValueExtended() { return set(3); } + COUNTValueExtended const* get_id_DLCOUNTValueExtended() const { return get(3); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18& select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { return set(4); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 const* get_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() const { return get(4); } + COUNTvaluePDCP_SNlength18& select_id_ULCOUNTValuePDCP_SNlength18() { return set(5); } + COUNTvaluePDCP_SNlength18 const* get_id_ULCOUNTValuePDCP_SNlength18() const { return get(5); } + COUNTvaluePDCP_SNlength18& select_id_DLCOUNTValuePDCP_SNlength18() { return set(6); } + COUNTvaluePDCP_SNlength18 const* get_id_DLCOUNTValuePDCP_SNlength18() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ReceiveStatusOfULPDCPSDUsExtended()); return true; + case 2: v(select_id_ULCOUNTValueExtended()); return true; + case 3: v(select_id_DLCOUNTValueExtended()); return true; + case 4: v(select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18()); return true; + case 5: v(select_id_ULCOUNTValuePDCP_SNlength18()); return true; + case 6: v(select_id_DLCOUNTValuePDCP_SNlength18()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(COUNTValueExtended)]; + char dummy2[sizeof(COUNTvaluePDCP_SNlength18)]; + char dummy3[sizeof(ReceiveStatusOfULPDCPSDUsExtended)]; + char dummy4[sizeof(ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(optional); type=1;} + void select_id_ULCOUNTValueExtended() { set(optional); type=2;} + void select_id_DLCOUNTValueExtended() { set(optional); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(optional); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(optional); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + + receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, + uL-COUNTvalue COUNTvalue, + dL-COUNTvalue COUNTvalue, + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct receiveStatusofULPDCPSDUs_t : ReceiveStatusofULPDCPSDUs + { + static constexpr const char* name() {return "receiveStatusofULPDCPSDUs_t";} + using parent_t = ReceiveStatusofULPDCPSDUs; + static constexpr bool optional = true; + + }; + receiveStatusofULPDCPSDUs_t& set_receiveStatusofULPDCPSDUs() { receiveStatusofULPDCPSDUs.setpresent(true); return receiveStatusofULPDCPSDUs;} + receiveStatusofULPDCPSDUs_t const* get_receiveStatusofULPDCPSDUs() const {return receiveStatusofULPDCPSDUs.is_valid() ? &receiveStatusofULPDCPSDUs : nullptr;} + struct uL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "uL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + uL_COUNTvalue_t& ref_uL_COUNTvalue() {return uL_COUNTvalue;} + uL_COUNTvalue_t const& ref_uL_COUNTvalue() const {return uL_COUNTvalue;} + struct dL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "dL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + dL_COUNTvalue_t& ref_dL_COUNTvalue() {return dL_COUNTvalue;} + dL_COUNTvalue_t const& ref_dL_COUNTvalue() const {return dL_COUNTvalue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + receiveStatusofULPDCPSDUs.clear(); + uL_COUNTvalue.clear(); + dL_COUNTvalue.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + receiveStatusofULPDCPSDUs_t receiveStatusofULPDCPSDUs; + uL_COUNTvalue_t uL_COUNTvalue; + dL_COUNTvalue_t dL_COUNTvalue; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(id_E_RABs_SubjectToStatusTransfer_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToStatusTransfer_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToStatusTransfer_Item& select_id_E_RABs_SubjectToStatusTransfer_Item() { return set(1); } + E_RABs_SubjectToStatusTransfer_Item const* get_id_E_RABs_SubjectToStatusTransfer_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToStatusTransfer_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToStatusTransfer-ItemIEs} } +*/ + +struct E_RABs_SubjectToStatusTransfer_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToStatusTransfer_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToStatusTransfer_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(id_E_RABs_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_Item& select_id_E_RABs_ToBeAdded_Item() { return set(1); } + E_RABs_ToBeAdded_Item const* get_id_E_RABs_ToBeAdded_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeAdded-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(id_E_RABs_ToBeAdded_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_ModReqItem& select_id_E_RABs_ToBeAdded_ModReqItem() { return set(1); } + E_RABs_ToBeAdded_ModReqItem const* get_id_E_RABs_ToBeAdded_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MCG-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MCG_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MCG_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t& set_max_MCG_admit_E_RAB_Level_QoS_Parameters() { max_MCG_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MCG_admit_E_RAB_Level_QoS_Parameters;} + max_MCG_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MCG_admit_E_RAB_Level_QoS_Parameters() const {return max_MCG_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MCG_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MCG_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t max_MCG_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBAddReq-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(id_E_RABs_ToBeAdded_SgNBAddReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBAddReq_Item& select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBAddReq_Item const* get_id_E_RABs_ToBeAdded_SgNBAddReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBAddReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBAddReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBAddReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBAddReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBAddReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeAdded-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(id_E_RABs_ToBeAdded_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBModReq_Item& select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBModReq_Item const* get_id_E_RABs_ToBeAdded_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_GTPtunnelEndpoint_t& set_meNB_GTPtunnelEndpoint() { meNB_GTPtunnelEndpoint.setpresent(true); return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const* get_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint.is_valid() ? &meNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeModified-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeModified-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeModified_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeModified_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeModified_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeModified-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeModified-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(id_E_RABs_ToBeModified_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_ModReqItem& select_id_E_RABs_ToBeModified_ModReqItem() { return set(1); } + E_RABs_ToBeModified_ModReqItem const* get_id_E_RABs_ToBeModified_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeModified_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + full_E_RAB_Level_QoS_Parameters_t& set_full_E_RAB_Level_QoS_Parameters() { full_E_RAB_Level_QoS_Parameters.setpresent(true); return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const* get_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters.is_valid() ? &full_E_RAB_Level_QoS_Parameters : nullptr;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-secondarymeNBULGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(id_secondarymeNBULGTPTEIDatPDCP); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_secondarymeNBULGTPTEIDatPDCP)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_secondarymeNBULGTPTEIDatPDCP);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + GTPtunnelEndpoint& select_id_secondarymeNBULGTPTEIDatPDCP() { return set(3); } + GTPtunnelEndpoint const* get_id_secondarymeNBULGTPTEIDatPDCP() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_secondarymeNBULGTPTEIDatPDCP()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& set_requested_SCG_E_RAB_Level_QoS_Parameters() { requested_SCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const* get_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_SCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_UL_GTP_TEIDatPDCP_t& set_meNB_UL_GTP_TEIDatPDCP() { meNB_UL_GTP_TEIDatPDCP.setpresent(true); return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const* get_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP.is_valid() ? &meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(id_E_RABs_ToBeModified_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReq_Item& select_id_E_RABs_ToBeModified_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReq_Item const* get_id_E_RABs_ToBeModified_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-new-drb-ID-req CRITICALITY ignore EXTENSION NewDRBIDrequest PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_new_drb_ID_req() { set(id_new_drb_ID_req); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_new_drb_ID_req)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_new_drb_ID_req);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_new_drb_ID_req() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + NewDRBIDrequest& select_id_new_drb_ID_req() { return set(3); } + NewDRBIDrequest const* get_id_new_drb_ID_req() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_new_drb_ID_req()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(NewDRBIDrequest)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_new_drb_ID_req() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent ::= SEQUENCE { + requested-MCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + s1-DL-GTP-TEIDatSgNB GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct requested_MCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_MCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_MCG_E_RAB_Level_QoS_Parameters_t& set_requested_MCG_E_RAB_Level_QoS_Parameters() { requested_MCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_MCG_E_RAB_Level_QoS_Parameters;} + requested_MCG_E_RAB_Level_QoS_Parameters_t const* get_requested_MCG_E_RAB_Level_QoS_Parameters() const {return requested_MCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_MCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct s1_DL_GTP_TEIDatSgNB_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTP_TEIDatSgNB_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTP_TEIDatSgNB_t& set_s1_DL_GTP_TEIDatSgNB() { s1_DL_GTP_TEIDatSgNB.setpresent(true); return s1_DL_GTP_TEIDatSgNB;} + s1_DL_GTP_TEIDatSgNB_t const* get_s1_DL_GTP_TEIDatSgNB() const {return s1_DL_GTP_TEIDatSgNB.is_valid() ? &s1_DL_GTP_TEIDatSgNB : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + void clear() + { + requested_MCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + s1_DL_GTP_TEIDatSgNB.clear(); + iE_Extensions.clear(); + + }; + private: + requested_MCG_E_RAB_Level_QoS_Parameters_t requested_MCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + s1_DL_GTP_TEIDatSgNB_t s1_DL_GTP_TEIDatSgNB; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional}| + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + void select_id_lCID() { set(id_lCID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else if(equal(id_lCID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + void select_id_lCID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + LCID& select_id_lCID() { return set(2); } + LCID const* get_id_lCID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: v(select_id_lCID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + void select_id_lCID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(id_E_RABs_ToBeModified_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReqd_Item& select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReqd_Item const* get_id_E_RABs_ToBeModified_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(id_E_RABs_ToBeReleased_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqItem& select_id_E_RABs_ToBeReleased_ModReqItem() { return set(1); } + E_RABs_ToBeReleased_ModReqItem const* get_id_E_RABs_ToBeReleased_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelConfItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelConfItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelConfItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelConfItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelConfItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelConfItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelConfItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelConfItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(id_E_RABs_ToBeReleased_RelConfItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelConfItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelConfItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelConfItem& select_id_E_RABs_ToBeReleased_RelConfItem() { return set(1); } + E_RABs_ToBeReleased_RelConfItem const* get_id_E_RABs_ToBeReleased_RelConfItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelConfItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelConfItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelConf ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelConfItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelConf_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelConf_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelConf : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelConf";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(id_E_RABs_ToBeReleased_RelReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelReqItem& select_id_E_RABs_ToBeReleased_RelReqItem() { return set(1); } + E_RABs_ToBeReleased_RelReqItem const* get_id_E_RABs_ToBeReleased_RelReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqdItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqdItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqdItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqdItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqdItem PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(id_E_RABs_ToBeReleased_ModReqdItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqdItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqdItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqdItem& select_id_E_RABs_ToBeReleased_ModReqdItem() { return set(1); } + E_RABs_ToBeReleased_ModReqdItem const* get_id_E_RABs_ToBeReleased_ModReqdItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqdItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqdItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqd ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqdItemIEs} } +*/ + +struct E_RABs_ToBeReleased_ModReqd_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_ModReqd_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_ModReqd : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBChaConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(id_E_RABs_ToBeReleased_SgNBChaConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBChaConf_Item& select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBChaConf_Item const* get_id_E_RABs_ToBeReleased_SgNBChaConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBChaConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBChaConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBChaConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBChaConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBChaConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBChaConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + dL_GTPtunnelEndpoint.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(id_E_RABs_ToBeReleased_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReq_Item& select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReq_Item const* get_id_E_RABs_ToBeReleased_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReqd_Item& select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(id_E_RABs_ToBeReleased_SgNBRelConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelConf_Item& select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelConf_Item const* get_id_E_RABs_ToBeReleased_SgNBRelConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReq_Item& select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReq_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqd-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReqd_Item& select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqdList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(id_BearerType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_BearerType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_BearerType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(reject); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + BearerType& select_id_BearerType() { return set(1); } + BearerType const* get_id_BearerType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_BearerType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BearerType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetup_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + uL_GTPtunnelEndpoint_t& ref_uL_GTPtunnelEndpoint() {return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const& ref_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(id_E_RABs_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetup_Item& select_id_E_RABs_ToBeSetup_Item() { return set(1); } + E_RABs_ToBeSetup_Item const* get_id_E_RABs_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uL-GTPtunnelEndpoint CRITICALITY reject EXTENSION GTPtunnelEndpoint PRESENCE mandatory}| + { ID id-dL-Forwarding CRITICALITY ignore EXTENSION DL-Forwarding PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(id_uL_GTPtunnelEndpoint); type=1;} + void select_id_dL_Forwarding() { set(id_dL_Forwarding); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uL_GTPtunnelEndpoint)) { type = 1; return true; } + else if(equal(id_dL_Forwarding)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uL_GTPtunnelEndpoint);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dL_Forwarding);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(reject); type=1;} + void select_id_dL_Forwarding() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_uL_GTPtunnelEndpoint() { return set(1); } + GTPtunnelEndpoint const* get_id_uL_GTPtunnelEndpoint() const { return get(1); } + DL_Forwarding& select_id_dL_Forwarding() { return set(2); } + DL_Forwarding const* get_id_dL_Forwarding() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uL_GTPtunnelEndpoint()); return true; + case 2: v(select_id_dL_Forwarding()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_Forwarding)]; + char dummy2[sizeof(GTPtunnelEndpoint)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(mandatory); type=1;} + void select_id_dL_Forwarding() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetupRetrieve-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + bearerType BearerType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetupRetrieve-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetupRetrieve-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct bearerType_t : BearerType + { + static constexpr const char* name() {return "bearerType_t";} + using parent_t = BearerType; + static constexpr bool optional = true; + + }; + bearerType_t& set_bearerType() { bearerType.setpresent(true); return bearerType;} + bearerType_t const* get_bearerType() const {return bearerType.is_valid() ? &bearerType : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + bearerType.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + bearerType_t bearerType; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetupRetrieve-Item CRITICALITY ignore TYPE E-RABs-ToBeSetupRetrieve-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(id_E_RABs_ToBeSetupRetrieve_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetupRetrieve_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetupRetrieve_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetupRetrieve_Item& select_id_E_RABs_ToBeSetupRetrieve_Item() { return set(1); } + E_RABs_ToBeSetupRetrieve_Item const* get_id_E_RABs_ToBeSetupRetrieve_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetupRetrieve_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetupRetrieve_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-ListRetrieve ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetupRetrieve-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_ListRetrieve_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_ListRetrieve_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_ListRetrieve : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-ListRetrieve";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + ... +} +*/ + +struct ENB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +NRNeighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRNeighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRNeighbour-Information ::= SEQUENCE (SIZE (1.. maxofNRNeighbours))OF SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + measurementTimingConfiguration OCTET STRING, + nRNeighbourModeInfo CHOICE { + fdd FDD-InfoNeighbourServedNRCell-Information, + tdd TDD-InfoNeighbourServedNRCell-Information, + ... + }, + iE-Extensions ProtocolExtensionContainer { {NRNeighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRNeighbour_Information_elm : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "NRNeighbour_Information_elm";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct nRNeighbourModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nRNeighbourModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nRNeighbourModeInfo_t() {clear();} + struct fdd_t : FDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoNeighbourServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoNeighbourServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nRNeighbourModeInfo_t& ref_nRNeighbourModeInfo() {return nRNeighbourModeInfo;} + nRNeighbourModeInfo_t const& ref_nRNeighbourModeInfo() const {return nRNeighbourModeInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + measurementTimingConfiguration.clear(); + nRNeighbourModeInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + measurementTimingConfiguration_t measurementTimingConfiguration; + nRNeighbourModeInfo_t nRNeighbourModeInfo; + iE_Extensions_t iE_Extensions; + +}; +struct NRNeighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "NRNeighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsENDCX2Management-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsENDCX2Management_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsENDCX2Management-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + old-ECGI ECGI, + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_elm : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd_elm";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ECGI_t : ECGI + { + static constexpr const char* name() {return "old_ECGI_t";} + using parent_t = ECGI; + + }; + old_ECGI_t& ref_old_ECGI() {return old_ECGI;} + old_ECGI_t const& ref_old_ECGI() const {return old_ECGI;} + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + old_ECGI.clear(); + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + old_ECGI_t old_ECGI; + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsToModifyListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToDeleteListENDCConfUpd ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ServedEUTRAcellsToDeleteListENDCConfUpd_elm : ECGI +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd_elm";} + using parent_t = ECGI; + +}; +struct ServedEUTRAcellsToDeleteListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellAssistanceInformation CRITICALITY reject TYPE CellAssistanceInformation PRESENCE optional }| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedEUTRAcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToModifyListENDCConfUpd PRESENCE optional }| + { ID id-ServedEUTRAcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToDeleteListENDCConfUpd PRESENCE optional }, + ... +} +*/ + +struct ENB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(id_CellAssistanceInformation); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(id_ServedEUTRAcellsToModifyListENDCConfUpd); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(id_ServedEUTRAcellsToDeleteListENDCConfUpd); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellAssistanceInformation)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else if(equal(id_ServedEUTRAcellsToModifyListENDCConfUpd)) { type = 3; return true; } + else if(equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellAssistanceInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToModifyListENDCConfUpd);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(reject); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellAssistanceInformation& select_id_CellAssistanceInformation() { return set(1); } + CellAssistanceInformation const* get_id_CellAssistanceInformation() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + ServedEUTRAcellsToModifyListENDCConfUpd& select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { return set(3); } + ServedEUTRAcellsToModifyListENDCConfUpd const* get_id_ServedEUTRAcellsToModifyListENDCConfUpd() const { return get(3); } + ServedEUTRAcellsToDeleteListENDCConfUpd& select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { return set(4); } + ServedEUTRAcellsToDeleteListENDCConfUpd const* get_id_ServedEUTRAcellsToDeleteListENDCConfUpd() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellAssistanceInformation()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: v(select_id_ServedEUTRAcellsToModifyListENDCConfUpd()); return true; + case 4: v(select_id_ServedEUTRAcellsToDeleteListENDCConfUpd()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellAssistanceInformation)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + char dummy3[sizeof(ServedEUTRAcellsToDeleteListENDCConfUpd)]; + char dummy4[sizeof(ServedEUTRAcellsToModifyListENDCConfUpd)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(optional); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(optional); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(optional); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationResp ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationResp_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationResp CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationResp PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(id_ListofEUTRACellsinEUTRACoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationResp& select_id_ListofEUTRACellsinEUTRACoordinationResp() { return set(3); } + ListofEUTRACellsinEUTRACoordinationResp const* get_id_ListofEUTRACellsinEUTRACoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationReq ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(id_ListofEUTRACellsinEUTRACoordinationReq); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationReq)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationReq);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationReq& select_id_ListofEUTRACellsinEUTRACoordinationReq() { return set(3); } + ListofEUTRACellsinEUTRACoordinationReq const* get_id_ListofEUTRACellsinEUTRACoordinationReq() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationReq()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationReq)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, + ... +} +*/ + +struct ServedCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(id_DeactivationIndication); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DeactivationIndication)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DeactivationIndication);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DeactivationIndication& select_id_DeactivationIndication() { return set(1); } + DeactivationIndication const* get_id_DeactivationIndication() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DeactivationIndication()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DeactivationIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item::= SEQUENCE { + old-ecgi ECGI, + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToModify_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCellsToModify-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ecgi_t : ECGI + { + static constexpr const char* name() {return "old_ecgi_t";} + using parent_t = ECGI; + + }; + old_ecgi_t& ref_old_ecgi() {return old_ecgi;} + old_ecgi_t const& ref_old_ecgi() const {return old_ecgi;} + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + old_ecgi.clear(); + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + old_ecgi_t old_ecgi; + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item +*/ + +struct ServedCellsToModify_elm : ServedCellsToModify_Item +{ + static constexpr const char* name() {return "ServedCellsToModify_elm";} + using parent_t = ServedCellsToModify_Item; + +}; +struct ServedCellsToModify : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToModify";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct Old_ECGIs_elm : ECGI +{ + static constexpr const char* name() {return "Old_ECGIs_elm";} + using parent_t = ECGI; + +}; +struct Old_ECGIs : asn::sequenceof +{ + static constexpr const char* name() {return "Old-ECGIs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional}| + { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional}| + { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional}| + { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CoverageModificationList CRITICALITY reject TYPE CoverageModificationList PRESENCE optional}, + ... +} +*/ + +struct ENBConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(id_ServedCellsToAdd); type=1;} + void select_id_ServedCellsToModify() { set(id_ServedCellsToModify); type=2;} + void select_id_ServedCellsToDelete() { set(id_ServedCellsToDelete); type=3;} + void select_id_GUGroupIDToAddList() { set(id_GUGroupIDToAddList); type=4;} + void select_id_GUGroupIDToDeleteList() { set(id_GUGroupIDToDeleteList); type=5;} + void select_id_CoverageModificationList() { set(id_CoverageModificationList); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToAdd)) { type = 1; return true; } + else if(equal(id_ServedCellsToModify)) { type = 2; return true; } + else if(equal(id_ServedCellsToDelete)) { type = 3; return true; } + else if(equal(id_GUGroupIDToAddList)) { type = 4; return true; } + else if(equal(id_GUGroupIDToDeleteList)) { type = 5; return true; } + else if(equal(id_CoverageModificationList)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToAdd);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCellsToModify);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedCellsToDelete);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUGroupIDToAddList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUGroupIDToDeleteList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CoverageModificationList);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(reject); type=1;} + void select_id_ServedCellsToModify() { set(reject); type=2;} + void select_id_ServedCellsToDelete() { set(reject); type=3;} + void select_id_GUGroupIDToAddList() { set(reject); type=4;} + void select_id_GUGroupIDToDeleteList() { set(reject); type=5;} + void select_id_CoverageModificationList() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCells& select_id_ServedCellsToAdd() { return set(1); } + ServedCells const* get_id_ServedCellsToAdd() const { return get(1); } + ServedCellsToModify& select_id_ServedCellsToModify() { return set(2); } + ServedCellsToModify const* get_id_ServedCellsToModify() const { return get(2); } + Old_ECGIs& select_id_ServedCellsToDelete() { return set(3); } + Old_ECGIs const* get_id_ServedCellsToDelete() const { return get(3); } + GUGroupIDList& select_id_GUGroupIDToAddList() { return set(4); } + GUGroupIDList const* get_id_GUGroupIDToAddList() const { return get(4); } + GUGroupIDList& select_id_GUGroupIDToDeleteList() { return set(5); } + GUGroupIDList const* get_id_GUGroupIDToDeleteList() const { return get(5); } + CoverageModificationList& select_id_CoverageModificationList() { return set(6); } + CoverageModificationList const* get_id_CoverageModificationList() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToAdd()); return true; + case 2: v(select_id_ServedCellsToModify()); return true; + case 3: v(select_id_ServedCellsToDelete()); return true; + case 4: v(select_id_GUGroupIDToAddList()); return true; + case 5: v(select_id_GUGroupIDToDeleteList()); return true; + case 6: v(select_id_CoverageModificationList()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CoverageModificationList)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(Old_ECGIs)]; + char dummy4[sizeof(ServedCells)]; + char dummy5[sizeof(ServedCellsToModify)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(optional); type=1;} + void select_id_ServedCellsToModify() { set(optional); type=2;} + void select_id_ServedCellsToDelete() { set(optional); type=3;} + void select_id_GUGroupIDToAddList() { set(optional); type=4;} + void select_id_GUGroupIDToDeleteList() { set(optional); type=5;} + void select_id_CoverageModificationList() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, +... +} +*/ + +struct ENBConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateFailure-IEs X2AP-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}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCCellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(id_ActivationID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivationID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivationID& select_id_ActivationID() { return set(1); } + ActivationID const* get_id_ActivationID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivationID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationFailure-IEs}}, + ... +} +*/ + +struct ENDCCellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedNRCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToActivate-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedNRCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCellsToActivate::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ServedNRCellsToActivate-Item +*/ + +struct ServedNRCellsToActivate_elm : ServedNRCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedNRCellsToActivate_elm";} + using parent_t = ServedNRCellsToActivate_Item; + +}; +struct ServedNRCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENDCCellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRCellsToActivate CRITICALITY reject TYPE ServedNRCellsToActivate PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}, + ... +} +*/ + +struct ENDCCellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(id_ServedNRCellsToActivate); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRCellsToActivate)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRCellsToActivate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(reject); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRCellsToActivate& select_id_ServedNRCellsToActivate() { return set(1); } + ServedNRCellsToActivate const* get_id_ServedNRCellsToActivate() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRCellsToActivate()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(ServedNRCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationRequest-IEs}}, + ... +} +*/ + +struct ENDCCellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedNRCellList CRITICALITY ignore TYPE ActivatedNRCellList PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct ENDCCellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(id_ActivatedNRCellList); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedNRCellList)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedNRCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(ignore); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedNRCellList& select_id_ActivatedNRCellList() { return set(1); } + ActivatedNRCellList const* get_id_ActivatedNRCellList() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedNRCellList()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedNRCellList)]; + char dummy2[sizeof(ActivationID)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationResponse-IEs}}, + ... +} +*/ + +struct ENDCCellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +FDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoServedNRCell_Information : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct ul_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "ul_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + ul_NR_TxBW_t& ref_ul_NR_TxBW() {return ul_NR_TxBW;} + ul_NR_TxBW_t const& ref_ul_NR_TxBW() const {return ul_NR_TxBW;} + struct dl_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "dl_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + dl_NR_TxBW_t& ref_dl_NR_TxBW() {return dl_NR_TxBW;} + dl_NR_TxBW_t const& ref_dl_NR_TxBW() const {return dl_NR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + ul_NR_TxBW.clear(); + dl_NR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + ul_NR_TxBW_t ul_NR_TxBW; + dl_NR_TxBW_t dl_NR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + nR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct nR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "nR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + nR_TxBW_t& ref_nR_TxBW() {return nR_TxBW;} + nR_TxBW_t const& ref_nR_TxBW() const {return nR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + nR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + nR_TxBW_t nR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCell_Information : asn::sequence<8, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCell-Information";} + using parent_t = asn::sequence<8, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct nrModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nrModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nrModeInfo_t() {clear();} + struct fdd_t : FDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nrModeInfo_t& ref_nrModeInfo() {return nrModeInfo;} + nrModeInfo_t const& ref_nrModeInfo() const {return nrModeInfo;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + broadcastPLMNs.clear(); + nrModeInfo.clear(); + measurementTimingConfiguration.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + broadcastPLMNs_t broadcastPLMNs; + nrModeInfo_t nrModeInfo; + measurementTimingConfiguration_t measurementTimingConfiguration; + iE_Extensions_t iE_Extensions; + +}; +/* +En-gNBServedCells-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct En_gNBServedCells_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF SEQUENCE { + servedNRCellInfo ServedNRCell-Information, + nRNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {En-gNBServedCells-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedNRCellInfo_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInfo_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInfo_t& ref_servedNRCellInfo() {return servedNRCellInfo;} + servedNRCellInfo_t const& ref_servedNRCellInfo() const {return servedNRCellInfo;} + struct nRNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nRNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nRNeighbourInfo_t& set_nRNeighbourInfo() { nRNeighbourInfo.setpresent(true); return nRNeighbourInfo;} + nRNeighbourInfo_t const* get_nRNeighbourInfo() const {return nRNeighbourInfo.is_valid() ? &nRNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedNRCellInfo.clear(); + nRNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedNRCellInfo_t servedNRCellInfo; + nRNeighbourInfo_t nRNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedNRcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToModify-Item::= SEQUENCE { + old-nrcgi NRCGI, + servedNRCellInformation ServedNRCell-Information, + nrNeighbourInformation NRNeighbour-Information OPTIONAL, + nrDeactivationIndication DeactivationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToModify_Item : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCellsToModify-Item";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct old_nrcgi_t : NRCGI + { + static constexpr const char* name() {return "old_nrcgi_t";} + using parent_t = NRCGI; + + }; + old_nrcgi_t& ref_old_nrcgi() {return old_nrcgi;} + old_nrcgi_t const& ref_old_nrcgi() const {return old_nrcgi;} + struct servedNRCellInformation_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInformation_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInformation_t& ref_servedNRCellInformation() {return servedNRCellInformation;} + servedNRCellInformation_t const& ref_servedNRCellInformation() const {return servedNRCellInformation;} + struct nrNeighbourInformation_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInformation_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInformation_t& set_nrNeighbourInformation() { nrNeighbourInformation.setpresent(true); return nrNeighbourInformation;} + nrNeighbourInformation_t const* get_nrNeighbourInformation() const {return nrNeighbourInformation.is_valid() ? &nrNeighbourInformation : nullptr;} + struct nrDeactivationIndication_t : DeactivationIndication + { + static constexpr const char* name() {return "nrDeactivationIndication_t";} + using parent_t = DeactivationIndication; + static constexpr bool optional = true; + + }; + nrDeactivationIndication_t& set_nrDeactivationIndication() { nrDeactivationIndication.setpresent(true); return nrDeactivationIndication;} + nrDeactivationIndication_t const* get_nrDeactivationIndication() const {return nrDeactivationIndication.is_valid() ? &nrDeactivationIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + void clear() + { + old_nrcgi.clear(); + servedNRCellInformation.clear(); + nrNeighbourInformation.clear(); + nrDeactivationIndication.clear(); + iE_Extensions.clear(); + + }; + private: + old_nrcgi_t old_nrcgi; + servedNRCellInformation_t servedNRCellInformation; + nrNeighbourInformation_t nrNeighbourInformation; + nrDeactivationIndication_t nrDeactivationIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRcellsToModifyENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF ServedNRCellsToModify-Item +*/ + +struct ServedNRcellsToModifyENDCConfUpdList_elm : ServedNRCellsToModify_Item +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList_elm";} + using parent_t = ServedNRCellsToModify_Item; + +}; +struct ServedNRcellsToModifyENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRcellsToDeleteENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF NRCGI +*/ + +struct ServedNRcellsToDeleteENDCConfUpdList_elm : NRCGI +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList_elm";} + using parent_t = NRCGI; + +}; +struct ServedNRcellsToDeleteENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedNRcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToModifyENDCConfUpdList PRESENCE optional }| + { ID id-ServedNRcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToDeleteENDCConfUpdList PRESENCE optional }, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(id_ServedNRcellsToModifyListENDCConfUpd); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(id_ServedNRcellsToDeleteListENDCConfUpd); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else if(equal(id_ServedNRcellsToModifyListENDCConfUpd)) { type = 2; return true; } + else if(equal(id_ServedNRcellsToDeleteListENDCConfUpd)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsToModifyListENDCConfUpd);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedNRcellsToDeleteListENDCConfUpd);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(reject); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + ServedNRcellsToModifyENDCConfUpdList& select_id_ServedNRcellsToModifyListENDCConfUpd() { return set(2); } + ServedNRcellsToModifyENDCConfUpdList const* get_id_ServedNRcellsToModifyListENDCConfUpd() const { return get(2); } + ServedNRcellsToDeleteENDCConfUpdList& select_id_ServedNRcellsToDeleteListENDCConfUpd() { return set(3); } + ServedNRcellsToDeleteENDCConfUpdList const* get_id_ServedNRcellsToDeleteListENDCConfUpd() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: v(select_id_ServedNRcellsToModifyListENDCConfUpd()); return true; + case 3: v(select_id_ServedNRcellsToDeleteListENDCConfUpd()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + char dummy2[sizeof(ServedNRcellsToDeleteENDCConfUpdList)]; + char dummy3[sizeof(ServedNRcellsToModifyENDCConfUpdList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(optional); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcConfigUpdate::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcConfigUpdate() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcConfigUpdate CRITICALITY reject TYPE InitiatingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(id_InitiatingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcConfigUpdate& select_id_InitiatingNodeType_EndcConfigUpdate() { return set(1); } + InitiatingNodeType_EndcConfigUpdate const* get_id_InitiatingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional}, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcConfigUpdate::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcConfigUpdate() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcConfigUpdate CRITICALITY reject TYPE RespondingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(id_RespondingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcConfigUpdate& select_id_RespondingNodeType_EndcConfigUpdate() { return set(1); } + RespondingNodeType_EndcConfigUpdate const* get_id_RespondingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-Admitted-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}, + ... +} +*/ + +struct ENDCPartialResetConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(id_UEs_Admitted_ToBeReset); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_Admitted_ToBeReset)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_Admitted_ToBeReset);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_Admitted_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_Admitted_ToBeReset() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_Admitted_ToBeReset()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetConfirm-IEs}}, + ... +} +*/ + +struct ENDCPartialResetConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} +*/ + +struct ENDCPartialResetRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(id_UEs_ToBeReset); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_ToBeReset)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_ToBeReset);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_ToBeReset() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_ToBeReset()); return true; + case 2: v(select_id_Cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetRequired-IEs}}, + ... +} +*/ + +struct ENDCPartialResetRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCX2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalFailure-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Removal ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Removal() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Removal CRITICALITY reject TYPE InitiatingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(id_InitiatingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Removal& select_id_InitiatingNodeType_EndcX2Removal() { return set(1); } + InitiatingNodeType_EndcX2Removal const* get_id_InitiatingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalRequest-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Removal ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Removal() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Removal CRITICALITY reject TYPE RespondingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(id_RespondingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Removal& select_id_RespondingNodeType_EndcX2Removal() { return set(1); } + RespondingNodeType_EndcX2Removal const* get_id_RespondingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalResponse-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } | + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCX2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupFailure-IEs}}, + ... +} +*/ + +struct ENDCX2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Setup ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Setup() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Setup CRITICALITY reject TYPE InitiatingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(id_InitiatingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Setup& select_id_InitiatingNodeType_EndcX2Setup() { return set(1); } + InitiatingNodeType_EndcX2Setup const* get_id_InitiatingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupRequest-IEs}}, + ... +} +*/ + +struct ENDCX2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Setup ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Setup() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Setup CRITICALITY reject TYPE RespondingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(id_RespondingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Setup& select_id_RespondingNodeType_EndcX2Setup() { return set(1); } + RespondingNodeType_EndcX2Setup const* get_id_RespondingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupResponse-IEs}}, + ... +} +*/ + +struct ENDCX2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofEUTRACellsinNRCoordinationReq ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinNRCoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ListofNRCellsinNRCoordinationReq ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationReq_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-ListofEUTRACellsinNRCoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinNRCoordinationReq PRESENCE mandatory }| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationReq CRITICALITY reject TYPE ListofNRCellsinNRCoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(id_ListofEUTRACellsinNRCoordinationReq); type=2;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(id_ListofNRCellsinNRCoordinationReq); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_ListofEUTRACellsinNRCoordinationReq)) { type = 2; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 3; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationReq)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinNRCoordinationReq);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationReq);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(reject); type=2;} + void select_id_SpectrumSharingGroupID() { set(reject); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + ListofEUTRACellsinNRCoordinationReq& select_id_ListofEUTRACellsinNRCoordinationReq() { return set(2); } + ListofEUTRACellsinNRCoordinationReq const* get_id_ListofEUTRACellsinNRCoordinationReq() const { return get(2); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(3); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(3); } + ListofNRCellsinNRCoordinationReq& select_id_ListofNRCellsinNRCoordinationReq() { return set(4); } + ListofNRCellsinNRCoordinationReq const* get_id_ListofNRCellsinNRCoordinationReq() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_ListofEUTRACellsinNRCoordinationReq()); return true; + case 3: v(select_id_SpectrumSharingGroupID()); return true; + case 4: v(select_id_ListofNRCellsinNRCoordinationReq()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinNRCoordinationReq)]; + char dummy3[sizeof(ListofNRCellsinNRCoordinationReq)]; + char dummy4[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(mandatory); type=2;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EutranrCellResourceCoordination ::= CHOICE { + initiate-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqIEs}}, + initiate-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EutranrCellResourceCoordination() {clear();} + struct initiate_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct initiate_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + initiate_eNB_t& select_initiate_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiate_eNB_t const* get_initiate_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + initiate_en_gNB_t& select_initiate_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + initiate_en_gNB_t const* get_initiate_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiate_eNB_t)]; + char dummy2[sizeof(initiate_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE InitiatingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(id_InitiatingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EutranrCellResourceCoordination& select_id_InitiatingNodeType_EutranrCellResourceCoordination() { return set(1); } + InitiatingNodeType_EutranrCellResourceCoordination const* get_id_InitiatingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationRequest-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofNRCellsinNRCoordinationResp ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationResp_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationResp CRITICALITY reject TYPE ListofNRCellsinNRCoordinationResp PRESENCE mandatory}, + + + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(id_ListofNRCellsinNRCoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofNRCellsinNRCoordinationResp& select_id_ListofNRCellsinNRCoordinationResp() { return set(3); } + ListofNRCellsinNRCoordinationResp const* get_id_ListofNRCellsinNRCoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofNRCellsinNRCoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofNRCellsinNRCoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EutranrCellResourceCoordination ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EutranrCellResourceCoordination() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE RespondingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(id_RespondingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EutranrCellResourceCoordination& select_id_RespondingNodeType_EutranrCellResourceCoordination() { return set(1); } + RespondingNodeType_EutranrCellResourceCoordination const* get_id_RespondingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationResponse-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct ErrorIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(id_Old_SgNB_UE_X2AP_ID); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_Old_SgNB_UE_X2AP_ID)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_Old_SgNB_UE_X2AP_ID);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(6); } + SgNB_UE_X2AP_ID& select_id_Old_SgNB_UE_X2AP_ID() { return set(7); } + SgNB_UE_X2AP_ID const* get_id_Old_SgNB_UE_X2AP_ID() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_Old_SgNB_UE_X2AP_ID()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(optional); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} +*/ + +struct ErrorIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ErrorIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +GNBStatusIndicationIEs X2AP-PROTOCOL-IES ::= { + { ID id-GNBOverloadInformation CRITICALITY ignore TYPE GNBOverloadInformation PRESENCE mandatory}, + ... +} +*/ + +struct GNBStatusIndicationIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(id_GNBOverloadInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GNBOverloadInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GNBOverloadInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GNBOverloadInformation& select_id_GNBOverloadInformation() { return set(1); } + GNBOverloadInformation const* get_id_GNBOverloadInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GNBOverloadInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GNBOverloadInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GNBStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBStatusIndicationIEs} }, + ... +} +*/ + +struct GNBStatusIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "GNBStatusIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct HandoverCancel_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, + ... +} +*/ + +struct HandoverCancel : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverCancel";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + + ... +} +*/ + +struct HandoverPreparationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, + ... +} +*/ + +struct HandoverPreparationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverPreparationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityInformation ::= BIT STRING (SIZE(32)) +*/ + +struct MobilityInformation : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MobilityInformation";} + using parent_t = asn::bstring<>; + +}; + +/* +HandoverReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- | + { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to "InterRAT ping-pong" --| + { ID id-SourceCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct HandoverReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(id_HandoverReportType); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_SourceCellECGI() { set(id_SourceCellECGI); type=3;} + void select_id_FailureCellECGI() { set(id_FailureCellECGI); type=4;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=5;} + void select_id_TargetCellInUTRAN() { set(id_TargetCellInUTRAN); type=6;} + void select_id_SourceCellCRNTI() { set(id_SourceCellCRNTI); type=7;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=8;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_HandoverReportType)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_SourceCellECGI)) { type = 3; return true; } + else if(equal(id_FailureCellECGI)) { type = 4; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 5; return true; } + else if(equal(id_TargetCellInUTRAN)) { type = 6; return true; } + else if(equal(id_SourceCellCRNTI)) { type = 7; return true; } + else if(equal(id_MobilityInformation)) { type = 8; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 9; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_HandoverReportType);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SourceCellECGI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_FailureCellECGI);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_TargetCellInUTRAN);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SourceCellCRNTI);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_SourceCellECGI() { set(ignore); type=3;} + void select_id_FailureCellECGI() { set(ignore); type=4;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=5;} + void select_id_TargetCellInUTRAN() { set(ignore); type=6;} + void select_id_SourceCellCRNTI() { set(ignore); type=7;} + void select_id_MobilityInformation() { set(ignore); type=8;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + HandoverReportType& select_id_HandoverReportType() { return set(1); } + HandoverReportType const* get_id_HandoverReportType() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_SourceCellECGI() { return set(3); } + ECGI const* get_id_SourceCellECGI() const { return get(3); } + ECGI& select_id_FailureCellECGI() { return set(4); } + ECGI const* get_id_FailureCellECGI() const { return get(4); } + ECGI& select_id_Re_establishmentCellECGI() { return set(5); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(5); } + TargetCellInUTRAN& select_id_TargetCellInUTRAN() { return set(6); } + TargetCellInUTRAN const* get_id_TargetCellInUTRAN() const { return get(6); } + CRNTI& select_id_SourceCellCRNTI() { return set(7); } + CRNTI const* get_id_SourceCellCRNTI() const { return get(7); } + MobilityInformation& select_id_MobilityInformation() { return set(8); } + MobilityInformation const* get_id_MobilityInformation() const { return get(8); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(9); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(9); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(10); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_HandoverReportType()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_SourceCellECGI()); return true; + case 4: v(select_id_FailureCellECGI()); return true; + case 5: v(select_id_Re_establishmentCellECGI()); return true; + case 6: v(select_id_TargetCellInUTRAN()); return true; + case 7: v(select_id_SourceCellCRNTI()); return true; + case 8: v(select_id_MobilityInformation()); return true; + case 9: v(select_id_UE_RLF_Report_Container()); return true; + case 10: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(HandoverReportType)]; + char dummy5[sizeof(MobilityInformation)]; + char dummy6[sizeof(TargetCellInUTRAN)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_SourceCellECGI() { set(mandatory); type=3;} + void select_id_FailureCellECGI() { set(mandatory); type=4;} + void select_id_Re_establishmentCellECGI() { set(conditional); type=5;} + void select_id_TargetCellInUTRAN() { set(conditional); type=6;} + void select_id_SourceCellCRNTI() { set(optional); type=7;} + void select_id_MobilityInformation() { set(optional); type=8;} + void select_id_UE_RLF_Report_Container() { set(optional); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(conditional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(conditional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, + ... +} +*/ + +struct HandoverReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION ManagementBasedMDTallowed PRESENCE optional }| +{ ID id-ManagementBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }| +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(id_ManagementBasedMDTallowed); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(id_ManagementBasedMDTPLMNList); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ManagementBasedMDTallowed)) { type = 1; return true; } + else if(equal(id_ManagementBasedMDTPLMNList)) { type = 2; return true; } + else if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ManagementBasedMDTallowed);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ManagementBasedMDTPLMNList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(ignore); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(ignore); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ManagementBasedMDTallowed& select_id_ManagementBasedMDTallowed() { return set(1); } + ManagementBasedMDTallowed const* get_id_ManagementBasedMDTallowed() const { return get(1); } + MDTPLMNList& select_id_ManagementBasedMDTPLMNList() { return set(2); } + MDTPLMNList const* get_id_ManagementBasedMDTPLMNList() const { return get(2); } + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(3); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ManagementBasedMDTallowed()); return true; + case 2: v(select_id_ManagementBasedMDTPLMNList()); return true; + case 3: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDTPLMNList)]; + char dummy2[sizeof(ManagementBasedMDTallowed)]; + char dummy3[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(optional); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(optional); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation : asn::sequence<10, 0, true, 4> +{ + static constexpr const char* name() {return "UE-ContextInformation";} + using parent_t = asn::sequence<10, 0, true, 4>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_List_t : E_RABs_ToBeSetup_List + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_List_t";} + using parent_t = E_RABs_ToBeSetup_List; + + }; + e_RABs_ToBeSetup_List_t& ref_e_RABs_ToBeSetup_List() {return e_RABs_ToBeSetup_List;} + e_RABs_ToBeSetup_List_t const& ref_e_RABs_ToBeSetup_List() const {return e_RABs_ToBeSetup_List;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_List.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSeNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSeNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSeNB ::= SEQUENCE { + source-GlobalSeNB-ID GlobalENB-ID, + seNB-UE-X2AP-ID UE-X2AP-ID, + seNB-UE-X2AP-ID-Extension UE-X2AP-ID-Extension, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSeNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSeNB : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSeNB";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct source_GlobalSeNB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalSeNB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalSeNB_ID_t& ref_source_GlobalSeNB_ID() {return source_GlobalSeNB_ID;} + source_GlobalSeNB_ID_t const& ref_source_GlobalSeNB_ID() const {return source_GlobalSeNB_ID;} + struct seNB_UE_X2AP_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + seNB_UE_X2AP_ID_t& ref_seNB_UE_X2AP_ID() {return seNB_UE_X2AP_ID;} + seNB_UE_X2AP_ID_t const& ref_seNB_UE_X2AP_ID() const {return seNB_UE_X2AP_ID;} + struct seNB_UE_X2AP_ID_Extension_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_Extension_t";} + using parent_t = UE_X2AP_ID_Extension; + + }; + seNB_UE_X2AP_ID_Extension_t& ref_seNB_UE_X2AP_ID_Extension() {return seNB_UE_X2AP_ID_Extension;} + seNB_UE_X2AP_ID_Extension_t const& ref_seNB_UE_X2AP_ID_Extension() const {return seNB_UE_X2AP_ID_Extension;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSeNB_ID.clear(); + seNB_UE_X2AP_ID.clear(); + seNB_UE_X2AP_ID_Extension.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSeNB_ID_t source_GlobalSeNB_ID; + seNB_UE_X2AP_ID_t seNB_UE_X2AP_ID; + seNB_UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtWT-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtWT_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtWT ::= SEQUENCE { + wTID WTID, + wT-UE-XwAP-ID WT-UE-XwAP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtWT-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtWT : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtWT";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct wTID_t : WTID + { + static constexpr const char* name() {return "wTID_t";} + using parent_t = WTID; + + }; + wTID_t& ref_wTID() {return wTID;} + wTID_t const& ref_wTID() const {return wTID;} + struct wT_UE_XwAP_ID_t : WT_UE_XwAP_ID + { + static constexpr const char* name() {return "wT_UE_XwAP_ID_t";} + using parent_t = WT_UE_XwAP_ID; + + }; + wT_UE_XwAP_ID_t& ref_wT_UE_XwAP_ID() {return wT_UE_XwAP_ID;} + wT_UE_XwAP_ID_t const& ref_wT_UE_XwAP_ID() const {return wT_UE_XwAP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + void clear() + { + wTID.clear(); + wT_UE_XwAP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + wTID_t wTID; + wT_UE_XwAP_ID_t wT_UE_XwAP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSgNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSgNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSgNB ::= SEQUENCE { + source-GlobalSgNB-ID GlobalGNB-ID, + sgNB-UE-X2AP-ID SgNB-UE-X2AP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSgNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSgNB : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSgNB";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct source_GlobalSgNB_ID_t : GlobalGNB_ID + { + static constexpr const char* name() {return "source_GlobalSgNB_ID_t";} + using parent_t = GlobalGNB_ID; + + }; + source_GlobalSgNB_ID_t& ref_source_GlobalSgNB_ID() {return source_GlobalSgNB_ID;} + source_GlobalSgNB_ID_t const& ref_source_GlobalSgNB_ID() const {return source_GlobalSgNB_ID;} + struct sgNB_UE_X2AP_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_UE_X2AP_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + + }; + sgNB_UE_X2AP_ID_t& ref_sgNB_UE_X2AP_ID() {return sgNB_UE_X2AP_ID;} + sgNB_UE_X2AP_ID_t const& ref_sgNB_UE_X2AP_ID() const {return sgNB_UE_X2AP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSgNB_ID.clear(); + sgNB_UE_X2AP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSgNB_ID_t source_GlobalSgNB_ID; + sgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory}| + { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-UE-HistoryInformationFromTheUE CRITICALITY ignore TYPE UE-HistoryInformationFromTheUE PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtSeNB CRITICALITY ignore TYPE UE-ContextReferenceAtSeNB PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtWT CRITICALITY ignore TYPE UE-ContextReferenceAtWT PRESENCE optional}| + { ID id-NRUESecurityCapabilities CRITICALITY ignore TYPE NRUESecurityCapabilities PRESENCE optional}| + { ID id-UE-ContextReferenceAtSgNB CRITICALITY ignore TYPE UE-ContextReferenceAtSgNB PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct HandoverRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_TargetCell_ID() { set(id_TargetCell_ID); type=3;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=4;} + void select_id_UE_ContextInformation() { set(id_UE_ContextInformation); type=5;} + void select_id_UE_HistoryInformation() { set(id_UE_HistoryInformation); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=9;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=10;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(id_UE_HistoryInformationFromTheUE); type=12;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=13;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(id_UE_ContextReferenceAtSeNB); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=16;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(id_UE_ContextReferenceAtWT); type=18;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(id_UE_ContextReferenceAtSgNB); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=22;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_TargetCell_ID)) { type = 3; return true; } + else if(equal(id_GUMMEI_ID)) { type = 4; return true; } + else if(equal(id_UE_ContextInformation)) { type = 5; return true; } + else if(equal(id_UE_HistoryInformation)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 9; return true; } + else if(equal(id_MobilityInformation)) { type = 10; return true; } + else if(equal(id_Masked_IMEISV)) { type = 11; return true; } + else if(equal(id_UE_HistoryInformationFromTheUE)) { type = 12; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 13; return true; } + else if(equal(id_ProSeAuthorized)) { type = 14; return true; } + else if(equal(id_UE_ContextReferenceAtSeNB)) { type = 15; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 16; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 17; return true; } + else if(equal(id_UE_ContextReferenceAtWT)) { type = 18; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 19; return true; } + else if(equal(id_UE_ContextReferenceAtSgNB)) { type = 20; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 21; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TargetCell_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_HistoryInformation);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_UE_HistoryInformationFromTheUE);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSeNB);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtWT);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSgNB);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_TargetCell_ID() { set(reject); type=3;} + void select_id_GUMMEI_ID() { set(reject); type=4;} + void select_id_UE_ContextInformation() { set(reject); type=5;} + void select_id_UE_HistoryInformation() { set(ignore); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_CSGMembershipStatus() { set(reject); type=9;} + void select_id_MobilityInformation() { set(ignore); type=10;} + void select_id_Masked_IMEISV() { set(ignore); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(ignore); type=12;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=13;} + void select_id_ProSeAuthorized() { set(ignore); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(ignore); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=16;} + void select_id_V2XServicesAuthorized() { set(ignore); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(ignore); type=18;} + void select_id_NRUESecurityCapabilities() { set(ignore); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(ignore); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=22;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(ignore)) { type = 18; return true; } + else if(equal(ignore)) { type = 19; return true; } + else if(equal(ignore)) { type = 20; return true; } + else if(equal(ignore)) { type = 21; return true; } + else if(equal(ignore)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(ignore);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(ignore);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(ignore);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(ignore);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(ignore);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_TargetCell_ID() { return set(3); } + ECGI const* get_id_TargetCell_ID() const { return get(3); } + GUMMEI& select_id_GUMMEI_ID() { return set(4); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(4); } + UE_ContextInformation& select_id_UE_ContextInformation() { return set(5); } + UE_ContextInformation const* get_id_UE_ContextInformation() const { return get(5); } + UE_HistoryInformation& select_id_UE_HistoryInformation() { return set(6); } + UE_HistoryInformation const* get_id_UE_HistoryInformation() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(9); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(9); } + MobilityInformation& select_id_MobilityInformation() { return set(10); } + MobilityInformation const* get_id_MobilityInformation() const { return get(10); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(11); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(11); } + UE_HistoryInformationFromTheUE& select_id_UE_HistoryInformationFromTheUE() { return set(12); } + UE_HistoryInformationFromTheUE const* get_id_UE_HistoryInformationFromTheUE() const { return get(12); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(13); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(13); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(14); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(14); } + UE_ContextReferenceAtSeNB& select_id_UE_ContextReferenceAtSeNB() { return set(15); } + UE_ContextReferenceAtSeNB const* get_id_UE_ContextReferenceAtSeNB() const { return get(15); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(16); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(16); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(17); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(17); } + UE_ContextReferenceAtWT& select_id_UE_ContextReferenceAtWT() { return set(18); } + UE_ContextReferenceAtWT const* get_id_UE_ContextReferenceAtWT() const { return get(18); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(19); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(19); } + UE_ContextReferenceAtSgNB& select_id_UE_ContextReferenceAtSgNB() { return set(20); } + UE_ContextReferenceAtSgNB const* get_id_UE_ContextReferenceAtSgNB() const { return get(20); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(21); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(21); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(22); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(22); } + bool is_unknown() const { return type == 23; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_TargetCell_ID()); return true; + case 4: v(select_id_GUMMEI_ID()); return true; + case 5: v(select_id_UE_ContextInformation()); return true; + case 6: v(select_id_UE_HistoryInformation()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_CSGMembershipStatus()); return true; + case 10: v(select_id_MobilityInformation()); return true; + case 11: v(select_id_Masked_IMEISV()); return true; + case 12: v(select_id_UE_HistoryInformationFromTheUE()); return true; + case 13: v(select_id_ExpectedUEBehaviour()); return true; + case 14: v(select_id_ProSeAuthorized()); return true; + case 15: v(select_id_UE_ContextReferenceAtSeNB()); return true; + case 16: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 17: v(select_id_V2XServicesAuthorized()); return true; + case 18: v(select_id_UE_ContextReferenceAtWT()); return true; + case 19: v(select_id_NRUESecurityCapabilities()); return true; + case 20: v(select_id_UE_ContextReferenceAtSgNB()); return true; + case 21: v(select_id_AerialUEsubscriptionInformation()); return true; + case 22: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 23: if(type != 23) {clear(); asn::base::set();} type = 23; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CSGMembershipStatus)]; + char dummy3[sizeof(Cause)]; + char dummy4[sizeof(ECGI)]; + char dummy5[sizeof(ExpectedUEBehaviour)]; + char dummy6[sizeof(GUMMEI)]; + char dummy7[sizeof(Masked_IMEISV)]; + char dummy8[sizeof(MobilityInformation)]; + char dummy9[sizeof(NRUESecurityCapabilities)]; + char dummy10[sizeof(ProSeAuthorized)]; + char dummy11[sizeof(SRVCCOperationPossible)]; + char dummy12[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy13[sizeof(TraceActivation)]; + char dummy14[sizeof(UE_ContextInformation)]; + char dummy15[sizeof(UE_ContextReferenceAtSeNB)]; + char dummy16[sizeof(UE_ContextReferenceAtSgNB)]; + char dummy17[sizeof(UE_ContextReferenceAtWT)]; + char dummy18[sizeof(UE_HistoryInformation)]; + char dummy19[sizeof(UE_HistoryInformationFromTheUE)]; + char dummy20[sizeof(UE_X2AP_ID)]; + char dummy21[sizeof(UE_X2AP_ID_Extension)]; + char dummy22[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_TargetCell_ID() { set(mandatory); type=3;} + void select_id_GUMMEI_ID() { set(mandatory); type=4;} + void select_id_UE_ContextInformation() { set(mandatory); type=5;} + void select_id_UE_HistoryInformation() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_CSGMembershipStatus() { set(optional); type=9;} + void select_id_MobilityInformation() { set(optional); type=10;} + void select_id_Masked_IMEISV() { set(optional); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(optional); type=12;} + void select_id_ExpectedUEBehaviour() { set(optional); type=13;} + void select_id_ProSeAuthorized() { set(optional); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(optional); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=16;} + void select_id_V2XServicesAuthorized() { set(optional); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(optional); type=18;} + void select_id_NRUESecurityCapabilities() { set(optional); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(optional); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=22;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(optional)) { type = 16; return true; } + else if(equal(optional)) { type = 17; return true; } + else if(equal(optional)) { type = 18; return true; } + else if(equal(optional)) { type = 19; return true; } + else if(equal(optional)) { type = 20; return true; } + else if(equal(optional)) { type = 21; return true; } + else if(equal(optional)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(optional);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(optional);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(optional);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(optional);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(optional);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(optional);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(optional);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, + ... +} +*/ + +struct HandoverRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-WT-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}, + ... +} +*/ + +struct HandoverRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_List() { set(id_E_RABs_Admitted_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(id_TargeteNBtoSource_eNBTransparentContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(id_WT_UE_ContextKeptIndicator); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_TargeteNBtoSource_eNBTransparentContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_WT_UE_ContextKeptIndicator)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_TargeteNBtoSource_eNBTransparentContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_WT_UE_ContextKeptIndicator);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(ignore); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_List& select_id_E_RABs_Admitted_List() { return set(3); } + E_RABs_Admitted_List const* get_id_E_RABs_Admitted_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + TargeteNBtoSource_eNBTransparentContainer& select_id_TargeteNBtoSource_eNBTransparentContainer() { return set(5); } + TargeteNBtoSource_eNBTransparentContainer const* get_id_TargeteNBtoSource_eNBTransparentContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(7); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(10); } + UE_ContextKeptIndicator& select_id_WT_UE_ContextKeptIndicator() { return set(11); } + UE_ContextKeptIndicator const* get_id_WT_UE_ContextKeptIndicator() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_TargeteNBtoSource_eNBTransparentContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_UE_ContextKeptIndicator()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_WT_UE_ContextKeptIndicator()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_List)]; + char dummy4[sizeof(TargeteNBtoSource_eNBTransparentContainer)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, + ... +} +*/ + +struct HandoverRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +LoadInformation-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , + ... +} +*/ + +struct LoadInformation_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(id_CellInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_List& select_id_CellInformation() { return set(1); } + CellInformation_List const* get_id_CellInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LoadInformation ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, + ... +} +*/ + +struct LoadInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "LoadInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementInitiationResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementInitiationResult_Item : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "MeasurementInitiationResult-Item";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + static constexpr bool optional = true; + + }; + measurementFailureCause_List_t& set_measurementFailureCause_List() { measurementFailureCause_List.setpresent(true); return measurementFailureCause_List;} + measurementFailureCause_List_t const* get_measurementFailureCause_List() const {return measurementFailureCause_List.is_valid() ? &measurementFailureCause_List : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE MeasurementInitiationResult-Item PRESENCE mandatory} +} +*/ + +struct MeasurementInitiationResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(id_MeasurementInitiationResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementInitiationResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementInitiationResult_Item& select_id_MeasurementInitiationResult_Item() { return set(1); } + MeasurementInitiationResult_Item const* get_id_MeasurementInitiationResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementInitiationResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementInitiationResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {MeasurementInitiationResult-ItemIEs} } +*/ + +struct MeasurementInitiationResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementInitiationResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementInitiationResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementInitiationResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(ECGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, + ... +} +*/ + +struct MobilityChangeAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(id_ENB2_Mobility_Parameters_Modification_Range); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_ENB2_Mobility_Parameters_Modification_Range)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Mobility_Parameters_Modification_Range);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(ignore); type=1;} + void select_id_ENB2_Cell_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MobilityParametersModificationRange& select_id_ENB2_Mobility_Parameters_Modification_Range() { return set(4); } + MobilityParametersModificationRange const* get_id_ENB2_Mobility_Parameters_Modification_Range() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_ENB2_Mobility_Parameters_Modification_Range()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(MobilityParametersModificationRange)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, + ... +} +*/ + +struct MobilityChangeFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory}| + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct MobilityChangeRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(id_ENB1_Mobility_Parameters); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(id_ENB2_Proposed_Mobility_Parameters); type=4;} + void select_id_Cause() { set(id_Cause); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_ENB1_Mobility_Parameters)) { type = 3; return true; } + else if(equal(id_ENB2_Proposed_Mobility_Parameters)) { type = 4; return true; } + else if(equal(id_Cause)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ENB1_Mobility_Parameters);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Proposed_Mobility_Parameters);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(ignore); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(reject); type=4;} + void select_id_Cause() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + MobilityParametersInformation& select_id_ENB1_Mobility_Parameters() { return set(3); } + MobilityParametersInformation const* get_id_ENB1_Mobility_Parameters() const { return get(3); } + MobilityParametersInformation& select_id_ENB2_Proposed_Mobility_Parameters() { return set(4); } + MobilityParametersInformation const* get_id_ENB2_Proposed_Mobility_Parameters() const { return get(4); } + Cause& select_id_Cause() { return set(5); } + Cause const* get_id_Cause() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_ENB1_Mobility_Parameters()); return true; + case 4: v(select_id_ENB2_Proposed_Mobility_Parameters()); return true; + case 5: v(select_id_Cause()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(MobilityParametersInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(optional); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(mandatory); type=4;} + void select_id_Cause() { set(mandatory); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, + ... +} +*/ + +struct MobilityChangeRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +PartialSuccessIndicator ::= ENUMERATED { + partial-success-allowed, +... +} +*/ + +struct PartialSuccessIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "PartialSuccessIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + partial_success_allowed + } index_t; + +}; + +/* +PrivateMessage-IEs X2AP-PRIVATE-IES ::= { + ... +} +*/ + +struct PrivateMessage_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} +*/ + +struct PrivateMessage : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "PrivateMessage";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct privateIEs_t : PrivateIE_Container + { + static constexpr const char* name() {return "privateIEs_t";} + using parent_t = PrivateIE_Container; + + }; + privateIEs_t& ref_privateIEs() {return privateIEs;} + privateIEs_t const& ref_privateIEs() const {return privateIEs;} + template void decode(V& v) + { + v(privateIEs); + + }; + template void encode(V& v) const + { + v(privateIEs); + + }; + void clear() + { + privateIEs.clear(); + + }; + private: + privateIEs_t privateIEs; + +}; +/* +RLFIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE RRCConnSetupIndicator PRESENCE optional}| + { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE RRCConnReestabIndicator PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct RLFIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=1;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=2;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=5;} + void select_id_RRCConnSetupIndicator() { set(id_RRCConnSetupIndicator); type=6;} + void select_id_RRCConnReestabIndicator() { set(id_RRCConnReestabIndicator); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_FailureCellPCI)) { type = 1; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 2; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 5; return true; } + else if(equal(id_RRCConnSetupIndicator)) { type = 6; return true; } + else if(equal(id_RRCConnReestabIndicator)) { type = 7; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RRCConnSetupIndicator);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RRCConnReestabIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(ignore); type=1;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=2;} + void select_id_FailureCellCRNTI() { set(ignore); type=3;} + void select_id_ShortMAC_I() { set(ignore); type=4;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=5;} + void select_id_RRCConnSetupIndicator() { set(reject); type=6;} + void select_id_RRCConnReestabIndicator() { set(ignore); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + PCI& select_id_FailureCellPCI() { return set(1); } + PCI const* get_id_FailureCellPCI() const { return get(1); } + ECGI& select_id_Re_establishmentCellECGI() { return set(2); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(2); } + CRNTI& select_id_FailureCellCRNTI() { return set(3); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(5); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(5); } + RRCConnSetupIndicator& select_id_RRCConnSetupIndicator() { return set(6); } + RRCConnSetupIndicator const* get_id_RRCConnSetupIndicator() const { return get(6); } + RRCConnReestabIndicator& select_id_RRCConnReestabIndicator() { return set(7); } + RRCConnReestabIndicator const* get_id_RRCConnReestabIndicator() const { return get(7); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(8); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_FailureCellPCI()); return true; + case 2: v(select_id_Re_establishmentCellECGI()); return true; + case 3: v(select_id_FailureCellCRNTI()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_UE_RLF_Report_Container()); return true; + case 6: v(select_id_RRCConnSetupIndicator()); return true; + case 7: v(select_id_RRCConnReestabIndicator()); return true; + case 8: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(RRCConnReestabIndicator)]; + char dummy5[sizeof(RRCConnSetupIndicator)]; + char dummy6[sizeof(ShortMAC_I)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(mandatory); type=1;} + void select_id_Re_establishmentCellECGI() { set(mandatory); type=2;} + void select_id_FailureCellCRNTI() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(optional); type=4;} + void select_id_UE_RLF_Report_Container() { set(optional); type=5;} + void select_id_RRCConnSetupIndicator() { set(optional); type=6;} + void select_id_RRCConnReestabIndicator() { set(optional); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLFIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, + ... +} +*/ + +struct RLFIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RLFIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RNL-Header-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RNL_Header_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RNL-Header ::= SEQUENCE { + source-GlobalENB-ID GlobalENB-ID, + target-GlobalENB-ID GlobalENB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RNL-Header-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RNL_Header : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "RNL-Header";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct source_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalENB_ID_t& ref_source_GlobalENB_ID() {return source_GlobalENB_ID;} + source_GlobalENB_ID_t const& ref_source_GlobalENB_ID() const {return source_GlobalENB_ID;} + struct target_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "target_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + static constexpr bool optional = true; + + }; + target_GlobalENB_ID_t& set_target_GlobalENB_ID() { target_GlobalENB_ID.setpresent(true); return target_GlobalENB_ID;} + target_GlobalENB_ID_t const* get_target_GlobalENB_ID() const {return target_GlobalENB_ID.is_valid() ? &target_GlobalENB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalENB_ID.clear(); + target_GlobalENB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalENB_ID_t source_GlobalENB_ID; + target_GlobalENB_ID_t target_GlobalENB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +RRCTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SplitSRB CRITICALITY reject TYPE SplitSRB PRESENCE optional}| + { ID id-UENRMeasurement CRITICALITY reject TYPE UENRMeasurement PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct RRCTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SplitSRB() { set(id_SplitSRB); type=3;} + void select_id_UENRMeasurement() { set(id_UENRMeasurement); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SplitSRB)) { type = 3; return true; } + else if(equal(id_UENRMeasurement)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SplitSRB);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_UENRMeasurement);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SplitSRB() { set(reject); type=3;} + void select_id_UENRMeasurement() { set(reject); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SplitSRB& select_id_SplitSRB() { return set(3); } + SplitSRB const* get_id_SplitSRB() const { return get(3); } + UENRMeasurement& select_id_UENRMeasurement() { return set(4); } + UENRMeasurement const* get_id_UENRMeasurement() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SplitSRB()); return true; + case 4: v(select_id_UENRMeasurement()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SgNB_UE_X2AP_ID)]; + char dummy2[sizeof(SplitSRB)]; + char dummy3[sizeof(UENRMeasurement)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SplitSRB() { set(optional); type=3;} + void select_id_UENRMeasurement() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RRCTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RRCTransfer-IEs}}, + ... +} +*/ + +struct RRCTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RRCTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ReportingPeriodicity ::= ENUMERATED { + one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} +*/ + +struct ReportingPeriodicity : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicity";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_thousand_ms + ,two_thousand_ms + ,five_thousand_ms + ,ten_thousand_ms + } index_t; + +}; + +/* +ResetRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct ResetRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, + ... +} +*/ + +struct ResetRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResetResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ResetResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, + ... +} +*/ + +struct ResetResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE CompleteFailureCauseInformation-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(id_CompleteFailureCauseInformation_List); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_CompleteFailureCauseInformation_List)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_List);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + CompleteFailureCauseInformation_List& select_id_CompleteFailureCauseInformation_List() { return set(5); } + CompleteFailureCauseInformation_List const* get_id_CompleteFailureCauseInformation_List() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_CompleteFailureCauseInformation_List()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CompleteFailureCauseInformation_List)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + char dummy4[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, + ... +} +*/ + +struct ResourceStatusFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”, “Partial stop” or to “Add”-- + { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory}| + { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional}| + { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory}| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}| + { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE PartialSuccessIndicator PRESENCE optional}| + { ID id-ReportingPeriodicityRSRPMR CRITICALITY ignore TYPE ReportingPeriodicityRSRPMR PRESENCE optional}| + { ID id-ReportingPeriodicityCSIR CRITICALITY ignore TYPE ReportingPeriodicityCSIR PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Registration_Request() { set(id_Registration_Request); type=3;} + void select_id_ReportCharacteristics() { set(id_ReportCharacteristics); type=4;} + void select_id_CellToReport() { set(id_CellToReport); type=5;} + void select_id_ReportingPeriodicity() { set(id_ReportingPeriodicity); type=6;} + void select_id_PartialSuccessIndicator() { set(id_PartialSuccessIndicator); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(id_ReportingPeriodicityRSRPMR); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(id_ReportingPeriodicityCSIR); type=9;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Registration_Request)) { type = 3; return true; } + else if(equal(id_ReportCharacteristics)) { type = 4; return true; } + else if(equal(id_CellToReport)) { type = 5; return true; } + else if(equal(id_ReportingPeriodicity)) { type = 6; return true; } + else if(equal(id_PartialSuccessIndicator)) { type = 7; return true; } + else if(equal(id_ReportingPeriodicityRSRPMR)) { type = 8; return true; } + else if(equal(id_ReportingPeriodicityCSIR)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Registration_Request);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReportCharacteristics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellToReport);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_ReportingPeriodicity);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_PartialSuccessIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_ReportingPeriodicityRSRPMR);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ReportingPeriodicityCSIR);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(ignore); type=2;} + void select_id_Registration_Request() { set(reject); type=3;} + void select_id_ReportCharacteristics() { set(reject); type=4;} + void select_id_CellToReport() { set(ignore); type=5;} + void select_id_ReportingPeriodicity() { set(ignore); type=6;} + void select_id_PartialSuccessIndicator() { set(ignore); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(ignore); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(ignore); type=9;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Registration_Request& select_id_Registration_Request() { return set(3); } + Registration_Request const* get_id_Registration_Request() const { return get(3); } + ReportCharacteristics& select_id_ReportCharacteristics() { return set(4); } + ReportCharacteristics const* get_id_ReportCharacteristics() const { return get(4); } + CellToReport_List& select_id_CellToReport() { return set(5); } + CellToReport_List const* get_id_CellToReport() const { return get(5); } + ReportingPeriodicity& select_id_ReportingPeriodicity() { return set(6); } + ReportingPeriodicity const* get_id_ReportingPeriodicity() const { return get(6); } + PartialSuccessIndicator& select_id_PartialSuccessIndicator() { return set(7); } + PartialSuccessIndicator const* get_id_PartialSuccessIndicator() const { return get(7); } + ReportingPeriodicityRSRPMR& select_id_ReportingPeriodicityRSRPMR() { return set(8); } + ReportingPeriodicityRSRPMR const* get_id_ReportingPeriodicityRSRPMR() const { return get(8); } + ReportingPeriodicityCSIR& select_id_ReportingPeriodicityCSIR() { return set(9); } + ReportingPeriodicityCSIR const* get_id_ReportingPeriodicityCSIR() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Registration_Request()); return true; + case 4: v(select_id_ReportCharacteristics()); return true; + case 5: v(select_id_CellToReport()); return true; + case 6: v(select_id_ReportingPeriodicity()); return true; + case 7: v(select_id_PartialSuccessIndicator()); return true; + case 8: v(select_id_ReportingPeriodicityRSRPMR()); return true; + case 9: v(select_id_ReportingPeriodicityCSIR()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_List)]; + char dummy2[sizeof(Measurement_ID)]; + char dummy3[sizeof(PartialSuccessIndicator)]; + char dummy4[sizeof(Registration_Request)]; + char dummy5[sizeof(ReportCharacteristics)]; + char dummy6[sizeof(ReportingPeriodicity)]; + char dummy7[sizeof(ReportingPeriodicityCSIR)]; + char dummy8[sizeof(ReportingPeriodicityRSRPMR)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(conditional); type=2;} + void select_id_Registration_Request() { set(mandatory); type=3;} + void select_id_ReportCharacteristics() { set(optional); type=4;} + void select_id_CellToReport() { set(mandatory); type=5;} + void select_id_ReportingPeriodicity() { set(optional); type=6;} + void select_id_PartialSuccessIndicator() { set(optional); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(optional); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(optional); type=9;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, + ... +} +*/ + +struct ResourceStatusRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE MeasurementInitiationResult-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeasurementInitiationResult_List() { set(id_MeasurementInitiationResult_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeasurementInitiationResult_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeasurementInitiationResult_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + MeasurementInitiationResult_List& select_id_MeasurementInitiationResult_List() { return set(4); } + MeasurementInitiationResult_List const* get_id_MeasurementInitiationResult_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeasurementInitiationResult_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeasurementInitiationResult_List)]; + char dummy3[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeasurementInitiationResult_List() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, + ... +} +*/ + +struct ResourceStatusResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, + ... +} +*/ + +struct ResourceStatusUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CellMeasurementResult() { set(id_CellMeasurementResult); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CellMeasurementResult)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CellMeasurementResult);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CellMeasurementResult() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CellMeasurementResult_List& select_id_CellMeasurementResult() { return set(3); } + CellMeasurementResult_List const* get_id_CellMeasurementResult() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CellMeasurementResult()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_List)]; + char dummy2[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CellMeasurementResult() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, + ... +} +*/ + +struct ResourceStatusUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItem : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp ::= CHOICE { + success ResponseInformationSeNBReconfComp-SuccessItem, + reject-by-MeNB ResponseInformationSeNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSeNBReconfComp() {clear();} + struct success_t : ResponseInformationSeNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_t";} + using parent_t = ResponseInformationSeNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_t : ResponseInformationSeNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_t";} + using parent_t = ResponseInformationSeNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_t& select_success() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_t const* get_success() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_t& select_reject_by_MeNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_t const* get_reject_by_MeNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_t)]; + char dummy2[sizeof(reject_by_MeNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ResponseInformationSgNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSgNBContainer MeNBtoSgNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSgNBContainer_t : MeNBtoSgNBContainer + { + static constexpr const char* name() {return "meNBtoSgNBContainer_t";} + using parent_t = MeNBtoSgNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSgNBContainer_t& set_meNBtoSgNBContainer() { meNBtoSgNBContainer.setpresent(true); return meNBtoSgNBContainer;} + meNBtoSgNBContainer_t const* get_meNBtoSgNBContainer() const {return meNBtoSgNBContainer.is_valid() ? &meNBtoSgNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSgNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSgNBContainer_t meNBtoSgNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp ::= CHOICE { + success-SgNBReconfComp ResponseInformationSgNBReconfComp-SuccessItem, + reject-by-MeNB-SgNBReconfComp ResponseInformationSgNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSgNBReconfComp() {clear();} + struct success_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_SgNBReconfComp_t& select_success_SgNBReconfComp() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_SgNBReconfComp_t const* get_success_SgNBReconfComp() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_SgNBReconfComp_t& select_reject_by_MeNB_SgNBReconfComp() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_SgNBReconfComp_t const* get_reject_by_MeNB_SgNBReconfComp() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_SgNBReconfComp_t)]; + char dummy2[sizeof(reject_by_MeNB_SgNBReconfComp_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RetrieveUEContextFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, + ... +} +*/ + +struct RetrieveUEContextFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RetrieveUEContextRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-resumeID CRITICALITY reject TYPE ResumeID PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY reject TYPE ShortMAC-I PRESENCE mandatory}| + { ID id-NewEUTRANCellIdentifier CRITICALITY reject TYPE EUTRANCellIdentifier PRESENCE mandatory}| + {ID id-FailureCellCRNTI CRITICALITY reject TYPE CRNTI PRESENCE optional}| + {ID id-FailureCellPCI CRITICALITY reject TYPE PCI PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=2;} + void select_id_resumeID() { set(id_resumeID); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(id_NewEUTRANCellIdentifier); type=5;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=6;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_resumeID)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_NewEUTRANCellIdentifier)) { type = 5; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 6; return true; } + else if(equal(id_FailureCellPCI)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_resumeID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NewEUTRANCellIdentifier);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=2;} + void select_id_resumeID() { set(reject); type=3;} + void select_id_ShortMAC_I() { set(reject); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(reject); type=5;} + void select_id_FailureCellCRNTI() { set(reject); type=6;} + void select_id_FailureCellPCI() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(2); } + ResumeID& select_id_resumeID() { return set(3); } + ResumeID const* get_id_resumeID() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + EUTRANCellIdentifier& select_id_NewEUTRANCellIdentifier() { return set(5); } + EUTRANCellIdentifier const* get_id_NewEUTRANCellIdentifier() const { return get(5); } + CRNTI& select_id_FailureCellCRNTI() { return set(6); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(6); } + PCI& select_id_FailureCellPCI() { return set(7); } + PCI const* get_id_FailureCellPCI() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_resumeID()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_NewEUTRANCellIdentifier()); return true; + case 6: v(select_id_FailureCellCRNTI()); return true; + case 7: v(select_id_FailureCellPCI()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(EUTRANCellIdentifier)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(ResumeID)]; + char dummy5[sizeof(ShortMAC_I)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_resumeID() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(mandatory); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(mandatory); type=5;} + void select_id_FailureCellCRNTI() { set(optional); type=6;} + void select_id_FailureCellPCI() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextRequest-IEs}}, + ... +} +*/ + +struct RetrieveUEContextRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationRetrieve-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationRetrieve_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(1); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationRetrieve ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-ListRetrieve E-RABs-ToBeSetup-ListRetrieve, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + managBasedMDTallowed ManagementBasedMDTallowed OPTIONAL, + managBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationRetrieve-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationRetrieve : asn::sequence<12, 0, true, 6> +{ + static constexpr const char* name() {return "UE-ContextInformationRetrieve";} + using parent_t = asn::sequence<12, 0, true, 6>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_ListRetrieve_t : E_RABs_ToBeSetup_ListRetrieve + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_ListRetrieve_t";} + using parent_t = E_RABs_ToBeSetup_ListRetrieve; + + }; + e_RABs_ToBeSetup_ListRetrieve_t& ref_e_RABs_ToBeSetup_ListRetrieve() {return e_RABs_ToBeSetup_ListRetrieve;} + e_RABs_ToBeSetup_ListRetrieve_t const& ref_e_RABs_ToBeSetup_ListRetrieve() const {return e_RABs_ToBeSetup_ListRetrieve;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct managBasedMDTallowed_t : ManagementBasedMDTallowed + { + static constexpr const char* name() {return "managBasedMDTallowed_t";} + using parent_t = ManagementBasedMDTallowed; + static constexpr bool optional = true; + + }; + managBasedMDTallowed_t& set_managBasedMDTallowed() { managBasedMDTallowed.setpresent(true); return managBasedMDTallowed;} + managBasedMDTallowed_t const* get_managBasedMDTallowed() const {return managBasedMDTallowed.is_valid() ? &managBasedMDTallowed : nullptr;} + struct managBasedMDTPLMNList_t : MDTPLMNList + { + static constexpr const char* name() {return "managBasedMDTPLMNList_t";} + using parent_t = MDTPLMNList; + static constexpr bool optional = true; + + }; + managBasedMDTPLMNList_t& set_managBasedMDTPLMNList() { managBasedMDTPLMNList.setpresent(true); return managBasedMDTPLMNList;} + managBasedMDTPLMNList_t const* get_managBasedMDTPLMNList() const {return managBasedMDTPLMNList.is_valid() ? &managBasedMDTPLMNList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_ListRetrieve.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + managBasedMDTallowed.clear(); + managBasedMDTPLMNList.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + managBasedMDTallowed_t managBasedMDTallowed; + managBasedMDTPLMNList_t managBasedMDTPLMNList; + iE_Extensions_t iE_Extensions; + +}; +/* +RetrieveUEContextResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformationRetrieve CRITICALITY reject TYPE UE-ContextInformationRetrieve PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(id_UE_ContextInformationRetrieve); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=11;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=12;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=15;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_GUMMEI_ID)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationRetrieve)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_Masked_IMEISV)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_ProSeAuthorized)) { type = 11; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 12; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 13; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 14; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationRetrieve);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_GUMMEI_ID() { set(reject); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(reject); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_Masked_IMEISV() { set(ignore); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_ProSeAuthorized() { set(ignore); type=11;} + void select_id_CriticalityDiagnostics() { set(ignore); type=12;} + void select_id_V2XServicesAuthorized() { set(ignore); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=15;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(3); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + GUMMEI& select_id_GUMMEI_ID() { return set(5); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(5); } + UE_ContextInformationRetrieve& select_id_UE_ContextInformationRetrieve() { return set(6); } + UE_ContextInformationRetrieve const* get_id_UE_ContextInformationRetrieve() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(9); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(11); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(11); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(12); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(12); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(13); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(13); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(14); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(14); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(15); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(15); } + bool is_unknown() const { return type == 16; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_GUMMEI_ID()); return true; + case 6: v(select_id_UE_ContextInformationRetrieve()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_Masked_IMEISV()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_ProSeAuthorized()); return true; + case 12: v(select_id_CriticalityDiagnostics()); return true; + case 13: v(select_id_V2XServicesAuthorized()); return true; + case 14: v(select_id_AerialUEsubscriptionInformation()); return true; + case 15: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 16: if(type != 16) {clear(); asn::base::set();} type = 16; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(GUMMEI)]; + char dummy5[sizeof(Masked_IMEISV)]; + char dummy6[sizeof(ProSeAuthorized)]; + char dummy7[sizeof(SRVCCOperationPossible)]; + char dummy8[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy9[sizeof(TraceActivation)]; + char dummy10[sizeof(UE_ContextInformationRetrieve)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + char dummy13[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_GUMMEI_ID() { set(mandatory); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_Masked_IMEISV() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_ProSeAuthorized() { set(optional); type=11;} + void select_id_CriticalityDiagnostics() { set(optional); type=12;} + void select_id_V2XServicesAuthorized() { set(optional); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=15;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, + ... +} +*/ + +struct RetrieveUEContextResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct SNStatusTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(id_E_RABs_SubjectToStatusTransfer_List); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToStatusTransfer_List)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToStatusTransfer_List& select_id_E_RABs_SubjectToStatusTransfer_List() { return set(3); } + E_RABs_SubjectToStatusTransfer_List const* get_id_E_RABs_SubjectToStatusTransfer_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToStatusTransfer_List()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SNStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, + ... +} +*/ + +struct SNStatusTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SNStatusTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-UE-SecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBSecurityKey CRITICALITY reject TYPE SeNBSecurityKey PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-List CRITICALITY reject TYPE E-RABs-ToBeAdded-List PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY reject TYPE MeNBtoSeNBContainer PRESENCE mandatory}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_UE_SecurityCapabilities() { set(id_UE_SecurityCapabilities); type=2;} + void select_id_SeNBSecurityKey() { set(id_SeNBSecurityKey); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(id_SeNBUEAggregateMaximumBitRate); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(id_E_RABs_ToBeAdded_List); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_UE_SecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SeNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SeNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_E_RABs_ToBeAdded_List)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 11; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UE_SecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SeNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SeNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_UE_SecurityCapabilities() { set(reject); type=2;} + void select_id_SeNBSecurityKey() { set(reject); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(reject); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UESecurityCapabilities& select_id_UE_SecurityCapabilities() { return set(2); } + UESecurityCapabilities const* get_id_UE_SecurityCapabilities() const { return get(2); } + SeNBSecurityKey& select_id_SeNBSecurityKey() { return set(3); } + SeNBSecurityKey const* get_id_SeNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SeNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SeNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + E_RABs_ToBeAdded_List& select_id_E_RABs_ToBeAdded_List() { return set(6); } + E_RABs_ToBeAdded_List const* get_id_E_RABs_ToBeAdded_List() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(9); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(11); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(11); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(12); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_UE_SecurityCapabilities()); return true; + case 3: v(select_id_SeNBSecurityKey()); return true; + case 4: v(select_id_SeNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_E_RABs_ToBeAdded_List()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_ExpectedUEBehaviour()); return true; + case 12: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(E_RABs_ToBeAdded_List)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(MeNBtoSeNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SeNBSecurityKey)]; + char dummy7[sizeof(UEAggregateMaximumBitRate)]; + char dummy8[sizeof(UESecurityCapabilities)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_UE_SecurityCapabilities() { set(conditional); type=2;} + void select_id_SeNBSecurityKey() { set(conditional); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(mandatory); type=6;} + void select_id_MeNBtoSeNBContainer() { set(mandatory); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_ExpectedUEBehaviour() { set(optional); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-List CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY reject TYPE SeNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(id_E_RABs_Admitted_ToBeAdded_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_GW_TransportLayerAddress() { set(id_GW_TransportLayerAddress); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(id_SIPTO_L_GW_TransportLayerAddress); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(id_Tunnel_Information_for_BBF); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_GW_TransportLayerAddress)) { type = 7; return true; } + else if(equal(id_SIPTO_L_GW_TransportLayerAddress)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_Tunnel_Information_for_BBF)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_GW_TransportLayerAddress);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SIPTO_L_GW_TransportLayerAddress);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Tunnel_Information_for_BBF);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SeNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_GW_TransportLayerAddress() { set(ignore); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_List& select_id_E_RABs_Admitted_ToBeAdded_List() { return set(3); } + E_RABs_Admitted_ToBeAdded_List const* get_id_E_RABs_Admitted_ToBeAdded_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(5); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + TransportLayerAddress& select_id_GW_TransportLayerAddress() { return set(7); } + TransportLayerAddress const* get_id_GW_TransportLayerAddress() const { return get(7); } + TransportLayerAddress& select_id_SIPTO_L_GW_TransportLayerAddress() { return set(8); } + TransportLayerAddress const* get_id_SIPTO_L_GW_TransportLayerAddress() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + TunnelInformation& select_id_Tunnel_Information_for_BBF() { return set(11); } + TunnelInformation const* get_id_Tunnel_Information_for_BBF() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SeNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_GW_TransportLayerAddress()); return true; + case 8: v(select_id_SIPTO_L_GW_TransportLayerAddress()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_Tunnel_Information_for_BBF()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_List)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(TransportLayerAddress)]; + char dummy6[sizeof(TunnelInformation)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SeNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_GW_TransportLayerAddress() { set(optional); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(id_E_RABs_SubjectToCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToCounterCheck_List& select_id_E_RABs_SubjectToCounterCheck_List() { return set(3); } + E_RABs_SubjectToCounterCheck_List const* get_id_E_RABs_SubjectToCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheck_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SeNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(3); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_MeNBtoSeNBContainer()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeNBtoSeNBContainer)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SeNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(4); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSeNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SeNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSeNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextInformationSeNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationSeNBModReq ::= SEQUENCE { + uE-SecurityCapabilities UESecurityCapabilities OPTIONAL, + seNB-SecurityKey SeNBSecurityKey OPTIONAL, + seNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-List-ModReq OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-List-ModReq OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-List-ModReq OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSeNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationSeNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformationSeNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct uE_SecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uE_SecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + static constexpr bool optional = true; + + }; + uE_SecurityCapabilities_t& set_uE_SecurityCapabilities() { uE_SecurityCapabilities.setpresent(true); return uE_SecurityCapabilities;} + uE_SecurityCapabilities_t const* get_uE_SecurityCapabilities() const {return uE_SecurityCapabilities.is_valid() ? &uE_SecurityCapabilities : nullptr;} + struct seNB_SecurityKey_t : SeNBSecurityKey + { + static constexpr const char* name() {return "seNB_SecurityKey_t";} + using parent_t = SeNBSecurityKey; + static constexpr bool optional = true; + + }; + seNB_SecurityKey_t& set_seNB_SecurityKey() { seNB_SecurityKey.setpresent(true); return seNB_SecurityKey;} + seNB_SecurityKey_t const* get_seNB_SecurityKey() const {return seNB_SecurityKey.is_valid() ? &seNB_SecurityKey : nullptr;} + struct seNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "seNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + seNBUEAggregateMaximumBitRate_t& set_seNBUEAggregateMaximumBitRate() { seNBUEAggregateMaximumBitRate.setpresent(true); return seNBUEAggregateMaximumBitRate;} + seNBUEAggregateMaximumBitRate_t const* get_seNBUEAggregateMaximumBitRate() const {return seNBUEAggregateMaximumBitRate.is_valid() ? &seNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + uE_SecurityCapabilities.clear(); + seNB_SecurityKey.clear(); + seNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + uE_SecurityCapabilities_t uE_SecurityCapabilities; + seNB_SecurityKey_t seNB_SecurityKey; + seNBUEAggregateMaximumBitRate_t seNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-UE-ContextInformationSeNBModReq CRITICALITY reject TYPE UE-ContextInformationSeNBModReq PRESENCE optional}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(id_UE_ContextInformationSeNBModReq); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationSeNBModReq)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationSeNBModReq);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + UE_ContextInformationSeNBModReq& select_id_UE_ContextInformationSeNBModReq() { return set(6); } + UE_ContextInformationSeNBModReq const* get_id_UE_ContextInformationSeNBModReq() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_UE_ContextInformationSeNBModReq()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(PLMN_Identity)]; + char dummy5[sizeof(SCGChangeIndication)]; + char dummy6[sizeof(UE_ContextInformationSeNBModReq)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(optional); type=6;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SeNBModificationRequest-IEs}}, + ... +} +*/ + +struct SeNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-ModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(id_E_RABs_Admitted_ToBeAdded_ModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(id_E_RABs_Admitted_ToBeModified_ModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(id_E_RABs_Admitted_ToBeReleased_ModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_ModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_ModAckList& select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_ModAckList const* get_id_E_RABs_Admitted_ToBeAdded_ModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_ModAckList& select_id_E_RABs_Admitted_ToBeModified_ModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_ModAckList const* get_id_E_RABs_Admitted_ToBeModified_ModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_ModAckList& select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_ModAckList const* get_id_E_RABs_Admitted_ToBeReleased_ModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(7); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_ModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SeNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_ModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_ModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_ModAckList)]; + char dummy6[sizeof(SeNBtoMeNBContainer)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-ModReqd CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqd PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(id_E_RABs_ToBeReleased_ModReqd); type=5;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_ModReqd)) { type = 5; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqd);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(ignore); type=5;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_ModReqd& select_id_E_RABs_ToBeReleased_ModReqd() { return set(5); } + E_RABs_ToBeReleased_ModReqd const* get_id_E_RABs_ToBeReleased_ModReqd() const { return get(5); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(6); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_ModReqd()); return true; + case 6: v(select_id_SeNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_ModReqd)]; + char dummy3[sizeof(SCGChangeIndication)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(optional); type=5;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequired-IEs}}, + ... +} +*/ + +struct SeNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSeNBReconfComp CRITICALITY ignore TYPE ResponseInformationSeNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(id_ResponseInformationSeNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSeNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSeNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSeNBReconfComp& select_id_ResponseInformationSeNBReconfComp() { return set(3); } + ResponseInformationSeNBReconfComp const* get_id_ResponseInformationSeNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSeNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSeNBReconfComp)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SeNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-List-RelConf CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelConf PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(id_E_RABs_ToBeReleased_List_RelConf); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelConf)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelConf);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_List_RelConf& select_id_E_RABs_ToBeReleased_List_RelConf() { return set(3); } + E_RABs_ToBeReleased_List_RelConf const* get_id_E_RABs_ToBeReleased_List_RelConf() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_List_RelConf()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelConf)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SeNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-List-RelReq CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelReq PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MakeBeforeBreakIndicator CRITICALITY ignore TYPE MakeBeforeBreakIndicator PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(id_E_RABs_ToBeReleased_List_RelReq); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(id_MakeBeforeBreakIndicator); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelReq)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_MakeBeforeBreakIndicator)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelReq);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MakeBeforeBreakIndicator);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_List_RelReq& select_id_E_RABs_ToBeReleased_List_RelReq() { return set(4); } + E_RABs_ToBeReleased_List_RelReq const* get_id_E_RABs_ToBeReleased_List_RelReq() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + MakeBeforeBreakIndicator& select_id_MakeBeforeBreakIndicator() { return set(8); } + MakeBeforeBreakIndicator const* get_id_MakeBeforeBreakIndicator() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_List_RelReq()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_MakeBeforeBreakIndicator()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelReq)]; + char dummy3[sizeof(MakeBeforeBreakIndicator)]; + char dummy4[sizeof(UE_ContextKeptIndicator)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SecondaryRATDataUsageReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SecondaryRATUsageReportList CRITICALITY reject TYPE SecondaryRATUsageReportList PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SecondaryRATDataUsageReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SecondaryRATUsageReportList() { set(id_SecondaryRATUsageReportList); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SecondaryRATUsageReportList)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReportList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SecondaryRATUsageReportList() { set(reject); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SecondaryRATUsageReportList& select_id_SecondaryRATUsageReportList() { return set(3); } + SecondaryRATUsageReportList const* get_id_SecondaryRATUsageReportList() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SecondaryRATUsageReportList()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReportList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SecondaryRATUsageReportList() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, + ... +} +*/ + +struct SecondaryRATDataUsageReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SecondaryRATDataUsageReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBActivityNotification-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-UEContextLevelUserPlaneActivity CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional}| + { ID id-ERABActivityNotifyItemList CRITICALITY ignore TYPE ERABActivityNotifyItemList PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBActivityNotification_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(id_UEContextLevelUserPlaneActivity); type=3;} + void select_id_ERABActivityNotifyItemList() { set(id_ERABActivityNotifyItemList); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_UEContextLevelUserPlaneActivity)) { type = 3; return true; } + else if(equal(id_ERABActivityNotifyItemList)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UEContextLevelUserPlaneActivity);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ERABActivityNotifyItemList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(ignore); type=3;} + void select_id_ERABActivityNotifyItemList() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + UserPlaneTrafficActivityReport& select_id_UEContextLevelUserPlaneActivity() { return set(3); } + UserPlaneTrafficActivityReport const* get_id_UEContextLevelUserPlaneActivity() const { return get(3); } + ERABActivityNotifyItemList& select_id_ERABActivityNotifyItemList() { return set(4); } + ERABActivityNotifyItemList const* get_id_ERABActivityNotifyItemList() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_UEContextLevelUserPlaneActivity()); return true; + case 4: v(select_id_ERABActivityNotifyItemList()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ERABActivityNotifyItemList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + char dummy5[sizeof(UserPlaneTrafficActivityReport)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(optional); type=3;} + void select_id_ERABActivityNotifyItemList() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBActivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBActivityNotification-IEs}}, + ... +} +*/ + +struct SgNBActivityNotification : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBActivityNotification";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-NRUESecurityCapabilities CRITICALITY reject TYPE NRUESecurityCapabilities PRESENCE mandatory}| + { ID id-SgNBSecurityKey CRITICALITY reject TYPE SgNBSecurityKey PRESENCE mandatory}| + { ID id-SgNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-SgNBAddReqList CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReqList PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-SGNB-Addition-Trigger-Ind CRITICALITY reject TYPE SGNB-Addition-Trigger-Ind PRESENCE optional}| + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| + { ID id-MeNBCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}, + ... +} +*/ + +struct SgNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=2;} + void select_id_SgNBSecurityKey() { set(id_SgNBSecurityKey); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(id_SgNBUEAggregateMaximumBitRate); type=4;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=5;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(id_E_RABs_ToBeAdded_SgNBAddReqList); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=11;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(id_SGNB_Addition_Trigger_Ind); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=15;} + void select_id_MeNBCell_ID() { set(id_MeNBCell_ID); type=16;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SgNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SgNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_SelectedPLMN)) { type = 5; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 6; return true; } + else if(equal(id_E_RABs_ToBeAdded_SgNBAddReqList)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 12; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 13; return true; } + else if(equal(id_SGNB_Addition_Trigger_Ind)) { type = 14; return true; } + else if(equal(id_SubscriberProfileIDforRFP)) { type = 15; return true; } + else if(equal(id_MeNBCell_ID)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SgNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SgNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReqList);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_SGNB_Addition_Trigger_Ind);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_MeNBCell_ID);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_NRUESecurityCapabilities() { set(reject); type=2;} + void select_id_SgNBSecurityKey() { set(reject); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_SelectedPLMN() { set(ignore); type=5;} + void select_id_HandoverRestrictionList() { set(ignore); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=11;} + void select_id_RequestedSplitSRBs() { set(reject); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(reject); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=15;} + void select_id_MeNBCell_ID() { set(reject); type=16;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(2); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(2); } + SgNBSecurityKey& select_id_SgNBSecurityKey() { return set(3); } + SgNBSecurityKey const* get_id_SgNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SgNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SgNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_SelectedPLMN() { return set(5); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(5); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(6); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(6); } + E_RABs_ToBeAdded_SgNBAddReqList& select_id_E_RABs_ToBeAdded_SgNBAddReqList() { return set(7); } + E_RABs_ToBeAdded_SgNBAddReqList const* get_id_E_RABs_ToBeAdded_SgNBAddReqList() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(9); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(11); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(12); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(13); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(13); } + SGNB_Addition_Trigger_Ind& select_id_SGNB_Addition_Trigger_Ind() { return set(14); } + SGNB_Addition_Trigger_Ind const* get_id_SGNB_Addition_Trigger_Ind() const { return get(14); } + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(15); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(15); } + ECGI& select_id_MeNBCell_ID() { return set(16); } + ECGI const* get_id_MeNBCell_ID() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_NRUESecurityCapabilities()); return true; + case 3: v(select_id_SgNBSecurityKey()); return true; + case 4: v(select_id_SgNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_SelectedPLMN()); return true; + case 6: v(select_id_HandoverRestrictionList()); return true; + case 7: v(select_id_E_RABs_ToBeAdded_SgNBAddReqList()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 12: v(select_id_RequestedSplitSRBs()); return true; + case 13: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 14: v(select_id_SGNB_Addition_Trigger_Ind()); return true; + case 15: v(select_id_SubscriberProfileIDforRFP()); return true; + case 16: v(select_id_MeNBCell_ID()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(E_RABs_ToBeAdded_SgNBAddReqList)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(HandoverRestrictionList)]; + char dummy5[sizeof(MeNBResourceCoordinationInformation)]; + char dummy6[sizeof(MeNBtoSgNBContainer)]; + char dummy7[sizeof(NRUESecurityCapabilities)]; + char dummy8[sizeof(PLMN_Identity)]; + char dummy9[sizeof(SGNB_Addition_Trigger_Ind)]; + char dummy10[sizeof(SgNBSecurityKey)]; + char dummy11[sizeof(SgNB_UE_X2AP_ID)]; + char dummy12[sizeof(SplitSRBs)]; + char dummy13[sizeof(SubscriberProfileIDforRFP)]; + char dummy14[sizeof(UEAggregateMaximumBitRate)]; + char dummy15[sizeof(UE_X2AP_ID)]; + char dummy16[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_NRUESecurityCapabilities() { set(mandatory); type=2;} + void select_id_SgNBSecurityKey() { set(mandatory); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_SelectedPLMN() { set(optional); type=5;} + void select_id_HandoverRestrictionList() { set(optional); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(mandatory); type=7;} + void select_id_MeNBtoSgNBContainer() { set(mandatory); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=11;} + void select_id_RequestedSplitSRBs() { set(optional); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(optional); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=15;} + void select_id_MeNBCell_ID() { set(mandatory); type=16;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(mandatory)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(mandatory)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(mandatory);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(mandatory);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_AdmittedSplitSRBs() { set(reject); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(8); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_AdmittedSplitSRBs()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)]; + char dummy4[sizeof(RRC_Config_Ind)]; + char dummy5[sizeof(SgNBResourceCoordinationInformation)]; + char dummy6[sizeof(SgNB_UE_X2AP_ID)]; + char dummy7[sizeof(SgNBtoMeNBContainer)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SgNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_AdmittedSplitSRBs() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBChaConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(id_E_RABs_ToBeReleased_SgNBChaConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBChaConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBChaConfList& select_id_E_RABs_ToBeReleased_SgNBChaConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBChaConfList const* get_id_E_RABs_ToBeReleased_SgNBChaConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBChaConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBChaConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeConfirm-IEs}}, + ... +} +*/ + +struct SgNBChangeConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRefuse-IEs}}, + ... +} +*/ + +struct SgNBChangeRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Target-SgNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Target_SgNB_ID() { set(id_Target_SgNB_ID); type=3;} + void select_id_Cause() { set(id_Cause); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Target_SgNB_ID)) { type = 3; return true; } + else if(equal(id_Cause)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Target_SgNB_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Target_SgNB_ID() { set(reject); type=3;} + void select_id_Cause() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + GlobalGNB_ID& select_id_Target_SgNB_ID() { return set(3); } + GlobalGNB_ID const* get_id_Target_SgNB_ID() const { return get(3); } + Cause& select_id_Cause() { return set(4); } + Cause const* get_id_Cause() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Target_SgNB_ID()); return true; + case 4: v(select_id_Cause()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(GlobalGNB_ID)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(SgNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Target_SgNB_ID() { set(mandatory); type=3;} + void select_id_Cause() { set(mandatory); type=4;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRequired-IEs}}, + ... +} +*/ + +struct SgNBChangeRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToSgNBCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(id_E_RABs_SubjectToSgNBCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToSgNBCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToSgNBCounterCheck_List& select_id_E_RABs_SubjectToSgNBCounterCheck_List() { return set(3); } + E_RABs_SubjectToSgNBCounterCheck_List const* get_id_E_RABs_SubjectToSgNBCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToSgNBCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SgNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-AdmittedToBeModified-SgNBModConfList CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConfList PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(id_E_RABs_AdmittedToBeModified_SgNBModConfList); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_AdmittedToBeModified_SgNBModConfList& select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { return set(3); } + E_RABs_AdmittedToBeModified_SgNBModConfList const* get_id_E_RABs_AdmittedToBeModified_SgNBModConfList() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(7); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConfList()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_AdmittedToBeModified_SgNBModConfList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(SgNB_UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(optional); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SgNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SgNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSgNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore EXTENSION SubscriberProfileIDforRFP PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationSgNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SubscriberProfileIDforRFP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(1); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SubscriberProfileIDforRFP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SubscriberProfileIDforRFP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation-SgNBModReq ::= SEQUENCE { + nRUE-SecurityCapabilities NRUESecurityCapabilities OPTIONAL, + sgNB-SecurityKey SgNBSecurityKey OPTIONAL, + sgNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-SgNBModReq-List OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-SgNBModReq-List OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-SgNBModReq-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSgNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation_SgNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformation-SgNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct nRUE_SecurityCapabilities_t : NRUESecurityCapabilities + { + static constexpr const char* name() {return "nRUE_SecurityCapabilities_t";} + using parent_t = NRUESecurityCapabilities; + static constexpr bool optional = true; + + }; + nRUE_SecurityCapabilities_t& set_nRUE_SecurityCapabilities() { nRUE_SecurityCapabilities.setpresent(true); return nRUE_SecurityCapabilities;} + nRUE_SecurityCapabilities_t const* get_nRUE_SecurityCapabilities() const {return nRUE_SecurityCapabilities.is_valid() ? &nRUE_SecurityCapabilities : nullptr;} + struct sgNB_SecurityKey_t : SgNBSecurityKey + { + static constexpr const char* name() {return "sgNB_SecurityKey_t";} + using parent_t = SgNBSecurityKey; + static constexpr bool optional = true; + + }; + sgNB_SecurityKey_t& set_sgNB_SecurityKey() { sgNB_SecurityKey.setpresent(true); return sgNB_SecurityKey;} + sgNB_SecurityKey_t const* get_sgNB_SecurityKey() const {return sgNB_SecurityKey.is_valid() ? &sgNB_SecurityKey : nullptr;} + struct sgNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "sgNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + sgNBUEAggregateMaximumBitRate_t& set_sgNBUEAggregateMaximumBitRate() { sgNBUEAggregateMaximumBitRate.setpresent(true); return sgNBUEAggregateMaximumBitRate;} + sgNBUEAggregateMaximumBitRate_t const* get_sgNBUEAggregateMaximumBitRate() const {return sgNBUEAggregateMaximumBitRate.is_valid() ? &sgNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + nRUE_SecurityCapabilities.clear(); + sgNB_SecurityKey.clear(); + sgNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + nRUE_SecurityCapabilities_t nRUE_SecurityCapabilities; + sgNB_SecurityKey_t sgNB_SecurityKey; + sgNBUEAggregateMaximumBitRate_t sgNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional}| + { ID id-UE-ContextInformation-SgNBModReq CRITICALITY reject TYPE UE-ContextInformation-SgNBModReq PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RequestedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=4;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=5;} + void select_id_SCGConfigurationQuery() { set(id_SCGConfigurationQuery); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(id_UE_ContextInformation_SgNBModReq); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=10;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(id_RequestedSplitSRBsrelease); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SelectedPLMN)) { type = 4; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 5; return true; } + else if(equal(id_SCGConfigurationQuery)) { type = 6; return true; } + else if(equal(id_UE_ContextInformation_SgNBModReq)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBsrelease)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SCGConfigurationQuery);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextInformation_SgNBModReq);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBsrelease);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SelectedPLMN() { set(ignore); type=4;} + void select_id_HandoverRestrictionList() { set(ignore); type=5;} + void select_id_SCGConfigurationQuery() { set(ignore); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_RequestedSplitSRBs() { set(ignore); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(ignore); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PLMN_Identity& select_id_SelectedPLMN() { return set(4); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(4); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(5); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(5); } + SCGConfigurationQuery& select_id_SCGConfigurationQuery() { return set(6); } + SCGConfigurationQuery const* get_id_SCGConfigurationQuery() const { return get(6); } + UE_ContextInformation_SgNBModReq& select_id_UE_ContextInformation_SgNBModReq() { return set(7); } + UE_ContextInformation_SgNBModReq const* get_id_UE_ContextInformation_SgNBModReq() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(10); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBsrelease() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SelectedPLMN()); return true; + case 5: v(select_id_HandoverRestrictionList()); return true; + case 6: v(select_id_SCGConfigurationQuery()); return true; + case 7: v(select_id_UE_ContextInformation_SgNBModReq()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 11: v(select_id_RequestedSplitSRBs()); return true; + case 12: v(select_id_RequestedSplitSRBsrelease()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(HandoverRestrictionList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SCGConfigurationQuery)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_ContextInformation_SgNBModReq)]; + char dummy10[sizeof(UE_X2AP_ID)]; + char dummy11[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SelectedPLMN() { set(optional); type=4;} + void select_id_HandoverRestrictionList() { set(optional); type=5;} + void select_id_SCGConfigurationQuery() { set(optional); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(optional); type=7;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_RequestedSplitSRBs() { set(optional); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SgNBModificationRequest-IEs}}, + ... +} +*/ + +struct SgNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-AdmittedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=10;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(id_AdmittedSplitSRBsrelease); type=12;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=13;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 11; return true; } + else if(equal(id_AdmittedSplitSRBsrelease)) { type = 12; return true; } + else if(equal(id_RRCConfigIndication)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBsrelease);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_AdmittedSplitSRBs() { set(ignore); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(ignore); type=12;} + void select_id_RRCConfigIndication() { set(reject); type=13;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_SgNBModAckList& select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(7); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(10); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_AdmittedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_AdmittedSplitSRBsrelease() const { return get(12); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(13); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(13); } + bool is_unknown() const { return type == 14; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SgNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 11: v(select_id_AdmittedSplitSRBs()); return true; + case 12: v(select_id_AdmittedSplitSRBsrelease()); return true; + case 13: v(select_id_RRCConfigIndication()); return true; + case 14: if(type != 14) {clear(); asn::base::set();} type = 14; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_SgNBModAckList)]; + char dummy6[sizeof(RRC_Config_Ind)]; + char dummy7[sizeof(SgNBResourceCoordinationInformation)]; + char dummy8[sizeof(SgNB_UE_X2AP_ID)]; + char dummy9[sizeof(SgNBtoMeNBContainer)]; + char dummy10[sizeof(SplitSRBs)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_AdmittedSplitSRBs() { set(optional); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(optional); type=12;} + void select_id_RRCConfigIndication() { set(optional); type=13;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-E-RABs-ToBeModified-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_PDCPChangeIndication() { set(id_PDCPChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(id_E_RABs_ToBeReleased_SgNBModReqdList); type=5;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(id_E_RABs_ToBeModified_SgNBModReqdList); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_PDCPChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBModReqdList)) { type = 5; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_E_RABs_ToBeModified_SgNBModReqdList)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_PDCPChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqdList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqdList);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_PDCPChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(ignore); type=5;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(ignore); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PDCPChangeIndication& select_id_PDCPChangeIndication() { return set(4); } + PDCPChangeIndication const* get_id_PDCPChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_SgNBModReqdList& select_id_E_RABs_ToBeReleased_SgNBModReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBModReqdList const* get_id_E_RABs_ToBeReleased_SgNBModReqdList() const { return get(5); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(6); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + E_RABs_ToBeModified_SgNBModReqdList& select_id_E_RABs_ToBeModified_SgNBModReqdList() { return set(8); } + E_RABs_ToBeModified_SgNBModReqdList const* get_id_E_RABs_ToBeModified_SgNBModReqdList() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_PDCPChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBModReqdList()); return true; + case 6: v(select_id_SgNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_E_RABs_ToBeModified_SgNBModReqdList()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeModified_SgNBModReqdList)]; + char dummy3[sizeof(E_RABs_ToBeReleased_SgNBModReqdList)]; + char dummy4[sizeof(PDCPChangeIndication)]; + char dummy5[sizeof(RRC_Config_Ind)]; + char dummy6[sizeof(SgNBResourceCoordinationInformation)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SgNBtoMeNBContainer)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_PDCPChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(optional); type=5;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequired-IEs}}, + ... +} +*/ + +struct SgNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSgNBReconfComp CRITICALITY ignore TYPE ResponseInformationSgNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(id_ResponseInformationSgNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSgNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSgNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSgNBReconfComp& select_id_ResponseInformationSgNBReconfComp() { return set(3); } + ResponseInformationSgNBReconfComp const* get_id_ResponseInformationSgNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSgNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSgNBReconfComp)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SgNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(id_E_RABs_ToBeReleased_SgNBRelConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBRelConfList& select_id_E_RABs_ToBeReleased_SgNBRelConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBRelConfList const* get_id_E_RABs_ToBeReleased_SgNBRelConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBRelConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SgNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelReqList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqList PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(id_E_RABs_ToBeReleased_SgNBRelReqList); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqList)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_SgNBRelReqList& select_id_E_RABs_ToBeReleased_SgNBRelReqList() { return set(4); } + E_RABs_ToBeReleased_SgNBRelReqList const* get_id_E_RABs_ToBeReleased_SgNBRelReqList() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(7); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_SgNBRelReqList()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBtoSgNBContainer()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqList)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestReject-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-ToBeReleased-SgNBRelReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqdList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(id_E_RABs_ToBeReleased_SgNBRelReqdList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqdList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqdList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_ToBeReleased_SgNBRelReqdList& select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBRelReqdList const* get_id_E_RABs_ToBeReleased_SgNBRelReqdList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBRelReqdList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqdList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SIPTO-BearerDeactivationIndication CRITICALITY ignore TYPE SIPTOBearerDeactivationIndication PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct UEContextRelease_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(id_SIPTO_BearerDeactivationIndication); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SIPTO_BearerDeactivationIndication)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SIPTO_BearerDeactivationIndication);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(ignore); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(4); } + SIPTOBearerDeactivationIndication& select_id_SIPTO_BearerDeactivationIndication() { return set(5); } + SIPTOBearerDeactivationIndication const* get_id_SIPTO_BearerDeactivationIndication() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SIPTO_BearerDeactivationIndication()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SIPTOBearerDeactivationIndication)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEContextRelease ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, + ... +} +*/ + +struct UEContextRelease : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "UEContextRelease";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2AP-Message ::= OCTET STRING +*/ + +struct X2AP_Message : asn::ostring<> +{ + static constexpr const char* name() {return "X2AP-Message";} + using parent_t = asn::ostring<>; + +}; + +/* +X2APMessageTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RNL-Header CRITICALITY reject TYPE RNL-Header PRESENCE mandatory}| + { ID id-x2APMessage CRITICALITY reject TYPE X2AP-Message PRESENCE optional}, + ... +} +*/ + +struct X2APMessageTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(id_RNL_Header); type=1;} + void select_id_x2APMessage() { set(id_x2APMessage); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RNL_Header)) { type = 1; return true; } + else if(equal(id_x2APMessage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RNL_Header);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_x2APMessage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(reject); type=1;} + void select_id_x2APMessage() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RNL_Header& select_id_RNL_Header() { return set(1); } + RNL_Header const* get_id_RNL_Header() const { return get(1); } + X2AP_Message& select_id_x2APMessage() { return set(2); } + X2AP_Message const* get_id_x2APMessage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RNL_Header()); return true; + case 2: v(select_id_x2APMessage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RNL_Header)]; + char dummy2[sizeof(X2AP_Message)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(mandatory); type=1;} + void select_id_x2APMessage() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2APMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2APMessageTransfer-IEs}}, + ... +} +*/ + +struct X2APMessageTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2APMessageTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2Release-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, +... +} +*/ + +struct X2Release_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2Release ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2Release-IEs}}, + ... +} +*/ + +struct X2Release : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2Release";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalFailure-IEs}}, + ... +} +*/ + +struct X2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-X2RemovalThreshold CRITICALITY reject TYPE X2BenefitValue PRESENCE optional}, +... +} +*/ + +struct X2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_X2RemovalThreshold() { set(id_X2RemovalThreshold); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_X2RemovalThreshold)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_X2RemovalThreshold);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_X2RemovalThreshold() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + X2BenefitValue& select_id_X2RemovalThreshold() { return set(2); } + X2BenefitValue const* get_id_X2RemovalThreshold() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_X2RemovalThreshold()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(X2BenefitValue)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_X2RemovalThreshold() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalRequest-IEs}}, + ... +} +*/ + +struct X2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalResponse-IEs}}, + ... +} +*/ + +struct X2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupFailure-IEs X2AP-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 }, + + ... +} +*/ + +struct X2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, + ... +} +*/ + +struct X2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, +... +} +*/ + +struct X2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_LHN_ID() { set(id_LHN_ID); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_LHN_ID)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_LHN_ID() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + LHN_ID& select_id_LHN_ID() { return set(4); } + LHN_ID const* get_id_LHN_ID() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_LHN_ID()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GUGroupIDList)]; + char dummy2[sizeof(GlobalENB_ID)]; + char dummy3[sizeof(LHN_ID)]; + char dummy4[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_LHN_ID() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, + ... +} +*/ + +struct X2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, + ... +} +*/ + +struct X2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_LHN_ID() { set(id_LHN_ID); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_LHN_ID)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_LHN_ID() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + LHN_ID& select_id_LHN_ID() { return set(5); } + LHN_ID const* get_id_LHN_ID() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_LHN_ID()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(GlobalENB_ID)]; + char dummy4[sizeof(LHN_ID)]; + char dummy5[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_LHN_ID() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, + ... +} +*/ + +struct X2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..5fbef04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp @@ -0,0 +1,1537 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" + +/* +X2AP-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] +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { + X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + HandoverRequest& select_id_handoverPreparation() { return set(1); } + HandoverRequest const* get_id_handoverPreparation() const { return get(1); } + ResetRequest& select_id_reset() { return set(2); } + ResetRequest const* get_id_reset() const { return get(2); } + X2SetupRequest& select_id_x2Setup() { return set(3); } + X2SetupRequest const* get_id_x2Setup() const { return get(3); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeRequest& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationRequest& select_id_cellActivation() { return set(7); } + CellActivationRequest const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalRequest& select_id_x2Removal() { return set(12); } + X2RemovalRequest const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextRequest& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeRequired& select_id_sgNBChange() { return set(19); } + SgNBChangeRequired const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationRequest& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetRequired& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalRequest& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get(25); } + SNStatusTransfer& select_id_snStatusTransfer() { return set(26); } + SNStatusTransfer const* get_id_snStatusTransfer() const { return get(26); } + UEContextRelease& select_id_uEContextRelease() { return set(27); } + UEContextRelease const* get_id_uEContextRelease() const { return get(27); } + HandoverCancel& select_id_handoverCancel() { return set(28); } + HandoverCancel const* get_id_handoverCancel() const { return get(28); } + ErrorIndication& select_id_errorIndication() { return set(29); } + ErrorIndication const* get_id_errorIndication() const { return get(29); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(30); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(30); } + LoadInformation& select_id_loadIndication() { return set(31); } + LoadInformation const* get_id_loadIndication() const { return get(31); } + PrivateMessage& select_id_privateMessage() { return set(32); } + PrivateMessage const* get_id_privateMessage() const { return get(32); } + RLFIndication& select_id_rLFIndication() { return set(33); } + RLFIndication const* get_id_rLFIndication() const { return get(33); } + HandoverReport& select_id_handoverReport() { return set(34); } + HandoverReport const* get_id_handoverReport() const { return get(34); } + X2Release& select_id_x2Release() { return set(35); } + X2Release const* get_id_x2Release() const { return get(35); } + X2APMessageTransfer& select_id_x2APMessageTransfer() { return set(36); } + X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get(36); } + SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set(37); } + SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get(37); } + SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set(38); } + SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get(38); } + SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set(39); } + SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get(39); } + SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set(40); } + SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get(40); } + SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set(41); } + SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get(41); } + RRCTransfer& select_id_rRCTransfer() { return set(42); } + RRCTransfer const* get_id_rRCTransfer() const { return get(42); } + SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set(43); } + SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get(43); } + SgNBActivityNotification& select_id_SgNBActivityNotification() { return set(44); } + SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get(44); } + DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set(45); } + DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get(45); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + case 26: var.destroy(); break; + case 27: var.destroy(); break; + case 28: var.destroy(); break; + case 29: var.destroy(); break; + case 30: var.destroy(); break; + case 31: var.destroy(); break; + case 32: var.destroy(); break; + case 33: var.destroy(); break; + case 34: var.destroy(); break; + case 35: var.destroy(); break; + case 36: var.destroy(); break; + case 37: var.destroy(); break; + case 38: var.destroy(); break; + case 39: var.destroy(); break; + case 40: var.destroy(); break; + case 41: var.destroy(); break; + case 42: var.destroy(); break; + case 43: var.destroy(); break; + case 44: var.destroy(); break; + case 45: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + v.template operator()(26); + v.template operator()(27); + v.template operator()(28); + v.template operator()(29); + v.template operator()(30); + v.template operator()(31); + v.template operator()(32); + v.template operator()(33); + v.template operator()(34); + v.template operator()(35); + v.template operator()(36); + v.template operator()(37); + v.template operator()(38); + v.template operator()(39); + v.template operator()(40); + v.template operator()(41); + v.template operator()(42); + v.template operator()(43); + v.template operator()(44); + v.template operator()(45); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 26: v(select_id_snStatusTransfer()); return true; + case 27: v(select_id_uEContextRelease()); return true; + case 28: v(select_id_handoverCancel()); return true; + case 29: v(select_id_errorIndication()); return true; + case 30: v(select_id_resourceStatusReporting()); return true; + case 31: v(select_id_loadIndication()); return true; + case 32: v(select_id_privateMessage()); return true; + case 33: v(select_id_rLFIndication()); return true; + case 34: v(select_id_handoverReport()); return true; + case 35: v(select_id_x2Release()); return true; + case 36: v(select_id_x2APMessageTransfer()); return true; + case 37: v(select_id_seNBReconfigurationCompletion()); return true; + case 38: v(select_id_meNBinitiatedSeNBRelease()); return true; + case 39: v(select_id_seNBCounterCheck()); return true; + case 40: v(select_id_sgNBReconfigurationCompletion()); return true; + case 41: v(select_id_sgNBCounterCheck()); return true; + case 42: v(select_id_rRCTransfer()); return true; + case 43: v(select_id_secondaryRATDataUsageReport()); return true; + case 44: v(select_id_SgNBActivityNotification()); return true; + case 45: v(select_id_dataForwardingAddressIndication()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + case 26: v(var.as()); return true; + case 27: v(var.as()); return true; + case 28: v(var.as()); return true; + case 29: v(var.as()); return true; + case 30: v(var.as()); return true; + case 31: v(var.as()); return true; + case 32: v(var.as()); return true; + case 33: v(var.as()); return true; + case 34: v(var.as()); return true; + case 35: v(var.as()); return true; + case 36: v(var.as()); return true; + case 37: v(var.as()); return true; + case 38: v(var.as()); return true; + case 39: v(var.as()); return true; + case 40: v(var.as()); return true; + case 41: v(var.as()); return true; + case 42: v(var.as()); return true; + case 43: v(var.as()); return true; + case 44: v(var.as()); return true; + case 45: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationRequest)]; + char dummy2[sizeof(DataForwardingAddressIndication)]; + char dummy3[sizeof(ENBConfigurationUpdate)]; + char dummy4[sizeof(ENDCCellActivationRequest)]; + char dummy5[sizeof(ENDCConfigurationUpdate)]; + char dummy6[sizeof(ENDCPartialResetRequired)]; + char dummy7[sizeof(ENDCX2RemovalRequest)]; + char dummy8[sizeof(ENDCX2SetupRequest)]; + char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)]; + char dummy10[sizeof(ErrorIndication)]; + char dummy11[sizeof(HandoverCancel)]; + char dummy12[sizeof(HandoverReport)]; + char dummy13[sizeof(HandoverRequest)]; + char dummy14[sizeof(LoadInformation)]; + char dummy15[sizeof(MobilityChangeRequest)]; + char dummy16[sizeof(PrivateMessage)]; + char dummy17[sizeof(RLFIndication)]; + char dummy18[sizeof(RRCTransfer)]; + char dummy19[sizeof(ResetRequest)]; + char dummy20[sizeof(ResourceStatusRequest)]; + char dummy21[sizeof(ResourceStatusUpdate)]; + char dummy22[sizeof(RetrieveUEContextRequest)]; + char dummy23[sizeof(SNStatusTransfer)]; + char dummy24[sizeof(SeNBAdditionRequest)]; + char dummy25[sizeof(SeNBCounterCheckRequest)]; + char dummy26[sizeof(SeNBModificationRequest)]; + char dummy27[sizeof(SeNBModificationRequired)]; + char dummy28[sizeof(SeNBReconfigurationComplete)]; + char dummy29[sizeof(SeNBReleaseRequest)]; + char dummy30[sizeof(SeNBReleaseRequired)]; + char dummy31[sizeof(SecondaryRATDataUsageReport)]; + char dummy32[sizeof(SgNBActivityNotification)]; + char dummy33[sizeof(SgNBAdditionRequest)]; + char dummy34[sizeof(SgNBChangeRequired)]; + char dummy35[sizeof(SgNBCounterCheckRequest)]; + char dummy36[sizeof(SgNBModificationRequest)]; + char dummy37[sizeof(SgNBModificationRequired)]; + char dummy38[sizeof(SgNBReconfigurationComplete)]; + char dummy39[sizeof(SgNBReleaseRequest)]; + char dummy40[sizeof(SgNBReleaseRequired)]; + char dummy41[sizeof(UEContextRelease)]; + char dummy42[sizeof(X2APMessageTransfer)]; + char dummy43[sizeof(X2Release)]; + char dummy44[sizeof(X2RemovalRequest)]; + char dummy45[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverRequestAcknowledge& select_id_handoverPreparation() { return set(1); } + HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get(1); } + ResetResponse& select_id_reset() { return set(2); } + ResetResponse const* get_id_reset() const { return get(2); } + X2SetupResponse& select_id_x2Setup() { return set(3); } + X2SetupResponse const* get_id_x2Setup() const { return get(3); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationResponse& select_id_cellActivation() { return set(7); } + CellActivationResponse const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalResponse& select_id_x2Removal() { return set(12); } + X2RemovalResponse const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextResponse& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeConfirm& select_id_sgNBChange() { return set(19); } + SgNBChangeConfirm const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationResponse& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetConfirm& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalResponse& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationResponse)]; + char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCCellActivationResponse)]; + char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy5[sizeof(ENDCPartialResetConfirm)]; + char dummy6[sizeof(ENDCX2RemovalResponse)]; + char dummy7[sizeof(ENDCX2SetupResponse)]; + char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)]; + char dummy9[sizeof(HandoverRequestAcknowledge)]; + char dummy10[sizeof(MobilityChangeAcknowledge)]; + char dummy11[sizeof(ResetResponse)]; + char dummy12[sizeof(ResourceStatusResponse)]; + char dummy13[sizeof(RetrieveUEContextResponse)]; + char dummy14[sizeof(SeNBAdditionRequestAcknowledge)]; + char dummy15[sizeof(SeNBModificationConfirm)]; + char dummy16[sizeof(SeNBModificationRequestAcknowledge)]; + char dummy17[sizeof(SeNBReleaseConfirm)]; + char dummy18[sizeof(SgNBAdditionRequestAcknowledge)]; + char dummy19[sizeof(SgNBChangeConfirm)]; + char dummy20[sizeof(SgNBModificationConfirm)]; + char dummy21[sizeof(SgNBModificationRequestAcknowledge)]; + char dummy22[sizeof(SgNBReleaseConfirm)]; + char dummy23[sizeof(SgNBReleaseRequestAcknowledge)]; + char dummy24[sizeof(X2RemovalResponse)]; + char dummy25[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverPreparationFailure& select_id_handoverPreparation() { return set(1); } + HandoverPreparationFailure const* get_id_handoverPreparation() const { return get(1); } + X2SetupFailure& select_id_x2Setup() { return set(3); } + X2SetupFailure const* get_id_x2Setup() const { return get(3); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeFailure& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationFailure& select_id_cellActivation() { return set(7); } + CellActivationFailure const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + X2RemovalFailure& select_id_x2Removal() { return set(12); } + X2RemovalFailure const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextFailure& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBChangeRefuse& select_id_sgNBChange() { return set(19); } + SgNBChangeRefuse const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationFailure& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get(22); } + ENDCX2RemovalFailure& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationFailure)]; + char dummy2[sizeof(ENBConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCCellActivationFailure)]; + char dummy4[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy5[sizeof(ENDCX2RemovalFailure)]; + char dummy6[sizeof(ENDCX2SetupFailure)]; + char dummy7[sizeof(HandoverPreparationFailure)]; + char dummy8[sizeof(MobilityChangeFailure)]; + char dummy9[sizeof(ResourceStatusFailure)]; + char dummy10[sizeof(RetrieveUEContextFailure)]; + char dummy11[sizeof(SeNBAdditionRequestReject)]; + char dummy12[sizeof(SeNBModificationRefuse)]; + char dummy13[sizeof(SeNBModificationRequestReject)]; + char dummy14[sizeof(SgNBAdditionRequestReject)]; + char dummy15[sizeof(SgNBChangeRefuse)]; + char dummy16[sizeof(SgNBModificationRefuse)]; + char dummy17[sizeof(SgNBModificationRequestReject)]; + char dummy18[sizeof(SgNBReleaseRequestReject)]; + char dummy19[sizeof(X2RemovalFailure)]; + char dummy20[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;} + void select_id_reset() { set(id_reset); type=2;} + void select_id_x2Setup() { set(id_x2Setup); type=3;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;} + void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;} + void select_id_cellActivation() { set(id_cellActivation); type=7;} + void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;} + void select_id_x2Removal() { set(id_x2Removal); type=12;} + void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;} + void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;} + void select_id_sgNBChange() { set(id_sgNBChange); type=19;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;} + void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;} + void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;} + void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;} + void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;} + void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;} + void select_id_handoverCancel() { set(id_handoverCancel); type=28;} + void select_id_errorIndication() { set(id_errorIndication); type=29;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;} + void select_id_loadIndication() { set(id_loadIndication); type=31;} + void select_id_privateMessage() { set(id_privateMessage); type=32;} + void select_id_rLFIndication() { set(id_rLFIndication); type=33;} + void select_id_handoverReport() { set(id_handoverReport); type=34;} + void select_id_x2Release() { set(id_x2Release); type=35;} + void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;} + void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;} + void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;} + void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;} + void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;} + void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;} + void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;} + void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;} + X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_handoverPreparation)) { type = 1; return true; } + else if(equal(id_reset)) { type = 2; return true; } + else if(equal(id_x2Setup)) { type = 3; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; } + else if(equal(id_mobilitySettingsChange)) { type = 6; return true; } + else if(equal(id_cellActivation)) { type = 7; return true; } + else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; } + else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; } + else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; } + else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; } + else if(equal(id_x2Removal)) { type = 12; return true; } + else if(equal(id_retrieveUEContext)) { type = 13; return true; } + else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; } + else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; } + else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; } + else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; } + else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; } + else if(equal(id_sgNBChange)) { type = 19; return true; } + else if(equal(id_endcX2Setup)) { type = 20; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; } + else if(equal(id_endcCellActivation)) { type = 22; return true; } + else if(equal(id_endcPartialReset)) { type = 23; return true; } + else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; } + else if(equal(id_endcX2Removal)) { type = 25; return true; } + else if(equal(id_snStatusTransfer)) { type = 26; return true; } + else if(equal(id_uEContextRelease)) { type = 27; return true; } + else if(equal(id_handoverCancel)) { type = 28; return true; } + else if(equal(id_errorIndication)) { type = 29; return true; } + else if(equal(id_resourceStatusReporting)) { type = 30; return true; } + else if(equal(id_loadIndication)) { type = 31; return true; } + else if(equal(id_privateMessage)) { type = 32; return true; } + else if(equal(id_rLFIndication)) { type = 33; return true; } + else if(equal(id_handoverReport)) { type = 34; return true; } + else if(equal(id_x2Release)) { type = 35; return true; } + else if(equal(id_x2APMessageTransfer)) { type = 36; return true; } + else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; } + else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; } + else if(equal(id_seNBCounterCheck)) { type = 39; return true; } + else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; } + else if(equal(id_sgNBCounterCheck)) { type = 41; return true; } + else if(equal(id_rRCTransfer)) { type = 42; return true; } + else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; } + else if(equal(id_SgNBActivityNotification)) { type = 44; return true; } + else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(reject); type=1;} + void select_id_reset() { set(reject); type=2;} + void select_id_x2Setup() { set(reject); type=3;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=4;} + void select_id_eNBConfigurationUpdate() { set(reject); type=5;} + void select_id_mobilitySettingsChange() { set(reject); type=6;} + void select_id_cellActivation() { set(reject); type=7;} + void select_id_seNBAdditionPreparation() { set(reject); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;} + void select_id_x2Removal() { set(reject); type=12;} + void select_id_retrieveUEContext() { set(reject); type=13;} + void select_id_sgNBAdditionPreparation() { set(reject); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;} + void select_id_sgNBChange() { set(reject); type=19;} + void select_id_endcX2Setup() { set(reject); type=20;} + void select_id_endcConfigurationUpdate() { set(reject); type=21;} + void select_id_endcCellActivation() { set(reject); type=22;} + void select_id_endcPartialReset() { set(reject); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;} + void select_id_endcX2Removal() { set(reject); type=25;} + void select_id_snStatusTransfer() { set(ignore); type=26;} + void select_id_uEContextRelease() { set(ignore); type=27;} + void select_id_handoverCancel() { set(ignore); type=28;} + void select_id_errorIndication() { set(ignore); type=29;} + void select_id_resourceStatusReporting() { set(ignore); type=30;} + void select_id_loadIndication() { set(ignore); type=31;} + void select_id_privateMessage() { set(ignore); type=32;} + void select_id_rLFIndication() { set(ignore); type=33;} + void select_id_handoverReport() { set(ignore); type=34;} + void select_id_x2Release() { set(reject); type=35;} + void select_id_x2APMessageTransfer() { set(reject); type=36;} + void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;} + void select_id_seNBCounterCheck() { set(reject); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;} + void select_id_sgNBCounterCheck() { set(reject); type=41;} + void select_id_rRCTransfer() { set(reject); type=42;} + void select_id_secondaryRATDataUsageReport() { set(reject); type=43;} + void select_id_SgNBActivityNotification() { set(reject); type=44;} + void select_id_dataForwardingAddressIndication() { set(ignore); type=45;} + X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(reject)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(reject)) { type = 18; return true; } + else if(equal(reject)) { type = 19; return true; } + else if(equal(reject)) { type = 20; return true; } + else if(equal(reject)) { type = 21; return true; } + else if(equal(reject)) { type = 22; return true; } + else if(equal(reject)) { type = 23; return true; } + else if(equal(reject)) { type = 24; return true; } + else if(equal(reject)) { type = 25; return true; } + else if(equal(ignore)) { type = 26; return true; } + else if(equal(ignore)) { type = 27; return true; } + else if(equal(ignore)) { type = 28; return true; } + else if(equal(ignore)) { type = 29; return true; } + else if(equal(ignore)) { type = 30; return true; } + else if(equal(ignore)) { type = 31; return true; } + else if(equal(ignore)) { type = 32; return true; } + else if(equal(ignore)) { type = 33; return true; } + else if(equal(ignore)) { type = 34; return true; } + else if(equal(reject)) { type = 35; return true; } + else if(equal(reject)) { type = 36; return true; } + else if(equal(ignore)) { type = 37; return true; } + else if(equal(ignore)) { type = 38; return true; } + else if(equal(reject)) { type = 39; return true; } + else if(equal(ignore)) { type = 40; return true; } + else if(equal(reject)) { type = 41; return true; } + else if(equal(reject)) { type = 42; return true; } + else if(equal(reject)) { type = 43; return true; } + else if(equal(reject)) { type = 44; return true; } + else if(equal(ignore)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingMessage ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +SuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +X2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct X2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "X2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~X2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp new file mode 100644 index 0000000..fa2fd88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.cpp @@ -0,0 +1,982 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "asn_e2ap.hpp" +#include "asn_e2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void) +{ + E2APpduWrapper* pduWrapper = new E2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int e2ap_get_index(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &gnb_cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupResponse::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-RespondingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup(); + + /* RespondingNodeType-EndcX2Setup = respond-en-gNB {En-gNB-ENDCX2SetupReqAckIEs} */ + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB(); + + using gNB_val_t = RespondingNodeType_EndcX2Setup::respond_en_gNB_t::value_type; + + ProtocolIE_Container* gNB_node = + &(ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB()); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-Globalen-gNB-ID */ + gNB_val_t* val_Globalen_gNB_ID = new gNB_val_t; + gNB_node->push_back(*val_Globalen_gNB_ID); + + val_Globalen_gNB_ID->ref_id().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_criticality().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID() + .ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID().ref_gNB_ID() + .select_gNB_ID().set_buffer(22, gnb_cfg.gNB_ID); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-ServedNRcellsENDCX2ManagementList */ + gNB_val_t* val_ServedNRCells = new gNB_val_t; + gNB_node->push_back(*val_ServedNRCells); + + val_ServedNRCells->ref_id().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_criticality().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList(); + + /* ServedNRcellsENDCX2ManagementList <-- servedNRCellInfo*/ + ServedNRcellsENDCX2ManagementList::value_type* elm = + new ServedNRcellsENDCX2ManagementList::value_type(); + + /* + ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + */ + ServedNRCell_Information* info = &(elm->ref_servedNRCellInfo()); + { + // nrpCI NRPCI, + info->ref_nrpCI().set(gnb_cfg.nrpCI); + + /* nrCellID NRCGI, + + NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... + } + */ + info->ref_nrCellID().ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + info->ref_nrCellID().ref_nRcellIdentifier().set_buffer(36, gnb_cfg.nRcellIdentifier); + + /* broadcastPLMNs BroadcastPLMNs-Item */ + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, gnb_cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + /* nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + + FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + + NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... + } + + */ + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.uL_nRARFCN); + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.dL_nRARFCN); + + /* + FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... + } + */ + //uplink + asn::sequenceof::value_type* ul_band_item = + new asn::sequenceof::value_type(); + { + ul_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* ul_supported_band_item = + new asn::sequenceof::value_type(); + + ul_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + ul_band_item->ref_supportedSULBandList().push_back(*ul_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo() + .ref_freqBandListNr().push_back(*ul_band_item); + + //downlink + asn::sequenceof::value_type* dl_band_item = + new asn::sequenceof::value_type(); + { + dl_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* dl_supported_band_item = + new asn::sequenceof::value_type(); + + dl_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + dl_band_item->ref_supportedSULBandList().push_back(*dl_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo() + .ref_freqBandListNr().push_back(*dl_band_item); + + /* + NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... + } + */ + { + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.uL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.uL_NRSCS) ); + + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.dL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.dL_NRSCS) ); + } + + /* + measurementTimingConfiguration OCTET STRING, + */ + info->ref_measurementTimingConfiguration().set(gnb_cfg.measurementTimingConfiguration); + } + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList().push_back(*elm); + + + + return true; +} + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu) +{ + + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupFailure::protocolIEs_t::value_type; + + /* ENDCX2SetupFailure-IEs := id-Cause*/ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//RICSubscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_criticality().select_id_ricSubscription(); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionRequest::protocolIEs_t::value_type; + + /* RICsubscriptionRequest-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionRequest-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + + /* + RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... + } + + RICeventTriggerDefinition ::= OCTET STRING + RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } + + RICaction-ToBeSetup-ItemIEs X2AP-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, + ... + } + + RICactionID ::= INTEGER (0..255) + + RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... + } + */ + + /* RICsubscriptionRequest-IEs : RICsubscription */ + IE_value_t* ie_RICsubscription = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICsubscription); + + ie_RICsubscription->ref_id().select_id_RICsubscription(); + ie_RICsubscription->ref_criticality().select_id_RICsubscription(); + + // RICeventTriggerDefinition + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricEventTriggerDefinition().set(params.event_trigger_def); + + //RICactions-ToBeSetup-List + for( auto const &action : params.actionList) + { + RICactions_ToBeSetup_List::value_type* item = + new RICactions_ToBeSetup_List::value_type(); + + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricAction_ToBeSetup_List().push_back(*item); + + item->ref_id().select_id_RICaction_ToBeSetup_Item(); + item->ref_criticality().select_id_RICaction_ToBeSetup_Item(); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionID().set(action.action_id); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionType().set(action.action_type); + + } + + return true; +} + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + + for(auto &e : container->ref_protocolIEs()) + { + /*See struct RICsubscriptionRequest_IEs*/ + size_t type = e.ref_value().get_index(); + + switch(type) + { + case 1: //RICrequestID + { + params.request_id = e.ref_value().select_id_RICrequestID().ref_ricRequestorID().get(); + params.seq_number = e.ref_value().select_id_RICrequestID().ref_ricRequestSequenceNumber().get(); + } + break; + + case 2: //RANfunctionID + params.ran_func_id = e.ref_value().select_id_RANfunctionID().get(); + break; + + case 3: //RICsubscription + { + auto event = e.ref_value().select_id_RICsubscription().ref_ricEventTriggerDefinition().get(); + (params.event_trigger_def).assign(std::string(event.data(), event.data() + event.size())); + + //ricAction_ToBeSetup_List + for (auto & f : e.ref_value().select_id_RICsubscription().ref_ricAction_ToBeSetup_List()) + { + RIC_action_t action; + action.action_id = f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionID().get(); + action.action_type = static_cast(f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionType().get()); + + params.actionList.push_back(action); + } + } + break; + + default: + printf("Unknown IE type = %d\n", (int)type); + return false; + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionResponse* container = &(pduWrapper->ref_pdu() + .select_successfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionResponse::protocolIEs_t::value_type; + + /* RICsubscriptionResponse-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionResponse-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionResponse-IEs : RICaction-Admitted-List */ + IE_value_t* ie_admittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_admittedList); + + ie_admittedList->ref_id().select_id_RICactions_Admitted(); + ie_admittedList->ref_criticality().select_id_RICactions_Admitted(); + + /* RICsubscriptionResponse-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + //add action to admitted and not-admitted list + for(auto const &a : params.actionList) + { + if(a.isAdmitted) + { + RICaction_Admitted_List::value_type* item = new RICaction_Admitted_List::value_type(); + + ie_admittedList->ref_value().select_id_RICactions_Admitted().push_back(*item); + + item->ref_id().select_id_RICaction_Admitted_Item(); + item->ref_criticality().select_id_RICaction_Admitted_Item(); + item->ref_value().select_id_RICaction_Admitted_Item().ref_ricActionID().set(a.action_id); + } + else + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionFailure* container = &(pduWrapper->ref_pdu() + .select_unsuccessfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionFailure::protocolIEs_t::value_type; + + /* RICsubscriptionFailure-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionFailure-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionFailure-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + for(auto const &a : params.actionList) + { + if(!a.isAdmitted) + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void) +{ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + // e2ap_init_X2SetupRequest(pdu); + eNB_config cfg; + e2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + e2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = e2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + int rc = e2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + e2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", e2ap_get_index(pdu2)); + printf("procedureCode = %d\n", e2ap_get_procedureCode(pdu2)); + + //Test X2SetupResponse + e2ap_pdu_t* pdu_resp = new_e2ap_pdu(); + e2ap_create_X2SetupResponse(pdu_resp, cfg); + e2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + e2ap_pdu_t* pdu_failure = new_e2ap_pdu(); + e2ap_create_X2SetupFailure(pdu_failure); + e2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp new file mode 100644 index 0000000..aa858b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_E2AP_HPP +#define ASN_E2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy01 e2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void); + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_get_index(e2ap_pdu_t* pdu); + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ + +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu); + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu); + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &cfg); + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu); + +//RIC Subscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp new file mode 100644 index 0000000..38704e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_e2ap_wrapper.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_E2AP_PDU_WRAPPER_HPP +#define ASN_E2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +// #include + +// #include +// #include +// #include +// #include +// #include + +#include +// #include +#include +#include +#include + +#define E2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct E2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + E2APpduWrapper(size_t allocation_buffer_size = E2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~E2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + E2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + E2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp new file mode 100644 index 0000000..dae9ca8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.cpp @@ -0,0 +1,428 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "asn_x2ap.hpp" +#include "asn_x2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +x2ap_pdu_t* new_x2ap_pdu(void) +{ + X2APpduWrapper* pduWrapper = new X2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int x2ap_get_index(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void) +{ + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + eNB_config cfg; + x2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = x2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test encode error + x2ap_pdu_t* pdu1 = new_x2ap_pdu(); + x2ap_init_X2SetupRequest(pdu1); + + int packed_len1 = x2ap_asn_per_encode(pdu1, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len1 != -1) { + printf("Encode successful, packed_len = %d\n", packed_len1); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + x2ap_pdu_t* pdu2 = new_x2ap_pdu(); + int rc = x2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + x2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", x2ap_get_index(pdu2)); + printf("procedureCode = %d\n", x2ap_get_procedureCode(pdu2)); + + + //Test decode error + x2ap_pdu_t* pdu3 = new_x2ap_pdu(); + int rc2 = x2ap_asn_per_decode(pdu3, packed_buf, 1, err_buf, sizeof(err_buf)); + if(rc2 == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + //Test X2SetupResponse + x2ap_pdu_t* pdu_resp = new_x2ap_pdu(); + x2ap_create_X2SetupResponse(pdu_resp, cfg); + x2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + x2ap_pdu_t* pdu_failure = new_x2ap_pdu(); + x2ap_create_X2SetupFailure(pdu_failure); + x2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp new file mode 100644 index 0000000..d0c02d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap.hpp @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_X2AP_HPP +#define ASN_X2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy00 x2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ + +x2ap_pdu_t* new_x2ap_pdu(void); + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_get_index(x2ap_pdu_t* pdu); + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu); + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu); + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp new file mode 100644 index 0000000..96ea81c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/asn_x2ap_wrapper.hpp @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_X2AP_PDU_WRAPPER_HPP +#define ASN_X2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define X2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct X2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + X2APpduWrapper(size_t allocation_buffer_size = X2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~X2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + X2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + X2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp new file mode 100644 index 0000000..9182ed1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/ASN1/lib/e2ap_config.hpp @@ -0,0 +1,160 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_CONFIG_HPP +#define E2AP_CONFIG_HPP + +#include +#include + +enum enum_Transmission_Bandwidth { + enum_bw6, + enum_bw15, + enum_bw25, + enum_bw50, + enum_bw75, + enum_bw100, + enum_bw1 +}; + +enum enum_NRNRB{ + enum_nrb11, enum_nrb18, enum_nrb24, enum_nrb25, enum_nrb31, enum_nrb32, + enum_nrb38, enum_nrb51, enum_nrb52, enum_nrb65, enum_nrb66, enum_nrb78, + enum_nrb79, enum_nrb93, enum_nrb106, enum_nrb107, enum_nrb121, + enum_nrb132, enum_nrb133, enum_nrb135, enum_nrb160, enum_nrb162, + enum_nrb189, enum_nrb216, enum_nrb217, enum_nrb245, enum_nrb264, + enum_nrb270, enum_nrb273 +}; + +enum enum_NRSCS { + enum_scs15, enum_scs30, enum_scs60, enum_scs120 +}; + +class eNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* macro_eNB_ID; + int64_t pCI; + uint8_t* tAC; + uint8_t* eUTRANcellIdentifier; + + int64_t uL_EARFCN; + int64_t dL_EARFCN; + + enum_Transmission_Bandwidth uL_Bandwidth; + enum_Transmission_Bandwidth dL_Bandwidth; + + /*Default Constructor*/ + eNB_config() { + pLMN_Identity = (uint8_t*)"abc"; + macro_eNB_ID = (uint8_t*)"5"; + pCI = 0; + tAC = (uint8_t*)"ab"; + eUTRANcellIdentifier = (uint8_t*)"def"; + uL_EARFCN = 21400; + dL_EARFCN = 3400; + uL_Bandwidth = enum_bw25; + dL_Bandwidth = enum_bw50; + } +}; + +class gNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* gNB_ID; + int64_t nrpCI; + uint8_t* tAC; + uint8_t* nRcellIdentifier; + + int64_t uL_nRARFCN; + int64_t dL_nRARFCN; + + enum enum_NRNRB uL_NRNRB; + enum enum_NRNRB dL_NRNRB; + + enum enum_NRSCS uL_NRSCS; + enum enum_NRSCS dL_NRSCS; + + uint8_t ul_freqBandIndicatorNr; + uint8_t dl_freqBandIndicatorNr; + + std::string measurementTimingConfiguration; + + /*Default Constructor*/ + gNB_config() { + pLMN_Identity = (uint8_t*)"xyz"; + gNB_ID = (uint8_t*)"3"; + nrpCI = 1; + tAC = (uint8_t*)"ab"; + nRcellIdentifier = (uint8_t*)"gnb_id_123"; + uL_nRARFCN = 21400; + dL_nRARFCN = 21500; + + uL_NRNRB = enum_nrb11; + dL_NRNRB = enum_nrb121; + + uL_NRSCS = enum_scs15; + dL_NRSCS = enum_scs120; + + ul_freqBandIndicatorNr = 11; + dl_freqBandIndicatorNr = 12; + + measurementTimingConfiguration = "dummy timing"; + } +}; + +enum enum_RICactionType { + RICactionType_report, + RICactionType_insert, + RICactionType_policy +}; + +enum enum_RICcause { + RICcause_radioNetwork = 1, + RICcause_transport, + RICcause_protocol, + RICcause_misc, + RICcause_ric +}; + +struct RIC_action_t { + unsigned char action_id; + enum_RICactionType action_type; + bool isAdmitted = false; //for response/failure only + enum_RICcause notAdmitted_cause; //for response/failure only + unsigned int notAdmitted_subCause; //for response/failure only + + RIC_action_t() {;} + + RIC_action_t(unsigned char id, enum_RICactionType type) + { + action_id = id; + action_type = type; + } +}; + +struct RICsubscription_params_t { + uint16_t request_id = 0; + uint16_t seq_number = 0; + uint16_t ran_func_id = 0; + std::string event_trigger_def = ""; + + std::vector actionList; +} ; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.cpp @@ -0,0 +1,125 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "e2sim_defs.h" +#include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} + +options_t read_input_options_old(int argc, char* argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + // Parse command line options + static struct option long_options[] = + { + {"ipv4", required_argument, 0, 'i'}, + {"ipv6", required_argument, 0, 'I'}, + {"port", required_argument, 0, 'p'}, + {"verbose", no_argument, 0, 'v'}, + }; + + while(1) + { + int option_index = 0; + + char c = getopt_long(argc, argv, "i:I:p:", long_options, &option_index); + + if(c == -1) + break; + + switch(c) + { + case 'i': + options.server_ip = optarg; + break; + case 'I': + break; + case 'p': + options.server_port = atoi(optarg); + if(options.server_port < 1 || options.server_port > 65535) + { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + break; + + default: + LOG_E("Error: unknown input option: %c\n", optopt); + exit(1); + } + } + + return options; +} + +options_t read_input_options(int argc, char *argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + if(argc == 3) //user provided IP and PORT + { + options.server_ip = argv[1]; + options.server_port = atoi(argv[2]); + if(options.server_port < 1 || options.server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + } + else if(argc == 2) //user provided only IP + { + options.server_ip = argv[1]; + } + else if(argc == 1) + { + options.server_ip = (char*)DEFAULT_SCTP_IP; + } + else + { + LOG_I("Unrecognized option.\n"); + LOG_I("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + exit(1); + } + + return options; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/DEF/e2sim_defs.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef E2SIM_DEFS_H +#define E2SIM_DEFS_H + +// #include +#include +#include + +#define VERSION "1.2.0" //May 2019 +#define DEFAULT_SCTP_IP "127.0.0.1" +#define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) +#define X2AP_SCTP_PORT 36421 +#define RIC_SCTP_SRC_PORT 36422 +#define MAX_SCTP_BUFFER 10000 +#define WORKDIR_ENV "E2SIM_DIR" //environment variable + +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + +#define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} + +typedef struct SCTP_DATA { + unsigned char *data; + int len; +} sctp_data_t; + +typedef struct { + unsigned char buffer[MAX_SCTP_BUFFER]; + int len; +} sctp_buffer_t; + +typedef struct { + char* server_ip; + int server_port; + //... extend as needed +} options_t; + +options_t read_input_options(int argc, char *argv[]); + +#define min(a, b) ((a) < (b)) ? (a) : (b) + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml new file mode 100644 index 0000000..43db78a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml @@ -0,0 +1 @@ +400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml new file mode 100644 index 0000000..6d8c654 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_SetupRequest2.xml @@ -0,0 +1,30 @@ + + + 1 + + + + + + 4 + + + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml new file mode 100644 index 0000000..dd21201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/GlobalE2node-ID.xml @@ -0,0 +1,12 @@ + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c new file mode 100644 index 0000000..f76032d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp new file mode 100644 index 0000000..f9057bd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.cpp @@ -0,0 +1,295 @@ + + +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include + +#include "encode_e2apv1.hpp" +#include "kpm_callbacks.hpp" + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICsubscription: //RIC SUBSCRIPTION = 201 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: { //initiatingMessage + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + long func_id = get_function_id_from_subscription(pdu); + SubscriptionCallback cb = e2sim->get_subscription_callback(func_id); + cb(pdu); + // callback_kpm_subscription_request(pdu, socket_fd); + + } + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp new file mode 100644 index 0000000..32c0ea3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2AP/e2ap_message_handler.hpp @@ -0,0 +1,47 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + +#include "e2sim.hpp" +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml new file mode 100644 index 0000000..43db78a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml @@ -0,0 +1 @@ +400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml new file mode 100644 index 0000000..6d8c654 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_SetupRequest2.xml @@ -0,0 +1,30 @@ + + + 1 + + + + + + 4 + + + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml new file mode 100644 index 0000000..dd21201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/GlobalE2node-ID.xml @@ -0,0 +1,12 @@ + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c new file mode 100644 index 0000000..f76032d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp new file mode 100644 index 0000000..82ce40c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.cpp @@ -0,0 +1,332 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include + +#include "encode_e2apv1.hpp" + + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + case ProcedureCode_id_RICserviceQuery: + switch (index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RIC-Service-Query") + e2ap_handle_E2SeviceUpdate(pdu, socket_fd); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICserviceQuery); + break; + } + break; + + case ProcedureCode_id_RICserviceUpdate: + switch (index) + { + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SERVICE-UPDATE-SUCCESS") + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SERVICE-UPDATE-FAILURE") + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICserviceUpdate); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SeviceUpdate(E2AP_PDU_t* pdu, int &socket_fd) { + +auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + generate_e2apv1_service_update(pdu); + + printf("After generating e2setup req\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + printf("After XER Encoding\n"); + + sctp_buffer_t data; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu, buffer, buffer_size); + //auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu_setup, buffer, buffer_size); + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SERVICE-UPDATE"); + } else { + LOG_E("[SCTP] Unable to send E2-SERVICE-UPDATE to peer"); + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp new file mode 100644 index 0000000..fac0bd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/E2APr/e2ap_message_handler.hpp @@ -0,0 +1,50 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + + +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SeviceUpdate(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.c @@ -0,0 +1,173 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.h" + +const int CLIENT_SEND_COUNT = 1; +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return -1; + } + + int server_fd; + if((server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + return -1; + } + + struct sockaddr_in server_addr; + memset(&server_addr, 0, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(server_port); + server_addr.sin_addr.s_addr = inet_addr(server_ip_str); + + if(bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + return -1; + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + return -1; + } + + assert(server_fd != 0); + + fprintf(stderr, "SCTP server started on %s:%d\n", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd; + + if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + return -1; + } + + struct sockaddr_in peer_addr; + memset(&peer_addr, 0, sizeof(struct sockaddr_in)); + peer_addr.sin_family = AF_INET; + peer_addr.sin_port = htons(server_port); + peer_addr.sin_addr.s_addr = inet_addr(server_ip_str); + // if(inet_pton(AF_INET, server_ip, &(peer_addr.sin_addr)) != 1) { + // printf("Error converting IP address (%s) to sockaddr_in structure\n", server_ip); + // return 0; + // } + + fprintf(stderr, "Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) == -1) { + perror("connect"); + return -1; + } + + assert(client_fd != 0); + + fprintf(stderr, "OK\n"); + + return client_fd; + +} + +//ssize_t sctp_send_to_socket(int sockfd, const void* buf, size_t len) +int sctp_send_to_socket(int sockfd, const void* buf, size_t len) +{ + int sent_len = 0; + + sent_len = send(sockfd, buf, len, 0); + + if(sent_len == -1) + { + perror("sctp_send_to_socket"); + return -1; + } + + return sent_len; +} + +// int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size) +// { +// //int len = 0; +// +// memset(buf, 0, buf_size); +// +// int len = recv(sockfd, &buf, buf_size, 0); +// if(len == -1) +// { +// perror("sctp_recv_from_socket"); +// return -1; +// } +// +// return len; +// } + + +//test only +void client_send_multiple_test_msg(int client_fd) +{ + char buf[1024]; + int SEND_COUNT = 4; + + for(int i = 0; i < SEND_COUNT; i++) + { + fprintf(stderr, "Sending message %d of %d \n", i+1, SEND_COUNT); + + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf)-1, "DATA %d", i+1); + + if(send(client_fd, &buf, strlen(buf), 0) == -1) { + perror("send"); + return; + } + + memset(buf, 0, sizeof(buf)); + + if(recv(client_fd, &buf, sizeof(buf), 0) == -1) { + perror("recv"); + return; + } + + fprintf(stderr, "Server reply: %s\n", buf); + + sleep(1); + } + + fprintf(stderr, "Closing...\n"); + if(close(client_fd) == -1) { + perror("close"); + return; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..55547b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.cpp @@ -0,0 +1,297 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.hpp" +// #include "e2sim_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + exit(1); + } + + int server_fd, af; + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + + server_addr = (struct sockaddr*)&server4_addr; + af = AF_INET; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + + server_addr = (struct sockaddr*)&server6_addr; + af = AF_INET6; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((server_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + exit(1); + } + + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + + if(bind(server_fd, server_addr, addr_len) == -1) { + perror("bind"); + exit(1); + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + exit(1); + } + + assert(server_fd != 0); + + LOG_I("[SCTP] Server started on %s:%d", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd, af; + + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + server_addr = (struct sockaddr*)&server4_addr; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + server_addr = (struct sockaddr*)&server6_addr; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + exit(1); + } + + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, server_addr, addr_len) == -1) { + perror("connect"); + exit(1); + } + assert(client_fd != 0); + + LOG_I("[SCTP] Connection established"); + + return client_fd; +} + +int sctp_accept_connection(const char *server_ip_str, const int server_fd) +{ + LOG_I("[SCTP] Waiting for new connection..."); + + struct sockaddr client_addr; + socklen_t client_addr_size; + int client_fd; + + //Blocking call + client_fd = accept(server_fd, &client_addr, &client_addr_size); + fprintf(stderr, "client fd is %d\n", client_fd); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + exit(1); + } + + //Retrieve client IP_ADDR + char client_ip6_addr[INET6_ADDRSTRLEN], client_ip4_addr[INET_ADDRSTRLEN]; + if(strchr(server_ip_str, ':') != NULL) //IPv6 + { + struct sockaddr_in6* client_ipv6 = (struct sockaddr_in6*)&client_addr; + inet_ntop(AF_INET6, &(client_ipv6->sin6_addr), client_ip6_addr, INET6_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip6_addr); + } + else { + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip4_addr, INET_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip4_addr); + } + + return client_fd; +} + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data) +{ + fprintf(stderr,"in sctp send data func\n"); + fprintf(stderr,"data.len is %d", data.len); + int sent_len = send(socket_fd, (void*)(&(data.buffer[0])), data.len, 0); + fprintf(stderr,"after getting sent_len\n"); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + + return sent_len; +} + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + +} + +/* +Receive data from SCTP socket +Outcome of recv() +-1: exit the program +0: close the connection ++: new data +*/ +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data) +{ + //clear out the data before receiving + fprintf(stderr, "receive data1\n"); + memset(data.buffer, 0, sizeof(data.buffer)); + fprintf(stderr, "receive data2\n"); + data.len = 0; + + //receive data from the socket + int recv_len = recv(socket_fd, &(data.buffer), sizeof(data.buffer), 0); + fprintf(stderr, "receive data3\n"); + + if(recv_len == -1) + { + perror("[SCTP] recv"); + exit(1); + } + else if (recv_len == 0) + { + LOG_I("[SCTP] Connection closed by remote peer"); + if(close(socket_fd) == -1) + { + perror("[SCTP] close"); + } + return -1; + } + + data.len = recv_len; + + return recv_len; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/*! \file e2sim_sctp.h + */ + +#ifndef E2SIM_SCTP_H +#define E2SIM_SCTP_H + +void *handle_connection(void *thread_data); + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_send_to_socket(int sockfd, const void *buf, size_t len); + +//int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size); + +//test only +void client_send_multiple_test_msg(int client_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/SCTP/e2sim_sctp.hpp @@ -0,0 +1,39 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_SCTP_HPP +#define E2SIM_SCTP_HPP + +#include "e2sim_defs.h" + +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_accept_connection(const char *server_ip_str, const int server_fd); + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data); + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data); + +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml new file mode 100644 index 0000000..f0b6262 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml new file mode 100644 index 0000000..5f94d2e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml new file mode 100644 index 0000000..587b578 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml @@ -0,0 +1,36 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 01001010100101010010101010101010 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml new file mode 100644 index 0000000..3b82969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml new file mode 100644 index 0000000..3589f28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000100000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100010000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml new file mode 100644 index 0000000..bab51d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml @@ -0,0 +1,69 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000110000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100011000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + 24 + + + + + 02 F8 39 + 00 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c new file mode 100644 index 0000000..959e7ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.c @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "x2ap_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +/* Encode X2AP PDU ASN1 buffer*/ +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + + assert(pdu != NULL); + assert(buffer != NULL); + assert(len != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, pdu, (void **)buffer); + + if (encoded < 0) + { + return -1; + } + + *len = encoded; + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, pdu); + return encoded; +} + +/* Decode XASN1 buffer to X2AP PDU*/ +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_X2AP_PDU, (void **)&pdu, buffer, + len, 0, 0); + + //xer_fprint(stdout, &asn_DEF_X2AP_PDU, pdu); + + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode pdu\n"); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp new file mode 100644 index 0000000..7f2e6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.cpp @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "x2ap_asn_codec.hpp" + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + encoded_size = x2ap_asn_per_encode(pdu, buf, buf_size, err_buf, sizeof(err_buf)); + + if(encoded_size != -1) + { + LOG_D("[X2AP] ASN Encode successful, encoded_size = %d", encoded_size); + } + else + { + LOG_E("[X2AP] Encode error: %s", err_buf); + exit(1); + } + +} + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + int rc = x2ap_asn_per_decode(pdu, buf, encoded_size, err_buf, sizeof(err_buf)); + if(rc == -1) { + LOG_E("[X2AP] Decode error: %s", err_buf); + } else { + LOG_D("[X2AP] ASN decode successful"); + } +} + +void x2ap_print_pdu(x2ap_pdu_t* pdu) +{ + char pdu_str[X2AP_PDU_PRINT_BUFFER]; + + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + + LOG_D("[X2AP] %s", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h new file mode 100644 index 0000000..bad3ae7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ASN_CODEC_H_ +#define X2AP_ASN_CODEC_H_ + +#include "X2AP-PDU.h" + +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +__attribute__ ((warn_unused_result)); + +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp new file mode 100644 index 0000000..a07f441 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_asn_codec.hpp @@ -0,0 +1,34 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_ASN_CODEC_HPP +#define X2AP_ASN_CODEC_HPP + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" + +#define X2AP_ERROR_MESSAGE_BUFFER 1024 +#define X2AP_PDU_PRINT_BUFFER 4096 + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size); + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size); + +void x2ap_print_pdu(x2ap_pdu_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c new file mode 100644 index 0000000..db12a3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.c @@ -0,0 +1,113 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "x2ap_generate_messages.h" +#include "x2ap_asn_codec.h" +#include "e2sim_defs.h" + +int asn1_xer_print = 0; +int MAX_XML_BUFFER = 10000; + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename) +{ + + uint8_t buf[MAX_XML_BUFFER]; + + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[200]; + char *work_dir = getenv(WORKDIR_ENV); + + strcpy(XML_path, work_dir); + strcat(XML_path, "/src/X2AP/MESSAGES/XML/"); + strcat(XML_path, filename); + + //printf("Generate X2AP PDU from XML file: %s\n", XML_path); + + f = fopen(XML_path, "r"); + assert(f); + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + fprintf(stderr, "%s: Too large input\n", XML_path); + exit(1); + } + + fclose(f); + + //printf("Decode the XER buffer\n"); + rval = xer_decode(NULL, &asn_DEF_X2AP_PDU, (void **)pdu, buf, size); + assert(rval.code == RC_OK); + +} + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_request.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_response.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h new file mode 100644 index 0000000..53998b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_generate_messages.h @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_GENERATE_MESSAGES_H_ +#define X2AP_ENB_GENERATE_MESSAGES_H_ + +#include "X2AP-PDU.h" + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename); + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer); + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c new file mode 100644 index 0000000..4fa635e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.c @@ -0,0 +1,139 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "x2ap_message_handler.h" + +typedef int (*x2ap_message_decoded_handler)(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t *response); + +/* Handlers matrix. Only eNB related procedure present here +/* rowID = procedureCode (start with 0) +*/ +x2ap_message_decoded_handler x2ap_messages_handler[][3] = { + { 0, 0, 0 }, /* handoverPreparation */ + { 0, 0, 0 }, /* handoverCancel */ + { 0, 0, 0 }, /* loadIndication */ + { 0, 0, 0 }, /* errorIndication */ + { 0, 0, 0 }, /* snStatusTransfer */ + { 0, 0, 0 }, /* uEContextRelease */ + { handle_x2_setup_request, handle_x2_setup_response, handle_x2_setup_failure }, /* x2Setup */ + { 0, 0, 0 }, /* reset */ + { 0, 0, 0 }, /* eNBConfigurationUpdate */ + { 0, 0, 0 }, /* resourceStatusReportingInitiation */ + { 0, 0, 0 }, /* resourceStatusReporting */ + { 0, 0, 0 }, /* privateMessage */ + { 0, 0, 0 }, /* mobilitySettingsChange */ + { 0, 0, 0 }, /* rLFIndication */ + { 0, 0, 0 }, /* handoverReport */ + { 0, 0, 0 }, /* cellActivation */ + { 0, 0, 0 }, /* x2Release */ + { 0, 0, 0 }, /* x2APMessageTransfer */ + { 0, 0, 0 }, /* x2Removal */ + { 0, 0, 0 }, /* seNBAdditionPreparation */ + { 0, 0, 0 }, /* seNBReconfigurationCompletion */ + { 0, 0, 0 }, /* meNBinitiatedSeNBModificationPreparation */ + { 0, 0, 0 }, /* seNBinitiatedSeNBModification */ + { 0, 0, 0 }, /* meNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBCounterCheck */ + { 0, 0, 0 } /* retrieveUEContext */ +}; + +char *x2ap_direction2String(int x2ap_dir) +{ + static char *x2ap_direction_String[] = { + "", /* Nothing */ + "Originating message", /* originating message */ + "Successfull outcome", /* successfull outcome */ + "UnSuccessfull outcome", /* successfull outcome */ + }; + return(x2ap_direction_String[x2ap_dir]); +} + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response) +{ + X2AP_PDU_t pdu; + int ret; + + memset(&pdu, 0, sizeof(pdu)); + + //printf("Decode the PDU \n"); + + if (X2AP_ASN_decode(&pdu, data, data_len) < 0){ + return -1; + } + + /* Checking procedure Code and direction of message */ + if (pdu.choice.initiatingMessage.procedureCode > sizeof(x2ap_messages_handler) + / (3 * sizeof(x2ap_message_decoded_handler)) + || (pdu.present > X2AP_PDU_PR_unsuccessfulOutcome)) { + + fprintf(stderr, "Either procedureCode %ld or direction %d exceed expected\n", + pdu.choice.initiatingMessage.procedureCode, pdu.present); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + if (x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1] == NULL) + { + fprintf(stderr, "No handler for procedureCode %ld in direction %s\n", + pdu.choice.initiatingMessage.procedureCode, + x2ap_direction2String(pdu.present - 1)); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + /*calling the appropriate handler */ + ret = (*x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1])(&pdu, response); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return ret; +} + +int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP REQUEST\n"); + + /* Todo: when to generate X2 Setup Failure??? + */ + + response->len = x2ap_generate_x2_setup_response(&response->data); + + return 0; +} + +int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP RESPONSE\n"); + return 0; +} + +int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP FAILURE\n"); + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp new file mode 100644 index 0000000..f818304 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "x2ap_message_handler.hpp" + + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) +{ + //decode the data into X2AP-PDU + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + x2ap_decode_pdu(pdu, data.buffer, data.len); + + x2ap_print_pdu(pdu); + + int index = x2ap_get_index(pdu); + int procedureCode = x2ap_get_procedureCode(pdu); + + switch(procedureCode) + { + case 6: //X2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received X2 SETUP REQUEST"); + x2ap_handle_X2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + case 36: //ENDCX2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received ENDC X2 SETUP REQUEST"); + x2ap_handle_ENDCX2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received ENDC X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received ENDC X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + default: + LOG_E("[X2AP] No available handler for procedureCode=%d", procedureCode); + break; + } +} + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back X2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + + x2ap_pdu_t* res_pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupResponse(res_pdu, cfg); + LOG_D("[X2AP] Created X2 SETUP RESPONSE") + + x2ap_print_pdu(res_pdu); + + //encode response pdu into buffer + sctp_buffer_t res_data; + x2ap_encode_pdu(res_pdu, res_data.buffer, sizeof(res_data.buffer), res_data.len); + + //send response data over sctp + if(sctp_send_data(socket_fd, res_data) > 0) { + LOG_D("[SCTP] Sent X2 SETUP RESPONSE"); + } else { + LOG_D("[SCTP] Unable to send X2 SETUP RESPONSE to peer"); + } +} + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd) +{ + ; +} + + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back ENDCX2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + ; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h new file mode 100644 index 0000000..9c9d6ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_HANDLER_H_ +#define X2AP_ENB_HANDLER_H_ + +#include "x2ap_asn_codec.h" +#include "X2AP-PDU.h" +#include "e2sim_defs.h" +#include "x2ap_generate_messages.h" + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp new file mode 100644 index 0000000..b3146c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/src/X2AP/x2ap_message_handler.hpp @@ -0,0 +1,35 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_MESSAGE_HANDLER_HPP +#define X2AP_MESSAGE_HANDLER_HPP + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "asn_x2ap.hpp" +#include "x2ap_asn_codec.hpp" + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data); + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt new file mode 100644 index 0000000..bf6c51c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/CMakeLists.txt @@ -0,0 +1,86 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(e2sim) + +set (HOME_DIR $ENV{HOME}) +#set (E2SIM_ROOT ../../../) + +include_directories("src") +include_directories("src/SCTP/") +include_directories("src/E2AP") +include_directories("src/E2AP/E2SM") +include_directories("ASN1c") + +find_library( SCTP_LIBRARY sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB E2AGENT_SOURCES + "src/e2agent.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(e2agent ${E2AGENT_SOURCES}) +target_link_libraries( e2agent ${SCTP_LIBRARY} ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + "src/ric_sim.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(ric_sim ${RICSIM_SOURCES}) +target_link_libraries( ric_sim ${SCTP_LIBRARY} ) + + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "src/x2term.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_LIBRARY} ) + + +#----------------------------------------------- +file(GLOB TEST + "src/test_asn1c.cpp" + "src/e2sim_defs.cpp" +# "src/SCTP/*.cpp" + "ASN1c/*.c" + "src/E2AP/*.c" + "src/E2AP/E2SM/*.c" + ) +add_executable(test_asn1c ${TEST}) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp new file mode 100644 index 0000000..690f767 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Misc/test_asn1c.cpp @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "e2sm.h" + +} + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("Test ASN1c"); + + test_eventTriggerDefinition(); + return 0; + + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ErrorIndication.xml"); + + e2ap_asn1c_print_pdu(pdu); + + /* Test encoding */ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + /* Test decoding */ + E2AP_PDU_t* pdu1 = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(pdu1, data.buffer, data.len); + + e2ap_asn1c_print_pdu(pdu1); + + int index = (int)pdu1->present; + + int pCode = e2ap_asn1c_get_procedureCode(pdu1); + + LOG_I("Index = %d, procedureCode = %d", index, pCode); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c new file mode 100644 index 0000000..9b44adf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.c @@ -0,0 +1,180 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Pendulum_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +#include "OCTET_STRING.h" + +static int ASN_DEBUG = 0; + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + assert(pend != NULL); + assert(buffer != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_Pendulum, 0, pend, (void **)buffer); + if(encoded < 0){ + perror("Failed to aper encode\n"); + exit(1); + } + + *len = encoded; + //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_Pendulum, pend); + return encoded; +} + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + // THIS IS IMPORTANT, otherwise: Segmentation fault + memset(pend, 0, sizeof(*pend)); + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_Pendulum, (void **)&pend, buffer, len, 0, 0); + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode asn1 message\n"); + return -1; + } + + if(ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + return 0; +} + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg) +{ + //Create Pendulum payload struct + Pendulum_t *pend; + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + //convert char* to PrintableString_t* + PrintableString_t *payload = calloc(1, sizeof(PrintableString_t)); + payload->buf = (uint8_t *)msg; + payload->size = strlen(msg); + + pend->strval = payload; + pend->sequence = &sequence; + pend->angle = ∠ + pend->torque = &torque; + + if (ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //Encode Pendulum payload struct to asn1 buffer + uint32_t len; + if(pendulum_asn_encode(pend, buffer, &len) < 0) + { + return -1; + } + //fprintf(stderr, "len = %d\n", len); + + return len; +} + +long pendulum_get_sequence(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.sequence); +} + +double pendulum_get_angle(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.angle); +} + +double pendulum_get_torque(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.torque); +} + +char* pendulum_get_strval(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + char* str; + + pendulum_asn_decode(&pend, buffer, len); + + str = (char*)pend.strval->buf; + + return str; +} + +void test_pendulum_msg(void) +{ + uint8_t *buffer = NULL; + uint32_t len = 0; + double angle = 1.9; + len = pendulum_create_asn_msg(&buffer, 0, angle, 0, NULL); + + double ex_angle = pendulum_get_angle(buffer, len); + fprintf(stderr, "Extracted angle = %f\n", ex_angle); +} + +void test_pendulum_asn1(void) +{ + fprintf(stderr, "test_pendulum_asn1\n"); + + Pendulum_t *pend; + + long sequence = 0; /* OPTIONAL */ + double angle = 1.5; /* OPTIONAL */ + //double torque = 0.7; /* OPTIONAL */ + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + pend->sequence = &sequence; + pend->angle = ∠ + //pend->torque = &torque; + + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //encode + uint8_t *buffer = NULL; + uint32_t len; + pendulum_asn_encode(pend, &buffer, &len); + fprintf(stderr, "len = %d\n", len); + + //decode + Pendulum_t dec_pend; + pendulum_asn_decode(&dec_pend, buffer, len); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h new file mode 100644 index 0000000..3928caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Pendulum_asn_codec.h @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef PENDULUM_ASN_CODEC_H_ +#define PENDULUM_ASN_CODEC_H_ + +#include "Pendulum.h" + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len); + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len); + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg); + +long pendulum_get_sequence(const uint8_t *const buffer, const int len); + +double pendulum_get_angle(const uint8_t *const buffer, const int len); + +double pendulum_get_torque(const uint8_t *const buffer, const int len); + +char* pendulum_get_strval(const uint8_t *const buffer, const int len); + +//For testing only + +void test_pendulum_msg(void); + +void test_pendulum_asn1(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c new file mode 100644 index 0000000..e67465c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "stdio.h" +#include +#include + +#include "adruino_serial.h" + +int start_serial_inferface(int baudrate, char *serial_port) +{ + int fd = -1; + + fd = serialport_init(serial_port, baudrate); + if(fd == -1) { + fprintf(stderr, "couldn't open serial port %s\n", serial_port); + return -1; + } else { + fprintf(stderr, "Openning serial port: %s ...\n", serial_port); + } + + serialport_flush(fd); // take 2 seconds + fprintf(stderr, "Serial port ready!\n"); + + return fd; + +} + +int serial_readline(int fd, char* buf, int buf_max) +{ + if( fd == -1 ){ + perror("serial port not opened"); + return -1; + } + + memset(buf, 0, buf_max); + + do { + serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + } while( buf[0] == '\n' ); + + // serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + + return 0; +} + +int serial_writeline(int fd, char* buf) +{ + if(buf[strlen(buf)-1] != SERIAL_EOL_CHAR){ + //append EOL to buf + int len = strlen(buf); + buf[len] = SERIAL_EOL_CHAR; + buf[len+1] = '\0'; + } + + serialport_write(fd, buf); + + return 0; +} + +//For testing only +void test_adruino_serial(void) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1){ + fprintf(stderr, "[E2 Agent]: "); + fgets(buf, MAX_SERIAL_BUFFER, stdin); + + // serialport_write(fd, "hello\n"); + //serialport_write(fd, buf); + serial_writeline(fd, buf); + + serial_readline(fd, buf, MAX_SERIAL_BUFFER); + fprintf(stderr, "[Adruino] %s", buf); + } + + return; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h new file mode 100644 index 0000000..c061f8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/adruino_serial.h @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ADRUINO_SERIAL_H +#define ADRUINO_SERIAL_H + +#include "arduino-serial-lib.h" + +#define MAX_SERIAL_BUFFER 256 +#define DEFAULT_SERIAL_PORT "/dev/ttyACM0" +#define DEFAULT_BAUDRATE 115200 +#define SERIAL_EOL_CHAR '\n' +#define SERIAL_TIMEOUT 5000 //ms + +int start_serial_inferface(int baudrate, char *serial_port); + +int serial_readline(int fd, char* buf, int buf_max); + +int serial_writeline(int fd, char* buf); + +//For testing only +void test_adruino_serial(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c new file mode 100644 index 0000000..73cac84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.c @@ -0,0 +1,170 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + +#include "arduino-serial-lib.h" + +#include // Standard input/output definitions +#include // UNIX standard function definitions +#include // File control definitions +#include // Error number definitions +#include // POSIX terminal control definitions +#include // String function definitions +#include + +// uncomment this to debug reads +//#define SERIALPORTDEBUG + +// takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1") +// and a baud rate (bps) and connects to that port at that speed and 8N1. +// opens the port in fully raw mode so you can send binary data. +// returns valid fd, or -1 on error +int serialport_init(const char* serialport, int baud) +{ + struct termios toptions; + int fd; + + //fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); + fd = open(serialport, O_RDWR | O_NONBLOCK ); + + if (fd == -1) { + perror("serialport_init: Unable to open port s"); + return -1; + } + + //int iflags = TIOCM_DTR; + //ioctl(fd, TIOCMBIS, &iflags); // turn on DTR + //ioctl(fd, TIOCMBIC, &iflags); // turn off DTR + + if (tcgetattr(fd, &toptions) < 0) { + perror("serialport_init: Couldn't get term attributes"); + return -1; + } + speed_t brate = baud; // let you override switch below if needed + switch(baud) + { + case 4800: brate=B4800; break; + case 9600: brate=B9600; break; + #ifdef B14400 + case 14400: brate=B14400; break; + #endif + case 19200: brate=B19200; break; + #ifdef B28800 + case 28800: brate=B28800; break; + #endif + case 38400: brate=B38400; break; + case 57600: brate=B57600; break; + case 115200: brate=B115200; break; + } + cfsetispeed(&toptions, brate); + cfsetospeed(&toptions, brate); + + // 8N1 + toptions.c_cflag &= ~PARENB; + toptions.c_cflag &= ~CSTOPB; + toptions.c_cflag &= ~CSIZE; + toptions.c_cflag |= CS8; + // no flow control + toptions.c_cflag &= ~CRTSCTS; + + //toptions.c_cflag &= ~HUPCL; // disable hang-up-on-close to avoid reset + + toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines + toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl + + toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw + toptions.c_oflag &= ~OPOST; // make raw + + // see: http://unixwiz.net/techtips/termios-vmin-vtime.html + toptions.c_cc[VMIN] = 0; + toptions.c_cc[VTIME] = 0; + //toptions.c_cc[VTIME] = 20; + + tcsetattr(fd, TCSANOW, &toptions); + if( tcsetattr(fd, TCSAFLUSH, &toptions) < 0) { + perror("init_serialport: Couldn't set term attributes"); + return -1; + } + + return fd; +} + +// +int serialport_close( int fd ) +{ + return close( fd ); +} + +// +int serialport_writebyte( int fd, uint8_t b) +{ + int n = write(fd,&b,1); + if( n!=1) + return -1; + return 0; +} + +// +int serialport_write(int fd, const char* str) +{ + int len = strlen(str); + int n = write(fd, str, len); + if( n!=len ) { + perror("serialport_write: couldn't write whole string\n"); + return -1; + } + return 0; +} + +// +int serialport_read_until(int fd, char* buf, char until, int buf_max, int timeout) +{ + char b[1]; // read expects an array, so we give it a 1-byte array + int i=0; + do { + int n = read(fd, b, 1); // read a char at a time + if( n==-1) return -1; // couldn't read + if( n==0 ) { + usleep( 1 * 1000 ); // wait 1 msec try again + timeout--; + if( timeout==0 ) return -2; + continue; + } +#ifdef SERIALPORTDEBUG + fprintf(stderr, "serialport_read_until: i=%d, n=%d b='%c'\n",i,n,b[0]); // debug +#endif + buf[i] = b[0]; + i++; + } while( b[0] != until && i < buf_max && timeout>0 ); + + buf[i] = 0; // null terminate the string + return 0; +} + +// +int serialport_flush(int fd) +{ + sleep(2); //required to make flush work, for some reason + return tcflush(fd, TCIOFLUSH); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h new file mode 100644 index 0000000..74fe592 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/Serial/arduino-serial-lib.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + + +#ifndef __ARDUINO_SERIAL_LIB_H__ +#define __ARDUINO_SERIAL_LIB_H__ + +#include // Standard types + +int serialport_init(const char* serialport, int baud); +int serialport_close(int fd); +int serialport_writebyte( int fd, uint8_t b); +int serialport_write(int fd, const char* str); +int serialport_read_until(int fd, char* buf, char until, int buf_max,int timeout); +int serialport_flush(int fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt new file mode 100644 index 0000000..727edbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/demo_setup.txt @@ -0,0 +1,14 @@ +# DEMO March 20, 2019 + ## E2 Agent Laptop with IP x.x.x.x + - Connect to adruino via USB + - Connect to E2 Termination Desktop via Ethernet + - Run E2 Agent: $E2SIM_DIR/build/e2sim x.x.x.x + + ## E2 Termination Desktop + - Run xApp + cd $E2SIM_DIR/rmr_interface/tests/pendulum_xapp + bash run_receiver + + - Run E2 Termination + cd $E2SIM_DIR + ./build_and_run_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c new file mode 100644 index 0000000..613ce57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_closedloop.c @@ -0,0 +1,263 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include +#include +#include +#include +#include +#include //for close() +#include //for inet_ntop() + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" +#include "adruino_serial.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +static void pendulum_control_E2_agent(int client_fd) +{ + fprintf(stderr, "--------------------------------------\n"); + fprintf(stderr, "E2 AGENT - START PENDULUM CONTROL\n"); + fprintf(stderr, "--------------------------------------\n"); + + uint8_t *buffer; + uint32_t len; + clock_t begin; + double rtt; //ms + + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len; + + double angle; + double torque; + long sqn; + int count = 0; + + //serial + // int serial_fd; + char serial_buffer[MAX_SERIAL_BUFFER]; + // serial_fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + // + // char *delay_str_prev = "$0#\n"; + // //char *delay_str_new; + // + // int MSG_NUM = 10; + // + // //Always start with 0 delay + // serialport_write(serial_fd, "$0#\n"); + + // for(int i = 0; i < MSG_NUM; i++) + while(1) + { + + fprintf(stderr, "----------------\n"); + count += 1; + buffer = NULL; + len = 0; + + // //1.Read from serial + // serial_readline(serial_fd, serial_buffer, MAX_SERIAL_BUFFER); + // if(serial_buffer[0] == '\n') + // { + // //fprintf(stderr, "RECEIVED EOL\n"); + // continue; + // } + // //fprintf(stderr, "[Adruino] %s", serial_buffer); + usleep(5*1000); + + snprintf(serial_buffer, sizeof(serial_buffer)-1, "E2 AGENT PING"); + + begin = clock(); + + //2. Encode pendulum angle to ASN1 message + + len = pendulum_create_asn_msg(&buffer, 0, 0, 0, serial_buffer); + + //3. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + fprintf(stderr, "Sent ASN1 message to E2 Termination\n"); + } + + // 4. Receive response from E2 Termination + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = 0; + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return; + } + + char *recv_str; + recv_str = pendulum_get_strval(recv_buf, recv_len); + fprintf(stderr, "Received response message #%d from xApp: %s\n", count, recv_str); + + // 5. TODO: Send response to serial + // Compare if delay has changed: + // if(strcmp(delay_str_prev, recv_str) != 0) { + // serial_writeline(serial_fd, recv_str); + // } + + //serial_writeline(serial_fd, recv_str); + + //Write to a file + FILE *f; + f = fopen("arduino_delay.txt", "w"); + fprintf(f, "%s", recv_str); + fclose(f); + + begin = clock() - begin; + rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + fprintf(stderr, "E2Agent-RIC-E2Agent RTT = %f ms\n", rtt); + + } + + close(client_fd); +} + +int main(int argc, char *argv[]) +{ + fprintf(stderr, "E2 AGENT - PENDULUM CONTROL. Version %s\n", VERSION); + + // char *recv_str = "9"; + // int delay; + // + // printf("delay = %d\n", atoi(recv_str)); + // + // long delay = 22.5; + // + // printf("delay = %d\n", (int)delay); + // return 0; + + // test_rmr(); return 0; + // test_adruino_serial(); return 0; + + char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + int server_fd; + int client_fd; + struct sockaddr client_addr; + socklen_t client_addr_size; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n" , server_port); + return -1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + fprintf(stderr, "Unrecognized option.\n"); + fprintf(stderr, "Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return -1; + } + + server_fd = sctp_start_server(server_ip, server_port); + + fprintf(stderr, "Waiting for connection...\n"); + client_fd = accept(server_fd, &client_addr, &client_addr_size); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + return -1; + } + + //Todo: retrieve client ip addr + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + char client_ip_addr[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip_addr, INET_ADDRSTRLEN); + + fprintf(stderr, "New client connected from %s\n", client_ip_addr); + + // while(1) //put while loop if want to receive from multiple clients + // { + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + memset(recv_buf, 0, sizeof(recv_buf)); + + fprintf(stderr, "------------------------\n"); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + else if(recv_len == 0) + { + fprintf(stderr, "\nConnection from %s closed by remote peer\n", client_ip_addr); + if(close(client_fd) == -1) + { + perror("close"); + } + return -1; + } + + //fprintf(stderr, "Received a message of size %d\n", recv_len); + + //TODO: check PPID here before calling x2ap handler + + sctp_data_t response = {NULL, 0}; + x2ap_eNB_handle_message(recv_buf, recv_len, &response); + + //======================================================================= + //reply to client + assert(response.data != NULL); + if(sctp_send_to_socket(client_fd, response.data, (size_t)response.len) > 0){ + fprintf(stderr, "Sent X2 SETUP RESPONSE \n"); + } else{ + perror("send to socket"); + return -1; + } + + fprintf(stderr, "X2 Setup Completed \n"); + + //========================================================================= + // Pendulum interaction + // Send pendulum state to E2 Termination and receive response + pendulum_control_E2_agent(client_fd); + // } //end while + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c new file mode 100644 index 0000000..33fa0ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_serial.c @@ -0,0 +1,56 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "e2sim_defs.h" +#include + +#include "adruino_serial.h" + +int main(int argc, char *argv[]) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1) + { + //usleep(5*1000); //sleep 5ms between read + sleep(1); + + FILE *f; + f = fopen("arduino_delay.txt", "r"); + assert(f); + + fread(buf, 1, sizeof(buf), f); + + printf("delay content = %s \n", buf); + + serial_writeline(fd, buf); + + fclose(f); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c new file mode 100644 index 0000000..c96a440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2sim_test_client.c @@ -0,0 +1,378 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +#include "x2ap_generate_messages.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +//time +#include + +//these are the metrics being sent to the a1 mediator +int ave_ric_rtt_last_epoch=0; +int ave_msg_rate_last_epoch=0; +int ave_pendulum_msg_rate_last_epoch=0; + +int total_rtt_current_epoch=0; +int total_messages_current_epoch=0; +int total_pendulum_messages_current_epoch=0; + +int total_rtt_entries_current_epoch=0; + +int epoch_duration = 1;//in seconds + +long rtt_epoch_start_time =0; + +long msg_rate_epoch_start_time =0; +long pendulum_msg_rate_epoch_start_time = 0; + +long current_timestamp_in_us(){ + struct timeval currentTime; + gettimeofday(¤tTime, NULL); + return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec; +} +void update_rtt_metrics(long rtt){//called every time there is a new rtt measurement + if(rtt_epoch_start_time == 0) + rtt_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + + total_rtt_current_epoch = total_rtt_current_epoch+rtt; + total_rtt_entries_current_epoch++; + + if((current_timestamp_in_us() - rtt_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_ric_rtt_last_epoch = total_rtt_current_epoch/total_rtt_entries_current_epoch; + total_rtt_current_epoch =0; + rtt_epoch_start_time = 0; + } +} + +void update_msg_rate_metrics(){ + if(msg_rate_epoch_start_time == 0) + msg_rate_epoch_start_time= current_timestamp_in_us(); //start of a new epoch + total_messages_current_epoch++; + if((current_timestamp_in_us() - msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_msg_rate_last_epoch = total_messages_current_epoch; + total_messages_current_epoch =0; + msg_rate_epoch_start_time =0; + } +} + +void update_pendulum_control_rate() +{ + if(pendulum_msg_rate_epoch_start_time == 0) + pendulum_msg_rate_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + total_pendulum_messages_current_epoch++; + + if((current_timestamp_in_us() - pendulum_msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_pendulum_msg_rate_last_epoch = total_pendulum_messages_current_epoch; + total_pendulum_messages_current_epoch = 0; + pendulum_msg_rate_epoch_start_time = 0; + } + +} + +void send_metrics_to_a1_med(struct rmr_context *rmr_c){ + int mtype=103; + char* metrics= malloc(1024); + int time_int = current_timestamp_in_us()/1000000; + //int ave_msg_rate_last_epoch=500; + snprintf(metrics, 1024, "{%s:%d, %s:%d, %s:%d, %s:%d}", \ + "\"latency\"", ave_ric_rtt_last_epoch/1000, \ + "\"ricload\"",ave_msg_rate_last_epoch, \ + "\"load\"",ave_pendulum_msg_rate_last_epoch, \ + "\"time\"",time_int); + rmr_send_wrapper(rmr_c, mtype, metrics); + printf("Sent message of type:%d to a1_med with content:%s\n",mtype,metrics); +} + +void forward_to_load_consumer(struct rmr_context *rmr_c){//the content does not matter + int mtype=105; + char* load_message="dummy load"; + rmr_send_wrapper(rmr_c, mtype, load_message); + printf("Sent message of type:%d to load consumer with content:%s\n",mtype,load_message); +} + +static void pendulum_control_E2_Termination(int client_fd) +{ + printf("--------------------------------------\n"); + printf("E2 TERMINATION - START PENDULUM CONTROL\n"); + printf("--------------------------------------\n"); + + uint8_t *send_buffer; + uint8_t recv_buffer[1024]; + uint32_t send_len; + uint32_t recv_len; + + clock_t begin = clock(); + double rtt; + double rtt_stats[100000]; + long recv_count = 0; + long fail_count = -1; //ignore the first message (see adruino code) + + long sqn; + int count = 0; + + //================================= + + //Setup context + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "E2TERM_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMR to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + + //================================== + long loop_start_time = 0; + while(1){ + printf("----------------\n"); + count += 1; + loop_start_time = current_timestamp_in_us(); + //0. Receiving ASN message from E2 Agent + memset(recv_buffer, 0, sizeof(recv_buffer)); + printf("Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + recv_len = 0; + + printf(" 1Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + //long time_of_message_from_e2agent = current_timestamp_in_us(); + + if((recv_len = recv(client_fd, &recv_buffer, sizeof(recv_buffer), 0)) == -1) { + perror("recv"); + return; + } + + long time_of_message_from_e2agent = current_timestamp_in_us(); + + printf(" 2Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + if(recv_len == 0) { + rmr_close_wrapper(rmr_c); + + printf("Connection from closed by remote peer.\n"); + if(close(client_fd) == -1) { + perror("close"); + } + return; + } + + printf(" 3Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // begin = clock() - begin; + // rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + //printf("E2Term-Adruino-E2Term = %f ms\n", rtt); + + //2. Decode ASN message and Extract pendulum angle + char *recv_str; + recv_str = pendulum_get_strval(recv_buffer, recv_len); + // if( (strcmp(recv_str, "-1") == 0) || (strcmp(recv_str, "") == 0) ) + + if(strcmp(recv_str, "\n") == 0) + { + printf("RECEIVED EOL\n"); + } + + printf(" 4Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // if(atof(recv_str) <= 0) + // { + // printf("FAILLLLLL\n"); + // fail_count += 1; + // } + // else { + // rtt_stats[recv_count] = atof(recv_str); + // recv_count++; + // } + + printf("Time to receive angle message from arduino after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + printf("Received message #%d from Adruino: %s\n", count, recv_str); + //printf("Last reported RTT (Adruino-RIC-Adruino): %f ms, fail_count = %ld\n", + // atof(recv_str)/1000, fail_count); + + // 3. [BHARATH] send_to_xApp(&pendulum_state, &response) + // while(1) { + // usleep( 10 ); + // char* message = "foo 111"; + char reply[1024]; + int got_pend_control=0; + rmr_send_wrapper(rmr_c, mtype, recv_str ); + printf("Sent message of type:%d to pendulum xApp with content:%s\n",mtype,recv_str); + long angle_receive_time =0; + while (got_pend_control == 0){ + if(rmr_poll_for_message(rmr_c) == 1) { + update_msg_rate_metrics(); + switch(rmr_c->rbuf->mtype) { + case 33 : + angle_receive_time = current_timestamp_in_us(); + got_pend_control=1; + update_pendulum_control_rate(); //add this + strcpy(reply,rmr_c->rbuf->payload); + printf("Received control message from pendulum xapp with message type: %d and content %s\n",rmr_c->rbuf->mtype, reply); + break; + case 102 : + printf("Received METRIC request from A1 mediator with message type: %d and content %s\n",rmr_c->rbuf->mtype,rmr_c->rbuf->payload); + send_metrics_to_a1_med(rmr_c); + break; + case 104 : + printf("***************************Received load from load generator****************************"); + forward_to_load_consumer(rmr_c); + break; + default : + continue; + } + } + + } + printf("Time to receive control message from xapp after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); +// snprintf(reply, 1024, "$%d#\n", (int)ave_ric_rtt_last_epoch/1000); + send_len = pendulum_create_asn_msg(&send_buffer, 0, 0, 0, reply); + printf("Time to create asn message after receiving angle: %ld microseconds\n",current_timestamp_in_us() - angle_receive_time); + begin = clock(); + + //6. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, send_buffer, (size_t)send_len) > 0){ + printf("Sent ASN1 response to E2 Agent\n"); + } + long time_of_reply_to_e2agent = current_timestamp_in_us(); + printf("Time to send asn message after receiving angle: %ld microseconds \n",current_timestamp_in_us() - angle_receive_time); + long rtt = (time_of_reply_to_e2agent - time_of_message_from_e2agent); + ave_ric_rtt_last_epoch = rtt; + printf("RIC RTT is %lf milliseconds\n", rtt/1000.0); + //update_rtt_metrics(rtt); + } + + rmr_close_wrapper(rmr_c); + +} + +int main(int argc, char* argv[]) +{ + // test_rmr(); return 0; + + const char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + printf("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return 1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + printf("Unrecognized option.\n"); + printf("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return 0; + } + + int client_fd; + client_fd = sctp_start_client(server_ip, server_port); + + uint8_t *buffer; + uint32_t len; + + //Note: put a while(1) loop here if want client to stay + // for(int i = 0; i < 3; i++) + // { + buffer = NULL; + len = 0; + + printf("------------------------\n"); + clock_t begin; + begin = clock(); + + //Create pdu for x2 message and send to socket + len = x2ap_generate_x2_setup_request(&buffer); + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + printf("Sent X2 SETUP REQUEST\n"); + } + + //======================================================================= + //printf("waiting for server response\n"); + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + //sctp_recv_from_socket(client_fd, recv_buf, sizeof(recv_buf)); + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + + //printf("Received a message of size %d\n", recv_len); + x2ap_eNB_handle_message(recv_buf, recv_len, NULL); + + begin = clock() - begin; + double time_taken = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + printf("Close-loop time: %f ms \n", time_taken); + printf("X2 Setup Completed \n"); + + // } //end iteration + + //========================================================================= + // Pendulum interaction + // Receive pendulum state from E2 Agent and send response + pendulum_control_E2_Termination(client_fd); + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp new file mode 100644 index 0000000..b65ac65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/e2termination_test.cpp @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "asn_e2ap.hpp" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "e2ap_asn_codec.hpp" + +using namespace std; + +void test_send_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_X2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + } + +void test_send_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_ENDCX2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_send_RICSubscriptionRequest(int &client_fd) +{ + LOG_I("Test RIC SUBSCRIPTION"); + + /* Create RIC SUBSCRITION REQUEST */ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + RICsubscription_params_t params; + params.request_id = 2; + params.seq_number = 200; + params.ran_func_id = 0; + params.event_trigger_def = "hello world"; + + RIC_action_t action1(1, RICactionType_report); + // RIC_action_t action2(3, RICactionType_insert); + // RIC_action_t action3(5, RICactionType_insert); + // RIC_action_t action4(7, RICactionType_insert); + params.actionList.push_back(action1); + // params.actionList.push_back(action2); + // params.actionList.push_back(action3); + // params.actionList.push_back(action4); + + e2ap_create_RICsubscriptionRequest(pdu, params); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + //wait to receive response and indication (if any) + sctp_buffer_t recv_buf; + LOG_I("[SCTP] Waiting for SCTP data"); + while(1) + { + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + else + break; + + } + + + return; + //========================================================================== + + //decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + + e2ap_decode_pdu(pdu2, data.buffer, data.len); + + RICsubscription_params_t params2; + e2ap_parse_RICsubscriptionRequest(pdu2, params2); + printf("request_id = %d\n", params2.request_id); + printf("seq_number = %d\n", params2.seq_number); + printf("ran_func_id = %d\n", params2.ran_func_id); + printf("event = %s\n", ¶ms2.event_trigger_def[0]); + + for( auto const &a : params.actionList) + { + printf("action id = %d, action type = %d\n", (int)a.action_id, (int)a.action_type); + } + + + LOG_I("================= RESPONSE ==========================="); + for(size_t i = 0; i < params2.actionList.size(); i++) + { + //example logic: admit every other action + if(i%2 == 0) { + params2.actionList[i].isAdmitted = true; + } else { + params2.actionList[i].isAdmitted = false; + params2.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params2.actionList[i].notAdmitted_subCause = 5; + } + } + + e2ap_pdu_t* res_pdu = new_e2ap_pdu(); + e2ap_create_RICsubscriptionResponse(res_pdu, params2); + + e2ap_print_pdu(res_pdu); + + //Encode into buffer + sctp_buffer_t data_resp; + e2ap_encode_pdu(res_pdu, data_resp.buffer, sizeof(data_resp.buffer), data_resp.len); + + LOG_I("================= FAILURE ==========================="); + e2ap_pdu_t* fail_pdu = new_e2ap_pdu(); + + RICsubscription_params_t params3; + e2ap_parse_RICsubscriptionRequest(pdu2, params3); + + for(size_t i = 0; i < params3.actionList.size(); i++) + { + params3.actionList[i].isAdmitted = false; + params3.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params3.actionList[i].notAdmitted_subCause = 5; + } + + e2ap_create_RICsubscriptionFailure(fail_pdu, params3); + e2ap_print_pdu(fail_pdu); + + //Encode into buffer + sctp_buffer_t data_fail; + e2ap_encode_pdu(fail_pdu, data_fail.buffer, sizeof(data_fail.buffer), data_fail.len); + +} + +int main(int argc, char* argv[]){ + + LOG_I("E2 Termination Test"); + + // test_send_RICSubscriptionRequest(); + // return 0; + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //--------------------------------------------------- + // test_send_X2Setup(client_fd); + test_send_ENDCX2Setup(client_fd); + test_send_RICSubscriptionRequest(client_fd); + + //--------------------------------------------------- + + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 new file mode 100644 index 0000000..d36a4de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/Pendulum/pendulum.asn1 @@ -0,0 +1,12 @@ +PendulumModule DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Pendulum ::= SEQUENCE { + sequence INTEGER OPTIONAL, + angle REAL OPTIONAL, + torque REAL OPTIONAL, + strval PrintableString OPTIONAL +} + +END diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt new file mode 100644 index 0000000..4faee6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/CMakeLists.txt @@ -0,0 +1,59 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB WLG_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_wlg.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_wlg ${WLG_SOURCES}) +target_link_libraries( ric_wlg ${SCTP_STD_LIB} ) + +#---------------------------------------------- +file(GLOB RICPERF_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_perf.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_perf ${RICPERF_SOURCES}) +target_link_libraries( ric_perf ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh new file mode 100644 index 0000000..2f81b56 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/build_wlg.sh @@ -0,0 +1,27 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +mkdir -p build +cd build +rm -rf CMakeCache.txt +cmake .. +make -j`nproc` diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp new file mode 100644 index 0000000..9403283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_perf.cpp @@ -0,0 +1,287 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +void set_seqnum(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + // xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + + // e2ap_asn1c_print_pdu(pdu); +} + +int subresponse_get_sequenceNum(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + return requestid->ricRequestSequenceNumber; + break; + } + } +} + +void subrequest_set_sequenceNum(E2AP_PDU_t* pdu, int seq) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + requestid->ricRequestSequenceNumber = seq; + break; + } + } + +} + +void subscription_response_get_field(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int requestID_val, sequenceNum; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + requestID_val = requestid->ricRequestorID; + sequenceNum = requestid->ricRequestSequenceNumber; + requestid->ricRequestSequenceNumber = 202; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + // case (ProtocolIE_ID_id_RICsubscription): + // ricsubscription = &memb_ptr->value.choice.RICsubscription; + // xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + // break; + } + } + + LOG_I("Request ID = %d, seq = %d", requestID_val, sequenceNum); +} + +void subscription_request_get_field(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICsubscription): + ricsubscription = &memb_ptr->value.choice.RICsubscription; + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + break; + } + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator - Performance Test"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + + //4. Receive RIC SUBSCRIPT RESPONSE + int count = 0; + + while(1) + { + usleep(1000); //sleep for one ms + + sctp_buffer_t recv_buf; + + int res_seq; + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + // e2ap_handle_sctp_data(client_fd, recv_buf); + + E2AP_PDU_t* res_pdu = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(res_pdu, recv_buf.buffer, recv_buf.len); + + int procedureCode = e2ap_asn1c_get_procedureCode(res_pdu); + int index = (int)res_pdu->present; + + if(index == E2AP_PDU_PR_successfulOutcome && \ + procedureCode == ProcedureCode_id_ricSubscription) + { + res_seq =subresponse_get_sequenceNum(res_pdu); + count++; + + LOG_I("Received RIC SUBSCRIPTION RESPONSE, seq = %d, totalCount = %d",\ + res_seq, count); + + //Put res_seq in new subscription request + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + subrequest_set_sequenceNum(req_pdu, res_seq); + // e2ap_asn1c_print_pdu(req_pdu); + + encode_and_send_sctp_data(req_pdu, client_fd); + LOG_I("Send new SUBSCRIPT REQUEST, seq = %d", res_seq); + } + + } + } + + + // E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // + // //Extract subscription response sequence number + // int res_seq = subresponse_get_sequenceNum(res_pdu); + // LOG_I("Subscription Response SeqNo = %d", res_seq); + // + // //Put responseSeq in new subscription request + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // + // subrequest_set_sequenceNum(req_pdu, res_seq); + + // e2ap_asn1c_print_pdu(req_pdu); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp new file mode 100644 index 0000000..309153d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/WLG/ric_wlg.cpp @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC WLG"); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt new file mode 100644 index 0000000..b257505 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/CMakeLists.txt @@ -0,0 +1,49 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(x2term) + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "${E2SIM_ROOT}/test/X2/x2term.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp new file mode 100644 index 0000000..db279a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2agent.cpp @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("X2 Agent. Version %s", VERSION); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(server_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp new file mode 100644 index 0000000..e325827 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2term.cpp @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + // sctp_send_data(client_fd, data); + sctp_send_data_X2AP(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //Send X2 Setup Request + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + + //wait to receive X2SetupResponse + while(1){ + wait_for_sctp_data(client_fd); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp new file mode 100644 index 0000000..1953ce6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/X2/x2termination_test.cpp @@ -0,0 +1,119 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" +#include "x2ap_message_handler.hpp" +#include "x2ap_asn_codec.hpp" + +using namespace std; + +void test_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //expect X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_ENDCX2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //expect ENDC X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect ENDC X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +int main(int argc, char* argv[]){ + + LOG_I("X2 Termination Test"); + + options_t ops = read_input_options(argc, argv); + + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + test_X2Setup(client_fd); + // test_ENDCX2Setup(client_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README new file mode 100644 index 0000000..9e5a197 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/README @@ -0,0 +1,13 @@ +This is just a basic version of the README that the author of the E2 simulator can augment as he/she sees fit. + +Building rmr + +- Call the rmr_install.sh + + +# Running the sender and receiver + +- Create a route generate (.rt) file that is common to both the sender and receiver and place it in $HOME/global_rmr_files/global_rmr_routes.rt +- Build the receiver in the /tests/pendulum_xapp folder by invoking build_recvr.sh. Run it using bash run_receiver +- Build the sender in the /tests/sender folder by invoking build_sender.sh. Run it using bash run_sender. +- You can see packets being exchanged. diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh new file mode 100644 index 0000000..786a07e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/rmr_install.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +#git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr && (cd rmr && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.oran-osc.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg && git checkout 6735f136906ce2 ) + +cd rmr/ +mkdir $HOME/usr +mkdir .build +cd .build +cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh new file mode 100644 index 0000000..602046f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_rcvr.c -g -o rmr_rcvr -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export PENDULUM_XAPP_RMR_RCV_PORT=5560 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies + +export PRINT_FREQ=10000 #frequency at which test stats will be printed + +RMR_RCV_ACK=1 ./rmr_rcvr $PRINT_FREQ; # receiver that will ack every sender message diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c new file mode 100644 index 0000000..2d8e7fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/receiver/rmr_rcvr.c @@ -0,0 +1,163 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// :vim ts=4 sw=4 noet: +/* + Mnemonic: rmr_rcvr2.c + Abstract: Very simple test listener built on RMr libraries. It does nothing + but return the message it recevied back to the sender. + + Define these environment variables to have some control: + RMR_SEED_RT -- path to the static routing table + RMR_RTG_SVC -- host:port of the route table generator + + One command line parm is accepted: stats frequency. This is a number, n, + which causes stats to be generated after every n messages. If set to 0 + each message is written when received and no stats (msg rate) is generated. + + Date: 11 February 2018 + Author: E. Scott Daniels + + Mods: 18 Mar 2019 -- simplified for demo base. +*/ + +#include +#include +#include +#include +#include + +#include + +typedef struct { + int32_t mtype; // message type ("long" network integer) + int32_t plen; // payload length + unsigned char xid[RMR_MAX_XID]; // space for user transaction id or somesuch + unsigned char sid[RMR_MAX_SID]; // sender ID for return to sender needs + unsigned char src[RMR_MAX_SRC]; // name of the sender (source) + struct timespec ts; // timestamp ??? +} mhdr_t; + + +int main( int argc, char** argv ) { + void* mrc; // msg router context + rmr_mbuf_t* msg = NULL; // message received + int i; + char* listen_port; + char* tok; + int must_ack = 1; // flag -- if set we rts all messages + mhdr_t* hdr; + int last_seq = 0; // sequence number from last message + int this_seq; // sequence number on this message + int count = 0; // count of msg since last status + long long tcount = 0; // total count of messages + time_t ts; + time_t lts; + int stat_freq = 20000; // write stats after reciving this many messages + int first_seq = -1; // first sequence number we got to report total received + int max_rt = 1000; // max times we'll retry an ack + + if( (tok = getenv( "RMR_RCV_ACK" )) != NULL ) { + must_ack = atoi( tok ); + } + + if( (listen_port = getenv( "PENDULUM_XAPP_RMR_RCV_PORT" )) == NULL ) { + listen_port = "4560"; + } + + if( argc > 1 ) { + stat_freq = atoi( argv[1] ); + } + fprintf( stderr, " stats will be reported every %d messages\n", stat_freq ); + + mrc = rmr_init( listen_port, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // start your engines! + if( mrc == NULL ) { + fprintf( stderr, " ABORT: unable to initialise RMr\n" ); + exit( 1 ); + } + + while( ! rmr_ready( mrc ) ) { + fprintf( stderr, " waiting for RMr to show ready\n" ); + sleep( 1 ); + } + fprintf( stderr, " RMr now shows ready\n" ); + + lts = time( NULL ); + fprintf( stderr, " listening on %s acking %s\n", listen_port, must_ack != 0 ? "on" : "off" ); + + //rmr_set_stimeout( mrc, 50 ); + while( 1 ) { + sleep (2 ); + msg = rmr_rcv_msg( mrc, msg ); // block until one arrives + if( msg == NULL ) { + continue; // shouldn't happen, but don't crash if we get nothing + } + if( msg->mtype < 0 || msg->state != RMR_OK ) { + fprintf( stderr, "[WRN] bad msg: state=%d errno=%d\n", msg->state, errno ); + continue; // just loop to receive another + } + + if( stat_freq == 0 ) { // mechanism to dump all received messages for quick testing + fprintf( stdout, " msg received: type = %d len = %d (%s)\n", msg->mtype, msg->len, msg->payload ); // assume a nil term string in payload + } + + count++; // messages received for stats output + tcount++; + + //if( stat_freq >= 1000 ) { + if(1) { + //if( (count % stat_freq) == 0 ) { + if(1) { + ts = time( NULL ); + if( ts - lts ) { + + fprintf( stderr, " %7lld received %5lld msg/s over the last %3lld seconds mrt=%d, with content=%s\n", + (long long) last_seq - first_seq, (long long) (count / (ts-lts)), (long long) ts-lts, max_rt,msg->payload ); + lts = ts; + count = 0; + } + } + } + + if( must_ack ) { // send back a response + //fprintf( stdout, " msg: type = %d len = %d; acking\n", msg->mtype, msg->len ); + //msg->len = snprintf( msg->payload, 1024, "bar %lld", tcount ); // ack with bar and counter + msg->len = snprintf( msg->payload, 1024, "Reply hello back to Arduino!\n"); + // msg->len = snprintf( msg->payload, 1024, "OK\n"); + + + //msg->mtype = 999; //only to be used if rts is not possible + + //msg = rmr_send_msg (mrc, msg); //only to be used if rts is not possible + + msg = rmr_rts_msg( mrc, msg ); // this is a retur to sender; preferred + //if( (msg = rmr_send_msg( mrc, msg )) != NULL ) { // this is a routed send; not preferred, but possible + if( (msg = rmr_rts_msg( mrc, msg )) != NULL ) { + //----- checking too many times here has been problematic and causes what appears to be race condidtions in NNG threads; for now max_rt should be small + max_rt = 2; + while( max_rt > 0 && msg->state != RMR_OK && errno == EAGAIN ) { // NNG likes to refuse sends, just keep trying on eagain + max_rt--; + rmr_rts_msg( mrc, msg ); + //rmr_send_msg (mrc, msg); + } + } + } + + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh new file mode 100644 index 0000000..c4eb8fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/build_and_run_sender.sh @@ -0,0 +1,29 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_sender.c -g -o rmr_sender -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export DUMMY_SENDER_RMR_RCV_PORT=38086 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies +export DEMO_MAX_PAYLOAD_BYTES=240 # max_size of payload + +./rmr_sender; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c new file mode 100644 index 0000000..724b0d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_sender.c @@ -0,0 +1,96 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// :vim ts=4 sw=4 noet: + +/* + Mnemonic: rmr_sender2.c + Abstract: Very simple test sender that polls and deals with responses + in between sends (from a single process). + + Date: 18 February 2018 + Author: E. Scott Daniels + + Modified: 18 Mar 2019 - changes to support demo +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "rmr_wrapper.h" + + +void usage( char* argv0 ) { + fprintf( stderr, "usage: %s [mtype-max]\n", argv0 ); + fprintf( stderr, "Sender will send messages with rotating msg types from 0 through mtype-max (if supplied)\n" ); + fprintf( stderr, "if not supplied, only mtype 0 is sent\n" ); + fprintf( stderr, "The default listen port for return messages is 43086; this can be changed by setting DUMMY_SENDER_RMR_RCV_PORT in the environment.\n" ); + fprintf( stderr, "The sender will send forever unless DEMO_SENDER_MAX is set in the environment which causes termination after max messages.\n" ); + fprintf( stderr, "The sender will poll for received messages after each send. The amount of time waited is controlled with DEMO_SENDER_PTO (ms) in the env. Use 0 for non-blocking poll.\n" ); +} + +int main( int argc, char** argv ) { + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + long count = 0; + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "DUMMY_SENDER_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMr to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + while( 1 ) { + usleep( 10 ); // simulate some work being done + char* message = "foo 111"; + + if(rmr_send_wrapper (rmr_c, mtype, message ) == 1) { + //message successfully received in the receive buffer + char reply[1024]; + strcpy(reply,rmr_c->rbuf->payload); + fprintf( stderr, "Acknowledgment received with content:%s\n",rmr_c->rbuf->payload); + rcount++; + } + count++; + + if( (count % 5000) == 0 ) { + fprintf( stdout, "[INFO] total sent: %ld total received: %ld drops=%ld\n", count, rcount, count - rcount ); + } + + } + + fprintf( stderr, "[INFO] sender is terminating having sent %ld messages\n", count ); + rmr_close_wrapper(rmr_c); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h new file mode 100644 index 0000000..446d20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/test/rmr_interface/tests/sender/rmr_wrapper.h @@ -0,0 +1,142 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +int epoll_to = 1;// global default epoll timout -- 1ms +char* eparm; // generic env pointer + +struct rmr_context { + void* mrc; + int rcv_fd; // pollable fd + struct epoll_event epe; // event definition for event to listen to + struct epoll_event events[10]; // wait on 10 possible events + int ep_fd; + int max_payload_size; // ++SCOTT + rmr_mbuf_t* sbuf; // send buffer + rmr_mbuf_t* rbuf; // received buffer +}; + + +struct rmr_context * rmr_init_wrapper(char* lport){ + + struct rmr_context *rmr_c = malloc(sizeof (struct rmr_context)); + fprintf( stderr, "[INFO] glistening for replies on %s\n", lport ); + + + rmr_c->mrc = rmr_init(lport, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // setup RMr and get a context (rmr_c.mrc) + rmr_c->ep_fd=-1; + + //polling related initializations + rmr_c->rcv_fd = rmr_get_rcvfd( rmr_c->mrc );// get the fd to poll for messages received + if( rmr_c->rcv_fd < 0 ) { + fprintf( stderr, "[FAIL] unable to set up polling fd\n" ); + exit( 1 ); + } + + if( (rmr_c->ep_fd = epoll_create1( 0 )) < 0 ) { + fprintf( stderr, "[FAIL] unable to create epoll fd: %d\n", errno ); + exit( 1 ); + } + rmr_c->epe.events = EPOLLIN; + rmr_c->epe.data.fd = rmr_c->rcv_fd; + + if( epoll_ctl( rmr_c->ep_fd, EPOLL_CTL_ADD, rmr_c->rcv_fd, &rmr_c->epe ) != 0 ) { + fprintf( stderr, "[FAIL] epoll_ctl status not 0 : %s\n", strerror( errno ) ); + exit( 1 ); + } + //end of polling related initializations + + //++SCOTT------ next lines until !!SCOTT + rmr_c->max_payload_size = 240; //default + if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + rmr_c->max_payload_size = atoi(eparm); // override with env + } + //!!SCOTT + + //~~SCOTT next line + rmr_c->sbuf = rmr_alloc_msg( rmr_c->mrc, rmr_c->max_payload_size ); // allocate largest payload to send + rmr_c->rbuf = NULL; + + return rmr_c; +} + +void rmr_send_wrapper (struct rmr_context *rmr_c, int mtype, char* message) { + //--SCOTT int max_payload_size = 240; //default + //--SCOTT if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + //--SCOTT max_payload_size = atoi(eparm); + //--SCOTT } + + //~~SCOTT next line + snprintf( rmr_c->sbuf->payload, rmr_c->max_payload_size, "%s", message); // simple send message -- replace with real content + + rmr_c->sbuf->mtype = mtype; // fill in message meta data + rmr_c->sbuf->len = strlen( rmr_c->sbuf->payload ) + 1; // actual length of payload (count the nil end of string) + rmr_c->sbuf->state = 0; + + //retry send for a few times before giving up + long natter = 0; // natter on for errors only once in a while + if( (rmr_c->sbuf = rmr_send_msg( rmr_c->mrc, rmr_c->sbuf )) != NULL ) {// unlikely, but might get a null pointer back if NNG really is buggered + if( rmr_c->sbuf->state != RMR_OK ) { + if( errno == EAGAIN ) { + while( rmr_c->sbuf->state != RMR_OK && errno == EAGAIN ) {// NNG likes to refuse sends, just keep trying on eagain + rmr_send_msg( rmr_c->mrc, rmr_c->sbuf ); + } + } else {// most likely connection refused, don't natter on + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + } + } else { + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + +} + +int rmr_poll_for_message(struct rmr_context *rmr_c){ + int nready; + int i; + int return_type =0; + //start polling the channel to read the acknowledgment + //~~SCOTT next line + + nready = epoll_wait( rmr_c->ep_fd, rmr_c->events, 10, epoll_to ); // wait up to epoll_to ms for a response + for( i = 0; i < nready && i < 10; i++ ) { // loop through to find what is ready + if( rmr_c->events[i].data.fd == rmr_c->rcv_fd ) { // RMr has something + errno = 0; + rmr_c->rbuf = rmr_rcv_msg( rmr_c->mrc, rmr_c->rbuf ); // something ready; this should not block + if( rmr_c->rbuf ) { + // fprintf( stderr, " acknowledgment received:%s\n",rmr_c->rbuf->payload); + return_type = 1; //the message has been acknowledged + } + } + } + return return_type; +} + +void rmr_close_wrapper (struct rmr_context *rmr_c){ + + rmr_close( rmr_c->mrc ); + free(rmr_c); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes new file mode 100644 index 0000000..87ced95 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/asn_defs/generate_e2ap_e2sm_codes @@ -0,0 +1,39 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +E2AP_asn="e2ap-v031.asn" +E2SM_asn="e2sm-gNB-X2-release-1-v041.asn" +X2AP_asn="x2ap-no-desc-15-04.asn" + +GEN_DIR=../../src/ASN1c/ + +rm -f $GEN_DIR/*.c $GEN_DIR/*.h + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2AP_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2SM_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +echo "ASN1 C codes generated at $GEN_DIR" + +# asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER /tmp/e2ap-v031.asn /tmp/x2ap-no-desc-15-04.asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash new file mode 100644 index 0000000..1759621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/build_helper.bash @@ -0,0 +1,93 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +####################################### +# Helper Func +###################################### + +black='\E[30m' +red='\E[31m' +green='\E[32m' +yellow='\E[33m' +blue='\E[34m' +magenta='\E[35m' +cyan='\E[36m' +white='\E[37m' +reset_color='\E[00m' + +cecho() # Color-echo. arg1 = message, arg2 = color +{ + local default_msg="No Message." + message=${1:-$default_msg} + color=${2:-$green} + echo -e -n "$color$message$reset_color" + echo + return +} + +echo_error() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $red +} + +echo_fatal() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + echo_error "$my_string" + exit -1 +} + +echo_warning() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $yellow +} + +echo_success() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $green +} + +echo_info() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $blue +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c new file mode 100644 index 0000000..7d1391f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_asn1c @@ -0,0 +1,31 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +echo "Will install asn1c" +sudo rm -rf asn1c +git clone https://gerrit.o-ran-sc.org/r/com/asn1c.git +cd asn1c/ +autoreconf -iv +./configure +cd examples +chmod u+x crfc2asn1.pl +cd .. +make +sudo make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies new file mode 100644 index 0000000..c5b3d7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/tools/install_dependencies @@ -0,0 +1,38 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +sudo apt-get update \ + && sudo apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + && sudo apt-get clean diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt new file mode 100644 index 0000000..32bf4d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/e2sim/ueMeasReport.txt @@ -0,0 +1,65 @@ +{ + "ueMeasReport": { + "du-id": 1000, + "ueMeasReportList": [ + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 0, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 1, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + }, + + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 1, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 0, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.cpp new file mode 100644 index 0000000..7484a45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.cpp @@ -0,0 +1,950 @@ +#include +#include +#include +#include + +#include +#include + + +#include "encode_e2apv1.hpp" + +extern "C" { +#include "E2SM-KPM-RANfunction-Description.h" + +#include "e2ap_asn1c_codec.h" +#include "GlobalE2node-ID.h" +#include "GlobalE2node-gNB-ID.h" +#include "GlobalgNB-ID.h" +#include "OCTET_STRING.h" +#include "asn_application.h" +#include "GNB-ID-Choice.h" +#include "ProtocolIE-Field.h" +#include "E2setupRequest.h" +#include "RICaction-ToBeSetup-Item.h" +#include "RICactions-ToBeSetup-List.h" +#include "RICeventTriggerDefinition.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "ProtocolIE-SingleContainer.h" +#include "RANfunctions-List.h" +#include "RICindication.h" +#include "RICsubsequentActionType.h" +#include "RICsubsequentAction.h" +#include "RICtimeToWait.h" + +} + +void generate_e2apv1_setup_request(E2AP_PDU_t *e2ap_pdu) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = 1; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded); + ranfuncdesc_str->size = er.encoded; + memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded); + + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + + +void generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) { + + E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t)); + ricid_bstring->buf = buf; + ricid_bstring->size = 4; + ricid_bstring->bits_unused = 0; + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmn->buf = buf2; + plmn->size = 5; + + GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t)); + globalricid->pLMN_Identity = *plmn; + globalricid->ric_ID = *ricid_bstring; + + E2setupResponseIEs__value_PR pres1; + pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID; + + resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID; + resp_ies1->criticality = 0; + resp_ies1->value.present = pres1; + resp_ies1->value.choice.GlobalRIC_ID = *globalricid; + + E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t)); + int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1); + + + SuccessfulOutcome__value_PR pres; + pres = SuccessfulOutcome__value_PR_E2setupResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = 1; + successoutcome->criticality = 0; + successoutcome->value.present = pres; + successoutcome->value.choice.E2setupResponse = *e2setupresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + +} + + +void generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) { + + fprintf(stderr, "in sub 1\n"); + RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 2\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid); + fprintf(stderr, "in sub 3\n"); + auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 4\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid); + + fprintf(stderr, "in generate sub\n"); + uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers"; + fprintf(stderr, "in gen sub 1\n"); + OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + triggerdef->buf = (uint8_t *)calloc(1,20); + triggerdef->size = 20; + memcpy(triggerdef->buf, buf2, triggerdef->size); + + + fprintf(stderr, "sub1\n"); + ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item; + + RICaction_ToBeSetup_ItemIEs__value_PR pres6; + pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + + printf("sub2\n"); + + uint8_t *buf5 = (uint8_t *)"ActionDef"; + + OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + actdef->buf = (uint8_t *)calloc(1,9); + actdef->size = 9; + memcpy(triggerdef->buf, buf5, 9); + + auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t)); + ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa); + + sa->ricTimeToWait = RICtimeToWait_w500ms; + sa->ricSubsequentActionType = RICsubsequentActionType_continue; + + /* + RICaction_ToBeSetup_Item_t *action_item = (RICaction_ToBeSetup_Item_t*)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item->ricActionID = 5; + action_item->ricActionType = 9; + action_item->ricActionDefinition = actdef; + action_item->ricSubsequentAction = sa; + */ + printf("sub3\n"); + + RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item_ies->id = proto_id; + action_item_ies->criticality = 0; + + action_item_ies->value.present = pres6; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa; + + + printf("sub5\n"); + /* + RICsubscriptionDetails_t *ricsubdetails = (RICsubscriptionDetails_t*)calloc(1, sizeof(RICsubscriptionDetails_t)); + printf("sub5.5\n"); + + ASN_SEQUENCE_ADD(&ricsubdetails->ricAction_ToBeSetup_List.list, action_item_ies); + ricsubdetails->ricEventTriggerDefinition = *triggerdef; + + printf("sub6\n"); + */ + + + RICsubscriptionRequest_IEs__value_PR pres3; + printf("sub6.1\n"); + pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; + ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails; + printf("sub6.2\n"); + + ricsubrid->criticality = 0; + ricsubrid->value.present = pres3; + printf("sub6.3\n"); + + ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef; + printf("sub6.4\n"); + + ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies); + + printf("sub7\n"); + + + ricreqid->id = ProtocolIE_ID_id_RICrequestID; + ricreqid->criticality = 0; + ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID; + ricreqid->value.choice.RICrequestID.ricRequestorID = 22; + ricreqid->value.choice.RICrequestID.ricInstanceID = 6; + + RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t)); + + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid); + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid); + + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = ProcedureCode_id_RICsubscription; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.RICsubscriptionRequest = *ricsubreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + // xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + +} + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], + long reqActionIdsRejected[], int accept_size, int reject_size, + long reqRequestorId, long reqInstanceId) { + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + // int numAccept = sizeof(reqActionIdsAccepted); + int numAccept = accept_size; + int numReject = reject_size; + // int numReject = sizeof(reqActionIdsRejected); + + + for (int i=0; i < numAccept ; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsAccepted[i]; + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + if (numReject > 0) { + + RICsubscriptionResponse_IEs_t *ricactionrejected = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + ricactionrejected->criticality = 0; + ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + RICaction_NotAdmitted_List_t* rejectlist = + (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t)); + ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist; + + for (int i=0; i < numReject; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsRejected[i]; + + RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t)); + noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item; + noadmitie->criticality = 0; + noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item; + noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected); + } + } + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + +} + +void generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) { + + //Gather details of the request + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long responseRequestorId; + long responseInstanceId; + long responseActionId; + + std::vector actionIds; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + responseRequestorId = requestorId; + responseInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + for (int i=0; i < actionCount; i++) { + //RICaction_ToBeSetup_Item_t + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + fprintf(stderr, "Next Action ID %ld\n", actionId); + responseActionId = actionId; + actionIds.push_back(responseActionId); + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", responseRequestorId); + fprintf(stderr, "instanceId %d\n", responseInstanceId); + + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i)); + + } + + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = actionIds.at(i); + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + +} + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, + long requestorId, + long instanceId, + long ranFunctionId, + long actionId, + long seqNum, + uint8_t *ind_header_buf, + int header_length, + uint8_t *ind_message_buf, + int message_length) { + + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId; + ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = ranFunctionId; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = actionId; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = seqNum; + + //Indication type is REPORT + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + + hdr_str->buf = (uint8_t*)calloc(1,header_length); + hdr_str->size = header_length; + memcpy(hdr_str->buf, ind_header_buf, header_length); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = header_length; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + + + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = message_length; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *cpid_buf = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + + printf("5.1\n"); + + int cpid_buf_len = strlen((char*)cpid_buf); + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len); + ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len; + + memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len); + + printf("5.2\n"); + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + printf("5.3\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + + printf("5.35\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + + printf("5.36\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + printf("5.4\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + + printf("5.5\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + // ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + +} + +void generate_e2apv1_indication_request(E2AP_PDU *e2ap_pdu) { + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = 25; + ricind_ies->value.choice.RICrequestID.ricInstanceID = 3; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = 70; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = 80; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = 45; + + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + hdr_str->buf = (uint8_t*)calloc(1,12); + hdr_str->size = 12; + memcpy(hdr_str->buf, buf2, 12); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,12); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = 12; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, buf2, 12); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + // uint8_t *buf9 = (uint8_t *)"reportmsg"; + + /* + E2SM_KPM_IndicationMessage_t *e2sm_ind_msg = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + + encode_kpm(e2sm_ind_msg); + */ + + E2SM_KPM_RANfunction_Description_t *e2sm_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + + encode_kpm_function_description(e2sm_desc); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + e2sm_desc, e2smbuffer, e2smbuffer_size); + + /* + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + e2sm_ind_msg, e2smbuffer, e2smbuffer_size); + */ + + + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *msg_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + msg_str->buf = (uint8_t*)calloc(1,er.encoded); + msg_str->size = er.encoded; + memcpy(msg_str->buf, e2smbuffer, er.encoded); + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = er.encoded; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, e2smbuffer, er.encoded); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *buf4 = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + cpid_str.buf = buf4; + cpid_str.size = 4; + + + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID = cpid_str; + + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + /* + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + */ + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); +} + + +void generate_e2apv1_indication_response(E2AP_PDU *e2ap_pdu) { + + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.hpp new file mode 100644 index 0000000..e825cb8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_e2apv1.hpp @@ -0,0 +1,42 @@ + +#ifndef ENCODE_E2APV1_HPP +#define ENCODE_E2APV1_HPP +/* +#include +#include +#include +*/ + +//#include +//#include +//#include + +//#include "e2sim_sctp.hpp" +//#include "e2ap_message_handler.hpp" +#include "encode_kpm.hpp" + + +extern "C" { + //#include "e2sim_defs.h" +#include "E2AP-PDU.h" + + +} + +void buildSubsReq(E2AP_PDU_t *pdu); + +void generate_e2apv1_setup_request(E2AP_PDU_t *setup_req_pdu); + +void generate_e2apv1_setup_response(E2AP_PDU_t *setup_resp_pdu); + +void generate_e2apv1_subscription_request(E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_subscription_response(E2AP_PDU_t *sub_resp_pdu, E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_indication_request(E2AP_PDU_t *ind_req_pdu); + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId); + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.cpp new file mode 100644 index 0000000..d518a36 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.cpp @@ -0,0 +1,1853 @@ +#include +#include +#include +#include +#include + +#include "encode_kpm.hpp" + +using namespace std; + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc) { + + printf("kpm0\n"); + + uint8_t *buf = (uint8_t*)"ORAN-E2SM-KPM"; + uint8_t *buf2 = (uint8_t*)"KPM monitor"; + uint8_t *buf3 = (uint8_t*)"OID123"; + + OCTET_STRING_t *sname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sname->buf = (uint8_t*)calloc(1,13); + + memcpy(sname->buf, buf, 13); + sname->size = strlen((char*)buf); + ranfunc_desc->ranFunction_Name.ranFunction_ShortName = *sname; + + long inst = 1; + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); + + // ranfunc_desc->ranFunction_Name.ranFunction_Description = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.buf = (uint8_t*)calloc(1,strlen((char*)buf2)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_Description.buf, buf2, strlen((char*)buf2)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.size = strlen((char*)buf2); + ranfunc_desc->ranFunction_Name.ranFunction_Instance = &inst; + + printf("kpm0.9\n"); + + // ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t*)calloc(1,strlen((char*)buf3)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf, buf3, strlen((char*)buf3)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char*)buf3); + + printf("kpm2\n"); + + + RIC_EventTriggerStyle_List_t *trigger_style = + (RIC_EventTriggerStyle_List_t*)calloc(1, sizeof(RIC_EventTriggerStyle_List_t)); + trigger_style->ric_EventTriggerStyle_Type = 1; + uint8_t *buf4 = (uint8_t*)"Periodic report"; + // trigger_style->ric_EventTriggerStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + trigger_style->ric_EventTriggerStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf4)); + memcpy(trigger_style->ric_EventTriggerStyle_Name.buf, buf4, strlen((char*)buf4)); + trigger_style->ric_EventTriggerStyle_Name.size = strlen((char*)buf4); + trigger_style->ric_EventTriggerFormat_Type = 5; + + printf("kpm3\n"); + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List)); + + int ret = ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List->list , trigger_style); + printf("ret is %d\n", ret); + + RIC_ReportStyle_List_t *report_style1 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style1->ric_ReportStyle_Type = 1; + + uint8_t *buf5 = (uint8_t*)"O-DU Measurement Container for the 5GC connected deployment"; + + printf("kpm4\n"); + + // report_style1->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style1->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf5)); + memcpy(report_style1->ric_ReportStyle_Name.buf, buf5, strlen((char*)buf5)); + report_style1->ric_ReportStyle_Name.size = strlen((char*)buf5); + report_style1->ric_IndicationHeaderFormat_Type = 1; + report_style1->ric_IndicationMessageFormat_Type = 1; + + printf("kpm5\n"); + + RIC_ReportStyle_List_t *report_style2 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style2->ric_ReportStyle_Type = 2; + + uint8_t *buf6 = (uint8_t*)"O-DU Measurement Container for the EPC connected deployment"; + + // report_style2->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + + + report_style2->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf6)); + memcpy(report_style2->ric_ReportStyle_Name.buf, buf6, strlen((char*)buf6)); + report_style2->ric_ReportStyle_Name.size = strlen((char*)buf6); + report_style2->ric_IndicationHeaderFormat_Type = 1; + report_style2->ric_IndicationMessageFormat_Type = 1; + + printf("kpm6\n"); + + RIC_ReportStyle_List_t *report_style3 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style3->ric_ReportStyle_Type = 3; + + uint8_t *buf7 = (uint8_t*)"O-CU-CP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style3->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf7)); + memcpy(report_style3->ric_ReportStyle_Name.buf, buf7, strlen((char*)buf7)); + report_style3->ric_ReportStyle_Name.size = strlen((char*)buf7); + report_style3->ric_IndicationHeaderFormat_Type = 1; + report_style3->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style4 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style4->ric_ReportStyle_Type = 4; + + uint8_t *buf8 = (uint8_t*)"O-CU-CP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style4->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf8)); + memcpy(report_style4->ric_ReportStyle_Name.buf, buf8, strlen((char*)buf8)); + report_style4->ric_ReportStyle_Name.size = strlen((char*)buf8); + report_style4->ric_IndicationHeaderFormat_Type = 1; + report_style4->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style5 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style5->ric_ReportStyle_Type = 5; + + uint8_t *buf9 = (uint8_t*)"O-CU-UP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style5->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf9)); + memcpy(report_style5->ric_ReportStyle_Name.buf, buf9, strlen((char*)buf9)); + report_style5->ric_ReportStyle_Name.size = strlen((char*)buf9); + report_style5->ric_IndicationHeaderFormat_Type = 1; + report_style5->ric_IndicationMessageFormat_Type = 1; + + + RIC_ReportStyle_List_t *report_style6 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style6->ric_ReportStyle_Type = 6; + + uint8_t *buf10 = (uint8_t*)"O-CU-UP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style6->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf10)); + memcpy(report_style6->ric_ReportStyle_Name.buf, buf10, strlen((char*)buf10)); + report_style6->ric_ReportStyle_Name.size = strlen((char*)buf10); + report_style6->ric_IndicationHeaderFormat_Type = 1; + report_style6->ric_IndicationMessageFormat_Type = 1; + + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List)); + + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style1); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style2); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style3); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style4); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style5); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style6); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); +} + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_UP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_UP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_UP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_UP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_UP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_UP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + + ue_report_item->c_RNTI = *crnti; + ue_report_item->pDCPBytesDL = bytesdl; + ue_report_item->pDCPBytesUL = bytesul; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_UP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_UP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + int plmnid_size = strlen((char*)plmnid_buf); + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(plmnid_size,1); + plmnidstr->size = plmnid_size; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + + int nrcellid_size = strlen((char*)nrcellid_buf); + nrcellid->buf = (uint8_t*)calloc(1, nrcellid_size); + memcpy(nrcellid->buf, nrcellid_buf, nrcellid_size); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + + int crnti_size = strlen((char*)crnti_buf); + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1, crnti_size); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_buf); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_buf, crnti->size); + + // uint8_t *buf_serving = (uint8_t*)"RSRP10"; + + int serving_buf_len = strlen((char*)serving_buf); + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(serving_buf_len,1); + servingstr->size = serving_buf_len; + memcpy(servingstr->buf, serving_buf, servingstr->size); + + + int neighbor_buf_len = strlen((char*)neighbor_buf); + // uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ts->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->size = neighbor_buf_len; + memcpy(neighborstr->buf, neighbor_buf, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + + +void encode_kpm_odu_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + DU_Usage_Report_CellResourceReportItem_t *report_item = + (DU_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(DU_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + printf("enc3.1\n"); + + DU_Usage_Report_UeResourceReportItem *ue_report_item = + (DU_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(DU_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + long lval1 = 2; + long lval2 = 1; + + ue_report_item->c_RNTI = *crnti; + ue_report_item->dl_PRBUsage = &lval1; + + printf("enc5\n"); + + ue_report_item->ul_PRBUsage = &lval2; + + printf("enc6\n"); + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oDU_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oDU_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_odu_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco, plmnid_buf, + nrcellid_buf, crnti_buf, + serving_buf, neighbor_buf); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + int pdcp_bytesdl, + int pdcp_bytesul) { + + +} + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + //encode_kpm_ocuup_user_level(ranco); + + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + // xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + long fiveqi, + long dl_prb_usage, + long ul_prb_usage, + uint8_t* sd_buf, + uint8_t* sst_buf, + uint8_t* plmnid_buf, + uint8_t* nrcellid_buf, + long *dl_prbs, + long *ul_prbs) { + + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, nrcellid_buf, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = dl_prbs; + listitem1->ul_TotalofAvailablePRBs = ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + long fiveqi = 8; + long dl_prb_usage = 50; + long ul_prb_usage = 70; + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + long dl_prbs = (long)100; + long ul_prbs = (long)120; + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = &dl_prbs; + listitem1->ul_TotalofAvailablePRBs = &ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *gnbcuupname_buf, + int bytes_dl, + int bytes_ul, + uint8_t *sst_buf, + uint8_t *sd_buf, + uint8_t *plmnid_buf) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + // uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, gnbcuupname_buf, gnbcuupname->size); + + + //We need to convert bytes_dl into array of uint8_t + + int array_size_dl; + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + if (bytes_dl <= 64) { + array_size_dl = 1; + + uint8_t buffer[array_size_dl]; + buffer[0] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf,buffer,1); + bytesdl->size = 1; + + } else if (bytes_dl <= 16384) { + array_size_dl = 2; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 8) & 0xFF; + buffer[1] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(2,1); + memcpy(bytesdl->buf,buffer,2); + bytesdl->size = 2; + + } else if (bytes_dl <= 4194304) { + array_size_dl = 3; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 16) & 0xFF; + buffer[1] = (bytes_dl >> 8) & 0xFF; + buffer[2] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(3,1); + memcpy(bytesdl->buf,buffer,3); + bytesdl->size = 3; + + } else if (bytes_dl <= 1073741824) { + array_size_dl = 4; + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 24) & 0xFF; + buffer[1] = (bytes_dl >> 16) & 0xFF; + buffer[2] = (bytes_dl >> 8) & 0xFF; + buffer[3] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(4,1); + memcpy(bytesdl->buf,buffer,4); + bytesdl->size = 4; + } + + + //We need to convert bytes_ul into array of uint8_t + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + int array_size_ul; + + if (bytes_ul <= 64) { + array_size_ul = 1; + + uint8_t buffer[array_size_ul]; + buffer[0] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf,buffer,1); + bytesul->size = 1; + + } else if (bytes_ul <= 16384) { + array_size_ul = 2; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 8) & 0xFF; + buffer[1] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(2,1); + memcpy(bytesul->buf,buffer,2); + bytesul->size = 2; + + } else if (bytes_ul <= 4194304) { + array_size_ul = 3; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 16) & 0xFF; + buffer[1] = (bytes_ul >> 8) & 0xFF; + buffer[2] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(3,1); + memcpy(bytesul->buf,buffer,3); + bytesul->size = 3; + + } else if (bytes_ul <= 1073741824) { + array_size_ul = 4; + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 24) & 0xFF; + buffer[1] = (bytes_ul >> 16) & 0xFF; + buffer[2] = (bytes_ul >> 8) & 0xFF; + buffer[3] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(4,1); + memcpy(bytesul->buf,buffer,4); + bytesul->size = 4; + } + + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,sst_buf,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, sd_buf, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + /* + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + //std::string gn = "GNBCUUP5"; + //std::vector gnvec(gn.begin(), gn.end()); + //uint8_t *buf = &gnvec[0]; + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + // std::string sl = "SLICE4"; + // std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + */ +} + +/* +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage) { + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + std::string gn = "GNBCUUP5"; + std::vector gnvec(gn.begin(), gn.end()); + uint8_t *buf = &gnvec[0]; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + std::string sl = "SLICE4"; + std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"SLICE4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + std::string sd = "SD1"; + std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(6,1); + snssai->sST.size = 6; + memcpy(snssai->sST.buf, buf1, 6); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + auto era = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + std::string pl = "PLMNID7"; + std::vector plvec(pl.begin(), pl.end()); + uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(1,7); + plmnid->size = 7; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + auto er = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} +*/ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.hpp new file mode 100644 index 0000000..682814c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/encode_kpm.hpp @@ -0,0 +1,45 @@ +#ifndef ENCODE_KPM_HPP +#define ENCODE_KPM_HPP + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" +} + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc); + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_odu_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco); + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage,uint8_t *plmnid_buf,uint8_t *nrcellid_buf,uint8_t *crnti_buf,const uint8_t *serving_buf, const uint8_t *neighbor_buf); + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *plmnid_buf, uint8_t *nrcellid_buf, uint8_t *crnti_buf,int pdcp_bytesdl, int pdcp_bytesul); + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, long fiveqi, long dl_prb_usage, long ul_prb_usage, uint8_t* sd_buf, uint8_t* sst_buf,uint8_t* plmnid_buf, uint8_t* nrcellid_buf, long *dl_prbs, long *ul_prbs); + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *gnbcuupname_buf, int bytes_dl,int bytes_ul, uint8_t *sst_buf, uint8_t *sd_buf, uint8_t *plmnid_buf); + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/extras/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/extras/ricsim.cpp new file mode 100644 index 0000000..5f9b7f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/extras/ricsim.cpp @@ -0,0 +1,216 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "GlobalE2node-ID.h" + #include "GlobalE2node-gNB-ID.h" + #include "GlobalgNB-ID.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "GNB-ID-Choice.h" + #include "ProtocolIE-Field.h" + #include "E2setupRequest.h" +} + +using namespace std; + +/* +struct { + type **array; + int count; + int size; + void (*free)(decltype(*array)); +} +*/ + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + // E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + + printf("out0\n"); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t gnb_bstring; + gnb_bstring.buf = buf; + gnb_bstring.size = 4; + gnb_bstring.bits_unused = 0; + + printf("out1\n"); + + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t plmn; + plmn.buf = buf2; + plmn.size = 5; + + GNB_ID_Choice_t gnbchoice; + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice.present = pres2; + gnbchoice.choice.gnb_ID = gnb_bstring; + + GlobalgNB_ID_t gnb; + gnb.plmn_id = plmn; + gnb.gnb_id = gnbchoice; + + + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = gnb; + + /* + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + */ + + GlobalE2node_ID_t globale2nodeid; + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid.present = pres; + globale2nodeid.choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequest_t));; + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 4; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = globale2nodeid; + e2setuprid->value.present = pres3; + + + E2setupRequest_t e2setupreq; + e2setupreq.protocolIEs.list.size = sizeof(E2setupRequestIEs); + e2setupreq.protocolIEs.list.count = 1; + e2setupreq.protocolIEs.list.array = &e2setuprid; + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 1; + initmsg->criticality = 0; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + E2AP_PDU_t *e2ap_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU_t)); + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + printf("over here\n"); + + asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + printf("over here 55\n"); + + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_SetupRequest2.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + // E2setupRequest_t* pdu_setup = smaller_e2ap_xml_to_pdu("E2AP_PartSetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + // encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + /* + GlobalE2node_ID_t* pdu_setup = smaller_e2ap_xml_to_pdu("GlobalE2node-ID.xml"); + + asn_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + */ + /* + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + */ + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + /* + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + */ + //4. Receive RICSubscriptionResponse + while(1){ + wait_for_sctp_data(client_fd); + } + + + //--------------------------------------- + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/README.md b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/README.md new file mode 100644 index 0000000..dfff99a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/README.md @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +# +# the test repo needs to be on the same parent path as the dep repo +# simply run e2sim_install.sh from this directory +# diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml new file mode 100644 index 0000000..f3a950c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/Chart.yaml @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Kubernetes +name: e2sim +version: 0.1.0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl new file mode 100644 index 0000000..ce3748d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/_helpers.tpl @@ -0,0 +1,49 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "e2sim.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "e2sim.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "e2sim.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl new file mode 100644 index 0000000..35e01c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/bin/_e2sim-run.sh.tpl @@ -0,0 +1,54 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} +#!/bin/sh + +# Launch the e2 simulator on ${E2SIM_BIND_ADDR}:${E2SIM_BIND_PORT} +# If E2SIM_BIND_ADDR is not supplied, picks the address of the interface +# associated with the default route for E2SIM_BIND_AF (either +# "inet" [default] or "inet6"). + +if [ -z "${E2SIM_BIND_ADDR}" ]; then + if [ `echo "x${E2SIM_BIND_AF}x" | tr [A-Z] [a-z]` != "xinet6x" ]; then + AF='inet' + DEFROUTE='0/0' + LO='127.0.0.1' + else + AF='inet6' + DEFROUTE='::0/0' + LO='00:00:00:00:00:00' + fi + if [ -z "${E2SIM_BIND_IF}" ]; then + # bind on the address associated with the default route + E2SIM_BIND_IF=`ip -br -f ${AF} route show ${DEFROUTE}| sed 's/.*dev[\ ]*\([^\ ]*\).*/\1/'` + if [ -z ${E2SIM_BIND_IF} ]; then + # this is kinda bogus, but it's the only real fallback: take the first + # non-loopback interface. + E2SIM_BIND_IF=`ip -f ${AF} -o link list up | grep -v LOOPBACK | head -1 |awk -F: '{print $2}'` + fi + fi + E2SIM_BIND_ADDR=`ip -f ${AF} -o addr show ${E2SIM_BIND_IF:-eth0} scope global | sed -e 's/.*inet[6\ ]*\([^\ ]*\)\/.*/\1/'` +fi + +if [ -z $E2SIM_BIND_ADDR ]; then + # search failed. be nondestructively useless. + echo "No suitable address found, binding on loopback addess ${LO}" + E2SIM_BIND_ADDR=${LO} +else + echo "e2sim starting at ${E2SIM_BIND_ADDR}:${E2SIM_PORT:-36421}" +fi + +${E2SIM:-/home/e2sim/build/e2sim} ${E2SIM_BIND_ADDR} ${E2SIM_PORT:-36421} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml new file mode 100644 index 0000000..ec30488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/configmap-e2sim-bin.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap-e2sim-bin + namespace: {{ .Release.Namespace }} +data: + e2sim-run.sh: | + {{- include "e2sim/templates/bin/_e2sim-run.sh.tpl" . | indent 4 }} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml new file mode 100644 index 0000000..21475f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/templates/deployment.yaml @@ -0,0 +1,79 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ include "e2sim.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "e2sim.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + spec: + hostNetwork: true + containers: + - name: {{ include "e2sim.name" . }} + image: "{{ .Values.image.repository }}/{{ .Values.image.name }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /e2sim-run.sh + ports: + - containerPort: {{ .Values.service.port }} + env: + - name: E2SIM_NETWORK_TYPE + value: {{ .Values.e2sim.network.type | default "host" }} + - name: E2SIM_PORT + value: {{ .Values.e2sim.network.port | default 36421 |quote}} + - name: E2SIM_BIND_ADDR + value: {{ .Values.e2sim.network.address }} + - name: E2SIM_BIND_IF + value: {{ .Values.e2sim.network.interface }} + - name: E2SIM_BIND_AF + value: {{ .Values.e2sim.network.addressFamily | default "inet" }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + - name: localtime + mountPath: /etc/localtime + readOnly: true + - name: e2sim-bin + subPath: e2sim-run.sh + mountPath: /e2sim-run.sh + resources: + volumes: + - name: dshm + emptyDir: + medium: Memory + - name: localtime + hostPath: + path: /etc/localtime + - name: e2sim-bin + configMap: + name: configmap-e2sim-bin + defaultMode: 0755 + imagePullSecrets: + - name: {{ .Values.image.repositoryCred }} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/values.yaml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/values.yaml new file mode 100644 index 0000000..5f5cbca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim/values.yaml @@ -0,0 +1,48 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +replicaCount: 1 + +image: + repository: snapshot.docker.ranco-dev-tools.eastus.cloudapp.azure.com:10001 + repositoryCred: docker-reg-cred + # for local testing + #repository: ric/testsuite + name: test/e2sim + tag: latest + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: "" + +e2sim: + network: + # network implementation type: hostnetworking or DANM + # type: ["host"]|"danm" + # where e2sim should listen for SCTP connections: + # o if "address" is supplied, listen on that IP (v4 or v6) address + # o if "address" is not supplied and "interface" is supplied, listen on the + # first globally-scoped address on that interface of family "addressFamily" + # (default "inet") + # o if neither "address" nor "interface" is supplied, listen on the first + # globally-scoped address of family "addressFamily" (default "inet") on + # the interface associated with the container's default route, if any; if + # the container does not have a default route, the first interface with + # a globally-scoped address will be used. + # address: addr + # interface: ifname + # addressFamily: ["inet"]|"inet6" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim_install.sh new file mode 100644 index 0000000..9b9a13c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/helm/e2sim_install.sh @@ -0,0 +1,78 @@ +#!/bin/bash +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +OVERRIDEYAML=$1 + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +#/root/test/ric_robot_suite/helm +# extract the base to find root to dep + +BASE=${DIR%/test*} + +# /data/ORAN-OSC/it/dep/ric-platform/50-RIC-Platform/bin/install +BASEDIR05=$BASE/dep/ric-platform/50-RIC-Platform/ +BASEDIRCOMMON=$BASE/dep/ric-common/Common-Template/helm/ric-common + +echo "Using etc/ric.conf from $BASEDIR05" + + +source $BASEDIR05/etc/ric.conf + + +if [ -z "$RICPLT_RELEASE_NAME" ];then + RELEASE_NAME=$helm_release_name +else + RELEASE_NAME=$RICPLT_RELEASE_NAME +fi + +# Namespace configuration +if [ -z "$RICPLT_NAMESPACE" ];then + PLT_NAMESPACE=$plt_namespace +else + PLT_NAMESPACE=$RICPLT_NAMESPACE +fi + + + +RICPLT_COMPONENTS="e2sim" + +echo "Deploying RIC Platform components [$RICPLT_COMPONENTS]" +echo "Platform Namespace: $PLT_NAMESPACE" +echo "Helm Release Name: $RELEASE_NAME" + + +COMMON_CHART_VERSION=$(cat $BASEDIRCOMMON/Chart.yaml | grep version | awk '{print $2}') + +helm package -d /tmp $BASEDIRCOMMON + + +for component in $RICPLT_COMPONENTS; do + echo "Preparing chart for comonent $component" + mkdir -p $DIR/$component/charts/ + cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $DIR/$component/charts/ + if [ -z $OVERRIDEYAML ]; then + echo "helm install --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + else + echo "helm install -f $OVERRIDEYAML --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install -f $OVERRIDEYAML --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + fi +done diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.cpp new file mode 100644 index 0000000..7f77e94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.cpp @@ -0,0 +1,602 @@ + + +#include +#include +#include + + + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" + #include "E2AP-PDU.h" + #include "RICsubscriptionRequest.h" + #include "RICsubscriptionResponse.h" + #include "RICactionType.h" + #include "ProtocolIE-Field.h" + #include "ProtocolIE-SingleContainer.h" + #include "InitiatingMessage.h" +} + +#include "encode_kpm.hpp" + +#include "encode_e2apv1.hpp" + +#include +#include + + + + +#include "e2sim.hpp" + +using json = nlohmann::json; + +using namespace std; + +struct neighbor_cell_entry { + char *cellid; + int rsrp; + int rsrq; + int rssinr; + +}; + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId, int socket_fd) { + + //Process simulation file + + ifstream simfile; + string line; + + long seqNum = 1; + + simfile.open("simulation.txt", ios::in); + + cout << "step1" << endl; + + std::ifstream ue_stream("ueMeasReport.txt"); + std::ifstream cell_stream("cellMeasReport.txt"); + + json all_ues_json; + + ue_stream >> all_ues_json; + + json all_cells_json; + + cell_stream >> all_cells_json; + + asn_codec_ctx_t *opt_cod; + + cout << "UE RF Measurements" << endl; + cout << "******************" << endl; + + int numMeasReports = (all_ues_json["/ueMeasReport/ueMeasReportList"_json_pointer]).size(); + + for (int i = 0; i < numMeasReports; i++) { + int nextCellId; + int nextRsrp; + int nextRsrq; + int nextRssinr; + cout << "UE number " + i << endl; + cout << "**********" << endl; + json::json_pointer p1(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_ues_json[p1].get(); + cout << "Serving Cell " << nextCellId << endl; + + json::json_pointer p2(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrp"); + nextRsrp = all_ues_json[p2].get(); + cout << " RSRP " << nextRsrp << endl; + json::json_pointer p3(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rsrq"); + nextRsrq = all_ues_json[p3].get(); + cout << " RSRQ " << nextRsrq << endl; + json::json_pointer p4(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/servingCellRfReport/rssinr"); + nextRssinr = all_ues_json[p4].get(); + cout << " RSSINR " << nextRssinr << endl; + + json::json_pointer p5(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList"); + + int numNeighborCells = (all_ues_json[p5]).size(); + + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)calloc(1,2); + + if (nextCellId == 0) { + uint8_t *buf2 = (uint8_t*)"12"; + memcpy(crnti_buf, buf2, 2); + } else if (nextCellId == 1) { + uint8_t *buf2 = (uint8_t*)"22"; + memcpy(crnti_buf, buf2, 2); + } + + std::string serving_str = "{\"rsrp\": " + std::to_string(nextRsrp) + ", \"rsrq\": " + + std::to_string(nextRsrq) + ", \"rssinr\": " + std::to_string(nextRssinr) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + std::string neighbor_str = "["; + + int nextNbCell; + int nextNbRsrp; + int nextNbRsrq; + int nextNbRssinr; + + for (int j = 0; j < numNeighborCells; j++) { + json::json_pointer p8(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) +"/neighbourCellList/" + std::to_string(j) + "/nbCellIdentity"); + nextNbCell = all_ues_json[p8].get(); + cout << "Neighbor Cell " << all_ues_json[p8] << endl; + json::json_pointer p9(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrp"); + nextNbRsrp = all_ues_json[p9].get(); + cout << " RSRP " << nextNbRsrp << endl; + + json::json_pointer p10(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rsrq"); + nextNbRsrq = all_ues_json[p10].get(); + cout << " RSRQ " << nextNbRsrq << endl; + + json::json_pointer p11(std::string("/ueMeasReport/ueMeasReportList/") + std::to_string(i) + +"/neighbourCellList/" + std::to_string(j) + "/nbCellRfReport/rssinr"); + nextNbRssinr = all_ues_json[p11].get(); + cout << " RSSINR " << nextNbRssinr << endl; + + if (j != 0) { + neighbor_str += ","; + + } + + neighbor_str += "{\"CID\" : \"" + std::to_string(nextNbCell) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(nextNbRsrp) + + ", \"rsrq\": " + std::to_string(nextNbRsrq) + ", \"rssinr\": " + std::to_string(nextNbRssinr) + "}}"; + + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + printf("Neighbor string\n%s", neighbor_buf); + + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 6, e2smbuffer3, er3.encoded); + + encode_and_send_sctp_data(pdu3, socket_fd); + + seqNum++; + + } + + + cout << "Cell Measurements" << endl; + cout << "******************" << endl; + + int numCellMeasReports = (all_cells_json["/cellMeasReport/cellMeasReportList"_json_pointer]).size(); + + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + + for (int i = 0; i < numCellMeasReports; i++) { + + int nextCellId; + int nextPdcpBytesDL; + int nextPdcpBytesUL; + int nextPRBBytesDL; + int nextPRBBytesUL; + + json::json_pointer p1(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/nrCellIdentity"); + nextCellId = all_cells_json[p1].get(); + cout << std::string("Cell number ") << nextCellId << endl; + + cout << "**********" << endl; + + json::json_pointer p2(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesDl"); + nextPdcpBytesDL = all_cells_json[p2].get(); + cout << std::string(" PDCP Bytes DL ") << nextPdcpBytesDL << endl; + + json::json_pointer p3(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/pdcpByteMeasReport/pdcpBytesUl"); + nextPdcpBytesUL = all_cells_json[p3].get(); + cout << std::string(" PDCP Bytes UL ") << nextPdcpBytesUL << endl; + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = nextPdcpBytesDL; + + int bytes_ul = nextPdcpBytesUL; + + // int bytes_dl = 3905; + // int bytes_ul = 1609321; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf2 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu2, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf2, 6, e2smbuffer2, er2.encoded); + + encode_and_send_sctp_data(pdu2, socket_fd); + + seqNum++; + + + + json::json_pointer p4(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/prbMeasReport/availPrbDl"); + nextPRBBytesDL = all_cells_json[p4].get(); + cout << std::string(" PRB Bytes DL ") << all_cells_json[p4] << endl; + + json::json_pointer p5(std::string("/cellMeasReport/cellMeasReportList/") + std::to_string(i) +"/prbMeasReport/availPrbUl"); + nextPRBBytesUL = all_cells_json[p5].get(); + cout << std::string(" PRB Bytes UL ") << all_cells_json[p5] << endl; + + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = nextPRBBytesDL; + long ul_prbs = nextPRBBytesUL; + + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)"header"; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 6, e2smbuffer, er.encoded); + + encode_and_send_sctp_data(pdu, socket_fd); + + seqNum++; + + } + + + /* + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + + //REPORT Message 1 -- Encode and send ODU cell-level report + + E2SM_KPM_IndicationMessage_t *ind_msg1 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long fiveqi = 7; + uint8_t *sst_buf = (uint8_t*)"1"; + uint8_t *sd_buf = (uint8_t*)"100"; + uint8_t *plmnid_buf = (uint8_t*)"747"; + uint8_t *nrcellid_buf = (uint8_t*)"12340"; + long dl_prbs = 100; + long ul_prbs = 50; + + encode_kpm_report_style1_parameterized(ind_msg1, fiveqi, dl_prbs, ul_prbs, sst_buf, sd_buf, plmnid_buf, nrcellid_buf, &dl_prbs, &ul_prbs); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg1, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf = (uint8_t*)"header"; + + uint8_t *cpid_buf = (uint8_t*)"CPID"; + + fprintf(stderr, "About to encode Indication\n"); + generate_e2apv1_indication_request_parameterized(pdu, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf, 6, e2smbuffer, er.encoded); + + encode_and_send_sctp_data(pdu, socket_fd); + + seqNum++; + + //REPORT Message 2 -- Encode and send OCUUP cell-level report + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + + int bytes_dl = 40000; + int bytes_ul = 50000; + + E2SM_KPM_IndicationMessage_t *ind_msg2 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu2 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + encode_kpm_report_style5_parameterized(ind_msg2 , buf, bytes_dl, bytes_ul, sst_buf, sd_buf, plmnid_buf); + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + + asn_enc_rval_t er2 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg2, e2smbuffer2, e2smbuffer_size2); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf2 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu2, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf2, 6, e2smbuffer2, er2.encoded); + + encode_and_send_sctp_data(pdu2, socket_fd); + + seqNum++; + + //REPORT Message 3 -- Encode and send OCUCP user-level report + + E2SM_KPM_IndicationMessage_t *ind_msg3 = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + E2AP_PDU *pdu3 = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + uint8_t *crnti_buf = (uint8_t*)"12"; + // uint8_t *serving_buf = (uint8_t*)"RSRP10"; + //uint8_t *neighbor_buf = (uint8_t*)"-10,-15"; + int rsrpServ = 10; + int rsrqServ = 0; + int rssinrServ = 0; + + std::string serving_str = "{\"rsrp\": " + std::to_string(rsrpServ) + ", \"rsrq\": " + + std::to_string(rsrqServ) + ", \"rssinr\": " + std::to_string(rssinrServ) + "}"; + const uint8_t *serving_buf = reinterpret_cast(serving_str.c_str()); + + + neighbor_cell_entry n_entries[3]; + n_entries[0] = {"123", 10, 0, 0}; + n_entries[1] = {"456", 10, 0, 0}; + n_entries[2] = {"789", 10, 0, 0}; + + std::string neighbor_str = "["; + + for (int i=0; i < sizeof(n_entries)/sizeof(n_entries[0]); i++) { + + if (i != 0) { + neighbor_str += ","; + } + neighbor_str += "{\"CID\" : \"" + std::string(n_entries[i].cellid) + "\", \"Cell-RF\" : \"{\"rsrp\": " + std::to_string(n_entries[i].rsrp) + + ", \"rsrq\": " + std::to_string(n_entries[i].rsrq) + ", \"rssinr\": " + std::to_string(n_entries[i].rsrp) + "}}"; + } + + neighbor_str += "]"; + + const uint8_t *neighbor_buf = reinterpret_cast(neighbor_str.c_str()); + + printf("Neighbor string\n%s", neighbor_buf); + + encode_kpm_report_rancontainer_cucp_parameterized(ind_msg3, plmnid_buf, nrcellid_buf, crnti_buf, serving_buf, neighbor_buf); + + uint8_t e2smbuffer3[8192]; + size_t e2smbuffer_size3 = 8192; + + asn_enc_rval_t er3 = asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + ind_msg3, e2smbuffer3, e2smbuffer_size3); + + fprintf(stderr, "er encded is %d\n", er3.encoded); + fprintf(stderr, "after encoding message\n"); + uint8_t *e2smheader_buf3 = (uint8_t*)"header"; + + generate_e2apv1_indication_request_parameterized(pdu3, requestorId, + instanceId, ranFunctionId, + actionId, seqNum, e2smheader_buf3, 6, e2smbuffer3, er3.encoded); + + encode_and_send_sctp_data(pdu3, socket_fd); + + seqNum++; + + //Encode and send OCUUP user-level report + + + + //Encode and send ODU user-level report + + + + + } + + simfile.close(); + + } + */ + +} + +void callback_kpm_subscription_request(E2AP_PDU_t *sub_req_pdu, int socket_fd) { + + + //Record RIC Request ID + //Go through RIC action to be Setup List + //Find first entry with REPORT action Type + //Record ricActionID + //Encode subscription response + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long reqRequestorId; + long reqInstanceId; + long reqActionId; + + std::vector actionIdsAccept; + std::vector actionIdsReject; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + reqRequestorId = requestorId; + reqInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + //We are ignoring the trigger definition + + //We identify the first action whose type is REPORT + //That is the only one accepted; all others are rejected + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + bool foundAction = false; + + for (int i=0; i < actionCount; i++) { + + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + RICactionType_t actionType = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionType; + + if (!foundAction && actionType == RICactionType_report) { + reqActionId = actionId; + actionIdsAccept.push_back(reqActionId); + printf("adding accept\n"); + foundAction = true; + } else { + reqActionId = actionId; + printf("adding reject\n"); + actionIdsReject.push_back(reqActionId); + } + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", reqRequestorId); + fprintf(stderr, "instanceId %d\n", reqInstanceId); + + + for (int i=0; i < actionIdsAccept.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIdsAccept.at(i)); + + } + + E2AP_PDU *e2ap_pdu = (E2AP_PDU*)calloc(1,sizeof(E2AP_PDU)); + + long *accept_array = &actionIdsAccept[0]; + long *reject_array = &actionIdsReject[0]; + int accept_size = actionIdsAccept.size(); + int reject_size = actionIdsReject.size(); + + generate_e2apv1_subscription_response_success(e2ap_pdu, accept_array, reject_array, accept_size, reject_size, reqRequestorId, reqInstanceId); + + encode_and_send_sctp_data(e2ap_pdu,socket_fd); + + //Start thread for sending REPORT messages + + // std::thread loop_thread; + + long funcId = 1; + + run_report_loop(reqRequestorId, reqInstanceId, funcId, reqActionId, socket_fd); + + // loop_thread = std::thread(&run_report_loop); + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.hpp new file mode 100644 index 0000000..ef590a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/kpm_callbacks.hpp @@ -0,0 +1,4 @@ + +void callback_kpm_subscription_request(E2AP_PDU_t *pdu, int socket_fd); + +void run_report_loop(long requestorId, long instanceId, long ranFunctionId, long actionId); diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.cpp new file mode 100644 index 0000000..d91c9e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.cpp @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +#include "encode_e2apv1.hpp" +#include "encode_kpm.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "GlobalE2node-ID.h" + #include "GlobalE2node-gNB-ID.h" + #include "GlobalgNB-ID.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "GNB-ID-Choice.h" + #include "ProtocolIE-Field.h" + #include "E2setupRequest.h" + #include "RICaction-ToBeSetup-Item.h" + #include "RICactions-ToBeSetup-List.h" + #include "RICeventTriggerDefinition.h" + #include "RICsubscriptionRequest.h" + #include "ProtocolIE-SingleContainer.h" + #include "RANfunctions-List.h" + #include "RICindication.h" + #include "RICsubsequentActionType.h" + #include "RICsubsequentAction.h" + #include "RICtimeToWait.h" +} + +using namespace std; + +/* +struct { + type **array; + int count; + int size; + void (*free)(decltype(*array)); +} +*/ + +int client_fd = 0; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf, false); + } +} + + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + bool xmlenc = true; + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + LOG_I("in while loop"); + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf, xmlenc); + + if (xmlenc) + xmlenc = false; + } + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.hpp new file mode 100644 index 0000000..9af2552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim.hpp @@ -0,0 +1,5 @@ +#include "E2AP-PDU.h" + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu); + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int socket_fd); diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c new file mode 100644 index 0000000..e626083 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_C_RNTI_constr_1 CC_NOTUSED = { + { 0, 0 }, + 2 /* (SIZE(2..2)) */}; +asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + &asn_OP_OCTET_STRING, + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + { &asn_OER_type_C_RNTI_constr_1, &asn_PER_type_C_RNTI_constr_1, C_RNTI_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h new file mode 100644 index 0000000..7366109 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/C-RNTI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef OCTET_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_C_RNTI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +oer_type_decoder_f C_RNTI_decode_oer; +oer_type_encoder_f C_RNTI_encode_oer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; +per_type_decoder_f C_RNTI_decode_aper; +per_type_encoder_f C_RNTI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..c0b6775 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_CP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem = { + "CU-CP-Usage-Report-CellResourceReportItem", + "CU-CP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..9fb9dd9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_CellResourceReportItem_H_ +#define _CU_CP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_UeResourceReportItem; + +/* CU-CP-Usage-Report-CellResourceReportItem */ +typedef struct CU_CP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_CP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..22055b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 16384)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16384)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 14, 14, 1, 16384 } /* (SIZE(1..16384)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_CP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_CP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_CP_Usage_Report_Per_UE), + offsetof(struct CU_CP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE = { + "CU-CP-Usage-Report-Per-UE", + "CU-CP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..dad74ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_Per_UE_H_ +#define _CU_CP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_CP_Usage_Report_CellResourceReportItem; + +/* CU-CP-Usage-Report-Per-UE */ +typedef struct CU_CP_Usage_Report_Per_UE { + struct CU_CP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_CP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-CP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_CP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..de4d8de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-CP-Usage-Report-UeResourceReportItem.h" + +asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, serving_Cell_RF_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serving-Cell-RF-Type" + }, + { ATF_POINTER, 1, offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, neighbor_Cell_RF), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "neighbor-Cell-RF" + }, +}; +static const int asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serving-Cell-RF-Type */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* neighbor-Cell-RF */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_CP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_CP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_CP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem = { + "CU-CP-Usage-Report-UeResourceReportItem", + "CU-CP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_CP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..11edd99 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-CP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_CP_Usage_Report_UeResourceReportItem_H_ +#define _CU_CP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-CP-Usage-Report-UeResourceReportItem */ +typedef struct CU_CP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + OCTET_STRING_t *serving_Cell_RF_Type; /* OPTIONAL */ + OCTET_STRING_t *neighbor_Cell_RF; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_CP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_CP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_CP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_CP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_CP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..4781c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_CellResourceReportItem), + offsetof(struct CU_UP_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem = { + "CU-UP-Usage-Report-CellResourceReportItem", + "CU-UP-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..f313f40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_CellResourceReportItem_H_ +#define _CU_UP_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_UeResourceReportItem; + +/* CU-UP-Usage-Report-CellResourceReportItem */ +typedef struct CU_UP_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct CU_UP_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c new file mode 100644 index 0000000..5213281 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CU_UP_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct CU_UP_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 = { + sizeof(struct CU_UP_Usage_Report_Per_UE), + offsetof(struct CU_UP_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE = { + "CU-UP-Usage-Report-Per-UE", + "CU-UP-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h new file mode 100644 index 0000000..71e6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_Per_UE_H_ +#define _CU_UP_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CU_UP_Usage_Report_CellResourceReportItem; + +/* CU-UP-Usage-Report-Per-UE */ +typedef struct CU_UP_Usage_Report_Per_UE { + struct CU_UP_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct CU_UP_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CU-UP-Usage-Report-CellResourceReportItem.h" + +#endif /* _CU_UP_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..1867379 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CU-UP-Usage-Report-UeResourceReportItem.h" + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct CU_UP_Usage_Report_UeResourceReportItem), + offsetof(struct CU_UP_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CU_UP_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem = { + "CU-UP-Usage-Report-UeResourceReportItem", + "CU-UP-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_CU_UP_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..3a3dec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CU-UP-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CU_UP_Usage_Report_UeResourceReportItem_H_ +#define _CU_UP_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CU-UP-Usage-Report-UeResourceReportItem */ +typedef struct CU_UP_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CU_UP_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CU_UP_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CU_UP_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CU_UP_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CU_UP_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c new file mode 100644 index 0000000..bd27283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CUUPMeasurement-Container.h" + +static int +memb_plmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_plmnList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_plmnList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmnList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PlmnID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_plmnList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_plmnList_specs_2 = { + sizeof(struct CUUPMeasurement_Container__plmnList), + offsetof(struct CUUPMeasurement_Container__plmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmnList_2 = { + "plmnList", + "plmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_plmnList_tags_2, + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]) - 1, /* 1 */ + asn_DEF_plmnList_tags_2, /* Same as above */ + sizeof(asn_DEF_plmnList_tags_2) + /sizeof(asn_DEF_plmnList_tags_2[0]), /* 2 */ + { &asn_OER_type_plmnList_constr_2, &asn_PER_type_plmnList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_plmnList_2, + 1, /* Single element */ + &asn_SPC_plmnList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CUUPMeasurement_Container, plmnList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_plmnList_2, + 0, + { &asn_OER_memb_plmnList_constr_2, &asn_PER_memb_plmnList_constr_2, memb_plmnList_constraint_1 }, + 0, 0, /* No default value */ + "plmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_CUUPMeasurement_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CUUPMeasurement_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* plmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1 = { + sizeof(struct CUUPMeasurement_Container), + offsetof(struct CUUPMeasurement_Container, _asn_ctx), + asn_MAP_CUUPMeasurement_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container = { + "CUUPMeasurement-Container", + "CUUPMeasurement-Container", + &asn_OP_SEQUENCE, + asn_DEF_CUUPMeasurement_Container_tags_1, + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + asn_DEF_CUUPMeasurement_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_CUUPMeasurement_Container_tags_1) + /sizeof(asn_DEF_CUUPMeasurement_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CUUPMeasurement_Container_1, + 1, /* Elements count */ + &asn_SPC_CUUPMeasurement_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h new file mode 100644 index 0000000..14aafc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CUUPMeasurement-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CUUPMeasurement_Container_H_ +#define _CUUPMeasurement_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PlmnID_List; + +/* CUUPMeasurement-Container */ +typedef struct CUUPMeasurement_Container { + struct CUUPMeasurement_Container__plmnList { + A_SEQUENCE_OF(struct PlmnID_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CUUPMeasurement_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CUUPMeasurement_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_CUUPMeasurement_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_CUUPMeasurement_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PlmnID-List.h" + +#endif /* _CUUPMeasurement_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c new file mode 100644 index 0000000..1027911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Cause.h" + +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h new file mode 100644 index 0000000..1b829a6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c new file mode 100644 index 0000000..1709929 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.c @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h new file mode 100644 index 0000000..d175009 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseMisc.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..e5b11b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..72329ac --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseProtocol.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c new file mode 100644 index 0000000..11d9e4e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h new file mode 100644 index 0000000..417532f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRIC.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..6773fd4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..4270eb3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseRICservice.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c new file mode 100644 index 0000000..08a317d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f3fe969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CauseTransport.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c new file mode 100644 index 0000000..670d42a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "CellResourceReportListItem.h" + +static int +memb_dl_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_TotalofAvailablePRBs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_servedPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 12)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_type_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_TotalofAvailablePRBs_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_TotalofAvailablePRBs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..12)) */}; +static asn_per_constraints_t asn_PER_memb_servedPlmnPerCellList_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_servedPlmnPerCellList_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ServedPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_servedPlmnPerCellList_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_servedPlmnPerCellList_specs_5 = { + sizeof(struct CellResourceReportListItem__servedPlmnPerCellList), + offsetof(struct CellResourceReportListItem__servedPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_servedPlmnPerCellList_5 = { + "servedPlmnPerCellList", + "servedPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_servedPlmnPerCellList_tags_5, + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]) - 1, /* 1 */ + asn_DEF_servedPlmnPerCellList_tags_5, /* Same as above */ + sizeof(asn_DEF_servedPlmnPerCellList_tags_5) + /sizeof(asn_DEF_servedPlmnPerCellList_tags_5[0]), /* 2 */ + { &asn_OER_type_servedPlmnPerCellList_constr_5, &asn_PER_type_servedPlmnPerCellList_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_servedPlmnPerCellList_5, + 1, /* Single element */ + &asn_SPC_servedPlmnPerCellList_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 2, offsetof(struct CellResourceReportListItem, dl_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_TotalofAvailablePRBs_constr_3, &asn_PER_memb_dl_TotalofAvailablePRBs_constr_3, memb_dl_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "dl-TotalofAvailablePRBs" + }, + { ATF_POINTER, 1, offsetof(struct CellResourceReportListItem, ul_TotalofAvailablePRBs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_TotalofAvailablePRBs_constr_4, &asn_PER_memb_ul_TotalofAvailablePRBs_constr_4, memb_ul_TotalofAvailablePRBs_constraint_1 }, + 0, 0, /* No default value */ + "ul-TotalofAvailablePRBs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellResourceReportListItem, servedPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_servedPlmnPerCellList_5, + 0, + { &asn_OER_memb_servedPlmnPerCellList_constr_5, &asn_PER_memb_servedPlmnPerCellList_constr_5, memb_servedPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "servedPlmnPerCellList" + }, +}; +static const int asn_MAP_CellResourceReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_CellResourceReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellResourceReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-TotalofAvailablePRBs */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* servedPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1 = { + sizeof(struct CellResourceReportListItem), + offsetof(struct CellResourceReportListItem, _asn_ctx), + asn_MAP_CellResourceReportListItem_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellResourceReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem = { + "CellResourceReportListItem", + "CellResourceReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_CellResourceReportListItem_tags_1, + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + asn_DEF_CellResourceReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_CellResourceReportListItem_tags_1) + /sizeof(asn_DEF_CellResourceReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CellResourceReportListItem_1, + 4, /* Elements count */ + &asn_SPC_CellResourceReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h new file mode 100644 index 0000000..91bbf71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CellResourceReportListItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _CellResourceReportListItem_H_ +#define _CellResourceReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ServedPlmnPerCellListItem; + +/* CellResourceReportListItem */ +typedef struct CellResourceReportListItem { + NRCGI_t nRCGI; + long *dl_TotalofAvailablePRBs; /* OPTIONAL */ + long *ul_TotalofAvailablePRBs; /* OPTIONAL */ + struct CellResourceReportListItem__servedPlmnPerCellList { + A_SEQUENCE_OF(struct ServedPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } servedPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellResourceReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellResourceReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_CellResourceReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_CellResourceReportListItem_1[4]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ServedPlmnPerCellListItem.h" + +#endif /* _CellResourceReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c new file mode 100644 index 0000000..217d8e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h new file mode 100644 index 0000000..ab1ecf2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Criticality.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..0306093 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..1222f03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..502517f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..3f0d07b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..825808b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9cef6bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c new file mode 100644 index 0000000..eee9621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-CellResourceReportItem.h" + +static int +memb_ueResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_type_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..32)) */}; +static asn_per_constraints_t asn_PER_memb_ueResourceReportList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ueResourceReportList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_UeResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ueResourceReportList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ueResourceReportList_specs_3 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList), + offsetof(struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ueResourceReportList_3 = { + "ueResourceReportList", + "ueResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_ueResourceReportList_tags_3, + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]) - 1, /* 1 */ + asn_DEF_ueResourceReportList_tags_3, /* Same as above */ + sizeof(asn_DEF_ueResourceReportList_tags_3) + /sizeof(asn_DEF_ueResourceReportList_tags_3[0]), /* 2 */ + { &asn_OER_type_ueResourceReportList_constr_3, &asn_PER_type_ueResourceReportList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ueResourceReportList_3, + 1, /* Single element */ + &asn_SPC_ueResourceReportList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_CellResourceReportItem, ueResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ueResourceReportList_3, + 0, + { &asn_OER_memb_ueResourceReportList_constr_3, &asn_PER_memb_ueResourceReportList_constr_3, memb_ueResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "ueResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_CellResourceReportItem), + offsetof(struct DU_Usage_Report_CellResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_CellResourceReportItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem = { + "DU-Usage-Report-CellResourceReportItem", + "DU-Usage-Report-CellResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_CellResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_CellResourceReportItem_1, + 2, /* Elements count */ + &asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h new file mode 100644 index 0000000..4a72572 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-CellResourceReportItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_CellResourceReportItem_H_ +#define _DU_Usage_Report_CellResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "NRCGI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_UeResourceReportItem; + +/* DU-Usage-Report-CellResourceReportItem */ +typedef struct DU_Usage_Report_CellResourceReportItem { + NRCGI_t nRCGI; + struct DU_Usage_Report_CellResourceReportItem__ueResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_UeResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ueResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_CellResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_CellResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_CellResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_CellResourceReportItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-UeResourceReportItem.h" + +#endif /* _DU_Usage_Report_CellResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c new file mode 100644 index 0000000..9ba13af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-Per-UE.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DU_Usage_Report_CellResourceReportItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct DU_Usage_Report_Per_UE__cellResourceReportList), + offsetof(struct DU_Usage_Report_Per_UE__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_Per_UE, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_Per_UE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_Per_UE_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1 = { + sizeof(struct DU_Usage_Report_Per_UE), + offsetof(struct DU_Usage_Report_Per_UE, _asn_ctx), + asn_MAP_DU_Usage_Report_Per_UE_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE = { + "DU-Usage-Report-Per-UE", + "DU-Usage-Report-Per-UE", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_Per_UE_tags_1, + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_Per_UE_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_Per_UE_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_Per_UE_1, + 1, /* Elements count */ + &asn_SPC_DU_Usage_Report_Per_UE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-Per-UE.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_Per_UE_H_ +#define _DU_Usage_Report_Per_UE_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DU_Usage_Report_CellResourceReportItem; + +/* DU-Usage-Report-Per-UE */ +typedef struct DU_Usage_Report_Per_UE { + struct DU_Usage_Report_Per_UE__cellResourceReportList { + A_SEQUENCE_OF(struct DU_Usage_Report_CellResourceReportItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_Per_UE_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_Per_UE; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_Per_UE_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_Per_UE_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DU-Usage-Report-CellResourceReportItem.h" + +#endif /* _DU_Usage_Report_Per_UE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c new file mode 100644 index 0000000..0bcafbe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.c @@ -0,0 +1,138 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "DU-Usage-Report-UeResourceReportItem.h" + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 30, -1, 0, 1000000000 } /* (0..1000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DU_Usage_Report_UeResourceReportItem, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "c-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct DU_Usage_Report_UeResourceReportItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct DU_Usage_Report_UeResourceReportItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 = { + sizeof(struct DU_Usage_Report_UeResourceReportItem), + offsetof(struct DU_Usage_Report_UeResourceReportItem, _asn_ctx), + asn_MAP_DU_Usage_Report_UeResourceReportItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_DU_Usage_Report_UeResourceReportItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem = { + "DU-Usage-Report-UeResourceReportItem", + "DU-Usage-Report-UeResourceReportItem", + &asn_OP_SEQUENCE, + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1, /* Same as above */ + sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1) + /sizeof(asn_DEF_DU_Usage_Report_UeResourceReportItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_DU_Usage_Report_UeResourceReportItem_1, + 3, /* Elements count */ + &asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h new file mode 100644 index 0000000..e860272 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/DU-Usage-Report-UeResourceReportItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _DU_Usage_Report_UeResourceReportItem_H_ +#define _DU_Usage_Report_UeResourceReportItem_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DU-Usage-Report-UeResourceReportItem */ +typedef struct DU_Usage_Report_UeResourceReportItem { + C_RNTI_t c_RNTI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DU_Usage_Report_UeResourceReportItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DU_Usage_Report_UeResourceReportItem; +extern asn_SEQUENCE_specifics_t asn_SPC_DU_Usage_Report_UeResourceReportItem_specs_1; +extern asn_TYPE_member_t asn_MBR_DU_Usage_Report_UeResourceReportItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _DU_Usage_Report_UeResourceReportItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..94650be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..6f3f1c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c new file mode 100644 index 0000000..abdf25d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-ActionDefinition.h" + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition), + offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { + "E2SM-KPM-ActionDefinition", + "E2SM-KPM-ActionDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h new file mode 100644 index 0000000..70b81dd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-ActionDefinition.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_ActionDefinition_H_ +#define _E2SM_KPM_ActionDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition */ +typedef struct E2SM_KPM_ActionDefinition { + RIC_Style_Type_t ric_Style_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c new file mode 100644 index 0000000..e0b48f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" + +static int +memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 15)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..15)) */}; +static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_Trigger_ConditionIE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { + "policyTest-List", + "policyTest-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_policyTest_List_tags_2, + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ + asn_DEF_policyTest_List_tags_2, /* Same as above */ + sizeof(asn_DEF_policyTest_List_tags_2) + /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ + { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_policyTest_List_2, + 1, /* Single element */ + &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_policyTest_List_2, + 0, + { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + 0, 0, /* No default value */ + "policyTest-List" + }, +}; +static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), + offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { + "E2SM-KPM-EventTriggerDefinition-Format1", + "E2SM-KPM-EventTriggerDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h new file mode 100644 index 0000000..44cbd92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ +#define _E2SM_KPM_EventTriggerDefinition_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Trigger_ConditionIE_Item; + +/* E2SM-KPM-EventTriggerDefinition-Format1 */ +typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { + struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { + A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *policyTest_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Trigger-ConditionIE-Item.h" + +#endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c new file mode 100644 index 0000000..482e42c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-EventTriggerDefinition.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_EventTriggerDefinition_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h new file mode 100644 index 0000000..e96e600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-EventTriggerDefinition.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_EventTriggerDefinition_H_ +#define _E2SM_KPM_EventTriggerDefinition_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-EventTriggerDefinition-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_EventTriggerDefinition_PR { + E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_EventTriggerDefinition_PR; + +/* E2SM-KPM-EventTriggerDefinition */ +typedef struct E2SM_KPM_EventTriggerDefinition { + E2SM_KPM_EventTriggerDefinition_PR present; + union E2SM_KPM_EventTriggerDefinition_u { + E2SM_KPM_EventTriggerDefinition_Format1_t eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_EventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c new file mode 100644 index 0000000..2cccf8b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader-Format1.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { + { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "id-GlobalKPMnode-ID" + }, + { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCGI" + }, + { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_Report_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "message-Type" + }, + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-Name" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-GNB-ID" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader_Format1), + offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 10, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { + "E2SM-KPM-IndicationHeader-Format1", + "E2SM-KPM-IndicationHeader-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, + 10, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h new file mode 100644 index 0000000..c46b715 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader-Format1.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_Format1_H_ +#define _E2SM_KPM_IndicationHeader_Format1_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include "UE-Report-Type.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalKPMnode_ID; +struct NRCGI; +struct SNSSAI; +struct GNB_Name; +struct GlobalgNB_ID; + +/* E2SM-KPM-IndicationHeader-Format1 */ +typedef struct E2SM_KPM_IndicationHeader_Format1 { + struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ + struct NRCGI *nRCGI; /* OPTIONAL */ + PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ + struct SNSSAI *sliceID; /* OPTIONAL */ + long *fiveQI; /* OPTIONAL */ + long *qci; /* OPTIONAL */ + UE_Report_Type_t *message_Type; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + struct GNB_Name *gNB_Name; /* OPTIONAL */ + struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "GlobalKPMnode-ID.h" +#include "NRCGI.h" +#include "SNSSAI.h" +#include "GNB-Name.h" +#include "GlobalgNB-ID.h" + +#endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c new file mode 100644 index 0000000..c4fe730 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationHeader.h" + +static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationHeader_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader, present), + sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + asn_MBR_E2SM_KPM_IndicationHeader_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h new file mode 100644 index 0000000..67dc86d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationHeader.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationHeader_H_ +#define _E2SM_KPM_IndicationHeader_H_ + + +#include + +/* Including external dependencies */ +#include "E2SM-KPM-IndicationHeader-Format1.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationHeader_PR { + E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationHeader_PR; + +/* E2SM-KPM-IndicationHeader */ +typedef struct E2SM_KPM_IndicationHeader { + E2SM_KPM_IndicationHeader_PR present; + union E2SM_KPM_IndicationHeader_u { + E2SM_KPM_IndicationHeader_Format1_t indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationHeader_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c new file mode 100644 index 0000000..7bdebb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage-Format1.h" + +static int +memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 8)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..8)) */}; +static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PM_Containers_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), + offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { + "pm-Containers", + "pm-Containers", + &asn_OP_SEQUENCE_OF, + asn_DEF_pm_Containers_tags_2, + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ + asn_DEF_pm_Containers_tags_2, /* Same as above */ + sizeof(asn_DEF_pm_Containers_tags_2) + /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ + { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_pm_Containers_2, + 1, /* Single element */ + &asn_SPC_pm_Containers_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pm_Containers_2, + 0, + { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + 0, 0, /* No default value */ + "pm-Containers" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format1), + offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { + "E2SM-KPM-IndicationMessage-Format1", + "E2SM-KPM-IndicationMessage-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, + 1, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h new file mode 100644 index 0000000..a05b652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage-Format1.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format1_H_ +#define _E2SM_KPM_IndicationMessage_Format1_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PM_Containers_List; + +/* E2SM-KPM-IndicationMessage-Format1 */ +typedef struct E2SM_KPM_IndicationMessage_Format1 { + struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { + A_SEQUENCE_OF(struct PM_Containers_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pm_Containers; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PM-Containers-List.h" + +#endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c new file mode 100644 index 0000000..2eb4018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.c @@ -0,0 +1,107 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-IndicationMessage.h" + +static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), + asn_MAP_indicationMessage_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { + "indicationMessage", + "indicationMessage", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, + asn_MBR_indicationMessage_3, + 1, /* Elements count */ + &asn_SPC_indicationMessage_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-Style-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationMessage_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage), + offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { + "E2SM-KPM-IndicationMessage", + "E2SM-KPM-IndicationMessage", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h new file mode 100644 index 0000000..77d4e3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-IndicationMessage.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_IndicationMessage_H_ +#define _E2SM_KPM_IndicationMessage_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "E2SM-KPM-IndicationMessage-Format1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { + E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 + /* Extensions may appear below */ + +} E2SM_KPM_IndicationMessage__indicationMessage_PR; + +/* E2SM-KPM-IndicationMessage */ +typedef struct E2SM_KPM_IndicationMessage { + RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_IndicationMessage__indicationMessage { + E2SM_KPM_IndicationMessage__indicationMessage_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_u { + E2SM_KPM_IndicationMessage_Format1_t indicationMessage_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationMessage; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c new file mode 100644 index 0000000..226d0fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "E2SM-KPM-RANfunction-Description.h" + +static int +memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 63)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..63)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_EventTriggerStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { + "ric-EventTriggerStyle-List", + "ric-EventTriggerStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_EventTriggerStyle_List_tags_4, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ + { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_4, + 1, /* Single element */ + &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RIC_ReportStyle_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { + "ric-ReportStyle-List", + "ric-ReportStyle-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_ric_ReportStyle_List_tags_6, + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_6) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ + { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_6, + 1, /* Single element */ + &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ric_EventTriggerStyle_List_4, + 0, + { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_6, + 0, + { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, + 0, 0, /* No default value */ + "ric-ReportStyle-List" + }, +}; +static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), + offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), + asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { + "e2SM-KPM-RANfunction-Item", + "e2SM-KPM-RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ + asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ + sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) + /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_e2SM_KPM_RANfunction_Item_3, + 2, /* Elements count */ + &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, ranFunction_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunction_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_e2SM_KPM_RANfunction_Item_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e2SM-KPM-RANfunction-Item" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { + sizeof(struct E2SM_KPM_RANfunction_Description), + offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), + asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { + "E2SM-KPM-RANfunction-Description", + "E2SM-KPM-RANfunction-Description", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_RANfunction_Description_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1) + /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_RANfunction_Description_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h new file mode 100644 index 0000000..79d2dcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2SM-KPM-RANfunction-Description.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _E2SM_KPM_RANfunction_Description_H_ +#define _E2SM_KPM_RANfunction_Description_H_ + + +#include + +/* Including external dependencies */ +#include "RANfunction-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RIC_EventTriggerStyle_List; +struct RIC_ReportStyle_List; + +/* E2SM-KPM-RANfunction-Description */ +typedef struct E2SM_KPM_RANfunction_Description { + RANfunction_Name_t ranFunction_Name; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } e2SM_KPM_RANfunction_Item; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_RANfunction_Description_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RIC-EventTriggerStyle-List.h" +#include "RIC-ReportStyle-List.h" + +#endif /* _E2SM_KPM_RANfunction_Description_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..49cae9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..4dee64b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..cefa91b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..2b8b070 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..b607aa1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..ccec4bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..824871d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..7e142ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c new file mode 100644 index 0000000..212c6fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8af6b41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..e8fc32f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..f97a53c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8902f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-CUUP-PM-Format.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItemFormat, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_CUUP_PM_Format__perQCIReportList), + offsetof(struct EPC_CUUP_PM_Format__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_CUUP_PM_Format, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1 = { + sizeof(struct EPC_CUUP_PM_Format), + offsetof(struct EPC_CUUP_PM_Format, _asn_ctx), + asn_MAP_EPC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format = { + "EPC-CUUP-PM-Format", + "EPC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_EPC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_EPC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_EPC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_EPC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h new file mode 100644 index 0000000..b07125d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_CUUP_PM_Format_H_ +#define _EPC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItemFormat; + +/* EPC-CUUP-PM-Format */ +typedef struct EPC_CUUP_PM_Format { + struct EPC_CUUP_PM_Format__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItemFormat) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItemFormat.h" + +#endif /* _EPC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c new file mode 100644 index 0000000..2ba5440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "EPC-DU-PM-Container.h" + +static int +memb_perQCIReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 256)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_type_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +static asn_per_constraints_t asn_PER_memb_perQCIReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_perQCIReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PerQCIReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_perQCIReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_perQCIReportList_specs_2 = { + sizeof(struct EPC_DU_PM_Container__perQCIReportList), + offsetof(struct EPC_DU_PM_Container__perQCIReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_perQCIReportList_2 = { + "perQCIReportList", + "perQCIReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_perQCIReportList_tags_2, + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_perQCIReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_perQCIReportList_tags_2) + /sizeof(asn_DEF_perQCIReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_perQCIReportList_constr_2, &asn_PER_type_perQCIReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_perQCIReportList_2, + 1, /* Single element */ + &asn_SPC_perQCIReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EPC_DU_PM_Container, perQCIReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_perQCIReportList_2, + 0, + { &asn_OER_memb_perQCIReportList_constr_2, &asn_PER_memb_perQCIReportList_constr_2, memb_perQCIReportList_constraint_1 }, + 0, 0, /* No default value */ + "perQCIReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_EPC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EPC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* perQCIReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1 = { + sizeof(struct EPC_DU_PM_Container), + offsetof(struct EPC_DU_PM_Container, _asn_ctx), + asn_MAP_EPC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container = { + "EPC-DU-PM-Container", + "EPC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_EPC_DU_PM_Container_tags_1, + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_EPC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_EPC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_EPC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EPC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_EPC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h new file mode 100644 index 0000000..198982e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/EPC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _EPC_DU_PM_Container_H_ +#define _EPC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PerQCIReportListItem; + +/* EPC-DU-PM-Container */ +typedef struct EPC_DU_PM_Container { + struct EPC_DU_PM_Container__perQCIReportList { + A_SEQUENCE_OF(struct PerQCIReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } perQCIReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EPC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EPC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_EPC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_EPC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PerQCIReportListItem.h" + +#endif /* _EPC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..e971c4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..a209847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c new file mode 100644 index 0000000..d8f7e44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-CUUP-PM-Format.h" + +static int +memb_sliceToReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_sliceToReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_sliceToReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SliceToReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_sliceToReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sliceToReportList_specs_2 = { + sizeof(struct FGC_CUUP_PM_Format__sliceToReportList), + offsetof(struct FGC_CUUP_PM_Format__sliceToReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sliceToReportList_2 = { + "sliceToReportList", + "sliceToReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_sliceToReportList_tags_2, + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_sliceToReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_sliceToReportList_tags_2) + /sizeof(asn_DEF_sliceToReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_sliceToReportList_constr_2, &asn_PER_type_sliceToReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_sliceToReportList_2, + 1, /* Single element */ + &asn_SPC_sliceToReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_CUUP_PM_Format, sliceToReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sliceToReportList_2, + 0, + { &asn_OER_memb_sliceToReportList_constr_2, &asn_PER_memb_sliceToReportList_constr_2, memb_sliceToReportList_constraint_1 }, + 0, 0, /* No default value */ + "sliceToReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_CUUP_PM_Format_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_CUUP_PM_Format_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sliceToReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1 = { + sizeof(struct FGC_CUUP_PM_Format), + offsetof(struct FGC_CUUP_PM_Format, _asn_ctx), + asn_MAP_FGC_CUUP_PM_Format_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format = { + "FGC-CUUP-PM-Format", + "FGC-CUUP-PM-Format", + &asn_OP_SEQUENCE, + asn_DEF_FGC_CUUP_PM_Format_tags_1, + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + asn_DEF_FGC_CUUP_PM_Format_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1) + /sizeof(asn_DEF_FGC_CUUP_PM_Format_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_CUUP_PM_Format_1, + 1, /* Elements count */ + &asn_SPC_FGC_CUUP_PM_Format_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h new file mode 100644 index 0000000..a6e4aa8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-CUUP-PM-Format.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_CUUP_PM_Format_H_ +#define _FGC_CUUP_PM_Format_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SliceToReportListItem; + +/* FGC-CUUP-PM-Format */ +typedef struct FGC_CUUP_PM_Format { + struct FGC_CUUP_PM_Format__sliceToReportList { + A_SEQUENCE_OF(struct SliceToReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sliceToReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_CUUP_PM_Format_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_CUUP_PM_Format; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_CUUP_PM_Format_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_CUUP_PM_Format_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SliceToReportListItem.h" + +#endif /* _FGC_CUUP_PM_Format_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c new file mode 100644 index 0000000..c0429ab --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FGC-DU-PM-Container.h" + +static int +memb_slicePerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 1024)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_type_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..1024)) */}; +static asn_per_constraints_t asn_PER_memb_slicePerPlmnPerCellList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_slicePerPlmnPerCellList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SlicePerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_slicePerPlmnPerCellList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_slicePerPlmnPerCellList_specs_2 = { + sizeof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList), + offsetof(struct FGC_DU_PM_Container__slicePerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_slicePerPlmnPerCellList_2 = { + "slicePerPlmnPerCellList", + "slicePerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_slicePerPlmnPerCellList_tags_2, + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]) - 1, /* 1 */ + asn_DEF_slicePerPlmnPerCellList_tags_2, /* Same as above */ + sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2) + /sizeof(asn_DEF_slicePerPlmnPerCellList_tags_2[0]), /* 2 */ + { &asn_OER_type_slicePerPlmnPerCellList_constr_2, &asn_PER_type_slicePerPlmnPerCellList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_slicePerPlmnPerCellList_2, + 1, /* Single element */ + &asn_SPC_slicePerPlmnPerCellList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FGC_DU_PM_Container, slicePerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_slicePerPlmnPerCellList_2, + 0, + { &asn_OER_memb_slicePerPlmnPerCellList_constr_2, &asn_PER_memb_slicePerPlmnPerCellList_constr_2, memb_slicePerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "slicePerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_FGC_DU_PM_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FGC_DU_PM_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* slicePerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1 = { + sizeof(struct FGC_DU_PM_Container), + offsetof(struct FGC_DU_PM_Container, _asn_ctx), + asn_MAP_FGC_DU_PM_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container = { + "FGC-DU-PM-Container", + "FGC-DU-PM-Container", + &asn_OP_SEQUENCE, + asn_DEF_FGC_DU_PM_Container_tags_1, + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + asn_DEF_FGC_DU_PM_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_FGC_DU_PM_Container_tags_1) + /sizeof(asn_DEF_FGC_DU_PM_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FGC_DU_PM_Container_1, + 1, /* Elements count */ + &asn_SPC_FGC_DU_PM_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h new file mode 100644 index 0000000..96debbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FGC-DU-PM-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FGC_DU_PM_Container_H_ +#define _FGC_DU_PM_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SlicePerPlmnPerCellListItem; + +/* FGC-DU-PM-Container */ +typedef struct FGC_DU_PM_Container { + struct FGC_DU_PM_Container__slicePerPlmnPerCellList { + A_SEQUENCE_OF(struct SlicePerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } slicePerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FGC_DU_PM_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FGC_DU_PM_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_FGC_DU_PM_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_FGC_DU_PM_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SlicePerPlmnPerCellListItem.h" + +#endif /* _FGC_DU_PM_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c new file mode 100644 index 0000000..84d1741 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnListItem, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnListItem), + offsetof(struct FQIPERSlicesPerPlmnListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem = { + "FQIPERSlicesPerPlmnListItem", + "FQIPERSlicesPerPlmnListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h new file mode 100644 index 0000000..a87a0d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnListItem.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnListItem_H_ +#define _FQIPERSlicesPerPlmnListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnListItem */ +typedef struct FQIPERSlicesPerPlmnListItem { + long fiveQI; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c new file mode 100644 index 0000000..d73d0db --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +static int +memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 273)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_fiveQI_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 2, 1 } /* (0..273) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 9, 9, 0, 273 } /* (0..273) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_fiveQI_constr_2, &asn_PER_memb_fiveQI_constr_2, memb_fiveQI_constraint_1 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 2, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 = { + sizeof(struct FQIPERSlicesPerPlmnPerCellListItem), + offsetof(struct FQIPERSlicesPerPlmnPerCellListItem, _asn_ctx), + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_FQIPERSlicesPerPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem = { + "FQIPERSlicesPerPlmnPerCellListItem", + "FQIPERSlicesPerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_FQIPERSlicesPerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h new file mode 100644 index 0000000..1b22e34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/FQIPERSlicesPerPlmnPerCellListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _FQIPERSlicesPerPlmnPerCellListItem_H_ +#define _FQIPERSlicesPerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FQIPERSlicesPerPlmnPerCellListItem */ +typedef struct FQIPERSlicesPerPlmnPerCellListItem { + long fiveQI; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FQIPERSlicesPerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FQIPERSlicesPerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_FQIPERSlicesPerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_FQIPERSlicesPerPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _FQIPERSlicesPerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c new file mode 100644 index 0000000..029ca92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-CP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_CP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_CP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_CP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_CP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_CP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name = { + "GNB-CU-CP-Name", + "GNB-CU-CP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_CP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_CP_Name_constr_1, &asn_PER_type_GNB_CU_CP_Name_constr_1, GNB_CU_CP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h new file mode 100644 index 0000000..1eb3404 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-CP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_CP_Name_H_ +#define _GNB_CU_CP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-Name */ +typedef PrintableString_t GNB_CU_CP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_Name; +asn_struct_free_f GNB_CU_CP_Name_free; +asn_struct_print_f GNB_CU_CP_Name_print; +asn_constr_check_f GNB_CU_CP_Name_constraint; +ber_type_decoder_f GNB_CU_CP_Name_decode_ber; +der_type_encoder_f GNB_CU_CP_Name_encode_der; +xer_type_decoder_f GNB_CU_CP_Name_decode_xer; +xer_type_encoder_f GNB_CU_CP_Name_encode_xer; +oer_type_decoder_f GNB_CU_CP_Name_decode_oer; +oer_type_encoder_f GNB_CU_CP_Name_encode_oer; +per_type_decoder_f GNB_CU_CP_Name_decode_uper; +per_type_encoder_f GNB_CU_CP_Name_encode_uper; +per_type_decoder_f GNB_CU_CP_Name_decode_aper; +per_type_encoder_f GNB_CU_CP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..737a4f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..e6b9c43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c new file mode 100644 index 0000000..b64d5b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-CU-UP-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_CU_UP_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_CU_UP_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_CU_UP_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_CU_UP_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_CU_UP_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name = { + "GNB-CU-UP-Name", + "GNB-CU-UP-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_CU_UP_Name_tags_1, + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_Name_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_Name_constr_1, &asn_PER_type_GNB_CU_UP_Name_constr_1, GNB_CU_UP_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h new file mode 100644 index 0000000..c1b9d7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-CU-UP-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_CU_UP_Name_H_ +#define _GNB_CU_UP_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-Name */ +typedef PrintableString_t GNB_CU_UP_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_Name; +asn_struct_free_f GNB_CU_UP_Name_free; +asn_struct_print_f GNB_CU_UP_Name_print; +asn_constr_check_f GNB_CU_UP_Name_constraint; +ber_type_decoder_f GNB_CU_UP_Name_decode_ber; +der_type_encoder_f GNB_CU_UP_Name_encode_der; +xer_type_decoder_f GNB_CU_UP_Name_decode_xer; +xer_type_encoder_f GNB_CU_UP_Name_encode_xer; +oer_type_decoder_f GNB_CU_UP_Name_decode_oer; +oer_type_encoder_f GNB_CU_UP_Name_encode_oer; +per_type_decoder_f GNB_CU_UP_Name_decode_uper; +per_type_encoder_f GNB_CU_UP_Name_encode_uper; +per_type_decoder_f GNB_CU_UP_Name_decode_aper; +per_type_encoder_f GNB_CU_UP_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..b43653e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..65e23da --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c new file mode 100644 index 0000000..8ac789d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-DU-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +GNB_DU_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_GNB_DU_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_GNB_DU_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_GNB_DU_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_GNB_DU_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name = { + "GNB-DU-Name", + "GNB-DU-Name", + &asn_OP_PrintableString, + asn_DEF_GNB_DU_Name_tags_1, + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_Name_tags_1) + /sizeof(asn_DEF_GNB_DU_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_Name_constr_1, &asn_PER_type_GNB_DU_Name_constr_1, GNB_DU_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h new file mode 100644 index 0000000..e4994e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-DU-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_DU_Name_H_ +#define _GNB_DU_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-Name */ +typedef PrintableString_t GNB_DU_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_Name; +asn_struct_free_f GNB_DU_Name_free; +asn_struct_print_f GNB_DU_Name_print; +asn_constr_check_f GNB_DU_Name_constraint; +ber_type_decoder_f GNB_DU_Name_decode_ber; +der_type_encoder_f GNB_DU_Name_encode_der; +xer_type_decoder_f GNB_DU_Name_decode_xer; +xer_type_encoder_f GNB_DU_Name_encode_xer; +oer_type_decoder_f GNB_DU_Name_decode_oer; +oer_type_encoder_f GNB_DU_Name_encode_oer; +per_type_decoder_f GNB_DU_Name_decode_uper; +per_type_encoder_f GNB_DU_Name_encode_uper; +per_type_decoder_f GNB_DU_Name_decode_aper; +per_type_encoder_f GNB_DU_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..81bc2b0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..cf5438c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c new file mode 100644 index 0000000..aeee9d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GNB-Name.h" + +static asn_oer_constraints_t asn_OER_type_GNB_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_DU_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct GNB_Name, choice.gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-DU-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-CU-UP-Name */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1 = { + sizeof(struct GNB_Name), + offsetof(struct GNB_Name, _asn_ctx), + offsetof(struct GNB_Name, present), + sizeof(((struct GNB_Name *)0)->present), + asn_MAP_GNB_Name_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_Name = { + "GNB-Name", + "GNB-Name", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_Name_constr_1, &asn_PER_type_GNB_Name_constr_1, CHOICE_constraint }, + asn_MBR_GNB_Name_1, + 3, /* Elements count */ + &asn_SPC_GNB_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h new file mode 100644 index 0000000..3c69172 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GNB-Name.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GNB_Name_H_ +#define _GNB_Name_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-DU-Name.h" +#include "GNB-CU-CP-Name.h" +#include "GNB-CU-UP-Name.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_Name_PR { + GNB_Name_PR_NOTHING, /* No components present */ + GNB_Name_PR_gNB_DU_Name, + GNB_Name_PR_gNB_CU_CP_Name, + GNB_Name_PR_gNB_CU_UP_Name + /* Extensions may appear below */ + +} GNB_Name_PR; + +/* GNB-Name */ +typedef struct GNB_Name { + GNB_Name_PR present; + union GNB_Name_u { + GNB_DU_Name_t gNB_DU_Name; + GNB_CU_CP_Name_t gNB_CU_CP_Name; + GNB_CU_UP_Name_t gNB_CU_UP_Name; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_Name; +extern asn_CHOICE_specifics_t asn_SPC_GNB_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_Name_1[3]; +extern asn_per_constraints_t asn_PER_type_GNB_Name_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..0b194e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..339797e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..f31a018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..6047414 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..2728634 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..0bae91d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..25f0346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..2f36099 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..91e427b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..d6767bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..58f3724 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..bd653ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c new file mode 100644 index 0000000..5202400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.c @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ID.h" + +static asn_oer_constraints_t asn_OER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalKPMnode_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ID), + offsetof(struct GlobalKPMnode_ID, _asn_ctx), + offsetof(struct GlobalKPMnode_ID, present), + sizeof(((struct GlobalKPMnode_ID *)0)->present), + asn_MAP_GlobalKPMnode_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID = { + "GlobalKPMnode-ID", + "GlobalKPMnode-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalKPMnode_ID_constr_1, &asn_PER_type_GlobalKPMnode_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalKPMnode_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalKPMnode_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h new file mode 100644 index 0000000..a93e881 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ID.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ID_H_ +#define _GlobalKPMnode_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalKPMnode-gNB-ID.h" +#include "GlobalKPMnode-en-gNB-ID.h" +#include "GlobalKPMnode-ng-eNB-ID.h" +#include "GlobalKPMnode-eNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalKPMnode_ID_PR { + GlobalKPMnode_ID_PR_NOTHING, /* No components present */ + GlobalKPMnode_ID_PR_gNB, + GlobalKPMnode_ID_PR_en_gNB, + GlobalKPMnode_ID_PR_ng_eNB, + GlobalKPMnode_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalKPMnode_ID_PR; + +/* GlobalKPMnode-ID */ +typedef struct GlobalKPMnode_ID { + GlobalKPMnode_ID_PR present; + union GlobalKPMnode_ID_u { + GlobalKPMnode_gNB_ID_t gNB; + GlobalKPMnode_en_gNB_ID_t en_gNB; + GlobalKPMnode_ng_eNB_ID_t ng_eNB; + GlobalKPMnode_eNB_ID_t eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalKPMnode_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_GlobalKPMnode_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c new file mode 100644 index 0000000..e4039b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_eNB_ID), + offsetof(struct GlobalKPMnode_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID = { + "GlobalKPMnode-eNB-ID", + "GlobalKPMnode-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h new file mode 100644 index 0000000..9941095 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_eNB_ID_H_ +#define _GlobalKPMnode_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-eNB-ID */ +typedef struct GlobalKPMnode_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c new file mode 100644 index 0000000..68e34d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_en_gNB_ID), + offsetof(struct GlobalKPMnode_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID = { + "GlobalKPMnode-en-gNB-ID", + "GlobalKPMnode-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h new file mode 100644 index 0000000..7994b62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_en_gNB_ID_H_ +#define _GlobalKPMnode_en_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-en-gNB-ID */ +typedef struct GlobalKPMnode_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_en_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c new file mode 100644 index 0000000..49e21ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalKPMnode_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalKPMnode_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalKPMnode_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_gNB_ID), + offsetof(struct GlobalKPMnode_gNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalKPMnode_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID = { + "GlobalKPMnode-gNB-ID", + "GlobalKPMnode-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalKPMnode_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h new file mode 100644 index 0000000..facef92 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_gNB_ID_H_ +#define _GlobalKPMnode_gNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-gNB-ID */ +typedef struct GlobalKPMnode_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_gNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c new file mode 100644 index 0000000..299fb25 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalKPMnode-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalKPMnode_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalKPMnode_ng_eNB_ID), + offsetof(struct GlobalKPMnode_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalKPMnode_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID = { + "GlobalKPMnode-ng-eNB-ID", + "GlobalKPMnode-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalKPMnode_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalKPMnode_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h new file mode 100644 index 0000000..9ad8057 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalKPMnode-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalKPMnode_ng_eNB_ID_H_ +#define _GlobalKPMnode_ng_eNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalKPMnode-ng-eNB-ID */ +typedef struct GlobalKPMnode_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalKPMnode_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalKPMnode_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalKPMnode_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalKPMnode_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalKPMnode_ng_eNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..f113921 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..c1ab6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..07f8116 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..1e254a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..bfcc098 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..e31846d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..d220e9a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..e8246ca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..de67caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.c @@ -0,0 +1,389 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..a8a01f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..c1bec19 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + converter-example.c\ + pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..8abd4f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,240 @@ +ASN_MODULE_SRCS= \ + GlobalKPMnode-ID.c \ + GlobalKPMnode-gNB-ID.c \ + GlobalgNB-ID.c \ + GNB-CU-UP-ID.c \ + GNB-DU-ID.c \ + GNB-ID-Choice.c \ + GlobalKPMnode-en-gNB-ID.c \ + GlobalenGNB-ID.c \ + ENGNB-ID.c \ + GlobalKPMnode-ng-eNB-ID.c \ + GlobalngeNB-ID.c \ + ENB-ID-Choice.c \ + GlobalKPMnode-eNB-ID.c \ + GlobalENB-ID.c \ + ENB-ID.c \ + NRCGI.c \ + PLMN-Identity.c \ + NRCellIdentity.c \ + SNSSAI.c \ + C-RNTI.c \ + RIC-Style-Type.c \ + RIC-Style-Name.c \ + RIC-Format-Type.c \ + E2SM-KPM-EventTriggerDefinition.c \ + E2SM-KPM-EventTriggerDefinition-Format1.c \ + E2SM-KPM-ActionDefinition.c \ + E2SM-KPM-IndicationHeader.c \ + E2SM-KPM-IndicationHeader-Format1.c \ + E2SM-KPM-IndicationMessage.c \ + E2SM-KPM-IndicationMessage-Format1.c \ + PM-Containers-List.c \ + E2SM-KPM-RANfunction-Description.c \ + NI-Type.c \ + RAN-Container.c \ + Timestamp.c \ + Trigger-ConditionIE-Item.c \ + RT-Period-IE.c \ + RANcallProcess-ID-string.c \ + RANfunction-Name.c \ + RIC-EventTriggerStyle-List.c \ + RIC-ReportStyle-List.c \ + PF-Container.c \ + GNB-Name.c \ + GNB-CU-CP-Name.c \ + GNB-DU-Name.c \ + GNB-CU-UP-Name.c \ + UE-Report-Type.c \ + ODU-PF-Container.c \ + CellResourceReportListItem.c \ + ServedPlmnPerCellListItem.c \ + FGC-DU-PM-Container.c \ + SlicePerPlmnPerCellListItem.c \ + FQIPERSlicesPerPlmnPerCellListItem.c \ + EPC-DU-PM-Container.c \ + PerQCIReportListItem.c \ + DU-Usage-Report-Per-UE.c \ + DU-Usage-Report-CellResourceReportItem.c \ + DU-Usage-Report-UeResourceReportItem.c \ + OCUCP-PF-Container.c \ + CU-CP-Usage-Report-Per-UE.c \ + CU-CP-Usage-Report-CellResourceReportItem.c \ + CU-CP-Usage-Report-UeResourceReportItem.c \ + OCUUP-PF-Container.c \ + PF-ContainerListItem.c \ + CUUPMeasurement-Container.c \ + PlmnID-List.c \ + FGC-CUUP-PM-Format.c \ + SliceToReportListItem.c \ + FQIPERSlicesPerPlmnListItem.c \ + EPC-CUUP-PM-Format.c \ + PerQCIReportListItemFormat.c \ + CU-UP-Usage-Report-Per-UE.c \ + CU-UP-Usage-Report-CellResourceReportItem.c \ + CU-UP-Usage-Report-UeResourceReportItem.c + +ASN_MODULE_HDRS= \ + GlobalKPMnode-ID.h \ + GlobalKPMnode-gNB-ID.h \ + GlobalgNB-ID.h \ + GNB-CU-UP-ID.h \ + GNB-DU-ID.h \ + GNB-ID-Choice.h \ + GlobalKPMnode-en-gNB-ID.h \ + GlobalenGNB-ID.h \ + ENGNB-ID.h \ + GlobalKPMnode-ng-eNB-ID.h \ + GlobalngeNB-ID.h \ + ENB-ID-Choice.h \ + GlobalKPMnode-eNB-ID.h \ + GlobalENB-ID.h \ + ENB-ID.h \ + NRCGI.h \ + PLMN-Identity.h \ + NRCellIdentity.h \ + SNSSAI.h \ + C-RNTI.h \ + RIC-Style-Type.h \ + RIC-Style-Name.h \ + RIC-Format-Type.h \ + E2SM-KPM-EventTriggerDefinition.h \ + E2SM-KPM-EventTriggerDefinition-Format1.h \ + E2SM-KPM-ActionDefinition.h \ + E2SM-KPM-IndicationHeader.h \ + E2SM-KPM-IndicationHeader-Format1.h \ + E2SM-KPM-IndicationMessage.h \ + E2SM-KPM-IndicationMessage-Format1.h \ + PM-Containers-List.h \ + E2SM-KPM-RANfunction-Description.h \ + NI-Type.h \ + RAN-Container.h \ + Timestamp.h \ + Trigger-ConditionIE-Item.h \ + RT-Period-IE.h \ + RANcallProcess-ID-string.h \ + RANfunction-Name.h \ + RIC-EventTriggerStyle-List.h \ + RIC-ReportStyle-List.h \ + PF-Container.h \ + GNB-Name.h \ + GNB-CU-CP-Name.h \ + GNB-DU-Name.h \ + GNB-CU-UP-Name.h \ + UE-Report-Type.h \ + ODU-PF-Container.h \ + CellResourceReportListItem.h \ + ServedPlmnPerCellListItem.h \ + FGC-DU-PM-Container.h \ + SlicePerPlmnPerCellListItem.h \ + FQIPERSlicesPerPlmnPerCellListItem.h \ + EPC-DU-PM-Container.h \ + PerQCIReportListItem.h \ + DU-Usage-Report-Per-UE.h \ + DU-Usage-Report-CellResourceReportItem.h \ + DU-Usage-Report-UeResourceReportItem.h \ + OCUCP-PF-Container.h \ + CU-CP-Usage-Report-Per-UE.h \ + CU-CP-Usage-Report-CellResourceReportItem.h \ + CU-CP-Usage-Report-UeResourceReportItem.h \ + OCUUP-PF-Container.h \ + PF-ContainerListItem.h \ + CUUPMeasurement-Container.h \ + PlmnID-List.h \ + FGC-CUUP-PM-Format.h \ + SliceToReportListItem.h \ + FQIPERSlicesPerPlmnListItem.h \ + EPC-CUUP-PM-Format.h \ + PerQCIReportListItemFormat.h \ + CU-UP-Usage-Report-Per-UE.h \ + CU-UP-Usage-Report-CellResourceReportItem.h \ + CU-UP-Usage-Report-UeResourceReportItem.h + +ASN_MODULE_HDRS+=OPEN_TYPE.h +ASN_MODULE_SRCS+=OPEN_TYPE.c +ASN_MODULE_HDRS+=constr_CHOICE.h +ASN_MODULE_HDRS+=INTEGER.h +ASN_MODULE_SRCS+=INTEGER.c +ASN_MODULE_HDRS+=NativeEnumerated.h +ASN_MODULE_SRCS+=NativeEnumerated.c +ASN_MODULE_HDRS+=NativeInteger.h +ASN_MODULE_SRCS+=NativeInteger.c +ASN_MODULE_HDRS+=PrintableString.h +ASN_MODULE_SRCS+=PrintableString.c +ASN_MODULE_HDRS+=OCTET_STRING.h +ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=asn_SET_OF.h +ASN_MODULE_SRCS+=asn_SET_OF.c +ASN_MODULE_SRCS+=constr_CHOICE.c +ASN_MODULE_HDRS+=constr_SEQUENCE.h +ASN_MODULE_SRCS+=constr_SEQUENCE.c +ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=constr_SET_OF.h +ASN_MODULE_SRCS+=constr_SET_OF.c +ASN_MODULE_HDRS+=asn_application.h +ASN_MODULE_SRCS+=asn_application.c +ASN_MODULE_HDRS+=asn_ioc.h +ASN_MODULE_HDRS+=asn_system.h +ASN_MODULE_HDRS+=asn_codecs.h +ASN_MODULE_HDRS+=asn_internal.h +ASN_MODULE_SRCS+=asn_internal.c +ASN_MODULE_HDRS+=asn_random_fill.h +ASN_MODULE_SRCS+=asn_random_fill.c +ASN_MODULE_HDRS+=asn_bit_data.h +ASN_MODULE_SRCS+=asn_bit_data.c +ASN_MODULE_SRCS+=OCTET_STRING.c +ASN_MODULE_HDRS+=BIT_STRING.h +ASN_MODULE_SRCS+=BIT_STRING.c +ASN_MODULE_SRCS+=asn_codecs_prim.c +ASN_MODULE_HDRS+=asn_codecs_prim.h +ASN_MODULE_HDRS+=ber_tlv_length.h +ASN_MODULE_SRCS+=ber_tlv_length.c +ASN_MODULE_HDRS+=ber_tlv_tag.h +ASN_MODULE_SRCS+=ber_tlv_tag.c +ASN_MODULE_HDRS+=ber_decoder.h +ASN_MODULE_SRCS+=ber_decoder.c +ASN_MODULE_HDRS+=der_encoder.h +ASN_MODULE_SRCS+=der_encoder.c +ASN_MODULE_HDRS+=constr_TYPE.h +ASN_MODULE_SRCS+=constr_TYPE.c +ASN_MODULE_HDRS+=constraints.h +ASN_MODULE_SRCS+=constraints.c +ASN_MODULE_HDRS+=xer_support.h +ASN_MODULE_SRCS+=xer_support.c +ASN_MODULE_HDRS+=xer_decoder.h +ASN_MODULE_SRCS+=xer_decoder.c +ASN_MODULE_HDRS+=xer_encoder.h +ASN_MODULE_SRCS+=xer_encoder.c +ASN_MODULE_HDRS+=per_support.h +ASN_MODULE_SRCS+=per_support.c +ASN_MODULE_HDRS+=per_decoder.h +ASN_MODULE_SRCS+=per_decoder.c +ASN_MODULE_HDRS+=per_encoder.h +ASN_MODULE_SRCS+=per_encoder.c +ASN_MODULE_HDRS+=per_opentype.h +ASN_MODULE_SRCS+=per_opentype.c +ASN_MODULE_HDRS+=oer_decoder.h +ASN_MODULE_HDRS+=oer_encoder.h +ASN_MODULE_HDRS+=oer_support.h +ASN_MODULE_SRCS+=oer_decoder.c +ASN_MODULE_SRCS+=oer_encoder.c +ASN_MODULE_SRCS+=oer_support.c +ASN_MODULE_SRCS+=OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=INTEGER_oer.c +ASN_MODULE_SRCS+=BIT_STRING_oer.c +ASN_MODULE_SRCS+=OCTET_STRING_oer.c +ASN_MODULE_SRCS+=NativeInteger_oer.c +ASN_MODULE_SRCS+=NativeEnumerated_oer.c +ASN_MODULE_SRCS+=constr_CHOICE_oer.c +ASN_MODULE_SRCS+=constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c new file mode 100644 index 0000000..1162fd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NI-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NI_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_NI_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NI_Type_value2enum_1[] = { + { 0, 4, "x2-u" }, + { 1, 4, "xn-u" }, + { 2, 4, "f1-u" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NI_Type_enum2value_1[] = { + 2, /* f1-u(2) */ + 0, /* x2-u(0) */ + 1 /* xn-u(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1 = { + asn_MAP_NI_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NI_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NI_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NI_Type = { + "NI-Type", + "NI-Type", + &asn_OP_NativeEnumerated, + asn_DEF_NI_Type_tags_1, + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + asn_DEF_NI_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_NI_Type_tags_1) + /sizeof(asn_DEF_NI_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_NI_Type_constr_1, &asn_PER_type_NI_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NI_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h new file mode 100644 index 0000000..c696a44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NI-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NI_Type_H_ +#define _NI_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NI_Type { + NI_Type_x2_u = 0, + NI_Type_xn_u = 1, + NI_Type_f1_u = 2 + /* + * Enumeration is extensible + */ +} e_NI_Type; + +/* NI-Type */ +typedef long NI_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NI_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NI_Type; +extern const asn_INTEGER_specifics_t asn_SPC_NI_Type_specs_1; +asn_struct_free_f NI_Type_free; +asn_struct_print_f NI_Type_print; +asn_constr_check_f NI_Type_constraint; +ber_type_decoder_f NI_Type_decode_ber; +der_type_encoder_f NI_Type_encode_der; +xer_type_decoder_f NI_Type_decode_xer; +xer_type_encoder_f NI_Type_encode_xer; +oer_type_decoder_f NI_Type_decode_oer; +oer_type_encoder_f NI_Type_encode_oer; +per_type_decoder_f NI_Type_decode_uper; +per_type_encoder_f NI_Type_encode_uper; +per_type_decoder_f NI_Type_decode_aper; +per_type_encoder_f NI_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NI_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c new file mode 100644 index 0000000..94d8d4b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCGI.h" + +asn_TYPE_member_t asn_MBR_NRCGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRCGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRCGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRCGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1 = { + sizeof(struct NRCGI), + offsetof(struct NRCGI, _asn_ctx), + asn_MAP_NRCGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRCGI = { + "NRCGI", + "NRCGI", + &asn_OP_SEQUENCE, + asn_DEF_NRCGI_tags_1, + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + asn_DEF_NRCGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCGI_tags_1) + /sizeof(asn_DEF_NRCGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRCGI_1, + 2, /* Elements count */ + &asn_SPC_NRCGI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h new file mode 100644 index 0000000..b4938d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCGI.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCGI_H_ +#define _NRCGI_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "NRCellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCGI */ +typedef struct NRCGI { + PLMN_Identity_t pLMN_Identity; + NRCellIdentity_t nRCellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRCGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRCGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NRCGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NRCGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCGI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c new file mode 100644 index 0000000..8e0310e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "NRCellIdentity.h" + +int +NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 36)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 36 /* (SIZE(36..36)) */}; +asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NRCellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { + "NRCellIdentity", + "NRCellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_NRCellIdentity_tags_1, + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + asn_DEF_NRCellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_NRCellIdentity_tags_1) + /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ + { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h new file mode 100644 index 0000000..701f381 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NRCellIdentity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _NRCellIdentity_H_ +#define _NRCellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRCellIdentity */ +typedef BIT_STRING_t NRCellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRCellIdentity; +asn_struct_free_f NRCellIdentity_free; +asn_struct_print_f NRCellIdentity_print; +asn_constr_check_f NRCellIdentity_constraint; +ber_type_decoder_f NRCellIdentity_decode_ber; +der_type_encoder_f NRCellIdentity_encode_der; +xer_type_decoder_f NRCellIdentity_decode_xer; +xer_type_encoder_f NRCellIdentity_encode_xer; +oer_type_decoder_f NRCellIdentity_decode_oer; +oer_type_encoder_f NRCellIdentity_encode_oer; +per_type_decoder_f NRCellIdentity_decode_uper; +per_type_encoder_f NRCellIdentity_encode_uper; +per_type_decoder_f NRCellIdentity_decode_aper; +per_type_encoder_f NRCellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRCellIdentity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c new file mode 100644 index 0000000..121932b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUCP-PF-Container.h" + +static int +memb_numberOfActive_UEs_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_numberOfActive_UEs_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cu_CP_Resource_Status_3[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, numberOfActive_UEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_numberOfActive_UEs_constr_4, &asn_PER_memb_numberOfActive_UEs_constr_4, memb_numberOfActive_UEs_constraint_3 }, + 0, 0, /* No default value */ + "numberOfActive-UEs" + }, +}; +static const int asn_MAP_cu_CP_Resource_Status_oms_3[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_cu_CP_Resource_Status_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cu_CP_Resource_Status_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* numberOfActive-UEs */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cu_CP_Resource_Status_specs_3 = { + sizeof(struct OCUCP_PF_Container__cu_CP_Resource_Status), + offsetof(struct OCUCP_PF_Container__cu_CP_Resource_Status, _asn_ctx), + asn_MAP_cu_CP_Resource_Status_tag2el_3, + 1, /* Count of tags in the map */ + asn_MAP_cu_CP_Resource_Status_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cu_CP_Resource_Status_3 = { + "cu-CP-Resource-Status", + "cu-CP-Resource-Status", + &asn_OP_SEQUENCE, + asn_DEF_cu_CP_Resource_Status_tags_3, + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]) - 1, /* 1 */ + asn_DEF_cu_CP_Resource_Status_tags_3, /* Same as above */ + sizeof(asn_DEF_cu_CP_Resource_Status_tags_3) + /sizeof(asn_DEF_cu_CP_Resource_Status_tags_3[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_cu_CP_Resource_Status_3, + 1, /* Elements count */ + &asn_SPC_cu_CP_Resource_Status_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUCP_PF_Container, gNB_CU_CP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUCP_PF_Container, cu_CP_Resource_Status), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cu_CP_Resource_Status_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-CP-Resource-Status" + }, +}; +static const int asn_MAP_OCUCP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUCP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUCP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cu-CP-Resource-Status */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1 = { + sizeof(struct OCUCP_PF_Container), + offsetof(struct OCUCP_PF_Container, _asn_ctx), + asn_MAP_OCUCP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUCP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container = { + "OCUCP-PF-Container", + "OCUCP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUCP_PF_Container_tags_1, + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUCP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUCP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUCP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUCP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUCP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h new file mode 100644 index 0000000..aee0f21 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUCP-PF-Container.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUCP_PF_Container_H_ +#define _OCUCP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-CP-Name.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OCUCP-PF-Container */ +typedef struct OCUCP_PF_Container { + GNB_CU_CP_Name_t *gNB_CU_CP_Name; /* OPTIONAL */ + struct OCUCP_PF_Container__cu_CP_Resource_Status { + long *numberOfActive_UEs; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cu_CP_Resource_Status; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUCP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUCP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUCP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUCP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCUCP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c new file mode 100644 index 0000000..e1f754e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.c @@ -0,0 +1,141 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "OCUUP-PF-Container.h" + +static int +memb_pf_ContainerList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_type_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..3)) */}; +static asn_per_constraints_t asn_PER_memb_pf_ContainerList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_pf_ContainerList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PF_ContainerListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_pf_ContainerList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_pf_ContainerList_specs_3 = { + sizeof(struct OCUUP_PF_Container__pf_ContainerList), + offsetof(struct OCUUP_PF_Container__pf_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pf_ContainerList_3 = { + "pf-ContainerList", + "pf-ContainerList", + &asn_OP_SEQUENCE_OF, + asn_DEF_pf_ContainerList_tags_3, + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]) - 1, /* 1 */ + asn_DEF_pf_ContainerList_tags_3, /* Same as above */ + sizeof(asn_DEF_pf_ContainerList_tags_3) + /sizeof(asn_DEF_pf_ContainerList_tags_3[0]), /* 2 */ + { &asn_OER_type_pf_ContainerList_constr_3, &asn_PER_type_pf_ContainerList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_pf_ContainerList_3, + 1, /* Single element */ + &asn_SPC_pf_ContainerList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[] = { + { ATF_POINTER, 1, offsetof(struct OCUUP_PF_Container, gNB_CU_UP_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct OCUUP_PF_Container, pf_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pf_ContainerList_3, + 0, + { &asn_OER_memb_pf_ContainerList_constr_3, &asn_PER_memb_pf_ContainerList_constr_3, memb_pf_ContainerList_constraint_1 }, + 0, 0, /* No default value */ + "pf-ContainerList" + }, +}; +static const int asn_MAP_OCUUP_PF_Container_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_OCUUP_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_OCUUP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UP-Name */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pf-ContainerList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1 = { + sizeof(struct OCUUP_PF_Container), + offsetof(struct OCUUP_PF_Container, _asn_ctx), + asn_MAP_OCUUP_PF_Container_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_OCUUP_PF_Container_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container = { + "OCUUP-PF-Container", + "OCUUP-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_OCUUP_PF_Container_tags_1, + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_OCUUP_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_OCUUP_PF_Container_tags_1) + /sizeof(asn_DEF_OCUUP_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_OCUUP_PF_Container_1, + 2, /* Elements count */ + &asn_SPC_OCUUP_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h new file mode 100644 index 0000000..9f19985 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OCUUP-PF-Container.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _OCUUP_PF_Container_H_ +#define _OCUUP_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "GNB-CU-UP-Name.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_ContainerListItem; + +/* OCUUP-PF-Container */ +typedef struct OCUUP_PF_Container { + GNB_CU_UP_Name_t *gNB_CU_UP_Name; /* OPTIONAL */ + struct OCUUP_PF_Container__pf_ContainerList { + A_SEQUENCE_OF(struct PF_ContainerListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pf_ContainerList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OCUUP_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OCUUP_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_OCUUP_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_OCUUP_PF_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-ContainerListItem.h" + +#endif /* _OCUUP_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c new file mode 100644 index 0000000..a28d59a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.c @@ -0,0 +1,129 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ODU-PF-Container.h" + +static int +memb_cellResourceReportList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 512)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_type_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..512)) */}; +static asn_per_constraints_t asn_PER_memb_cellResourceReportList_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 1, 512 } /* (SIZE(1..512)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellResourceReportList_2[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellResourceReportListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_cellResourceReportList_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_cellResourceReportList_specs_2 = { + sizeof(struct ODU_PF_Container__cellResourceReportList), + offsetof(struct ODU_PF_Container__cellResourceReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellResourceReportList_2 = { + "cellResourceReportList", + "cellResourceReportList", + &asn_OP_SEQUENCE_OF, + asn_DEF_cellResourceReportList_tags_2, + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellResourceReportList_tags_2, /* Same as above */ + sizeof(asn_DEF_cellResourceReportList_tags_2) + /sizeof(asn_DEF_cellResourceReportList_tags_2[0]), /* 2 */ + { &asn_OER_type_cellResourceReportList_constr_2, &asn_PER_type_cellResourceReportList_constr_2, SEQUENCE_OF_constraint }, + asn_MBR_cellResourceReportList_2, + 1, /* Single element */ + &asn_SPC_cellResourceReportList_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ODU_PF_Container, cellResourceReportList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellResourceReportList_2, + 0, + { &asn_OER_memb_cellResourceReportList_constr_2, &asn_PER_memb_cellResourceReportList_constr_2, memb_cellResourceReportList_constraint_1 }, + 0, 0, /* No default value */ + "cellResourceReportList" + }, +}; +static const ber_tlv_tag_t asn_DEF_ODU_PF_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ODU_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cellResourceReportList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1 = { + sizeof(struct ODU_PF_Container), + offsetof(struct ODU_PF_Container, _asn_ctx), + asn_MAP_ODU_PF_Container_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container = { + "ODU-PF-Container", + "ODU-PF-Container", + &asn_OP_SEQUENCE, + asn_DEF_ODU_PF_Container_tags_1, + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + asn_DEF_ODU_PF_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_ODU_PF_Container_tags_1) + /sizeof(asn_DEF_ODU_PF_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ODU_PF_Container_1, + 1, /* Elements count */ + &asn_SPC_ODU_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h new file mode 100644 index 0000000..4da50a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ODU-PF-Container.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ODU_PF_Container_H_ +#define _ODU_PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellResourceReportListItem; + +/* ODU-PF-Container */ +typedef struct ODU_PF_Container { + struct ODU_PF_Container__cellResourceReportList { + A_SEQUENCE_OF(struct CellResourceReportListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellResourceReportList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ODU_PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ODU_PF_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_ODU_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_ODU_PF_Container_1[1]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellResourceReportListItem.h" + +#endif /* _ODU_PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c new file mode 100644 index 0000000..ce46255 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-Container.h" + +static asn_oer_constraints_t asn_OER_type_PF_Container_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_PF_Container_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PF_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oDU), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ODU_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_CP), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUCP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_Container, choice.oCU_UP), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCUUP_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP */ +}; +asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1 = { + sizeof(struct PF_Container), + offsetof(struct PF_Container, _asn_ctx), + offsetof(struct PF_Container, present), + sizeof(((struct PF_Container *)0)->present), + asn_MAP_PF_Container_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_Container = { + "PF-Container", + "PF-Container", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_PF_Container_constr_1, &asn_PER_type_PF_Container_constr_1, CHOICE_constraint }, + asn_MBR_PF_Container_1, + 3, /* Elements count */ + &asn_SPC_PF_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h new file mode 100644 index 0000000..853642a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-Container.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_Container_H_ +#define _PF_Container_H_ + + +#include + +/* Including external dependencies */ +#include "ODU-PF-Container.h" +#include "OCUCP-PF-Container.h" +#include "OCUUP-PF-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PF_Container_PR { + PF_Container_PR_NOTHING, /* No components present */ + PF_Container_PR_oDU, + PF_Container_PR_oCU_CP, + PF_Container_PR_oCU_UP + /* Extensions may appear below */ + +} PF_Container_PR; + +/* PF-Container */ +typedef struct PF_Container { + PF_Container_PR present; + union PF_Container_u { + ODU_PF_Container_t oDU; + OCUCP_PF_Container_t oCU_CP; + OCUUP_PF_Container_t oCU_UP; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_Container; +extern asn_CHOICE_specifics_t asn_SPC_PF_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_Container_1[3]; +extern asn_per_constraints_t asn_PER_type_PF_Container_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c new file mode 100644 index 0000000..e3aad2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PF-ContainerListItem.h" + +asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, interface_type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NI_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interface-type" + }, + { ATF_NOFLAGS, 0, offsetof(struct PF_ContainerListItem, o_CU_UP_PM_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CUUPMeasurement_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "o-CU-UP-PM-Container" + }, +}; +static const ber_tlv_tag_t asn_DEF_PF_ContainerListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PF_ContainerListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* o-CU-UP-PM-Container */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1 = { + sizeof(struct PF_ContainerListItem), + offsetof(struct PF_ContainerListItem, _asn_ctx), + asn_MAP_PF_ContainerListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem = { + "PF-ContainerListItem", + "PF-ContainerListItem", + &asn_OP_SEQUENCE, + asn_DEF_PF_ContainerListItem_tags_1, + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + asn_DEF_PF_ContainerListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PF_ContainerListItem_tags_1) + /sizeof(asn_DEF_PF_ContainerListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PF_ContainerListItem_1, + 2, /* Elements count */ + &asn_SPC_PF_ContainerListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h new file mode 100644 index 0000000..bc4495e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PF-ContainerListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PF_ContainerListItem_H_ +#define _PF_ContainerListItem_H_ + + +#include + +/* Including external dependencies */ +#include "NI-Type.h" +#include "CUUPMeasurement-Container.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PF-ContainerListItem */ +typedef struct PF_ContainerListItem { + NI_Type_t interface_type; + CUUPMeasurement_Container_t o_CU_UP_PM_Container; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PF_ContainerListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PF_ContainerListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PF_ContainerListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PF_ContainerListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PF_ContainerListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..e3754f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..6835400 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c new file mode 100644 index 0000000..326ec75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PM-Containers-List.h" + +asn_TYPE_member_t asn_MBR_PM_Containers_List_1[] = { + { ATF_POINTER, 2, offsetof(struct PM_Containers_List, performanceContainer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PF_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "performanceContainer" + }, + { ATF_POINTER, 1, offsetof(struct PM_Containers_List, theRANContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAN_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "theRANContainer" + }, +}; +static const int asn_MAP_PM_Containers_List_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_PM_Containers_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PM_Containers_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* performanceContainer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* theRANContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1 = { + sizeof(struct PM_Containers_List), + offsetof(struct PM_Containers_List, _asn_ctx), + asn_MAP_PM_Containers_List_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PM_Containers_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PM_Containers_List = { + "PM-Containers-List", + "PM-Containers-List", + &asn_OP_SEQUENCE, + asn_DEF_PM_Containers_List_tags_1, + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + asn_DEF_PM_Containers_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PM_Containers_List_tags_1) + /sizeof(asn_DEF_PM_Containers_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PM_Containers_List_1, + 2, /* Elements count */ + &asn_SPC_PM_Containers_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h new file mode 100644 index 0000000..0a99c3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PM-Containers-List.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PM_Containers_List_H_ +#define _PM_Containers_List_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PF_Container; +struct RAN_Container; + +/* PM-Containers-List */ +typedef struct PM_Containers_List { + struct PF_Container *performanceContainer; /* OPTIONAL */ + struct RAN_Container *theRANContainer; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PM_Containers_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PM_Containers_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PM_Containers_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PM_Containers_List_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PF-Container.h" +#include "RAN-Container.h" + +#endif /* _PM_Containers_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c new file mode 100644 index 0000000..1c57dfd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItem.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dl_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ul_PRBUsage_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 100)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_dl_PRBUsage_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { 1, 1 } /* (0..100) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ul_PRBUsage_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItem, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItem, dl_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_dl_PRBUsage_constr_3, &asn_PER_memb_dl_PRBUsage_constr_3, memb_dl_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "dl-PRBUsage" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItem, ul_PRBUsage), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ul_PRBUsage_constr_4, &asn_PER_memb_ul_PRBUsage_constr_4, memb_ul_PRBUsage_constraint_1 }, + 0, 0, /* No default value */ + "ul-PRBUsage" + }, +}; +static const int asn_MAP_PerQCIReportListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-PRBUsage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ul-PRBUsage */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1 = { + sizeof(struct PerQCIReportListItem), + offsetof(struct PerQCIReportListItem, _asn_ctx), + asn_MAP_PerQCIReportListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem = { + "PerQCIReportListItem", + "PerQCIReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItem_tags_1, + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItem_tags_1) + /sizeof(asn_DEF_PerQCIReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItem_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h new file mode 100644 index 0000000..32508ea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItem_H_ +#define _PerQCIReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItem */ +typedef struct PerQCIReportListItem { + long qci; + long *dl_PRBUsage; /* OPTIONAL */ + long *ul_PRBUsage; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c new file mode 100644 index 0000000..239cbd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.c @@ -0,0 +1,183 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PerQCIReportListItemFormat.h" + +static int +memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pDCPBytesUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 10000000000)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_qci_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_qci_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesDL_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_pDCPBytesUL_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 34, -1, 0, 10000000000 } /* (0..10000000000,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PerQCIReportListItemFormat, qci), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_qci_constr_2, &asn_PER_memb_qci_constr_2, memb_qci_constraint_1 }, + 0, 0, /* No default value */ + "qci" + }, + { ATF_POINTER, 2, offsetof(struct PerQCIReportListItemFormat, pDCPBytesDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesDL_constr_3, &asn_PER_memb_pDCPBytesDL_constr_3, memb_pDCPBytesDL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesDL" + }, + { ATF_POINTER, 1, offsetof(struct PerQCIReportListItemFormat, pDCPBytesUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_INTEGER, + 0, + { &asn_OER_memb_pDCPBytesUL_constr_4, &asn_PER_memb_pDCPBytesUL_constr_4, memb_pDCPBytesUL_constraint_1 }, + 0, 0, /* No default value */ + "pDCPBytesUL" + }, +}; +static const int asn_MAP_PerQCIReportListItemFormat_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PerQCIReportListItemFormat_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PerQCIReportListItemFormat_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qci */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pDCPBytesDL */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* pDCPBytesUL */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1 = { + sizeof(struct PerQCIReportListItemFormat), + offsetof(struct PerQCIReportListItemFormat, _asn_ctx), + asn_MAP_PerQCIReportListItemFormat_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PerQCIReportListItemFormat_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat = { + "PerQCIReportListItemFormat", + "PerQCIReportListItemFormat", + &asn_OP_SEQUENCE, + asn_DEF_PerQCIReportListItemFormat_tags_1, + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + asn_DEF_PerQCIReportListItemFormat_tags_1, /* Same as above */ + sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1) + /sizeof(asn_DEF_PerQCIReportListItemFormat_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PerQCIReportListItemFormat_1, + 3, /* Elements count */ + &asn_SPC_PerQCIReportListItemFormat_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h new file mode 100644 index 0000000..7fb1ecf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PerQCIReportListItemFormat.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PerQCIReportListItemFormat_H_ +#define _PerQCIReportListItemFormat_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PerQCIReportListItemFormat */ +typedef struct PerQCIReportListItemFormat { + long qci; + INTEGER_t *pDCPBytesDL; /* OPTIONAL */ + INTEGER_t *pDCPBytesUL; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PerQCIReportListItemFormat_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PerQCIReportListItemFormat; +extern asn_SEQUENCE_specifics_t asn_SPC_PerQCIReportListItemFormat_specs_1; +extern asn_TYPE_member_t asn_MBR_PerQCIReportListItemFormat_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _PerQCIReportListItemFormat_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c new file mode 100644 index 0000000..2126cf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "PlmnID-List.h" + +asn_TYPE_member_t asn_MBR_PlmnID_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PlmnID_List, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct PlmnID_List, cu_UP_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct PlmnID_List, cu_UP_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_CUUP_PM_Format, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cu-UP-PM-EPC" + }, +}; +static const int asn_MAP_PlmnID_List_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_PlmnID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PlmnID_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cu-UP-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cu-UP-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1 = { + sizeof(struct PlmnID_List), + offsetof(struct PlmnID_List, _asn_ctx), + asn_MAP_PlmnID_List_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PlmnID_List_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_PlmnID_List = { + "PlmnID-List", + "PlmnID-List", + &asn_OP_SEQUENCE, + asn_DEF_PlmnID_List_tags_1, + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + asn_DEF_PlmnID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_PlmnID_List_tags_1) + /sizeof(asn_DEF_PlmnID_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_PlmnID_List_1, + 3, /* Elements count */ + &asn_SPC_PlmnID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h new file mode 100644 index 0000000..79d1dd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PlmnID-List.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _PlmnID_List_H_ +#define _PlmnID_List_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_CUUP_PM_Format; +struct EPC_CUUP_PM_Format; + +/* PlmnID-List */ +typedef struct PlmnID_List { + PLMN_Identity_t pLMN_Identity; + struct FGC_CUUP_PM_Format *cu_UP_PM_5GC; /* OPTIONAL */ + struct EPC_CUUP_PM_Format *cu_UP_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PlmnID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PlmnID_List; +extern asn_SEQUENCE_specifics_t asn_SPC_PlmnID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_PlmnID_List_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-CUUP-PM-Format.h" +#include "EPC-CUUP-PM-Format.h" + +#endif /* _PlmnID_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c new file mode 100644 index 0000000..4f55ae3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h new file mode 100644 index 0000000..8f93430 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Presence.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c new file mode 100644 index 0000000..8fc3939 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ASN.1:1984 (X.409) + */ +static const int _PrintableString_alphabet[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int _PrintableString_code2value[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122}; + +/* + * PrintableString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)), /* [UNIVERSAL 19] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_PrintableString_v2c(unsigned int value) { + return _PrintableString_alphabet[value > 255 ? 0 : value] - 1; +} +static int asn_DEF_PrintableString_c2v(unsigned int code) { + if(code < 74) + return _PrintableString_code2value[code]; + return -1; +} +static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_PrintableString_v2c, + asn_DEF_PrintableString_c2v +}; +asn_TYPE_operation_t asn_OP_PrintableString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_PrintableString = { + "PrintableString", + "PrintableString", + &asn_OP_PrintableString, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]) - 1, + asn_DEF_PrintableString_tags, + sizeof(asn_DEF_PrintableString_tags) + / sizeof(asn_DEF_PrintableString_tags[0]), + { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +int +PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the PrintableString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + if(!_PrintableString_alphabet[*buf]) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in PrintableString alphabet " + "(%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h new file mode 100644 index 0000000..8c2b61a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/PrintableString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PrintableString_H_ +#define _PrintableString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t PrintableString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_PrintableString; +extern asn_TYPE_operation_t asn_OP_PrintableString; + +asn_constr_check_f PrintableString_constraint; + +#define PrintableString_free OCTET_STRING_free +#define PrintableString_print OCTET_STRING_print_utf8 +#define PrintableString_compare OCTET_STRING_compare +#define PrintableString_decode_ber OCTET_STRING_decode_ber +#define PrintableString_encode_der OCTET_STRING_encode_der +#define PrintableString_decode_xer OCTET_STRING_decode_xer_utf8 +#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8 +#define PrintableString_decode_uper OCTET_STRING_decode_uper +#define PrintableString_encode_uper OCTET_STRING_encode_uper +#define PrintableString_decode_aper OCTET_STRING_decode_aper +#define PrintableString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _PrintableString_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..0e488d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..a2e8fe8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProcedureCode.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4046387 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,810 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..5034a64 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c9d5808 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..3376410 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..ad1c8b8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..5b730c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..f77445b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..1837ac8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..af5597c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7190 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { 0, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { 0, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { 0, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { 0, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { 0, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { 0, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { 0, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { 0, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { 0, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { 0, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { 0, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { 0, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..573edcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..9c7e653 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..8193bd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..9afe610 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..f6d2261 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..c516962 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..b17c298 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c new file mode 100644 index 0000000..373508b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.c @@ -0,0 +1,127 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RAN-Container.h" + +static asn_oer_constraints_t asn_OER_type_reportContainer_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_reportContainer_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportContainer_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oDU_UE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DU_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oDU-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_CP_UE), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_CP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-CP-UE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container__reportContainer, choice.oCU_UP_UE), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CU_UP_Usage_Report_Per_UE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "oCU-UP-UE" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_reportContainer_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oDU-UE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oCU-CP-UE */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* oCU-UP-UE */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportContainer_specs_3 = { + sizeof(struct RAN_Container__reportContainer), + offsetof(struct RAN_Container__reportContainer, _asn_ctx), + offsetof(struct RAN_Container__reportContainer, present), + sizeof(((struct RAN_Container__reportContainer *)0)->present), + asn_MAP_reportContainer_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportContainer_3 = { + "reportContainer", + "reportContainer", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_reportContainer_constr_3, &asn_PER_type_reportContainer_constr_3, CHOICE_constraint }, + asn_MBR_reportContainer_3, + 3, /* Elements count */ + &asn_SPC_reportContainer_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RAN_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, timestamp), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Timestamp, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "timestamp" + }, + { ATF_NOFLAGS, 0, offsetof(struct RAN_Container, reportContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportContainer_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "reportContainer" + }, +}; +static const ber_tlv_tag_t asn_DEF_RAN_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RAN_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportContainer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1 = { + sizeof(struct RAN_Container), + offsetof(struct RAN_Container, _asn_ctx), + asn_MAP_RAN_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RAN_Container = { + "RAN-Container", + "RAN-Container", + &asn_OP_SEQUENCE, + asn_DEF_RAN_Container_tags_1, + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + asn_DEF_RAN_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_RAN_Container_tags_1) + /sizeof(asn_DEF_RAN_Container_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RAN_Container_1, + 2, /* Elements count */ + &asn_SPC_RAN_Container_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h new file mode 100644 index 0000000..8184460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RAN-Container.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RAN_Container_H_ +#define _RAN_Container_H_ + + +#include + +/* Including external dependencies */ +#include "Timestamp.h" +#include "DU-Usage-Report-Per-UE.h" +#include "CU-CP-Usage-Report-Per-UE.h" +#include "CU-UP-Usage-Report-Per-UE.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAN_Container__reportContainer_PR { + RAN_Container__reportContainer_PR_NOTHING, /* No components present */ + RAN_Container__reportContainer_PR_oDU_UE, + RAN_Container__reportContainer_PR_oCU_CP_UE, + RAN_Container__reportContainer_PR_oCU_UP_UE + /* Extensions may appear below */ + +} RAN_Container__reportContainer_PR; + +/* RAN-Container */ +typedef struct RAN_Container { + Timestamp_t timestamp; + struct RAN_Container__reportContainer { + RAN_Container__reportContainer_PR present; + union RAN_Container__reportContainer_u { + DU_Usage_Report_Per_UE_t oDU_UE; + CU_CP_Usage_Report_Per_UE_t oCU_CP_UE; + CU_UP_Usage_Report_Per_UE_t oCU_UP_UE; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportContainer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RAN_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAN_Container; +extern asn_SEQUENCE_specifics_t asn_SPC_RAN_Container_specs_1; +extern asn_TYPE_member_t asn_MBR_RAN_Container_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAN_Container_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c new file mode 100644 index 0000000..4cd1b70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANcallProcess-ID-string.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RANcallProcess_ID_string_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RANcallProcess_ID_string_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RANcallProcess_ID_string_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_type_RANcallProcess_ID_string_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RANcallProcess_ID_string_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RANcallProcess_ID_string_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANcallProcess_ID_string_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string = { + "RANcallProcess-ID-string", + "RANcallProcess-ID-string", + &asn_OP_PrintableString, + asn_DEF_RANcallProcess_ID_string_tags_1, + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + asn_DEF_RANcallProcess_ID_string_tags_1, /* Same as above */ + sizeof(asn_DEF_RANcallProcess_ID_string_tags_1) + /sizeof(asn_DEF_RANcallProcess_ID_string_tags_1[0]), /* 1 */ + { &asn_OER_type_RANcallProcess_ID_string_constr_1, &asn_PER_type_RANcallProcess_ID_string_constr_1, RANcallProcess_ID_string_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h new file mode 100644 index 0000000..087cdc0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANcallProcess-ID-string.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANcallProcess_ID_string_H_ +#define _RANcallProcess_ID_string_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANcallProcess-ID-string */ +typedef PrintableString_t RANcallProcess_ID_string_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANcallProcess_ID_string; +asn_struct_free_f RANcallProcess_ID_string_free; +asn_struct_print_f RANcallProcess_ID_string_print; +asn_constr_check_f RANcallProcess_ID_string_constraint; +ber_type_decoder_f RANcallProcess_ID_string_decode_ber; +der_type_encoder_f RANcallProcess_ID_string_encode_der; +xer_type_decoder_f RANcallProcess_ID_string_decode_xer; +xer_type_encoder_f RANcallProcess_ID_string_encode_xer; +oer_type_decoder_f RANcallProcess_ID_string_decode_oer; +oer_type_encoder_f RANcallProcess_ID_string_encode_oer; +per_type_decoder_f RANcallProcess_ID_string_decode_uper; +per_type_encoder_f RANcallProcess_ID_string_encode_uper; +per_type_decoder_f RANcallProcess_ID_string_decode_aper; +per_type_encoder_f RANcallProcess_ID_string_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANcallProcess_ID_string_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..f1554d0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..e7fd073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c new file mode 100644 index 0000000..72a90a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.c @@ -0,0 +1,316 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RANfunction-Name.h" + +static const int permitted_alphabet_table_2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_2[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_2(const void *sptr) { + const int *table = permitted_alphabet_table_2; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_ranFunction_ShortName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_2(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_ShortName_2_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_2)/sizeof(permitted_alphabet_table_2[0])) + return -1; + return permitted_alphabet_table_2[value] - 1; +} +static int asn_PER_MAP_ranFunction_ShortName_2_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_2)/sizeof(permitted_alphabet_code2value_2[0])) + return -1; + return permitted_alphabet_code2value_2[code]; +} +static int +memb_ranFunction_E2SM_OID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 1000) + && !check_permitted_alphabet_3(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_E2SM_OID_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_ranFunction_E2SM_OID_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} +static int +memb_ranFunction_Description_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_4(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_ranFunction_Description_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} +static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, + asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_ranFunction_Description_4_v2c, /* Value to PER code map */ + asn_PER_MAP_ranFunction_Description_4_c2v /* PER code to value map */ +}; +asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_ShortName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-ShortName" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_E2SM_OID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-E2SM-OID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Name, ranFunction_Description), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + 0, 0, /* No default value */ + "ranFunction-Description" + }, + { ATF_POINTER, 1, offsetof(struct RANfunction_Name, ranFunction_Instance), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunction-Instance" + }, +}; +static const int asn_MAP_RANfunction_Name_oms_1[] = { 3 }; +static const ber_tlv_tag_t asn_DEF_RANfunction_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Name_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-ShortName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunction-E2SM-OID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ranFunction-Description */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ranFunction-Instance */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1 = { + sizeof(struct RANfunction_Name), + offsetof(struct RANfunction_Name, _asn_ctx), + asn_MAP_RANfunction_Name_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RANfunction_Name_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Name = { + "RANfunction-Name", + "RANfunction-Name", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Name_tags_1, + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Name_tags_1) + /sizeof(asn_DEF_RANfunction_Name_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Name_1, + 4, /* Elements count */ + &asn_SPC_RANfunction_Name_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h new file mode 100644 index 0000000..0fe182b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunction-Name.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RANfunction_Name_H_ +#define _RANfunction_Name_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Name */ +typedef struct RANfunction_Name { + PrintableString_t ranFunction_ShortName; + PrintableString_t ranFunction_E2SM_OID; + PrintableString_t ranFunction_Description; + long *ranFunction_Instance; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Name_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Name; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Name_specs_1; +extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..3d8697d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..4e54dde --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..7661a88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..9b3be69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..fc95705 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..f0a61a0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..985330a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..033ed53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a0b271b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..58ec9ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionRevision.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..f55d0a1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..9e45736 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..c52b90c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..b8bd23c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..fb5c08d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..386c289 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c new file mode 100644 index 0000000..246322a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-EventTriggerStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_List, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_List), + offsetof(struct RIC_EventTriggerStyle_List, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_List_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List = { + "RIC-EventTriggerStyle-List", + "RIC-EventTriggerStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_List_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_List_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h new file mode 100644 index 0000000..18a6a8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-EventTriggerStyle-List.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_EventTriggerStyle_List_H_ +#define _RIC_EventTriggerStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-List */ +typedef struct RIC_EventTriggerStyle_List { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_List_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c new file mode 100644 index 0000000..53f0624 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Format-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Format_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type = { + "RIC-Format-Type", + "RIC-Format-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Format_Type_tags_1, + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Format_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Format_Type_tags_1) + /sizeof(asn_DEF_RIC_Format_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h new file mode 100644 index 0000000..81cec85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Format-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Format_Type_H_ +#define _RIC_Format_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Format-Type */ +typedef long RIC_Format_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Format_Type; +asn_struct_free_f RIC_Format_Type_free; +asn_struct_print_f RIC_Format_Type_print; +asn_constr_check_f RIC_Format_Type_constraint; +ber_type_decoder_f RIC_Format_Type_decode_ber; +der_type_encoder_f RIC_Format_Type_encode_der; +xer_type_decoder_f RIC_Format_Type_decode_xer; +xer_type_encoder_f RIC_Format_Type_encode_xer; +oer_type_decoder_f RIC_Format_Type_decode_oer; +oer_type_encoder_f RIC_Format_Type_encode_oer; +per_type_decoder_f RIC_Format_Type_decode_uper; +per_type_encoder_f RIC_Format_Type_encode_uper; +per_type_decoder_f RIC_Format_Type_decode_aper; +per_type_encoder_f RIC_Format_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Format_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c new file mode 100644 index 0000000..93d4a15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-ReportStyle-List.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_List, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_List_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1 = { + sizeof(struct RIC_ReportStyle_List), + offsetof(struct RIC_ReportStyle_List, _asn_ctx), + asn_MAP_RIC_ReportStyle_List_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List = { + "RIC-ReportStyle-List", + "RIC-ReportStyle-List", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_List_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_List_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_List_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_List_1, + 4, /* Elements count */ + &asn_SPC_RIC_ReportStyle_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h new file mode 100644 index 0000000..af886aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-ReportStyle-List.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_ReportStyle_List_H_ +#define _RIC_ReportStyle_List_H_ + + +#include + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-List */ +typedef struct RIC_ReportStyle_List { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_List; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_List_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_List_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c new file mode 100644 index 0000000..2c4a054 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.c @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Name.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +RIC_Style_Name_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int asn_PER_MAP_RIC_Style_Name_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_RIC_Style_Name_1_v2c, /* Value to PER code map */ + asn_PER_MAP_RIC_Style_Name_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_RIC_Style_Name_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { + "RIC-Style-Name", + "RIC-Style-Name", + &asn_OP_PrintableString, + asn_DEF_RIC_Style_Name_tags_1, + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Name_tags_1) + /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ + { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h new file mode 100644 index 0000000..bb02b2c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Name.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Name_H_ +#define _RIC_Style_Name_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Name */ +typedef PrintableString_t RIC_Style_Name_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name; +asn_struct_free_f RIC_Style_Name_free; +asn_struct_print_f RIC_Style_Name_print; +asn_constr_check_f RIC_Style_Name_constraint; +ber_type_decoder_f RIC_Style_Name_decode_ber; +der_type_encoder_f RIC_Style_Name_encode_der; +xer_type_decoder_f RIC_Style_Name_decode_xer; +xer_type_encoder_f RIC_Style_Name_encode_xer; +oer_type_decoder_f RIC_Style_Name_decode_oer; +oer_type_encoder_f RIC_Style_Name_encode_oer; +per_type_decoder_f RIC_Style_Name_decode_uper; +per_type_encoder_f RIC_Style_Name_encode_uper; +per_type_decoder_f RIC_Style_Name_decode_aper; +per_type_encoder_f RIC_Style_Name_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Name_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c new file mode 100644 index 0000000..5324c4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RIC-Style-Type.h" + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RIC_Style_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type = { + "RIC-Style-Type", + "RIC-Style-Type", + &asn_OP_NativeInteger, + asn_DEF_RIC_Style_Type_tags_1, + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + asn_DEF_RIC_Style_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_Style_Type_tags_1) + /sizeof(asn_DEF_RIC_Style_Type_tags_1[0]), /* 1 */ + { 0, 0, NativeInteger_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h new file mode 100644 index 0000000..9948bb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RIC-Style-Type.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RIC_Style_Type_H_ +#define _RIC_Style_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-Style-Type */ +typedef long RIC_Style_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_Style_Type; +asn_struct_free_f RIC_Style_Type_free; +asn_struct_print_f RIC_Style_Type_print; +asn_constr_check_f RIC_Style_Type_constraint; +ber_type_decoder_f RIC_Style_Type_decode_ber; +der_type_encoder_f RIC_Style_Type_encode_der; +xer_type_decoder_f RIC_Style_Type_decode_xer; +xer_type_encoder_f RIC_Style_Type_encode_xer; +oer_type_decoder_f RIC_Style_Type_decode_oer; +oer_type_encoder_f RIC_Style_Type_encode_oer; +per_type_decoder_f RIC_Style_Type_decode_uper; +per_type_encoder_f RIC_Style_Type_encode_uper; +per_type_decoder_f RIC_Style_Type_decode_aper; +per_type_encoder_f RIC_Style_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_Style_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..0b566bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..d7f13c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..692fd38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..8eaf217 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..515679d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..48645e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..51f45f4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..95bbadf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..2e8bc94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..c3f5d07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..dd1d941 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..e1eeca6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c new file mode 100644 index 0000000..ecd1ea7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h new file mode 100644 index 0000000..b21d3a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c new file mode 100644 index 0000000..69f2101 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h new file mode 100644 index 0000000..b51809c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactionType.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..c1445fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..7acfeb4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..a7d682f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..d388b85 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcallProcessID.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..d69a24c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..73f9da7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..eb3d6d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..63dbb73 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..044706c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..919f11c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..2b0400b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..f26977c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..f3df4b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..5cc6cc3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..c40874d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..94481fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..2b54af3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..f35e61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..8dc0c58 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..627ebaa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICcontrolStatus.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..4c892e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..f323980 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c new file mode 100644 index 0000000..be2a72a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h new file mode 100644 index 0000000..8a8173d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..31e2f7f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..0d1448d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationHeader.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..096f61d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..97ce63e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationMessage.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..74782d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..30d8c55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationSN.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c new file mode 100644 index 0000000..81beabe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h new file mode 100644 index 0000000..ae14d7a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICindicationType.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dfe67b5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h new file mode 100644 index 0000000..24636d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..a2c83c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..7db0a4f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..8ec4465 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..f9353cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..fe21337 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..ec27597 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..61334b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..71e1e62 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..04b54c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..1560efb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..4ff78c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..f25c782 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..70a20c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..9b93735 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..39475fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..cd5b0f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..f0a7a43 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..fb43397 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..d6ed804 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..836322b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..64e2e45 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..1008fb1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..dae24c8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..c622986 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..18f61c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..159b5e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..6bd2096 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RICtimeToWait.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c new file mode 100644 index 0000000..5f99297 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "RT-Period-IE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RT_Period_IE_value2enum_1[] = { + { 0, 4, "ms10" }, + { 1, 4, "ms20" }, + { 2, 4, "ms32" }, + { 3, 4, "ms40" }, + { 4, 4, "ms60" }, + { 5, 4, "ms64" }, + { 6, 4, "ms70" }, + { 7, 4, "ms80" }, + { 8, 5, "ms128" }, + { 9, 5, "ms160" }, + { 10, 5, "ms256" }, + { 11, 5, "ms320" }, + { 12, 5, "ms512" }, + { 13, 5, "ms640" }, + { 14, 6, "ms1024" }, + { 15, 6, "ms1280" }, + { 16, 6, "ms2048" }, + { 17, 6, "ms2560" }, + { 18, 6, "ms5120" }, + { 19, 7, "ms10240" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RT_Period_IE_enum2value_1[] = { + 0, /* ms10(0) */ + 14, /* ms1024(14) */ + 19, /* ms10240(19) */ + 8, /* ms128(8) */ + 15, /* ms1280(15) */ + 9, /* ms160(9) */ + 1, /* ms20(1) */ + 16, /* ms2048(16) */ + 10, /* ms256(10) */ + 17, /* ms2560(17) */ + 2, /* ms32(2) */ + 11, /* ms320(11) */ + 3, /* ms40(3) */ + 12, /* ms512(12) */ + 18, /* ms5120(18) */ + 4, /* ms60(4) */ + 5, /* ms64(5) */ + 13, /* ms640(13) */ + 6, /* ms70(6) */ + 7 /* ms80(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1 = { + asn_MAP_RT_Period_IE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RT_Period_IE_enum2value_1, /* N => "tag"; sorted by N */ + 20, /* Number of elements in the maps */ + 21, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RT_Period_IE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RT_Period_IE = { + "RT-Period-IE", + "RT-Period-IE", + &asn_OP_NativeEnumerated, + asn_DEF_RT_Period_IE_tags_1, + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + asn_DEF_RT_Period_IE_tags_1, /* Same as above */ + sizeof(asn_DEF_RT_Period_IE_tags_1) + /sizeof(asn_DEF_RT_Period_IE_tags_1[0]), /* 1 */ + { &asn_OER_type_RT_Period_IE_constr_1, &asn_PER_type_RT_Period_IE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RT_Period_IE_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h new file mode 100644 index 0000000..30d2843 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/RT-Period-IE.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _RT_Period_IE_H_ +#define _RT_Period_IE_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RT_Period_IE { + RT_Period_IE_ms10 = 0, + RT_Period_IE_ms20 = 1, + RT_Period_IE_ms32 = 2, + RT_Period_IE_ms40 = 3, + RT_Period_IE_ms60 = 4, + RT_Period_IE_ms64 = 5, + RT_Period_IE_ms70 = 6, + RT_Period_IE_ms80 = 7, + RT_Period_IE_ms128 = 8, + RT_Period_IE_ms160 = 9, + RT_Period_IE_ms256 = 10, + RT_Period_IE_ms320 = 11, + RT_Period_IE_ms512 = 12, + RT_Period_IE_ms640 = 13, + RT_Period_IE_ms1024 = 14, + RT_Period_IE_ms1280 = 15, + RT_Period_IE_ms2048 = 16, + RT_Period_IE_ms2560 = 17, + RT_Period_IE_ms5120 = 18, + RT_Period_IE_ms10240 = 19 + /* + * Enumeration is extensible + */ +} e_RT_Period_IE; + +/* RT-Period-IE */ +typedef long RT_Period_IE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RT_Period_IE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RT_Period_IE; +extern const asn_INTEGER_specifics_t asn_SPC_RT_Period_IE_specs_1; +asn_struct_free_f RT_Period_IE_free; +asn_struct_print_f RT_Period_IE_print; +asn_constr_check_f RT_Period_IE_constraint; +ber_type_decoder_f RT_Period_IE_decode_ber; +der_type_encoder_f RT_Period_IE_encode_der; +xer_type_decoder_f RT_Period_IE_decode_xer; +xer_type_encoder_f RT_Period_IE_encode_xer; +oer_type_decoder_f RT_Period_IE_decode_oer; +oer_type_encoder_f RT_Period_IE_encode_oer; +per_type_decoder_f RT_Period_IE_decode_uper; +per_type_encoder_f RT_Period_IE_encode_uper; +per_type_decoder_f RT_Period_IE_decode_aper; +per_type_encoder_f RT_Period_IE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RT_Period_IE_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c new file mode 100644 index 0000000..3f96a6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h new file mode 100644 index 0000000..e7f6ec8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c new file mode 100644 index 0000000..c8afcc4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h new file mode 100644 index 0000000..08a576e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c new file mode 100644 index 0000000..39afcad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SNSSAI.h" + +static int +memb_sST_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sD_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_sST_constr_2 CC_NOTUSED = { + { 0, 0 }, + 1 /* (SIZE(1..1)) */}; +static asn_per_constraints_t asn_PER_memb_sST_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_sD_constr_3 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +static asn_per_constraints_t asn_PER_memb_sD_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SNSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SNSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sST_constr_2, &asn_PER_memb_sST_constr_2, memb_sST_constraint_1 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct SNSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_sD_constr_3, &asn_PER_memb_sD_constr_3, memb_sD_constraint_1 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_SNSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_SNSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SNSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1 = { + sizeof(struct SNSSAI), + offsetof(struct SNSSAI, _asn_ctx), + asn_MAP_SNSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SNSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SNSSAI = { + "SNSSAI", + "SNSSAI", + &asn_OP_SEQUENCE, + asn_DEF_SNSSAI_tags_1, + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + asn_DEF_SNSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_SNSSAI_tags_1) + /sizeof(asn_DEF_SNSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SNSSAI_1, + 2, /* Elements count */ + &asn_SPC_SNSSAI_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h new file mode 100644 index 0000000..b854e6f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SNSSAI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SNSSAI_H_ +#define _SNSSAI_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNSSAI */ +typedef struct SNSSAI { + OCTET_STRING_t sST; + OCTET_STRING_t *sD; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SNSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SNSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_SNSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_SNSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SNSSAI_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c new file mode 100644 index 0000000..52fbaf5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "ServedPlmnPerCellListItem.h" + +asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServedPlmnPerCellListItem, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_POINTER, 2, offsetof(struct ServedPlmnPerCellListItem, du_PM_5GC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FGC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-5GC" + }, + { ATF_POINTER, 1, offsetof(struct ServedPlmnPerCellListItem, du_PM_EPC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EPC_DU_PM_Container, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "du-PM-EPC" + }, +}; +static const int asn_MAP_ServedPlmnPerCellListItem_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_ServedPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ServedPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* du-PM-5GC */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* du-PM-EPC */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1 = { + sizeof(struct ServedPlmnPerCellListItem), + offsetof(struct ServedPlmnPerCellListItem, _asn_ctx), + asn_MAP_ServedPlmnPerCellListItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ServedPlmnPerCellListItem_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem = { + "ServedPlmnPerCellListItem", + "ServedPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_ServedPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_ServedPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_ServedPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ServedPlmnPerCellListItem_1, + 3, /* Elements count */ + &asn_SPC_ServedPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h new file mode 100644 index 0000000..be5ecd6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ServedPlmnPerCellListItem.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _ServedPlmnPerCellListItem_H_ +#define _ServedPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FGC_DU_PM_Container; +struct EPC_DU_PM_Container; + +/* ServedPlmnPerCellListItem */ +typedef struct ServedPlmnPerCellListItem { + PLMN_Identity_t pLMN_Identity; + struct FGC_DU_PM_Container *du_PM_5GC; /* OPTIONAL */ + struct EPC_DU_PM_Container *du_PM_EPC; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServedPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServedPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_ServedPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_ServedPlmnPerCellListItem_1[3]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FGC-DU-PM-Container.h" +#include "EPC-DU-PM-Container.h" + +#endif /* _ServedPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c new file mode 100644 index 0000000..a463803 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SlicePerPlmnPerCellListItem.h" + +static int +memb_fQIPERSlicesPerPlmnPerCellList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnPerCellList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnPerCellListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 = { + sizeof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList), + offsetof(struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnPerCellList_3 = { + "fQIPERSlicesPerPlmnPerCellList", + "fQIPERSlicesPerPlmnPerCellList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnPerCellList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnPerCellList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnPerCellList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnPerCellList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SlicePerPlmnPerCellListItem, fQIPERSlicesPerPlmnPerCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnPerCellList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnPerCellList_constr_3, memb_fQIPERSlicesPerPlmnPerCellList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnPerCellList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SlicePerPlmnPerCellListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnPerCellList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1 = { + sizeof(struct SlicePerPlmnPerCellListItem), + offsetof(struct SlicePerPlmnPerCellListItem, _asn_ctx), + asn_MAP_SlicePerPlmnPerCellListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem = { + "SlicePerPlmnPerCellListItem", + "SlicePerPlmnPerCellListItem", + &asn_OP_SEQUENCE, + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + asn_DEF_SlicePerPlmnPerCellListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1) + /sizeof(asn_DEF_SlicePerPlmnPerCellListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SlicePerPlmnPerCellListItem_1, + 2, /* Elements count */ + &asn_SPC_SlicePerPlmnPerCellListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h new file mode 100644 index 0000000..1d704d5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SlicePerPlmnPerCellListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SlicePerPlmnPerCellListItem_H_ +#define _SlicePerPlmnPerCellListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnPerCellListItem; + +/* SlicePerPlmnPerCellListItem */ +typedef struct SlicePerPlmnPerCellListItem { + SNSSAI_t sliceID; + struct SlicePerPlmnPerCellListItem__fQIPERSlicesPerPlmnPerCellList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnPerCellListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnPerCellList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SlicePerPlmnPerCellListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SlicePerPlmnPerCellListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SlicePerPlmnPerCellListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SlicePerPlmnPerCellListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnPerCellListItem.h" + +#endif /* _SlicePerPlmnPerCellListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c new file mode 100644 index 0000000..ae32ba9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.c @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "SliceToReportListItem.h" + +static int +memb_fQIPERSlicesPerPlmnList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 64)) { + /* Perform validation of the inner elements */ + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_type_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..64)) */}; +static asn_per_constraints_t asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_fQIPERSlicesPerPlmnList_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FQIPERSlicesPerPlmnListItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_fQIPERSlicesPerPlmnList_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_fQIPERSlicesPerPlmnList_specs_3 = { + sizeof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList), + offsetof(struct SliceToReportListItem__fQIPERSlicesPerPlmnList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fQIPERSlicesPerPlmnList_3 = { + "fQIPERSlicesPerPlmnList", + "fQIPERSlicesPerPlmnList", + &asn_OP_SEQUENCE_OF, + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]) - 1, /* 1 */ + asn_DEF_fQIPERSlicesPerPlmnList_tags_3, /* Same as above */ + sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3) + /sizeof(asn_DEF_fQIPERSlicesPerPlmnList_tags_3[0]), /* 2 */ + { &asn_OER_type_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_type_fQIPERSlicesPerPlmnList_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_fQIPERSlicesPerPlmnList_3, + 1, /* Single element */ + &asn_SPC_fQIPERSlicesPerPlmnList_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, sliceID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SNSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_NOFLAGS, 0, offsetof(struct SliceToReportListItem, fQIPERSlicesPerPlmnList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_fQIPERSlicesPerPlmnList_3, + 0, + { &asn_OER_memb_fQIPERSlicesPerPlmnList_constr_3, &asn_PER_memb_fQIPERSlicesPerPlmnList_constr_3, memb_fQIPERSlicesPerPlmnList_constraint_1 }, + 0, 0, /* No default value */ + "fQIPERSlicesPerPlmnList" + }, +}; +static const ber_tlv_tag_t asn_DEF_SliceToReportListItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SliceToReportListItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQIPERSlicesPerPlmnList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1 = { + sizeof(struct SliceToReportListItem), + offsetof(struct SliceToReportListItem, _asn_ctx), + asn_MAP_SliceToReportListItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem = { + "SliceToReportListItem", + "SliceToReportListItem", + &asn_OP_SEQUENCE, + asn_DEF_SliceToReportListItem_tags_1, + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + asn_DEF_SliceToReportListItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SliceToReportListItem_tags_1) + /sizeof(asn_DEF_SliceToReportListItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SliceToReportListItem_1, + 2, /* Elements count */ + &asn_SPC_SliceToReportListItem_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h new file mode 100644 index 0000000..c25b20a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SliceToReportListItem.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _SliceToReportListItem_H_ +#define _SliceToReportListItem_H_ + + +#include + +/* Including external dependencies */ +#include "SNSSAI.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FQIPERSlicesPerPlmnListItem; + +/* SliceToReportListItem */ +typedef struct SliceToReportListItem { + SNSSAI_t sliceID; + struct SliceToReportListItem__fQIPERSlicesPerPlmnList { + A_SEQUENCE_OF(struct FQIPERSlicesPerPlmnListItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } fQIPERSlicesPerPlmnList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SliceToReportListItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SliceToReportListItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SliceToReportListItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SliceToReportListItem_1[2]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FQIPERSlicesPerPlmnListItem.h" + +#endif /* _SliceToReportListItem_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..55bad07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..fd04d94 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c new file mode 100644 index 0000000..c4eec34 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h new file mode 100644 index 0000000..6fad8ee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TimeToWait.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c new file mode 100644 index 0000000..4087751 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Timestamp.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_Timestamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Timestamp = { + "Timestamp", + "Timestamp", + &asn_OP_OCTET_STRING, + asn_DEF_Timestamp_tags_1, + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + asn_DEF_Timestamp_tags_1, /* Same as above */ + sizeof(asn_DEF_Timestamp_tags_1) + /sizeof(asn_DEF_Timestamp_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h new file mode 100644 index 0000000..f77ac4a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Timestamp.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Timestamp_H_ +#define _Timestamp_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timestamp */ +typedef OCTET_STRING_t Timestamp_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Timestamp; +asn_struct_free_f Timestamp_free; +asn_struct_print_f Timestamp_print; +asn_constr_check_f Timestamp_constraint; +ber_type_decoder_f Timestamp_decode_ber; +der_type_encoder_f Timestamp_encode_der; +xer_type_decoder_f Timestamp_decode_xer; +xer_type_encoder_f Timestamp_encode_xer; +oer_type_decoder_f Timestamp_decode_oer; +oer_type_encoder_f Timestamp_encode_oer; +per_type_decoder_f Timestamp_decode_uper; +per_type_encoder_f Timestamp_encode_uper; +per_type_decoder_f Timestamp_decode_aper; +per_type_encoder_f Timestamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Timestamp_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c new file mode 100644 index 0000000..069fd1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "Trigger-ConditionIE-Item.h" + +asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Trigger_ConditionIE_Item, report_Period_IE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RT_Period_IE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "report-Period-IE" + }, +}; +static const ber_tlv_tag_t asn_DEF_Trigger_ConditionIE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Trigger_ConditionIE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* report-Period-IE */ +}; +asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1 = { + sizeof(struct Trigger_ConditionIE_Item), + offsetof(struct Trigger_ConditionIE_Item, _asn_ctx), + asn_MAP_Trigger_ConditionIE_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item = { + "Trigger-ConditionIE-Item", + "Trigger-ConditionIE-Item", + &asn_OP_SEQUENCE, + asn_DEF_Trigger_ConditionIE_Item_tags_1, + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + asn_DEF_Trigger_ConditionIE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1) + /sizeof(asn_DEF_Trigger_ConditionIE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Trigger_ConditionIE_Item_1, + 1, /* Elements count */ + &asn_SPC_Trigger_ConditionIE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h new file mode 100644 index 0000000..173b46a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/Trigger-ConditionIE-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _Trigger_ConditionIE_Item_H_ +#define _Trigger_ConditionIE_Item_H_ + + +#include + +/* Including external dependencies */ +#include "RT-Period-IE.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trigger-ConditionIE-Item */ +typedef struct Trigger_ConditionIE_Item { + RT_Period_IE_t report_Period_IE; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Trigger_ConditionIE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Trigger_ConditionIE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_Trigger_ConditionIE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_Trigger_ConditionIE_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _Trigger_ConditionIE_Item_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..45dcd5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..734cefa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TriggeringMessage.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c new file mode 100644 index 0000000..76beba5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h new file mode 100644 index 0000000..9451b1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/TypeOfError.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c new file mode 100644 index 0000000..1966c27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#include "UE-Report-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_UE_Report_Type_value2enum_1[] = { + { 0, 17, "oDU-Report-Per-UE" }, + { 1, 20, "oCU-CP-Report-Per-UE" }, + { 2, 20, "oCU-UP-Report-Per-UE" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_UE_Report_Type_enum2value_1[] = { + 1, /* oCU-CP-Report-Per-UE(1) */ + 2, /* oCU-UP-Report-Per-UE(2) */ + 0 /* oDU-Report-Per-UE(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1 = { + asn_MAP_UE_Report_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UE_Report_Type_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_UE_Report_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UE_Report_Type = { + "UE-Report-Type", + "UE-Report-Type", + &asn_OP_NativeEnumerated, + asn_DEF_UE_Report_Type_tags_1, + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + asn_DEF_UE_Report_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_Report_Type_tags_1) + /sizeof(asn_DEF_UE_Report_Type_tags_1[0]), /* 1 */ + { &asn_OER_type_UE_Report_Type_constr_1, &asn_PER_type_UE_Report_Type_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UE_Report_Type_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h new file mode 100644 index 0000000..02e7cb5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UE-Report-Type.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "/home/rshacham/e2sm-kpm-v01.02.asn" + * `asn1c -fcompound-names` + */ + +#ifndef _UE_Report_Type_H_ +#define _UE_Report_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_Report_Type { + UE_Report_Type_oDU_Report_Per_UE = 0, + UE_Report_Type_oCU_CP_Report_Per_UE = 1, + UE_Report_Type_oCU_UP_Report_Per_UE = 2 + /* + * Enumeration is extensible + */ +} e_UE_Report_Type; + +/* UE-Report-Type */ +typedef long UE_Report_Type_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_UE_Report_Type_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_UE_Report_Type; +extern const asn_INTEGER_specifics_t asn_SPC_UE_Report_Type_specs_1; +asn_struct_free_f UE_Report_Type_free; +asn_struct_print_f UE_Report_Type_print; +asn_constr_check_f UE_Report_Type_constraint; +ber_type_decoder_f UE_Report_Type_decode_ber; +der_type_encoder_f UE_Report_Type_encode_der; +xer_type_decoder_f UE_Report_Type_decode_xer; +xer_type_encoder_f UE_Report_Type_encode_xer; +oer_type_decoder_f UE_Report_Type_decode_oer; +oer_type_encoder_f UE_Report_Type_encode_oer; +per_type_decoder_f UE_Report_Type_decode_uper; +per_type_encoder_f UE_Report_Type_encode_uper; +per_type_decoder_f UE_Report_Type_decode_aper; +per_type_encoder_f UE_Report_Type_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_Report_Type_H_ */ +#include diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..327134e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,349 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { 0, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { 0, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..7762209 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/home/rshacham/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h new file mode 100644 index 0000000..af5a0fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_constant.h @@ -0,0 +1,30 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#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) +#define maxofRANparamters (65536) +#define maxUeReport (32) +#define maxCellingNB (16384) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk new file mode 100644 index 0000000..0109476 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + converter-example.c\ + pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names /home/rshacham/e2sm-kpm-v01.02.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c new file mode 100644 index 0000000..0d559a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/pdu_collection.c @@ -0,0 +1,25 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_EventTriggerDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_ActionDefinition; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationHeader; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_IndicationMessage; +extern struct asn_TYPE_descriptor_s asn_DEF_E2SM_KPM_RANfunction_Description; +extern struct asn_TYPE_descriptor_s asn_DEF_RANcallProcess_ID_string; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2SM-KPM-IEs in /home/rshacham/e2sm-kpm-v01.02.asn */ + &asn_DEF_E2SM_KPM_EventTriggerDefinition, + &asn_DEF_E2SM_KPM_ActionDefinition, + &asn_DEF_E2SM_KPM_IndicationHeader, + &asn_DEF_E2SM_KPM_IndicationMessage, + &asn_DEF_E2SM_KPM_RANfunction_Description, + &asn_DEF_RANcallProcess_ID_string, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt new file mode 100644 index 0000000..7304f86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/CMakeLists.txt @@ -0,0 +1,61 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + + + +project(e2sim) + +set (E2SIM_ROOT ./) + + +include_directories("${E2SIM_ROOT}") +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2APr") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + + +#set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG ON) + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsgf +find_package( Threads REQUIRED ) + + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + + "${E2SIM_ROOT}/ricsim.cpp" + "${E2SIM_ROOT}/encode_e2apv1.cpp" + "${E2SIM_ROOT}/encode_kpm.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2APr/*.c" + "${E2SIM_ROOT}/src/E2APr/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ricsim ${RICSIM_SOURCES}) +target_link_libraries( ricsim ${SCTP_STD_LIB} ) + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/build_e2sim b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/build_e2sim new file mode 100644 index 0000000..80a53c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/build_e2sim @@ -0,0 +1,86 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +E2SIM_VERSION='1.4.0' +export E2SIM_DIR=$PWD +source $E2SIM_DIR/tools/build_helper.bash +DOCKER_IMAGE='e2sim' + +print_help() { + echo " + This program installs E2 Simulator + You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14 + The program is run by default with no option + + USAGE: + ./build_e2sim [OPTIONS] + + OPTIONS: + --clean + Erase all files to make a rebuild from start + --docker + Build docker image + -h + Print this help + " +} + +function main(){ + case "$1" in + --clean) + echo_info "Will clean all previously producted files under build/" + rm -rf $E2SIM_DIR/build + echo_success "Clean Done" + exit + ;; + + --docker) + echo "Will build docker image ${DOCKER_IMAGE}:${E2SIM_VERSION}" + sudo docker build -f docker/Dockerfile -t $DOCKER_IMAGE:$E2SIM_VERSION . + exit + ;; + + "") + ;; + + -h) + print_help + exit 1;; + + *) + echo_error "Unknown option $1" + exit + esac + + BUILD_DIR=$E2SIM_DIR/build + mkdir -p $BUILD_DIR + + echo_info "Will build e2sim" + cd $BUILD_DIR + rm -rf CMakeCache.txt + cmake .. + make -j`nproc` + + echo_success "e2sim compiled" +} + +main "$@" diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp new file mode 100644 index 0000000..7db74aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.cpp @@ -0,0 +1,1112 @@ +#include +#include +#include +#include + +#include +#include + + +#include "encode_e2apv1.hpp" + +extern "C" { +#include "E2SM-KPM-RANfunction-Description.h" + +#include "e2ap_asn1c_codec.h" +#include "GlobalE2node-ID.h" +#include "GlobalE2node-gNB-ID.h" +#include "GlobalgNB-ID.h" +#include "OCTET_STRING.h" +#include "asn_application.h" +#include "GNB-ID-Choice.h" +#include "ProtocolIE-Field.h" +#include "E2setupRequest.h" +#include "RICaction-ToBeSetup-Item.h" +#include "RICactions-ToBeSetup-List.h" +#include "RICeventTriggerDefinition.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "ProtocolIE-SingleContainer.h" +#include "RANfunctions-List.h" +#include "RICindication.h" +#include "RICsubsequentActionType.h" +#include "RICsubsequentAction.h" +#include "RICtimeToWait.h" + +} + +long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { + + RICsubscriptionRequest_t orig_req = + e2ap_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long func_id; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) { + func_id = next_ie->value.choice.RANfunctionID; + } + + } + + return func_id; + +} + +void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, long ranFunctionId, uint8_t *ranFuncDescEncoded, int ranFuncLength) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = ranFunctionId; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + // ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded); + ranfuncdesc_str->buf = (uint8_t*)calloc(1,ranFuncLength); + // ranfuncdesc_str->size = er.encoded; + ranfuncdesc_str->size = ranFuncLength; + // memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded); + memcpy(ranfuncdesc_str->buf, ranFuncDescEncoded, ranFuncLength); + + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + +void generate_e2apv1_setup_request(E2AP_PDU_t *e2ap_pdu) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = 1; + + E2SM_KPM_RANfunction_Description_t *ranfunc_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + encode_kpm_function_description(ranfunc_desc); + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + ranfunc_desc, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded); + ranfuncdesc_str->size = er.encoded; + memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded); + + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + + +void generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) { + + E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t)); + ricid_bstring->buf = buf; + ricid_bstring->size = 4; + ricid_bstring->bits_unused = 0; + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmn->buf = buf2; + plmn->size = 5; + + GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t)); + globalricid->pLMN_Identity = *plmn; + globalricid->ric_ID = *ricid_bstring; + + E2setupResponseIEs__value_PR pres1; + pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID; + + resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID; + resp_ies1->criticality = 0; + resp_ies1->value.present = pres1; + resp_ies1->value.choice.GlobalRIC_ID = *globalricid; + + E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t)); + int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1); + + + SuccessfulOutcome__value_PR pres; + pres = SuccessfulOutcome__value_PR_E2setupResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = 1; + successoutcome->criticality = 0; + successoutcome->value.present = pres; + successoutcome->value.choice.E2setupResponse = *e2setupresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + +} + + +void generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) { + + fprintf(stderr, "in sub 1\n"); + RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 2\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid); + + + RICsubscriptionRequest_IEs_t *ranfuncid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 2\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ranfuncid); + + + fprintf(stderr, "in sub 3\n"); + auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 4\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid); + + fprintf(stderr, "in generate sub\n"); + uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers"; + fprintf(stderr, "in gen sub 1\n"); + OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + triggerdef->buf = (uint8_t *)calloc(1,20); + triggerdef->size = 20; + memcpy(triggerdef->buf, buf2, triggerdef->size); + + + fprintf(stderr, "sub1\n"); + ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item; + + RICaction_ToBeSetup_ItemIEs__value_PR pres6; + pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + + printf("sub2\n"); + + uint8_t *buf5 = (uint8_t *)"ActionDef"; + + OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + actdef->buf = (uint8_t *)calloc(1,9); + actdef->size = 9; + memcpy(triggerdef->buf, buf5, 9); + + auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t)); + ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa); + + sa->ricTimeToWait = RICtimeToWait_w500ms; + sa->ricSubsequentActionType = RICsubsequentActionType_continue; + + /* + RICaction_ToBeSetup_Item_t *action_item = (RICaction_ToBeSetup_Item_t*)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item->ricActionID = 5; + action_item->ricActionType = 9; + action_item->ricActionDefinition = actdef; + action_item->ricSubsequentAction = sa; + */ + printf("sub3\n"); + + RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item_ies->id = proto_id; + action_item_ies->criticality = 0; + + action_item_ies->value.present = pres6; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa; + + + printf("sub5\n"); + /* + RICsubscriptionDetails_t *ricsubdetails = (RICsubscriptionDetails_t*)calloc(1, sizeof(RICsubscriptionDetails_t)); + printf("sub5.5\n"); + + ASN_SEQUENCE_ADD(&ricsubdetails->ricAction_ToBeSetup_List.list, action_item_ies); + ricsubdetails->ricEventTriggerDefinition = *triggerdef; + + printf("sub6\n"); + */ + + ranfuncid->id = ProtocolIE_ID_id_RANfunctionID; + ranfuncid->criticality = 0; + ranfuncid->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID; + ranfuncid->value.choice.RANfunctionID = 1; + + + RICsubscriptionRequest_IEs__value_PR pres3; + printf("sub6.1\n"); + pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; + ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails; + printf("sub6.2\n"); + + ricsubrid->criticality = 0; + ricsubrid->value.present = pres3; + printf("sub6.3\n"); + + ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef; + printf("sub6.4\n"); + + ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies); + + printf("sub7\n"); + + + ricreqid->id = ProtocolIE_ID_id_RICrequestID; + ricreqid->criticality = 0; + ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID; + ricreqid->value.choice.RICrequestID.ricRequestorID = 22; + ricreqid->value.choice.RICrequestID.ricInstanceID = 6; + + RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t)); + + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid); + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid); + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ranfuncid); + + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = ProcedureCode_id_RICsubscription; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.RICsubscriptionRequest = *ricsubreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + // xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + +} + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], + long reqActionIdsRejected[], int accept_size, int reject_size, + long reqRequestorId, long reqInstanceId) { + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + // int numAccept = sizeof(reqActionIdsAccepted); + int numAccept = accept_size; + int numReject = reject_size; + // int numReject = sizeof(reqActionIdsRejected); + + + for (int i=0; i < numAccept ; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsAccepted[i]; + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + if (numReject > 0) { + + RICsubscriptionResponse_IEs_t *ricactionrejected = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + ricactionrejected->criticality = 0; + ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + RICaction_NotAdmitted_List_t* rejectlist = + (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t)); + ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist; + + for (int i=0; i < numReject; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsRejected[i]; + + RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t)); + noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item; + noadmitie->criticality = 0; + noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item; + noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected); + } + } + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + +} + +void generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) { + + //Gather details of the request + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long responseRequestorId; + long responseInstanceId; + long responseActionId; + + std::vector actionIds; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + responseRequestorId = requestorId; + responseInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + for (int i=0; i < actionCount; i++) { + //RICaction_ToBeSetup_Item_t + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + fprintf(stderr, "Next Action ID %ld\n", actionId); + responseActionId = actionId; + actionIds.push_back(responseActionId); + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", responseRequestorId); + fprintf(stderr, "instanceId %d\n", responseInstanceId); + + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i)); + + } + + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = actionIds.at(i); + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + +} + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, + long requestorId, + long instanceId, + long ranFunctionId, + long actionId, + long seqNum, + uint8_t *ind_header_buf, + int header_length, + uint8_t *ind_message_buf, + int message_length) { + + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId; + ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = ranFunctionId; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = actionId; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = seqNum; + + //Indication type is REPORT + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + + hdr_str->buf = (uint8_t*)calloc(1,header_length); + hdr_str->size = header_length; + memcpy(hdr_str->buf, ind_header_buf, header_length); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = header_length; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + + + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = message_length; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *cpid_buf = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + + printf("5.1\n"); + + int cpid_buf_len = strlen((char*)cpid_buf); + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len); + ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len; + + memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len); + + printf("5.2\n"); + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + printf("5.3\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + + printf("5.35\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + + printf("5.36\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + printf("5.4\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + + printf("5.5\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + // ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + +} + +void generate_e2apv1_indication_request(E2AP_PDU *e2ap_pdu) { + fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = 25; + ricind_ies->value.choice.RICrequestID.ricInstanceID = 3; + + fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = 70; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = 80; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = 45; + + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + hdr_str->buf = (uint8_t*)calloc(1,12); + hdr_str->size = 12; + memcpy(hdr_str->buf, buf2, 12); + + fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,12); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = 12; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, buf2, 12); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + // uint8_t *buf9 = (uint8_t *)"reportmsg"; + + /* + E2SM_KPM_IndicationMessage_t *e2sm_ind_msg = + (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t)); + + encode_kpm(e2sm_ind_msg); + */ + + E2SM_KPM_RANfunction_Description_t *e2sm_desc = + (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t)); + + encode_kpm_function_description(e2sm_desc); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + asn_codec_ctx_t *opt_cod; + + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_RANfunction_Description, + e2sm_desc, e2smbuffer, e2smbuffer_size); + + /* + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + e2sm_ind_msg, e2smbuffer, e2smbuffer_size); + */ + + + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + OCTET_STRING_t *msg_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + msg_str->buf = (uint8_t*)calloc(1,er.encoded); + msg_str->size = er.encoded; + memcpy(msg_str->buf, e2smbuffer, er.encoded); + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + fprintf(stderr, "after encoding message 2\n"); + + fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = er.encoded; + + fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, e2smbuffer, er.encoded); + + fprintf(stderr, "after encoding message 5\n"); + + uint8_t *buf4 = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + cpid_str.buf = buf4; + cpid_str.size = 4; + + + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID = cpid_str; + + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + /* + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + */ + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); +} + + +void generate_e2apv1_indication_response(E2AP_PDU *e2ap_pdu) { + + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp new file mode 100644 index 0000000..477509c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_e2apv1.hpp @@ -0,0 +1,46 @@ + +#ifndef ENCODE_E2APV1_HPP +#define ENCODE_E2APV1_HPP +/* +#include +#include +#include +*/ + +//#include +//#include +//#include + +//#include "e2sim_sctp.hpp" +//#include "e2ap_message_handler.hpp" +#include "encode_kpm.hpp" + + +extern "C" { + //#include "e2sim_defs.h" +#include "E2AP-PDU.h" + + +} + +long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu); + +void buildSubsReq(E2AP_PDU_t *pdu); + +void generate_e2apv1_setup_request(E2AP_PDU_t *setup_req_pdu); + +void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, long ranFuncId, uint8_t* ranFuncDesc, int ranFuncLength); + +void generate_e2apv1_setup_response(E2AP_PDU_t *setup_resp_pdu); + +void generate_e2apv1_subscription_request(E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_subscription_response(E2AP_PDU_t *sub_resp_pdu, E2AP_PDU_t *sub_req_pdu); + +void generate_e2apv1_indication_request(E2AP_PDU_t *ind_req_pdu); + +void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId); + +void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp new file mode 100644 index 0000000..d518a36 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.cpp @@ -0,0 +1,1853 @@ +#include +#include +#include +#include +#include + +#include "encode_kpm.hpp" + +using namespace std; + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc) { + + printf("kpm0\n"); + + uint8_t *buf = (uint8_t*)"ORAN-E2SM-KPM"; + uint8_t *buf2 = (uint8_t*)"KPM monitor"; + uint8_t *buf3 = (uint8_t*)"OID123"; + + OCTET_STRING_t *sname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sname->buf = (uint8_t*)calloc(1,13); + + memcpy(sname->buf, buf, 13); + sname->size = strlen((char*)buf); + ranfunc_desc->ranFunction_Name.ranFunction_ShortName = *sname; + + long inst = 1; + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); + + // ranfunc_desc->ranFunction_Name.ranFunction_Description = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.buf = (uint8_t*)calloc(1,strlen((char*)buf2)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_Description.buf, buf2, strlen((char*)buf2)); + ranfunc_desc->ranFunction_Name.ranFunction_Description.size = strlen((char*)buf2); + ranfunc_desc->ranFunction_Name.ranFunction_Instance = &inst; + + printf("kpm0.9\n"); + + // ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t*)calloc(1,strlen((char*)buf3)); + memcpy(ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.buf, buf3, strlen((char*)buf3)); + ranfunc_desc->ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char*)buf3); + + printf("kpm2\n"); + + + RIC_EventTriggerStyle_List_t *trigger_style = + (RIC_EventTriggerStyle_List_t*)calloc(1, sizeof(RIC_EventTriggerStyle_List_t)); + trigger_style->ric_EventTriggerStyle_Type = 1; + uint8_t *buf4 = (uint8_t*)"Periodic report"; + // trigger_style->ric_EventTriggerStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + trigger_style->ric_EventTriggerStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf4)); + memcpy(trigger_style->ric_EventTriggerStyle_Name.buf, buf4, strlen((char*)buf4)); + trigger_style->ric_EventTriggerStyle_Name.size = strlen((char*)buf4); + trigger_style->ric_EventTriggerFormat_Type = 5; + + printf("kpm3\n"); + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List)); + + int ret = ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_EventTriggerStyle_List->list , trigger_style); + printf("ret is %d\n", ret); + + RIC_ReportStyle_List_t *report_style1 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style1->ric_ReportStyle_Type = 1; + + uint8_t *buf5 = (uint8_t*)"O-DU Measurement Container for the 5GC connected deployment"; + + printf("kpm4\n"); + + // report_style1->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style1->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf5)); + memcpy(report_style1->ric_ReportStyle_Name.buf, buf5, strlen((char*)buf5)); + report_style1->ric_ReportStyle_Name.size = strlen((char*)buf5); + report_style1->ric_IndicationHeaderFormat_Type = 1; + report_style1->ric_IndicationMessageFormat_Type = 1; + + printf("kpm5\n"); + + RIC_ReportStyle_List_t *report_style2 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style2->ric_ReportStyle_Type = 2; + + uint8_t *buf6 = (uint8_t*)"O-DU Measurement Container for the EPC connected deployment"; + + // report_style2->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + + + report_style2->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf6)); + memcpy(report_style2->ric_ReportStyle_Name.buf, buf6, strlen((char*)buf6)); + report_style2->ric_ReportStyle_Name.size = strlen((char*)buf6); + report_style2->ric_IndicationHeaderFormat_Type = 1; + report_style2->ric_IndicationMessageFormat_Type = 1; + + printf("kpm6\n"); + + RIC_ReportStyle_List_t *report_style3 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style3->ric_ReportStyle_Type = 3; + + uint8_t *buf7 = (uint8_t*)"O-CU-CP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style3->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf7)); + memcpy(report_style3->ric_ReportStyle_Name.buf, buf7, strlen((char*)buf7)); + report_style3->ric_ReportStyle_Name.size = strlen((char*)buf7); + report_style3->ric_IndicationHeaderFormat_Type = 1; + report_style3->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style4 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style4->ric_ReportStyle_Type = 4; + + uint8_t *buf8 = (uint8_t*)"O-CU-CP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style4->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf8)); + memcpy(report_style4->ric_ReportStyle_Name.buf, buf8, strlen((char*)buf8)); + report_style4->ric_ReportStyle_Name.size = strlen((char*)buf8); + report_style4->ric_IndicationHeaderFormat_Type = 1; + report_style4->ric_IndicationMessageFormat_Type = 1; + + RIC_ReportStyle_List_t *report_style5 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style5->ric_ReportStyle_Type = 5; + + uint8_t *buf9 = (uint8_t*)"O-CU-UP Measurement Container for the 5GC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style5->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf9)); + memcpy(report_style5->ric_ReportStyle_Name.buf, buf9, strlen((char*)buf9)); + report_style5->ric_ReportStyle_Name.size = strlen((char*)buf9); + report_style5->ric_IndicationHeaderFormat_Type = 1; + report_style5->ric_IndicationMessageFormat_Type = 1; + + + RIC_ReportStyle_List_t *report_style6 = (RIC_ReportStyle_List_t*)calloc(1, sizeof(RIC_ReportStyle_List_t)); + report_style6->ric_ReportStyle_Type = 6; + + uint8_t *buf10 = (uint8_t*)"O-CU-UP Measurement Container for the EPC connected deployment"; + + // report_style3->ric_ReportStyle_Name = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + report_style6->ric_ReportStyle_Name.buf = (uint8_t*)calloc(1,strlen((char*)buf10)); + memcpy(report_style6->ric_ReportStyle_Name.buf, buf10, strlen((char*)buf10)); + report_style6->ric_ReportStyle_Name.size = strlen((char*)buf10); + report_style6->ric_IndicationHeaderFormat_Type = 1; + report_style6->ric_IndicationMessageFormat_Type = 1; + + + ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List = + (E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item::E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List)); + + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style1); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style2); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style3); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style4); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style5); + ASN_SEQUENCE_ADD(&ranfunc_desc->e2SM_KPM_RANfunction_Item.ric_ReportStyle_List->list, report_style6); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_RANfunction_Description, ranfunc_desc); +} + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_UP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_UP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_UP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_UP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_UP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_UP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + + ue_report_item->c_RNTI = *crnti; + ue_report_item->pDCPBytesDL = bytesdl; + ue_report_item->pDCPBytesUL = bytesul; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_UP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_UP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + int plmnid_size = strlen((char*)plmnid_buf); + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(plmnid_size,1); + plmnidstr->size = plmnid_size; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + + int nrcellid_size = strlen((char*)nrcellid_buf); + nrcellid->buf = (uint8_t*)calloc(1, nrcellid_size); + memcpy(nrcellid->buf, nrcellid_buf, nrcellid_size); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + + int crnti_size = strlen((char*)crnti_buf); + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1, crnti_size); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_buf); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_buf, crnti->size); + + // uint8_t *buf_serving = (uint8_t*)"RSRP10"; + + int serving_buf_len = strlen((char*)serving_buf); + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(serving_buf_len,1); + servingstr->size = serving_buf_len; + memcpy(servingstr->buf, serving_buf, servingstr->size); + + + int neighbor_buf_len = strlen((char*)neighbor_buf); + // uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + ts->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->buf = (uint8_t*)calloc(neighbor_buf_len,1); + neighborstr->size = neighbor_buf_len; + memcpy(neighborstr->buf, neighbor_buf, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + +} + + +void encode_kpm_odu_user_level(RAN_Container_t *ranco) { + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + DU_Usage_Report_CellResourceReportItem_t *report_item = + (DU_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(DU_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + printf("enc3.1\n"); + + DU_Usage_Report_UeResourceReportItem *ue_report_item = + (DU_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(DU_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + printf("enc4\n"); + + long lval1 = 2; + long lval2 = 1; + + ue_report_item->c_RNTI = *crnti; + ue_report_item->dl_PRBUsage = &lval1; + + printf("enc5\n"); + + ue_report_item->ul_PRBUsage = &lval2; + + printf("enc6\n"); + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oDU_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oDU_UE.cellResourceReportList.list, report_item); + + xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + +} + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_odu_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + const uint8_t *serving_buf, + const uint8_t *neighbor_buf) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco, plmnid_buf, + nrcellid_buf, crnti_buf, + serving_buf, neighbor_buf); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + encode_kpm_ocucp_user_level(ranco); + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *plmnid_buf, + uint8_t *nrcellid_buf, + uint8_t *crnti_buf, + int pdcp_bytesdl, + int pdcp_bytesul) { + + +} + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + RAN_Container_t *ranco = (RAN_Container_t*)calloc(1,sizeof(RAN_Container_t)); + //encode_kpm_ocuup_user_level(ranco); + + + uint8_t *buf = (uint8_t*)"2020.06.13 13:01:05.222"; + Timestamp_t *ts = (Timestamp_t*)calloc(1,sizeof(Timestamp_t)); + ts->buf = (uint8_t*)calloc(strlen((char*)buf),1); + ts->size = strlen((char*)buf); + memcpy(ts->buf,buf,ts->size); + + printf("enc1\n"); + + CU_CP_Usage_Report_CellResourceReportItem_t *report_item = + (CU_CP_Usage_Report_CellResourceReportItem_t*)calloc(1,sizeof(CU_CP_Usage_Report_CellResourceReportItem_t)); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + printf("enc3\n"); + + report_item->nRCGI = *nrcgi; + + CU_CP_Usage_Report_UeResourceReportItem *ue_report_item = + (CU_CP_Usage_Report_UeResourceReportItem*)calloc(1,sizeof(CU_CP_Usage_Report_UeResourceReportItem)); + + printf("enc3.2\n"); + + uint8_t* crnti_str = (uint8_t*)"1111"; + OCTET_STRING *crnti = (OCTET_STRING*)calloc(1,sizeof(OCTET_STRING)); + crnti->buf = (uint8_t*)calloc(1,4); + + printf("enc3.3\n"); + + crnti->size = strlen((char*)crnti_str); + + printf("enc3.4\n"); + memcpy(crnti->buf, crnti_str, crnti->size); + + uint8_t *buf_serving = (uint8_t*)"RSRP10"; + OCTET_STRING_t *servingstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + servingstr->buf = (uint8_t*)calloc(6,1); + servingstr->size = 6; + memcpy(servingstr->buf, buf_serving, servingstr->size); + + uint8_t *buf_neighbor = (uint8_t*)"-10,-15"; + OCTET_STRING_t *neighborstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + neighborstr->buf = (uint8_t*)calloc(7,1); + neighborstr->size = 7; + memcpy(neighborstr->buf, buf_neighbor, neighborstr->size); + + ue_report_item->c_RNTI = *crnti; + ue_report_item->serving_Cell_RF_Type = servingstr; + ue_report_item->neighbor_Cell_RF = neighborstr; + + + ASN_SEQUENCE_ADD(&report_item->ueResourceReportList.list, ue_report_item); + + ranco->timestamp = *ts; + ranco->reportContainer.present = RAN_Container__reportContainer_PR_oCU_CP_UE; + ASN_SEQUENCE_ADD(&ranco->reportContainer.choice.oCU_CP_UE.cellResourceReportList.list, report_item); + + // xer_fprint(stderr, &asn_DEF_RAN_Container, ranco); + + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->theRANContainer = ranco; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + int ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + asn_codec_ctx_t *opt_cod; + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + long fiveqi, + long dl_prb_usage, + long ul_prb_usage, + uint8_t* sd_buf, + uint8_t* sst_buf, + uint8_t* plmnid_buf, + uint8_t* nrcellid_buf, + long *dl_prbs, + long *ul_prbs) { + + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, plmnid_buf, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, nrcellid_buf, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = dl_prbs; + listitem1->ul_TotalofAvailablePRBs = ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + long fiveqi = 8; + long dl_prb_usage = 50; + long ul_prb_usage = 70; + + asn_codec_ctx_t *opt_cod; + + FQIPERSlicesPerPlmnPerCellListItem_t *fqi_item = + (FQIPERSlicesPerPlmnPerCellListItem_t*)calloc(1,sizeof(FQIPERSlicesPerPlmnPerCellListItem_t)); + fqi_item->fiveQI = fiveqi; + fqi_item->dl_PRBUsage = &dl_prb_usage; + fqi_item->ul_PRBUsage = &ul_prb_usage; + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + SlicePerPlmnPerCellListItem_t *sliceitem = + (SlicePerPlmnPerCellListItem_t*)calloc(1,sizeof(SlicePerPlmnPerCellListItem_t)); + sliceitem->sliceID = *snssai; + ASN_SEQUENCE_ADD(&sliceitem->fQIPERSlicesPerPlmnPerCellList.list, fqi_item); + + uint8_t *buf2 = (uint8_t*)"747"; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + ServedPlmnPerCellListItem_t *percellitem1 = + (ServedPlmnPerCellListItem_t*)calloc(1,sizeof(ServedPlmnPerCellListItem_t)); + percellitem1->pLMN_Identity = *plmnid; + percellitem1->du_PM_5GC = (FGC_DU_PM_Container*)calloc(1,sizeof(FGC_DU_PM_Container)); + ASN_SEQUENCE_ADD(&percellitem1->du_PM_5GC->slicePerPlmnPerCellList.list, sliceitem); + + OCTET_STRING_t *plmnidstr = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnidstr->buf = (uint8_t*)calloc(3,1); + plmnidstr->size = 3; + memcpy(plmnidstr->buf, buf2, plmnidstr->size); + + printf("enc2\n"); + + NRCellIdentity_t *nrcellid = (NRCellIdentity_t*)calloc(1,sizeof(NRCellIdentity_t)); + uint8_t* buf3 = (uint8_t*)"12340"; + nrcellid->buf = (uint8_t*)calloc(1,5); + memcpy(nrcellid->buf, buf3, 5); + nrcellid->size = 5; + nrcellid->bits_unused = 4; + + NRCGI *nrcgi = (NRCGI*)calloc(1,sizeof(NRCGI)); + nrcgi->pLMN_Identity = *plmnidstr; + nrcgi->nRCellIdentity = *nrcellid; + + long dl_prbs = (long)100; + long ul_prbs = (long)120; + + CellResourceReportListItem_t *listitem1 = (CellResourceReportListItem_t*)calloc(1,sizeof(CellResourceReportListItem_t)); + listitem1->nRCGI = *nrcgi; + listitem1->dl_TotalofAvailablePRBs = &dl_prbs; + listitem1->ul_TotalofAvailablePRBs = &ul_prbs; + ASN_SEQUENCE_ADD(&listitem1->servedPlmnPerCellList.list, percellitem1); + + + ODU_PF_Container_t *ducont = (ODU_PF_Container_t*)calloc(1,sizeof(ODU_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_ODU_PF_Container, ducont); + int ret = ASN_SEQUENCE_ADD(&ducont->cellResourceReportList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oDU; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oDU = *ducont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, + uint8_t *gnbcuupname_buf, + int bytes_dl, + int bytes_ul, + uint8_t *sst_buf, + uint8_t *sd_buf, + uint8_t *plmnid_buf) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + // uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, gnbcuupname_buf, gnbcuupname->size); + + + //We need to convert bytes_dl into array of uint8_t + + int array_size_dl; + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + if (bytes_dl <= 64) { + array_size_dl = 1; + + uint8_t buffer[array_size_dl]; + buffer[0] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf,buffer,1); + bytesdl->size = 1; + + } else if (bytes_dl <= 16384) { + array_size_dl = 2; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 8) & 0xFF; + buffer[1] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(2,1); + memcpy(bytesdl->buf,buffer,2); + bytesdl->size = 2; + + } else if (bytes_dl <= 4194304) { + array_size_dl = 3; + + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 16) & 0xFF; + buffer[1] = (bytes_dl >> 8) & 0xFF; + buffer[2] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(3,1); + memcpy(bytesdl->buf,buffer,3); + bytesdl->size = 3; + + } else if (bytes_dl <= 1073741824) { + array_size_dl = 4; + uint8_t buffer[array_size_dl]; + buffer[0] = (bytes_dl >> 24) & 0xFF; + buffer[1] = (bytes_dl >> 16) & 0xFF; + buffer[2] = (bytes_dl >> 8) & 0xFF; + buffer[3] = bytes_dl & 0xFF; + bytesdl->buf = (uint8_t*)calloc(4,1); + memcpy(bytesdl->buf,buffer,4); + bytesdl->size = 4; + } + + + //We need to convert bytes_ul into array of uint8_t + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + + int array_size_ul; + + if (bytes_ul <= 64) { + array_size_ul = 1; + + uint8_t buffer[array_size_ul]; + buffer[0] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf,buffer,1); + bytesul->size = 1; + + } else if (bytes_ul <= 16384) { + array_size_ul = 2; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 8) & 0xFF; + buffer[1] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(2,1); + memcpy(bytesul->buf,buffer,2); + bytesul->size = 2; + + } else if (bytes_ul <= 4194304) { + array_size_ul = 3; + + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 16) & 0xFF; + buffer[1] = (bytes_ul >> 8) & 0xFF; + buffer[2] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(3,1); + memcpy(bytesul->buf,buffer,3); + bytesul->size = 3; + + } else if (bytes_ul <= 1073741824) { + array_size_ul = 4; + uint8_t buffer[array_size_ul]; + buffer[0] = (bytes_ul >> 24) & 0xFF; + buffer[1] = (bytes_ul >> 16) & 0xFF; + buffer[2] = (bytes_ul >> 8) & 0xFF; + buffer[3] = bytes_ul & 0xFF; + bytesul->buf = (uint8_t*)calloc(4,1); + memcpy(bytesul->buf,buffer,4); + bytesul->size = 4; + } + + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,sst_buf,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, sd_buf, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, sst_buf, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, sd_buf, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, plmnid_buf, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage__indicationMessage_PR pres = E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1; + + indicationmessage->indicationMessage.present = pres; + + indicationmessage->indicationMessage.choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + +} + + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage) { + + /* + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + //std::string gn = "GNBCUUP5"; + //std::vector gnvec(gn.begin(), gn.end()); + //uint8_t *buf = &gnvec[0]; + uint8_t *buf = (uint8_t*)"GNBCUUP5"; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + // std::string sl = "SLICE4"; + // std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + // std::string sd = "SD1"; + // std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(1,1); + snssai->sST.size = 1; + memcpy(snssai->sST.buf, buf1, 1); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + asn_codec_ctx_t *opt_cod; + + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + + + asn_enc_rval_t era = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + uint8_t *buf2 = (uint8_t*)"747"; + // std::string pl = "PLMNID7"; + // std::vector plvec(pl.begin(), pl.end()); + // uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(3,1); + plmnid->size = 3; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + asn_enc_rval_t er = + asn_encode_to_buffer(opt_cod, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + */ +} + +/* +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage) { + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage); + std::string gn = "GNBCUUP5"; + std::vector gnvec(gn.begin(), gn.end()); + uint8_t *buf = &gnvec[0]; + OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + gnbcuupname->size = 8; + gnbcuupname->buf = (uint8_t*)calloc(1,8); + memcpy(gnbcuupname->buf, buf, gnbcuupname->size); + + + INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer[1]; + buffer[0]= 40000; + bytesdl->buf = (uint8_t*)calloc(1,1); + memcpy(bytesdl->buf, buffer,1); + bytesdl->size = 1; + + INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t)); + uint8_t buffer1[1]; + buffer1[0] = 50000; + bytesul->buf = (uint8_t*)calloc(1,1); + memcpy(bytesul->buf, buffer1, 1); + bytesul->size = 1; + + FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t)); + ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem); + fqilistitem->fiveQI = 9; + fqilistitem->pDCPBytesDL = bytesdl; + fqilistitem->pDCPBytesUL = bytesul; + + + + std::string sl = "SLICE4"; + std::vector slvec(sl.begin(), sl.end()); + // uint8_t *buf1 = &slvec[0]; + uint8_t *buf1 = (uint8_t*)"SLICE4"; + OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sst->size = 6; + sst->buf = (uint8_t*)calloc(1,6); + memcpy(sst->buf,buf1,sst->size); + + std::string sd = "SD1"; + std::vector sdvec(sd.begin(), sd.end()); + // uint8_t *bufz = &sdvec[0]; + uint8_t *bufz = (uint8_t*)"SD1"; + OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + sds->size = 3; + sds->buf = (uint8_t*)calloc(1,3); + memcpy(sds->buf, bufz, sds->size); + + + SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t)); + ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai); + snssai->sST.buf = (uint8_t*)calloc(6,1); + snssai->sST.size = 6; + memcpy(snssai->sST.buf, buf1, 6); + snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + snssai->sD->buf = (uint8_t*)calloc(1,3); + snssai->sD->size = 3; + memcpy(snssai->sD->buf, bufz, 3); + + + + SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t)); + ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem); + slicelistitem->sliceID = *snssai; + int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem); + + uint8_t e2smbuffera[8192]; + size_t e2smbuffer_sizea = 8192; + + auto era = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_SliceToReportListItem, + slicelistitem, e2smbuffera, e2smbuffer_sizea); + fprintf(stderr, "inner er encded is %d\n", era.encoded); + fprintf(stderr, "after encoding message\n"); + + FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t)); + ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format); + ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem); + + std::string pl = "PLMNID7"; + std::vector plvec(pl.begin(), pl.end()); + uint8_t *buf2 = &plvec[0]; + + OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmnid->buf = (uint8_t*)calloc(1,7); + plmnid->size = 7; + memcpy(plmnid->buf, buf2, plmnid->size); + + + PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t)); + ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist); + plmnidlist->pLMN_Identity = *plmnid; + plmnidlist->cu_UP_PM_5GC = pm_format; + + CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t)); + ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont); + ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist); + + + + + PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t)); + ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1); + listitem1->interface_type = 2; + listitem1->o_CU_UP_PM_Container = *meas_cont; + + OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont); + cuupcont->gNB_CU_UP_Name = gnbcuupname; + ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1); + + PF_Container_PR pres1 = PF_Container_PR_oCU_UP; + + PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t)); + ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer); + pfcontainer->present = pres1; + pfcontainer->choice.oCU_UP = *cuupcont; + + PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t)); + ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list); + containers_list->performanceContainer = pfcontainer; + + E2SM_KPM_IndicationMessage_Format1_t *format = + (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format); + + ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list); + + E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1; + + indicationmessage->present = pres; + + indicationmessage->choice.indicationMessage_Format1 = *format; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + + uint8_t e2smbuffer[8192]; + size_t e2smbuffer_size = 8192; + + uint8_t e2smbuffer2[8192]; + size_t e2smbuffer_size2 = 8192; + + auto er = + asn_encode_to_buffer(nullptr, + ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_KPM_IndicationMessage, + indicationmessage, e2smbuffer, e2smbuffer_size); + + fprintf(stderr, "er encded is %d\n", er.encoded); + fprintf(stderr, "after encoding message\n"); + + +} +*/ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp new file mode 100644 index 0000000..682814c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/encode_kpm.hpp @@ -0,0 +1,45 @@ +#ifndef ENCODE_KPM_HPP +#define ENCODE_KPM_HPP + +extern "C" { + #include "OCUCP-PF-Container.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "E2SM-KPM-IndicationMessage.h" + #include "FQIPERSlicesPerPlmnListItem.h" + #include "E2SM-KPM-RANfunction-Description.h" + #include "Timestamp.h" +} + +void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_bak(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_function_description(E2SM_KPM_RANfunction_Description_t* ranfunc_desc); + +void encode_kpm_report_style5(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_odu_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocucp_user_level(RAN_Container_t *ranco); + +void encode_kpm_ocuup_user_level(RAN_Container_t *ranco); + +void encode_kpm_report_rancontainer_du(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cucp(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_rancontainer_cuup(E2SM_KPM_IndicationMessage_t *indMsg); + +void encode_kpm_report_style1(E2SM_KPM_IndicationMessage_t* indicationmessage); + +void encode_kpm_report_rancontainer_cucp_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage,uint8_t *plmnid_buf,uint8_t *nrcellid_buf,uint8_t *crnti_buf,const uint8_t *serving_buf, const uint8_t *neighbor_buf); + +void encode_kpm_report_rancontainer_cuup_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *plmnid_buf, uint8_t *nrcellid_buf, uint8_t *crnti_buf,int pdcp_bytesdl, int pdcp_bytesul); + +void encode_kpm_report_style1_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, long fiveqi, long dl_prb_usage, long ul_prb_usage, uint8_t* sd_buf, uint8_t* sst_buf,uint8_t* plmnid_buf, uint8_t* nrcellid_buf, long *dl_prbs, long *ul_prbs); + +void encode_kpm_report_style5_parameterized(E2SM_KPM_IndicationMessage_t* indicationmessage, uint8_t *gnbcuupname_buf, int bytes_dl,int bytes_ul, uint8_t *sst_buf, uint8_t *sd_buf, uint8_t *plmnid_buf); + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp new file mode 100644 index 0000000..5f9b7f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/extras/ricsim.cpp @@ -0,0 +1,216 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "GlobalE2node-ID.h" + #include "GlobalE2node-gNB-ID.h" + #include "GlobalgNB-ID.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "GNB-ID-Choice.h" + #include "ProtocolIE-Field.h" + #include "E2setupRequest.h" +} + +using namespace std; + +/* +struct { + type **array; + int count; + int size; + void (*free)(decltype(*array)); +} +*/ + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + // E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + + printf("out0\n"); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t gnb_bstring; + gnb_bstring.buf = buf; + gnb_bstring.size = 4; + gnb_bstring.bits_unused = 0; + + printf("out1\n"); + + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t plmn; + plmn.buf = buf2; + plmn.size = 5; + + GNB_ID_Choice_t gnbchoice; + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice.present = pres2; + gnbchoice.choice.gnb_ID = gnb_bstring; + + GlobalgNB_ID_t gnb; + gnb.plmn_id = plmn; + gnb.gnb_id = gnbchoice; + + + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = gnb; + + /* + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + */ + + GlobalE2node_ID_t globale2nodeid; + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid.present = pres; + globale2nodeid.choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequest_t));; + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 4; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = globale2nodeid; + e2setuprid->value.present = pres3; + + + E2setupRequest_t e2setupreq; + e2setupreq.protocolIEs.list.size = sizeof(E2setupRequestIEs); + e2setupreq.protocolIEs.list.count = 1; + e2setupreq.protocolIEs.list.array = &e2setuprid; + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 1; + initmsg->criticality = 0; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + E2AP_PDU_t *e2ap_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU_t)); + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + printf("over here\n"); + + asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu); + + printf("over here 55\n"); + + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_SetupRequest2.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + // E2setupRequest_t* pdu_setup = smaller_e2ap_xml_to_pdu("E2AP_PartSetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + // encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + /* + GlobalE2node_ID_t* pdu_setup = smaller_e2ap_xml_to_pdu("GlobalE2node-ID.xml"); + + asn_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + + printf("over here 2\n"); + + xer_fprint(stdout, &asn_DEF_GlobalE2node_ID, pdu_setup); + */ + /* + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + */ + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + /* + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + */ + //4. Receive RICSubscriptionResponse + while(1){ + wait_for_sctp_data(client_fd); + } + + + //--------------------------------------- + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.cpp new file mode 100644 index 0000000..d91c9e5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.cpp @@ -0,0 +1,132 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +#include "encode_e2apv1.hpp" +#include "encode_kpm.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "GlobalE2node-ID.h" + #include "GlobalE2node-gNB-ID.h" + #include "GlobalgNB-ID.h" + #include "OCTET_STRING.h" + #include "asn_application.h" + #include "GNB-ID-Choice.h" + #include "ProtocolIE-Field.h" + #include "E2setupRequest.h" + #include "RICaction-ToBeSetup-Item.h" + #include "RICactions-ToBeSetup-List.h" + #include "RICeventTriggerDefinition.h" + #include "RICsubscriptionRequest.h" + #include "ProtocolIE-SingleContainer.h" + #include "RANfunctions-List.h" + #include "RICindication.h" + #include "RICsubsequentActionType.h" + #include "RICsubsequentAction.h" + #include "RICtimeToWait.h" +} + +using namespace std; + +/* +struct { + type **array; + int count; + int size; + void (*free)(decltype(*array)); +} +*/ + +int client_fd = 0; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf, false); + } +} + + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + bool xmlenc = true; + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + LOG_I("in while loop"); + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf, xmlenc); + + if (xmlenc) + xmlenc = false; + } + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.hpp new file mode 100644 index 0000000..9af2552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/ricsim.hpp @@ -0,0 +1,5 @@ +#include "E2AP-PDU.h" + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu); + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int socket_fd); diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp new file mode 100644 index 0000000..3affd81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/asn.hpp @@ -0,0 +1,27 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/version.hpp" +#include "asn/elements.hpp" +#include "asn/constraints.hpp" +#include "asn/variant.hpp" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp new file mode 100644 index 0000000..3a42ad5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/codec.hpp @@ -0,0 +1,931 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/ber/common.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tag.hpp" +#include "asn/ber/length.hpp" +#include "asn/ber/visitor.hpp" +#include "asn/ber/opentype.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +pack (X.690) +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack (X.690) +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* ExplicitCodec: Codec for elements with EXPLICIT tag +***************************************************************************************/ +template +struct ExplicitCodec +{ + using tag_t = Tag; + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + Element::run(static_cast(ie), ctx); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + { + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("EX buffer: %s", static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + Element::run(static_cast(ie), ctx); + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + Element::run(static_cast(ie), ctx); + + buffer.set_end(end); + } + } + + } + } +}; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.690 8.2) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(1, ctx); + if(ie.get()) + Tools::put_bytes(0xFF, 1, ctx); + else + Tools::put_bytes(0, 1, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length != 1) + { + ctx.refErrorCtx().sizeRangeError(length, 1, 1); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t value; + Tools::get_bytes(value, 1, ctx); + ie.set(value > 0); + } + } + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.690 8.3) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.690 8.4) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* REAL: Encoding the real type (X.690 8.5) +***************************************************************************************/ +//missing... +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.690 8.6) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + + uint8_t tail = ie.get_bitqty() % 8; + + size_t length = ie.get_buffer().size(); + Length::encode(length + 1, ctx); + + auto & buffer = ctx.refBuffer(); + buffer.putByte((8 - tail) & 0x7F); + + if (tail) + { + buffer.putBytes(ie.get_buffer().data(), length - 1); + u8 last_byte = *(ie.get_buffer().data() + length - 1); + + last_byte <<= 8 - tail; + buffer.putBytes(&last_byte, 1); + } + else + { + buffer.putBytes(ie.get_buffer().data(), length); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + size_t len_bytes = length - 1; + size_t bitqty = len_bytes << 3; + + if((data_in[0] & 0x80) || (bitqty < data_in[0])) + { + ctx.refErrorCtx().valueRangeError(data_in[0]); + } + else + { + bitqty = bitqty - data_in[0]; + uint8_t* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, &data_in[1], len_bytes); + const u8 shift = bitqty % 8; + if (shift) + { + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(bitqty, data_out); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.690 8.7) +* Restricted Character string types (X.690 8.23) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.690 8.8) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(0, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length) + ctx.refErrorCtx().sizeRangeError(length); + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + } + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.690 8.9) +* SET: Encoding the set type (X.690 8.11) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + VisitorEncoderSeq ve(ctx, ie); + ie.encode(ve); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) //todo: support arbitrary order of IEs in SET + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + VisitorDecoderSeq vd(ctx, ie); + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + ie.decode(vd); + if(ctx) + { + if(invalid_tag != vd.get_unhandled_tag()) + { + tag_value_t _tag = vd.get_unhandled_tag(); + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else // it should be the end-of-contents octets (8.1.5) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + ie.decode(vd); + tag_value_t _tag = vd.get_unhandled_tag(); + if(invalid_tag != _tag) + { + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && buffer.getBytesLeft() > 0); + } + else + ctx.refErrorCtx().tagError(static_cast(tag)); // unexpected tag + } + buffer.set_end(end); + } + } + + } + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.690 8.10) +* SET OF: Encoding the set-of type (X.690 8.12) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + for (auto& elem : ie) + { + Element::run(elem, ctx); + } + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + tag_value_t elm_tag = get_tag(ctx); + + while(ctx && Element::is_matched(elm_tag)) + { + add_element(ie, ctx, &elm_tag); + elm_tag = get_tag(ctx); + } + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (elm_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + while(ctx && buffer.getBytesLeft() > 0) + add_element(ie, ctx); + + buffer.set_end(end); + } + } + } + } + +private: + static void inline add_element(IE& ie, DecoderCtx& ctx, tag_value_t const* elm_tag = nullptr) + { + uint8_t* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + Element::run(*v, ctx, elm_tag); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + } + } +}; + +/*************************************************************************************** +* CHOICE: Encoding the choice type +***************************************************************************************/ +struct ChoiceVisitorEncoder +{ + ChoiceVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator()(IE const& ie) + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + + EncoderCtx& m_ctx; +}; + +struct ChoiceVisitorDecoder +{ + ChoiceVisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag) {} + + template bool operator()(IE& ie) + { + Element::run(ie, m_ctx, &m_tag); + return static_cast(m_ctx); + } + + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(!m_valid && Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector {tag}; + IE::enumerate(selector); + return selector.is_valid(); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceVisitorEncoder ve(ctx); + + if(ctx && !ie.encode(ve)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + Selector selector {tag}; + IE::enumerate(selector); + + if(!selector.is_valid()) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + ChoiceVisitorDecoder vd {ctx, tag}; + if(ctx && !ie.decode(selector.get_idx(), vd)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + } +}; + +template +struct ElementType > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector(tag); + IE::enumerate(selector); + + return selector.is_valid(); + } +}; + +/*************************************************************************************** +* Identifier +***************************************************************************************/ +template +struct Identifier +{ + static bool inline is_matched(tag_value_t _tag) + { + return ElementType::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ElementType::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ElementType::run(ie, ctx, tag); + } +}; + +template +struct Identifier > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static bool inline is_matched(tag_value_t _tag) + { + return Identifier::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + Identifier::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t const* tag_ptr = nullptr) + { + if (ctx) + { + ctx.ie_name(IE::name()); + + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + if(ctx) + Identifier::run(ie, ctx, tag); + } + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp new file mode 100644 index 0000000..edd830b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/common.hpp @@ -0,0 +1,51 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "asn/buffer.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tools.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace ber { + +template struct Element; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp new file mode 100644 index 0000000..4159f00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/context.hpp @@ -0,0 +1,118 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp new file mode 100644 index 0000000..51b387c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/length.hpp @@ -0,0 +1,103 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +constexpr size_t indefinite_length = std::numeric_limits::max(); + +/*************************************************************************************** +* Length +***************************************************************************************/ +struct Length +{ + static size_t inline get(int64_t value) + { + size_t length = 1; + + if(value != 0) + { + size_t extra_sign_bits = __builtin_clrsbll(value); + length = sizeof(value) - (extra_sign_bits >> 3) ; + } + + return length; + } + + static void inline encode(size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + if(length <= 0x7F) + { + buffer.putByte(static_cast(length)); + } + else + { + size_t lenlen = get(length); + if(lenlen > 0x7F) + { + ctx.refErrorCtx().sizeRangeError(length, 0, 0x7F); + } + else + { + uint8_t bt = static_cast(lenlen); + bt |= 0x80; + buffer.putByte(bt); + Tools::put_bytes(length, lenlen, ctx); + } + } + + } + + static size_t inline decode(DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + size_t length = 0; + + uint8_t const* data = buffer.getBytes(1); + + if(data) + { + if(!(data[0] & 0x80)) + { + length = data[0]; + } + else + { + size_t lenlen = data[0] & 0x7F; + + if(lenlen) + Tools::get_bytes(length, lenlen, ctx); + else + length = indefinite_length; + } + } + + return length; + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp new file mode 100644 index 0000000..0ff9366 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/opentype.hpp @@ -0,0 +1,73 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* OpenType +***************************************************************************************/ +struct OpenType +{ + static tag_value_t decode(DecoderCtx& ctx, size_t& length, tag_value_t const* tag_ptr = nullptr) + { + auto & buffer = ctx.refBuffer(); + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + length = Length::decode(ctx); + + if(!length) + { + //just return + } + else if(length == indefinite_length) + { + tag_value_t _tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length); + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + size_t _length; + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + decode(ctx, _length); + buffer.set_end(end); + } + } + return tag; + } +}; + +} //namespace ber +} //namespace asn \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp new file mode 100644 index 0000000..dba9733 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tag.hpp @@ -0,0 +1,163 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define IE_CLASS_SHIFT 6 +#define IE_PC_SHIFT 5 +#define IE_BIG_TAG_FST_OCTET 0b011111 + +namespace asn { +namespace ber { + +constexpr tag_value_t invalid_tag = std::numeric_limits::max(); + +/*************************************************************************************** +* Tag +***************************************************************************************/ +template +struct Tag; + +template +struct Tag > +{ + static constexpr tag_value_t value() + { + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= static_cast(IE::asn_identifier_t::tag_value); + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + ctx.refBuffer().putByte(static_cast(value())); + } +}; + + +template +struct Tag= 31) > > +{ + static constexpr tag_value_t value() + { + static_assert(IE::asn_identifier_t::tag_value > 0, "null tag value"); + + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= IE_BIG_TAG_FST_OCTET; + + size_t leadbits = __builtin_clzll(IE::asn_identifier_t::tag_value); + tag_value_t tv = IE::asn_identifier_t::tag_value << leadbits; + size_t length = sizeof(tag_value_t)*CHAR_BIT - leadbits; + + size_t shift = sizeof(tag_value_t)*CHAR_BIT - 7; + + size_t lb = length % 7; + if(lb) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> (shift + 7 - lb)); + tv <<= lb; + length -= lb; + } + + while(length) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> shift); + tv <<= 7; + length -= 7; + } + v &= ((tag_value_t)-1) & ~((tag_value_t) 0x80); + + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + size_t size = 0; + tag_value_t tv = data(size); + ctx.refBuffer().putBytes(reinterpret_cast(&tv), size); + } + +private: + + static constexpr tag_value_t data(size_t& size) + { + tag_value_t rv = 0; + tag_value_t tv = value(); + size = sizeof(tag_value_t) - (__builtin_clzll(tv) >> 3); + + uint8_t* ptr = reinterpret_cast(&rv); + + size_t shift = (size - 1) * 8; + for(size_t i = 0; i < size; ++i) + { + ptr[i] = static_cast(tv >> shift); + shift -= 8; + } + + return rv; + } +}; + +inline +tag_value_t get_tag(DecoderCtx& ctx) +{ + tag_value_t rv = 0; + auto & buffer = ctx.refBuffer(); + uint8_t const* data = buffer.getBytes(1); + + if (data) + { + rv = data[0]; + if((data[0] & 0x1F) == IE_BIG_TAG_FST_OCTET) + { + size_t limit = sizeof(tag_value_t) - 1; + while((data = buffer.getBytes(1))) + { + if(!limit) + { + ctx.refErrorCtx().sizeRangeError(0); + break; + } + + rv <<= 8; + rv |= data[0]; + --limit; + + if(!(data[0] & 0x80)) + break; + } + } + } + return rv; +} + +} //namespace ber +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp new file mode 100644 index 0000000..9f9bc9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/tools.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; + + + template + static void put_bytes(T value, size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + size_t shift = (length - 1) << 3; + for(size_t i = 0; i < length; ++i) + { + buffer.putByte(static_cast(value >> shift)); + shift -= 8; + } + } + + template + static void get_bytes(T& value, size_t length, DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + value = 0; + uint8_t const* data = buffer.getBytes(length); + + if(data) + { + value = data[0]; + for(size_t i = 1; i < length; ++i) + { + value <<= 8; + value |= data[i]; + } + } + } + +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp new file mode 100644 index 0000000..98c1f05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/ber/visitor.hpp @@ -0,0 +1,177 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* VisitorEncoder +***************************************************************************************/ +struct VisitorEncoder +{ + VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx){} + + template bool operator() (ELM const& elm) + { + if(m_ctx) + Element::run(elm, m_ctx); + return static_cast(m_ctx); + } +private: + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* VisitorDecoder +***************************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag){} + + template bool operator() (ELM& elm) + { + if(m_ctx) + Element::run(elm, m_ctx, &m_tag); + return static_cast(m_ctx); + } + +private: + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +/*************************************************************************************** +* VisitorAdapter +***************************************************************************************/ +template +struct VisitorAdapter //default +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + Element::run(ie, ctx, &tag); + } +}; + +template +struct VisitorAdapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + VisitorDecoder v(ctx, tag); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; + +/*************************************************************************************** +* VisitorEncoderSeq +***************************************************************************************/ +template +struct VisitorEncoderSeq +{ + VisitorEncoderSeq(EncoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM const& elm) + { + if(ELM::optional) + { + if(elm.is_valid()) + VisitorAdapter::run(elm, m_ctx, m_cont); + } + else + VisitorAdapter::run(elm, m_ctx, m_cont); + } + + EncoderCtx& m_ctx; + CONT const& m_cont; +}; + + +/*************************************************************************************** +* VisitorDecoderSeq +***************************************************************************************/ +template +struct VisitorDecoderSeq +{ + VisitorDecoderSeq(DecoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM& elm) + { + if(m_ctx) + { + tag_value_t tag; + + if(invalid_tag == m_tag && m_ctx.refBuffer().getBytesLeft()) + { + m_tag = get_tag(m_ctx); + } + tag = m_tag; + + if(m_ctx) + { + if (!Element::is_matched(tag)) + { + if(!ELM::optional) + { + m_ctx.refErrorCtx().tagError(static_cast(tag)); + } + } + else + { + m_tag = invalid_tag; + VisitorAdapter::run(elm, m_ctx, m_cont, tag); + elm.setpresent(true); + } + } + } + } + + tag_value_t get_unhandled_tag() const {return m_tag;} + + DecoderCtx& m_ctx; + tag_value_t m_tag {invalid_tag}; + CONT const& m_cont; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp new file mode 100644 index 0000000..4022b48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/buffer.hpp @@ -0,0 +1,689 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/error_context.hpp" +#include "value_traits.hpp" + +//#define CODEC_BIT_TRACE_ENABLE +#ifdef CODEC_BIT_TRACE_ENABLE + #define CODEC_BIT_TRACE(FMT, args...) printf("%s[%u]:" FMT "\n", std::strrchr(__FILE__, '/') + 1, __LINE__, ##args) +#else + #define CODEC_BIT_TRACE(...) +#endif + +namespace asn { + +template +struct bit_accessor; + +template +struct bit_accessor_cross_byte; + +template +class buffer +{ +public: + typedef PTR pointer; + + explicit buffer(error_context& err) + : m_errCtx(err) + {} + + void reset(pointer data, u32 size) + { + m_start = data; + m_end = m_start + size; + m_current = m_start; + m_shift = 0; + } + + u32 getOffset() const { return begin() - m_start; } + + u32 getBytesLeft() const { return end() - begin(); } + u32 getBytesUsed() const { return getOffset() + (get_shift() ? 1 : 0); } + + u8 get_shift() const { return m_shift; } + void reset_shift() { m_shift = 0; } + void byte_align() { if (get_shift()) { m_shift = 0; ++m_current; } } + + pointer advance(u32 delta) { pointer p = begin(); m_current += delta; return p; } + + pointer begin() const { return m_current; } + + void set_begin(pointer ptr, u8 bit_shift) + { + if (m_start <= ptr && ptr <= end()) + { + m_current = ptr; + m_shift = bit_shift; + } + } + + pointer end() const { return m_end; } + void set_end(pointer v) { m_end = v; } + + bool checkAlignment(char const* name, u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + return false; + } + + bool checkBytesLeft(char const* name, u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(char const* name, u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(name, getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(char const* name, u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(char const* name, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(char const* name, u32 max_requested, u32& num_bytes) + { + if (checkAlignment(name)) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(char const* name, u8 byte) + { + if (checkBytesAndAlignment(name, 1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(char const* name, void const* in, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + return true; + } + return false; + } + + bool checkAlignment(u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + return false; + } + + bool checkBytesLeft(u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(u32 num_bytes) + { + if (checkBytesAndAlignment(num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(u32 max_requested, u32& num_bytes) + { + if (checkAlignment()) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(u8 byte) + { + if (checkBytesAndAlignment(1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(void const* in, u32 num_bytes) + { + if (num_bytes) + { + if(checkBytesAndAlignment(num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + } + else + return false; + } + return true; + } + + char const* toString() const + { + static char sz[64]; + u8 const* p = begin(); + snprintf(sz, sizeof(sz), "%02X %02X %02X %02X [%02X]=%p@%u..%p -%u bits: +%u bytes", p[-4], p[-3], p[-2], p[-1], p[0], p + , getOffset(), end(), get_shift(), getBytesLeft()); + return sz; + } + +private: + template + friend class bit_accessor; + + template + friend struct bit_accessor_cross_byte; + + template + void push_u8(U value) { *m_current++ = static_cast(value); } + template + void put_u8(U value) { m_current[0] = static_cast(value); } + +//khxm68: TODO: won't compile without it. WTF?! +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + u8 get_u8() const { return m_current[0]; } +#pragma GCC diagnostic pop + u8 extract_u8(u8 value, u8 mask, u8 shift) const + { return (get_u8() & ~(mask << shift)) | ((value & mask) << shift); } + + u16 get_u16() const { return (static_cast(m_current[0]) << 8) | m_current[1]; } + u16 extract_u16(u16 value, u16 mask, u16 shift) const + { return (get_u16() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u24() const { return (static_cast(m_current[0]) << 16) | (static_cast(m_current[1]) << 8) | m_current[2]; } + u32 extract_u24(u32 value, u32 mask, u32 shift) const + { return (get_u24() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u32() const { return (static_cast(m_current[0]) << 24) | (static_cast(m_current[1]) << 16) | (static_cast(m_current[2]) << 8) | m_current[3]; } + u32 extract_u32(u32 value, u32 mask, u32 shift) const + { return (get_u32() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 getBitsLeft() const { return begin() == end() ? 0 : (getBytesLeft()*8 - get_shift()); } + + void bit_advance(u8 num_bits) + { + m_shift += num_bits; + if (get_shift() > 7) + { + reset_shift(); + m_current++; + } + } + + pointer m_current; + pointer m_end; + pointer m_start; + u8 m_shift; + error_context& m_errCtx; +}; + +template //LSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //LSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = buf.extract_u16(value, mask, shift); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + +template //LSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //LSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + + +template //MSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //MSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = buf.extract_u16(value, mask, shift); + + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + + +template //MSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //MSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + +/******************************************************************************** +bit_accessor_cross_byte +*********************************************************************************/ +template<> +struct bit_accessor_cross_byte //MSB +{ + static bool put(u8 value, u8 length, buffer& buf) + { + u8 spare = 8 - buf.get_shift(); + + if (spare < length) + { + length -= spare; + u8 chunk = value >> length; + u8 const mask = static_cast((1u << spare) - 1); + u8 data = buf.extract_u8(chunk, mask, 0); + buf.put_u8(data); + + buf.bit_advance(spare); + } + if (buf.checkBytesLeft(1)) + { + u8 const mask = static_cast((1u << length) - 1); + u8 const shift = 8 - buf.get_shift() - length; + u8 data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + buf.bit_advance(length); + + return true; + } + return false; + } + + static u8 get(u8 length, buffer& buf) + { + u8 rval {0}; + u8 const mask = static_cast((1u << length) - 1); + u8 const spare = 8 - buf.get_shift(); + if (spare < length) + { + length -= spare; + rval = buf.get_u8() << length; + buf.bit_advance(spare); + } + if (length && buf.checkBytesLeft(1)) + { + u8 val = buf.get_u8(); + val = val >> (8 - length - buf.get_shift()); + rval |= val; + rval &= mask; + buf.bit_advance(length); + } + return rval; + } + + static void padByte(buffer& buf) + { + if (buf.get_shift()) + { + u8 mask = static_cast((1u << buf.get_shift()) - 1); + mask = mask << (8 - buf.get_shift()); + buf.begin()[0] &= mask; + buf.bit_advance(8 - buf.get_shift()); + } + } + + static void padByte(buffer& buf) + { + if(buf.get_shift()) + buf.bit_advance(8 - buf.get_shift()); + } + + static bool put(const u8* in, size_t len, buffer& buf, u8 trail_bitsqty) + { + if (len) + { + if (trail_bitsqty) + { + buf.putBytes(in, len - 1); + u8 last_byte = in[len - 1]; + last_byte = last_byte >> (8 - trail_bitsqty); + return put(last_byte, trail_bitsqty, buf); + } + buf.putBytes(in, len); + } + return true; + } +}; + +} //end: namespace asn + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp new file mode 100644 index 0000000..008be98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/chunked_allocator.hpp @@ -0,0 +1,84 @@ +#pragma once + +/******************************************************************************* +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include //std::bad_alloc +#include +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +template +class chunked_allocator +{ +public: + using allocator_t = ALLOC; + + chunked_allocator() + { + put_chunk(new_chunk()); + } + + template + decltype(auto) emplace_back(TSEQ& v) + { + try + { + return v.emplace_back(m_allocator); + } + catch (std::bad_alloc const&) + { + put_chunk(new_chunk()); + return v.emplace_back(m_allocator); + } + } + + uint8_t* alloc_bytes(std::size_t sz) + { + //TODO: unify allocation: now it returns nullptr instead of throw! + auto* ret = m_allocator.alloc_bytes(sz); + if (!ret) + { + put_chunk(new_chunk()); + ret = m_allocator.alloc_bytes(sz); + } + return ret; + } + +private: + static constexpr std::size_t CHUNK_SIZE = 32*1024; + using chunk_t = std::array; + using chunks_t = std::list; + + chunk_t& new_chunk() { return m_chunks.emplace_back(); } + void put_chunk(chunk_t& c) { m_allocator.reset(c.data(), c.size()); } + + + allocator_t m_allocator; + chunks_t m_chunks; +}; + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp new file mode 100644 index 0000000..e8e787d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/constraints.hpp @@ -0,0 +1,140 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +using bound_t = int64_t; + +enum class constraint_type : uint8_t +{ + UNCONSTRAINED, + CONSTRAINED, + SEMICONSTRAINED, + CONSTRAINED_EXTENDED, + SEMICONSTRAINED_EXTENDED +}; + +template +struct span +{ + static_assert(UB >= LB, "UPPER >= LOWER"); + static constexpr bound_t lower_bound = LB; + static constexpr bound_t upper_bound = UB; +}; + +template +struct pair +{ + T const lower_bound; + T const upper_bound; +}; + +template +struct one : span {}; + +struct max : one::max()> {}; +struct min : one::min()> {}; + +static constexpr bound_t MAX = std::numeric_limits::max(); +static constexpr bound_t MIN = std::numeric_limits::min(); + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = std::min({RANGE::lower_bound...}); + static constexpr bound_t upper_bound = std::max({RANGE::upper_bound...}); + + static constexpr constraint_type type = + (Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED : + (Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED : + (Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED : constraint_type::UNCONSTRAINED; + + static constexpr bool is_signed = lower_bound < 0; + + static constexpr bound_t num_spans = static_cast(sizeof...(RANGE)); + static constexpr pair bounds[] = {{RANGE::lower_bound, RANGE::upper_bound}...}; + + using boundary_type = bound_t; + + static constexpr bool is_extended(bound_t val) + { + for (bound_t i = 0; i < num_spans; ++i) + { + auto const& p = bounds[i]; + if (val <= p.upper_bound) + { + if(val < p.lower_bound) + return true; + return false; + } + } + return true; + } +}; + +template +constexpr pair constraints::bounds[]; + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr constraint_type type = constraint_type::UNCONSTRAINED; + static constexpr bound_t lower_bound = std::numeric_limits::min(); + static constexpr bound_t upper_bound = std::numeric_limits::max(); + + static constexpr bool is_extended(bound_t val) {return true;} +}; + +/*************************************************************************************** +* RANGE for sequences +***************************************************************************************/ +template +struct seq_range +{ + static_assert(Extended || TotalNumEntries > 0, "TotalNumEntries must be > 0"); + static_assert(NumExtEntries <= TotalNumEntries, "NumExtEntries must be <= TotalNumEntries"); + + static constexpr constraint_type type = Extended ? constraint_type::CONSTRAINED_EXTENDED : constraint_type::CONSTRAINED; + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = 0; + static constexpr bound_t upper_bound = TotalNumEntries - NumExtEntries - 1; + static constexpr bound_t default_value = lower_bound; + static constexpr bound_t total_num_entries = TotalNumEntries; + + using boundary_type = bound_t; + using value_type = uint32_t; +}; + +} // namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp new file mode 100644 index 0000000..9cbcd42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/elements.hpp @@ -0,0 +1,565 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/constraints.hpp" +#include "asn/identifier.hpp" + +namespace asn { + +enum class element_type : uint8_t +{ + T_BOOLEAN + ,T_INTEGER + ,T_ENUMERATED + ,T_REAL + ,T_BITSTRING + ,T_OCTETSTRING + ,T_NULL + ,T_SEQUENCE + ,T_SEQUENCE_OF + ,T_SET + ,T_SET_OF + ,T_CHOICE + ,T_OBJECTIDENTIFIER + ,T_OBJFIELD_FTV + ,T_OBJFIELD_TF +}; + +/*************************************************************************************** +* BASE +***************************************************************************************/ + +struct base +{ + static constexpr bool optional = false; + static constexpr bool extension = false; + + static constexpr char const* name() {return "";} + + void setpresent(bool p) {is_set = p;} + void clear() {is_set = false;} + + bool is_valid() const {return is_set;} + +protected: + base() {} + void set() {is_set = true;} +protected: + bool is_set {false}; + + base& operator=(const base&) = delete; + base (const base&) = delete; +}; + +/*************************************************************************************** +* IE_NULL +***************************************************************************************/ + +struct nulltype : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::NULL_TYPE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_NULL; + static constexpr const char* name() {return "NULL";} + + void clear() {} +}; + +/*************************************************************************************** +* T_BOOLEAN +***************************************************************************************/ + +struct boolean : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BOOLEAN), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BOOLEAN; + static constexpr const char* name() {return "BOOLEAN";} + + using value_type = bool; + + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = false; base::clear();} + +private: + value_type m_value {false}; +}; + +/*************************************************************************************** +* T_INTEGER +***************************************************************************************/ +template < class Constraint = constraints > +struct integer : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::INTEGER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_INTEGER; + static constexpr const char* name() {return "INTEGER";} + + using constraint_t = Constraint; + using value_type = int64_t; + + bool equal(value_type v) const {return m_value == v;} + + void set(value_type v) { m_value = v; base::set();} + value_type get() const { return m_value; } + + void clear() { m_value = 0; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_ENUMERATED +***************************************************************************************/ +template +struct enumerated : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::ENUMERATED), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_ENUMERATED; + static constexpr const char* name() {return "ENUMERATED";} + + using constraint_t = seq_range; + using value_type = typename constraint_t::value_type; + + bool equal(value_type v) const {return m_value == v;} + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = constraint_t::default_value; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_OCTETSTRING +***************************************************************************************/ +template< class Constraint = constraints > +struct ostring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::OCTET_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OCTETSTRING; + static constexpr const char* name() {return "OCTET STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data) : m_size(size), m_data(reinterpret_cast(data)) {} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + + using const_iterator = uint8_t const*; + const_iterator begin() const { return data(); } + const_iterator end() const { return begin() + size(); } + + void assign(void const* p, size_t sz) { m_data = static_cast(p); m_size = sz; } + + private: + const uint8_t* m_data{ 0 }; + size_t m_size{ 0 }; + }; + + value_type const& get() const { return m_value; } + + //Use std::string, std::vector or IE_OSTR::value_type + template value_type const& set(T const& tval) + { + set(tval.size(), tval.data()); + base::set(); + return m_value; + } + + void set(size_t size, void const* data) + { + m_value.assign(data, size); + base::set(); + } + + template + ostring& emplace(AT& allocator, size_t size, uint8_t const * data_in) + { + if(size) + { + base::clear(); + uint8_t* data_out = allocator.alloc_bytes(size); + if (data_out) + { + memcpy(data_out, data_in, size); + set(size, data_out); + } + } + else + base::set(); + return *this; + } + + template + ostring& emplace(AT& allocator, T const& tval) + { + return emplace(allocator, tval.size(), reinterpret_cast(tval.data())); + } + + void clear() { m_value = value_type{}; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_BITSTRING +***************************************************************************************/ +template > +struct bstring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BIT_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BITSTRING; + static constexpr const char* name() {return "BIT STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data, size_t bitqty) : m_size(size), m_data(reinterpret_cast(data)), m_bitqty(bitqty){} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + size_t bitqty() const { return m_bitqty; } + + void assign(void const* p, size_t sz, size_t bits) { m_data = static_cast(p); m_size = sz; m_bitqty = bits; } + + private: + const uint8_t* m_data{ nullptr }; + size_t m_size{ 0 }; + size_t m_bitqty{ 0 }; + }; + + value_type const& get_buffer() const { return m_value; } + + size_t get_bitqty() const { return m_value.bitqty(); } + + //Use std::string, std::vector or IE_BSTR::value_type + template value_type const& set_buffer(T& tval, size_t bitqty) + { + m_value.assign(tval.data(), tval.size(), bitqty); + base::set(); + return m_value; + } + + void set_buffer(size_t bitqty, const uint8_t* data) + { + m_value.assign(data, (bitqty +7) >> 3, bitqty); + base::set(); + } + + template + bstring& emplace_buffer(AT& allocator, size_t bitqty, uint8_t const * data_in) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + memcpy(data_out, data_in, size); + set_buffer(bitqty, data_out); + return *this; + } + + void clear() { m_value = value_type{}; base::clear();} + + uint64_t get_number() const + { + uint64_t retval{0}; + size_t i = 0; + for(; i < m_value.size() - 1; ++i) + { + retval <<= 8; + retval |= m_value.data()[i]; + } + + uint8_t shift = m_value.bitqty() % 8; + if (shift) + { + retval <<= shift; + } + else + { + retval <<= 8; + } + + retval |= m_value.data()[i]; + + return retval; + } + + template + void set_number(AT& allocator, size_t bitqty, uint64_t data) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + + const uint8_t shift = bitqty % 8; + if (shift) + { + data_out[size-1] = data & (0xFF >> (8 - shift)); + data >>= shift; + } + else + { + data_out[size-1] = data & (0xFF); + data >>= 8; + } + + for (size_t i = 1; i <= size - 1; i++) + { + data_out[size-1-i] = data & (0xFF); + data >>= 8; + } + + m_value.assign(data_out, size, bitqty); + base::set(); + } + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_CHOICE +***************************************************************************************/ +template +struct choice : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::CHOICE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_CHOICE; + static constexpr const char* name() {return "CHOICE";} + + using constraint_t = seq_range; + using index_type = size_t; + using value_type = size_t; + + static constexpr index_type fst_index = 1; + static constexpr index_type ext_index = fst_index + TotalNumEntries; + + static index_type normalize(index_type idx) {return idx - fst_index;} + static index_type denormalize(index_type idx) {return idx + fst_index;} +}; + +/*************************************************************************************** +* T_SEQUENCE +***************************************************************************************/ +template +struct sequence : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE; + static constexpr const char* name() {return "SEQUENCE";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; + +}; + +/*************************************************************************************** +* T_SEQUENCE_OF +***************************************************************************************/ +template > +struct sequenceof : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE_OF; + static constexpr const char* name() {return "SEQUENCE OF";} + + struct value_type : T, boost::intrusive::list_base_hook< boost::intrusive::link_mode > + { + value_type(){} + private: + value_type& operator=(const value_type&) = delete; + value_type (const value_type&) = delete; + }; + + using values_t = boost::intrusive::list>; + using constraint_t = Constraint; + using element_t = T; + + void clear() { m_list.clear(); base::clear();} + size_t size() const { return m_list.size(); } + template + void sort(Predicate const& p) { m_list.sort(p); } + + template + void set(V& v) {for(auto & e : v) {m_list.push_back(e);} base::set();} + + void push_back(value_type& v) { m_list.push_back(v); base::set();} + + template //Note: Allocator must return word alligned buffer! + T& emplace_back(AT& allocator) + { + uint8_t* data = allocator.alloc_bytes(sizeof(value_type)); + if(!data) + throw std::bad_alloc(); + value_type* v = new (data) value_type; + push_back(*v); + return *v; + }; + + using iterator = typename values_t::iterator; + iterator begin() { return m_list.begin(); } + iterator end() { return m_list.end(); } + + using const_iterator = typename values_t::const_iterator; + const_iterator begin() const { return m_list.begin(); } + const_iterator end() const { return m_list.end(); } + + sequenceof(){} + +private: + values_t m_list; +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct fixedtypefield : T +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_FTV; + + T& ref_nested() {return *this;} + T const & ref_nested() const {return *this;} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct typefield : base +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_TF; + static constexpr const char* name() {return "type-field";} + + typefield& ref_nested() {return *this;} + typefield const& ref_nested() const {return *this;} + + bool is_unknown() const {return false;} +}; + +/*************************************************************************************** +* T_OBJECTIDENTIFIER +***************************************************************************************/ +struct oid : ostring<> +{ + using asn_identifier_t = identifier(tag_rvalue_t::OBJECT_IDENTIFIER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OBJECTIDENTIFIER; + static constexpr const char* name() {return "OBJECT IDENTIFIER";} +}; + +/*************************************************************************************** +* T_PRINTABLESTRING +***************************************************************************************/ +template > +struct printable_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::PrintableString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "PrintableString";} +}; + +/*************************************************************************************** +* T_IA5_STRING +***************************************************************************************/ +template > +struct ia5_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::IA5String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_GRAPHIC_STRING +***************************************************************************************/ +template > +struct graphic_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::GraphicString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_UTF8_STRING +***************************************************************************************/ +template > +struct utf8_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::UTF8String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "UTF8String";} +}; + +/*************************************************************************************** +* T_SET +***************************************************************************************/ +template +struct set : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET; + static constexpr const char* name() {return "SET";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; +}; + +/*************************************************************************************** +* T_SET_OF +***************************************************************************************/ +template > +struct setof : sequenceof +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET_OF; + static constexpr const char* name() {return "SET OF";} +}; +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp new file mode 100644 index 0000000..8a7285a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/error_context.hpp @@ -0,0 +1,267 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + + +// Local Includes: Application specific classes, functions, and libraries +#include "type_defs.h" + +namespace asn { + +class error_context +{ +public: + enum error_e : u8 + { + SUCCESS = 0 + ,INCORRECT_LENGTH_BITS + ,INCORRECT_LENGTH_BYTES + ,ALIGNMENT + ,INCORRECT_VALUE + ,INCORRECT_CHOICE_TAG + ,INCORRECT_IE_TAG + ,VALUE_OUT_OF_RANGE + ,SIZE_OUT_OF_RANGE + ,ALLOC_NO_MEMORY + ,NO_OBJECT + ,NO_MANDATORY + ,WRONG_END_OF_CONTENT + ,UNSUPPORTED + ,UNSPECIFIED + }; + + explicit operator bool() const { return SUCCESS == m_error; } + + void reset() { m_error = SUCCESS; } + error_e getError() const { return m_error; } + + char const* toString() const; + + void alignmentError(u32 shift); + void lengthErrorBytes(u32 bytes_left, u32 requested); + void lengthErrorBits(u32 bits_left, u32 requested); + void valueError(u32 got, u32 expected, u32 ofs); + void tagError(u32 tag); + void valueRangeError(size_t value); + void sizeRangeError(size_t size, size_t low = 0, size_t high = 0); + void allocatorNoMem(size_t bytes_left, size_t bytes_required); + void errorUnsupported() {setError(UNSUPPORTED);} + void errorUnspecified() {setError(UNSPECIFIED);} + void errorNoObject(const char* container_name_); + void errorNoMandatory(); + void errorWrongEndOfContent() {setError(WRONG_END_OF_CONTENT);} + + //to inline in choice decoder: TODO: think of changing it! + void choiceError(char const* name, u32 id) + { + m_name = name; + m_param[0] = id; + setError(INCORRECT_CHOICE_TAG); + } + //Name of the being processed IE + void ie_name(const char* name) { m_ie_name = name; } + char const* ie_name() const { return m_ie_name; } + + void container_name(const char* name) { m_container_name = name; } + char const* container_name() const { return m_container_name; } + + +private: + void setError(error_e n) { m_error = n; } + + enum { MAX_PARAMS = 3 }; + error_e m_error; + char const* m_name; + char const* m_ie_name {""}; + char const* m_container_name {""}; + size_t m_param[MAX_PARAMS]; + +}; + +inline +void error_context::errorNoObject(const char* c_name) +{ + container_name(c_name); + m_name = m_ie_name; + setError(NO_OBJECT); +} + +inline +void error_context::errorNoMandatory() +{ + m_name = m_ie_name; + setError(NO_MANDATORY); +} + +inline +void error_context::alignmentError(u32 shift) +{ + m_name = m_ie_name; + m_param[0] = shift; + setError(ALIGNMENT); +} + +inline +void error_context::lengthErrorBytes(u32 bytes_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BYTES); +} + +inline +void error_context::lengthErrorBits(u32 bits_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bits_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BITS); +} + +inline +void error_context::valueError(u32 got, u32 expected, u32 ofs) +{ + m_name = m_ie_name; + m_param[0] = got; + m_param[1] = expected; + m_param[2] = ofs; + setError(INCORRECT_VALUE); +} + +inline +void error_context::tagError(u32 tag) +{ + m_name = m_ie_name; + m_param[0] = tag; + setError(INCORRECT_IE_TAG); +} + +inline +void error_context::valueRangeError(size_t value) +{ + m_name = m_ie_name; + m_param[0] = value; + setError(VALUE_OUT_OF_RANGE); +} + +inline +void error_context::sizeRangeError(size_t size, size_t low, size_t high) +{ + m_name = m_ie_name; + m_param[0] = size; + m_param[1] = low; + m_param[2] = high; + setError(SIZE_OUT_OF_RANGE); +} + +inline +void error_context::allocatorNoMem(size_t bytes_left, size_t bytes_required) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = bytes_required; + setError(ALLOC_NO_MEMORY); +} + +inline +char const* error_context::toString() const +{ + static char sz[256]; + + switch (m_error) + { + case SUCCESS: + return "OK"; + + case INCORRECT_LENGTH_BITS: + snprintf(sz, sizeof(sz)-1, "%zu bits left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + + case INCORRECT_LENGTH_BYTES: + snprintf(sz, sizeof(sz)-1, "%zu bytes left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + case ALIGNMENT: + snprintf(sz, sizeof(sz)-1, "misaligned '%s::%s': shift %zu bits", m_container_name, m_name, m_param[0]); + break; + + case INCORRECT_VALUE: + snprintf(sz, sizeof(sz)-1, "Wrong value of '%s::%s' at %zu: 0x%zX expected=0x%zX", m_container_name, m_name, m_param[2], m_param[0], m_param[1]); + break; + + case INCORRECT_CHOICE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong choice tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case INCORRECT_IE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case VALUE_OUT_OF_RANGE: + snprintf(sz, sizeof(sz) - 1, "Value is out of the range '%s::%s': value: %zu", m_container_name, m_name, m_param[0]); + break; + + case SIZE_OUT_OF_RANGE: + if (m_param[2]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range [%zu, %zu] in '%s::%s'", m_param[0], m_param[1], m_param[2], m_container_name, m_name); + } + else + { + if (m_param[1]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is less than %zu in '%s::%s'", m_param[0], m_param[1], m_container_name, m_name); + } + else + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range in '%s::%s'", m_param[0], m_container_name, m_name); + } + } + break; + + case ALLOC_NO_MEMORY: + snprintf(sz, sizeof(sz) - 1, "Allocator memory has ended '%s::%s': left bytes: %zu; required bytes: %zu", m_container_name, m_name, m_param[0], m_param[1]); + break; + case NO_OBJECT: + snprintf(sz, sizeof(sz) - 1, "Component relation constraint violated '%s::%s'", m_container_name, m_name); + break; + case NO_MANDATORY: + snprintf(sz, sizeof(sz) - 1, "no mandatory '%s::%s' is found", m_container_name, m_name); + break; + case UNSUPPORTED: + snprintf(sz, sizeof(sz) - 1, "unsupported object '%s::%s' is found", m_container_name, m_name); + return "unsupported"; + break; + case UNSPECIFIED: + snprintf(sz, sizeof(sz) - 1, "unspecified object '%s::%s' is found", m_container_name, m_name); + return "unspecified"; + break; + case WRONG_END_OF_CONTENT: + snprintf(sz, sizeof(sz) - 1, "wrong end of content in object '%s::%s'", m_container_name, m_name); + return "wrong end of content"; + break; + } + + return sz; +} + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp new file mode 100644 index 0000000..9b603fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/identifier.hpp @@ -0,0 +1,97 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +enum class class_type_t : uint8_t +{ + UNIVERSAL + ,APPLICATION + ,CONTEXT + ,PRIVATE + ,UNSPECIFIED //reserved for internal use +}; + +enum class tag_type_t : uint8_t +{ + EXPLICIT + ,IMPLICIT + ,AUTOMATIC +}; + +using tag_value_t = uint64_t; + +template +struct identifier +{ + static constexpr class_type_t class_type = CT; + static constexpr tag_value_t tag_value = TAG; + static constexpr tag_type_t tag_type = TT; +}; + + +enum class tag_rvalue_t : tag_value_t +{ + BOOLEAN = 1 + ,INTEGER = 2 + ,BIT_STRING = 3 + ,OCTET_STRING = 4 + ,NULL_TYPE = 5 + ,OBJECT_IDENTIFIER = 6 + ,REAL = 9 + ,ENUMERATED = 10 + ,SEQUENCE = 16 + ,SEQUENCE_OF = 16 + ,UTF8String = 12 + ,NumericString = 18 + ,IA5String = 22 + ,VisibleString = 26 + ,DATE = 31 + ,TIME_OF_DAY = 32 + ,DATE_TIME = 33 + ,DURATION = 34 + ,ObjectDescriptor = 7 + ,EXTERNAL = 8 + ,EMBEDDED_PDV = 11 + ,OID_IRI = 35 + ,RELATIVE_OID_IRI = 36 + ,SET = 17 + ,SET_OF = 17 + ,UTCTime = 23 + ,GeneralizedTime = 24 + ,PrintableString = 19 + ,T61String = 20 + ,VideotexString = 21 + ,GraphicString = 25 + ,GeneralString = 27 + ,UniversalString = 28 + ,CHARACTER_STRING = 29 + ,BMPString = 30 + ,ISO646String = 26 + ,TeletexString = 20 + ,CHOICE = 99 // fake id for internal use +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp new file mode 100644 index 0000000..6ba2f15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/binary_integer.hpp @@ -0,0 +1,168 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/length.hpp" + +namespace asn { +namespace per { + +template +struct BinaryIntegerLength; + +/*************************************************************************************** +* Encoding of a non-negative-binary-integer (X.691 10.3) +***************************************************************************************/ +template +struct NonnegativeBinaryInteger +{ + static void inline run(u64 val, EncoderCtx& ctx) + { + if(val) + { + size_t const len = sizeof(val) - (__builtin_clzll(val) >> 3); + + BinaryIntegerLength< Range >::run(ctx, len); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 buff[len]; + size_t shift = (len - 1) << 3; + for(size_t i = 0; i < len; ++i) + { + buff[i] = static_cast(val >> shift); + shift -= 8; + } + + ctx.refBuffer().putBytes(buff, len); + } + else + { + BinaryIntegerLength< Range >::run(ctx, 1); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(0); + } + } + template + static void inline run(T& retval, DecoderCtx& ctx, bool extended_val) + { + retval = 0; + size_t len = (size_t)BinaryIntegerLength< Range >::run(ctx, extended_val); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(len); + + if (data) + { + for (size_t i = 0; i < len; ++i) + { + retval = retval << 8; + retval |= data[i]; + } + } + } +}; + +/*************************************************************************************** +* Encoding of a 2's-complement-binary-integer (X.691 10.4) +***************************************************************************************/ + +template +struct TwosComplementBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u64 val = ie.get(); + u64 tval = val; + u64 mask = static_cast(-128); + u8 len = 1; + u8 i = 7; + + u8 buf[8]; + + while (len < 8) + { + buf[i] = static_cast(tval); + if (!(val & mask) || (val & mask) == mask) + break; + mask = mask << 8; + tval = tval >> 8; + len++; + i--; + } + + ctx.refBuffer().putByte(len) && ctx.refBuffer().putBytes(&buf[i], len); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = nullptr; + typename IE::value_type val = 0; + + u8 const* len = ctx.refBuffer().getBytes(1); + + if (len && (*len) <= 8 && (data = ctx.refBuffer().getBytes(*len))) + { + for (u8 i = 0; i < *len; ++i) + { + val = val << 8; + val |= data[i]; + } + } + ie.set(val); + } +}; + +/*************************************************************************************** +* Encoding of a normally small non-negativebinary integer (X.691 10.6) +***************************************************************************************/ +template +struct NormallySmallNonnegativeBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx, typename IE::constraint_t::boundary_type val) + { + if (val <= 63) + { + Tools::bit_accessor::put(static_cast(val), 7, ctx.refBuffer()); //7 bits ('0' indicator + value) + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); //1 bit ('1' indicator) + NonnegativeBinaryInteger::run(val, ctx); + } + } + static TValue inline run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) { + TValue rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, true); + return rval; + } + return Tools::bit_accessor::get(6, ctx.refBuffer()); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp new file mode 100644 index 0000000..5d25599 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/bstring.hpp @@ -0,0 +1,279 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +//15.11 Default +template +struct BitstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +//15.8 Zero length +template +struct BitstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//15.9 Up to 6 bits, fixed length +template +struct BitstringNoExt 0)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[0])) & (0xFF >> (8 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(1); + if (data) + { + data[0] = Tools::bit_accessor::get(IE::constraint_t::upper_bound, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; +template +struct BitstringNoExt 8)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(ie.get_buffer().data()[0], 8, ctx.refBuffer()); + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[1])) & (0xFF >> (16 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(2); + if (data) + { + data[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data[1] = Tools::bit_accessor::get(IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 2); + } +}; + +//15.10 More than 6 bits, up to 64K bits, fixed length +template +struct BitstringNoExt 16)) +>> +{ + constexpr static size_t len_bytes = (IE::constraint_t::upper_bound + 7) >> 3; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + if (ie.get_buffer().size() != len_bytes) + { + ctx.refErrorCtx().sizeRangeError(ie.get_buffer().size(), len_bytes, len_bytes); + } + else + { + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = IE::constraint_t::upper_bound % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(IE::constraint_t::upper_bound, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +/**************************************************/ + +template +struct Bitstring; + +//15.6 : Extension present +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + + if (ie.get_bitqty() <= IE::constraint_t::upper_bound && ie.get_bitqty() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + BitstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = LengthDeterminant::run(ctx, true); + const size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + else + BitstringNoExt::run(ie, ctx); + } +}; + +//15.7 : No extension +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp new file mode 100644 index 0000000..f0d115c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/choice.hpp @@ -0,0 +1,136 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +Choice +*********************************************************************************/ + +/**************************************************/ +//22.6-7 Default +template +struct ChoiceNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ConstrainedWholeNumber::run(ctx, IE::normalize(ie.get_index())); + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::index_type idx = ConstrainedWholeNumber::run(ctx); + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } +}; + +//22.4 One alternative +template +struct ChoiceNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(0), ve); + } +}; + +/**************************************************/ + +template +struct Choice; + +//22.5 Extension present +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto idx = IE::normalize(ie.get_index()); + if (idx <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ChoiceNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, idx - IE::constraint_t::upper_bound - 1); + OpenTypeVisitorEncoder ve{ ctx }; + ie.encode(ve); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + typename IE::index_type idx = IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx); + if (idx >= IE::constraint_t::total_num_entries) + { + ie.set_unknown(); + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + else + { + OpenTypeVisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } + } + else + ChoiceNoExt::run(ie, ctx); + } +}; + +//22.6 No extension +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp new file mode 100644 index 0000000..176792a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/codec.hpp @@ -0,0 +1,325 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/elements.hpp" +#include "asn/per/context.hpp" +#include "asn/per/length.hpp" +#include "asn/per/integer.hpp" +#include "asn/per/enumerated.hpp" +#include "asn/per/ostring.hpp" +#include "asn/per/bstring.hpp" +#include "asn/per/sequence_of.hpp" +#include "asn/per/sequence.hpp" +#include "asn/per/choice.hpp" +#include "asn/per/visitor.hpp" +#include "asn/per/oid.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +pack +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.691 11) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get()), 1, ctx.refBuffer()); + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(0 != Tools::bit_accessor::get(1, ctx.refBuffer())); + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.691 12) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Integer::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Integer::run(ie, ctx); + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.691 13) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } +}; +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.691 15) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Bitstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Bitstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.691 16) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Octetstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Octetstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.691 17) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) { /*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.setpresent(true); + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.691 18) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + Seq::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ctx.m_container = &ie; + Seq::run(ie, ctx); + ctx.m_container = nullptr; + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.691 19) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + SequenceOf::run(ie, ctx); + + for (auto& elem : ie) + Element::run(elem, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + SequenceOf::run(ie, ctx); + + for (auto & elem : ie) + Element::run(elem, ctx); + } +}; +/*************************************************************************************** +* SET: Encoding the set type (X.691 20) +***************************************************************************************/ + + +/*************************************************************************************** +* SET OF: Encoding the set-of type (X.691 21) +***************************************************************************************/ + +/*************************************************************************************** +* CHOICE: Encoding the choice type (X.691 22) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(ie.is_valid()) + { + ctx.container_name(IE::name()); + Choice::run(ie, ctx); + } + else + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + ctx.m_container = &ie; + Choice::run(ie, ctx); + ctx.m_container = nullptr; + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type (X.691 23) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Oid::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Oid::run(ie, ctx); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + if (IE_TYPE != element_type::T_SEQUENCE && !ie.is_valid()) + { + ctx.refErrorCtx().errorNoMandatory(); + } + else + ElementType::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + if (ctx) + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + ElementType::run(ie, ctx); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp new file mode 100644 index 0000000..5b92100 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/common.hpp @@ -0,0 +1,58 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "type_defs.h" + +#include "asn/buffer.hpp" +#include "context.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace per { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; +}; + +template +struct Element; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp new file mode 100644 index 0000000..2a5d7e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/context.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + typedef u64 map_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + m_map = 0; + m_container = nullptr; + } + + bool map_elm() + { + //m_map = (m_map << 1) | (m_map >> (sizeof(m_map)*CHAR_BIT - 1)); + //return m_map & 1u; + + constexpr map_type mask = ((map_type)1) << (sizeof(map_type)*CHAR_BIT - 1); + + bool rv = m_map & mask; + m_map = m_map << 1; + + return rv; + } + + map_type set_map(map_type map) + { + map_type rval = m_map; + m_map = map; + return rval; + } + + map_type get_map() const {return m_map;} + + //Pointer to container (SEQ | CHO) + void* m_container{ nullptr }; + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + //Optional or Extension elements' presence bitmap. Used in sequences + map_type m_map{ 0 }; + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp new file mode 100644 index 0000000..c2e8851 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/enumerated.hpp @@ -0,0 +1,79 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +template +struct Enumerated; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() > IE::constraint_t::upper_bound) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, ie.get() - IE::constraint_t::upper_bound - 1); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + ie.set(IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx)); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp new file mode 100644 index 0000000..7bb93c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/integer.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +template +struct Integer; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Integer > +{ + //X.691 12.1 + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + //X.691 12.2 + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + //X.691 12.2.4, 12.2.6, 10.8s + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +// (X.691 10.7) +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(IE::constraint_t::lower_bound + val); + } +}; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(val + IE::constraint_t::lower_bound); + } + } +}; + +/*************************************************************************************** +* Encoding of an unconstrained whole number (X.691 10.8) +***************************************************************************************/ + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp new file mode 100644 index 0000000..488a830 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/length.hpp @@ -0,0 +1,238 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +* Encoding of a length determinant (X.691 10.9) +*********************************************************************************/ + +template +struct LengthDeterminant; + +struct LengthDeterminantDefault //Unconstrained length +{ + static u8 bytes_needed(size_t len) + { + if (len <= 127) + return 1; + return 2; + } + + static void run(EncoderCtx& ctx, size_t len) + { + if (len <= 127) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(len)); + } + else if (len < 16384) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + len += 0x8000; + ctx.refBuffer().putByte(static_cast(len >> 8)); + ctx.refBuffer().putByte(static_cast(len)); + } + else + { + //todo: 10.9.3.8.1 for len >= 16K + } + } + static size_t run(DecoderCtx& ctx) + { + size_t rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + { + if (*data & 0x80) + { + rval = (*data & 0x7F) << 8; + data = ctx.refBuffer().getBytes(1); + if (data) + rval |= *data; + } + else + rval = *data; + } + return rval; + } +}; + +//10.9.3.3 +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return ConstrainedWholeNumber::run(ctx); + } +}; +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + if (len > Range::upper_bound || len < Range::lower_bound) + LengthDeterminantDefault::run(ctx, len); + else + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + if (extended_len) + return LengthDeterminantDefault::run(ctx); + + return ConstrainedWholeNumber::run(ctx); + } +}; + +template +struct LengthDeterminant= 65536) > > +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +//10.9.3.4 : for "normally small length". bitmaps, sequence types +template +struct NormallySmallLength; + +template +struct NormallySmallLength > +{ + static_assert(Length > 0, "NormallySmallLength must be > 0"); + + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put((u8)(Length - 1), 7, ctx.refBuffer()); + } + static size_t run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + return LengthDeterminantDefault::run(ctx); + return Tools::bit_accessor::get(6, ctx.refBuffer()) + 1; + } +}; + +template +struct NormallySmallLength 64)> > +{ + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminantDefault::run(ctx, Length); + } +}; + +/* +* BinaryIntegerLength +*/ + +template +struct NBytes +{ + static constexpr bound_t value = std::log2( N ) / 8 + 1; +}; + +template +struct NBytes > +{ + static constexpr bound_t value = 1; +}; + +template +struct NRange +{ + static constexpr bound_t lower_bound = B1; + static constexpr bound_t upper_bound = B2; +}; + +template +struct NRange > +{ + static constexpr bound_t lower_bound = B2; + static constexpr bound_t upper_bound = B1; +}; + +template +struct BinaryIntegerLength +{ + typedef NRange< + NBytes::value, + NBytes::value + > nrange; + + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr bound_t lower_bound = nrange::lower_bound; + static constexpr bound_t upper_bound = nrange::upper_bound; + + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminant::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminant::run(ctx, extended_len); + } +}; + +template +struct BinaryIntegerLength> +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp new file mode 100644 index 0000000..c4f222a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/oid.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct Oid +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + size_t len = ie.get().size(); + + if (len > 255) + { + ctx.refErrorCtx().valueError(len, 0, 0); + } + else + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(reinterpret_cast(&len), 1); + ctx.refBuffer().putBytes(ie.get().data(), len); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + uint8_t const* data_in = ctx.refBuffer().getBytes(1); // length + + if(data_in) + { + size_t len = *data_in; + data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp new file mode 100644 index 0000000..4d601bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/ostring.hpp @@ -0,0 +1,209 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template < class IE, class Enable = void> +struct Octetstring; + +//16.8 Default +template +struct OctetstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + + } +}; + +//16.5 Zero length +template +struct OctetstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//16.6 Up to two octets, fixed length +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(1); + if (data_out) { + data_out[0] = data_in; + ie.set(1, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; + +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + Tools::bit_accessor::put(static_cast(ie.get().data()[1]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in[2]; + data_in[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data_in[1] = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(sizeof(data_in)); + if (data_out) { + data_out[0] = data_in[0]; + data_out[1] = data_in[1]; + ie.set(sizeof(data_in), data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, sizeof(data_in)); + } +}; + +//16.7 More than 2 octets, up to 64K, fixed length +template +struct OctetstringNoExt 2)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), ie.get().size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = (size_t)IE::constraint_t::upper_bound; + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } +}; + +/**************************************************/ + +//16.3 : Extension present +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + if (size <= IE::constraint_t::upper_bound && size >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + OctetstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + size_t len = LengthDeterminant::run(ctx, true); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } + else + OctetstringNoExt::run(ie, ctx); + } +}; + +//16.4 : No extension +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + else + { + OctetstringNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + OctetstringNoExt::run(ie, ctx); + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp new file mode 100644 index 0000000..e533e80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence.hpp @@ -0,0 +1,568 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/****************************************************************** + * Adapter + *****************************************************************/ +template +struct Adapter +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } +}; +template +struct Adapter> +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + VisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; +template +struct Adapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + if(ie.is_unknown()) //skip the unknown Open Type + { + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + } +}; + +/****************************************************************** + * RootEncoder + *****************************************************************/ +template +struct RootEncoder +{ + RootEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + { + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + Adapter::run(ie, m_ctx, m_cont); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * RootDecoder + *****************************************************************/ +template +struct RootDecoder +{ + RootDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + { + if(IE::optional) + { + if(m_ctx.map_elm()) + { + ie.setpresent(true); + Adapter::run(ie, m_ctx, m_cont); + } + else + ie.setpresent(false); + } + else + { + Adapter::run(ie, m_ctx, m_cont); + } + } + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtEncoder + *****************************************************************/ +template +struct ExtEncoder +{ + explicit ExtEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Adapter::run(ie, m_ctx, m_cont); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + return false; + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtDecoder + *****************************************************************/ +template +struct ExtDecoder +{ + explicit ExtDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if (m_ctx.map_elm()) + { + ie.setpresent(true); + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Adapter::run(ie, m_ctx, m_cont); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + buffer.set_end(end); + } + else + { + ie.setpresent(false); + } + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * SeqMap + *****************************************************************/ +template +struct SeqMap; + +/* +template +struct SeqMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + u8 k = IE::num_opt_entries / 8; // num of full bytes in a seq map mask + u8 fb_bits = IE::num_opt_entries % 8; // num of first byte bits (without padding) + + if (fb_bits) { + // Put a part of a first byte (without padding, only seq map own bits) + Tools::bit_accessor::put((u8)(val >> 8*k), fb_bits, ctx.refBuffer()); + } + + // Put other bytes (full bytes) + for (int i = (k-1); i >= 0; i--) { + Tools::bit_accessor::put((u8)(val >> 8*i), 8, ctx.refBuffer()); + } + } + + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + uint num_opts = IE::num_opt_entries; + u64 res = 0; + u8 k = 1; + u8 lb_bits = IE::num_opt_entries % 8; // num of last byte bits (without padding) + + while (num_opts >= 8) { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(8, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + + k++; + num_opts -= 8; + } + + if (lb_bits > 0) { + // (8 - lb_bits) - padding in a last byte + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k + 8 - lb_bits; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(lb_bits, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + } + + return res; + } +} +; +*/ + +template +struct SeqMap > //todo: to add code for more than 8 optional elements +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + Tools::bit_accessor::put((u8)val, IE::num_opt_entries, ctx.refBuffer()); + } + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - IE::num_opt_entries; + DecoderCtx::map_type rval = Tools::bit_accessor::get(IE::num_opt_entries, ctx.refBuffer()); + rval = rval << shift; + return rval; + } +}; + +/****************************************************************** + * SeqExtMap + *****************************************************************/ +template +struct SeqExtMap +{ + static void inline run(EncoderCtx& ctx, size_t val) {} + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t len = NormallySmallLength<1>::run(ctx); + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - len; + u8 tmp; + DecoderCtx::map_type rval{ 0 }; + u8 val; + + while (len) { + tmp = len > 8 ? 8 : (u8)len; + val = Tools::bit_accessor::get(tmp, ctx.refBuffer()); + rval = rval << tmp; + rval |= val; + len -= tmp; + } + rval = rval << shift; + return rval; + } +}; + +template +struct SeqExtMap 0)) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + Tools::bit_accessor::put((u8)val, NumExtEntries, ctx.refBuffer()); + } +}; + +template +struct SeqExtMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + + size_t len = NumExtEntries; + size_t tmp; + + while (len) { + tmp = len > 8 ? 8 : len; + Tools::bit_accessor::put((u8)val, tmp, ctx.refBuffer()); + val = val >> tmp; + len -= tmp; + } + } +}; + +/****************************************************************** + * SeqMapBuilder + *****************************************************************/ +struct SeqMapBuilder +{ + SeqMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(!IE::extension && IE::optional) + { + m_map = m_map << 1; + if(ie.is_valid()) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqExtMapBuilder + *****************************************************************/ +struct SeqExtMapBuilder +{ + SeqExtMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(IE::extension) + { + m_map = m_map << 1; + if(!IE::optional || (IE::optional && ie.is_valid())) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqNoExtDefault + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExtDefault +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + RootEncoder ve(ctx, ie); + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx, DecoderCtx::map_type map = 0) + { + RootDecoder ve(ctx, ie); + + DecoderCtx::map_type old_map = ctx.set_map(map); + ie.decode(ve); + ctx.set_map(old_map); + } +}; + +/****************************************************************** + * SeqNoExt + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } +}; + +//18.2 OPT/DEF present within the extension root +template +struct SeqNoExt 0) > > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqMapBuilder mb(map); + ie.encode(mb); + SeqMap::run(ctx, map); + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx, SeqMap::run(ctx)); + } +}; + +/****************************************************************** + * Seq + *****************************************************************/ +template +struct Seq; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqExtMapBuilder emb(map); + ie.encode(emb); + + if (map) { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + SeqExtMap::run(ctx, map); + ExtEncoder ove(ctx, ie); + ie.encode(ove); + } + else { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + SeqNoExt::run(ie, ctx); + + auto old_map = ctx.set_map(SeqExtMap::run(ctx)); // we do not know how many exts can be received + { + ExtDecoder ove(ctx, ie); + ie.decode(ove); + + auto& buffer = ctx.refBuffer(); + while(ctx.get_map()) + { + if(ctx.map_elm()) //skip unknown extensions + { + size_t size = LengthDeterminantDefault::run(ctx); + if (buffer.getBytesLeft() < size) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + break; + } + buffer.advance(size); + } + } + } + ctx.set_map(old_map); + } + else + SeqNoExt::run(ie, ctx); + } +}; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp new file mode 100644 index 0000000..d4e21a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/sequence_of.hpp @@ -0,0 +1,156 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct SequenceOf; + +//19.6 Default +template +struct SequenceOfNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +//16.6 +template +struct SequenceOfNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + for (size_t i = 0; i < IE::constraint_t::upper_bound; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +/**************************************************/ + +//19.4 Extension present +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.size() <= IE::constraint_t::upper_bound && ie.size() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SequenceOfNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + size_t len = LengthDeterminant::run(ctx, true); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + //v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } + else + SequenceOfNoExt::run(ie, ctx); + } +}; + +//19.5-6 No extension +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (IE::constraint_t::lower_bound >= 0 && ie.size() < size_t(IE::constraint_t::lower_bound)) + { + ctx.refErrorCtx().sizeRangeError(ie.size(), size_t(IE::constraint_t::lower_bound)); + } + else + { + SequenceOfNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SequenceOfNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp new file mode 100644 index 0000000..f379044 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/visitor.hpp @@ -0,0 +1,141 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +VisitorEncoder +*********************************************************************************/ +struct VisitorEncoder +{ + explicit VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/******************************************************************************** +VisitorDecoder +*********************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Encode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorEncoder +{ + explicit OpenTypeVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Element::run(ie, m_ctx); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Decode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorDecoder +{ + explicit OpenTypeVisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Element::run(ie, m_ctx); + buffer.set_end(end); + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp new file mode 100644 index 0000000..c614998 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/per/whole_number.hpp @@ -0,0 +1,147 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +/*************************************************************************************** +* Encoding of a constrained whole number (X.691 10.5) +***************************************************************************************/ + +template +struct length_determinant; + +template +struct length_determinant > { static constexpr bound_t value = 0; }; + +template +struct length_determinant > { static constexpr bound_t value = 1; }; + +template +struct length_determinant 1) > > { static constexpr bound_t value = boost::static_log2<(R - 1)>::value + 1; }; + +/*************************************************************************************** +***************************************************************************************/ + +template +struct ConstrainedWholeNumber; + +//Bit-field case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::put(static_cast(val - Range::lower_bound), + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } + static V inline run(DecoderCtx& ctx) + { + return Range::lower_bound + Tools::bit_accessor::get( + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } +}; + +//One octet case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(val - Range::lower_bound)); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + rval = Range::lower_bound + data[0]; + return rval; + } +}; + +//Two octets case +template +struct ConstrainedWholeNumber (Range::lower_bound + 255)) && (Range::upper_bound <= (Range::lower_bound + 65535))> > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& v) + { + u64 val = static_cast(v - Range::lower_bound); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte((u8)(val >> 8)); + ctx.refBuffer().putByte((u8)val); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(2); + if (data) { + rval = data[0]; + rval = rval << 8; + rval |= data[1]; + rval += Range::lower_bound; + } + return rval; + } +}; + +//Indefinite case +template +struct ConstrainedWholeNumber Range::lower_bound + 65535) > > +{ + struct NormalizedValueRange + { + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr boundary_type lower_bound = 0; + static constexpr boundary_type upper_bound = Range::upper_bound - Range::lower_bound; + }; + + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + NonnegativeBinaryInteger::run(val - Range::lower_bound, ctx); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, false); + return rval + Range::lower_bound; + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp new file mode 100644 index 0000000..b21eaef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/printer.hpp @@ -0,0 +1,338 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" + +namespace asn{ + +/******************************************************************************** +Utility +**********************************S***********************************************/ +inline void skip_row(std::ostream* str, size_t row_shift) + //{*str << std::string(row_shift, ' ');} +{ + std::string s(row_shift, ' '); + str->write(s.data(), s.size()); +} + +inline void print_hex(std::ostream* str, size_t size, const uint8_t* data, size_t row_shift) +{ + *str << std::setfill('0') << std::hex << std::noshowbase; + for (size_t i = 0; i < size; ++i) + { + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)data[i] << " "; + if (0x0f == (i & 0x0f)) { *str << '\n'; } + } +} + +/******************************************************************************** + +Print + +*********************************************************************************/ + + +/******************************************************************************** +default implementation for IE +*********************************************************************************/ +template +struct Print; + +template +void print(IE const& ie, std::ostream& out, size_t row_shift) +{ + Print::run(ie, &out, row_shift); +} + +template +std::string get_printed(IE const& ie, size_t row_shift = 0) +{ + std::stringstream out; + print(ie, out, row_shift); + return out.str(); +} + + +/******************************************************************************** +VisitorPrinter +*********************************************************************************/ +struct VisitorPrinter +{ + VisitorPrinter(std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift) {} + + template + bool operator() (IE & ie) + { + Print::run(ie, m_pStream, m_RowShift); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; +}; + +/****************************************************************** + * PrinterAdapter + *****************************************************************/ +template +struct PrinterAdapter +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + Print::run(ie, str, row_shift); + } +}; +template +struct PrinterAdapter> +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; +template +struct PrinterAdapter > +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; + +/******************************************************************************** +SeqVisitorPrinter +*********************************************************************************/ +template +struct SeqVisitorPrinter +{ + SeqVisitorPrinter(Container const& cont, std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift), m_cont(cont) {} + + template + bool operator() (IE & ie) + { + if(!IE::optional || ie.is_valid()) + PrinterAdapter::run(ie, m_pStream, m_RowShift, m_cont); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; + Container const& m_cont; +}; + + +/******************************************************************************** +T_NULL +*********************************************************************************/ + +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +/******************************************************************************** +T_BOOLEAN +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << (ie.get() ? "true" : "false")<< std::endl; + } +}; + +/******************************************************************************** +T_INTEGER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_ENUMERATED +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_BITSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + auto& val = ie.get_buffer(); + *str << IE::name() << " = "; + + print_hex(str, val.size() - 1, val.data(), row_shift + strlen(IE::name()) + 3); + + size_t i = val.size() - 1; + uint8_t c = val.data()[i]; + uint8_t b = val.bitqty() % 8; + if (b != 0) c = c << (8 - b); + + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)c; + + *str << " (" << std::dec << val.bitqty() << " bits)" << std::endl; + + } +}; + +/******************************************************************************** +T_OCTETSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = "; + auto & val = ie.get(); + print_hex(str, val.size(), val.data(), row_shift + strlen(IE::name()) + 3); + *str << std::endl; + } +}; + +/******************************************************************************** +T_SEQUENCE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SET +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + + +/******************************************************************************** +T_CHOICE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + VisitorPrinter vp(str, row_shift+1); + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SEQUENCE_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_SET_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_OBJECTIDENTIFIER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h new file mode 100644 index 0000000..e7cc539 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/type_defs.h @@ -0,0 +1,36 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp new file mode 100644 index 0000000..ae1ad74 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/utility.hpp @@ -0,0 +1,88 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn +{ + +struct allocator +{ + allocator() = default; + + allocator(void* data, size_t size) { reset(data, size); } + + template + explicit allocator(T (&buf)[SZ]) : allocator(buf, SZ * sizeof(T)) { } + + void reset(void* data, size_t size) + { + std::size_t space = size; + m_begin = static_cast(std::align(alignment, size, data, space)); + m_end = m_begin ? m_begin + space : nullptr; + m_current = m_begin; + m_ref_counter = 0; + } + + uint8_t* alloc_bytes(std::size_t size) + { + std::size_t const esize = (size + alignment - 1) & -alignment; + if (m_current + esize > m_end) { return nullptr; } //throw std::bad_alloc(); + + uint8_t* const rval = m_current; + m_current += esize; + return rval; + } + + size_t add_ref() { return ++m_ref_counter; } + size_t release() + { + if (m_ref_counter) --m_ref_counter; + if (m_ref_counter == 0) reset(); + return m_ref_counter; + } + size_t ref_counter() const { return m_ref_counter; } +private: + //called by last release() when m_ref_counter becomes 0 + void reset() + { + m_current = m_begin; + } + + + enum : std::size_t + { + alignment = alignof(std::size_t) + }; + + uint8_t* m_begin { nullptr }; //set in reset() + uint8_t* m_current { nullptr }; //changed by alloc_bytes + uint8_t* m_end { nullptr }; + + size_t m_ref_counter {0}; +}; + +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp new file mode 100644 index 0000000..4b67374 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/value_traits.hpp @@ -0,0 +1,187 @@ +#ifndef _STDEX_VALUE_TRAITS_HPP_INCLUDED_ +#define _STDEX_VALUE_TRAITS_HPP_INCLUDED_ + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "type_defs.h" + +namespace stdex { +namespace value { + +namespace mpl = boost::mpl; + +//NOTE! length is in bits +typedef mpl::int_<8> _8; +typedef mpl::int_<16> _16; +typedef mpl::int_<24> _24; +typedef mpl::int_<32> _32; +typedef mpl::int_<40> _40; +typedef mpl::int_<48> _48; +typedef mpl::int_<56> _56; +typedef mpl::int_<64> _64; + +template +struct bits_to_bytes : mpl::int_< (num_bits + 7) / 8 > {}; + +/****************************************************************************** +* Class: value::traits +* Description: select min integer type to fit LEN bits +* Notes: LEN is positive integer type (mpl::int_) = number of bits +******************************************************************************/ +template struct traits; + +template +struct traits + >::type +> +{ + typedef _8 value_length; + typedef u8 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _16 value_length; + typedef u16 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _24 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _32 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _40 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _48 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _56 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _64 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits + >::type +> +{ + typedef LEN value_length; + struct value_type {u8 value[bits_to_bytes::value];}; + typedef value_type const& param_type; +}; + + +//template +//struct traits +// >::type +//> +//{ +// typedef LEN value_length; +// struct value_type {unsigned char value[LEN::value/8];}; +// typedef value_type const& param_type; +// +//}; + +/****************************************************************************** +* Class: value::traits_c +* Description: select min integer type to fit BITS bits +* Notes: N is positive integer value = number of bits +******************************************************************************/ +template +struct traits_c : traits > +{ +}; + +} //end: namespace value + +} //end: namespace stdex + +#ifdef _MSC_VER +#pragma component( mintypeinfo, off ) +#endif + +#endif //_STDEX_VALUE_TRAITS_HPP_INCLUDED_ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp new file mode 100644 index 0000000..be205aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/variant.hpp @@ -0,0 +1,146 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + + +// Local Includes: Application specific classes, functions, and libraries + + +namespace asn{ + +template +struct variant +{ + typedef variant self_type; + + template + static void check_size () {static_assert(sizeof (T) <= S, "wrong type");} + + variant () + : typeinfo (nullptr) + {} + + template + variant (const T& t) + : typeinfo (&typeid (T)) + { + check_size(); + new (as_()) T (t); + } + + ~variant () + { + assert(!typeinfo); + } + + template + T& build () + { + assert(!typeinfo); + typeinfo = & typeid (T); + return *new (as_()) T; + } + + template + T& build (const T& t) + { + assert(!typeinfo); + check_size(); + typeinfo = & typeid (T); + return *new (as_ ()) T (t); + } + + template + T& as() + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + const T& as() const + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + void swap(self_type& other) + { + assert (typeinfo); + assert (*typeinfo == *other.typeinfo); + std::swap (as (), other.as ()); + } + + template + void move(self_type& other) + { + build (); + swap (other); + other.destroy (); + } + + template + void copy(const self_type& other) + { + build (other.as ()); + } + + template + void destroy() + { + as ().~T (); + typeinfo = nullptr; + } + +private: + self_type& operator=(const self_type&){} + variant (const self_type&){} + + template + T* as_() + { + void *p = buffer.raw; + return static_cast (p); + } + + template + const T* as_() const + { + const void *p = buffer.raw; + return static_cast (p); + } + + union + { + long double align_me; + char raw[S]; + } buffer; + + const std::type_info *typeinfo; +}; + +} //namspace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp new file mode 100644 index 0000000..50854f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/asn/version.hpp @@ -0,0 +1,27 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define ASN_API_VERSION_MAJOR 5 +#define ASN_API_VERSION_MINOR 0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp new file mode 100644 index 0000000..2ed8200 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-Constants.hpp @@ -0,0 +1,244 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-RANfunction-Item ProtocolIE-ID ::= 60001 +*/ + +constexpr int64_t id_RANfunction_Item = 60001; +/* +id-RANfunctionDefinition ProtocolIE-ID ::= 60002 +*/ + +constexpr int64_t id_RANfunctionDefinition = 60002; +/* +id-RANfunctionID ProtocolIE-ID ::= 60003 +*/ + +constexpr int64_t id_RANfunctionID = 60003; +/* +id-RANfunctionID-Item ProtocolIE-ID ::= 60004 +*/ + +constexpr int64_t id_RANfunctionID_Item = 60004; +/* +id-RANfunctionIEcause-Item ProtocolIE-ID ::= 60005 +*/ + +constexpr int64_t id_RANfunctionIEcause_Item = 60005; +/* +id-RANfunctionsAccepted ProtocolIE-ID ::= 60006 +*/ + +constexpr int64_t id_RANfunctionsAccepted = 60006; +/* +id-RANfunctionsAdded ProtocolIE-ID ::= 60007 +*/ + +constexpr int64_t id_RANfunctionsAdded = 60007; +/* +id-RANfunctionsDeleted ProtocolIE-ID ::= 60008 +*/ + +constexpr int64_t id_RANfunctionsDeleted = 60008; +/* +id-RANfunctionsModified ProtocolIE-ID ::= 60009 +*/ + +constexpr int64_t id_RANfunctionsModified = 60009; +/* +id-RANfunctionsRejected ProtocolIE-ID ::= 60010 +*/ + +constexpr int64_t id_RANfunctionsRejected = 60010; +/* +id-RICaction-Admitted-Item ProtocolIE-ID ::= 60013 +*/ + +constexpr int64_t id_RICaction_Admitted_Item = 60013; +/* +id-RICaction-NotAdmitted-Item ProtocolIE-ID ::= 60015 +*/ + +constexpr int64_t id_RICaction_NotAdmitted_Item = 60015; +/* +id-RICaction-ToBeSetup-Item ProtocolIE-ID ::= 60011 +*/ + +constexpr int64_t id_RICaction_ToBeSetup_Item = 60011; +/* +id-RICactionDefinition ProtocolIE-ID ::= 60016 +*/ + +constexpr int64_t id_RICactionDefinition = 60016; +/* +id-RICactionID ProtocolIE-ID ::= 60017 +*/ + +constexpr int64_t id_RICactionID = 60017; +/* +id-RICactionType ProtocolIE-ID ::= 60018 +*/ + +constexpr int64_t id_RICactionType = 60018; +/* +id-RICactions-Admitted ProtocolIE-ID ::= 60012 +*/ + +constexpr int64_t id_RICactions_Admitted = 60012; +/* +id-RICactions-NotAdmitted ProtocolIE-ID ::= 60014 +*/ + +constexpr int64_t id_RICactions_NotAdmitted = 60014; +/* +id-RICcallProcessID ProtocolIE-ID ::= 60019 +*/ + +constexpr int64_t id_RICcallProcessID = 60019; +/* +id-RICcause ProtocolIE-ID ::= 60020 +*/ + +constexpr int64_t id_RICcause = 60020; +/* +id-RICcontrolAckRequest ProtocolIE-ID ::= 60021 +*/ + +constexpr int64_t id_RICcontrolAckRequest = 60021; +/* +id-RICcontrolHeader ProtocolIE-ID ::= 60022 +*/ + +constexpr int64_t id_RICcontrolHeader = 60022; +/* +id-RICcontrolMessage ProtocolIE-ID ::= 60023 +*/ + +constexpr int64_t id_RICcontrolMessage = 60023; +/* +id-RICcontrolStatus ProtocolIE-ID ::= 60024 +*/ + +constexpr int64_t id_RICcontrolStatus = 60024; +/* +id-RICeventTriggerDefinition ProtocolIE-ID ::= 60025 +*/ + +constexpr int64_t id_RICeventTriggerDefinition = 60025; +/* +id-RICindicationHeader ProtocolIE-ID ::= 60026 +*/ + +constexpr int64_t id_RICindicationHeader = 60026; +/* +id-RICindicationMessage ProtocolIE-ID ::= 60027 +*/ + +constexpr int64_t id_RICindicationMessage = 60027; +/* +id-RICindicationSN ProtocolIE-ID ::= 60028 +*/ + +constexpr int64_t id_RICindicationSN = 60028; +/* +id-RICindicationType ProtocolIE-ID ::= 60029 +*/ + +constexpr int64_t id_RICindicationType = 60029; +/* +id-RICrequestID ProtocolIE-ID ::= 60030 +*/ + +constexpr int64_t id_RICrequestID = 60030; +/* +id-RICrequestSequenceNumber ProtocolIE-ID ::= 60032 +*/ + +constexpr int64_t id_RICrequestSequenceNumber = 60032; +/* +id-RICrequestorID ProtocolIE-ID ::= 60031 +*/ + +constexpr int64_t id_RICrequestorID = 60031; +/* +id-RICsubscription ProtocolIE-ID ::= 60033 +*/ + +constexpr int64_t id_RICsubscription = 60033; +/* +id-RICsubsequentAction ProtocolIE-ID ::= 60034 +*/ + +constexpr int64_t id_RICsubsequentAction = 60034; +/* +id-RICsubsequentActionType ProtocolIE-ID ::= 60035 +*/ + +constexpr int64_t id_RICsubsequentActionType = 60035; +/* +id-RICtimeToWait ProtocolIE-ID ::= 60036 +*/ + +constexpr int64_t id_RICtimeToWait = 60036; +/* +id-ricControl ProcedureCode ::= 204 +*/ + +constexpr int64_t id_ricControl = 204; +/* +id-ricIndication ProcedureCode ::= 205 +*/ + +constexpr int64_t id_ricIndication = 205; +/* +id-ricServiceQuery ProcedureCode ::= 206 +*/ + +constexpr int64_t id_ricServiceQuery = 206; +/* +id-ricServiceUpdate ProcedureCode ::= 203 +*/ + +constexpr int64_t id_ricServiceUpdate = 203; +/* +id-ricSubscription ProcedureCode ::= 201 +*/ + +constexpr int64_t id_ricSubscription = 201; +/* +id-ricSubscriptionDelete ProcedureCode ::= 202 +*/ + +constexpr int64_t id_ricSubscriptionDelete = 202; +/* +maxofRANfunctionID INTEGER ::=256 +*/ + +constexpr int64_t maxofRANfunctionID = 256; +/* +maxofRICactionID INTEGER ::= 16 +*/ + +constexpr int64_t maxofRICactionID = 16; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp new file mode 100644 index 0000000..40f7bbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-IEs.hpp @@ -0,0 +1,568 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" + +/* +CauseRIC ::= ENUMERATED { + 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, + function-not-required, + excessive-functions, + ric-resource-limit, + ... +} +*/ + +struct CauseRIC : asn::enumerated<13, 0, true> +{ + static constexpr const char* name() {return "CauseRIC";} + using parent_t = asn::enumerated<13, 0, true>; + typedef enum { + 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 + ,function_not_required + ,excessive_functions + ,ric_resource_limit + } index_t; + +}; + +/* +RANfunctionDefinition ::= OCTET STRING +*/ + +struct RANfunctionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RANfunctionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RANfunctionID ::= INTEGER (0..4095) +*/ + +struct RANfunctionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RANfunctionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionDefinition ::= OCTET STRING +*/ + +struct RICactionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICactionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICactionID ::= INTEGER (0..255) +*/ + +struct RICactionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICactionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... +} +*/ + +struct RICactionType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICactionType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + report + ,insert + ,policy + } index_t; + +}; + +/* +RICcallProcessID ::= OCTET STRING +*/ + +struct RICcallProcessID : asn::ostring<> +{ + static constexpr const char* name() {return "RICcallProcessID";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ric CauseRIC, + ... +} +*/ + +struct RICcause : asn::choice<5, 0, true> +{ + static constexpr const char* name() {return "RICcause";} + using parent_t = asn::choice<5, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 6;} + void set_unknown() { set_index(6); } + ~RICcause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + struct ric_t : CauseRIC + { + static constexpr const char* name() {return "ric_t";} + using parent_t = CauseRIC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + case 5: set_index(5); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + case 5: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + ric_t& select_ric() { if(get_index() != 5) { clear(); set_index(5); return var.build();} return var.as();} + ric_t const* get_ric() const { if(get_index() == 5) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + char dummy5[sizeof(ric_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RICcontrolAckRequest ::= ENUMERATED{ + noAck, + ack, + nAck, + ... +} +*/ + +struct RICcontrolAckRequest : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolAckRequest";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + noAck + ,ack + ,nAck + } index_t; + +}; + +/* +RICcontrolHeader ::= OCTET STRING +*/ + +struct RICcontrolHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolMessage ::= OCTET STRING +*/ + +struct RICcontrolMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolStatus ::= ENUMERATED{ + success, + rejected, + failed, + ... +} +*/ + +struct RICcontrolStatus : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolStatus";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + success + ,rejected + ,failed + } index_t; + +}; + +/* +RICeventTriggerDefinition ::= OCTET STRING +*/ + +struct RICeventTriggerDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICeventTriggerDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationHeader ::= OCTET STRING +*/ + +struct RICindicationHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationMessage ::= OCTET STRING +*/ + +struct RICindicationMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationSN ::= INTEGER (0..65535) +*/ + +struct RICindicationSN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICindicationSN";} + using parent_t = asn::integer<>; + +}; + +/* +RICindicationType ::= ENUMERATED{ + report, + insert, + ... +} +*/ + +struct RICindicationType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICindicationType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + report + ,insert + } index_t; + +}; + +/* +RICrequestID ::= SEQUENCE { + ricRequestorID INTEGER (0..65535), + ricRequestSequenceNumber INTEGER (0..65535), + ... +} +*/ + +struct RICrequestID : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICrequestID";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricRequestorID_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestorID_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestorID_t& ref_ricRequestorID() {return ricRequestorID;} + ricRequestorID_t const& ref_ricRequestorID() const {return ricRequestorID;} + struct ricRequestSequenceNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestSequenceNumber_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestSequenceNumber_t& ref_ricRequestSequenceNumber() {return ricRequestSequenceNumber;} + ricRequestSequenceNumber_t const& ref_ricRequestSequenceNumber() const {return ricRequestSequenceNumber;} + template void decode(V& v) + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + template void encode(V& v) const + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + void clear() + { + ricRequestorID.clear(); + ricRequestSequenceNumber.clear(); + + }; + private: + ricRequestorID_t ricRequestorID; + ricRequestSequenceNumber_t ricRequestSequenceNumber; + +}; +/* +RICsubsequentActionType ::= ENUMERATED{ + continue, + wait, + ... +} +*/ + +struct RICsubsequentActionType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICsubsequentActionType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + Continue + ,wait + } index_t; + +}; + +/* +RICtimeToWait ::= ENUMERATED{ + zero, + w1ms, + w2ms, + w5ms, + w10ms, + w20ms, + w30ms, + w40ms, + w50ms, + w100ms, + w200ms, + w500ms, + w1s, + w2s, + w5s, + w10s, + w20s, + w60s, + ... +} +*/ + +struct RICtimeToWait : asn::enumerated<18, 0, true> +{ + static constexpr const char* name() {return "RICtimeToWait";} + using parent_t = asn::enumerated<18, 0, true>; + typedef enum { + zero + ,w1ms + ,w2ms + ,w5ms + ,w10ms + ,w20ms + ,w30ms + ,w40ms + ,w50ms + ,w100ms + ,w200ms + ,w500ms + ,w1s + ,w2s + ,w5s + ,w10s + ,w20s + ,w60s + } index_t; + +}; + +/* +RICsubsequentAction ::=SEQUENCE{ + ricSubsequentActionType RICsubsequentActionType, + ricTimeToWait RICtimeToWait, + ... +} +*/ + +struct RICsubsequentAction : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubsequentAction";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricSubsequentActionType_t : RICsubsequentActionType + { + static constexpr const char* name() {return "ricSubsequentActionType_t";} + using parent_t = RICsubsequentActionType; + + }; + ricSubsequentActionType_t& ref_ricSubsequentActionType() {return ricSubsequentActionType;} + ricSubsequentActionType_t const& ref_ricSubsequentActionType() const {return ricSubsequentActionType;} + struct ricTimeToWait_t : RICtimeToWait + { + static constexpr const char* name() {return "ricTimeToWait_t";} + using parent_t = RICtimeToWait; + + }; + ricTimeToWait_t& ref_ricTimeToWait() {return ricTimeToWait;} + ricTimeToWait_t const& ref_ricTimeToWait() const {return ricTimeToWait;} + template void decode(V& v) + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + template void encode(V& v) const + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + void clear() + { + ricSubsequentActionType.clear(); + ricTimeToWait.clear(); + + }; + private: + ricSubsequentActionType_t ricSubsequentActionType; + ricTimeToWait_t ricTimeToWait; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp new file mode 100644 index 0000000..e2073d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Contents.hpp @@ -0,0 +1,5512 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "E2AP-IEs.hpp" +#include "X2AP-IEs.hpp" +#include "X2AP-Constants.hpp" +#include "X2AP-Containers.hpp" +#include "E2AP-Constants.hpp" + +/* +RANfunction-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ranFunctionDefinition RANfunctionDefinition, + ... +} +*/ + +struct RANfunction_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunction-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ranFunctionDefinition_t : RANfunctionDefinition + { + static constexpr const char* name() {return "ranFunctionDefinition_t";} + using parent_t = RANfunctionDefinition; + + }; + ranFunctionDefinition_t& ref_ranFunctionDefinition() {return ranFunctionDefinition;} + ranFunctionDefinition_t const& ref_ranFunctionDefinition() const {return ranFunctionDefinition;} + template void decode(V& v) + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + void clear() + { + ranFunctionID.clear(); + ranFunctionDefinition.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ranFunctionDefinition_t ranFunctionDefinition; + +}; +/* +RANfunction-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunction-Item CRITICALITY ignore TYPE RANfunction-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunction_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(id_RANfunction_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunction_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunction_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunction_Item& select_id_RANfunction_Item() { return set(1); } + RANfunction_Item const* get_id_RANfunction_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunction_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunction_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionID-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ... +} +*/ + +struct RANfunctionID_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionID-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + template void decode(V& v) + { + v(ranFunctionID); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + + }; + void clear() + { + ranFunctionID.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + +}; +/* +RANfunctionID-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionID-Item CRITICALITY ignore TYPE RANfunctionID-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionID_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(id_RANfunctionID_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionID_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionID_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionID_Item& select_id_RANfunctionID_Item() { return set(1); } + RANfunctionID_Item const* get_id_RANfunctionID_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionID_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionIDcause-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ricCause RICcause, + ... +} +*/ + +struct RANfunctionIDcause_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionIDcause-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ranFunctionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ricCause); + + }; + void clear() + { + ranFunctionID.clear(); + ricCause.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ricCause_t ricCause; + +}; +/* +RANfunctionIDcause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionIEcause-Item CRITICALITY ignore TYPE RANfunctionIDcause-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionIDcause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(id_RANfunctionIEcause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionIEcause_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionIEcause_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionIDcause_Item& select_id_RANfunctionIEcause_Item() { return set(1); } + RANfunctionIDcause_Item const* get_id_RANfunctionIEcause_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionIEcause_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionIDcause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunction-ItemIEs} } +*/ + +struct RANfunctions_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctions_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctions_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctions-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsID-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container{{RANfunctionID-ItemIEs}} +*/ + +struct RANfunctionsID_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsID_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsID_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsID-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsIDcause-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunctionIDcause-ItemIEs} } +*/ + +struct RANfunctionsIDcause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsIDcause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsIDcause_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsIDcause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-Admitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ... +} +*/ + +struct RICaction_Admitted_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-Admitted-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + template void decode(V& v) + { + v(ricActionID); + + }; + template void encode(V& v) const + { + v(ricActionID); + + }; + void clear() + { + ricActionID.clear(); + + }; + private: + ricActionID_t ricActionID; + +}; +/* +RICaction-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-Admitted-Item CRITICALITY ignore TYPE RICaction-Admitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(id_RICaction_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_Admitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_Admitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_Admitted_Item& select_id_RICaction_Admitted_Item() { return set(1); } + RICaction_Admitted_Item const* get_id_RICaction_Admitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_Admitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-Admitted-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container{{RICaction-Admitted-ItemIEs}} +*/ + +struct RICaction_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-NotAdmitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ricCause RICcause, + ... +} +*/ + +struct RICaction_NotAdmitted_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ricActionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricCause); + + }; + void clear() + { + ricActionID.clear(); + ricCause.clear(); + + }; + private: + ricActionID_t ricActionID; + ricCause_t ricCause; + +}; +/* +RICaction-NotAdmitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-NotAdmitted-Item CRITICALITY ignore TYPE RICaction-NotAdmitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_NotAdmitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(id_RICaction_NotAdmitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_NotAdmitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_NotAdmitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_NotAdmitted_Item& select_id_RICaction_NotAdmitted_Item() { return set(1); } + RICaction_NotAdmitted_Item const* get_id_RICaction_NotAdmitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_NotAdmitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_NotAdmitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-NotAdmitted-List ::= SEQUENCE (SIZE(0..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-NotAdmitted-ItemIEs} } +*/ + +struct RICaction_NotAdmitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_NotAdmitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_NotAdmitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-ToBeSetup-Item ::= SEQUENCE { + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ... +} +*/ + +struct RICaction_ToBeSetup_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "RICaction-ToBeSetup-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricActionType_t : RICactionType + { + static constexpr const char* name() {return "ricActionType_t";} + using parent_t = RICactionType; + + }; + ricActionType_t& ref_ricActionType() {return ricActionType;} + ricActionType_t const& ref_ricActionType() const {return ricActionType;} + struct ricActionDefinition_t : RICactionDefinition + { + static constexpr const char* name() {return "ricActionDefinition_t";} + using parent_t = RICactionDefinition; + static constexpr bool optional = true; + + }; + ricActionDefinition_t& set_ricActionDefinition() { ricActionDefinition.setpresent(true); return ricActionDefinition;} + ricActionDefinition_t const* get_ricActionDefinition() const {return ricActionDefinition.is_valid() ? &ricActionDefinition : nullptr;} + struct ricSubsequentAction_t : RICsubsequentAction + { + static constexpr const char* name() {return "ricSubsequentAction_t";} + using parent_t = RICsubsequentAction; + static constexpr bool optional = true; + + }; + ricSubsequentAction_t& set_ricSubsequentAction() { ricSubsequentAction.setpresent(true); return ricSubsequentAction;} + ricSubsequentAction_t const* get_ricSubsequentAction() const {return ricSubsequentAction.is_valid() ? &ricSubsequentAction : nullptr;} + template void decode(V& v) + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + void clear() + { + ricActionID.clear(); + ricActionType.clear(); + ricActionDefinition.clear(); + ricSubsequentAction.clear(); + + }; + private: + ricActionID_t ricActionID; + ricActionType_t ricActionType; + ricActionDefinition_t ricActionDefinition; + ricSubsequentAction_t ricSubsequentAction; + +}; +/* +RICaction-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-ToBeSetup-Item CRITICALITY ignore TYPE RICaction-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(id_RICaction_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_ToBeSetup_Item& select_id_RICaction_ToBeSetup_Item() { return set(1); } + RICaction_ToBeSetup_Item const* get_id_RICaction_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } +*/ + +struct RICactions_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICactions_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICactions_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICactions-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICcontrolAcknowledge-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolStatus() { set(id_RICcontrolStatus); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolStatus)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolStatus);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolStatus() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolStatus& select_id_RICcontrolStatus() { return set(4); } + RICcontrolStatus const* get_id_RICcontrolStatus() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolStatus()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolStatus)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolStatus() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolAcknowledge-IEs}}, + ... +} +*/ + +struct RICcontrolAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolFailure-IEs X2AP-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-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}, + ... +} +*/ + +struct RICcontrolFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcause() { set(id_RICcause); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcause)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcause() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcause& select_id_RICcause() { return set(4); } + RICcause const* get_id_RICcause() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcause()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcause() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolFailure-IEs}}, + ... +} +*/ + +struct RICcontrolFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolRequest-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolHeader() { set(id_RICcontrolHeader); type=4;} + void select_id_RICcontrolMessage() { set(id_RICcontrolMessage); type=5;} + void select_id_RICcontrolAckRequest() { set(id_RICcontrolAckRequest); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolHeader)) { type = 4; return true; } + else if(equal(id_RICcontrolMessage)) { type = 5; return true; } + else if(equal(id_RICcontrolAckRequest)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolHeader);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICcontrolMessage);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICcontrolAckRequest);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolHeader() { set(reject); type=4;} + void select_id_RICcontrolMessage() { set(reject); type=5;} + void select_id_RICcontrolAckRequest() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolHeader& select_id_RICcontrolHeader() { return set(4); } + RICcontrolHeader const* get_id_RICcontrolHeader() const { return get(4); } + RICcontrolMessage& select_id_RICcontrolMessage() { return set(5); } + RICcontrolMessage const* get_id_RICcontrolMessage() const { return get(5); } + RICcontrolAckRequest& select_id_RICcontrolAckRequest() { return set(6); } + RICcontrolAckRequest const* get_id_RICcontrolAckRequest() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolHeader()); return true; + case 5: v(select_id_RICcontrolMessage()); return true; + case 6: v(select_id_RICcontrolAckRequest()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolAckRequest)]; + char dummy4[sizeof(RICcontrolHeader)]; + char dummy5[sizeof(RICcontrolMessage)]; + char dummy6[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolHeader() { set(mandatory); type=4;} + void select_id_RICcontrolMessage() { set(mandatory); type=5;} + void select_id_RICcontrolAckRequest() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolRequest-IEs}}, + ... +} +*/ + +struct RICcontrolRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICindication-IEs X2AP-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 mandatory}| + { 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}, + ... +} +*/ + +struct RICindication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactionID() { set(id_RICactionID); type=3;} + void select_id_RICindicationSN() { set(id_RICindicationSN); type=4;} + void select_id_RICindicationType() { set(id_RICindicationType); type=5;} + void select_id_RICindicationHeader() { set(id_RICindicationHeader); type=6;} + void select_id_RICindicationMessage() { set(id_RICindicationMessage); type=7;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactionID)) { type = 3; return true; } + else if(equal(id_RICindicationSN)) { type = 4; return true; } + else if(equal(id_RICindicationType)) { type = 5; return true; } + else if(equal(id_RICindicationHeader)) { type = 6; return true; } + else if(equal(id_RICindicationMessage)) { type = 7; return true; } + else if(equal(id_RICcallProcessID)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactionID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICindicationSN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICindicationType);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICindicationHeader);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RICindicationMessage);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactionID() { set(reject); type=3;} + void select_id_RICindicationSN() { set(reject); type=4;} + void select_id_RICindicationType() { set(reject); type=5;} + void select_id_RICindicationHeader() { set(reject); type=6;} + void select_id_RICindicationMessage() { set(reject); type=7;} + void select_id_RICcallProcessID() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICactionID& select_id_RICactionID() { return set(3); } + RICactionID const* get_id_RICactionID() const { return get(3); } + RICindicationSN& select_id_RICindicationSN() { return set(4); } + RICindicationSN const* get_id_RICindicationSN() const { return get(4); } + RICindicationType& select_id_RICindicationType() { return set(5); } + RICindicationType const* get_id_RICindicationType() const { return get(5); } + RICindicationHeader& select_id_RICindicationHeader() { return set(6); } + RICindicationHeader const* get_id_RICindicationHeader() const { return get(6); } + RICindicationMessage& select_id_RICindicationMessage() { return set(7); } + RICindicationMessage const* get_id_RICindicationMessage() const { return get(7); } + RICcallProcessID& select_id_RICcallProcessID() { return set(8); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactionID()); return true; + case 4: v(select_id_RICindicationSN()); return true; + case 5: v(select_id_RICindicationType()); return true; + case 6: v(select_id_RICindicationHeader()); return true; + case 7: v(select_id_RICindicationMessage()); return true; + case 8: v(select_id_RICcallProcessID()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICactionID)]; + char dummy3[sizeof(RICcallProcessID)]; + char dummy4[sizeof(RICindicationHeader)]; + char dummy5[sizeof(RICindicationMessage)]; + char dummy6[sizeof(RICindicationSN)]; + char dummy7[sizeof(RICindicationType)]; + char dummy8[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactionID() { set(mandatory); type=3;} + void select_id_RICindicationSN() { set(mandatory); type=4;} + void select_id_RICindicationType() { set(mandatory); type=5;} + void select_id_RICindicationHeader() { set(mandatory); type=6;} + void select_id_RICindicationMessage() { set(mandatory); type=7;} + void select_id_RICcallProcessID() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICindication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICindication-IEs}}, + ... +} +*/ + +struct RICindication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICindication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceQuery-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceQuery_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceQuery ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceQuery-IEs}}, + ... +} +*/ + +struct RICserviceQuery : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceQuery";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdate-IEs X2AP-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}, + ... +} +*/ + +struct RICserviceUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(id_RANfunctionsAdded); type=1;} + void select_id_RANfunctionsModified() { set(id_RANfunctionsModified); type=2;} + void select_id_RANfunctionsDeleted() { set(id_RANfunctionsDeleted); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAdded)) { type = 1; return true; } + else if(equal(id_RANfunctionsModified)) { type = 2; return true; } + else if(equal(id_RANfunctionsDeleted)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAdded);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsModified);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RANfunctionsDeleted);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(reject); type=1;} + void select_id_RANfunctionsModified() { set(reject); type=2;} + void select_id_RANfunctionsDeleted() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctions_List& select_id_RANfunctionsAdded() { return set(1); } + RANfunctions_List const* get_id_RANfunctionsAdded() const { return get(1); } + RANfunctions_List& select_id_RANfunctionsModified() { return set(2); } + RANfunctions_List const* get_id_RANfunctionsModified() const { return get(2); } + RANfunctionsID_List& select_id_RANfunctionsDeleted() { return set(3); } + RANfunctionsID_List const* get_id_RANfunctionsDeleted() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAdded()); return true; + case 2: v(select_id_RANfunctionsModified()); return true; + case 3: v(select_id_RANfunctionsDeleted()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctions_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(optional); type=1;} + void select_id_RANfunctionsModified() { set(optional); type=2;} + void select_id_RANfunctionsDeleted() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdate-IEs}}, + ... +} +*/ + +struct RICserviceUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}| + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else if(equal(id_RANfunctionsRejected)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + void select_id_RANfunctionsRejected() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(2); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: v(select_id_RANfunctionsRejected()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + void select_id_RANfunctionsRejected() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsRejected)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(reject); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(1); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsRejected()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(optional); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateFailure-IEs}}, + ... +} +*/ + +struct RICserviceUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... +} +*/ + +struct RICsubscription : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscription";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricEventTriggerDefinition_t : RICeventTriggerDefinition + { + static constexpr const char* name() {return "ricEventTriggerDefinition_t";} + using parent_t = RICeventTriggerDefinition; + + }; + ricEventTriggerDefinition_t& ref_ricEventTriggerDefinition() {return ricEventTriggerDefinition;} + ricEventTriggerDefinition_t const& ref_ricEventTriggerDefinition() const {return ricEventTriggerDefinition;} + struct ricAction_ToBeSetup_List_t : RICactions_ToBeSetup_List + { + static constexpr const char* name() {return "ricAction_ToBeSetup_List_t";} + using parent_t = RICactions_ToBeSetup_List; + + }; + ricAction_ToBeSetup_List_t& ref_ricAction_ToBeSetup_List() {return ricAction_ToBeSetup_List;} + ricAction_ToBeSetup_List_t const& ref_ricAction_ToBeSetup_List() const {return ricAction_ToBeSetup_List;} + template void decode(V& v) + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + template void encode(V& v) const + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + void clear() + { + ricEventTriggerDefinition.clear(); + ricAction_ToBeSetup_List.clear(); + + }; + private: + ricEventTriggerDefinition_t ricEventTriggerDefinition; + ricAction_ToBeSetup_List_t ricAction_ToBeSetup_List; + +}; +/* +RICsubscriptionDeleteFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcause() { set(id_RICcause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcause() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcause& select_id_RICcause() { return set(3); } + RICcause const* get_id_RICcause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionFailure-IEs X2AP-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}, + ... +} +*/ + +struct RICsubscriptionFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_NotAdmitted() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(3); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_NotAdmitted()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_NotAdmitted() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICsubscription CRITICALITY reject TYPE RICsubscription PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICsubscription() { set(id_RICsubscription); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICsubscription)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICsubscription);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICsubscription() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICsubscription& select_id_RICsubscription() { return set(3); } + RICsubscription const* get_id_RICsubscription() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICsubscription()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + char dummy3[sizeof(RICsubscription)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICsubscription() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionResponse-IEs X2AP-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 }, + ... +} +*/ + +struct RICsubscriptionResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_Admitted() { set(id_RICactions_Admitted); type=3;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_Admitted)) { type = 3; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_Admitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_Admitted() { set(reject); type=3;} + void select_id_RICactions_NotAdmitted() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_Admitted_List& select_id_RICactions_Admitted() { return set(3); } + RICaction_Admitted_List const* get_id_RICactions_Admitted() const { return get(3); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(4); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_Admitted()); return true; + case 4: v(select_id_RICactions_NotAdmitted()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICaction_Admitted_List)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_Admitted() { set(mandatory); type=3;} + void select_id_RICactions_NotAdmitted() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container{{RICsubscriptionResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..f426b97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp @@ -0,0 +1,980 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" +#include "E2AP-PDU-Contents.hpp" +#include "E2AP-Constants.hpp" + +/* +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] +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= { + E2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + E2AP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionRequest& select_id_ricSubscription() { return set(1); } + RICsubscriptionRequest const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteRequest& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteRequest const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdate& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdate const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolRequest& select_id_ricControl() { return set(4); } + RICcontrolRequest const* get_id_ricControl() const { return get(4); } + X2SetupRequest& select_id_x2Setup() { return set(5); } + X2SetupRequest const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetRequest& select_id_reset() { return set(10); } + ResetRequest const* get_id_reset() const { return get(10); } + RICindication& select_id_ricIndication() { return set(11); } + RICindication const* get_id_ricIndication() const { return get(11); } + RICserviceQuery& select_id_ricServiceQuery() { return set(12); } + RICserviceQuery const* get_id_ricServiceQuery() const { return get(12); } + LoadInformation& select_id_loadIndication() { return set(13); } + LoadInformation const* get_id_loadIndication() const { return get(13); } + GNBStatusIndication& select_id_gNBStatusIndication() { return set(14); } + GNBStatusIndication const* get_id_gNBStatusIndication() const { return get(14); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(15); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(15); } + ErrorIndication& select_id_errorIndication() { return set(16); } + ErrorIndication const* get_id_errorIndication() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 11: v(select_id_ricIndication()); return true; + case 12: v(select_id_ricServiceQuery()); return true; + case 13: v(select_id_loadIndication()); return true; + case 14: v(select_id_gNBStatusIndication()); return true; + case 15: v(select_id_resourceStatusReporting()); return true; + case 16: v(select_id_errorIndication()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdate)]; + char dummy2[sizeof(ENDCConfigurationUpdate)]; + char dummy3[sizeof(ENDCX2SetupRequest)]; + char dummy4[sizeof(ErrorIndication)]; + char dummy5[sizeof(GNBStatusIndication)]; + char dummy6[sizeof(LoadInformation)]; + char dummy7[sizeof(RICcontrolRequest)]; + char dummy8[sizeof(RICindication)]; + char dummy9[sizeof(RICserviceQuery)]; + char dummy10[sizeof(RICserviceUpdate)]; + char dummy11[sizeof(RICsubscriptionDeleteRequest)]; + char dummy12[sizeof(RICsubscriptionRequest)]; + char dummy13[sizeof(ResetRequest)]; + char dummy14[sizeof(ResourceStatusRequest)]; + char dummy15[sizeof(ResourceStatusUpdate)]; + char dummy16[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionResponse& select_id_ricSubscription() { return set(1); } + RICsubscriptionResponse const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteResponse& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteResponse const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateAcknowledge& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateAcknowledge const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolAcknowledge& select_id_ricControl() { return set(4); } + RICcontrolAcknowledge const* get_id_ricControl() const { return get(4); } + X2SetupResponse& select_id_x2Setup() { return set(5); } + X2SetupResponse const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetResponse& select_id_reset() { return set(10); } + ResetResponse const* get_id_reset() const { return get(10); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy2[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCX2SetupResponse)]; + char dummy4[sizeof(RICcontrolAcknowledge)]; + char dummy5[sizeof(RICserviceUpdateAcknowledge)]; + char dummy6[sizeof(RICsubscriptionDeleteResponse)]; + char dummy7[sizeof(RICsubscriptionResponse)]; + char dummy8[sizeof(ResetResponse)]; + char dummy9[sizeof(ResourceStatusResponse)]; + char dummy10[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionFailure& select_id_ricSubscription() { return set(1); } + RICsubscriptionFailure const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteFailure& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteFailure const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateFailure& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateFailure const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolFailure& select_id_ricControl() { return set(4); } + RICcontrolFailure const* get_id_ricControl() const { return get(4); } + X2SetupFailure& select_id_x2Setup() { return set(5); } + X2SetupFailure const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(9); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateFailure)]; + char dummy2[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCX2SetupFailure)]; + char dummy4[sizeof(RICcontrolFailure)]; + char dummy5[sizeof(RICserviceUpdateFailure)]; + char dummy6[sizeof(RICsubscriptionDeleteFailure)]; + char dummy7[sizeof(RICsubscriptionFailure)]; + char dummy8[sizeof(ResourceStatusFailure)]; + char dummy9[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(id_ricSubscription); type=1;} + void select_id_ricSubscriptionDelete() { set(id_ricSubscriptionDelete); type=2;} + void select_id_ricServiceUpdate() { set(id_ricServiceUpdate); type=3;} + void select_id_ricControl() { set(id_ricControl); type=4;} + void select_id_x2Setup() { set(id_x2Setup); type=5;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=6;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=7;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=8;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=9;} + void select_id_reset() { set(id_reset); type=10;} + void select_id_ricIndication() { set(id_ricIndication); type=11;} + void select_id_ricServiceQuery() { set(id_ricServiceQuery); type=12;} + void select_id_loadIndication() { set(id_loadIndication); type=13;} + void select_id_gNBStatusIndication() { set(id_gNBStatusIndication); type=14;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=15;} + void select_id_errorIndication() { set(id_errorIndication); type=16;} + E2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ricSubscription)) { type = 1; return true; } + else if(equal(id_ricSubscriptionDelete)) { type = 2; return true; } + else if(equal(id_ricServiceUpdate)) { type = 3; return true; } + else if(equal(id_ricControl)) { type = 4; return true; } + else if(equal(id_x2Setup)) { type = 5; return true; } + else if(equal(id_endcX2Setup)) { type = 6; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 7; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 8; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 9; return true; } + else if(equal(id_reset)) { type = 10; return true; } + else if(equal(id_ricIndication)) { type = 11; return true; } + else if(equal(id_ricServiceQuery)) { type = 12; return true; } + else if(equal(id_loadIndication)) { type = 13; return true; } + else if(equal(id_gNBStatusIndication)) { type = 14; return true; } + else if(equal(id_resourceStatusReporting)) { type = 15; return true; } + else if(equal(id_errorIndication)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ricSubscription);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ricSubscriptionDelete);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ricServiceUpdate);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ricControl);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_reset);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ricIndication);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_ricServiceQuery);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_gNBStatusIndication);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(reject); type=1;} + void select_id_ricSubscriptionDelete() { set(reject); type=2;} + void select_id_ricServiceUpdate() { set(reject); type=3;} + void select_id_ricControl() { set(reject); type=4;} + void select_id_x2Setup() { set(reject); type=5;} + void select_id_endcX2Setup() { set(reject); type=6;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=7;} + void select_id_eNBConfigurationUpdate() { set(reject); type=8;} + void select_id_endcConfigurationUpdate() { set(reject); type=9;} + void select_id_reset() { set(reject); type=10;} + void select_id_ricIndication() { set(ignore); type=11;} + void select_id_ricServiceQuery() { set(ignore); type=12;} + void select_id_loadIndication() { set(ignore); type=13;} + void select_id_gNBStatusIndication() { set(ignore); type=14;} + void select_id_resourceStatusReporting() { set(ignore); type=15;} + void select_id_errorIndication() { set(ignore); type=16;} + E2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(ignore)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(ignore);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +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}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +E2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct E2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "E2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~E2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp new file mode 100644 index 0000000..0e1bb53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-CommonDataTypes.hpp @@ -0,0 +1,188 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + + +/* +Criticality ::= ENUMERATED { reject, ignore, notify } +*/ + +struct Criticality : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Criticality";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + reject + ,ignore + ,notify + } index_t; + +}; + +/* +Presence ::= ENUMERATED { optional, conditional, mandatory } +*/ + +struct Presence : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Presence";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + optional + ,conditional + ,mandatory + } index_t; + +}; + +/* +maxPrivateIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxPrivateIEs = 65535; +/* +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} +*/ + +struct PrivateIE_ID : asn::choice<2, 0, false> +{ + static constexpr const char* name() {return "PrivateIE-ID";} + using parent_t = asn::choice<2, 0, false>; + index_type get_index() const {return index;} + ~PrivateIE_ID() {clear();} + struct local_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "local_t";} + using parent_t = asn::integer<>; + + }; + + struct global_t : asn::oid + { + static constexpr const char* name() {return "global_t";} + using parent_t = asn::oid; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + local_t& select_local() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + local_t const* get_local() const { if(get_index() == 1) { return &var.as();} return nullptr; } + global_t& select_global() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + global_t const* get_global() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(local_t)]; + char dummy2[sizeof(global_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ProcedureCode ::= INTEGER (0..255) +*/ + +struct ProcedureCode : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProcedureCode";} + using parent_t = asn::integer<>; + +}; + +/* +maxProtocolIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolIEs = 65535; +/* +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) +*/ + +struct ProtocolIE_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProtocolIE-ID";} + using parent_t = asn::integer<>; + +}; + +/* +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} +*/ + +struct TriggeringMessage : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "TriggeringMessage";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + initiating_message + ,successful_outcome + ,unsuccessful_outcome + } index_t; + +}; + +/* +maxProtocolExtensions INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolExtensions = 65535; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp new file mode 100644 index 0000000..28be45d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Constants.hpp @@ -0,0 +1,2054 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-ABS-Status ProtocolIE-ID ::= 63 +*/ + +constexpr int64_t id_ABS_Status = 63; +/* +id-ABSInformation ProtocolIE-ID ::= 61 +*/ + +constexpr int64_t id_ABSInformation = 61; +/* +id-ActivatedCellList ProtocolIE-ID ::= 58 +*/ + +constexpr int64_t id_ActivatedCellList = 58; +/* +id-ActivatedNRCellList ProtocolIE-ID ::= 268 +*/ + +constexpr int64_t id_ActivatedNRCellList = 268; +/* +id-ActivationID ProtocolIE-ID ::= 256 +*/ + +constexpr int64_t id_ActivationID = 256; +/* +id-AdditionalSpecialSubframe-Info ProtocolIE-ID ::= 97 +*/ + +constexpr int64_t id_AdditionalSpecialSubframe_Info = 97; +/* +id-AdditionalSpecialSubframeExtension-Info ProtocolIE-ID ::= 179 +*/ + +constexpr int64_t id_AdditionalSpecialSubframeExtension_Info = 179; +/* +id-AdmittedSplitSRBs ProtocolIE-ID ::= 212 +*/ + +constexpr int64_t id_AdmittedSplitSRBs = 212; +/* +id-AdmittedSplitSRBsrelease ProtocolIE-ID ::= 281 +*/ + +constexpr int64_t id_AdmittedSplitSRBsrelease = 281; +/* +id-AerialUEsubscriptionInformation ProtocolIE-ID ::= 277 +*/ + +constexpr int64_t id_AerialUEsubscriptionInformation = 277; +/* +id-BandwidthReducedSI ProtocolIE-ID ::= 180 +*/ + +constexpr int64_t id_BandwidthReducedSI = 180; +/* +id-BearerType ProtocolIE-ID ::= 171 +*/ + +constexpr int64_t id_BearerType = 171; +/* +id-BluetoothMeasurementConfiguration ProtocolIE-ID ::= 303 +*/ + +constexpr int64_t id_BluetoothMeasurementConfiguration = 303; +/* +id-CNTypeRestrictions ProtocolIE-ID ::= 301 +*/ + +constexpr int64_t id_CNTypeRestrictions = 301; +/* +id-CSG-Id ProtocolIE-ID ::= 70 +*/ + +constexpr int64_t id_CSG_Id = 70; +/* +id-CSGMembershipStatus ProtocolIE-ID ::= 71 +*/ + +constexpr int64_t id_CSGMembershipStatus = 71; +/* +id-CSIReportList ProtocolIE-ID ::= 146 +*/ + +constexpr int64_t id_CSIReportList = 146; +/* +id-Cause ProtocolIE-ID ::= 5 +*/ + +constexpr int64_t id_Cause = 5; +/* +id-CellAssistanceInformation ProtocolIE-ID ::= 251 +*/ + +constexpr int64_t id_CellAssistanceInformation = 251; +/* +id-CellInformation ProtocolIE-ID ::= 6 +*/ + +constexpr int64_t id_CellInformation = 6; +/* +id-CellInformation-Item ProtocolIE-ID ::= 7 +*/ + +constexpr int64_t id_CellInformation_Item = 7; +/* +id-CellMeasurementResult ProtocolIE-ID ::= 32 +*/ + +constexpr int64_t id_CellMeasurementResult = 32; +/* +id-CellMeasurementResult-Item ProtocolIE-ID ::= 33 +*/ + +constexpr int64_t id_CellMeasurementResult_Item = 33; +/* +id-CellReportingIndicator ProtocolIE-ID ::= 170 +*/ + +constexpr int64_t id_CellReportingIndicator = 170; +/* +id-CellToReport ProtocolIE-ID ::= 29 +*/ + +constexpr int64_t id_CellToReport = 29; +/* +id-CellToReport-Item ProtocolIE-ID ::= 31 +*/ + +constexpr int64_t id_CellToReport_Item = 31; +/* +id-CoMPInformation ProtocolIE-ID ::= 108 +*/ + +constexpr int64_t id_CoMPInformation = 108; +/* +id-CompleteFailureCauseInformation-Item ProtocolIE-ID ::= 69 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_Item = 69; +/* +id-CompleteFailureCauseInformation-List ProtocolIE-ID ::= 68 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_List = 68; +/* +id-CompositeAvailableCapacityGroup ProtocolIE-ID ::= 42 +*/ + +constexpr int64_t id_CompositeAvailableCapacityGroup = 42; +/* +id-Correlation-ID ProtocolIE-ID ::= 166 +*/ + +constexpr int64_t id_Correlation_ID = 166; +/* +id-CoverageModificationList ProtocolIE-ID ::= 143 +*/ + +constexpr int64_t id_CoverageModificationList = 143; +/* +id-CriticalityDiagnostics ProtocolIE-ID ::= 17 +*/ + +constexpr int64_t id_CriticalityDiagnostics = 17; +/* +id-DL-EARFCNExtension ProtocolIE-ID ::= 96 +*/ + +constexpr int64_t id_DL_EARFCNExtension = 96; +/* +id-DL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 193 +*/ + +constexpr int64_t id_DL_scheduling_PDCCH_CCE_usage = 193; +/* +id-DLCOUNTValueExtended ProtocolIE-ID ::= 93 +*/ + +constexpr int64_t id_DLCOUNTValueExtended = 93; +/* +id-DLCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 152 +*/ + +constexpr int64_t id_DLCOUNTValuePDCP_SNlength18 = 152; +/* +id-DataTrafficResourceIndication ProtocolIE-ID ::= 287 +*/ + +constexpr int64_t id_DataTrafficResourceIndication = 287; +/* +id-DeactivationIndication ProtocolIE-ID ::= 59 +*/ + +constexpr int64_t id_DeactivationIndication = 59; +/* +id-DownlinkPacketLossRate ProtocolIE-ID ::= 273 +*/ + +constexpr int64_t id_DownlinkPacketLossRate = 273; +/* +id-DynamicDLTransmissionInformation ProtocolIE-ID ::= 106 +*/ + +constexpr int64_t id_DynamicDLTransmissionInformation = 106; +/* +id-E-RAB-Item ProtocolIE-ID ::= 2 +*/ + +constexpr int64_t id_E_RAB_Item = 2; +/* +id-E-RABUsageReport-Item ProtocolIE-ID ::= 263 +*/ + +constexpr int64_t id_E_RABUsageReport_Item = 263; +/* +id-E-RABs-Admitted-Item ProtocolIE-ID ::= 0 +*/ + +constexpr int64_t id_E_RABs_Admitted_Item = 0; +/* +id-E-RABs-Admitted-List ProtocolIE-ID ::= 1 +*/ + +constexpr int64_t id_E_RABs_Admitted_List = 1; +/* +id-E-RABs-Admitted-ToBeAdded-Item ProtocolIE-ID ::= 121 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_Item = 121; +/* +id-E-RABs-Admitted-ToBeAdded-List ProtocolIE-ID ::= 120 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_List = 120; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckItem ProtocolIE-ID ::= 131 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckList ProtocolIE-ID ::= 128 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckList = 128; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ProtocolIE-ID ::= 213 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ProtocolIE-ID ::= 210 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ProtocolIE-ID ::= 222 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAckList ProtocolIE-ID ::= 219 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219; +/* +id-E-RABs-Admitted-ToBeModified-ModAckItem ProtocolIE-ID ::= 132 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckItem = 132; +/* +id-E-RABs-Admitted-ToBeModified-ModAckList ProtocolIE-ID ::= 129 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckList = 129; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item ProtocolIE-ID ::= 223 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAckList ProtocolIE-ID ::= 220 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckItem ProtocolIE-ID ::= 133 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckList ProtocolIE-ID ::= 130 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckList = 130; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item ProtocolIE-ID ::= 224 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAckList ProtocolIE-ID ::= 221 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ProtocolIE-ID ::= 319 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ProtocolIE-ID ::= 318 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConf-Item ProtocolIE-ID ::= 295 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConfList ProtocolIE-ID ::= 294 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294; +/* +id-E-RABs-DataForwardingAddress-Item ProtocolIE-ID ::= 308 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_Item = 308; +/* +id-E-RABs-DataForwardingAddress-List ProtocolIE-ID ::= 307 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_List = 307; +/* +id-E-RABs-NotAdmitted-List ProtocolIE-ID ::= 3 +*/ + +constexpr int64_t id_E_RABs_NotAdmitted_List = 3; +/* +id-E-RABs-SubjectToCounterCheck-List ProtocolIE-ID ::= 141 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheck_List = 141; +/* +id-E-RABs-SubjectToCounterCheckItem ProtocolIE-ID ::= 142 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheckItem = 142; +/* +id-E-RABs-SubjectToSgNBCounterCheck-Item ProtocolIE-ID ::= 236 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_Item = 236; +/* +id-E-RABs-SubjectToSgNBCounterCheck-List ProtocolIE-ID ::= 235 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_List = 235; +/* +id-E-RABs-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 19 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_Item = 19; +/* +id-E-RABs-SubjectToStatusTransfer-List ProtocolIE-ID ::= 18 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_List = 18; +/* +id-E-RABs-ToBeAdded-Item ProtocolIE-ID ::= 118 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_Item = 118; +/* +id-E-RABs-ToBeAdded-List ProtocolIE-ID ::= 117 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_List = 117; +/* +id-E-RABs-ToBeAdded-ModReqItem ProtocolIE-ID ::= 125 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_ModReqItem = 125; +/* +id-E-RABs-ToBeAdded-SgNBAddReq-Item ProtocolIE-ID ::= 209 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209; +/* +id-E-RABs-ToBeAdded-SgNBAddReqList ProtocolIE-ID ::= 205 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReqList = 205; +/* +id-E-RABs-ToBeAdded-SgNBModReq-Item ProtocolIE-ID ::= 216 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBModReq_Item = 216; +/* +id-E-RABs-ToBeModified-ModReqItem ProtocolIE-ID ::= 126 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_ModReqItem = 126; +/* +id-E-RABs-ToBeModified-SgNBModReq-Item ProtocolIE-ID ::= 217 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReq_Item = 217; +/* +id-E-RABs-ToBeModified-SgNBModReqd-Item ProtocolIE-ID ::= 228 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqd_Item = 228; +/* +id-E-RABs-ToBeModified-SgNBModReqdList ProtocolIE-ID ::= 226 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqdList = 226; +/* +id-E-RABs-ToBeReleased-List-RelConf ProtocolIE-ID ::= 139 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelConf = 139; +/* +id-E-RABs-ToBeReleased-List-RelReq ProtocolIE-ID ::= 137 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelReq = 137; +/* +id-E-RABs-ToBeReleased-ModReqItem ProtocolIE-ID ::= 127 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqItem = 127; +/* +id-E-RABs-ToBeReleased-ModReqd ProtocolIE-ID ::= 134 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqd = 134; +/* +id-E-RABs-ToBeReleased-ModReqdItem ProtocolIE-ID ::= 135 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqdItem = 135; +/* +id-E-RABs-ToBeReleased-RelConfItem ProtocolIE-ID ::= 140 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelConfItem = 140; +/* +id-E-RABs-ToBeReleased-RelReqItem ProtocolIE-ID ::= 138 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelReqItem = 138; +/* +id-E-RABs-ToBeReleased-SgNBChaConf-Item ProtocolIE-ID ::= 230 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230; +/* +id-E-RABs-ToBeReleased-SgNBChaConfList ProtocolIE-ID ::= 229 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConfList = 229; +/* +id-E-RABs-ToBeReleased-SgNBModReq-Item ProtocolIE-ID ::= 218 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReq_Item = 218; +/* +id-E-RABs-ToBeReleased-SgNBModReqd-Item ProtocolIE-ID ::= 227 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227; +/* +id-E-RABs-ToBeReleased-SgNBModReqdList ProtocolIE-ID ::= 225 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqdList = 225; +/* +id-E-RABs-ToBeReleased-SgNBRelConf-Item ProtocolIE-ID ::= 234 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234; +/* +id-E-RABs-ToBeReleased-SgNBRelConfList ProtocolIE-ID ::= 233 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConfList = 233; +/* +id-E-RABs-ToBeReleased-SgNBRelReq-Item ProtocolIE-ID ::= 232 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232; +/* +id-E-RABs-ToBeReleased-SgNBRelReqList ProtocolIE-ID ::= 231 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqList = 231; +/* +id-E-RABs-ToBeReleased-SgNBRelReqd-Item ProtocolIE-ID ::= 321 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321; +/* +id-E-RABs-ToBeReleased-SgNBRelReqdList ProtocolIE-ID ::= 320 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqdList = 320; +/* +id-E-RABs-ToBeSetup-Item ProtocolIE-ID ::= 4 +*/ + +constexpr int64_t id_E_RABs_ToBeSetup_Item = 4; +/* +id-E-RABs-ToBeSetupRetrieve-Item ProtocolIE-ID ::= 174 +*/ + +constexpr int64_t id_E_RABs_ToBeSetupRetrieve_Item = 174; +/* +id-ECGI ProtocolIE-ID ::= 316 +*/ + +constexpr int64_t id_ECGI = 316; +/* +id-ENB1-Cell-ID ProtocolIE-ID ::= 43 +*/ + +constexpr int64_t id_ENB1_Cell_ID = 43; +/* +id-ENB1-Measurement-ID ProtocolIE-ID ::= 39 +*/ + +constexpr int64_t id_ENB1_Measurement_ID = 39; +/* +id-ENB1-Mobility-Parameters ProtocolIE-ID ::= 46 +*/ + +constexpr int64_t id_ENB1_Mobility_Parameters = 46; +/* +id-ENB2-Cell-ID ProtocolIE-ID ::= 44 +*/ + +constexpr int64_t id_ENB2_Cell_ID = 44; +/* +id-ENB2-Measurement-ID ProtocolIE-ID ::= 40 +*/ + +constexpr int64_t id_ENB2_Measurement_ID = 40; +/* +id-ENB2-Mobility-Parameters-Modification-Range ProtocolIE-ID ::= 47 +*/ + +constexpr int64_t id_ENB2_Mobility_Parameters_Modification_Range = 47; +/* +id-ENB2-Proposed-Mobility-Parameters ProtocolIE-ID ::= 45 +*/ + +constexpr int64_t id_ENB2_Proposed_Mobility_Parameters = 45; +/* +id-ERABActivityNotifyItemList ProtocolIE-ID ::= 297 +*/ + +constexpr int64_t id_ERABActivityNotifyItemList = 297; +/* +id-ExpectedUEBehaviour ProtocolIE-ID ::= 104 +*/ + +constexpr int64_t id_ExpectedUEBehaviour = 104; +/* +id-ExtendedULInterferenceOverloadInfo ProtocolIE-ID ::= 100 +*/ + +constexpr int64_t id_ExtendedULInterferenceOverloadInfo = 100; +/* +id-FailureCellCRNTI ProtocolIE-ID ::= 50 +*/ + +constexpr int64_t id_FailureCellCRNTI = 50; +/* +id-FailureCellECGI ProtocolIE-ID ::= 53 +*/ + +constexpr int64_t id_FailureCellECGI = 53; +/* +id-FailureCellPCI ProtocolIE-ID ::= 48 +*/ + +constexpr int64_t id_FailureCellPCI = 48; +/* +id-FreqBandIndicatorPriority ProtocolIE-ID ::= 160 +*/ + +constexpr int64_t id_FreqBandIndicatorPriority = 160; +/* +id-GNBOverloadInformation ProtocolIE-ID ::= 310 +*/ + +constexpr int64_t id_GNBOverloadInformation = 310; +/* +id-GUGroupIDList ProtocolIE-ID ::= 24 +*/ + +constexpr int64_t id_GUGroupIDList = 24; +/* +id-GUGroupIDToAddList ProtocolIE-ID ::= 34 +*/ + +constexpr int64_t id_GUGroupIDToAddList = 34; +/* +id-GUGroupIDToDeleteList ProtocolIE-ID ::= 35 +*/ + +constexpr int64_t id_GUGroupIDToDeleteList = 35; +/* +id-GUMMEI-ID ProtocolIE-ID ::= 23 +*/ + +constexpr int64_t id_GUMMEI_ID = 23; +/* +id-GW-TransportLayerAddress ProtocolIE-ID ::= 165 +*/ + +constexpr int64_t id_GW_TransportLayerAddress = 165; +/* +id-GlobalENB-ID ProtocolIE-ID ::= 21 +*/ + +constexpr int64_t id_GlobalENB_ID = 21; +/* +id-Globalen-gNB-ID ProtocolIE-ID ::= 252 +*/ + +constexpr int64_t id_Globalen_gNB_ID = 252; +/* +id-HO-cause ProtocolIE-ID ::= 80 +*/ + +constexpr int64_t id_HO_cause = 80; +/* +id-HandoverReportType ProtocolIE-ID ::= 54 +*/ + +constexpr int64_t id_HandoverReportType = 54; +/* +id-HandoverRestrictionList ProtocolIE-ID ::= 240 +*/ + +constexpr int64_t id_HandoverRestrictionList = 240; +/* +id-InitiatingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 245 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcConfigUpdate = 245; +/* +id-InitiatingNodeType-EndcX2Removal ProtocolIE-ID ::= 298 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Removal = 298; +/* +id-InitiatingNodeType-EndcX2Setup ProtocolIE-ID ::= 244 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Setup = 244; +/* +id-InitiatingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 285 +*/ + +constexpr int64_t id_InitiatingNodeType_EutranrCellResourceCoordination = 285; +/* +id-IntendedULDLConfiguration ProtocolIE-ID ::= 99 +*/ + +constexpr int64_t id_IntendedULDLConfiguration = 99; +/* +id-InvokeIndication ProtocolIE-ID ::= 62 +*/ + +constexpr int64_t id_InvokeIndication = 62; +/* +id-LHN-ID ProtocolIE-ID ::= 159 +*/ + +constexpr int64_t id_LHN_ID = 159; +/* +id-ListofEUTRACellsinEUTRACoordinationReq ProtocolIE-ID ::= 289 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationReq = 289; +/* +id-ListofEUTRACellsinEUTRACoordinationResp ProtocolIE-ID ::= 290 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationResp = 290; +/* +id-ListofEUTRACellsinNRCoordinationReq ProtocolIE-ID ::= 291 +*/ + +constexpr int64_t id_ListofEUTRACellsinNRCoordinationReq = 291; +/* +id-ListofNRCellsinNRCoordinationReq ProtocolIE-ID ::= 292 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationReq = 292; +/* +id-ListofNRCellsinNRCoordinationResp ProtocolIE-ID ::= 293 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationResp = 293; +/* +id-M3Configuration ProtocolIE-ID ::= 85 +*/ + +constexpr int64_t id_M3Configuration = 85; +/* +id-M4Configuration ProtocolIE-ID ::= 86 +*/ + +constexpr int64_t id_M4Configuration = 86; +/* +id-M5Configuration ProtocolIE-ID ::= 87 +*/ + +constexpr int64_t id_M5Configuration = 87; +/* +id-M6Configuration ProtocolIE-ID ::= 161 +*/ + +constexpr int64_t id_M6Configuration = 161; +/* +id-M7Configuration ProtocolIE-ID ::= 162 +*/ + +constexpr int64_t id_M7Configuration = 162; +/* +id-MBMS-Service-Area-List ProtocolIE-ID ::= 79 +*/ + +constexpr int64_t id_MBMS_Service_Area_List = 79; +/* +id-MBSFN-Subframe-Info ProtocolIE-ID ::= 56 +*/ + +constexpr int64_t id_MBSFN_Subframe_Info = 56; +/* +id-MDT-Location-Info ProtocolIE-ID ::= 88 +*/ + +constexpr int64_t id_MDT_Location_Info = 88; +/* +id-MDTConfiguration ProtocolIE-ID ::= 72 +*/ + +constexpr int64_t id_MDTConfiguration = 72; +/* +id-MakeBeforeBreakIndicator ProtocolIE-ID ::= 181 +*/ + +constexpr int64_t id_MakeBeforeBreakIndicator = 181; +/* +id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 89 +*/ + +constexpr int64_t id_ManagementBasedMDTPLMNList = 89; +/* +id-ManagementBasedMDTallowed ProtocolIE-ID ::= 74 +*/ + +constexpr int64_t id_ManagementBasedMDTallowed = 74; +/* +id-Masked-IMEISV ProtocolIE-ID ::= 98 +*/ + +constexpr int64_t id_Masked_IMEISV = 98; +/* +id-MeNB-UE-X2AP-ID ProtocolIE-ID ::= 111 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID = 111; +/* +id-MeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 157 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID_Extension = 157; +/* +id-MeNBCell-ID ProtocolIE-ID ::= 279 +*/ + +constexpr int64_t id_MeNBCell_ID = 279; +/* +id-MeNBCoordinationAssistanceInformation ProtocolIE-ID ::= 323 +*/ + +constexpr int64_t id_MeNBCoordinationAssistanceInformation = 323; +/* +id-MeNBResourceCoordinationInformation ProtocolIE-ID ::= 257 +*/ + +constexpr int64_t id_MeNBResourceCoordinationInformation = 257; +/* +id-MeNBtoSeNBContainer ProtocolIE-ID ::= 119 +*/ + +constexpr int64_t id_MeNBtoSeNBContainer = 119; +/* +id-MeNBtoSgNBContainer ProtocolIE-ID ::= 206 +*/ + +constexpr int64_t id_MeNBtoSgNBContainer = 206; +/* +id-Measurement-ID ProtocolIE-ID ::= 37 +*/ + +constexpr int64_t id_Measurement_ID = 37; +/* +id-MeasurementFailureCause-Item ProtocolIE-ID ::= 67 +*/ + +constexpr int64_t id_MeasurementFailureCause_Item = 67; +/* +id-MeasurementInitiationResult-Item ProtocolIE-ID ::= 66 +*/ + +constexpr int64_t id_MeasurementInitiationResult_Item = 66; +/* +id-MeasurementInitiationResult-List ProtocolIE-ID ::= 65 +*/ + +constexpr int64_t id_MeasurementInitiationResult_List = 65; +/* +id-MobilityInformation ProtocolIE-ID ::= 82 +*/ + +constexpr int64_t id_MobilityInformation = 82; +/* +id-MultibandInfoList ProtocolIE-ID ::= 84 +*/ + +constexpr int64_t id_MultibandInfoList = 84; +/* +id-NRCGI ProtocolIE-ID ::= 322 +*/ + +constexpr int64_t id_NRCGI = 322; +/* +id-NRS-NSSS-PowerOffset ProtocolIE-ID ::= 282 +*/ + +constexpr int64_t id_NRS_NSSS_PowerOffset = 282; +/* +id-NRUESecurityCapabilities ProtocolIE-ID ::= 248 +*/ + +constexpr int64_t id_NRUESecurityCapabilities = 248; +/* +id-NRrestrictionin5GS ProtocolIE-ID ::= 305 +*/ + +constexpr int64_t id_NRrestrictionin5GS = 305; +/* +id-NRrestrictioninEPSasSecondaryRAT ProtocolIE-ID ::= 202 +*/ + +constexpr int64_t id_NRrestrictioninEPSasSecondaryRAT = 202; +/* +id-NSSS-NumOccasionDifferentPrecoder ProtocolIE-ID ::= 283 +*/ + +constexpr int64_t id_NSSS_NumOccasionDifferentPrecoder = 283; +/* +id-NeighbourTAC ProtocolIE-ID ::= 76 +*/ + +constexpr int64_t id_NeighbourTAC = 76; +/* +id-New-eNB-UE-X2AP-ID ProtocolIE-ID ::= 9 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID = 9; +/* +id-New-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 155 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID_Extension = 155; +/* +id-NewEUTRANCellIdentifier ProtocolIE-ID ::= 175 +*/ + +constexpr int64_t id_NewEUTRANCellIdentifier = 175; +/* +id-Number-of-Antennaports ProtocolIE-ID ::= 41 +*/ + +constexpr int64_t id_Number_of_Antennaports = 41; +/* +id-OffsetOfNbiotChannelNumberToDL-EARFCN ProtocolIE-ID ::= 177 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177; +/* +id-OffsetOfNbiotChannelNumberToUL-EARFCN ProtocolIE-ID ::= 178 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178; +/* +id-Old-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 264 +*/ + +constexpr int64_t id_Old_SgNB_UE_X2AP_ID = 264; +/* +id-Old-eNB-UE-X2AP-ID ProtocolIE-ID ::= 10 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID = 10; +/* +id-Old-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 156 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID_Extension = 156; +/* +id-PDCPChangeIndication ProtocolIE-ID ::= 249 +*/ + +constexpr int64_t id_PDCPChangeIndication = 249; +/* +id-PRACH-Configuration ProtocolIE-ID ::= 55 +*/ + +constexpr int64_t id_PRACH_Configuration = 55; +/* +id-PartialSuccessIndicator ProtocolIE-ID ::= 64 +*/ + +constexpr int64_t id_PartialSuccessIndicator = 64; +/* +id-ProSeAuthorized ProtocolIE-ID ::= 103 +*/ + +constexpr int64_t id_ProSeAuthorized = 103; +/* +id-ProSeUEtoNetworkRelaying ProtocolIE-ID ::= 149 +*/ + +constexpr int64_t id_ProSeUEtoNetworkRelaying = 149; +/* +id-ProtectedEUTRAResourceIndication ProtocolIE-ID ::= 284 +*/ + +constexpr int64_t id_ProtectedEUTRAResourceIndication = 284; +/* +id-RLC-Status ProtocolIE-ID ::= 300 +*/ + +constexpr int64_t id_RLC_Status = 300; +/* +id-RLCMode-transferred ProtocolIE-ID ::= 317 +*/ + +constexpr int64_t id_RLCMode_transferred = 317; +/* +id-RNL-Header ProtocolIE-ID ::= 101 +*/ + +constexpr int64_t id_RNL_Header = 101; +/* +id-RRCConfigIndication ProtocolIE-ID ::= 272 +*/ + +constexpr int64_t id_RRCConfigIndication = 272; +/* +id-RRCConnReestabIndicator ProtocolIE-ID ::= 78 +*/ + +constexpr int64_t id_RRCConnReestabIndicator = 78; +/* +id-RRCConnSetupIndicator ProtocolIE-ID ::= 75 +*/ + +constexpr int64_t id_RRCConnSetupIndicator = 75; +/* +id-RRCContainer ProtocolIE-ID ::= 237 +*/ + +constexpr int64_t id_RRCContainer = 237; +/* +id-RSRPMRList ProtocolIE-ID ::= 110 +*/ + +constexpr int64_t id_RSRPMRList = 110; +/* +id-Re-establishmentCellECGI ProtocolIE-ID ::= 49 +*/ + +constexpr int64_t id_Re_establishmentCellECGI = 49; +/* +id-ReceiveStatusOfULPDCPSDUsExtended ProtocolIE-ID ::= 91 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsExtended = 91; +/* +id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ProtocolIE-ID ::= 150 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150; +/* +id-Registration-Request ProtocolIE-ID ::= 28 +*/ + +constexpr int64_t id_Registration_Request = 28; +/* +id-ReportCharacteristics ProtocolIE-ID ::= 38 +*/ + +constexpr int64_t id_ReportCharacteristics = 38; +/* +id-ReportingPeriodicity ProtocolIE-ID ::= 30 +*/ + +constexpr int64_t id_ReportingPeriodicity = 30; +/* +id-ReportingPeriodicityCSIR ProtocolIE-ID ::= 145 +*/ + +constexpr int64_t id_ReportingPeriodicityCSIR = 145; +/* +id-ReportingPeriodicityRSRPMR ProtocolIE-ID ::= 109 +*/ + +constexpr int64_t id_ReportingPeriodicityRSRPMR = 109; +/* +id-RequestedSplitSRBs ProtocolIE-ID ::= 208 +*/ + +constexpr int64_t id_RequestedSplitSRBs = 208; +/* +id-RequestedSplitSRBsrelease ProtocolIE-ID ::= 280 +*/ + +constexpr int64_t id_RequestedSplitSRBsrelease = 280; +/* +id-RespondingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 247 +*/ + +constexpr int64_t id_RespondingNodeType_EndcConfigUpdate = 247; +/* +id-RespondingNodeType-EndcX2Removal ProtocolIE-ID ::= 299 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Removal = 299; +/* +id-RespondingNodeType-EndcX2Setup ProtocolIE-ID ::= 246 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Setup = 246; +/* +id-RespondingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 286 +*/ + +constexpr int64_t id_RespondingNodeType_EutranrCellResourceCoordination = 286; +/* +id-ResponseInformationSeNBReconfComp ProtocolIE-ID ::= 123 +*/ + +constexpr int64_t id_ResponseInformationSeNBReconfComp = 123; +/* +id-ResponseInformationSgNBReconfComp ProtocolIE-ID ::= 214 +*/ + +constexpr int64_t id_ResponseInformationSgNBReconfComp = 214; +/* +id-SCGChangeIndication ProtocolIE-ID ::= 136 +*/ + +constexpr int64_t id_SCGChangeIndication = 136; +/* +id-SCGConfigurationQuery ProtocolIE-ID ::= 241 +*/ + +constexpr int64_t id_SCGConfigurationQuery = 241; +/* +id-SGNB-Addition-Trigger-Ind ProtocolIE-ID ::= 278 +*/ + +constexpr int64_t id_SGNB_Addition_Trigger_Ind = 278; +/* +id-SIPTO-BearerDeactivationIndication ProtocolIE-ID ::= 164 +*/ + +constexpr int64_t id_SIPTO_BearerDeactivationIndication = 164; +/* +id-SIPTO-Correlation-ID ProtocolIE-ID ::= 167 +*/ + +constexpr int64_t id_SIPTO_Correlation_ID = 167; +/* +id-SIPTO-L-GW-TransportLayerAddress ProtocolIE-ID ::= 168 +*/ + +constexpr int64_t id_SIPTO_L_GW_TransportLayerAddress = 168; +/* +id-SRBType ProtocolIE-ID ::= 238 +*/ + +constexpr int64_t id_SRBType = 238; +/* +id-SRVCCOperationPossible ProtocolIE-ID ::= 36 +*/ + +constexpr int64_t id_SRVCCOperationPossible = 36; +/* +id-SeNB-UE-X2AP-ID ProtocolIE-ID ::= 112 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID = 112; +/* +id-SeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 158 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID_Extension = 158; +/* +id-SeNBSecurityKey ProtocolIE-ID ::= 114 +*/ + +constexpr int64_t id_SeNBSecurityKey = 114; +/* +id-SeNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 115 +*/ + +constexpr int64_t id_SeNBUEAggregateMaximumBitRate = 115; +/* +id-SeNBtoMeNBContainer ProtocolIE-ID ::= 122 +*/ + +constexpr int64_t id_SeNBtoMeNBContainer = 122; +/* +id-SecondaryRATUsageReport ProtocolIE-ID ::= 255 +*/ + +constexpr int64_t id_SecondaryRATUsageReport = 255; +/* +id-SecondaryRATUsageReport-Item ProtocolIE-ID ::= 266 +*/ + +constexpr int64_t id_SecondaryRATUsageReport_Item = 266; +/* +id-SecondaryRATUsageReportList ProtocolIE-ID ::= 265 +*/ + +constexpr int64_t id_SecondaryRATUsageReportList = 265; +/* +id-SelectedPLMN ProtocolIE-ID ::= 269 +*/ + +constexpr int64_t id_SelectedPLMN = 269; +/* +id-ServedCells ProtocolIE-ID ::= 20 +*/ + +constexpr int64_t id_ServedCells = 20; +/* +id-ServedCellsToActivate ProtocolIE-ID ::= 57 +*/ + +constexpr int64_t id_ServedCellsToActivate = 57; +/* +id-ServedCellsToAdd ProtocolIE-ID ::= 25 +*/ + +constexpr int64_t id_ServedCellsToAdd = 25; +/* +id-ServedCellsToDelete ProtocolIE-ID ::= 27 +*/ + +constexpr int64_t id_ServedCellsToDelete = 27; +/* +id-ServedCellsToModify ProtocolIE-ID ::= 26 +*/ + +constexpr int64_t id_ServedCellsToModify = 26; +/* +id-ServedEUTRAcellsENDCX2ManagementList ProtocolIE-ID ::= 250 +*/ + +constexpr int64_t id_ServedEUTRAcellsENDCX2ManagementList = 250; +/* +id-ServedEUTRAcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 260 +*/ + +constexpr int64_t id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260; +/* +id-ServedEUTRAcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 259 +*/ + +constexpr int64_t id_ServedEUTRAcellsToModifyListENDCConfUpd = 259; +/* +id-ServedNRCellsToActivate ProtocolIE-ID ::= 267 +*/ + +constexpr int64_t id_ServedNRCellsToActivate = 267; +/* +id-ServedNRcellsENDCX2ManagementList ProtocolIE-ID ::= 253 +*/ + +constexpr int64_t id_ServedNRcellsENDCX2ManagementList = 253; +/* +id-ServedNRcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 262 +*/ + +constexpr int64_t id_ServedNRcellsToDeleteListENDCConfUpd = 262; +/* +id-ServedNRcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 261 +*/ + +constexpr int64_t id_ServedNRcellsToModifyListENDCConfUpd = 261; +/* +id-ServingPLMN ProtocolIE-ID ::= 116 +*/ + +constexpr int64_t id_ServingPLMN = 116; +/* +id-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 207 +*/ + +constexpr int64_t id_SgNB_UE_X2AP_ID = 207; +/* +id-SgNBActivityNotification ProcedureCode ::= 42 +*/ + +constexpr int64_t id_SgNBActivityNotification = 42; +/* +id-SgNBCoordinationAssistanceInformation ProtocolIE-ID ::= 324 +*/ + +constexpr int64_t id_SgNBCoordinationAssistanceInformation = 324; +/* +id-SgNBResourceCoordinationInformation ProtocolIE-ID ::= 258 +*/ + +constexpr int64_t id_SgNBResourceCoordinationInformation = 258; +/* +id-SgNBSecurityKey ProtocolIE-ID ::= 203 +*/ + +constexpr int64_t id_SgNBSecurityKey = 203; +/* +id-SgNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 204 +*/ + +constexpr int64_t id_SgNBUEAggregateMaximumBitRate = 204; +/* +id-SgNBtoMeNBContainer ProtocolIE-ID ::= 211 +*/ + +constexpr int64_t id_SgNBtoMeNBContainer = 211; +/* +id-ShortMAC-I ProtocolIE-ID ::= 51 +*/ + +constexpr int64_t id_ShortMAC_I = 51; +/* +id-SignallingBasedMDTPLMNList ProtocolIE-ID ::= 90 +*/ + +constexpr int64_t id_SignallingBasedMDTPLMNList = 90; +/* +id-SourceCellCRNTI ProtocolIE-ID ::= 83 +*/ + +constexpr int64_t id_SourceCellCRNTI = 83; +/* +id-SourceCellECGI ProtocolIE-ID ::= 52 +*/ + +constexpr int64_t id_SourceCellECGI = 52; +/* +id-SpectrumSharingGroupID ProtocolIE-ID ::= 288 +*/ + +constexpr int64_t id_SpectrumSharingGroupID = 288; +/* +id-SplitSRB ProtocolIE-ID ::= 242 +*/ + +constexpr int64_t id_SplitSRB = 242; +/* +id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 275 +*/ + +constexpr int64_t id_SubscriberProfileIDforRFP = 275; +/* +id-Subscription-Based-UE-DifferentiationInfo ProtocolIE-ID ::= 309 +*/ + +constexpr int64_t id_Subscription_Based_UE_DifferentiationInfo = 309; +/* +id-Target-SgNB-ID ProtocolIE-ID ::= 239 +*/ + +constexpr int64_t id_Target_SgNB_ID = 239; +/* +id-TargetCell-ID ProtocolIE-ID ::= 11 +*/ + +constexpr int64_t id_TargetCell_ID = 11; +/* +id-TargetCellInUTRAN ProtocolIE-ID ::= 81 +*/ + +constexpr int64_t id_TargetCellInUTRAN = 81; +/* +id-TargeteNBtoSource-eNBTransparentContainer ProtocolIE-ID ::= 12 +*/ + +constexpr int64_t id_TargeteNBtoSource_eNBTransparentContainer = 12; +/* +id-Time-UE-StayedInCell-EnhancedGranularity ProtocolIE-ID ::= 77 +*/ + +constexpr int64_t id_Time_UE_StayedInCell_EnhancedGranularity = 77; +/* +id-TimeToWait ProtocolIE-ID ::= 22 +*/ + +constexpr int64_t id_TimeToWait = 22; +/* +id-TraceActivation ProtocolIE-ID ::= 13 +*/ + +constexpr int64_t id_TraceActivation = 13; +/* +id-Tunnel-Information-for-BBF ProtocolIE-ID ::= 163 +*/ + +constexpr int64_t id_Tunnel_Information_for_BBF = 163; +/* +id-UE-ContextInformation ProtocolIE-ID ::= 14 +*/ + +constexpr int64_t id_UE_ContextInformation = 14; +/* +id-UE-ContextInformation-SgNBModReq ProtocolIE-ID ::= 215 +*/ + +constexpr int64_t id_UE_ContextInformation_SgNBModReq = 215; +/* +id-UE-ContextInformationRetrieve ProtocolIE-ID ::= 173 +*/ + +constexpr int64_t id_UE_ContextInformationRetrieve = 173; +/* +id-UE-ContextInformationSeNBModReq ProtocolIE-ID ::= 124 +*/ + +constexpr int64_t id_UE_ContextInformationSeNBModReq = 124; +/* +id-UE-ContextKeptIndicator ProtocolIE-ID ::= 154 +*/ + +constexpr int64_t id_UE_ContextKeptIndicator = 154; +/* +id-UE-ContextReferenceAtSeNB ProtocolIE-ID ::= 153 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSeNB = 153; +/* +id-UE-ContextReferenceAtSgNB ProtocolIE-ID ::= 254 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSgNB = 254; +/* +id-UE-ContextReferenceAtWT ProtocolIE-ID ::= 182 +*/ + +constexpr int64_t id_UE_ContextReferenceAtWT = 182; +/* +id-UE-HistoryInformation ProtocolIE-ID ::= 15 +*/ + +constexpr int64_t id_UE_HistoryInformation = 15; +/* +id-UE-HistoryInformationFromTheUE ProtocolIE-ID ::= 105 +*/ + +constexpr int64_t id_UE_HistoryInformationFromTheUE = 105; +/* +id-UE-RLF-Report-Container ProtocolIE-ID ::= 60 +*/ + +constexpr int64_t id_UE_RLF_Report_Container = 60; +/* +id-UE-RLF-Report-Container-for-extended-bands ProtocolIE-ID ::= 107 +*/ + +constexpr int64_t id_UE_RLF_Report_Container_for_extended_bands = 107; +/* +id-UE-SecurityCapabilities ProtocolIE-ID ::= 113 +*/ + +constexpr int64_t id_UE_SecurityCapabilities = 113; +/* +id-UE-X2AP-ID ProtocolIE-ID ::= 16 +*/ + +constexpr int64_t id_UE_X2AP_ID = 16; +/* +id-UEAppLayerMeasConfig ProtocolIE-ID ::= 195 +*/ + +constexpr int64_t id_UEAppLayerMeasConfig = 195; +/* +id-UEContextLevelUserPlaneActivity ProtocolIE-ID ::= 296 +*/ + +constexpr int64_t id_UEContextLevelUserPlaneActivity = 296; +/* +id-UEID ProtocolIE-ID ::= 147 +*/ + +constexpr int64_t id_UEID = 147; +/* +id-UENRMeasurement ProtocolIE-ID ::= 243 +*/ + +constexpr int64_t id_UENRMeasurement = 243; +/* +id-UESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 184 +*/ + +constexpr int64_t id_UESidelinkAggregateMaximumBitRate = 184; +/* +id-UEs-Admitted-ToBeReset ProtocolIE-ID ::= 271 +*/ + +constexpr int64_t id_UEs_Admitted_ToBeReset = 271; +/* +id-UEs-ToBeReset ProtocolIE-ID ::= 270 +*/ + +constexpr int64_t id_UEs_ToBeReset = 270; +/* +id-UL-EARFCNExtension ProtocolIE-ID ::= 95 +*/ + +constexpr int64_t id_UL_EARFCNExtension = 95; +/* +id-UL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 194 +*/ + +constexpr int64_t id_UL_scheduling_PDCCH_CCE_usage = 194; +/* +id-ULCOUNTValueExtended ProtocolIE-ID ::= 92 +*/ + +constexpr int64_t id_ULCOUNTValueExtended = 92; +/* +id-ULCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 151 +*/ + +constexpr int64_t id_ULCOUNTValuePDCP_SNlength18 = 151; +/* +id-UplinkPacketLossRate ProtocolIE-ID ::= 274 +*/ + +constexpr int64_t id_UplinkPacketLossRate = 274; +/* +id-V2XServicesAuthorized ProtocolIE-ID ::= 176 +*/ + +constexpr int64_t id_V2XServicesAuthorized = 176; +/* +id-WLANMeasurementConfiguration ProtocolIE-ID ::= 304 +*/ + +constexpr int64_t id_WLANMeasurementConfiguration = 304; +/* +id-WT-UE-ContextKeptIndicator ProtocolIE-ID ::= 183 +*/ + +constexpr int64_t id_WT_UE_ContextKeptIndicator = 183; +/* +id-X2RemovalThreshold ProtocolIE-ID ::= 169 +*/ + +constexpr int64_t id_X2RemovalThreshold = 169; +/* +id-cellActivation ProcedureCode ::= 15 +*/ + +constexpr int64_t id_cellActivation = 15; +/* +id-dL-Forwarding ProtocolIE-ID ::= 306 +*/ + +constexpr int64_t id_dL_Forwarding = 306; +/* +id-dLPDCPSnLength ProtocolIE-ID ::= 311 +*/ + +constexpr int64_t id_dLPDCPSnLength = 311; +/* +id-dataForwardingAddressIndication ProcedureCode ::= 44 +*/ + +constexpr int64_t id_dataForwardingAddressIndication = 44; +/* +id-duplicationActivation ProtocolIE-ID ::= 315 +*/ + +constexpr int64_t id_duplicationActivation = 315; +/* +id-eARFCNExtension ProtocolIE-ID ::= 94 +*/ + +constexpr int64_t id_eARFCNExtension = 94; +/* +id-eNBConfigurationUpdate ProcedureCode ::= 8 +*/ + +constexpr int64_t id_eNBConfigurationUpdate = 8; +/* +id-eUTRANRCellResourceCoordination ProcedureCode ::= 41 +*/ + +constexpr int64_t id_eUTRANRCellResourceCoordination = 41; +/* +id-endcCellActivation ProcedureCode ::= 39 +*/ + +constexpr int64_t id_endcCellActivation = 39; +/* +id-endcConfigurationUpdate ProcedureCode ::= 37 +*/ + +constexpr int64_t id_endcConfigurationUpdate = 37; +/* +id-endcPartialReset ProcedureCode ::= 40 +*/ + +constexpr int64_t id_endcPartialReset = 40; +/* +id-endcX2Removal ProcedureCode ::= 43 +*/ + +constexpr int64_t id_endcX2Removal = 43; +/* +id-endcX2Setup ProcedureCode ::= 36 +*/ + +constexpr int64_t id_endcX2Setup = 36; +/* +id-enhancedRNTP ProtocolIE-ID ::= 148 +*/ + +constexpr int64_t id_enhancedRNTP = 148; +/* +id-errorIndication ProcedureCode ::= 3 +*/ + +constexpr int64_t id_errorIndication = 3; +/* +id-extended-e-RAB-GuaranteedBitrateDL ProtocolIE-ID ::= 198 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateDL = 198; +/* +id-extended-e-RAB-GuaranteedBitrateUL ProtocolIE-ID ::= 199 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateUL = 199; +/* +id-extended-e-RAB-MaximumBitrateDL ProtocolIE-ID ::= 196 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateDL = 196; +/* +id-extended-e-RAB-MaximumBitrateUL ProtocolIE-ID ::= 197 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateUL = 197; +/* +id-extended-uEaggregateMaximumBitRateDownlink ProtocolIE-ID ::= 200 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateDownlink = 200; +/* +id-extended-uEaggregateMaximumBitRateUplink ProtocolIE-ID ::= 201 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateUplink = 201; +/* +id-gNBStatusIndication ProcedureCode ::= 45 +*/ + +constexpr int64_t id_gNBStatusIndication = 45; +/* +id-handoverCancel ProcedureCode ::= 1 +*/ + +constexpr int64_t id_handoverCancel = 1; +/* +id-handoverPreparation ProcedureCode ::= 0 +*/ + +constexpr int64_t id_handoverPreparation = 0; +/* +id-handoverReport ProcedureCode ::= 14 +*/ + +constexpr int64_t id_handoverReport = 14; +/* +id-lCID ProtocolIE-ID ::= 314 +*/ + +constexpr int64_t id_lCID = 314; +/* +id-loadIndication ProcedureCode ::= 2 +*/ + +constexpr int64_t id_loadIndication = 2; +/* +id-meNBinitiatedSeNBModificationPreparation ProcedureCode ::= 21 +*/ + +constexpr int64_t id_meNBinitiatedSeNBModificationPreparation = 21; +/* +id-meNBinitiatedSeNBRelease ProcedureCode ::= 23 +*/ + +constexpr int64_t id_meNBinitiatedSeNBRelease = 23; +/* +id-meNBinitiatedSgNBModificationPreparation ProcedureCode ::= 29 +*/ + +constexpr int64_t id_meNBinitiatedSgNBModificationPreparation = 29; +/* +id-meNBinitiatedSgNBRelease ProcedureCode ::= 31 +*/ + +constexpr int64_t id_meNBinitiatedSgNBRelease = 31; +/* +id-mobilitySettingsChange ProcedureCode ::= 12 +*/ + +constexpr int64_t id_mobilitySettingsChange = 12; +/* +id-new-drb-ID-req ProtocolIE-ID ::= 325 +*/ + +constexpr int64_t id_new_drb_ID_req = 325; +/* +id-privateMessage ProcedureCode ::= 11 +*/ + +constexpr int64_t id_privateMessage = 11; +/* +id-rLFIndication ProcedureCode ::= 13 +*/ + +constexpr int64_t id_rLFIndication = 13; +/* +id-rRCTransfer ProcedureCode ::= 35 +*/ + +constexpr int64_t id_rRCTransfer = 35; +/* +id-reset ProcedureCode ::= 7 +*/ + +constexpr int64_t id_reset = 7; +/* +id-resourceStatusReporting ProcedureCode ::= 10 +*/ + +constexpr int64_t id_resourceStatusReporting = 10; +/* +id-resourceStatusReportingInitiation ProcedureCode ::= 9 +*/ + +constexpr int64_t id_resourceStatusReportingInitiation = 9; +/* +id-resumeID ProtocolIE-ID ::= 172 +*/ + +constexpr int64_t id_resumeID = 172; +/* +id-retrieveUEContext ProcedureCode ::= 26 +*/ + +constexpr int64_t id_retrieveUEContext = 26; +/* +id-seNBAdditionPreparation ProcedureCode ::= 19 +*/ + +constexpr int64_t id_seNBAdditionPreparation = 19; +/* +id-seNBCounterCheck ProcedureCode ::= 25 +*/ + +constexpr int64_t id_seNBCounterCheck = 25; +/* +id-seNBReconfigurationCompletion ProcedureCode ::= 20 +*/ + +constexpr int64_t id_seNBReconfigurationCompletion = 20; +/* +id-seNBinitiatedSeNBModification ProcedureCode ::= 22 +*/ + +constexpr int64_t id_seNBinitiatedSeNBModification = 22; +/* +id-seNBinitiatedSeNBRelease ProcedureCode ::= 24 +*/ + +constexpr int64_t id_seNBinitiatedSeNBRelease = 24; +/* +id-secondaryRATDataUsageReport ProcedureCode ::= 38 +*/ + +constexpr int64_t id_secondaryRATDataUsageReport = 38; +/* +id-secondarymeNBULGTPTEIDatPDCP ProtocolIE-ID ::= 313 +*/ + +constexpr int64_t id_secondarymeNBULGTPTEIDatPDCP = 313; +/* +id-secondarysgNBDLGTPTEIDatPDCP ProtocolIE-ID ::= 312 +*/ + +constexpr int64_t id_secondarysgNBDLGTPTEIDatPDCP = 312; +/* +id-serviceType ProtocolIE-ID ::= 276 +*/ + +constexpr int64_t id_serviceType = 276; +/* +id-sgNBAdditionPreparation ProcedureCode ::= 27 +*/ + +constexpr int64_t id_sgNBAdditionPreparation = 27; +/* +id-sgNBChange ProcedureCode ::= 34 +*/ + +constexpr int64_t id_sgNBChange = 34; +/* +id-sgNBCounterCheck ProcedureCode ::= 33 +*/ + +constexpr int64_t id_sgNBCounterCheck = 33; +/* +id-sgNBReconfigurationCompletion ProcedureCode ::= 28 +*/ + +constexpr int64_t id_sgNBReconfigurationCompletion = 28; +/* +id-sgNBinitiatedSgNBModification ProcedureCode ::= 30 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBModification = 30; +/* +id-sgNBinitiatedSgNBRelease ProcedureCode ::= 32 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBRelease = 32; +/* +id-snStatusTransfer ProcedureCode ::= 4 +*/ + +constexpr int64_t id_snStatusTransfer = 4; +/* +id-uEContextRelease ProcedureCode ::= 5 +*/ + +constexpr int64_t id_uEContextRelease = 5; +/* +id-uL-GTPtunnelEndpoint ProtocolIE-ID ::= 185 +*/ + +constexpr int64_t id_uL_GTPtunnelEndpoint = 185; +/* +id-uLpDCPSnLength ProtocolIE-ID ::= 302 +*/ + +constexpr int64_t id_uLpDCPSnLength = 302; +/* +id-x2APMessage ProtocolIE-ID ::= 102 +*/ + +constexpr int64_t id_x2APMessage = 102; +/* +id-x2APMessageTransfer ProcedureCode ::= 17 +*/ + +constexpr int64_t id_x2APMessageTransfer = 17; +/* +id-x2Release ProcedureCode ::= 16 +*/ + +constexpr int64_t id_x2Release = 16; +/* +id-x2Removal ProcedureCode ::= 18 +*/ + +constexpr int64_t id_x2Removal = 18; +/* +id-x2Setup ProcedureCode ::= 6 +*/ + +constexpr int64_t id_x2Setup = 6; +/* +maxCSIProcess INTEGER ::= 4 +*/ + +constexpr int64_t maxCSIProcess = 4; +/* +maxCSIReport INTEGER ::= 2 +*/ + +constexpr int64_t maxCSIReport = 2; +/* +maxCellReport INTEGER ::= 9 +*/ + +constexpr int64_t maxCellReport = 9; +/* +maxCellineNB INTEGER ::= 256 +*/ + +constexpr int64_t maxCellineNB = 256; +/* +maxCellinengNB INTEGER ::= 16384 +*/ + +constexpr int64_t maxCellinengNB = 16384; +/* +maxEARFCN INTEGER ::= 65535 +*/ + +constexpr int64_t maxEARFCN = 65535; +/* +maxEARFCNPlusOne INTEGER ::= 65536 +*/ + +constexpr int64_t maxEARFCNPlusOne = 65536; +/* +maxFailedMeasObjects INTEGER ::= 32 +*/ + +constexpr int64_t maxFailedMeasObjects = 32; +/* +maxInterfaces INTEGER ::= 16 +*/ + +constexpr int64_t maxInterfaces = 16; +/* +maxNrOfErrors INTEGER ::= 256 +*/ + +constexpr int64_t maxNrOfErrors = 256; +/* +maxPools INTEGER ::= 16 +*/ + +constexpr int64_t maxPools = 16; +/* +maxSubband INTEGER ::= 14 +*/ + +constexpr int64_t maxSubband = 14; +/* +maxUEReport INTEGER ::= 128 +*/ + +constexpr int64_t maxUEReport = 128; +/* +maxUEsinengNBDU INTEGER ::= 8192 +*/ + +constexpr int64_t maxUEsinengNBDU = 8192; +/* +maxnoNRcellsSpectrumSharingWithE-UTRA INTEGER ::= 64 +*/ + +constexpr int64_t maxnoNRcellsSpectrumSharingWithE_UTRA = 64; +/* +maxnoofBPLMNs INTEGER ::= 6 +*/ + +constexpr int64_t maxnoofBPLMNs = 6; +/* +maxnoofBands INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofBands = 16; +/* +maxnoofBearers INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofBearers = 256; +/* +maxnoofBluetoothName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofBluetoothName = 4; +/* +maxnoofCellIDforMDT INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforMDT = 32; +/* +maxnoofCellIDforQMC INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforQMC = 32; +/* +maxnoofCells INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofCells = 16; +/* +maxnoofCoMPCells INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCoMPCells = 32; +/* +maxnoofCoMPHypothesisSet INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofCoMPHypothesisSet = 256; +/* +maxnoofEPLMNs INTEGER ::= 15 +*/ + +constexpr int64_t maxnoofEPLMNs = 15; +/* +maxnoofEPLMNsPlusOne INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofEPLMNsPlusOne = 16; +/* +maxnoofForbLACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbLACs = 4096; +/* +maxnoofForbTACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbTACs = 4096; +/* +maxnoofMBMSServiceAreaIdentities INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofMBMSServiceAreaIdentities = 256; +/* +maxnoofMBSFN INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofMBSFN = 8; +/* +maxnoofMDTPLMNs INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofMDTPLMNs = 16; +/* +maxnoofNeighbours INTEGER ::= 512 +*/ + +constexpr int64_t maxnoofNeighbours = 512; +/* +maxnoofNrCellBands INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofNrCellBands = 32; +/* +maxnoofPA INTEGER ::= 3 +*/ + +constexpr int64_t maxnoofPA = 3; +/* +maxnoofPDCP-SN INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPDCP_SN = 16; +/* +maxnoofPLMNforQMC INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPLMNforQMC = 16; +/* +maxnoofPRBs INTEGER ::= 110 +*/ + +constexpr int64_t maxnoofPRBs = 110; +/* +maxnoofProtectedResourcePatterns INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofProtectedResourcePatterns = 16; +/* +maxnoofTAforMDT INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforMDT = 8; +/* +maxnoofTAforQMC INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforQMC = 8; +/* +maxnoofWLANName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofWLANName = 4; +/* +maxnooftimeperiods INTEGER ::= 2 +*/ + +constexpr int64_t maxnooftimeperiods = 2; +/* +maxofNRNeighbours INTEGER ::= 1024 +*/ + +constexpr int64_t maxofNRNeighbours = 1024; +/* +newmaxEARFCN INTEGER ::= 262143 +*/ + +constexpr int64_t newmaxEARFCN = 262143; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp new file mode 100644 index 0000000..09545bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-Containers.hpp @@ -0,0 +1,700 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +X2AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PRIVATE_IES +{ + struct id_t : PrivateIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = PrivateIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct PrivateIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "PrivateIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} +*/ + +template +struct PrivateIE_Container_elm : PrivateIE_Field +{ + static constexpr const char* name() {return "PrivateIE_Container_elm";} + using parent_t = PrivateIE_Field; + +}; +template +struct PrivateIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "PrivateIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_EXTENSION +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} +*/ + +template +struct ProtocolExtensionField : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolExtensionField";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : ExtensionSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename ExtensionSetParam::id_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : ExtensionSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename ExtensionSetParam::criticality_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct extensionValue_t : ExtensionSetParam::Extension_t + { + static constexpr const char* name() {return "extensionValue_t";} + using parent_t = typename ExtensionSetParam::Extension_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::Extension_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::Extension_t::encode(c.id.get_index(), v); + }; + }; + extensionValue_t& ref_extensionValue() {return extensionValue;} + extensionValue_t const& ref_extensionValue() const {return extensionValue;} + template void decode(V& v) + { + v(id); + v(criticality); + v(extensionValue); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(extensionValue); + + }; + void clear() + { + id.clear(); + criticality.clear(); + extensionValue.clear(); + + }; + private: + id_t id; + criticality_t criticality; + extensionValue_t extensionValue; + +}; +/* +ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} +*/ + +template +struct ProtocolExtensionContainer_elm : ProtocolExtensionField +{ + static constexpr const char* name() {return "ProtocolExtensionContainer_elm";} + using parent_t = ProtocolExtensionField; + +}; +template +struct ProtocolExtensionContainer : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolExtensionContainer";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_IES +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Container_elm : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE_Container_elm";} + using parent_t = ProtocolIE_Field; + +}; +template +struct ProtocolIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerList_elm : ProtocolIE_Container +{ + static constexpr const char* name() {return "ProtocolIE_ContainerList_elm";} + using parent_t = ProtocolIE_Container; + +}; +template +struct ProtocolIE_ContainerList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-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 +} +*/ + +struct X2AP_PROTOCOL_IES_PAIR +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct firstCriticality_t : Criticality + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = Criticality; + + }; + struct secondCriticality_t : Criticality + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_FieldPair : asn::sequence<5, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-FieldPair";} + using parent_t = asn::sequence<5, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct firstCriticality_t : IEsSetParam::firstCriticality_t + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = typename IEsSetParam::firstCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::firstCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::firstCriticality_t::encode(c.id.get_index(), v); + }; + }; + firstCriticality_t& ref_firstCriticality() {return firstCriticality;} + firstCriticality_t const& ref_firstCriticality() const {return firstCriticality;} + struct firstValue_t : IEsSetParam::FirstValue_t + { + static constexpr const char* name() {return "firstValue_t";} + using parent_t = typename IEsSetParam::FirstValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::FirstValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::FirstValue_t::encode(c.id.get_index(), v); + }; + }; + firstValue_t& ref_firstValue() {return firstValue;} + firstValue_t const& ref_firstValue() const {return firstValue;} + struct secondCriticality_t : IEsSetParam::secondCriticality_t + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = typename IEsSetParam::secondCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::secondCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::secondCriticality_t::encode(c.id.get_index(), v); + }; + }; + secondCriticality_t& ref_secondCriticality() {return secondCriticality;} + secondCriticality_t const& ref_secondCriticality() const {return secondCriticality;} + struct secondValue_t : IEsSetParam::SecondValue_t + { + static constexpr const char* name() {return "secondValue_t";} + using parent_t = typename IEsSetParam::SecondValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::SecondValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::SecondValue_t::encode(c.id.get_index(), v); + }; + }; + secondValue_t& ref_secondValue() {return secondValue;} + secondValue_t const& ref_secondValue() const {return secondValue;} + template void decode(V& v) + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + template void encode(V& v) const + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + void clear() + { + id.clear(); + firstCriticality.clear(); + firstValue.clear(); + secondCriticality.clear(); + secondValue.clear(); + + }; + private: + id_t id; + firstCriticality_t firstCriticality; + firstValue_t firstValue; + secondCriticality_t secondCriticality; + secondValue_t secondValue; + +}; +/* +ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPair_elm : ProtocolIE_FieldPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPair_elm";} + using parent_t = ProtocolIE_FieldPair; + +}; +template +struct ProtocolIE_ContainerPair : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPair";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPairList_elm : ProtocolIE_ContainerPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPairList_elm";} + using parent_t = ProtocolIE_ContainerPair; + +}; +template +struct ProtocolIE_ContainerPairList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPairList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Single_Container : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE-Single-Container";} + using parent_t = ProtocolIE_Field; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp new file mode 100644 index 0000000..f056563 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-IEs.hpp @@ -0,0 +1,35962 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-Constants.hpp" +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-Containers.hpp" + +/* +DL-ABS-status::= INTEGER (0..100) +*/ + +struct DL_ABS_status : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-ABS-status";} + using parent_t = asn::integer<>; + +}; + +/* +UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationFDD ::= SEQUENCE { + usable-abs-pattern-info BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationFDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;} + usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usable_abs_pattern_info_t usable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationTDD ::= SEQUENCE { + usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationTDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usaable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usaable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;} + usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usaable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usaable_abs_pattern_info_t usaable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformation ::= CHOICE { + fdd UsableABSInformationFDD, + tdd UsableABSInformationTDD, + ... +} +*/ + +struct UsableABSInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "UsableABSInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~UsableABSInformation() {clear();} + struct fdd_t : UsableABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = UsableABSInformationFDD; + + }; + struct tdd_t : UsableABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = UsableABSInformationTDD; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABS_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABS-Status ::= SEQUENCE { + dL-ABS-status DL-ABS-status, + usableABSInformation UsableABSInformation, + iE-Extensions ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABS_Status : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ABS-Status";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_ABS_status_t : DL_ABS_status + { + static constexpr const char* name() {return "dL_ABS_status_t";} + using parent_t = DL_ABS_status; + + }; + dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;} + dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;} + struct usableABSInformation_t : UsableABSInformation + { + static constexpr const char* name() {return "usableABSInformation_t";} + using parent_t = UsableABSInformation; + + }; + usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;} + usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + void clear() + { + dL_ABS_status.clear(); + usableABSInformation.clear(); + iE_Extensions.clear(); + + }; + private: + dL_ABS_status_t dL_ABS_status; + usableABSInformation_t usableABSInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationFDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(40)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationFDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationFDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationTDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(1..70, ...)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationTDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationTDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformation ::= CHOICE { + fdd ABSInformationFDD, + tdd ABSInformationTDD, + abs-inactive NULL, + ... +} +*/ + +struct ABSInformation : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "ABSInformation";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~ABSInformation() {clear();} + struct fdd_t : ABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = ABSInformationFDD; + + }; + struct tdd_t : ABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = ABSInformationTDD; + + }; + struct abs_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "abs_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + char dummy3[sizeof(abs_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Key-eNodeB-Star ::= BIT STRING (SIZE(256)) +*/ + +struct Key_eNodeB_Star : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Key-eNodeB-Star";} + using parent_t = asn::bstring<>; + +}; + +/* +NextHopChainingCount ::= INTEGER (0..7) +*/ + +struct NextHopChainingCount : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NextHopChainingCount";} + using parent_t = asn::integer<>; + +}; + +/* +AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AS_SecurityInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AS-SecurityInformation ::= SEQUENCE { + key-eNodeB-star Key-eNodeB-Star, + nextHopChainingCount NextHopChainingCount, + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AS_SecurityInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "AS-SecurityInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct key_eNodeB_star_t : Key_eNodeB_Star + { + static constexpr const char* name() {return "key_eNodeB_star_t";} + using parent_t = Key_eNodeB_Star; + + }; + key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;} + key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;} + struct nextHopChainingCount_t : NextHopChainingCount + { + static constexpr const char* name() {return "nextHopChainingCount_t";} + using parent_t = NextHopChainingCount; + + }; + nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;} + nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + void clear() + { + key_eNodeB_star.clear(); + nextHopChainingCount.clear(); + iE_Extensions.clear(); + + }; + private: + key_eNodeB_star_t key_eNodeB_star; + nextHopChainingCount_t nextHopChainingCount; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivationID ::= INTEGER (0..255) +*/ + +struct ActivationID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ActivationID";} + using parent_t = asn::integer<>; + +}; + +/* +AdditionalSpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ... +} +*/ + +struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";} + using parent_t = asn::enumerated<10, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + ,ssp9 + } index_t; + +}; + +/* +CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixDL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixDL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixUL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixUL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframe-Info ::= SEQUENCE { + additionalspecialSubframePatterns AdditionalSpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns + { + static constexpr const char* name() {return "additionalspecialSubframePatterns_t";} + using parent_t = AdditionalSpecialSubframePatterns; + + }; + additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;} + additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatterns_t additionalspecialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AdditionalSpecialSubframePatternsExtension ::= ENUMERATED { + ssp10, + ... +} +*/ + +struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ssp10 + } index_t; + +}; + +/* +AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframeExtension-Info ::= SEQUENCE { + additionalspecialSubframePatternsExtension AdditionalSpecialSubframePatternsExtension, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension + { + static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";} + using parent_t = AdditionalSpecialSubframePatternsExtension; + + }; + additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;} + additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatternsExtension.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AerialUEsubscriptionInformation ::= ENUMERATED { + allowed, + not-allowed, + ... +} +*/ + +struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "AerialUEsubscriptionInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + allowed + ,not_allowed + } index_t; + +}; + +/* +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) +*/ + +struct PriorityLevel : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PriorityLevel";} + using parent_t = asn::integer<>; + enum {spare = 0, highest = 1, lowest = 14, no_priority = 15}; + +}; + +/* +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} +*/ + +struct Pre_emptionCapability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionCapability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + shall_not_trigger_pre_emption + ,may_trigger_pre_emption + } index_t; + +}; + +/* +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} +*/ + +struct Pre_emptionVulnerability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionVulnerability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + not_pre_emptable + ,pre_emptable + } index_t; + +}; + +/* +AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AllocationAndRetentionPriority_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AllocationAndRetentionPriority";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct priorityLevel_t : PriorityLevel + { + static constexpr const char* name() {return "priorityLevel_t";} + using parent_t = PriorityLevel; + + }; + priorityLevel_t& ref_priorityLevel() {return priorityLevel;} + priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;} + struct pre_emptionCapability_t : Pre_emptionCapability + { + static constexpr const char* name() {return "pre_emptionCapability_t";} + using parent_t = Pre_emptionCapability; + + }; + pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;} + pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;} + struct pre_emptionVulnerability_t : Pre_emptionVulnerability + { + static constexpr const char* name() {return "pre_emptionVulnerability_t";} + using parent_t = Pre_emptionVulnerability; + + }; + pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;} + pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + void clear() + { + priorityLevel.clear(); + pre_emptionCapability.clear(); + pre_emptionVulnerability.clear(); + iE_Extensions.clear(); + + }; + private: + priorityLevel_t priorityLevel; + pre_emptionCapability_t pre_emptionCapability; + pre_emptionVulnerability_t pre_emptionVulnerability; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMN-Identity ::= OCTET STRING (SIZE(3)) +*/ + +struct PLMN_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PLMN-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) +*/ + +struct EUTRANCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ECGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ECGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ECGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eUTRANcellIdentifier_t : EUTRANCellIdentifier + { + static constexpr const char* name() {return "eUTRANcellIdentifier_t";} + using parent_t = EUTRANCellIdentifier; + + }; + eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;} + eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eUTRANcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eUTRANcellIdentifier_t eUTRANcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI +*/ + +struct CellIdListforMDT_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforMDT_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedMDT::= SEQUENCE { + cellIdListforMDT CellIdListforMDT, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforMDT_t : CellIdListforMDT + { + static constexpr const char* name() {return "cellIdListforMDT_t";} + using parent_t = CellIdListforMDT; + + }; + cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;} + cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforMDT_t cellIdListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAC ::= OCTET STRING (SIZE (2)) +*/ + +struct TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC +*/ + +struct TAListforMDT_elm : TAC +{ + static constexpr const char* name() {return "TAListforMDT_elm";} + using parent_t = TAC; + +}; +struct TAListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedMDT::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforMDT_t : TAListforMDT + { + static constexpr const char* name() {return "tAListforMDT_t";} + using parent_t = TAListforMDT; + + }; + tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;} + tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforMDT_t tAListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAI_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAI-Item ::= SEQUENCE { + tAC TAC, + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAI_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TAI-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + void clear() + { + tAC.clear(); + pLMN_Identity.clear(); + iE_Extensions.clear(); + + }; + private: + tAC_t tAC; + pLMN_Identity_t pLMN_Identity; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item +*/ + +struct TAIListforMDT_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforMDT_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforMDT_t : TAIListforMDT + { + static constexpr const char* name() {return "tAIListforMDT_t";} + using parent_t = TAIListforMDT; + + }; + tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;} + tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAIListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforMDT_t tAIListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfMDT ::= CHOICE { + cellBased CellBasedMDT, + tABased TABasedMDT, + pLMNWide NULL, + ..., + tAIBased TAIBasedMDT +} +*/ + +struct AreaScopeOfMDT : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "AreaScopeOfMDT";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfMDT() {clear();} + struct cellBased_t : CellBasedMDT + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedMDT; + + }; + struct tABased_t : TABasedMDT + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedMDT; + + }; + struct pLMNWide_t : asn::nulltype + { + static constexpr const char* name() {return "pLMNWide_t";} + using parent_t = asn::nulltype; + + }; + struct tAIBased_t : TAIBasedMDT + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedMDT; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(pLMNWide_t)]; + char dummy4[sizeof(tAIBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI +*/ + +struct CellIdListforQMC_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforQMC_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedQMC::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforQMC_t : CellIdListforQMC + { + static constexpr const char* name() {return "cellIdListforQMC_t";} + using parent_t = CellIdListforQMC; + + }; + cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;} + cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforQMC_t cellIdListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC +*/ + +struct TAListforQMC_elm : TAC +{ + static constexpr const char* name() {return "TAListforQMC_elm";} + using parent_t = TAC; + +}; +struct TAListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforQMC_t : TAListforQMC + { + static constexpr const char* name() {return "tAListforQMC_t";} + using parent_t = TAListforQMC; + + }; + tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;} + tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforQMC_t tAListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item +*/ + +struct TAIListforQMC_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforQMC_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforQMC_t : TAIListforQMC + { + static constexpr const char* name() {return "tAIListforQMC_t";} + using parent_t = TAIListforQMC; + + }; + tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;} + tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAIListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforQMC_t tAIListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity +*/ + +struct PLMNListforQMC_elm : PLMN_Identity +{ + static constexpr const char* name() {return "PLMNListforQMC_elm";} + using parent_t = PLMN_Identity; + +}; +struct PLMNListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "PLMNListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PLMNAreaBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "PLMNAreaBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct plmnListforQMC_t : PLMNListforQMC + { + static constexpr const char* name() {return "plmnListforQMC_t";} + using parent_t = PLMNListforQMC; + + }; + plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;} + plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + void clear() + { + plmnListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + plmnListforQMC_t plmnListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + ... +} +*/ + +struct AreaScopeOfQMC : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "AreaScopeOfQMC";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfQMC() {clear();} + struct cellBased_t : CellBasedQMC + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedQMC; + + }; + struct tABased_t : TABasedQMC + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedQMC; + + }; + struct tAIBased_t : TAIBasedQMC + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedQMC; + + }; + struct pLMNAreaBased_t : PLMNAreaBasedQMC + { + static constexpr const char* name() {return "pLMNAreaBased_t";} + using parent_t = PLMNAreaBasedQMC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as();} return nullptr; } + pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(tAIBased_t)]; + char dummy4[sizeof(pLMNAreaBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +FreqBandIndicator ::= INTEGER (1..256, ...) +*/ + +struct FreqBandIndicator : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FreqBandIndicator";} + using parent_t = asn::integer<>; + +}; + +/* +BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BandInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BandInfo ::= SEQUENCE { + freqBandIndicator FreqBandIndicator, + iE-Extensions ProtocolExtensionContainer { {BandInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BandInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "BandInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicator_t : FreqBandIndicator + { + static constexpr const char* name() {return "freqBandIndicator_t";} + using parent_t = FreqBandIndicator; + + }; + freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;} + freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicator_t freqBandIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +BandwidthReducedSI::= ENUMERATED { + scheduled, + ... +} +*/ + +struct BandwidthReducedSI : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BandwidthReducedSI";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + scheduled + } index_t; + +}; + +/* +BearerType ::= ENUMERATED { + non-IP, + ... +} +*/ + +struct BearerType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BearerType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + non_IP + } index_t; + +}; + +/* +BenefitMetric ::= INTEGER (-101..100, ...) +*/ + +struct BenefitMetric : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BenefitMetric";} + using parent_t = asn::integer<>; + +}; + +/* +BitRate ::= INTEGER (0..10000000000) +*/ + +struct BitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BitRate";} + using parent_t = asn::integer<>; + +}; + +/* +BluetoothMeasConfig::= ENUMERATED {setup,...} +*/ + +struct BluetoothMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BluetoothMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +BluetoothName ::= OCTET STRING (SIZE (1..248)) +*/ + +struct BluetoothName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BluetoothName";} + using parent_t = asn::ostring<>; + +}; + +/* +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName +*/ + +struct BluetoothMeasConfigNameList_elm : BluetoothName +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";} + using parent_t = BluetoothName; + +}; +struct BluetoothMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BluetoothMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "BluetoothMeasurementConfiguration";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct bluetoothMeasConfig_t : BluetoothMeasConfig + { + static constexpr const char* name() {return "bluetoothMeasConfig_t";} + using parent_t = BluetoothMeasConfig; + + }; + bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;} + bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;} + struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList + { + static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";} + using parent_t = BluetoothMeasConfigNameList; + static constexpr bool optional = true; + + }; + bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;} + bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;} + struct bt_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "bt_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;} + bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + void clear() + { + bluetoothMeasConfig.clear(); + bluetoothMeasConfigNameList.clear(); + bt_rssi.clear(); + iE_Extensions.clear(); + + }; + private: + bluetoothMeasConfig_t bluetoothMeasConfig; + bluetoothMeasConfigNameList_t bluetoothMeasConfigNameList; + bt_rssi_t bt_rssi; + iE_Extensions_t iE_Extensions; + +}; +/* +BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity +*/ + +struct BroadcastPLMNs_Item_elm : PLMN_Identity +{ + static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";} + using parent_t = PLMN_Identity; + +}; +struct BroadcastPLMNs_Item : asn::sequenceof +{ + static constexpr const char* name() {return "BroadcastPLMNs-Item";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CNTypeRestrictionsItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CNTypeRestrictionsItem ::= SEQUENCE { + plmn-Id PLMN-Identity, + cn-type ENUMERATED {fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CNTypeRestrictionsItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct plmn_Id_t : PLMN_Identity + { + static constexpr const char* name() {return "plmn_Id_t";} + using parent_t = PLMN_Identity; + + }; + plmn_Id_t& ref_plmn_Id() {return plmn_Id;} + plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;} + struct cn_type_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "cn_type_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + fiveGC_forbidden + } index_t; + + }; + + cn_type_t& ref_cn_type() {return cn_type;} + cn_type_t const& ref_cn_type() const {return cn_type;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + void clear() + { + plmn_Id.clear(); + cn_type.clear(); + iE_Extensions.clear(); + + }; + private: + plmn_Id_t plmn_Id; + cn_type_t cn_type; + iE_Extensions_t iE_Extensions; + +}; +/* +CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem +*/ + +struct CNTypeRestrictions_elm : CNTypeRestrictionsItem +{ + static constexpr const char* name() {return "CNTypeRestrictions_elm";} + using parent_t = CNTypeRestrictionsItem; + +}; +struct CNTypeRestrictions : asn::sequenceof +{ + static constexpr const char* name() {return "CNTypeRestrictions";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PDCP-SNExtended ::= INTEGER (0..32767) +*/ + +struct PDCP_SNExtended : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNExtended";} + using parent_t = asn::integer<>; + +}; + +/* +HFNModified ::= INTEGER (0..131071) +*/ + +struct HFNModified : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNModified";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTValueExtended_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTValueExtended ::= SEQUENCE { + pDCP-SNExtended PDCP-SNExtended, + hFNModified HFNModified, + iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTValueExtended : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTValueExtended";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNExtended_t : PDCP_SNExtended + { + static constexpr const char* name() {return "pDCP_SNExtended_t";} + using parent_t = PDCP_SNExtended; + + }; + pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;} + pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;} + struct hFNModified_t : HFNModified + { + static constexpr const char* name() {return "hFNModified_t";} + using parent_t = HFNModified; + + }; + hFNModified_t& ref_hFNModified() {return hFNModified;} + hFNModified_t const& ref_hFNModified() const {return hFNModified;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNExtended.clear(); + hFNModified.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNExtended_t pDCP_SNExtended; + hFNModified_t hFNModified; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SN ::= INTEGER (0..4095) +*/ + +struct PDCP_SN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SN";} + using parent_t = asn::integer<>; + +}; + +/* +HFN ::= INTEGER (0..1048575) +*/ + +struct HFN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFN";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvalue_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvalue ::= SEQUENCE { + pDCP-SN PDCP-SN, + hFN HFN, + iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvalue : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvalue";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SN_t : PDCP_SN + { + static constexpr const char* name() {return "pDCP_SN_t";} + using parent_t = PDCP_SN; + + }; + pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;} + pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;} + struct hFN_t : HFN + { + static constexpr const char* name() {return "hFN_t";} + using parent_t = HFN; + + }; + hFN_t& ref_hFN() {return hFN;} + hFN_t const& ref_hFN() const {return hFN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SN.clear(); + hFN.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SN_t pDCP_SN; + hFN_t hFN; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SNlength18 ::= INTEGER (0..262143) +*/ + +struct PDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +HFNforPDCP-SNlength18 ::= INTEGER (0..16383) +*/ + +struct HFNforPDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNforPDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvaluePDCP-SNlength18 ::= SEQUENCE { + pDCP-SNlength18 PDCP-SNlength18, + hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, + iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNlength18_t : PDCP_SNlength18 + { + static constexpr const char* name() {return "pDCP_SNlength18_t";} + using parent_t = PDCP_SNlength18; + + }; + pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;} + pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;} + struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18 + { + static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";} + using parent_t = HFNforPDCP_SNlength18; + + }; + hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;} + hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNlength18.clear(); + hFNforPDCP_SNlength18.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNlength18_t pDCP_SNlength18; + hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + iE_Extensions_t iE_Extensions; + +}; +/* +CRNTI ::= BIT STRING (SIZE (16)) +*/ + +struct CRNTI : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CRNTI";} + using parent_t = asn::bstring<>; + +}; + +/* +CSG-Id ::= BIT STRING (SIZE (27)) +*/ + +struct CSG_Id : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CSG-Id";} + using parent_t = asn::bstring<>; + +}; + +/* +CSGMembershipStatus ::= ENUMERATED { + member, + not-member +} +*/ + +struct CSGMembershipStatus : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "CSGMembershipStatus";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + member + ,not_member + } index_t; + +}; + +/* +UEID ::= BIT STRING (SIZE (16)) +*/ + +struct UEID : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UEID";} + using parent_t = asn::bstring<>; + +}; + +/* +WidebandCQICodeword1::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + ... +} +*/ + +struct WidebandCQICodeword1 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WidebandCQICodeword1";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WidebandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WidebandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WidebandCQI ::= SEQUENCE { + widebandCQICodeword0 INTEGER (0..15, ...), + widebandCQICodeword1 WidebandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WidebandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "WidebandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct widebandCQICodeword0_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "widebandCQICodeword0_t";} + using parent_t = asn::integer<>; + + }; + + widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;} + widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;} + struct widebandCQICodeword1_t : WidebandCQICodeword1 + { + static constexpr const char* name() {return "widebandCQICodeword1_t";} + using parent_t = WidebandCQICodeword1; + static constexpr bool optional = true; + + }; + widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;} + widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + widebandCQICodeword0.clear(); + widebandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + widebandCQICodeword0_t widebandCQICodeword0; + widebandCQICodeword1_t widebandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandSize ::= ENUMERATED { + size2, + size3, + size4, + size6, + size8, + ... +} +*/ + +struct SubbandSize : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "SubbandSize";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + size2 + ,size3 + ,size4 + ,size6 + ,size8 + } index_t; + +}; + +/* +SubbandCQICodeword0 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword0 : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword0";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~SubbandCQICodeword0() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy3[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQICodeword1 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword1 : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword1";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~SubbandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy4[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQI ::= SEQUENCE { + subbandCQICodeword0 SubbandCQICodeword0, + subbandCQICodeword1 SubbandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "SubbandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct subbandCQICodeword0_t : SubbandCQICodeword0 + { + static constexpr const char* name() {return "subbandCQICodeword0_t";} + using parent_t = SubbandCQICodeword0; + + }; + subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;} + subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;} + struct subbandCQICodeword1_t : SubbandCQICodeword1 + { + static constexpr const char* name() {return "subbandCQICodeword1_t";} + using parent_t = SubbandCQICodeword1; + static constexpr bool optional = true; + + }; + subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;} + subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + subbandCQICodeword0.clear(); + subbandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQICodeword0_t subbandCQICodeword0; + subbandCQICodeword1_t subbandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQIItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQIItem ::= SEQUENCE { + subbandCQI SubbandCQI, + subbandIndex INTEGER (0..27,...), + iE-Extensions ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQIItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SubbandCQIItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct subbandCQI_t : SubbandCQI + { + static constexpr const char* name() {return "subbandCQI_t";} + using parent_t = SubbandCQI; + + }; + subbandCQI_t& ref_subbandCQI() {return subbandCQI;} + subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;} + struct subbandIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "subbandIndex_t";} + using parent_t = asn::integer<>; + + }; + + subbandIndex_t& ref_subbandIndex() {return subbandIndex;} + subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + void clear() + { + subbandCQI.clear(); + subbandIndex.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQI_t subbandCQI; + subbandIndex_t subbandIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem +*/ + +struct SubbandCQIList_elm : SubbandCQIItem +{ + static constexpr const char* name() {return "SubbandCQIList_elm";} + using parent_t = SubbandCQIItem; + +}; +struct SubbandCQIList : asn::sequenceof +{ + static constexpr const char* name() {return "SubbandCQIList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcessItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF + SEQUENCE { + rI INTEGER (1..8, ...), + widebandCQI WidebandCQI, + subbandSize SubbandSize, + subbandCQIList SubbandCQIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct rI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rI_t";} + using parent_t = asn::integer<>; + + }; + + rI_t& ref_rI() {return rI;} + rI_t const& ref_rI() const {return rI;} + struct widebandCQI_t : WidebandCQI + { + static constexpr const char* name() {return "widebandCQI_t";} + using parent_t = WidebandCQI; + + }; + widebandCQI_t& ref_widebandCQI() {return widebandCQI;} + widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;} + struct subbandSize_t : SubbandSize + { + static constexpr const char* name() {return "subbandSize_t";} + using parent_t = SubbandSize; + + }; + subbandSize_t& ref_subbandSize() {return subbandSize;} + subbandSize_t const& ref_subbandSize() const {return subbandSize;} + struct subbandCQIList_t : SubbandCQIList + { + static constexpr const char* name() {return "subbandCQIList_t";} + using parent_t = SubbandCQIList; + static constexpr bool optional = true; + + }; + subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;} + subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + void clear() + { + rI.clear(); + widebandCQI.clear(); + subbandSize.clear(); + subbandCQIList.clear(); + iE_Extensions.clear(); + + }; + private: + rI_t rI; + widebandCQI_t widebandCQI; + subbandSize_t subbandSize; + subbandCQIList_t subbandCQIList; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcessItem : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcess_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF + SEQUENCE { + cSIProcessConfigurationIndex INTEGER (1..7, ...), + cSIReportPerCSIProcessItem CSIReportPerCSIProcessItem, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cSIProcessConfigurationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";} + using parent_t = asn::integer<>; + + }; + + cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;} + cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;} + struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem + { + static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";} + using parent_t = CSIReportPerCSIProcessItem; + + }; + cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;} + cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + void clear() + { + cSIProcessConfigurationIndex.clear(); + cSIReportPerCSIProcessItem.clear(); + iE_Extensions.clear(); + + }; + private: + cSIProcessConfigurationIndex_t cSIProcessConfigurationIndex; + cSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcess : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + uEID UEID, + cSIReportPerCSIProcess CSIReportPerCSIProcess, + iE-Extensions ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportList_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportList_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEID_t : UEID + { + static constexpr const char* name() {return "uEID_t";} + using parent_t = UEID; + + }; + uEID_t& ref_uEID() {return uEID;} + uEID_t const& ref_uEID() const {return uEID;} + struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess + { + static constexpr const char* name() {return "cSIReportPerCSIProcess_t";} + using parent_t = CSIReportPerCSIProcess; + + }; + cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;} + cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + void clear() + { + uEID.clear(); + cSIReportPerCSIProcess.clear(); + iE_Extensions.clear(); + + }; + private: + uEID_t uEID; + cSIReportPerCSIProcess_t cSIReportPerCSIProcess; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportList : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CapacityValue ::= INTEGER (0..100) +*/ + +struct CapacityValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CapacityValue";} + using parent_t = asn::integer<>; + +}; + +/* +CauseRadioNetwork ::= ENUMERATED { + handover-desirable-for-radio-reasons, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + partial-handover, + unknown-new-eNB-UE-X2AP-ID, + unknown-old-eNB-UE-X2AP-ID, + unknown-pair-of-UE-X2AP-ID, + ho-target-not-allowed, + tx2relocoverall-expiry, + trelocprep-expiry, + cell-not-available, + no-radio-resources-available-in-target-cell, + invalid-MME-GroupID, + unknown-MME-Code, + encryption-and-or-integrity-protection-algorithms-not-supported, + reportCharacteristicsEmpty, + noReportPeriodicity, + existingMeasurementID, + unknown-eNB-Measurement-ID, + measurement-temporarily-not-available, + unspecified, + ..., + load-balancing, + handover-optimisation, + value-out-of-allowed-range, + multiple-E-RAB-ID-instances, + switch-off-ongoing, + not-supported-QCI-value, + measurement-not-supported-for-the-object, + tDCoverall-expiry, + tDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-aupported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + mCG-Mobility, + sCG-Mobility, + count-reaches-max-value, + unknown-old-en-gNB-UE-X2AP-ID, + pDCP-Overload + +} +*/ + +struct CauseRadioNetwork : asn::enumerated<51, 29, true> +{ + static constexpr const char* name() {return "CauseRadioNetwork";} + using parent_t = asn::enumerated<51, 29, true>; + typedef enum { + handover_desirable_for_radio_reasons + ,time_critical_handover + ,resource_optimisation_handover + ,reduce_load_in_serving_cell + ,partial_handover + ,unknown_new_eNB_UE_X2AP_ID + ,unknown_old_eNB_UE_X2AP_ID + ,unknown_pair_of_UE_X2AP_ID + ,ho_target_not_allowed + ,tx2relocoverall_expiry + ,trelocprep_expiry + ,cell_not_available + ,no_radio_resources_available_in_target_cell + ,invalid_MME_GroupID + ,unknown_MME_Code + ,encryption_and_or_integrity_protection_algorithms_not_supported + ,reportCharacteristicsEmpty + ,noReportPeriodicity + ,existingMeasurementID + ,unknown_eNB_Measurement_ID + ,measurement_temporarily_not_available + ,unspecified + ,load_balancing + ,handover_optimisation + ,value_out_of_allowed_range + ,multiple_E_RAB_ID_instances + ,switch_off_ongoing + ,not_supported_QCI_value + ,measurement_not_supported_for_the_object + ,tDCoverall_expiry + ,tDCprep_expiry + ,action_desirable_for_radio_reasons + ,reduce_load + ,resource_optimisation + ,time_critical_action + ,target_not_allowed + ,no_radio_resources_available + ,invalid_QoS_combination + ,encryption_algorithms_not_aupported + ,procedure_cancelled + ,rRM_purpose + ,improve_user_bit_rate + ,user_inactivity + ,radio_connection_with_UE_lost + ,failure_in_the_radio_interface_procedure + ,bearer_option_not_supported + ,mCG_Mobility + ,sCG_Mobility + ,count_reaches_max_value + ,unknown_old_en_gNB_UE_X2AP_ID + ,pDCP_Overload + } index_t; + +}; + +/* +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} +*/ + +struct CauseTransport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CauseTransport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + transport_resource_unavailable + ,unspecified + } index_t; + +}; + +/* +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + unspecified, + abstract-syntax-error-falsely-constructed-message, + ... +} +*/ + +struct CauseProtocol : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "CauseProtocol";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + transfer_syntax_error + ,abstract_syntax_error_reject + ,abstract_syntax_error_ignore_and_notify + ,message_not_compatible_with_receiver_state + ,semantic_error + ,unspecified + ,abstract_syntax_error_falsely_constructed_message + } index_t; + +}; + +/* +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + om-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} +*/ + +struct CauseMisc : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "CauseMisc";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + control_processing_overload + ,hardware_failure + ,om_intervention + ,not_enough_user_plane_processing_resources + ,unspecified + } index_t; + +}; + +/* +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ... +} +*/ + +struct Cause : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "Cause";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~Cause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } +*/ + +struct Cell_Size : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "Cell-Size";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + verysmall + ,small + ,medium + ,large + } index_t; + +}; + +/* +CellCapacityClassValue ::= INTEGER (1..100, ...) +*/ + +struct CellCapacityClassValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CellCapacityClassValue";} + using parent_t = asn::integer<>; + +}; + +/* +CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...} +*/ + +struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellDeploymentStatusIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + pre_change_notification + } index_t; + +}; + +/* +ReplacingCellsList-Item ::= SEQUENCE { + eCGI ECGI, + ... +} +*/ + +struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ReplacingCellsList-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + template void decode(V& v) + { + v(eCGI); + + }; + template void encode(V& v) const + { + v(eCGI); + + }; + void clear() + { + eCGI.clear(); + + }; + private: + eCGI_t eCGI; + +}; +/* +ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item +*/ + +struct ReplacingCellsList_elm : ReplacingCellsList_Item +{ + static constexpr const char* name() {return "ReplacingCellsList_elm";} + using parent_t = ReplacingCellsList_Item; + +}; +struct ReplacingCellsList : asn::sequenceof +{ + static constexpr const char* name() {return "ReplacingCellsList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellReplacingInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellReplacingInfo ::= SEQUENCE { + replacingCellsList ReplacingCellsList, + iE-Extensions ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellReplacingInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellReplacingInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct replacingCellsList_t : ReplacingCellsList + { + static constexpr const char* name() {return "replacingCellsList_t";} + using parent_t = ReplacingCellsList; + + }; + replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;} + replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(replacingCellsList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(replacingCellsList); + v(iE_Extensions); + + }; + void clear() + { + replacingCellsList.clear(); + iE_Extensions.clear(); + + }; + private: + replacingCellsList_t replacingCellsList; + iE_Extensions_t iE_Extensions; + +}; +/* +CellReportingIndicator ::= ENUMERATED {stop-request, ... } +*/ + +struct CellReportingIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellReportingIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + stop_request + } index_t; + +}; + +/* +CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellType_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellType ::= SEQUENCE { + cell-Size Cell-Size, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellType : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellType";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_Size_t : Cell_Size + { + static constexpr const char* name() {return "cell_Size_t";} + using parent_t = Cell_Size; + + }; + cell_Size_t& ref_cell_Size() {return cell_Size;} + cell_Size_t const& ref_cell_Size() const {return cell_Size;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_Size); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_Size); + v(iE_Extensions); + + }; + void clear() + { + cell_Size.clear(); + iE_Extensions.clear(); + + }; + private: + cell_Size_t cell_Size; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPHypothesisSetItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPHypothesisSetItem ::= SEQUENCE { + coMPCellID ECGI, + coMPHypothesis BIT STRING (SIZE(6..4400, ...)), + iE-Extensions ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPHypothesisSetItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPCellID_t : ECGI + { + static constexpr const char* name() {return "coMPCellID_t";} + using parent_t = ECGI; + + }; + coMPCellID_t& ref_coMPCellID() {return coMPCellID;} + coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;} + struct coMPHypothesis_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coMPHypothesis_t";} + using parent_t = asn::bstring<>; + + }; + + coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;} + coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + void clear() + { + coMPCellID.clear(); + coMPHypothesis.clear(); + iE_Extensions.clear(); + + }; + private: + coMPCellID_t coMPCellID; + coMPHypothesis_t coMPHypothesis; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem +*/ + +struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem +{ + static constexpr const char* name() {return "CoMPHypothesisSet_elm";} + using parent_t = CoMPHypothesisSetItem; + +}; +struct CoMPHypothesisSet : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPHypothesisSet";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF + SEQUENCE { + coMPHypothesisSet CoMPHypothesisSet, + benefitMetric BenefitMetric, + iE-Extensions ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationItem_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPHypothesisSet_t : CoMPHypothesisSet + { + static constexpr const char* name() {return "coMPHypothesisSet_t";} + using parent_t = CoMPHypothesisSet; + + }; + coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;} + coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;} + struct benefitMetric_t : BenefitMetric + { + static constexpr const char* name() {return "benefitMetric_t";} + using parent_t = BenefitMetric; + + }; + benefitMetric_t& ref_benefitMetric() {return benefitMetric;} + benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + void clear() + { + coMPHypothesisSet.clear(); + benefitMetric.clear(); + iE_Extensions.clear(); + + }; + private: + coMPHypothesisSet_t coMPHypothesisSet; + benefitMetric_t benefitMetric; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationItem : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF + SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationStartTime_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationStartTime : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationStartTime";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformation ::= SEQUENCE { + coMPInformationItem CoMPInformationItem, + coMPInformationStartTime CoMPInformationStartTime, + iE-Extensions ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPInformationItem_t : CoMPInformationItem + { + static constexpr const char* name() {return "coMPInformationItem_t";} + using parent_t = CoMPInformationItem; + + }; + coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;} + coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;} + struct coMPInformationStartTime_t : CoMPInformationStartTime + { + static constexpr const char* name() {return "coMPInformationStartTime_t";} + using parent_t = CoMPInformationStartTime; + + }; + coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;} + coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + void clear() + { + coMPInformationItem.clear(); + coMPInformationStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + coMPInformationItem_t coMPInformationItem; + coMPInformationStartTime_t coMPInformationStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacity_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "CompositeAvailableCapacity";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cellCapacityClassValue_t : CellCapacityClassValue + { + static constexpr const char* name() {return "cellCapacityClassValue_t";} + using parent_t = CellCapacityClassValue; + static constexpr bool optional = true; + + }; + cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;} + cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;} + struct capacityValue_t : CapacityValue + { + static constexpr const char* name() {return "capacityValue_t";} + using parent_t = CapacityValue; + + }; + capacityValue_t& ref_capacityValue() {return capacityValue;} + capacityValue_t const& ref_capacityValue() const {return capacityValue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + void clear() + { + cellCapacityClassValue.clear(); + capacityValue.clear(); + iE_Extensions.clear(); + + }; + private: + cellCapacityClassValue_t cellCapacityClassValue; + capacityValue_t capacityValue; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacityGroup_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompositeAvailableCapacityGroup";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;} + dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;} + struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;} + uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + void clear() + { + dL_CompositeAvailableCapacity.clear(); + uL_CompositeAvailableCapacity.clear(); + iE_Extensions.clear(); + + }; + private: + dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + iE_Extensions_t iE_Extensions; + +}; +/* +Correlation-ID ::= OCTET STRING (SIZE (4)) +*/ + +struct Correlation_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Correlation-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +CoverageModification-Item ::= SEQUENCE { + eCGI ECGI, + coverageState INTEGER (0..15, ...), + cellDeploymentStatusIndicator CellDeploymentStatusIndicator OPTIONAL, + cellReplacingInfo CellReplacingInfo OPTIONAL, +-- Included in case the Cell Deployment Status Indicator IE is present + ... +} +*/ + +struct CoverageModification_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "CoverageModification-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct coverageState_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coverageState_t";} + using parent_t = asn::integer<>; + + }; + + coverageState_t& ref_coverageState() {return coverageState;} + coverageState_t const& ref_coverageState() const {return coverageState;} + struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator + { + static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";} + using parent_t = CellDeploymentStatusIndicator; + static constexpr bool optional = true; + + }; + cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;} + cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;} + struct cellReplacingInfo_t : CellReplacingInfo + { + static constexpr const char* name() {return "cellReplacingInfo_t";} + using parent_t = CellReplacingInfo; + static constexpr bool optional = true; + + }; + cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;} + cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + template void encode(V& v) const + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + void clear() + { + eCGI.clear(); + coverageState.clear(); + cellDeploymentStatusIndicator.clear(); + cellReplacingInfo.clear(); + + }; + private: + eCGI_t eCGI; + coverageState_t coverageState; + cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator; + cellReplacingInfo_t cellReplacingInfo; + +}; +/* +CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item +*/ + +struct CoverageModificationList_elm : CoverageModification_Item +{ + static constexpr const char* name() {return "CoverageModificationList_elm";} + using parent_t = CoverageModification_Item; + +}; +struct CoverageModificationList : asn::sequenceof +{ + static constexpr const char* name() {return "CoverageModificationList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +*/ + +struct TypeOfError : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "TypeOfError";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_understood + ,missing + } index_t; + +}; + +/* +CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct iECriticality_t : Criticality + { + static constexpr const char* name() {return "iECriticality_t";} + using parent_t = Criticality; + + }; + iECriticality_t& ref_iECriticality() {return iECriticality;} + iECriticality_t const& ref_iECriticality() const {return iECriticality;} + struct iE_ID_t : ProtocolIE_ID + { + static constexpr const char* name() {return "iE_ID_t";} + using parent_t = ProtocolIE_ID; + + }; + iE_ID_t& ref_iE_ID() {return iE_ID;} + iE_ID_t const& ref_iE_ID() const {return iE_ID;} + struct typeOfError_t : TypeOfError + { + static constexpr const char* name() {return "typeOfError_t";} + using parent_t = TypeOfError; + + }; + typeOfError_t& ref_typeOfError() {return typeOfError;} + typeOfError_t const& ref_typeOfError() const {return typeOfError;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + void clear() + { + iECriticality.clear(); + iE_ID.clear(); + typeOfError.clear(); + iE_Extensions.clear(); + + }; + private: + iECriticality_t iECriticality; + iE_ID_t iE_ID; + typeOfError_t typeOfError; + iE_Extensions_t iE_Extensions; + +}; +struct CriticalityDiagnostics_IE_List : asn::sequenceof +{ + static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "CriticalityDiagnostics";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + static constexpr bool optional = true; + + }; + procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;} + procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;} + struct triggeringMessage_t : TriggeringMessage + { + static constexpr const char* name() {return "triggeringMessage_t";} + using parent_t = TriggeringMessage; + static constexpr bool optional = true; + + }; + triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;} + triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;} + struct procedureCriticality_t : Criticality + { + static constexpr const char* name() {return "procedureCriticality_t";} + using parent_t = Criticality; + static constexpr bool optional = true; + + }; + procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;} + procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;} + struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List + { + static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";} + using parent_t = CriticalityDiagnostics_IE_List; + static constexpr bool optional = true; + + }; + iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;} + iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + void clear() + { + procedureCode.clear(); + triggeringMessage.clear(); + procedureCriticality.clear(); + iEsCriticalityDiagnostics.clear(); + iE_Extensions.clear(); + + }; + private: + procedureCode_t procedureCode; + triggeringMessage_t triggeringMessage; + procedureCriticality_t procedureCriticality; + iEsCriticalityDiagnostics_t iEsCriticalityDiagnostics; + iE_Extensions_t iE_Extensions; + +}; +/* +DL-Forwarding ::= ENUMERATED { + dL-forwardingProposed, + ... +} +*/ + +struct DL_Forwarding : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DL-Forwarding";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + dL_forwardingProposed + } index_t; + +}; + +/* +DL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct DL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) +*/ + +struct DataTrafficResources : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DataTrafficResources";} + using parent_t = asn::bstring<>; + +}; + +/* +DLResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct DLResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +DLResourcesULandDLSharing ::= CHOICE { +unchanged NULL, + changed DLResourceBitmapULandDLSharing, + ... +} +*/ + +struct DLResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DLResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DLResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : DLResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = DLResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +DRB-ID ::= INTEGER (1..32) +*/ + +struct DRB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DRB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULOnlySharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULOnlySharing ::= SEQUENCE{ + uLResourceBitmapULOnlySharing DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULOnlySharing : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULOnlySharing";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uLResourceBitmapULOnlySharing_t : DataTrafficResources + { + static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";} + using parent_t = DataTrafficResources; + + }; + uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;} + uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourceBitmapULOnlySharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing; + iE_Extensions_t iE_Extensions; + +}; +/* +ULResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct ULResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +ULResourcesULandDLSharing ::= CHOICE { + unchanged NULL, + changed ULResourceBitmapULandDLSharing, + ... +} +*/ + +struct ULResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ULResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ULResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : ULResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = ULResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULandDLSharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULandDLSharing ::= SEQUENCE{ + uLResourcesULandDLSharing ULResourcesULandDLSharing, + dLResourcesULandDLSharing DLResourcesULandDLSharing, + iE-Extensions ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULandDLSharing : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ULandDLSharing";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing + { + static constexpr const char* name() {return "uLResourcesULandDLSharing_t";} + using parent_t = ULResourcesULandDLSharing; + + }; + uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;} + uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;} + struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing + { + static constexpr const char* name() {return "dLResourcesULandDLSharing_t";} + using parent_t = DLResourcesULandDLSharing; + + }; + dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;} + dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourcesULandDLSharing.clear(); + dLResourcesULandDLSharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourcesULandDLSharing_t uLResourcesULandDLSharing; + dLResourcesULandDLSharing_t dLResourcesULandDLSharing; + iE_Extensions_t iE_Extensions; + +}; +/* +SharedResourceType ::= CHOICE{ + uLOnlySharing ULOnlySharing, + uLandDLSharing ULandDLSharing, + ... +} +*/ + +struct SharedResourceType : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SharedResourceType";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SharedResourceType() {clear();} + struct uLOnlySharing_t : ULOnlySharing + { + static constexpr const char* name() {return "uLOnlySharing_t";} + using parent_t = ULOnlySharing; + + }; + struct uLandDLSharing_t : ULandDLSharing + { + static constexpr const char* name() {return "uLandDLSharing_t";} + using parent_t = ULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(uLOnlySharing_t)]; + char dummy2[sizeof(uLandDLSharing_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...} +*/ + +struct SubframeType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SubframeType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + mbsfn + ,nonmbsfn + } index_t; + +}; + +/* +ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ReservedSubframePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ReservedSubframePattern ::= SEQUENCE{ + subframeType SubframeType, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mBSFNControlRegionLength INTEGER (0..3), + iE-Extensions ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ReservedSubframePattern : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ReservedSubframePattern";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct subframeType_t : SubframeType + { + static constexpr const char* name() {return "subframeType_t";} + using parent_t = SubframeType; + + }; + subframeType_t& ref_subframeType() {return subframeType;} + subframeType_t const& ref_subframeType() const {return subframeType;} + struct reservedSubframePattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = asn::bstring<>; + + }; + + reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;} + reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + + }; + + mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + void clear() + { + subframeType.clear(); + reservedSubframePattern.clear(); + mBSFNControlRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + subframeType_t subframeType; + reservedSubframePattern_t reservedSubframePattern; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DataTrafficResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN INTEGER (0..1023), + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, +... +} +*/ + +struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "DataTrafficResourceIndication";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct sharedResourceType_t : SharedResourceType + { + static constexpr const char* name() {return "sharedResourceType_t";} + using parent_t = SharedResourceType; + + }; + sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;} + sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;} + struct reservedSubframePattern_t : ReservedSubframePattern + { + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = ReservedSubframePattern; + static constexpr bool optional = true; + + }; + reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;} + reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + sharedResourceType.clear(); + reservedSubframePattern.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + sharedResourceType_t sharedResourceType; + reservedSubframePattern_t reservedSubframePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +DeactivationIndication::= ENUMERATED { + deactivated, + ... +} +*/ + +struct DeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + deactivated + } index_t; + +}; + +/* +DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DeliveryStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DeliveryStatus ::= SEQUENCE { + highestSuccessDeliveredPDCPSN INTEGER (0..4095), + iE-Extensions ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DeliveryStatus : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "DeliveryStatus";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct highestSuccessDeliveredPDCPSN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";} + using parent_t = asn::integer<>; + + }; + + highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;} + highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + void clear() + { + highestSuccessDeliveredPDCPSN.clear(); + iE_Extensions.clear(); + + }; + private: + highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN; + iE_Extensions_t iE_Extensions; + +}; +/* +DuplicationActivation::= ENUMERATED {active, inactive, ...} +*/ + +struct DuplicationActivation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "DuplicationActivation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + active + ,inactive + } index_t; + +}; + +/* +PA-Values ::= ENUMERATED { + dB-6, + dB-4dot77, + dB-3, + dB-1dot77, + dB0, + dB1, + dB2, + dB3, + ... +} +*/ + +struct PA_Values : asn::enumerated<8, 0, true> +{ + static constexpr const char* name() {return "PA-Values";} + using parent_t = asn::enumerated<8, 0, true>; + typedef enum { + dB_6 + ,dB_4dot77 + ,dB_3 + ,dB_1dot77 + ,dB0 + ,dB1 + ,dB2 + ,dB3 + } index_t; + +}; + +/* +DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DynamicNAICSInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DynamicNAICSInformation ::= SEQUENCE { + transmissionModes BIT STRING (SIZE(8)) OPTIONAL, + pB-information INTEGER(0..3) OPTIONAL, + pA-list SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values, + iE-Extensions ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "DynamicNAICSInformation";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct transmissionModes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "transmissionModes_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;} + transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;} + struct pB_information_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pB_information_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;} + pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;} + struct pA_list_t_elm : PA_Values + { + static constexpr const char* name() {return "pA_list_t_elm";} + using parent_t = PA_Values; + + }; + struct pA_list_t : asn::sequenceof + { + static constexpr const char* name() {return "pA_list_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + pA_list_t& ref_pA_list() {return pA_list;} + pA_list_t const& ref_pA_list() const {return pA_list;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + void clear() + { + transmissionModes.clear(); + pB_information.clear(); + pA_list.clear(); + iE_Extensions.clear(); + + }; + private: + transmissionModes_t transmissionModes; + pB_information_t pB_information; + pA_list_t pA_list; + iE_Extensions_t iE_Extensions; + +}; +/* +DynamicDLTransmissionInformation ::= CHOICE { + naics-active DynamicNAICSInformation, + naics-inactive NULL, + ... +} +*/ + +struct DynamicDLTransmissionInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DynamicDLTransmissionInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DynamicDLTransmissionInformation() {clear();} + struct naics_active_t : DynamicNAICSInformation + { + static constexpr const char* name() {return "naics_active_t";} + using parent_t = DynamicNAICSInformation; + + }; + struct naics_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "naics_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as();} return nullptr; } + naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(naics_active_t)]; + char dummy2[sizeof(naics_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RAB-ID ::= INTEGER (0..15, ...) +*/ + +struct E_RAB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "E-RAB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RAB_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RAB-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RAB_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(id_E_RAB_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RAB_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RAB_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RAB_Item& select_id_E_RAB_Item() { return set(1); } + E_RAB_Item const* get_id_E_RAB_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RAB_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RAB_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +QCI ::= INTEGER (0..255) +*/ + +struct QCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "QCI";} + using parent_t = asn::integer<>; + +}; + +/* +ExtendedBitRate ::= INTEGER (10000000001..4000000000000,...) +*/ + +struct ExtendedBitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ExtendedBitRate";} + using parent_t = asn::integer<>; + +}; + +/* +GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for maximum bitrate > 10Gbps -- + { ID id-extended-e-RAB-MaximumBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-MaximumBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct GBR_QosInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; } + else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateDL);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set(1); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get(1); } + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set(2); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get(2); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set(3); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get(3); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set(4); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_e_RAB_MaximumBitrateDL()); return true; + case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true; + case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true; + case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GBR_QosInformation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "GBR-QosInformation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_MaximumBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;} + e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;} + struct e_RAB_MaximumBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;} + e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;} + struct e_RAB_GuaranteedBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;} + e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;} + struct e_RAB_GuaranteedBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;} + e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_MaximumBitrateDL.clear(); + e_RAB_MaximumBitrateUL.clear(); + e_RAB_GuaranteedBitrateDL.clear(); + e_RAB_GuaranteedBitrateUL.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_MaximumBitrateDL_t e_RAB_MaximumBitrateDL; + e_RAB_MaximumBitrateUL_t e_RAB_MaximumBitrateUL; + e_RAB_GuaranteedBitrateDL_t e_RAB_GuaranteedBitrateDL; + e_RAB_GuaranteedBitrateUL_t e_RAB_GuaranteedBitrateUL; + iE_Extensions_t iE_Extensions; + +}; +/* +Packet-LossRate ::= INTEGER(0..1000) +*/ + +struct Packet_LossRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Packet-LossRate";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance – + { ID id-DownlinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}| + { ID id-UplinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;} + void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DownlinkPacketLossRate)) { type = 1; return true; } + else if(equal(id_UplinkPacketLossRate)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DownlinkPacketLossRate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(ignore); type=1;} + void select_id_UplinkPacketLossRate() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Packet_LossRate& select_id_DownlinkPacketLossRate() { return set(1); } + Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get(1); } + Packet_LossRate& select_id_UplinkPacketLossRate() { return set(2); } + Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DownlinkPacketLossRate()); return true; + case 2: v(select_id_UplinkPacketLossRate()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Packet_LossRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(optional); type=1;} + void select_id_UplinkPacketLossRate() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Level-QoS-Parameters ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct qCI_t : QCI + { + static constexpr const char* name() {return "qCI_t";} + using parent_t = QCI; + + }; + qCI_t& ref_qCI() {return qCI;} + qCI_t const& ref_qCI() const {return qCI;} + struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority + { + static constexpr const char* name() {return "allocationAndRetentionPriority_t";} + using parent_t = AllocationAndRetentionPriority; + + }; + allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;} + allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;} + struct gbrQosInformation_t : GBR_QosInformation + { + static constexpr const char* name() {return "gbrQosInformation_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;} + gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + void clear() + { + qCI.clear(); + allocationAndRetentionPriority.clear(); + gbrQosInformation.clear(); + iE_Extensions.clear(); + + }; + private: + qCI_t qCI; + allocationAndRetentionPriority_t allocationAndRetentionPriority; + gbrQosInformation_t gbrQosInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } +*/ + +struct E_RAB_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RAB_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RAB_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RAB-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..4294967295), + usageCountDL INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABUsageReport-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct startTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;} + startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;} + struct endTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "endTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;} + endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;} + struct usageCountUL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountUL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountUL_t& ref_usageCountUL() {return usageCountUL;} + usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;} + struct usageCountDL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountDL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountDL_t& ref_usageCountDL() {return usageCountDL;} + usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + void clear() + { + startTimeStamp.clear(); + endTimeStamp.clear(); + usageCountUL.clear(); + usageCountDL.clear(); + iE_Extensions.clear(); + + }; + private: + startTimeStamp_t startTimeStamp; + endTimeStamp_t endTimeStamp; + usageCountUL_t usageCountUL; + usageCountDL_t usageCountDL; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABUsageReport-Item CRITICALITY ignore TYPE E-RABUsageReport-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(id_E_RABUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set(1); } + E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} } +*/ + +struct E_RABUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +EARFCN ::= INTEGER (0..maxEARFCN) +*/ + +struct EARFCN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCN";} + using parent_t = asn::integer<>; + +}; + +/* +EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...) +*/ + +struct EARFCNExtension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCNExtension";} + using parent_t = asn::integer<>; + +}; + +/* +EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EN_DC_ResourceConfigurationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EN-DC-ResourceConfiguration ::= SEQUENCE { + pDCPatSgNB ENUMERATED {present, not-present, ...}, + mCGresources ENUMERATED {present, not-present, ...}, + sCGresources ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} } OPTIONAL, + ... +} +*/ + +struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "EN-DC-ResourceConfiguration";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct pDCPatSgNB_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "pDCPatSgNB_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;} + pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;} + struct mCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "mCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + mCGresources_t& ref_mCGresources() {return mCGresources;} + mCGresources_t const& ref_mCGresources() const {return mCGresources;} + struct sCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "sCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + sCGresources_t& ref_sCGresources() {return sCGresources;} + sCGresources_t const& ref_sCGresources() const {return sCGresources;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + void clear() + { + pDCPatSgNB.clear(); + mCGresources.clear(); + sCGresources.clear(); + iE_Extensions.clear(); + + }; + private: + pDCPatSgNB_t pDCPatSgNB; + mCGresources_t mCGresources; + sCGresources_t sCGresources; + iE_Extensions_t iE_Extensions; + +}; +/* +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)) +} +*/ + +struct ENB_ID : asn::choice<4, 2, true> +{ + static constexpr const char* name() {return "ENB-ID";} + using parent_t = asn::choice<4, 2, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~ENB_ID() {clear();} + struct macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct home_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "home_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct short_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "short_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct long_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "long_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as();} return nullptr; } + short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as();} return nullptr; } + long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(macro_eNB_ID_t)]; + char dummy2[sizeof(home_eNB_ID_t)]; + char dummy3[sizeof(short_Macro_eNB_ID_t)]; + char dummy4[sizeof(long_Macro_eNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity +*/ + +struct EPLMNs_elm : PLMN_Identity +{ + static constexpr const char* name() {return "EPLMNs_elm";} + using parent_t = PLMN_Identity; + +}; +struct EPLMNs : asn::sequenceof +{ + static constexpr const char* name() {return "EPLMNs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} +*/ + +struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "UserPlaneTrafficActivityReport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + inactive + ,re_activated + } index_t; + +}; + +/* +ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ERABActivityNotifyItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ERABActivityNotifyItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + activityReport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ERABActivityNotifyItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct activityReport_t : UserPlaneTrafficActivityReport + { + static constexpr const char* name() {return "activityReport_t";} + using parent_t = UserPlaneTrafficActivityReport; + + }; + activityReport_t& ref_activityReport() {return activityReport;} + activityReport_t const& ref_activityReport() const {return activityReport;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + activityReport.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + activityReport_t activityReport; + iE_Extensions_t iE_Extensions; + +}; +/* +ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem +*/ + +struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";} + using parent_t = ERABActivityNotifyItem; + +}; +struct ERABActivityNotifyItemList : asn::sequenceof +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ..., + bw1 +} +*/ + +struct Transmission_Bandwidth : asn::enumerated<7, 1, true> +{ + static constexpr const char* name() {return "Transmission-Bandwidth";} + using parent_t = asn::enumerated<7, 1, true>; + typedef enum { + bw6 + ,bw15 + ,bw25 + ,bw50 + ,bw75 + ,bw100 + ,bw1 + } index_t; + +}; + +/* +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ... +} +*/ + +struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true> +{ + static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";} + using parent_t = asn::enumerated<21, 0, true>; + typedef enum { + minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,minusZeroDotFive + ,zero + ,one + ,two + ,three + ,four + ,five + ,six + ,seven + ,eight + ,nine + } index_t; + +}; + +/* +NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...} +*/ + +struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NRS-NSSS-PowerOffset";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + minusThree + ,zero + ,three + } index_t; + +}; + +/* +NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...} +*/ + +struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + two + ,four + ,eight + } index_t; + +}; + +/* +FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| + { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, + ... +} +*/ + +struct FDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;} + void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UL_EARFCNExtension)) { type = 1; return true; } + else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; } + else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; } + else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UL_EARFCNExtension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(reject); type=1;} + void select_id_DL_EARFCNExtension() { set(reject); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EARFCNExtension& select_id_UL_EARFCNExtension() { return set(1); } + EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get(1); } + EARFCNExtension& select_id_DL_EARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get(2); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set(3); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get(3); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set(4); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get(4); } + NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set(5); } + NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get(5); } + NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set(6); } + NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UL_EARFCNExtension()); return true; + case 2: v(select_id_DL_EARFCNExtension()); return true; + case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true; + case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true; + case 5: v(select_id_NRS_NSSS_PowerOffset()); return true; + case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(NRS_NSSS_PowerOffset)]; + char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)]; + char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(optional); type=1;} + void select_id_DL_EARFCNExtension() { set(optional); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-Info ::= SEQUENCE { + uL-EARFCN EARFCN, + dL-EARFCN EARFCN, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct uL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "uL_EARFCN_t";} + using parent_t = EARFCN; + + }; + uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;} + uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;} + struct dL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "dL_EARFCN_t";} + using parent_t = EARFCN; + + }; + dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;} + dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;} + struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;} + uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;} + struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;} + dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + void clear() + { + uL_EARFCN.clear(); + dL_EARFCN.clear(); + uL_Transmission_Bandwidth.clear(); + dL_Transmission_Bandwidth.clear(); + iE_Extensions.clear(); + + }; + private: + uL_EARFCN_t uL_EARFCN; + dL_EARFCN_t dL_EARFCN; + uL_Transmission_Bandwidth_t uL_Transmission_Bandwidth; + dL_Transmission_Bandwidth_t dL_Transmission_Bandwidth; + iE_Extensions_t iE_Extensions; + +}; +/* +SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} +*/ + +struct SubframeAssignment : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "SubframeAssignment";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sa0 + ,sa1 + ,sa2 + ,sa3 + ,sa4 + ,sa5 + ,sa6 + } index_t; + +}; + +/* +SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ... +} +*/ + +struct SpecialSubframePatterns : asn::enumerated<9, 0, true> +{ + static constexpr const char* name() {return "SpecialSubframePatterns";} + using parent_t = asn::enumerated<9, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + } index_t; + +}; + +/* +SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns SpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct specialSubframePatterns_t : SpecialSubframePatterns + { + static constexpr const char* name() {return "specialSubframePatterns_t";} + using parent_t = SpecialSubframePatterns; + + }; + specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;} + specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + specialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + specialSubframePatterns_t specialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}, + ... +} +*/ + +struct TDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_AdditionalSpecialSubframe_Info)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframe_Info);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set(1); } + AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set(3); } + AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_AdditionalSpecialSubframe_Info()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)]; + char dummy2[sizeof(AdditionalSpecialSubframe_Info)]; + char dummy3[sizeof(EARFCNExtension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-Info ::= SEQUENCE { + eARFCN EARFCN, + transmission-Bandwidth Transmission-Bandwidth, + subframeAssignment SubframeAssignment, + specialSubframe-Info SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;} + transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;} + struct subframeAssignment_t : SubframeAssignment + { + static constexpr const char* name() {return "subframeAssignment_t";} + using parent_t = SubframeAssignment; + + }; + subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;} + subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;} + struct specialSubframe_Info_t : SpecialSubframe_Info + { + static constexpr const char* name() {return "specialSubframe_Info_t";} + using parent_t = SpecialSubframe_Info; + + }; + specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;} + specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + void clear() + { + eARFCN.clear(); + transmission_Bandwidth.clear(); + subframeAssignment.clear(); + specialSubframe_Info.clear(); + iE_Extensions.clear(); + + }; + private: + eARFCN_t eARFCN; + transmission_Bandwidth_t transmission_Bandwidth; + subframeAssignment_t subframeAssignment; + specialSubframe_Info_t specialSubframe_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +EUTRA-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + ... +} +*/ + +struct EUTRA_Mode_Info : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "EUTRA-Mode-Info";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~EUTRA_Mode_Info() {clear();} + struct fDD_t : FDD_Info + { + static constexpr const char* name() {return "fDD_t";} + using parent_t = FDD_Info; + + }; + struct tDD_t : TDD_Info + { + static constexpr const char* name() {return "tDD_t";} + using parent_t = TDD_Info; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fDD_t)]; + char dummy2[sizeof(tDD_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANTraceID ::= OCTET STRING (SIZE (8)) +*/ + +struct EUTRANTraceID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANTraceID";} + using parent_t = asn::ostring<>; + +}; + +/* +EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct EncryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EncryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +RNTP-Threshold ::= ENUMERATED { + minusInfinity, + minusEleven, + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + zero, + one, + two, + three, + ... +} +*/ + +struct RNTP_Threshold : asn::enumerated<16, 0, true> +{ + static constexpr const char* name() {return "RNTP-Threshold";} + using parent_t = asn::enumerated<16, 0, true>; + typedef enum { + minusInfinity + ,minusEleven + ,minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,zero + ,one + ,two + ,three + } index_t; + +}; + +/* +EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTPStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTPStartTime ::= SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "EnhancedRNTPStartTime";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +/* +EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTP_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTP ::= SEQUENCE { + enhancedRNTPBitmap BIT STRING (SIZE(12..8800, ...)), + rNTP-High-Power-Threshold RNTP-Threshold, + enhancedRNTPStartTime EnhancedRNTPStartTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct EnhancedRNTP : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "EnhancedRNTP";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct enhancedRNTPBitmap_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "enhancedRNTPBitmap_t";} + using parent_t = asn::bstring<>; + + }; + + enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;} + enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;} + struct rNTP_High_Power_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;} + rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;} + struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime + { + static constexpr const char* name() {return "enhancedRNTPStartTime_t";} + using parent_t = EnhancedRNTPStartTime; + static constexpr bool optional = true; + + }; + enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;} + enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + void clear() + { + enhancedRNTPBitmap.clear(); + rNTP_High_Power_Threshold.clear(); + enhancedRNTPStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + enhancedRNTPBitmap_t enhancedRNTPBitmap; + rNTP_High_Power_Threshold_t rNTP_High_Power_Threshold; + enhancedRNTPStartTime_t enhancedRNTPStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +EventType ::= ENUMERATED{ + change-of-serving-cell, + ... +} +*/ + +struct EventType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "EventType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + change_of_serving_cell + } index_t; + +}; + +/* +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedActivityPeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedActivityPeriod";} + using parent_t = asn::integer<>; + +}; + +/* +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} +*/ + +struct ExpectedHOInterval : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "ExpectedHOInterval";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sec15 + ,sec30 + ,sec60 + ,sec90 + ,sec120 + ,sec180 + ,long_time + } index_t; + +}; + +/* +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedIdlePeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedIdlePeriod";} + using parent_t = asn::integer<>; + +}; + +/* +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} +*/ + +struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + subscription_information + ,statistics + } index_t; + +}; + +/* +ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEActivityBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ExpectedUEActivityBehaviour";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct expectedActivityPeriod_t : ExpectedActivityPeriod + { + static constexpr const char* name() {return "expectedActivityPeriod_t";} + using parent_t = ExpectedActivityPeriod; + static constexpr bool optional = true; + + }; + expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;} + expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;} + struct expectedIdlePeriod_t : ExpectedIdlePeriod + { + static constexpr const char* name() {return "expectedIdlePeriod_t";} + using parent_t = ExpectedIdlePeriod; + static constexpr bool optional = true; + + }; + expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;} + expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;} + struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation + { + static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";} + using parent_t = SourceOfUEActivityBehaviourInformation; + static constexpr bool optional = true; + + }; + sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;} + sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + void clear() + { + expectedActivityPeriod.clear(); + expectedIdlePeriod.clear(); + sourceofUEActivityBehaviourInformation.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivityPeriod_t expectedActivityPeriod; + expectedIdlePeriod_t expectedIdlePeriod; + sourceofUEActivityBehaviourInformation_t sourceofUEActivityBehaviourInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEBehaviour ::= SEQUENCE { + expectedActivity ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ExpectedUEBehaviour";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct expectedActivity_t : ExpectedUEActivityBehaviour + { + static constexpr const char* name() {return "expectedActivity_t";} + using parent_t = ExpectedUEActivityBehaviour; + static constexpr bool optional = true; + + }; + expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;} + expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;} + struct expectedHOInterval_t : ExpectedHOInterval + { + static constexpr const char* name() {return "expectedHOInterval_t";} + using parent_t = ExpectedHOInterval; + static constexpr bool optional = true; + + }; + expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;} + expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + void clear() + { + expectedActivity.clear(); + expectedHOInterval.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivity_t expectedActivity; + expectedHOInterval_t expectedHOInterval; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-InterferenceOverloadIndication-Item ::= ENUMERATED { + high-interference, + medium-interference, + low-interference, + ... +} +*/ + +struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + high_interference + ,medium_interference + ,low_interference + } index_t; + +}; + +/* +UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item +*/ + +struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item +{ + static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";} + using parent_t = UL_InterferenceOverloadIndication_Item; + +}; +struct UL_InterferenceOverloadIndication : asn::sequenceof +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExtendedULInterferenceOverloadInfo ::= SEQUENCE { + associatedSubframes BIT STRING (SIZE (5)), + extended-ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication, + iE-Extensions ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct associatedSubframes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "associatedSubframes_t";} + using parent_t = asn::bstring<>; + + }; + + associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;} + associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;} + struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + + }; + extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;} + extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + void clear() + { + associatedSubframes.clear(); + extended_ul_InterferenceOverloadIndication.clear(); + iE_Extensions.clear(); + + }; + private: + associatedSubframes_t associatedSubframes; + extended_ul_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +FiveGS-TAC ::= OCTET STRING (SIZE (3)) +*/ + +struct FiveGS_TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FiveGS-TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenInterRATs ::= ENUMERATED { + all, + geran, + utran, + cdma2000, + ..., + geranandutran, + cdma2000andutran + +} +*/ + +struct ForbiddenInterRATs : asn::enumerated<6, 2, true> +{ + static constexpr const char* name() {return "ForbiddenInterRATs";} + using parent_t = asn::enumerated<6, 2, true>; + typedef enum { + all + ,geran + ,utran + ,cdma2000 + ,geranandutran + ,cdma2000andutran + } index_t; + +}; + +/* +LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) +*/ + +struct LAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC +*/ + +struct ForbiddenLACs_elm : LAC +{ + static constexpr const char* name() {return "ForbiddenLACs_elm";} + using parent_t = LAC; + +}; +struct ForbiddenLACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenLAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenLAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenLACs ForbiddenLACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenLAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenLACs_t : ForbiddenLACs + { + static constexpr const char* name() {return "forbiddenLACs_t";} + using parent_t = ForbiddenLACs; + + }; + forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;} + forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenLACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenLACs_t forbiddenLACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item +*/ + +struct ForbiddenLAs_elm : ForbiddenLAs_Item +{ + static constexpr const char* name() {return "ForbiddenLAs_elm";} + using parent_t = ForbiddenLAs_Item; + +}; +struct ForbiddenLAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC +*/ + +struct ForbiddenTACs_elm : TAC +{ + static constexpr const char* name() {return "ForbiddenTACs_elm";} + using parent_t = TAC; + +}; +struct ForbiddenTACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenTAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenTAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenTAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenTACs_t : ForbiddenTACs + { + static constexpr const char* name() {return "forbiddenTACs_t";} + using parent_t = ForbiddenTACs; + + }; + forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;} + forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenTACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenTACs_t forbiddenTACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item +*/ + +struct ForbiddenTAs_elm : ForbiddenTAs_Item +{ + static constexpr const char* name() {return "ForbiddenTAs_elm";} + using parent_t = ForbiddenTAs_Item; + +}; +struct ForbiddenTAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Fourframes ::= BIT STRING (SIZE (24)) +*/ + +struct Fourframes : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Fourframes";} + using parent_t = asn::bstring<>; + +}; + +/* +FreqBandIndicatorPriority ::= ENUMERATED { + not-broadcasted, + broadcasted, + ... +} +*/ + +struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "FreqBandIndicatorPriority";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_broadcasted + ,broadcasted + } index_t; + +}; + +/* +SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SupportedSULFreqBandItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "SupportedSULFreqBandItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + iE_Extensions_t iE_Extensions; + +}; +/* +FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FreqBandNrItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FreqBandNrItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FreqBandNrItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct supportedSULBandList_t_elm : SupportedSULFreqBandItem + { + static constexpr const char* name() {return "supportedSULBandList_t_elm";} + using parent_t = SupportedSULFreqBandItem; + + }; + struct supportedSULBandList_t : asn::sequenceof + { + static constexpr const char* name() {return "supportedSULBandList_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;} + supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + supportedSULBandList.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + supportedSULBandList_t supportedSULBandList; + iE_Extensions_t iE_Extensions; + +}; +/* +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE (22..32)), + ... +} +*/ + +struct GNB_ID : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "GNB-ID";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~GNB_ID() {clear();} + struct gNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(gNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...} +*/ + +struct GNBOverloadInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "GNBOverloadInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + overloaded + ,not_overloaded + } index_t; + +}; + +/* +GTP-TEI ::= OCTET STRING (SIZE (4)) +*/ + +struct GTP_TEI : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "GTP-TEI";} + using parent_t = asn::ostring<>; + +}; + +/* +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TransportLayerAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TransportLayerAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GTPtunnelEndpoint_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GTPtunnelEndpoint ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEI, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GTPtunnelEndpoint";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct gTP_TEID_t : GTP_TEI + { + static constexpr const char* name() {return "gTP_TEID_t";} + using parent_t = GTP_TEI; + + }; + gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;} + gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + gTP_TEID.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + gTP_TEID_t gTP_TEID; + iE_Extensions_t iE_Extensions; + +}; +/* +MME-Group-ID ::= OCTET STRING (SIZE (2)) +*/ + +struct MME_Group_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Group-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GU_Group_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GU-Group-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mME-Group-ID MME-Group-ID, + iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GU_Group_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GU-Group-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct mME_Group_ID_t : MME_Group_ID + { + static constexpr const char* name() {return "mME_Group_ID_t";} + using parent_t = MME_Group_ID; + + }; + mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;} + mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + mME_Group_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + mME_Group_ID_t mME_Group_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID +*/ + +struct GUGroupIDList_elm : GU_Group_ID +{ + static constexpr const char* name() {return "GUGroupIDList_elm";} + using parent_t = GU_Group_ID; + +}; +struct GUGroupIDList : asn::sequenceof +{ + static constexpr const char* name() {return "GUGroupIDList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MME-Code ::= OCTET STRING (SIZE (1)) +*/ + +struct MME_Code : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Code";} + using parent_t = asn::ostring<>; + +}; + +/* +GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GUMMEI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GUMMEI ::= SEQUENCE { + + gU-Group-ID GU-Group-ID, + mME-Code MME-Code, + iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GUMMEI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GUMMEI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct gU_Group_ID_t : GU_Group_ID + { + static constexpr const char* name() {return "gU_Group_ID_t";} + using parent_t = GU_Group_ID; + + }; + gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;} + gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;} + struct mME_Code_t : MME_Code + { + static constexpr const char* name() {return "mME_Code_t";} + using parent_t = MME_Code; + + }; + mME_Code_t& ref_mME_Code() {return mME_Code;} + mME_Code_t const& ref_mME_Code() const {return mME_Code;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + void clear() + { + gU_Group_ID.clear(); + mME_Code.clear(); + iE_Extensions.clear(); + + }; + private: + gU_Group_ID_t gU_Group_ID; + mME_Code_t mME_Code; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalENB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalENB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalENB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalENB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eNB_ID_t : ENB_ID + { + static constexpr const char* name() {return "eNB_ID_t";} + using parent_t = ENB_ID; + + }; + eNB_ID_t& ref_eNB_ID() {return eNB_ID;} + eNB_ID_t const& ref_eNB_ID() const {return eNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eNB_ID_t eNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalGNB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalGNB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalGNB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalGNB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct gNB_ID_t : GNB_ID + { + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = GNB_ID; + + }; + gNB_ID_t& ref_gNB_ID() {return gNB_ID;} + gNB_ID_t const& ref_gNB_ID() const {return gNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + gNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + gNB_ID_t gNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +LoadIndicator ::= ENUMERATED { + lowLoad, + mediumLoad, + highLoad, + overLoad, + ... +} +*/ + +struct LoadIndicator : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "LoadIndicator";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + lowLoad + ,mediumLoad + ,highLoad + ,overLoad + } index_t; + +}; + +/* +HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct HWLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HWLoadIndicator ::= SEQUENCE { + dLHWLoadIndicator LoadIndicator, + uLHWLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HWLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "HWLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;} + dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;} + struct uLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;} + uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLHWLoadIndicator.clear(); + uLHWLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLHWLoadIndicator_t dLHWLoadIndicator; + uLHWLoadIndicator_t uLHWLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + ..., + interRATpingpong +} +*/ + +struct HandoverReportType : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "HandoverReportType";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + hoTooEarly + ,hoToWrongCell + ,interRATpingpong + } index_t; + +}; + +/* +NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED { + nRrestrictedinEPSasSecondaryRAT, + ... +} +*/ + +struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedinEPSasSecondaryRAT + } index_t; + +}; + +/* +NRrestrictionin5GS ::= ENUMERATED { + nRrestrictedin5GS, + ... +} +*/ + +struct NRrestrictionin5GS : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictionin5GS";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedin5GS + } index_t; + +}; + +/* +HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRrestrictioninEPSasSecondaryRAT CRITICALITY ignore EXTENSION NRrestrictioninEPSasSecondaryRAT PRESENCE optional}| + { ID id-CNTypeRestrictions CRITICALITY ignore EXTENSION CNTypeRestrictions PRESENCE optional}| + { ID id-NRrestrictionin5GS CRITICALITY ignore EXTENSION NRrestrictionin5GS PRESENCE optional}, + ... +} +*/ + +struct HandoverRestrictionList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;} + void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;} + void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; } + else if(equal(id_CNTypeRestrictions)) { type = 2; return true; } + else if(equal(id_NRrestrictionin5GS)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRrestrictioninEPSasSecondaryRAT);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;} + void select_id_CNTypeRestrictions() { set(ignore); type=2;} + void select_id_NRrestrictionin5GS() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set(1); } + NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get(1); } + CNTypeRestrictions& select_id_CNTypeRestrictions() { return set(2); } + CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get(2); } + NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set(3); } + NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRrestrictioninEPSasSecondaryRAT()); return true; + case 2: v(select_id_CNTypeRestrictions()); return true; + case 3: v(select_id_NRrestrictionin5GS()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CNTypeRestrictions)]; + char dummy2[sizeof(NRrestrictionin5GS)]; + char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;} + void select_id_CNTypeRestrictions() { set(optional); type=2;} + void select_id_NRrestrictionin5GS() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRestrictionList ::= SEQUENCE { + servingPLMN PLMN-Identity, + equivalentPLMNs EPLMNs OPTIONAL, + forbiddenTAs ForbiddenTAs OPTIONAL, + forbiddenLAs ForbiddenLAs OPTIONAL, + forbiddenInterRATs ForbiddenInterRATs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HandoverRestrictionList : asn::sequence<6, 0, true, 5> +{ + static constexpr const char* name() {return "HandoverRestrictionList";} + using parent_t = asn::sequence<6, 0, true, 5>; + struct servingPLMN_t : PLMN_Identity + { + static constexpr const char* name() {return "servingPLMN_t";} + using parent_t = PLMN_Identity; + + }; + servingPLMN_t& ref_servingPLMN() {return servingPLMN;} + servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;} + struct equivalentPLMNs_t : EPLMNs + { + static constexpr const char* name() {return "equivalentPLMNs_t";} + using parent_t = EPLMNs; + static constexpr bool optional = true; + + }; + equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;} + equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;} + struct forbiddenTAs_t : ForbiddenTAs + { + static constexpr const char* name() {return "forbiddenTAs_t";} + using parent_t = ForbiddenTAs; + static constexpr bool optional = true; + + }; + forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;} + forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;} + struct forbiddenLAs_t : ForbiddenLAs + { + static constexpr const char* name() {return "forbiddenLAs_t";} + using parent_t = ForbiddenLAs; + static constexpr bool optional = true; + + }; + forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;} + forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;} + struct forbiddenInterRATs_t : ForbiddenInterRATs + { + static constexpr const char* name() {return "forbiddenInterRATs_t";} + using parent_t = ForbiddenInterRATs; + static constexpr bool optional = true; + + }; + forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;} + forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + void clear() + { + servingPLMN.clear(); + equivalentPLMNs.clear(); + forbiddenTAs.clear(); + forbiddenLAs.clear(); + forbiddenInterRATs.clear(); + iE_Extensions.clear(); + + }; + private: + servingPLMN_t servingPLMN; + equivalentPLMNs_t equivalentPLMNs; + forbiddenTAs_t forbiddenTAs; + forbiddenLAs_t forbiddenLAs; + forbiddenInterRATs_t forbiddenInterRATs; + iE_Extensions_t iE_Extensions; + +}; +/* +IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct IntegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "IntegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +InterfacesToTrace ::= BIT STRING (SIZE (8)) +*/ + +struct InterfacesToTrace : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "InterfacesToTrace";} + using parent_t = asn::bstring<>; + +}; + +/* +InvokeIndication ::= ENUMERATED{ + abs-information, + ..., + naics-information-start, + naics-information-stop +} +*/ + +struct InvokeIndication : asn::enumerated<3, 2, true> +{ + static constexpr const char* name() {return "InvokeIndication";} + using parent_t = asn::enumerated<3, 2, true>; + typedef enum { + abs_information + ,naics_information_start + ,naics_information_stop + } index_t; + +}; + +/* +LCID ::= INTEGER(1..32, ...) +*/ + +struct LCID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LCID";} + using parent_t = asn::integer<>; + +}; + +/* +LHN-ID ::= OCTET STRING(SIZE (32..256)) +*/ + +struct LHN_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LHN-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +Time-UE-StayedInCell ::= INTEGER (0..4095) +*/ + +struct Time_UE_StayedInCell : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell";} + using parent_t = asn::integer<>; + +}; + +/* +Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) +*/ + +struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";} + using parent_t = asn::integer<>; + +}; + +/* +LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- + { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| + { ID id-HO-cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;} + void select_id_HO_cause() { set(id_HO_cause); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; } + else if(equal(id_HO_cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Time_UE_StayedInCell_EnhancedGranularity);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;} + void select_id_HO_cause() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set(1); } + Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get(1); } + Cause& select_id_HO_cause() { return set(2); } + Cause const* get_id_HO_cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Time_UE_StayedInCell_EnhancedGranularity()); return true; + case 2: v(select_id_HO_cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;} + void select_id_HO_cause() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LastVisitedEUTRANCellInformation ::= SEQUENCE { + global-Cell-ID ECGI, + cellType CellType, + time-UE-StayedInCell Time-UE-StayedInCell, + iE-Extensions ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct global_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "global_Cell_ID_t";} + using parent_t = ECGI; + + }; + global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;} + global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;} + struct cellType_t : CellType + { + static constexpr const char* name() {return "cellType_t";} + using parent_t = CellType; + + }; + cellType_t& ref_cellType() {return cellType;} + cellType_t const& ref_cellType() const {return cellType;} + struct time_UE_StayedInCell_t : Time_UE_StayedInCell + { + static constexpr const char* name() {return "time_UE_StayedInCell_t";} + using parent_t = Time_UE_StayedInCell; + + }; + time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;} + time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + void clear() + { + global_Cell_ID.clear(); + cellType.clear(); + time_UE_StayedInCell.clear(); + iE_Extensions.clear(); + + }; + private: + global_Cell_ID_t global_Cell_ID; + cellType_t cellType; + time_UE_StayedInCell_t time_UE_StayedInCell; + iE_Extensions_t iE_Extensions; + +}; +/* +LastVisitedUTRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedUTRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedUTRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedGERANCellInformation ::= CHOICE { + undefined NULL, + ... +} +*/ + +struct LastVisitedGERANCellInformation : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "LastVisitedGERANCellInformation";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~LastVisitedGERANCellInformation() {clear();} + struct undefined_t : asn::nulltype + { + static constexpr const char* name() {return "undefined_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(undefined_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +LastVisitedNGRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedNGRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedNGRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedCell-Item ::= CHOICE { + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + ..., + nG-RAN-Cell LastVisitedNGRANCellInformation +} +*/ + +struct LastVisitedCell_Item : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "LastVisitedCell-Item";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~LastVisitedCell_Item() {clear();} + struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation + { + static constexpr const char* name() {return "e_UTRAN_Cell_t";} + using parent_t = LastVisitedEUTRANCellInformation; + + }; + struct uTRAN_Cell_t : LastVisitedUTRANCellInformation + { + static constexpr const char* name() {return "uTRAN_Cell_t";} + using parent_t = LastVisitedUTRANCellInformation; + + }; + struct gERAN_Cell_t : LastVisitedGERANCellInformation + { + static constexpr const char* name() {return "gERAN_Cell_t";} + using parent_t = LastVisitedGERANCellInformation; + + }; + struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation + { + static constexpr const char* name() {return "nG_RAN_Cell_t";} + using parent_t = LastVisitedNGRANCellInformation; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as();} return nullptr; } + gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as();} return nullptr; } + nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(e_UTRAN_Cell_t)]; + char dummy2[sizeof(uTRAN_Cell_t)]; + char dummy3[sizeof(gERAN_Cell_t)]; + char dummy4[sizeof(nG_RAN_Cell_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} +*/ + +struct Links_to_log : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Links-to-log";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + uplink + ,downlink + ,both_uplink_and_downlink + } index_t; + +}; + +/* +ReportArea ::= ENUMERATED{ + ecgi, + ... +} +*/ + +struct ReportArea : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ReportArea";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ecgi + } index_t; + +}; + +/* +LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ + ... +} +*/ + +struct LocationReportingInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LocationReportingInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "LocationReportingInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct eventType_t : EventType + { + static constexpr const char* name() {return "eventType_t";} + using parent_t = EventType; + + }; + eventType_t& ref_eventType() {return eventType;} + eventType_t const& ref_eventType() const {return eventType;} + struct reportArea_t : ReportArea + { + static constexpr const char* name() {return "reportArea_t";} + using parent_t = ReportArea; + + }; + reportArea_t& ref_reportArea() {return reportArea;} + reportArea_t const& ref_reportArea() const {return reportArea;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + void clear() + { + eventType.clear(); + reportArea.clear(); + iE_Extensions.clear(); + + }; + private: + eventType_t eventType; + reportArea_t reportArea; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} +*/ + +struct ReportIntervalMDT : asn::enumerated<13, 0, false> +{ + static constexpr const char* name() {return "ReportIntervalMDT";} + using parent_t = asn::enumerated<13, 0, false>; + typedef enum { + ms120 + ,ms240 + ,ms480 + ,ms640 + ,ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + ,min6 + ,min12 + ,min30 + ,min60 + } index_t; + +}; + +/* +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} +*/ + +struct ReportAmountMDT : asn::enumerated<8, 0, false> +{ + static constexpr const char* name() {return "ReportAmountMDT";} + using parent_t = asn::enumerated<8, 0, false>; + typedef enum { + r1 + ,r2 + ,r4 + ,r8 + ,r16 + ,r32 + ,r64 + ,rinfinity + } index_t; + +}; + +/* +M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1PeriodicReporting_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1PeriodicReporting : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M1PeriodicReporting";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct reportInterval_t : ReportIntervalMDT + { + static constexpr const char* name() {return "reportInterval_t";} + using parent_t = ReportIntervalMDT; + + }; + reportInterval_t& ref_reportInterval() {return reportInterval;} + reportInterval_t const& ref_reportInterval() const {return reportInterval;} + struct reportAmount_t : ReportAmountMDT + { + static constexpr const char* name() {return "reportAmount_t";} + using parent_t = ReportAmountMDT; + + }; + reportAmount_t& ref_reportAmount() {return reportAmount;} + reportAmount_t const& ref_reportAmount() const {return reportAmount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + void clear() + { + reportInterval.clear(); + reportAmount.clear(); + iE_Extensions.clear(); + + }; + private: + reportInterval_t reportInterval; + reportAmount_t reportAmount; + iE_Extensions_t iE_Extensions; + +}; +/* +M1ReportingTrigger::= ENUMERATED{ + periodic, + a2eventtriggered, + ..., + a2eventtriggered-periodic +} +*/ + +struct M1ReportingTrigger : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "M1ReportingTrigger";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + periodic + ,a2eventtriggered + ,a2eventtriggered_periodic + } index_t; + +}; + +/* +Threshold-RSRP ::= INTEGER(0..97) +*/ + +struct Threshold_RSRP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRP";} + using parent_t = asn::integer<>; + +}; + +/* +Threshold-RSRQ ::= INTEGER(0..34) +*/ + +struct Threshold_RSRQ : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRQ";} + using parent_t = asn::integer<>; + +}; + +/* +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} +*/ + +struct MeasurementThresholdA2 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "MeasurementThresholdA2";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~MeasurementThresholdA2() {clear();} + struct threshold_RSRP_t : Threshold_RSRP + { + static constexpr const char* name() {return "threshold_RSRP_t";} + using parent_t = Threshold_RSRP; + + }; + struct threshold_RSRQ_t : Threshold_RSRQ + { + static constexpr const char* name() {return "threshold_RSRQ_t";} + using parent_t = Threshold_RSRQ; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as();} return nullptr; } + threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(threshold_RSRP_t)]; + char dummy2[sizeof(threshold_RSRQ_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1ThresholdEventA2_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M1ThresholdEventA2";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct measurementThreshold_t : MeasurementThresholdA2 + { + static constexpr const char* name() {return "measurementThreshold_t";} + using parent_t = MeasurementThresholdA2; + + }; + measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;} + measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementThreshold); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementThreshold); + v(iE_Extensions); + + }; + void clear() + { + measurementThreshold.clear(); + iE_Extensions.clear(); + + }; + private: + measurementThreshold_t measurementThreshold; + iE_Extensions_t iE_Extensions; + +}; +/* +M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } +*/ + +struct M3period : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "M3period";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + ms100 + ,ms1000 + ,ms10000 + } index_t; + +}; + +/* +M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M3Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M3Configuration ::= SEQUENCE { + m3period M3period, + iE-Extensions ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M3Configuration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M3Configuration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct m3period_t : M3period + { + static constexpr const char* name() {return "m3period_t";} + using parent_t = M3period; + + }; + m3period_t& ref_m3period() {return m3period;} + m3period_t const& ref_m3period() const {return m3period;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m3period); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m3period); + v(iE_Extensions); + + }; + void clear() + { + m3period.clear(); + iE_Extensions.clear(); + + }; + private: + m3period_t m3period; + iE_Extensions_t iE_Extensions; + +}; +/* +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M4period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M4period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M4Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M4Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M4Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m4period_t : M4period + { + static constexpr const char* name() {return "m4period_t";} + using parent_t = M4period; + + }; + m4period_t& ref_m4period() {return m4period;} + m4period_t const& ref_m4period() const {return m4period;} + struct m4_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m4_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;} + m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m4period.clear(); + m4_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m4period_t m4period; + m4_links_to_log_t m4_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M5period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M5period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M5Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M5Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M5Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m5period_t : M5period + { + static constexpr const char* name() {return "m5period_t";} + using parent_t = M5period; + + }; + m5period_t& ref_m5period() {return m5period;} + m5period_t const& ref_m5period() const {return m5period;} + struct m5_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m5_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;} + m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m5period.clear(); + m5_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m5period_t m5period; + m5_links_to_log_t m5_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } +*/ + +struct M6report_interval : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "M6report-interval";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + } index_t; + +}; + +/* +M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } +*/ + +struct M6delay_threshold : asn::enumerated<12, 0, true> +{ + static constexpr const char* name() {return "M6delay-threshold";} + using parent_t = asn::enumerated<12, 0, true>; + typedef enum { + ms30 + ,ms40 + ,ms50 + ,ms60 + ,ms70 + ,ms80 + ,ms90 + ,ms100 + ,ms150 + ,ms300 + ,ms500 + ,ms750 + } index_t; + +}; + +/* +M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M6Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M6Configuration ::= SEQUENCE { + m6report-interval M6report-interval, + m6delay-threshold M6delay-threshold OPTIONAL, +-- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” -- + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M6Configuration : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "M6Configuration";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct m6report_interval_t : M6report_interval + { + static constexpr const char* name() {return "m6report_interval_t";} + using parent_t = M6report_interval; + + }; + m6report_interval_t& ref_m6report_interval() {return m6report_interval;} + m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;} + struct m6delay_threshold_t : M6delay_threshold + { + static constexpr const char* name() {return "m6delay_threshold_t";} + using parent_t = M6delay_threshold; + static constexpr bool optional = true; + + }; + m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;} + m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;} + struct m6_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m6_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;} + m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m6report_interval.clear(); + m6delay_threshold.clear(); + m6_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m6report_interval_t m6report_interval; + m6delay_threshold_t m6delay_threshold; + m6_links_to_log_t m6_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M7period ::= INTEGER(1..60, ...) +*/ + +struct M7period : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "M7period";} + using parent_t = asn::integer<>; + +}; + +/* +M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M7Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M7Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M7Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m7period_t : M7period + { + static constexpr const char* name() {return "m7period_t";} + using parent_t = M7period; + + }; + m7period_t& ref_m7period() {return m7period;} + m7period_t const& ref_m7period() const {return m7period;} + struct m7_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m7_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;} + m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m7period.clear(); + m7_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m7period_t m7period; + m7_links_to_log_t m7_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) +*/ + +struct MBMS_Service_Area_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MBMS-Service-Area-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity +*/ + +struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity +{ + static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";} + using parent_t = MBMS_Service_Area_Identity; + +}; +struct MBMS_Service_Area_Identity_List : asn::sequenceof +{ + static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RadioframeAllocationPeriod ::= ENUMERATED{ + n1, + n2, + n4, + n8, + n16, + n32, + ... +} +*/ + +struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "RadioframeAllocationPeriod";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + n1 + ,n2 + ,n4 + ,n8 + ,n16 + ,n32 + } index_t; + +}; + +/* +RadioframeAllocationOffset ::= INTEGER (0..7, ...) +*/ + +struct RadioframeAllocationOffset : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RadioframeAllocationOffset";} + using parent_t = asn::integer<>; + +}; + +/* +Oneframe ::= BIT STRING (SIZE (6)) +*/ + +struct Oneframe : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Oneframe";} + using parent_t = asn::bstring<>; + +}; + +/* +SubframeAllocation ::= CHOICE { + oneframe Oneframe, + fourframes Fourframes, + ... +} +*/ + +struct SubframeAllocation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SubframeAllocation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SubframeAllocation() {clear();} + struct oneframe_t : Oneframe + { + static constexpr const char* name() {return "oneframe_t";} + using parent_t = Oneframe; + + }; + struct fourframes_t : Fourframes + { + static constexpr const char* name() {return "fourframes_t";} + using parent_t = Fourframes; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as();} return nullptr; } + fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(oneframe_t)]; + char dummy2[sizeof(fourframes_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MBSFN_Subframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MBSFN-Subframe-Info ::= SEQUENCE { + radioframeAllocationPeriod RadioframeAllocationPeriod, + radioframeAllocationOffset RadioframeAllocationOffset, + subframeAllocation SubframeAllocation, + iE-Extensions ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "MBSFN-Subframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod + { + static constexpr const char* name() {return "radioframeAllocationPeriod_t";} + using parent_t = RadioframeAllocationPeriod; + + }; + radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;} + radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;} + struct radioframeAllocationOffset_t : RadioframeAllocationOffset + { + static constexpr const char* name() {return "radioframeAllocationOffset_t";} + using parent_t = RadioframeAllocationOffset; + + }; + radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;} + radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;} + struct subframeAllocation_t : SubframeAllocation + { + static constexpr const char* name() {return "subframeAllocation_t";} + using parent_t = SubframeAllocation; + + }; + subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;} + subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + void clear() + { + radioframeAllocationPeriod.clear(); + radioframeAllocationOffset.clear(); + subframeAllocation.clear(); + iE_Extensions.clear(); + + }; + private: + radioframeAllocationPeriod_t radioframeAllocationPeriod; + radioframeAllocationOffset_t radioframeAllocationOffset; + subframeAllocation_t subframeAllocation; + iE_Extensions_t iE_Extensions; + +}; +/* +MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info +*/ + +struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info +{ + static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";} + using parent_t = MBSFN_Subframe_Info; + +}; +struct MBSFN_Subframe_Infolist : asn::sequenceof +{ + static constexpr const char* name() {return "MBSFN-Subframe-Infolist";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} +*/ + +struct MDT_Activation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "MDT-Activation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + immediate_MDT_only + ,immediate_MDT_and_Trace + } index_t; + +}; + +/* +MeasurementsToActivate::= BIT STRING (SIZE (8)) +*/ + +struct MeasurementsToActivate : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MeasurementsToActivate";} + using parent_t = asn::bstring<>; + +}; + +/* +MDT-Location-Info ::= BIT STRING (SIZE (8)) +*/ + +struct MDT_Location_Info : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MDT-Location-Info";} + using parent_t = asn::bstring<>; + +}; + +/* +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity +*/ + +struct MDTPLMNList_elm : PLMN_Identity +{ + static constexpr const char* name() {return "MDTPLMNList_elm";} + using parent_t = PLMN_Identity; + +}; +struct MDTPLMNList : asn::sequenceof +{ + static constexpr const char* name() {return "MDTPLMNList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasConfig::= ENUMERATED {setup,...} +*/ + +struct WLANMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "WLANMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +WLANName ::= OCTET STRING (SIZE (1..32)) +*/ + +struct WLANName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WLANName";} + using parent_t = asn::ostring<>; + +}; + +/* +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName +*/ + +struct WLANMeasConfigNameList_elm : WLANName +{ + static constexpr const char* name() {return "WLANMeasConfigNameList_elm";} + using parent_t = WLANName; + +}; +struct WLANMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "WLANMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WLANMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "WLANMeasurementConfiguration";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct wlanMeasConfig_t : WLANMeasConfig + { + static constexpr const char* name() {return "wlanMeasConfig_t";} + using parent_t = WLANMeasConfig; + + }; + wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;} + wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;} + struct wlanMeasConfigNameList_t : WLANMeasConfigNameList + { + static constexpr const char* name() {return "wlanMeasConfigNameList_t";} + using parent_t = WLANMeasConfigNameList; + static constexpr bool optional = true; + + }; + wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;} + wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;} + struct wlan_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;} + wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;} + struct wlan_rtt_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rtt_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;} + wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + void clear() + { + wlanMeasConfig.clear(); + wlanMeasConfigNameList.clear(); + wlan_rssi.clear(); + wlan_rtt.clear(); + iE_Extensions.clear(); + + }; + private: + wlanMeasConfig_t wlanMeasConfig; + wlanMeasConfigNameList_t wlanMeasConfigNameList; + wlan_rssi_t wlan_rssi; + wlan_rtt_t wlan_rtt; + iE_Extensions_t iE_Extensions; + +}; +/* +MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| + {ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| + {ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| + {ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| + {ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional}| + {ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| + {ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}| + { ID id-BluetoothMeasurementConfiguration CRITICALITY ignore EXTENSION BluetoothMeasurementConfiguration PRESENCE optional}| + { ID id-WLANMeasurementConfiguration CRITICALITY ignore EXTENSION WLANMeasurementConfiguration PRESENCE optional}, + ... +} +*/ + +struct MDT_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(id_M3Configuration); type=1;} + void select_id_M4Configuration() { set(id_M4Configuration); type=2;} + void select_id_M5Configuration() { set(id_M5Configuration); type=3;} + void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;} + void select_id_M6Configuration() { set(id_M6Configuration); type=6;} + void select_id_M7Configuration() { set(id_M7Configuration); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;} + void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_M3Configuration)) { type = 1; return true; } + else if(equal(id_M4Configuration)) { type = 2; return true; } + else if(equal(id_M5Configuration)) { type = 3; return true; } + else if(equal(id_MDT_Location_Info)) { type = 4; return true; } + else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; } + else if(equal(id_M6Configuration)) { type = 6; return true; } + else if(equal(id_M7Configuration)) { type = 7; return true; } + else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; } + else if(equal(id_WLANMeasurementConfiguration)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_M3Configuration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(ignore); type=1;} + void select_id_M4Configuration() { set(ignore); type=2;} + void select_id_M5Configuration() { set(ignore); type=3;} + void select_id_MDT_Location_Info() { set(ignore); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;} + void select_id_M6Configuration() { set(ignore); type=6;} + void select_id_M7Configuration() { set(ignore); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;} + void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + M3Configuration& select_id_M3Configuration() { return set(1); } + M3Configuration const* get_id_M3Configuration() const { return get(1); } + M4Configuration& select_id_M4Configuration() { return set(2); } + M4Configuration const* get_id_M4Configuration() const { return get(2); } + M5Configuration& select_id_M5Configuration() { return set(3); } + M5Configuration const* get_id_M5Configuration() const { return get(3); } + MDT_Location_Info& select_id_MDT_Location_Info() { return set(4); } + MDT_Location_Info const* get_id_MDT_Location_Info() const { return get(4); } + MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set(5); } + MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get(5); } + M6Configuration& select_id_M6Configuration() { return set(6); } + M6Configuration const* get_id_M6Configuration() const { return get(6); } + M7Configuration& select_id_M7Configuration() { return set(7); } + M7Configuration const* get_id_M7Configuration() const { return get(7); } + BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set(8); } + BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get(8); } + WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set(9); } + WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_M3Configuration()); return true; + case 2: v(select_id_M4Configuration()); return true; + case 3: v(select_id_M5Configuration()); return true; + case 4: v(select_id_MDT_Location_Info()); return true; + case 5: v(select_id_SignallingBasedMDTPLMNList()); return true; + case 6: v(select_id_M6Configuration()); return true; + case 7: v(select_id_M7Configuration()); return true; + case 8: v(select_id_BluetoothMeasurementConfiguration()); return true; + case 9: v(select_id_WLANMeasurementConfiguration()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BluetoothMeasurementConfiguration)]; + char dummy2[sizeof(M3Configuration)]; + char dummy3[sizeof(M4Configuration)]; + char dummy4[sizeof(M5Configuration)]; + char dummy5[sizeof(M6Configuration)]; + char dummy6[sizeof(M7Configuration)]; + char dummy7[sizeof(MDTPLMNList)]; + char dummy8[sizeof(MDT_Location_Info)]; + char dummy9[sizeof(WLANMeasurementConfiguration)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(conditional); type=1;} + void select_id_M4Configuration() { set(conditional); type=2;} + void select_id_M5Configuration() { set(conditional); type=3;} + void select_id_MDT_Location_Info() { set(optional); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;} + void select_id_M6Configuration() { set(conditional); type=6;} + void select_id_M7Configuration() { set(conditional); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;} + void select_id_WLANMeasurementConfiguration() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(conditional)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(conditional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(conditional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MDT-Configuration ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT, + measurementsToActivate MeasurementsToActivate, + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic, or event-triggered periodic reporting for measurement M1 + iE-Extensions ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MDT_Configuration : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "MDT-Configuration";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct mdt_Activation_t : MDT_Activation + { + static constexpr const char* name() {return "mdt_Activation_t";} + using parent_t = MDT_Activation; + + }; + mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;} + mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;} + struct areaScopeOfMDT_t : AreaScopeOfMDT + { + static constexpr const char* name() {return "areaScopeOfMDT_t";} + using parent_t = AreaScopeOfMDT; + + }; + areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;} + areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;} + struct measurementsToActivate_t : MeasurementsToActivate + { + static constexpr const char* name() {return "measurementsToActivate_t";} + using parent_t = MeasurementsToActivate; + + }; + measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;} + measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;} + struct m1reportingTrigger_t : M1ReportingTrigger + { + static constexpr const char* name() {return "m1reportingTrigger_t";} + using parent_t = M1ReportingTrigger; + + }; + m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;} + m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;} + struct m1thresholdeventA2_t : M1ThresholdEventA2 + { + static constexpr const char* name() {return "m1thresholdeventA2_t";} + using parent_t = M1ThresholdEventA2; + static constexpr bool optional = true; + + }; + m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;} + m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;} + struct m1periodicReporting_t : M1PeriodicReporting + { + static constexpr const char* name() {return "m1periodicReporting_t";} + using parent_t = M1PeriodicReporting; + static constexpr bool optional = true; + + }; + m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;} + m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + void clear() + { + mdt_Activation.clear(); + areaScopeOfMDT.clear(); + measurementsToActivate.clear(); + m1reportingTrigger.clear(); + m1thresholdeventA2.clear(); + m1periodicReporting.clear(); + iE_Extensions.clear(); + + }; + private: + mdt_Activation_t mdt_Activation; + areaScopeOfMDT_t areaScopeOfMDT; + measurementsToActivate_t measurementsToActivate; + m1reportingTrigger_t m1reportingTrigger; + m1thresholdeventA2_t m1thresholdeventA2; + m1periodicReporting_t m1periodicReporting; + iE_Extensions_t iE_Extensions; + +}; +/* +MakeBeforeBreakIndicator::= ENUMERATED {true, ...} +*/ + +struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MakeBeforeBreakIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} +*/ + +struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ManagementBasedMDTallowed";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allowed + } index_t; + +}; + +/* +Masked-IMEISV ::= BIT STRING (SIZE (64)) +*/ + +struct Masked_IMEISV : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Masked-IMEISV";} + using parent_t = asn::bstring<>; + +}; + +/* +MeNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +NRCellIdentifier ::= BIT STRING (SIZE (36)) +*/ + +struct NRCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRCGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRCGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRCGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct nRcellIdentifier_t : NRCellIdentifier + { + static constexpr const char* name() {return "nRcellIdentifier_t";} + using parent_t = NRCellIdentifier; + + }; + nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;} + nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + nRcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + nRcellIdentifier_t nRcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional}| + { ID id-MeNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct MeNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(id_NRCGI); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRCGI)) { type = 1; return true; } + else if(equal(id_MeNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRCGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(ignore); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRCGI& select_id_NRCGI() { return set(1); } + NRCGI const* get_id_NRCGI() const { return get(1); } + MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set(2); } + MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRCGI()); return true; + case 2: v(select_id_MeNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeNBCoordinationAssistanceInformation)]; + char dummy2[sizeof(NRCGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(optional); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeNBResourceCoordinationInformation ::= SEQUENCE { + eUTRA-Cell-ID ECGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "MeNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eUTRA_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "eUTRA_Cell_ID_t";} + using parent_t = ECGI; + + }; + eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;} + eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + eUTRA_Cell_ID.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRA_Cell_ID_t eUTRA_Cell_ID; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBtoSeNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +MeNBtoSgNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSgNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSgNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +Measurement-ID ::= INTEGER (1..4095, ...) +*/ + +struct Measurement_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Measurement-ID";} + using parent_t = asn::integer<>; + +}; + +/* +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct handoverTriggerChange_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChange_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;} + handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;} + template void decode(V& v) + { + v(handoverTriggerChange); + + }; + template void encode(V& v) const + { + v(handoverTriggerChange); + + }; + void clear() + { + handoverTriggerChange.clear(); + + }; + private: + handoverTriggerChange_t handoverTriggerChange; + +}; +/* +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersModificationRange";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct handoverTriggerChangeLowerLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;} + handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;} + struct handoverTriggerChangeUpperLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;} + handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;} + template void decode(V& v) + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + template void encode(V& v) const + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + void clear() + { + handoverTriggerChangeLowerLimit.clear(); + handoverTriggerChangeUpperLimit.clear(); + + }; + private: + handoverTriggerChangeLowerLimit_t handoverTriggerChangeLowerLimit; + handoverTriggerChangeUpperLimit_t handoverTriggerChangeUpperLimit; + +}; +/* +MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo +*/ + +struct MultibandInfoList_elm : BandInfo +{ + static constexpr const char* name() {return "MultibandInfoList_elm";} + using parent_t = BandInfo; + +}; +struct MultibandInfoList : asn::sequenceof +{ + static constexpr const char* name() {return "MultibandInfoList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} +*/ + +struct NRSCS : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "NRSCS";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + scs15 + ,scs30 + ,scs60 + ,scs120 + } index_t; + +}; + +/* +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} +*/ + +struct NRNRB : asn::enumerated<29, 0, true> +{ + static constexpr const char* name() {return "NRNRB";} + using parent_t = asn::enumerated<29, 0, true>; + typedef enum { + nrb11 + ,nrb18 + ,nrb24 + ,nrb25 + ,nrb31 + ,nrb32 + ,nrb38 + ,nrb51 + ,nrb52 + ,nrb65 + ,nrb66 + ,nrb78 + ,nrb79 + ,nrb93 + ,nrb106 + ,nrb107 + ,nrb121 + ,nrb132 + ,nrb133 + ,nrb135 + ,nrb160 + ,nrb162 + ,nrb189 + ,nrb216 + ,nrb217 + ,nrb245 + ,nrb264 + ,nrb270 + ,nrb273 + } index_t; + +}; + +/* +NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NR_TxBW_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NR_TxBW : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NR-TxBW";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRSCS_t : NRSCS + { + static constexpr const char* name() {return "nRSCS_t";} + using parent_t = NRSCS; + + }; + nRSCS_t& ref_nRSCS() {return nRSCS;} + nRSCS_t const& ref_nRSCS() const {return nRSCS;} + struct nRNRB_t : NRNRB + { + static constexpr const char* name() {return "nRNRB_t";} + using parent_t = NRNRB; + + }; + nRNRB_t& ref_nRNRB() {return nRNRB;} + nRNRB_t const& ref_nRNRB() const {return nRNRB;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + void clear() + { + nRSCS.clear(); + nRNRB.clear(); + iE_Extensions.clear(); + + }; + private: + nRSCS_t nRSCS; + nRNRB_t nRNRB; + iE_Extensions_t iE_Extensions; + +}; +/* +SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SULInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SULInformation ::= SEQUENCE { + sUL-ARFCN INTEGER (0.. 3279165), + sUL-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {SULInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SULInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SULInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct sUL_ARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "sUL_ARFCN_t";} + using parent_t = asn::integer<>; + + }; + + sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;} + sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;} + struct sUL_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "sUL_TxBW_t";} + using parent_t = NR_TxBW; + + }; + sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;} + sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + void clear() + { + sUL_ARFCN.clear(); + sUL_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + sUL_ARFCN_t sUL_ARFCN; + sUL_TxBW_t sUL_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRFreqInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... +} +*/ + +struct NRFreqInfo : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "NRFreqInfo";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nRARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "nRARFCN_t";} + using parent_t = asn::integer<>; + + }; + + nRARFCN_t& ref_nRARFCN() {return nRARFCN;} + nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;} + struct freqBandListNr_t_elm : FreqBandNrItem + { + static constexpr const char* name() {return "freqBandListNr_t_elm";} + using parent_t = FreqBandNrItem; + + }; + struct freqBandListNr_t : asn::sequenceof + { + static constexpr const char* name() {return "freqBandListNr_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;} + freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;} + struct sULInformation_t : SULInformation + { + static constexpr const char* name() {return "sULInformation_t";} + using parent_t = SULInformation; + static constexpr bool optional = true; + + }; + sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;} + sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + void clear() + { + nRARFCN.clear(); + freqBandListNr.clear(); + sULInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nRARFCN_t nRARFCN; + freqBandListNr_t freqBandListNr; + sULInformation_t sULInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +NRPCI ::= INTEGER (0..1007) +*/ + +struct NRPCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRPCI";} + using parent_t = asn::integer<>; + +}; + +/* +NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRencryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRencryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRintegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRUESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRUESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRUESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRencryptionAlgorithms_t : NRencryptionAlgorithms + { + static constexpr const char* name() {return "nRencryptionAlgorithms_t";} + using parent_t = NRencryptionAlgorithms; + + }; + nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;} + nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;} + struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms + { + static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";} + using parent_t = NRintegrityProtectionAlgorithms; + + }; + nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;} + nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + nRencryptionAlgorithms.clear(); + nRintegrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + nRencryptionAlgorithms_t nRencryptionAlgorithms; + nRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +PCI ::= INTEGER (0..503, ...) +*/ + +struct PCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PCI";} + using parent_t = asn::integer<>; + +}; + +/* +Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}, + ... +} +*/ + +struct Neighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(id_NeighbourTAC); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NeighbourTAC)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NeighbourTAC);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + TAC& select_id_NeighbourTAC() { return set(1); } + TAC const* get_id_NeighbourTAC() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NeighbourTAC()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(TAC)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE { + eCGI ECGI, + pCI PCI, + eARFCN EARFCN, + iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "Neighbour_Information_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + void clear() + { + eCGI.clear(); + pCI.clear(); + eARFCN.clear(); + iE_Extensions.clear(); + + }; + private: + eCGI_t eCGI; + pCI_t pCI; + eARFCN_t eARFCN; + iE_Extensions_t iE_Extensions; + +}; +struct Neighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "Neighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NewDRBIDrequest::= ENUMERATED {true, ...} +*/ + +struct NewDRBIDrequest : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NewDRBIDrequest";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +Number-of-Antennaports ::= ENUMERATED { + an1, + an2, + an4, + ... +} +*/ + +struct Number_of_Antennaports : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Number-of-Antennaports";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + an1 + ,an2 + ,an4 + } index_t; + +}; + +/* +PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...} +*/ + +struct PDCPChangeIndication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPChangeIndication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + s_KgNB_update_required + ,pDCP_data_recovery_required + } index_t; + +}; + +/* +PDCPSnLength ::= ENUMERATED {twelve-bits,eighteen-bits,...} +*/ + +struct PDCPSnLength : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPSnLength";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + twelve_bits + ,eighteen_bits + } index_t; + +}; + +/* +PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PRACH_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- + iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PRACH_Configuration : asn::sequence<6, 0, true, 2> +{ + static constexpr const char* name() {return "PRACH-Configuration";} + using parent_t = asn::sequence<6, 0, true, 2>; + struct rootSequenceIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rootSequenceIndex_t";} + using parent_t = asn::integer<>; + + }; + + rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;} + rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;} + struct zeroCorrelationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "zeroCorrelationIndex_t";} + using parent_t = asn::integer<>; + + }; + + zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;} + zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;} + struct highSpeedFlag_t : asn::boolean + { + static constexpr const char* name() {return "highSpeedFlag_t";} + using parent_t = asn::boolean; + + }; + highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;} + highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;} + struct prach_FreqOffset_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_FreqOffset_t";} + using parent_t = asn::integer<>; + + }; + + prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;} + prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;} + struct prach_ConfigIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_ConfigIndex_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;} + prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + void clear() + { + rootSequenceIndex.clear(); + zeroCorrelationIndex.clear(); + highSpeedFlag.clear(); + prach_FreqOffset.clear(); + prach_ConfigIndex.clear(); + iE_Extensions.clear(); + + }; + private: + rootSequenceIndex_t rootSequenceIndex; + zeroCorrelationIndex_t zeroCorrelationIndex; + highSpeedFlag_t highSpeedFlag; + prach_FreqOffset_t prach_FreqOffset; + prach_ConfigIndex_t prach_ConfigIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct PedestrianUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PedestrianUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +Port-Number ::= OCTET STRING (SIZE (2)) +*/ + +struct Port_Number : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Port-Number";} + using parent_t = asn::ostring<>; + +}; + +/* +ProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectDiscovery : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectDiscovery";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectCommunication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectCommunication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeUEtoNetworkRelaying ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, + ... +} +*/ + +struct ProSeAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ProSeUEtoNetworkRelaying)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ProSeUEtoNetworkRelaying);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set(1); } + ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ProSeUEtoNetworkRelaying()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ProSeUEtoNetworkRelaying)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProSeAuthorized ::= SEQUENCE { + proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, + proSeDirectCommunication ProSeDirectCommunication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProSeAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ProSeAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct proSeDirectDiscovery_t : ProSeDirectDiscovery + { + static constexpr const char* name() {return "proSeDirectDiscovery_t";} + using parent_t = ProSeDirectDiscovery; + static constexpr bool optional = true; + + }; + proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;} + proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;} + struct proSeDirectCommunication_t : ProSeDirectCommunication + { + static constexpr const char* name() {return "proSeDirectCommunication_t";} + using parent_t = ProSeDirectCommunication; + static constexpr bool optional = true; + + }; + proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;} + proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + void clear() + { + proSeDirectDiscovery.clear(); + proSeDirectCommunication.clear(); + iE_Extensions.clear(); + + }; + private: + proSeDirectDiscovery_t proSeDirectDiscovery; + proSeDirectCommunication_t proSeDirectCommunication; + iE_Extensions_t iE_Extensions; + +}; +/* +ResourceType ::= ENUMERATED { + downlinknonCRS, + cRS, + uplink, + ... +} +*/ + +struct ResourceType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "ResourceType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + downlinknonCRS + ,cRS + ,uplink + } index_t; + +}; + +/* +ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedFootprintTimePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimePeriodicity INTEGER (1..320, ...), + protectedFootprintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedFootprintTimePattern";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct protectedFootprintTimePeriodicity_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;} + protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;} + struct protectedFootprintStartTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintStartTime_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;} + protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + void clear() + { + protectedFootprintTimePeriodicity.clear(); + protectedFootprintStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + protectedFootprintTimePeriodicity_t protectedFootprintTimePeriodicity; + protectedFootprintStartTime_t protectedFootprintStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedResourceList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedResourceList-Item ::= SEQUENCE { + resourceType ResourceType, + intraPRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedResourceList-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct resourceType_t : ResourceType + { + static constexpr const char* name() {return "resourceType_t";} + using parent_t = ResourceType; + + }; + resourceType_t& ref_resourceType() {return resourceType;} + resourceType_t const& ref_resourceType() const {return resourceType;} + struct intraPRBProtectedResourceFootprint_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";} + using parent_t = asn::bstring<>; + + }; + + intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;} + intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;} + struct protectedFootprintFrequencyPattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";} + using parent_t = asn::bstring<>; + + }; + + protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;} + protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;} + struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern + { + static constexpr const char* name() {return "protectedFootprintTimePattern_t";} + using parent_t = ProtectedFootprintTimePattern; + + }; + protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;} + protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + void clear() + { + resourceType.clear(); + intraPRBProtectedResourceFootprint.clear(); + protectedFootprintFrequencyPattern.clear(); + protectedFootprintTimePattern.clear(); + iE_Extensions.clear(); + + }; + private: + resourceType_t resourceType; + intraPRBProtectedResourceFootprint_t intraPRBProtectedResourceFootprint; + protectedFootprintFrequencyPattern_t protectedFootprintFrequencyPattern; + protectedFootprintTimePattern_t protectedFootprintTimePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item +*/ + +struct ProtectedResourceList_elm : ProtectedResourceList_Item +{ + static constexpr const char* name() {return "ProtectedResourceList_elm";} + using parent_t = ProtectedResourceList_Item; + +}; +struct ProtectedResourceList : asn::sequenceof +{ + static constexpr const char* name() {return "ProtectedResourceList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} -- Rapporteur: missing extension -- +*/ + +struct ProtectedEUTRAResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedEUTRAResourceIndication::= SEQUENCE { + activationSFN INTEGER (0..1023), + protectedResourceList ProtectedResourceList, + mBSFNControlRegionLength INTEGER (0..3) OPTIONAL, + pDCCHRegionLength INTEGER (1..3) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct protectedResourceList_t : ProtectedResourceList + { + static constexpr const char* name() {return "protectedResourceList_t";} + using parent_t = ProtectedResourceList; + + }; + protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;} + protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;} + struct pDCCHRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCHRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;} + pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + protectedResourceList.clear(); + mBSFNControlRegionLength.clear(); + pDCCHRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + protectedResourceList_t protectedResourceList; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + pDCCHRegionLength_t pDCCHRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} +*/ + +struct Reestablishment_Indication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "Reestablishment-Indication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + reestablished + } index_t; + +}; + +/* +RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RLC_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RLC_Status : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RLC-Status";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct reestablishment_Indication_t : Reestablishment_Indication + { + static constexpr const char* name() {return "reestablishment_Indication_t";} + using parent_t = Reestablishment_Indication; + + }; + reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;} + reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + void clear() + { + reestablishment_Indication.clear(); + iE_Extensions.clear(); + + }; + private: + reestablishment_Indication_t reestablishment_Indication; + iE_Extensions_t iE_Extensions; + +}; +/* +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} +*/ + +struct RLCMode : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "RLCMode";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + rlc_am + ,rlc_um_bidirectional + ,rlc_um_unidirectional_ul + ,rlc_um_unidirectional_dl + } index_t; + +}; + +/* +RRC-Config-Ind ::= ENUMERATED { + full-config, + delta-config, + ... +} +*/ + +struct RRC_Config_Ind : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RRC-Config-Ind";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + full_config + ,delta_config + } index_t; + +}; + +/* +RRC-Context ::= OCTET STRING +*/ + +struct RRC_Context : asn::ostring<> +{ + static constexpr const char* name() {return "RRC-Context";} + using parent_t = asn::ostring<>; + +}; + +/* +RRCConnReestabIndicator ::= ENUMERATED { + reconfigurationFailure, handoverFailure, otherFailure, ... +} +*/ + +struct RRCConnReestabIndicator : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RRCConnReestabIndicator";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + reconfigurationFailure + ,handoverFailure + ,otherFailure + } index_t; + +}; + +/* +RRCConnSetupIndicator::= ENUMERATED { + rrcConnSetup, + ... +} +*/ + +struct RRCConnSetupIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "RRCConnSetupIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + rrcConnSetup + } index_t; + +}; + +/* +RRCContainer ::= OCTET STRING +*/ + +struct RRCContainer : asn::ostring<> +{ + static constexpr const char* name() {return "RRCContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RSRPMeasurementResult_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF + SEQUENCE { + rSRPCellID ECGI, + rSRPMeasured INTEGER (0..97, ...), + iE-Extensions ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMeasurementResult_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct rSRPCellID_t : ECGI + { + static constexpr const char* name() {return "rSRPCellID_t";} + using parent_t = ECGI; + + }; + rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;} + rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;} + struct rSRPMeasured_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rSRPMeasured_t";} + using parent_t = asn::integer<>; + + }; + + rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;} + rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + void clear() + { + rSRPCellID.clear(); + rSRPMeasured.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPCellID_t rSRPCellID; + rSRPMeasured_t rSRPMeasured; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMeasurementResult : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMeasurementResult";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional}, + ... +} +*/ + +struct RSRPMRList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(id_UEID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UEID& select_id_UEID() { return set(1); } + UEID const* get_id_UEID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + rSRPMeasurementResult RSRPMeasurementResult, + iE-Extensions ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMRList_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMRList_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct rSRPMeasurementResult_t : RSRPMeasurementResult + { + static constexpr const char* name() {return "rSRPMeasurementResult_t";} + using parent_t = RSRPMeasurementResult; + + }; + rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;} + rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + void clear() + { + rSRPMeasurementResult.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPMeasurementResult_t rSRPMeasurementResult; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMRList : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMRList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct UL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-DL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION DL-scheduling-PDCCH-CCE-usage PRESENCE optional}| + + {ID id-UL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION UL-scheduling-PDCCH-CCE-usage PRESENCE optional}, + ... +} +*/ + +struct RadioResourceStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; } + else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DL_scheduling_PDCCH_CCE_usage);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set(1); } + DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get(1); } + UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set(2); } + UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DL_scheduling_PDCCH_CCE_usage()); return true; + case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)]; + char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RadioResourceStatus : asn::sequence<7, 0, true, 1> +{ + static constexpr const char* name() {return "RadioResourceStatus";} + using parent_t = asn::sequence<7, 0, true, 1>; + struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_GBR_PRB_usage_t";} + using parent_t = DL_GBR_PRB_usage; + + }; + dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;} + dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;} + struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_GBR_PRB_usage_t";} + using parent_t = UL_GBR_PRB_usage; + + }; + uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;} + uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;} + struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";} + using parent_t = DL_non_GBR_PRB_usage; + + }; + dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;} + dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;} + struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";} + using parent_t = UL_non_GBR_PRB_usage; + + }; + uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;} + uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;} + struct dL_Total_PRB_usage_t : DL_Total_PRB_usage + { + static constexpr const char* name() {return "dL_Total_PRB_usage_t";} + using parent_t = DL_Total_PRB_usage; + + }; + dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;} + dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;} + struct uL_Total_PRB_usage_t : UL_Total_PRB_usage + { + static constexpr const char* name() {return "uL_Total_PRB_usage_t";} + using parent_t = UL_Total_PRB_usage; + + }; + uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;} + uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + void clear() + { + dL_GBR_PRB_usage.clear(); + uL_GBR_PRB_usage.clear(); + dL_non_GBR_PRB_usage.clear(); + uL_non_GBR_PRB_usage.clear(); + dL_Total_PRB_usage.clear(); + uL_Total_PRB_usage.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GBR_PRB_usage_t dL_GBR_PRB_usage; + uL_GBR_PRB_usage_t uL_GBR_PRB_usage; + dL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + uL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + dL_Total_PRB_usage_t dL_Total_PRB_usage; + uL_Total_PRB_usage_t uL_Total_PRB_usage; + iE_Extensions_t iE_Extensions; + +}; +/* +ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) +*/ + +struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) +*/ + +struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) +*/ + +struct ReceiveStatusofULPDCPSDUs : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";} + using parent_t = asn::bstring<>; + +}; + +/* +Registration-Request ::= ENUMERATED { + start, + stop, + ..., + partial-stop, + add +} +*/ + +struct Registration_Request : asn::enumerated<4, 2, true> +{ + static constexpr const char* name() {return "Registration-Request";} + using parent_t = asn::enumerated<4, 2, true>; + typedef enum { + start + ,stop + ,partial_stop + ,add + } index_t; + +}; + +/* +RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-enhancedRNTP CRITICALITY ignore EXTENSION EnhancedRNTP PRESENCE optional }, + ... +} +*/ + +struct RelativeNarrowbandTxPower_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(id_enhancedRNTP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_enhancedRNTP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_enhancedRNTP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EnhancedRNTP& select_id_enhancedRNTP() { return set(1); } + EnhancedRNTP const* get_id_enhancedRNTP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_enhancedRNTP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EnhancedRNTP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RelativeNarrowbandTxPower ::= SEQUENCE { + + rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), + rNTP-Threshold RNTP-Threshold, + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + p-B INTEGER (0..3,...), + pDCCH-InterferenceImpact INTEGER (0..4,...), + iE-Extensions ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "RelativeNarrowbandTxPower";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct rNTP_PerPRB_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rNTP_PerPRB_t";} + using parent_t = asn::bstring<>; + + }; + + rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;} + rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;} + struct rNTP_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;} + rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct p_B_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "p_B_t";} + using parent_t = asn::integer<>; + + }; + + p_B_t& ref_p_B() {return p_B;} + p_B_t const& ref_p_B() const {return p_B;} + struct pDCCH_InterferenceImpact_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";} + using parent_t = asn::integer<>; + + }; + + pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;} + pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + void clear() + { + rNTP_PerPRB.clear(); + rNTP_Threshold.clear(); + numberOfCellSpecificAntennaPorts.clear(); + p_B.clear(); + pDCCH_InterferenceImpact.clear(); + iE_Extensions.clear(); + + }; + private: + rNTP_PerPRB_t rNTP_PerPRB; + rNTP_Threshold_t rNTP_Threshold; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + p_B_t p_B; + pDCCH_InterferenceImpact_t pDCCH_InterferenceImpact; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportCharacteristics ::= BIT STRING (SIZE (32)) +*/ + +struct ReportCharacteristics : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReportCharacteristics";} + using parent_t = asn::bstring<>; + +}; + +/* +ReportingPeriodicityCSIR ::= ENUMERATED { + ms5, + ms10, + ms20, + ms40, + ms80, +... +} +*/ + +struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityCSIR";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms5 + ,ms10 + ,ms20 + ,ms40 + ,ms80 + } index_t; + +}; + +/* +ReportingPeriodicityRSRPMR ::= ENUMERATED { + one-hundred-20-ms, + two-hundred-40-ms, + four-hundred-80-ms, + six-hundred-40-ms, +... +} +*/ + +struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_hundred_20_ms + ,two_hundred_40_ms + ,four_hundred_80_ms + ,six_hundred_40_ms + } index_t; + +}; + +/* +ResumeID ::= CHOICE { + non-truncated BIT STRING(SIZE(40)), + truncated BIT STRING(SIZE(24)), + ... +} +*/ + +struct ResumeID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResumeID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResumeID() {clear();} + struct non_truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "non_truncated_t";} + using parent_t = asn::bstring<>; + + }; + + struct truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "truncated_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as();} return nullptr; } + truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(non_truncated_t)]; + char dummy2[sizeof(truncated_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct S1TNLLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +S1TNLLoadIndicator ::= SEQUENCE { + dLS1TNLLoadIndicator LoadIndicator, + uLS1TNLLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "S1TNLLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;} + dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;} + struct uLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;} + uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLS1TNLLoadIndicator.clear(); + uLS1TNLLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLS1TNLLoadIndicator_t dLS1TNLLoadIndicator; + uLS1TNLLoadIndicator_t uLS1TNLLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...} +*/ + +struct SCGChangeIndication : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SCGChangeIndication";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + pDCPCountWrapAround + ,pSCellChange + ,other + } index_t; + +}; + +/* +SCGConfigurationQuery ::= ENUMERATED {true,...} +*/ + +struct SCGConfigurationQuery : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SCGConfigurationQuery";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SGNB-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-eNB-HO, + intra-eNB-HO, + ... +} +*/ + +struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + sn_change + ,inter_eNB_HO + ,intra_eNB_HO + } index_t; + +}; + +/* +SIPTOBearerDeactivationIndication ::= ENUMERATED { + true, + ... +} +*/ + +struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SRBType ::= ENUMERATED {srb1, srb2, ...} +*/ + +struct SRBType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SRBType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + srb1 + ,srb2 + } index_t; + +}; + +/* +SRVCCOperationPossible ::= ENUMERATED { + possible, + ... +} +*/ + +struct SRVCCOperationPossible : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SRVCCOperationPossible";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + possible + } index_t; + +}; + +/* +ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ScheduledCommunicationTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ScheduledCommunicationTime";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct dayofWeek_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dayofWeek_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;} + dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;} + struct timeofDayStart_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayStart_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;} + timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;} + struct timeofDayEnd_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayEnd_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;} + timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + void clear() + { + dayofWeek.clear(); + timeofDayStart.clear(); + timeofDayEnd.clear(); + iE_Extensions.clear(); + + }; + private: + dayofWeek_t dayofWeek; + timeofDayStart_t timeofDayStart; + timeofDayEnd_t timeofDayEnd; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SeNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SeNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SeNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SeNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SeNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SecondaryRATUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReport-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + secondaryRATType ENUMERATED {nr, ...}, + e-RABUsageReportList E-RABUsageReportList, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SecondaryRATUsageReport-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct secondaryRATType_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "secondaryRATType_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nr + } index_t; + + }; + + secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;} + secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;} + struct e_RABUsageReportList_t : E_RABUsageReportList + { + static constexpr const char* name() {return "e_RABUsageReportList_t";} + using parent_t = E_RABUsageReportList; + + }; + e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;} + e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + secondaryRATType.clear(); + e_RABUsageReportList.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + secondaryRATType_t secondaryRATType; + e_RABUsageReportList_t e_RABUsageReportList; + iE_Extensions_t iE_Extensions; + +}; +/* +SecondaryRATUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-SecondaryRATUsageReport-Item CRITICALITY reject TYPE SecondaryRATUsageReport-Item PRESENCE mandatory}, + ... +} +*/ + +struct SecondaryRATUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SecondaryRATUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set(1); } + SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SecondaryRATUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}} +*/ + +struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct SecondaryRATUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCell_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional}| + { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional}| + { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional}| + { ID id-CSG-Id CRITICALITY ignore EXTENSION CSG-Id PRESENCE optional}| + { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION MBMS-Service-Area-Identity-List PRESENCE optional}| + { ID id-MultibandInfoList CRITICALITY ignore EXTENSION MultibandInfoList PRESENCE optional}| + { ID id-FreqBandIndicatorPriority CRITICALITY ignore EXTENSION FreqBandIndicatorPriority PRESENCE optional}| + { ID id-BandwidthReducedSI CRITICALITY ignore EXTENSION BandwidthReducedSI PRESENCE optional}| + { ID id-ProtectedEUTRAResourceIndication CRITICALITY ignore EXTENSION ProtectedEUTRAResourceIndication PRESENCE optional}, + ... +} +*/ + +struct ServedCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;} + void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;} + void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;} + void select_id_CSG_Id() { set(id_CSG_Id); type=4;} + void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;} + void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;} + void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;} + void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Number_of_Antennaports)) { type = 1; return true; } + else if(equal(id_PRACH_Configuration)) { type = 2; return true; } + else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; } + else if(equal(id_CSG_Id)) { type = 4; return true; } + else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; } + else if(equal(id_MultibandInfoList)) { type = 6; return true; } + else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; } + else if(equal(id_BandwidthReducedSI)) { type = 8; return true; } + else if(equal(id_ProtectedEUTRAResourceIndication)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Number_of_Antennaports);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(ignore); type=1;} + void select_id_PRACH_Configuration() { set(ignore); type=2;} + void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;} + void select_id_CSG_Id() { set(ignore); type=4;} + void select_id_MBMS_Service_Area_List() { set(ignore); type=5;} + void select_id_MultibandInfoList() { set(ignore); type=6;} + void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;} + void select_id_BandwidthReducedSI() { set(ignore); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Number_of_Antennaports& select_id_Number_of_Antennaports() { return set(1); } + Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get(1); } + PRACH_Configuration& select_id_PRACH_Configuration() { return set(2); } + PRACH_Configuration const* get_id_PRACH_Configuration() const { return get(2); } + MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set(3); } + MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get(3); } + CSG_Id& select_id_CSG_Id() { return set(4); } + CSG_Id const* get_id_CSG_Id() const { return get(4); } + MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set(5); } + MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get(5); } + MultibandInfoList& select_id_MultibandInfoList() { return set(6); } + MultibandInfoList const* get_id_MultibandInfoList() const { return get(6); } + FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set(7); } + FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get(7); } + BandwidthReducedSI& select_id_BandwidthReducedSI() { return set(8); } + BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get(8); } + ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set(9); } + ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Number_of_Antennaports()); return true; + case 2: v(select_id_PRACH_Configuration()); return true; + case 3: v(select_id_MBSFN_Subframe_Info()); return true; + case 4: v(select_id_CSG_Id()); return true; + case 5: v(select_id_MBMS_Service_Area_List()); return true; + case 6: v(select_id_MultibandInfoList()); return true; + case 7: v(select_id_FreqBandIndicatorPriority()); return true; + case 8: v(select_id_BandwidthReducedSI()); return true; + case 9: v(select_id_ProtectedEUTRAResourceIndication()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BandwidthReducedSI)]; + char dummy2[sizeof(CSG_Id)]; + char dummy3[sizeof(FreqBandIndicatorPriority)]; + char dummy4[sizeof(MBMS_Service_Area_Identity_List)]; + char dummy5[sizeof(MBSFN_Subframe_Infolist)]; + char dummy6[sizeof(MultibandInfoList)]; + char dummy7[sizeof(Number_of_Antennaports)]; + char dummy8[sizeof(PRACH_Configuration)]; + char dummy9[sizeof(ProtectedEUTRAResourceIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(optional); type=1;} + void select_id_PRACH_Configuration() { set(optional); type=2;} + void select_id_MBSFN_Subframe_Info() { set(optional); type=3;} + void select_id_CSG_Id() { set(optional); type=4;} + void select_id_MBMS_Service_Area_List() { set(optional); type=5;} + void select_id_MultibandInfoList() { set(optional); type=6;} + void select_id_FreqBandIndicatorPriority() { set(optional); type=7;} + void select_id_BandwidthReducedSI() { set(optional); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information ::= SEQUENCE { + pCI PCI, + cellId ECGI, + tAC TAC, + broadcastPLMNs BroadcastPLMNs-Item, + eUTRA-Mode-Info EUTRA-Mode-Info, + iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCell_Information : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCell-Information";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct cellId_t : ECGI + { + static constexpr const char* name() {return "cellId_t";} + using parent_t = ECGI; + + }; + cellId_t& ref_cellId() {return cellId;} + cellId_t const& ref_cellId() const {return cellId;} + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct eUTRA_Mode_Info_t : EUTRA_Mode_Info + { + static constexpr const char* name() {return "eUTRA_Mode_Info_t";} + using parent_t = EUTRA_Mode_Info; + + }; + eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;} + eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + void clear() + { + pCI.clear(); + cellId.clear(); + tAC.clear(); + broadcastPLMNs.clear(); + eUTRA_Mode_Info.clear(); + iE_Extensions.clear(); + + }; + private: + pCI_t pCI; + cellId_t cellId; + tAC_t tAC; + broadcastPLMNs_t broadcastPLMNs; + eUTRA_Mode_Info_t eUTRA_Mode_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCells_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCells_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +struct ServedCells : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCells";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServiceType ::= ENUMERATED{ + qMC-for-streaming-service, + qMC-for-MTSI-service, + ... +} +*/ + +struct ServiceType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ServiceType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + qMC_for_streaming_service + ,qMC_for_MTSI_service + } index_t; + +}; + +/* +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) +*/ + +struct SgNB_UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNB-UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +SgNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ECGI CRITICALITY ignore EXTENSION ECGI PRESENCE optional}| + { ID id-SgNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(id_ECGI); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ECGI)) { type = 1; return true; } + else if(equal(id_SgNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ECGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(ignore); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ECGI() { return set(1); } + ECGI const* get_id_ECGI() const { return get(1); } + SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set(2); } + SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ECGI()); return true; + case 2: v(select_id_SgNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(SgNBCoordinationAssistanceInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(optional); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBResourceCoordinationInformation ::= SEQUENCE { + nR-CGI NRCGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "SgNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nR_CGI_t : NRCGI + { + static constexpr const char* name() {return "nR_CGI_t";} + using parent_t = NRCGI; + + }; + nR_CGI_t& ref_nR_CGI() {return nR_CGI;} + nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + nR_CGI.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nR_CGI_t nR_CGI; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SgNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SgNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SgNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SgNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +ShortMAC-I ::= BIT STRING (SIZE(16)) +*/ + +struct ShortMAC_I : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ShortMAC-I";} + using parent_t = asn::bstring<>; + +}; + +/* +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) +*/ + +struct SpectrumSharingGroupID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SpectrumSharingGroupID";} + using parent_t = asn::integer<>; + +}; + +/* +SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SplitSRB_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SplitSRB ::= SEQUENCE { + rrcContainer RRCContainer OPTIONAL, + srbType SRBType, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SplitSRB : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "SplitSRB";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct rrcContainer_t : RRCContainer + { + static constexpr const char* name() {return "rrcContainer_t";} + using parent_t = RRCContainer; + static constexpr bool optional = true; + + }; + rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;} + rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;} + struct srbType_t : SRBType + { + static constexpr const char* name() {return "srbType_t";} + using parent_t = SRBType; + + }; + srbType_t& ref_srbType() {return srbType;} + srbType_t const& ref_srbType() const {return srbType;} + struct deliveryStatus_t : DeliveryStatus + { + static constexpr const char* name() {return "deliveryStatus_t";} + using parent_t = DeliveryStatus; + static constexpr bool optional = true; + + }; + deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;} + deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + void clear() + { + rrcContainer.clear(); + srbType.clear(); + deliveryStatus.clear(); + iE_Extensions.clear(); + + }; + private: + rrcContainer_t rrcContainer; + srbType_t srbType; + deliveryStatus_t deliveryStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...} +*/ + +struct SplitSRBs : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SplitSRBs";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + srb1 + ,srb2 + ,srb1and2 + } index_t; + +}; + +/* +SubscriberProfileIDforRFP ::= INTEGER (1..256) +*/ + +struct SubscriberProfileIDforRFP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SubscriberProfileIDforRFP";} + using parent_t = asn::integer<>; + +}; + +/* +Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ...} OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "periodicCommunicationIndicator_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + periodically + ,ondemand + } index_t; + + }; + + periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;} + periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;} + struct periodicTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "periodicTime_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;} + periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;} + struct scheduledCommunicationTime_t : ScheduledCommunicationTime + { + static constexpr const char* name() {return "scheduledCommunicationTime_t";} + using parent_t = ScheduledCommunicationTime; + static constexpr bool optional = true; + + }; + scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;} + scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;} + struct stationaryIndication_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "stationaryIndication_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + stationary + ,mobile + } index_t; + + }; + + stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;} + stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;} + struct trafficProfile_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "trafficProfile_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + single_packet + ,dual_packets + ,multiple_packets + } index_t; + + }; + + trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;} + trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;} + struct batteryIndication_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "batteryIndication_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + battery_powered + ,battery_powered_not_rechargeable_or_replaceable + ,not_battery_powered + } index_t; + + }; + + batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;} + batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + void clear() + { + periodicCommunicationIndicator.clear(); + periodicTime.clear(); + scheduledCommunicationTime.clear(); + stationaryIndication.clear(); + trafficProfile.clear(); + batteryIndication.clear(); + iE_Extensions.clear(); + + }; + private: + periodicCommunicationIndicator_t periodicCommunicationIndicator; + periodicTime_t periodicTime; + scheduledCommunicationTime_t scheduledCommunicationTime; + stationaryIndication_t stationaryIndication; + trafficProfile_t trafficProfile; + batteryIndication_t batteryIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] +*/ + +struct TargetCellInUTRAN : asn::ostring<> +{ + static constexpr const char* name() {return "TargetCellInUTRAN";} + using parent_t = asn::ostring<>; + +}; + +/* +TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING +*/ + +struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<> +{ + static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} +*/ + +struct TimeToWait : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TimeToWait";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + v1s + ,v2s + ,v5s + ,v10s + ,v20s + ,v60s + } index_t; + +}; + +/* +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} +*/ + +struct TraceDepth : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TraceDepth";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + minimum + ,medium + ,maximum + ,minimumWithoutVendorSpecificExtension + ,mediumWithoutVendorSpecificExtension + ,maximumWithoutVendorSpecificExtension + } index_t; + +}; + +/* +TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TraceCollectionEntityIPAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TraceCollectionEntityIPAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-serviceType CRITICALITY ignore EXTENSION ServiceType PRESENCE optional}, + ... +} +*/ + +struct UEAppLayerMeasConfig_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(id_serviceType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_serviceType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_serviceType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ServiceType& select_id_serviceType() { return set(1); } + ServiceType const* get_id_serviceType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_serviceType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServiceType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAppLayerMeasConfig ::= SEQUENCE { + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..1000)), + areaScopeOfQMC AreaScopeOfQMC, + iE-Extensions ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAppLayerMeasConfig";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct containerForAppLayerMeasConfig_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";} + using parent_t = asn::ostring<>; + + }; + + containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;} + containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;} + struct areaScopeOfQMC_t : AreaScopeOfQMC + { + static constexpr const char* name() {return "areaScopeOfQMC_t";} + using parent_t = AreaScopeOfQMC; + + }; + areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;} + areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + void clear() + { + containerForAppLayerMeasConfig.clear(); + areaScopeOfQMC.clear(); + iE_Extensions.clear(); + + }; + private: + containerForAppLayerMeasConfig_t containerForAppLayerMeasConfig; + areaScopeOfQMC_t areaScopeOfQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}| + { ID id-UEAppLayerMeasConfig CRITICALITY ignore EXTENSION UEAppLayerMeasConfig PRESENCE optional}, + ... +} +*/ + +struct TraceActivation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(id_MDTConfiguration); type=1;} + void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MDTConfiguration)) { type = 1; return true; } + else if(equal(id_UEAppLayerMeasConfig)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MDTConfiguration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(ignore); type=1;} + void select_id_UEAppLayerMeasConfig() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + MDT_Configuration& select_id_MDTConfiguration() { return set(1); } + MDT_Configuration const* get_id_MDTConfiguration() const { return get(1); } + UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set(2); } + UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MDTConfiguration()); return true; + case 2: v(select_id_UEAppLayerMeasConfig()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDT_Configuration)]; + char dummy2[sizeof(UEAppLayerMeasConfig)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(optional); type=1;} + void select_id_UEAppLayerMeasConfig() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TraceActivation ::= SEQUENCE { + eUTRANTraceID EUTRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TraceActivation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TraceActivation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eUTRANTraceID_t : EUTRANTraceID + { + static constexpr const char* name() {return "eUTRANTraceID_t";} + using parent_t = EUTRANTraceID; + + }; + eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;} + eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;} + struct interfacesToTrace_t : InterfacesToTrace + { + static constexpr const char* name() {return "interfacesToTrace_t";} + using parent_t = InterfacesToTrace; + + }; + interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;} + interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;} + struct traceDepth_t : TraceDepth + { + static constexpr const char* name() {return "traceDepth_t";} + using parent_t = TraceDepth; + + }; + traceDepth_t& ref_traceDepth() {return traceDepth;} + traceDepth_t const& ref_traceDepth() const {return traceDepth;} + struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress + { + static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";} + using parent_t = TraceCollectionEntityIPAddress; + + }; + traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;} + traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + void clear() + { + eUTRANTraceID.clear(); + interfacesToTrace.clear(); + traceDepth.clear(); + traceCollectionEntityIPAddress.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRANTraceID_t eUTRANTraceID; + interfacesToTrace_t interfacesToTrace; + traceDepth_t traceDepth; + traceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + iE_Extensions_t iE_Extensions; + +}; +/* +Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Tunnel_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TunnelInformation ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + uDP-Port-Number Port-Number OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TunnelInformation : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "TunnelInformation";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct uDP_Port_Number_t : Port_Number + { + static constexpr const char* name() {return "uDP_Port_Number_t";} + using parent_t = Port_Number; + static constexpr bool optional = true; + + }; + uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;} + uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + uDP_Port_Number.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + uDP_Port_Number_t uDP_Port_Number; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextKeptIndicator ::= ENUMERATED { + true, + ... +} +*/ + +struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "UE-ContextKeptIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item +*/ + +struct UE_HistoryInformation_elm : LastVisitedCell_Item +{ + static constexpr const char* name() {return "UE_HistoryInformation_elm";} + using parent_t = LastVisitedCell_Item; + +}; +struct UE_HistoryInformation : asn::sequenceof +{ + static constexpr const char* name() {return "UE-HistoryInformation";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UE-HistoryInformationFromTheUE ::= OCTET STRING +*/ + +struct UE_HistoryInformationFromTheUE : asn::ostring<> +{ + static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container::= OCTET STRING +*/ + +struct UE_RLF_Report_Container : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING +*/ + +struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-S1AP-ID ::= INTEGER (0.. 4294967295) +*/ + +struct UE_S1AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-S1AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-X2AP-ID ::= INTEGER (0..4095) +*/ + +struct UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...) +*/ + +struct UE_X2AP_ID_Extension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID-Extension";} + using parent_t = asn::integer<>; + +}; + +/* +UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-extended-uEaggregateMaximumBitRateDownlink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-uEaggregateMaximumBitRateUplink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct UEAggregate_MaximumBitrate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; } + else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateDownlink);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set(1); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get(1); } + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set(2); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_uEaggregateMaximumBitRateDownlink()); return true; + case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAggregateMaximumBitRate ::= SEQUENCE { + uEaggregateMaximumBitRateDownlink BitRate, + uEaggregateMaximumBitRateUplink BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAggregateMaximumBitRate";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEaggregateMaximumBitRateDownlink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;} + uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;} + struct uEaggregateMaximumBitRateUplink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;} + uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + void clear() + { + uEaggregateMaximumBitRateDownlink.clear(); + uEaggregateMaximumBitRateUplink.clear(); + iE_Extensions.clear(); + + }; + private: + uEaggregateMaximumBitRateDownlink_t uEaggregateMaximumBitRateDownlink; + uEaggregateMaximumBitRateUplink_t uEaggregateMaximumBitRateUplink; + iE_Extensions_t iE_Extensions; + +}; +/* +UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UENRMeasurement_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UENRMeasurement ::= SEQUENCE { + uENRMeasurements RRCContainer, + iE-Extensions ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UENRMeasurement : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UENRMeasurement";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uENRMeasurements_t : RRCContainer + { + static constexpr const char* name() {return "uENRMeasurements_t";} + using parent_t = RRCContainer; + + }; + uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;} + uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + void clear() + { + uENRMeasurements.clear(); + iE_Extensions.clear(); + + }; + private: + uENRMeasurements_t uENRMeasurements; + iE_Extensions_t iE_Extensions; + +}; +/* +UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UESecurityCapabilities ::= SEQUENCE { + encryptionAlgorithms EncryptionAlgorithms, + integrityProtectionAlgorithms IntegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct UESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct encryptionAlgorithms_t : EncryptionAlgorithms + { + static constexpr const char* name() {return "encryptionAlgorithms_t";} + using parent_t = EncryptionAlgorithms; + + }; + encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;} + encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;} + struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms + { + static constexpr const char* name() {return "integrityProtectionAlgorithms_t";} + using parent_t = IntegrityProtectionAlgorithms; + + }; + integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;} + integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + encryptionAlgorithms.clear(); + integrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + encryptionAlgorithms_t encryptionAlgorithms; + integrityProtectionAlgorithms_t integrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +UESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uESidelinkAggregateMaximumBitRate_t : BitRate + { + static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";} + using parent_t = BitRate; + + }; + uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;} + uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + void clear() + { + uESidelinkAggregateMaximumBitRate.clear(); + iE_Extensions.clear(); + + }; + private: + uESidelinkAggregateMaximumBitRate_t uESidelinkAggregateMaximumBitRate; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UEsToBeResetList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEsToBeResetList-Item::= SEQUENCE { + meNB-ID UE-X2AP-ID, + meNB-ID-ext UE-X2AP-ID-Extension OPTIONAL, + sgNB-ID SgNB-UE-X2AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "UEsToBeResetList-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct meNB_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "meNB_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + meNB_ID_t& ref_meNB_ID() {return meNB_ID;} + meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;} + struct meNB_ID_ext_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "meNB_ID_ext_t";} + using parent_t = UE_X2AP_ID_Extension; + static constexpr bool optional = true; + + }; + meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;} + meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;} + struct sgNB_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + static constexpr bool optional = true; + + }; + sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;} + sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + void clear() + { + meNB_ID.clear(); + meNB_ID_ext.clear(); + sgNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + meNB_ID_t meNB_ID; + meNB_ID_ext_t meNB_ID_ext; + sgNB_ID_t sgNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item +*/ + +struct UEsToBeResetList_elm : UEsToBeResetList_Item +{ + static constexpr const char* name() {return "UEsToBeResetList_elm";} + using parent_t = UEsToBeResetList_Item; + +}; +struct UEsToBeResetList : asn::sequenceof +{ + static constexpr const char* name() {return "UEsToBeResetList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) +*/ + +struct UL_HighInterferenceIndication : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-HighInterferenceIndication";} + using parent_t = asn::bstring<>; + +}; + +/* +UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { + target-Cell-ID ECGI, + ul-interferenceindication UL-HighInterferenceIndication, + iE-Extensions ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct target_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "target_Cell_ID_t";} + using parent_t = ECGI; + + }; + target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;} + target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;} + struct ul_interferenceindication_t : UL_HighInterferenceIndication + { + static constexpr const char* name() {return "ul_interferenceindication_t";} + using parent_t = UL_HighInterferenceIndication; + + }; + ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;} + ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + void clear() + { + target_Cell_ID.clear(); + ul_interferenceindication.clear(); + iE_Extensions.clear(); + + }; + private: + target_Cell_ID_t target_Cell_ID; + ul_interferenceindication_t ul_interferenceindication; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item +*/ + +struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item +{ + static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";} + using parent_t = UL_HighInterferenceIndicationInfo_Item; + +}; +struct UL_HighInterferenceIndicationInfo : asn::sequenceof +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... } +*/ + +struct UL_UE_Configuration : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-UE-Configuration";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + no_data + ,shared + ,only + } index_t; + +}; + +/* +ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULConfiguration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULConfiguration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uL_PDCP_t : UL_UE_Configuration + { + static constexpr const char* name() {return "uL_PDCP_t";} + using parent_t = UL_UE_Configuration; + + }; + uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;} + uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_PDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_PDCP); + v(iE_Extensions); + + }; + void clear() + { + uL_PDCP.clear(); + iE_Extensions.clear(); + + }; + private: + uL_PDCP_t uL_PDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct VehicleUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "VehicleUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct V2XServicesAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +V2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "V2XServicesAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct vehicleUE_t : VehicleUE + { + static constexpr const char* name() {return "vehicleUE_t";} + using parent_t = VehicleUE; + static constexpr bool optional = true; + + }; + vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;} + vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;} + struct pedestrianUE_t : PedestrianUE + { + static constexpr const char* name() {return "pedestrianUE_t";} + using parent_t = PedestrianUE; + static constexpr bool optional = true; + + }; + pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;} + pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + void clear() + { + vehicleUE.clear(); + pedestrianUE.clear(); + iE_Extensions.clear(); + + }; + private: + vehicleUE_t vehicleUE; + pedestrianUE_t pedestrianUE; + iE_Extensions_t iE_Extensions; + +}; +/* +WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3)) +*/ + +struct WT_UE_XwAP_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WT-UE-XwAP-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +WTID-Type1 ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + shortWTID BIT STRING (SIZE(24)), + ... +} +*/ + +struct WTID_Type1 : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "WTID-Type1";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct shortWTID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "shortWTID_t";} + using parent_t = asn::bstring<>; + + }; + + shortWTID_t& ref_shortWTID() {return shortWTID;} + shortWTID_t const& ref_shortWTID() const {return shortWTID;} + template void decode(V& v) + { + v(pLMN_Identity); + v(shortWTID); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(shortWTID); + + }; + void clear() + { + pLMN_Identity.clear(); + shortWTID.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + shortWTID_t shortWTID; + +}; +/* +WTID-Long-Type2 ::= BIT STRING (SIZE(48)) +*/ + +struct WTID_Long_Type2 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WTID-Long-Type2";} + using parent_t = asn::bstring<>; + +}; + +/* +WTID ::= CHOICE { + wTID-Type1 WTID-Type1, + wTID-Type2 WTID-Long-Type2, + ... +} +*/ + +struct WTID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WTID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WTID() {clear();} + struct wTID_Type1_t : WTID_Type1 + { + static constexpr const char* name() {return "wTID_Type1_t";} + using parent_t = WTID_Type1; + + }; + struct wTID_Type2_t : WTID_Long_Type2 + { + static constexpr const char* name() {return "wTID_Type2_t";} + using parent_t = WTID_Long_Type2; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as();} return nullptr; } + wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(wTID_Type1_t)]; + char dummy2[sizeof(wTID_Type2_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +X2BenefitValue ::= INTEGER (1..8, ...) +*/ + +struct X2BenefitValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "X2BenefitValue";} + using parent_t = asn::integer<>; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp new file mode 100644 index 0000000..dd85f97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Contents.hpp @@ -0,0 +1,68476 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" +#include "X2AP-Containers.hpp" +#include "X2AP-Constants.hpp" + +/* +ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedCellList-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item +*/ + +struct ActivatedCellList_elm : ActivatedCellList_Item +{ + static constexpr const char* name() {return "ActivatedCellList_elm";} + using parent_t = ActivatedCellList_Item; + +}; +struct ActivatedCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ActivatedNRCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedNRCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedNRCellList-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedNRCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedNRCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedNRCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedNRCellList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ActivatedNRCellList-Item +*/ + +struct ActivatedNRCellList_elm : ActivatedNRCellList_Item +{ + static constexpr const char* name() {return "ActivatedNRCellList_elm";} + using parent_t = ActivatedNRCellList_Item; + +}; +struct ActivatedNRCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedNRCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct CellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, + ... +} +*/ + +struct CellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToActivate-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item +*/ + +struct ServedCellsToActivate_elm : ServedCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedCellsToActivate_elm";} + using parent_t = ServedCellsToActivate_Item; + +}; +struct ServedCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}, + ... +} +*/ + +struct CellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(id_ServedCellsToActivate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToActivate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToActivate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCellsToActivate& select_id_ServedCellsToActivate() { return set(1); } + ServedCellsToActivate const* get_id_ServedCellsToActivate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToActivate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, + ... +} +*/ + +struct CellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct CellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(id_ActivatedCellList); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedCellList)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedCellList& select_id_ActivatedCellList() { return set(1); } + ActivatedCellList const* get_id_ActivatedCellList() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedCellList()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedCellList)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, + ... +} +*/ + +struct CellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +Limited-list-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Limited_list_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Limited-list ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {Limited-list-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Limited_list_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "Limited_list_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +struct Limited_list : asn::sequenceof +{ + static constexpr const char* name() {return "Limited-list";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellAssistanceInformation ::= CHOICE { + limited-list Limited-list, + full-list ENUMERATED {allServedNRcells, ...}, + ... +} +*/ + +struct CellAssistanceInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "CellAssistanceInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~CellAssistanceInformation() {clear();} + struct limited_list_t : Limited_list + { + static constexpr const char* name() {return "limited_list_t";} + using parent_t = Limited_list; + + }; + struct full_list_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "full_list_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allServedNRcells + } index_t; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + limited_list_t& select_limited_list() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + limited_list_t const* get_limited_list() const { if(get_index() == 1) { return &var.as();} return nullptr; } + full_list_t& select_full_list() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + full_list_t const* get_full_list() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(limited_list_t)]; + char dummy2[sizeof(full_list_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ABSInformation CRITICALITY ignore EXTENSION ABSInformation PRESENCE optional }| +{ ID id-InvokeIndication CRITICALITY ignore EXTENSION InvokeIndication PRESENCE optional }| +{ ID id-IntendedULDLConfiguration CRITICALITY ignore EXTENSION SubframeAssignment PRESENCE optional }| +{ ID id-ExtendedULInterferenceOverloadInfo CRITICALITY ignore EXTENSION ExtendedULInterferenceOverloadInfo PRESENCE optional }| +{ ID id-CoMPInformation CRITICALITY ignore EXTENSION CoMPInformation PRESENCE optional }| +{ ID id-DynamicDLTransmissionInformation CRITICALITY ignore EXTENSION DynamicDLTransmissionInformation PRESENCE optional }, + ... +} +*/ + +struct CellInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(id_ABSInformation); type=1;} + void select_id_InvokeIndication() { set(id_InvokeIndication); type=2;} + void select_id_IntendedULDLConfiguration() { set(id_IntendedULDLConfiguration); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(id_ExtendedULInterferenceOverloadInfo); type=4;} + void select_id_CoMPInformation() { set(id_CoMPInformation); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(id_DynamicDLTransmissionInformation); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ABSInformation)) { type = 1; return true; } + else if(equal(id_InvokeIndication)) { type = 2; return true; } + else if(equal(id_IntendedULDLConfiguration)) { type = 3; return true; } + else if(equal(id_ExtendedULInterferenceOverloadInfo)) { type = 4; return true; } + else if(equal(id_CoMPInformation)) { type = 5; return true; } + else if(equal(id_DynamicDLTransmissionInformation)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ABSInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_InvokeIndication);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_IntendedULDLConfiguration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ExtendedULInterferenceOverloadInfo);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CoMPInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DynamicDLTransmissionInformation);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(ignore); type=1;} + void select_id_InvokeIndication() { set(ignore); type=2;} + void select_id_IntendedULDLConfiguration() { set(ignore); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(ignore); type=4;} + void select_id_CoMPInformation() { set(ignore); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ABSInformation& select_id_ABSInformation() { return set(1); } + ABSInformation const* get_id_ABSInformation() const { return get(1); } + InvokeIndication& select_id_InvokeIndication() { return set(2); } + InvokeIndication const* get_id_InvokeIndication() const { return get(2); } + SubframeAssignment& select_id_IntendedULDLConfiguration() { return set(3); } + SubframeAssignment const* get_id_IntendedULDLConfiguration() const { return get(3); } + ExtendedULInterferenceOverloadInfo& select_id_ExtendedULInterferenceOverloadInfo() { return set(4); } + ExtendedULInterferenceOverloadInfo const* get_id_ExtendedULInterferenceOverloadInfo() const { return get(4); } + CoMPInformation& select_id_CoMPInformation() { return set(5); } + CoMPInformation const* get_id_CoMPInformation() const { return get(5); } + DynamicDLTransmissionInformation& select_id_DynamicDLTransmissionInformation() { return set(6); } + DynamicDLTransmissionInformation const* get_id_DynamicDLTransmissionInformation() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ABSInformation()); return true; + case 2: v(select_id_InvokeIndication()); return true; + case 3: v(select_id_IntendedULDLConfiguration()); return true; + case 4: v(select_id_ExtendedULInterferenceOverloadInfo()); return true; + case 5: v(select_id_CoMPInformation()); return true; + case 6: v(select_id_DynamicDLTransmissionInformation()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABSInformation)]; + char dummy2[sizeof(CoMPInformation)]; + char dummy3[sizeof(DynamicDLTransmissionInformation)]; + char dummy4[sizeof(ExtendedULInterferenceOverloadInfo)]; + char dummy5[sizeof(InvokeIndication)]; + char dummy6[sizeof(SubframeAssignment)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(optional); type=1;} + void select_id_InvokeIndication() { set(optional); type=2;} + void select_id_IntendedULDLConfiguration() { set(optional); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(optional); type=4;} + void select_id_CoMPInformation() { set(optional); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-Item ::= SEQUENCE { + cell-ID ECGI, + ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, + ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, + relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellInformation_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellInformation-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + static constexpr bool optional = true; + + }; + ul_InterferenceOverloadIndication_t& set_ul_InterferenceOverloadIndication() { ul_InterferenceOverloadIndication.setpresent(true); return ul_InterferenceOverloadIndication;} + ul_InterferenceOverloadIndication_t const* get_ul_InterferenceOverloadIndication() const {return ul_InterferenceOverloadIndication.is_valid() ? &ul_InterferenceOverloadIndication : nullptr;} + struct ul_HighInterferenceIndicationInfo_t : UL_HighInterferenceIndicationInfo + { + static constexpr const char* name() {return "ul_HighInterferenceIndicationInfo_t";} + using parent_t = UL_HighInterferenceIndicationInfo; + static constexpr bool optional = true; + + }; + ul_HighInterferenceIndicationInfo_t& set_ul_HighInterferenceIndicationInfo() { ul_HighInterferenceIndicationInfo.setpresent(true); return ul_HighInterferenceIndicationInfo;} + ul_HighInterferenceIndicationInfo_t const* get_ul_HighInterferenceIndicationInfo() const {return ul_HighInterferenceIndicationInfo.is_valid() ? &ul_HighInterferenceIndicationInfo : nullptr;} + struct relativeNarrowbandTxPower_t : RelativeNarrowbandTxPower + { + static constexpr const char* name() {return "relativeNarrowbandTxPower_t";} + using parent_t = RelativeNarrowbandTxPower; + static constexpr bool optional = true; + + }; + relativeNarrowbandTxPower_t& set_relativeNarrowbandTxPower() { relativeNarrowbandTxPower.setpresent(true); return relativeNarrowbandTxPower;} + relativeNarrowbandTxPower_t const* get_relativeNarrowbandTxPower() const {return relativeNarrowbandTxPower.is_valid() ? &relativeNarrowbandTxPower : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + ul_InterferenceOverloadIndication.clear(); + ul_HighInterferenceIndicationInfo.clear(); + relativeNarrowbandTxPower.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + ul_InterferenceOverloadIndication_t ul_InterferenceOverloadIndication; + ul_HighInterferenceIndicationInfo_t ul_HighInterferenceIndicationInfo; + relativeNarrowbandTxPower_t relativeNarrowbandTxPower; + iE_Extensions_t iE_Extensions; + +}; +/* +CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } +} +*/ + +struct CellInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(id_CellInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_Item& select_id_CellInformation_Item() { return set(1); } + CellInformation_Item const* get_id_CellInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } +*/ + +struct CellInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional}| + { ID id-ABS-Status CRITICALITY ignore EXTENSION ABS-Status PRESENCE optional}| + { ID id-RSRPMRList CRITICALITY ignore EXTENSION RSRPMRList PRESENCE optional}| + { ID id-CSIReportList CRITICALITY ignore EXTENSION CSIReportList PRESENCE optional}| + { ID id-CellReportingIndicator CRITICALITY ignore EXTENSION CellReportingIndicator PRESENCE optional}, + ... +} +*/ + +struct CellMeasurementResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(id_CompositeAvailableCapacityGroup); type=1;} + void select_id_ABS_Status() { set(id_ABS_Status); type=2;} + void select_id_RSRPMRList() { set(id_RSRPMRList); type=3;} + void select_id_CSIReportList() { set(id_CSIReportList); type=4;} + void select_id_CellReportingIndicator() { set(id_CellReportingIndicator); type=5;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompositeAvailableCapacityGroup)) { type = 1; return true; } + else if(equal(id_ABS_Status)) { type = 2; return true; } + else if(equal(id_RSRPMRList)) { type = 3; return true; } + else if(equal(id_CSIReportList)) { type = 4; return true; } + else if(equal(id_CellReportingIndicator)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompositeAvailableCapacityGroup);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ABS_Status);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RSRPMRList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSIReportList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellReportingIndicator);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(ignore); type=1;} + void select_id_ABS_Status() { set(ignore); type=2;} + void select_id_RSRPMRList() { set(ignore); type=3;} + void select_id_CSIReportList() { set(ignore); type=4;} + void select_id_CellReportingIndicator() { set(ignore); type=5;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + CompositeAvailableCapacityGroup& select_id_CompositeAvailableCapacityGroup() { return set(1); } + CompositeAvailableCapacityGroup const* get_id_CompositeAvailableCapacityGroup() const { return get(1); } + ABS_Status& select_id_ABS_Status() { return set(2); } + ABS_Status const* get_id_ABS_Status() const { return get(2); } + RSRPMRList& select_id_RSRPMRList() { return set(3); } + RSRPMRList const* get_id_RSRPMRList() const { return get(3); } + CSIReportList& select_id_CSIReportList() { return set(4); } + CSIReportList const* get_id_CSIReportList() const { return get(4); } + CellReportingIndicator& select_id_CellReportingIndicator() { return set(5); } + CellReportingIndicator const* get_id_CellReportingIndicator() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompositeAvailableCapacityGroup()); return true; + case 2: v(select_id_ABS_Status()); return true; + case 3: v(select_id_RSRPMRList()); return true; + case 4: v(select_id_CSIReportList()); return true; + case 5: v(select_id_CellReportingIndicator()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABS_Status)]; + char dummy2[sizeof(CSIReportList)]; + char dummy3[sizeof(CellReportingIndicator)]; + char dummy4[sizeof(CompositeAvailableCapacityGroup)]; + char dummy5[sizeof(RSRPMRList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(optional); type=1;} + void select_id_ABS_Status() { set(optional); type=2;} + void select_id_RSRPMRList() { set(optional); type=3;} + void select_id_CSIReportList() { set(optional); type=4;} + void select_id_CellReportingIndicator() { set(optional); type=5;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-Item ::= SEQUENCE { + cell-ID ECGI, + hWLoadIndicator HWLoadIndicator OPTIONAL, + s1TNLLoadIndicator S1TNLLoadIndicator OPTIONAL, + radioResourceStatus RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellMeasurementResult_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellMeasurementResult-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct hWLoadIndicator_t : HWLoadIndicator + { + static constexpr const char* name() {return "hWLoadIndicator_t";} + using parent_t = HWLoadIndicator; + static constexpr bool optional = true; + + }; + hWLoadIndicator_t& set_hWLoadIndicator() { hWLoadIndicator.setpresent(true); return hWLoadIndicator;} + hWLoadIndicator_t const* get_hWLoadIndicator() const {return hWLoadIndicator.is_valid() ? &hWLoadIndicator : nullptr;} + struct s1TNLLoadIndicator_t : S1TNLLoadIndicator + { + static constexpr const char* name() {return "s1TNLLoadIndicator_t";} + using parent_t = S1TNLLoadIndicator; + static constexpr bool optional = true; + + }; + s1TNLLoadIndicator_t& set_s1TNLLoadIndicator() { s1TNLLoadIndicator.setpresent(true); return s1TNLLoadIndicator;} + s1TNLLoadIndicator_t const* get_s1TNLLoadIndicator() const {return s1TNLLoadIndicator.is_valid() ? &s1TNLLoadIndicator : nullptr;} + struct radioResourceStatus_t : RadioResourceStatus + { + static constexpr const char* name() {return "radioResourceStatus_t";} + using parent_t = RadioResourceStatus; + static constexpr bool optional = true; + + }; + radioResourceStatus_t& set_radioResourceStatus() { radioResourceStatus.setpresent(true); return radioResourceStatus;} + radioResourceStatus_t const* get_radioResourceStatus() const {return radioResourceStatus.is_valid() ? &radioResourceStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + hWLoadIndicator.clear(); + s1TNLLoadIndicator.clear(); + radioResourceStatus.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + hWLoadIndicator_t hWLoadIndicator; + s1TNLLoadIndicator_t s1TNLLoadIndicator; + radioResourceStatus_t radioResourceStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory} +} +*/ + +struct CellMeasurementResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(id_CellMeasurementResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellMeasurementResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellMeasurementResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellMeasurementResult_Item& select_id_CellMeasurementResult_Item() { return set(1); } + CellMeasurementResult_Item const* get_id_CellMeasurementResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellMeasurementResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } +*/ + +struct CellMeasurementResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellMeasurementResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellMeasurementResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellMeasurementResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellToReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-Item ::= SEQUENCE { + cell-ID ECGI, + iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellToReport_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellToReport-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory} +} +*/ + +struct CellToReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(id_CellToReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellToReport_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellToReport_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellToReport_Item& select_id_CellToReport_Item() { return set(1); } + CellToReport_Item const* get_id_CellToReport_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellToReport_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } +*/ + +struct CellToReport_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellToReport_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellToReport_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellToReport-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementFailureCause_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-Item ::= SEQUENCE { + measurementFailedReportCharacteristics ReportCharacteristics, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementFailureCause_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "MeasurementFailureCause-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct measurementFailedReportCharacteristics_t : ReportCharacteristics + { + static constexpr const char* name() {return "measurementFailedReportCharacteristics_t";} + using parent_t = ReportCharacteristics; + + }; + measurementFailedReportCharacteristics_t& ref_measurementFailedReportCharacteristics() {return measurementFailedReportCharacteristics;} + measurementFailedReportCharacteristics_t const& ref_measurementFailedReportCharacteristics() const {return measurementFailedReportCharacteristics;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + measurementFailedReportCharacteristics.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + measurementFailedReportCharacteristics_t measurementFailedReportCharacteristics; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE MeasurementFailureCause-Item PRESENCE mandatory} +} +*/ + +struct MeasurementFailureCause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(id_MeasurementFailureCause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementFailureCause_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementFailureCause_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementFailureCause_Item& select_id_MeasurementFailureCause_Item() { return set(1); } + MeasurementFailureCause_Item const* get_id_MeasurementFailureCause_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementFailureCause_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementFailureCause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..maxFailedMeasObjects)) OF ProtocolIE-Single-Container { {MeasurementFailureCause-ItemIEs} } +*/ + +struct MeasurementFailureCause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementFailureCause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementFailureCause_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementFailureCause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompleteFailureCauseInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List, + iE-Extensions ProtocolExtensionContainer { {CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompleteFailureCauseInformation_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + + }; + measurementFailureCause_List_t& ref_measurementFailureCause_List() {return measurementFailureCause_List;} + measurementFailureCause_List_t const& ref_measurementFailureCause_List() const {return measurementFailureCause_List;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE CompleteFailureCauseInformation-Item PRESENCE mandatory} +} +*/ + +struct CompleteFailureCauseInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(id_CompleteFailureCauseInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompleteFailureCauseInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CompleteFailureCauseInformation_Item& select_id_CompleteFailureCauseInformation_Item() { return set(1); } + CompleteFailureCauseInformation_Item const* get_id_CompleteFailureCauseInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompleteFailureCauseInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CompleteFailureCauseInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CompleteFailureCauseInformation-ItemIEs} } +*/ + +struct CompleteFailureCauseInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CompleteFailureCauseInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-DataForwardingAddress-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dl-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-DataForwardingAddress-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dl_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dl_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + dl_GTPtunnelEndpoint_t& ref_dl_GTPtunnelEndpoint() {return dl_GTPtunnelEndpoint;} + dl_GTPtunnelEndpoint_t const& ref_dl_GTPtunnelEndpoint() const {return dl_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dl_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dl_GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-DataForwardingAddress-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-DataForwardingAddress-Item CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(id_E_RABs_DataForwardingAddress_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_DataForwardingAddress_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_DataForwardingAddress_Item& select_id_E_RABs_DataForwardingAddress_Item() { return set(1); } + E_RABs_DataForwardingAddress_Item const* get_id_E_RABs_DataForwardingAddress_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_DataForwardingAddress_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-DataForwardingAddress-ItemIEs} } +*/ + +struct E_RABs_DataForwardingAddress_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_DataForwardingAddress_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_DataForwardingAddress_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +DataForwardingAddressIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-DataForwardingAddress-List CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-List PRESENCE mandatory}, + ... +} +*/ + +struct DataForwardingAddressIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(id_E_RABs_DataForwardingAddress_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 1; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_E_RABs_DataForwardingAddress_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(1); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(1); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + E_RABs_DataForwardingAddress_List& select_id_E_RABs_DataForwardingAddress_List() { return set(4); } + E_RABs_DataForwardingAddress_List const* get_id_E_RABs_DataForwardingAddress_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 2: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_E_RABs_DataForwardingAddress_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataForwardingAddressIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{DataForwardingAddressIndication-IEs}}, + ... +} +*/ + +struct DataForwardingAddressIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "DataForwardingAddressIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTP_TunnelEndpoint_t& set_uL_GTP_TunnelEndpoint() { uL_GTP_TunnelEndpoint.setpresent(true); return uL_GTP_TunnelEndpoint;} + uL_GTP_TunnelEndpoint_t const* get_uL_GTP_TunnelEndpoint() const {return uL_GTP_TunnelEndpoint.is_valid() ? &uL_GTP_TunnelEndpoint : nullptr;} + struct dL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTP_TunnelEndpoint_t& set_dL_GTP_TunnelEndpoint() { dL_GTP_TunnelEndpoint.setpresent(true); return dL_GTP_TunnelEndpoint;} + dL_GTP_TunnelEndpoint_t const* get_dL_GTP_TunnelEndpoint() const {return dL_GTP_TunnelEndpoint.is_valid() ? &dL_GTP_TunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_GTP_TunnelEndpoint.clear(); + dL_GTP_TunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_GTP_TunnelEndpoint_t uL_GTP_TunnelEndpoint; + dL_GTP_TunnelEndpoint_t dL_GTP_TunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(id_E_RABs_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_Item& select_id_E_RABs_Admitted_Item() { return set(1); } + E_RABs_Admitted_Item const* get_id_E_RABs_Admitted_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } +*/ + +struct E_RABs_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(id_E_RABs_Admitted_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_Item& select_id_E_RABs_Admitted_ToBeAdded_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_Item const* get_id_E_RABs_Admitted_ToBeAdded_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(id_E_RABs_Admitted_ToBeAdded_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_ModAckItem& select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeAdded_ModAckItem const* get_id_E_RABs_Admitted_ToBeAdded_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + seNB_GTPtunnelEndpoint_t& set_seNB_GTPtunnelEndpoint() { seNB_GTPtunnelEndpoint.setpresent(true); return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const* get_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint.is_valid() ? &seNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeModified_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(id_E_RABs_Admitted_ToBeModified_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_ModAckItem& select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeModified_ModAckItem const* get_id_E_RABs_Admitted_ToBeModified_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-secondarysgNBDLGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}| + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(id_secondarysgNBDLGTPTEIDatPDCP); type=1;} + void select_id_RLC_Status() { set(id_RLC_Status); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_secondarysgNBDLGTPTEIDatPDCP)) { type = 1; return true; } + else if(equal(id_RLC_Status)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_secondarysgNBDLGTPTEIDatPDCP);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(ignore); type=1;} + void select_id_RLC_Status() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_secondarysgNBDLGTPTEIDatPDCP() { return set(1); } + GTPtunnelEndpoint const* get_id_secondarysgNBDLGTPTEIDatPDCP() const { return get(1); } + RLC_Status& select_id_RLC_Status() { return set(2); } + RLC_Status const* get_id_RLC_Status() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_secondarysgNBDLGTPTEIDatPDCP()); return true; + case 2: v(select_id_RLC_Status()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(optional); type=1;} + void select_id_RLC_Status() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeModified_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToReleased-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToReleased_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(id_E_RABs_Admitted_ToBeReleased_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_ModAckItem& select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { return set(1); } + E_RABs_Admitted_ToReleased_ModAckItem const* get_id_E_RABs_Admitted_ToBeReleased_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToReleased-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToReleased_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF + ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + void clear() + { + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + iE_Extensions.clear(); + + }; + private: + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs X2AP-PROTOCOL-IES ::= { +{ ID id-E-RABs-AdmittedToBeModified-SgNBModConf-Item CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConf-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_AdmittedToBeModified_SgNBModConf_Item& select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { return set(1); } + E_RABs_AdmittedToBeModified_SgNBModConf_Item const* get_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_AdmittedToBeModified_SgNBModConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConfList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container + { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs} } +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_AdmittedToBeModified_SgNBModConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_AdmittedToBeModified_SgNBModConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToCounterCheckItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheckItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToCounterCheckItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItem : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheckItem";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToCounterCheckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToCounterCheckItem CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheckItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(id_E_RABs_SubjectToCounterCheckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToCounterCheckItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheckItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToCounterCheckItem& select_id_E_RABs_SubjectToCounterCheckItem() { return set(1); } + E_RABs_SubjectToCounterCheckItem const* get_id_E_RABs_SubjectToCounterCheckItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToCounterCheckItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToCounterCheckItemIEs} } +*/ + +struct E_RABs_SubjectToCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToSgNBCounterCheck-Item CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(id_E_RABs_SubjectToSgNBCounterCheck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToSgNBCounterCheck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToSgNBCounterCheck_Item& select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { return set(1); } + E_RABs_SubjectToSgNBCounterCheck_Item const* get_id_E_RABs_SubjectToSgNBCounterCheck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToSgNBCounterCheck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToSgNBCounterCheck-ItemIEs} } +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToSgNBCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToSgNBCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| + { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}| + { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| + { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(id_ReceiveStatusOfULPDCPSDUsExtended); type=1;} + void select_id_ULCOUNTValueExtended() { set(id_ULCOUNTValueExtended); type=2;} + void select_id_DLCOUNTValueExtended() { set(id_DLCOUNTValueExtended); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(id_ULCOUNTValuePDCP_SNlength18); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(id_DLCOUNTValuePDCP_SNlength18); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ReceiveStatusOfULPDCPSDUsExtended)) { type = 1; return true; } + else if(equal(id_ULCOUNTValueExtended)) { type = 2; return true; } + else if(equal(id_DLCOUNTValueExtended)) { type = 3; return true; } + else if(equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)) { type = 4; return true; } + else if(equal(id_ULCOUNTValuePDCP_SNlength18)) { type = 5; return true; } + else if(equal(id_DLCOUNTValuePDCP_SNlength18)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsExtended);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ULCOUNTValueExtended);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_DLCOUNTValueExtended);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ULCOUNTValuePDCP_SNlength18);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DLCOUNTValuePDCP_SNlength18);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(ignore); type=1;} + void select_id_ULCOUNTValueExtended() { set(ignore); type=2;} + void select_id_DLCOUNTValueExtended() { set(ignore); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(ignore); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(ignore); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ReceiveStatusOfULPDCPSDUsExtended& select_id_ReceiveStatusOfULPDCPSDUsExtended() { return set(1); } + ReceiveStatusOfULPDCPSDUsExtended const* get_id_ReceiveStatusOfULPDCPSDUsExtended() const { return get(1); } + COUNTValueExtended& select_id_ULCOUNTValueExtended() { return set(2); } + COUNTValueExtended const* get_id_ULCOUNTValueExtended() const { return get(2); } + COUNTValueExtended& select_id_DLCOUNTValueExtended() { return set(3); } + COUNTValueExtended const* get_id_DLCOUNTValueExtended() const { return get(3); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18& select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { return set(4); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 const* get_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() const { return get(4); } + COUNTvaluePDCP_SNlength18& select_id_ULCOUNTValuePDCP_SNlength18() { return set(5); } + COUNTvaluePDCP_SNlength18 const* get_id_ULCOUNTValuePDCP_SNlength18() const { return get(5); } + COUNTvaluePDCP_SNlength18& select_id_DLCOUNTValuePDCP_SNlength18() { return set(6); } + COUNTvaluePDCP_SNlength18 const* get_id_DLCOUNTValuePDCP_SNlength18() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ReceiveStatusOfULPDCPSDUsExtended()); return true; + case 2: v(select_id_ULCOUNTValueExtended()); return true; + case 3: v(select_id_DLCOUNTValueExtended()); return true; + case 4: v(select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18()); return true; + case 5: v(select_id_ULCOUNTValuePDCP_SNlength18()); return true; + case 6: v(select_id_DLCOUNTValuePDCP_SNlength18()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(COUNTValueExtended)]; + char dummy2[sizeof(COUNTvaluePDCP_SNlength18)]; + char dummy3[sizeof(ReceiveStatusOfULPDCPSDUsExtended)]; + char dummy4[sizeof(ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(optional); type=1;} + void select_id_ULCOUNTValueExtended() { set(optional); type=2;} + void select_id_DLCOUNTValueExtended() { set(optional); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(optional); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(optional); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + + receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, + uL-COUNTvalue COUNTvalue, + dL-COUNTvalue COUNTvalue, + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct receiveStatusofULPDCPSDUs_t : ReceiveStatusofULPDCPSDUs + { + static constexpr const char* name() {return "receiveStatusofULPDCPSDUs_t";} + using parent_t = ReceiveStatusofULPDCPSDUs; + static constexpr bool optional = true; + + }; + receiveStatusofULPDCPSDUs_t& set_receiveStatusofULPDCPSDUs() { receiveStatusofULPDCPSDUs.setpresent(true); return receiveStatusofULPDCPSDUs;} + receiveStatusofULPDCPSDUs_t const* get_receiveStatusofULPDCPSDUs() const {return receiveStatusofULPDCPSDUs.is_valid() ? &receiveStatusofULPDCPSDUs : nullptr;} + struct uL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "uL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + uL_COUNTvalue_t& ref_uL_COUNTvalue() {return uL_COUNTvalue;} + uL_COUNTvalue_t const& ref_uL_COUNTvalue() const {return uL_COUNTvalue;} + struct dL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "dL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + dL_COUNTvalue_t& ref_dL_COUNTvalue() {return dL_COUNTvalue;} + dL_COUNTvalue_t const& ref_dL_COUNTvalue() const {return dL_COUNTvalue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + receiveStatusofULPDCPSDUs.clear(); + uL_COUNTvalue.clear(); + dL_COUNTvalue.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + receiveStatusofULPDCPSDUs_t receiveStatusofULPDCPSDUs; + uL_COUNTvalue_t uL_COUNTvalue; + dL_COUNTvalue_t dL_COUNTvalue; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(id_E_RABs_SubjectToStatusTransfer_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToStatusTransfer_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToStatusTransfer_Item& select_id_E_RABs_SubjectToStatusTransfer_Item() { return set(1); } + E_RABs_SubjectToStatusTransfer_Item const* get_id_E_RABs_SubjectToStatusTransfer_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToStatusTransfer_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToStatusTransfer-ItemIEs} } +*/ + +struct E_RABs_SubjectToStatusTransfer_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToStatusTransfer_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToStatusTransfer_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(id_E_RABs_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_Item& select_id_E_RABs_ToBeAdded_Item() { return set(1); } + E_RABs_ToBeAdded_Item const* get_id_E_RABs_ToBeAdded_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeAdded-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(id_E_RABs_ToBeAdded_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_ModReqItem& select_id_E_RABs_ToBeAdded_ModReqItem() { return set(1); } + E_RABs_ToBeAdded_ModReqItem const* get_id_E_RABs_ToBeAdded_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MCG-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MCG_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MCG_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t& set_max_MCG_admit_E_RAB_Level_QoS_Parameters() { max_MCG_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MCG_admit_E_RAB_Level_QoS_Parameters;} + max_MCG_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MCG_admit_E_RAB_Level_QoS_Parameters() const {return max_MCG_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MCG_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MCG_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t max_MCG_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBAddReq-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(id_E_RABs_ToBeAdded_SgNBAddReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBAddReq_Item& select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBAddReq_Item const* get_id_E_RABs_ToBeAdded_SgNBAddReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBAddReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBAddReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBAddReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBAddReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBAddReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeAdded-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(id_E_RABs_ToBeAdded_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBModReq_Item& select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBModReq_Item const* get_id_E_RABs_ToBeAdded_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_GTPtunnelEndpoint_t& set_meNB_GTPtunnelEndpoint() { meNB_GTPtunnelEndpoint.setpresent(true); return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const* get_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint.is_valid() ? &meNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeModified-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeModified-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeModified_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeModified_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeModified_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeModified-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeModified-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(id_E_RABs_ToBeModified_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_ModReqItem& select_id_E_RABs_ToBeModified_ModReqItem() { return set(1); } + E_RABs_ToBeModified_ModReqItem const* get_id_E_RABs_ToBeModified_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeModified_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + full_E_RAB_Level_QoS_Parameters_t& set_full_E_RAB_Level_QoS_Parameters() { full_E_RAB_Level_QoS_Parameters.setpresent(true); return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const* get_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters.is_valid() ? &full_E_RAB_Level_QoS_Parameters : nullptr;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-secondarymeNBULGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(id_secondarymeNBULGTPTEIDatPDCP); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_secondarymeNBULGTPTEIDatPDCP)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_secondarymeNBULGTPTEIDatPDCP);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + GTPtunnelEndpoint& select_id_secondarymeNBULGTPTEIDatPDCP() { return set(3); } + GTPtunnelEndpoint const* get_id_secondarymeNBULGTPTEIDatPDCP() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_secondarymeNBULGTPTEIDatPDCP()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& set_requested_SCG_E_RAB_Level_QoS_Parameters() { requested_SCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const* get_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_SCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_UL_GTP_TEIDatPDCP_t& set_meNB_UL_GTP_TEIDatPDCP() { meNB_UL_GTP_TEIDatPDCP.setpresent(true); return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const* get_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP.is_valid() ? &meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(id_E_RABs_ToBeModified_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReq_Item& select_id_E_RABs_ToBeModified_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReq_Item const* get_id_E_RABs_ToBeModified_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-new-drb-ID-req CRITICALITY ignore EXTENSION NewDRBIDrequest PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_new_drb_ID_req() { set(id_new_drb_ID_req); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_new_drb_ID_req)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_new_drb_ID_req);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_new_drb_ID_req() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + NewDRBIDrequest& select_id_new_drb_ID_req() { return set(3); } + NewDRBIDrequest const* get_id_new_drb_ID_req() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_new_drb_ID_req()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(NewDRBIDrequest)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_new_drb_ID_req() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent ::= SEQUENCE { + requested-MCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + s1-DL-GTP-TEIDatSgNB GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct requested_MCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_MCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_MCG_E_RAB_Level_QoS_Parameters_t& set_requested_MCG_E_RAB_Level_QoS_Parameters() { requested_MCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_MCG_E_RAB_Level_QoS_Parameters;} + requested_MCG_E_RAB_Level_QoS_Parameters_t const* get_requested_MCG_E_RAB_Level_QoS_Parameters() const {return requested_MCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_MCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct s1_DL_GTP_TEIDatSgNB_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTP_TEIDatSgNB_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTP_TEIDatSgNB_t& set_s1_DL_GTP_TEIDatSgNB() { s1_DL_GTP_TEIDatSgNB.setpresent(true); return s1_DL_GTP_TEIDatSgNB;} + s1_DL_GTP_TEIDatSgNB_t const* get_s1_DL_GTP_TEIDatSgNB() const {return s1_DL_GTP_TEIDatSgNB.is_valid() ? &s1_DL_GTP_TEIDatSgNB : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + void clear() + { + requested_MCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + s1_DL_GTP_TEIDatSgNB.clear(); + iE_Extensions.clear(); + + }; + private: + requested_MCG_E_RAB_Level_QoS_Parameters_t requested_MCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + s1_DL_GTP_TEIDatSgNB_t s1_DL_GTP_TEIDatSgNB; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional}| + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + void select_id_lCID() { set(id_lCID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else if(equal(id_lCID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + void select_id_lCID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + LCID& select_id_lCID() { return set(2); } + LCID const* get_id_lCID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: v(select_id_lCID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + void select_id_lCID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(id_E_RABs_ToBeModified_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReqd_Item& select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReqd_Item const* get_id_E_RABs_ToBeModified_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(id_E_RABs_ToBeReleased_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqItem& select_id_E_RABs_ToBeReleased_ModReqItem() { return set(1); } + E_RABs_ToBeReleased_ModReqItem const* get_id_E_RABs_ToBeReleased_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelConfItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelConfItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelConfItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelConfItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelConfItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelConfItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelConfItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelConfItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(id_E_RABs_ToBeReleased_RelConfItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelConfItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelConfItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelConfItem& select_id_E_RABs_ToBeReleased_RelConfItem() { return set(1); } + E_RABs_ToBeReleased_RelConfItem const* get_id_E_RABs_ToBeReleased_RelConfItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelConfItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelConfItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelConf ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelConfItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelConf_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelConf_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelConf : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelConf";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(id_E_RABs_ToBeReleased_RelReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelReqItem& select_id_E_RABs_ToBeReleased_RelReqItem() { return set(1); } + E_RABs_ToBeReleased_RelReqItem const* get_id_E_RABs_ToBeReleased_RelReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqdItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqdItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqdItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqdItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqdItem PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(id_E_RABs_ToBeReleased_ModReqdItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqdItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqdItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqdItem& select_id_E_RABs_ToBeReleased_ModReqdItem() { return set(1); } + E_RABs_ToBeReleased_ModReqdItem const* get_id_E_RABs_ToBeReleased_ModReqdItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqdItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqdItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqd ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqdItemIEs} } +*/ + +struct E_RABs_ToBeReleased_ModReqd_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_ModReqd_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_ModReqd : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBChaConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(id_E_RABs_ToBeReleased_SgNBChaConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBChaConf_Item& select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBChaConf_Item const* get_id_E_RABs_ToBeReleased_SgNBChaConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBChaConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBChaConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBChaConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBChaConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBChaConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBChaConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + dL_GTPtunnelEndpoint.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(id_E_RABs_ToBeReleased_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReq_Item& select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReq_Item const* get_id_E_RABs_ToBeReleased_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReqd_Item& select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(id_E_RABs_ToBeReleased_SgNBRelConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelConf_Item& select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelConf_Item const* get_id_E_RABs_ToBeReleased_SgNBRelConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReq_Item& select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReq_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqd-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReqd_Item& select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqdList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(id_BearerType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_BearerType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_BearerType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(reject); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + BearerType& select_id_BearerType() { return set(1); } + BearerType const* get_id_BearerType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_BearerType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BearerType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetup_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + uL_GTPtunnelEndpoint_t& ref_uL_GTPtunnelEndpoint() {return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const& ref_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(id_E_RABs_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetup_Item& select_id_E_RABs_ToBeSetup_Item() { return set(1); } + E_RABs_ToBeSetup_Item const* get_id_E_RABs_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uL-GTPtunnelEndpoint CRITICALITY reject EXTENSION GTPtunnelEndpoint PRESENCE mandatory}| + { ID id-dL-Forwarding CRITICALITY ignore EXTENSION DL-Forwarding PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(id_uL_GTPtunnelEndpoint); type=1;} + void select_id_dL_Forwarding() { set(id_dL_Forwarding); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uL_GTPtunnelEndpoint)) { type = 1; return true; } + else if(equal(id_dL_Forwarding)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uL_GTPtunnelEndpoint);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dL_Forwarding);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(reject); type=1;} + void select_id_dL_Forwarding() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_uL_GTPtunnelEndpoint() { return set(1); } + GTPtunnelEndpoint const* get_id_uL_GTPtunnelEndpoint() const { return get(1); } + DL_Forwarding& select_id_dL_Forwarding() { return set(2); } + DL_Forwarding const* get_id_dL_Forwarding() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uL_GTPtunnelEndpoint()); return true; + case 2: v(select_id_dL_Forwarding()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_Forwarding)]; + char dummy2[sizeof(GTPtunnelEndpoint)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(mandatory); type=1;} + void select_id_dL_Forwarding() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetupRetrieve-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + bearerType BearerType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetupRetrieve-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetupRetrieve-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct bearerType_t : BearerType + { + static constexpr const char* name() {return "bearerType_t";} + using parent_t = BearerType; + static constexpr bool optional = true; + + }; + bearerType_t& set_bearerType() { bearerType.setpresent(true); return bearerType;} + bearerType_t const* get_bearerType() const {return bearerType.is_valid() ? &bearerType : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + bearerType.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + bearerType_t bearerType; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetupRetrieve-Item CRITICALITY ignore TYPE E-RABs-ToBeSetupRetrieve-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(id_E_RABs_ToBeSetupRetrieve_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetupRetrieve_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetupRetrieve_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetupRetrieve_Item& select_id_E_RABs_ToBeSetupRetrieve_Item() { return set(1); } + E_RABs_ToBeSetupRetrieve_Item const* get_id_E_RABs_ToBeSetupRetrieve_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetupRetrieve_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetupRetrieve_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-ListRetrieve ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetupRetrieve-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_ListRetrieve_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_ListRetrieve_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_ListRetrieve : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-ListRetrieve";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + ... +} +*/ + +struct ENB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +NRNeighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRNeighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRNeighbour-Information ::= SEQUENCE (SIZE (1.. maxofNRNeighbours))OF SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + measurementTimingConfiguration OCTET STRING, + nRNeighbourModeInfo CHOICE { + fdd FDD-InfoNeighbourServedNRCell-Information, + tdd TDD-InfoNeighbourServedNRCell-Information, + ... + }, + iE-Extensions ProtocolExtensionContainer { {NRNeighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRNeighbour_Information_elm : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "NRNeighbour_Information_elm";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct nRNeighbourModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nRNeighbourModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nRNeighbourModeInfo_t() {clear();} + struct fdd_t : FDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoNeighbourServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoNeighbourServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nRNeighbourModeInfo_t& ref_nRNeighbourModeInfo() {return nRNeighbourModeInfo;} + nRNeighbourModeInfo_t const& ref_nRNeighbourModeInfo() const {return nRNeighbourModeInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + measurementTimingConfiguration.clear(); + nRNeighbourModeInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + measurementTimingConfiguration_t measurementTimingConfiguration; + nRNeighbourModeInfo_t nRNeighbourModeInfo; + iE_Extensions_t iE_Extensions; + +}; +struct NRNeighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "NRNeighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsENDCX2Management-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsENDCX2Management_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsENDCX2Management-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + old-ECGI ECGI, + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_elm : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd_elm";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ECGI_t : ECGI + { + static constexpr const char* name() {return "old_ECGI_t";} + using parent_t = ECGI; + + }; + old_ECGI_t& ref_old_ECGI() {return old_ECGI;} + old_ECGI_t const& ref_old_ECGI() const {return old_ECGI;} + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + old_ECGI.clear(); + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + old_ECGI_t old_ECGI; + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsToModifyListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToDeleteListENDCConfUpd ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ServedEUTRAcellsToDeleteListENDCConfUpd_elm : ECGI +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd_elm";} + using parent_t = ECGI; + +}; +struct ServedEUTRAcellsToDeleteListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellAssistanceInformation CRITICALITY reject TYPE CellAssistanceInformation PRESENCE optional }| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedEUTRAcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToModifyListENDCConfUpd PRESENCE optional }| + { ID id-ServedEUTRAcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToDeleteListENDCConfUpd PRESENCE optional }, + ... +} +*/ + +struct ENB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(id_CellAssistanceInformation); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(id_ServedEUTRAcellsToModifyListENDCConfUpd); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(id_ServedEUTRAcellsToDeleteListENDCConfUpd); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellAssistanceInformation)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else if(equal(id_ServedEUTRAcellsToModifyListENDCConfUpd)) { type = 3; return true; } + else if(equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellAssistanceInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToModifyListENDCConfUpd);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(reject); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellAssistanceInformation& select_id_CellAssistanceInformation() { return set(1); } + CellAssistanceInformation const* get_id_CellAssistanceInformation() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + ServedEUTRAcellsToModifyListENDCConfUpd& select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { return set(3); } + ServedEUTRAcellsToModifyListENDCConfUpd const* get_id_ServedEUTRAcellsToModifyListENDCConfUpd() const { return get(3); } + ServedEUTRAcellsToDeleteListENDCConfUpd& select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { return set(4); } + ServedEUTRAcellsToDeleteListENDCConfUpd const* get_id_ServedEUTRAcellsToDeleteListENDCConfUpd() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellAssistanceInformation()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: v(select_id_ServedEUTRAcellsToModifyListENDCConfUpd()); return true; + case 4: v(select_id_ServedEUTRAcellsToDeleteListENDCConfUpd()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellAssistanceInformation)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + char dummy3[sizeof(ServedEUTRAcellsToDeleteListENDCConfUpd)]; + char dummy4[sizeof(ServedEUTRAcellsToModifyListENDCConfUpd)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(optional); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(optional); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(optional); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationResp ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationResp_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationResp CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationResp PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(id_ListofEUTRACellsinEUTRACoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationResp& select_id_ListofEUTRACellsinEUTRACoordinationResp() { return set(3); } + ListofEUTRACellsinEUTRACoordinationResp const* get_id_ListofEUTRACellsinEUTRACoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationReq ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(id_ListofEUTRACellsinEUTRACoordinationReq); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationReq)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationReq);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationReq& select_id_ListofEUTRACellsinEUTRACoordinationReq() { return set(3); } + ListofEUTRACellsinEUTRACoordinationReq const* get_id_ListofEUTRACellsinEUTRACoordinationReq() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationReq()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationReq)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, + ... +} +*/ + +struct ServedCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(id_DeactivationIndication); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DeactivationIndication)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DeactivationIndication);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DeactivationIndication& select_id_DeactivationIndication() { return set(1); } + DeactivationIndication const* get_id_DeactivationIndication() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DeactivationIndication()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DeactivationIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item::= SEQUENCE { + old-ecgi ECGI, + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToModify_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCellsToModify-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ecgi_t : ECGI + { + static constexpr const char* name() {return "old_ecgi_t";} + using parent_t = ECGI; + + }; + old_ecgi_t& ref_old_ecgi() {return old_ecgi;} + old_ecgi_t const& ref_old_ecgi() const {return old_ecgi;} + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + old_ecgi.clear(); + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + old_ecgi_t old_ecgi; + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item +*/ + +struct ServedCellsToModify_elm : ServedCellsToModify_Item +{ + static constexpr const char* name() {return "ServedCellsToModify_elm";} + using parent_t = ServedCellsToModify_Item; + +}; +struct ServedCellsToModify : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToModify";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct Old_ECGIs_elm : ECGI +{ + static constexpr const char* name() {return "Old_ECGIs_elm";} + using parent_t = ECGI; + +}; +struct Old_ECGIs : asn::sequenceof +{ + static constexpr const char* name() {return "Old-ECGIs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional}| + { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional}| + { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional}| + { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CoverageModificationList CRITICALITY reject TYPE CoverageModificationList PRESENCE optional}, + ... +} +*/ + +struct ENBConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(id_ServedCellsToAdd); type=1;} + void select_id_ServedCellsToModify() { set(id_ServedCellsToModify); type=2;} + void select_id_ServedCellsToDelete() { set(id_ServedCellsToDelete); type=3;} + void select_id_GUGroupIDToAddList() { set(id_GUGroupIDToAddList); type=4;} + void select_id_GUGroupIDToDeleteList() { set(id_GUGroupIDToDeleteList); type=5;} + void select_id_CoverageModificationList() { set(id_CoverageModificationList); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToAdd)) { type = 1; return true; } + else if(equal(id_ServedCellsToModify)) { type = 2; return true; } + else if(equal(id_ServedCellsToDelete)) { type = 3; return true; } + else if(equal(id_GUGroupIDToAddList)) { type = 4; return true; } + else if(equal(id_GUGroupIDToDeleteList)) { type = 5; return true; } + else if(equal(id_CoverageModificationList)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToAdd);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCellsToModify);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedCellsToDelete);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUGroupIDToAddList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUGroupIDToDeleteList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CoverageModificationList);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(reject); type=1;} + void select_id_ServedCellsToModify() { set(reject); type=2;} + void select_id_ServedCellsToDelete() { set(reject); type=3;} + void select_id_GUGroupIDToAddList() { set(reject); type=4;} + void select_id_GUGroupIDToDeleteList() { set(reject); type=5;} + void select_id_CoverageModificationList() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCells& select_id_ServedCellsToAdd() { return set(1); } + ServedCells const* get_id_ServedCellsToAdd() const { return get(1); } + ServedCellsToModify& select_id_ServedCellsToModify() { return set(2); } + ServedCellsToModify const* get_id_ServedCellsToModify() const { return get(2); } + Old_ECGIs& select_id_ServedCellsToDelete() { return set(3); } + Old_ECGIs const* get_id_ServedCellsToDelete() const { return get(3); } + GUGroupIDList& select_id_GUGroupIDToAddList() { return set(4); } + GUGroupIDList const* get_id_GUGroupIDToAddList() const { return get(4); } + GUGroupIDList& select_id_GUGroupIDToDeleteList() { return set(5); } + GUGroupIDList const* get_id_GUGroupIDToDeleteList() const { return get(5); } + CoverageModificationList& select_id_CoverageModificationList() { return set(6); } + CoverageModificationList const* get_id_CoverageModificationList() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToAdd()); return true; + case 2: v(select_id_ServedCellsToModify()); return true; + case 3: v(select_id_ServedCellsToDelete()); return true; + case 4: v(select_id_GUGroupIDToAddList()); return true; + case 5: v(select_id_GUGroupIDToDeleteList()); return true; + case 6: v(select_id_CoverageModificationList()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CoverageModificationList)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(Old_ECGIs)]; + char dummy4[sizeof(ServedCells)]; + char dummy5[sizeof(ServedCellsToModify)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(optional); type=1;} + void select_id_ServedCellsToModify() { set(optional); type=2;} + void select_id_ServedCellsToDelete() { set(optional); type=3;} + void select_id_GUGroupIDToAddList() { set(optional); type=4;} + void select_id_GUGroupIDToDeleteList() { set(optional); type=5;} + void select_id_CoverageModificationList() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, +... +} +*/ + +struct ENBConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateFailure-IEs X2AP-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}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCCellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(id_ActivationID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivationID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivationID& select_id_ActivationID() { return set(1); } + ActivationID const* get_id_ActivationID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivationID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationFailure-IEs}}, + ... +} +*/ + +struct ENDCCellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedNRCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToActivate-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedNRCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCellsToActivate::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ServedNRCellsToActivate-Item +*/ + +struct ServedNRCellsToActivate_elm : ServedNRCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedNRCellsToActivate_elm";} + using parent_t = ServedNRCellsToActivate_Item; + +}; +struct ServedNRCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENDCCellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRCellsToActivate CRITICALITY reject TYPE ServedNRCellsToActivate PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}, + ... +} +*/ + +struct ENDCCellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(id_ServedNRCellsToActivate); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRCellsToActivate)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRCellsToActivate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(reject); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRCellsToActivate& select_id_ServedNRCellsToActivate() { return set(1); } + ServedNRCellsToActivate const* get_id_ServedNRCellsToActivate() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRCellsToActivate()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(ServedNRCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationRequest-IEs}}, + ... +} +*/ + +struct ENDCCellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedNRCellList CRITICALITY ignore TYPE ActivatedNRCellList PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct ENDCCellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(id_ActivatedNRCellList); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedNRCellList)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedNRCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(ignore); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedNRCellList& select_id_ActivatedNRCellList() { return set(1); } + ActivatedNRCellList const* get_id_ActivatedNRCellList() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedNRCellList()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedNRCellList)]; + char dummy2[sizeof(ActivationID)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationResponse-IEs}}, + ... +} +*/ + +struct ENDCCellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +FDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoServedNRCell_Information : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct ul_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "ul_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + ul_NR_TxBW_t& ref_ul_NR_TxBW() {return ul_NR_TxBW;} + ul_NR_TxBW_t const& ref_ul_NR_TxBW() const {return ul_NR_TxBW;} + struct dl_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "dl_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + dl_NR_TxBW_t& ref_dl_NR_TxBW() {return dl_NR_TxBW;} + dl_NR_TxBW_t const& ref_dl_NR_TxBW() const {return dl_NR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + ul_NR_TxBW.clear(); + dl_NR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + ul_NR_TxBW_t ul_NR_TxBW; + dl_NR_TxBW_t dl_NR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + nR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct nR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "nR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + nR_TxBW_t& ref_nR_TxBW() {return nR_TxBW;} + nR_TxBW_t const& ref_nR_TxBW() const {return nR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + nR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + nR_TxBW_t nR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCell_Information : asn::sequence<8, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCell-Information";} + using parent_t = asn::sequence<8, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct nrModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nrModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nrModeInfo_t() {clear();} + struct fdd_t : FDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nrModeInfo_t& ref_nrModeInfo() {return nrModeInfo;} + nrModeInfo_t const& ref_nrModeInfo() const {return nrModeInfo;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + broadcastPLMNs.clear(); + nrModeInfo.clear(); + measurementTimingConfiguration.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + broadcastPLMNs_t broadcastPLMNs; + nrModeInfo_t nrModeInfo; + measurementTimingConfiguration_t measurementTimingConfiguration; + iE_Extensions_t iE_Extensions; + +}; +/* +En-gNBServedCells-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct En_gNBServedCells_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF SEQUENCE { + servedNRCellInfo ServedNRCell-Information, + nRNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {En-gNBServedCells-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedNRCellInfo_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInfo_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInfo_t& ref_servedNRCellInfo() {return servedNRCellInfo;} + servedNRCellInfo_t const& ref_servedNRCellInfo() const {return servedNRCellInfo;} + struct nRNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nRNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nRNeighbourInfo_t& set_nRNeighbourInfo() { nRNeighbourInfo.setpresent(true); return nRNeighbourInfo;} + nRNeighbourInfo_t const* get_nRNeighbourInfo() const {return nRNeighbourInfo.is_valid() ? &nRNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedNRCellInfo.clear(); + nRNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedNRCellInfo_t servedNRCellInfo; + nRNeighbourInfo_t nRNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedNRcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToModify-Item::= SEQUENCE { + old-nrcgi NRCGI, + servedNRCellInformation ServedNRCell-Information, + nrNeighbourInformation NRNeighbour-Information OPTIONAL, + nrDeactivationIndication DeactivationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToModify_Item : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCellsToModify-Item";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct old_nrcgi_t : NRCGI + { + static constexpr const char* name() {return "old_nrcgi_t";} + using parent_t = NRCGI; + + }; + old_nrcgi_t& ref_old_nrcgi() {return old_nrcgi;} + old_nrcgi_t const& ref_old_nrcgi() const {return old_nrcgi;} + struct servedNRCellInformation_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInformation_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInformation_t& ref_servedNRCellInformation() {return servedNRCellInformation;} + servedNRCellInformation_t const& ref_servedNRCellInformation() const {return servedNRCellInformation;} + struct nrNeighbourInformation_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInformation_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInformation_t& set_nrNeighbourInformation() { nrNeighbourInformation.setpresent(true); return nrNeighbourInformation;} + nrNeighbourInformation_t const* get_nrNeighbourInformation() const {return nrNeighbourInformation.is_valid() ? &nrNeighbourInformation : nullptr;} + struct nrDeactivationIndication_t : DeactivationIndication + { + static constexpr const char* name() {return "nrDeactivationIndication_t";} + using parent_t = DeactivationIndication; + static constexpr bool optional = true; + + }; + nrDeactivationIndication_t& set_nrDeactivationIndication() { nrDeactivationIndication.setpresent(true); return nrDeactivationIndication;} + nrDeactivationIndication_t const* get_nrDeactivationIndication() const {return nrDeactivationIndication.is_valid() ? &nrDeactivationIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + void clear() + { + old_nrcgi.clear(); + servedNRCellInformation.clear(); + nrNeighbourInformation.clear(); + nrDeactivationIndication.clear(); + iE_Extensions.clear(); + + }; + private: + old_nrcgi_t old_nrcgi; + servedNRCellInformation_t servedNRCellInformation; + nrNeighbourInformation_t nrNeighbourInformation; + nrDeactivationIndication_t nrDeactivationIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRcellsToModifyENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF ServedNRCellsToModify-Item +*/ + +struct ServedNRcellsToModifyENDCConfUpdList_elm : ServedNRCellsToModify_Item +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList_elm";} + using parent_t = ServedNRCellsToModify_Item; + +}; +struct ServedNRcellsToModifyENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRcellsToDeleteENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF NRCGI +*/ + +struct ServedNRcellsToDeleteENDCConfUpdList_elm : NRCGI +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList_elm";} + using parent_t = NRCGI; + +}; +struct ServedNRcellsToDeleteENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedNRcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToModifyENDCConfUpdList PRESENCE optional }| + { ID id-ServedNRcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToDeleteENDCConfUpdList PRESENCE optional }, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(id_ServedNRcellsToModifyListENDCConfUpd); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(id_ServedNRcellsToDeleteListENDCConfUpd); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else if(equal(id_ServedNRcellsToModifyListENDCConfUpd)) { type = 2; return true; } + else if(equal(id_ServedNRcellsToDeleteListENDCConfUpd)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsToModifyListENDCConfUpd);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedNRcellsToDeleteListENDCConfUpd);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(reject); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + ServedNRcellsToModifyENDCConfUpdList& select_id_ServedNRcellsToModifyListENDCConfUpd() { return set(2); } + ServedNRcellsToModifyENDCConfUpdList const* get_id_ServedNRcellsToModifyListENDCConfUpd() const { return get(2); } + ServedNRcellsToDeleteENDCConfUpdList& select_id_ServedNRcellsToDeleteListENDCConfUpd() { return set(3); } + ServedNRcellsToDeleteENDCConfUpdList const* get_id_ServedNRcellsToDeleteListENDCConfUpd() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: v(select_id_ServedNRcellsToModifyListENDCConfUpd()); return true; + case 3: v(select_id_ServedNRcellsToDeleteListENDCConfUpd()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + char dummy2[sizeof(ServedNRcellsToDeleteENDCConfUpdList)]; + char dummy3[sizeof(ServedNRcellsToModifyENDCConfUpdList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(optional); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcConfigUpdate::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcConfigUpdate() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcConfigUpdate CRITICALITY reject TYPE InitiatingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(id_InitiatingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcConfigUpdate& select_id_InitiatingNodeType_EndcConfigUpdate() { return set(1); } + InitiatingNodeType_EndcConfigUpdate const* get_id_InitiatingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional}, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcConfigUpdate::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcConfigUpdate() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcConfigUpdate CRITICALITY reject TYPE RespondingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(id_RespondingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcConfigUpdate& select_id_RespondingNodeType_EndcConfigUpdate() { return set(1); } + RespondingNodeType_EndcConfigUpdate const* get_id_RespondingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-Admitted-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}, + ... +} +*/ + +struct ENDCPartialResetConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(id_UEs_Admitted_ToBeReset); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_Admitted_ToBeReset)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_Admitted_ToBeReset);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_Admitted_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_Admitted_ToBeReset() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_Admitted_ToBeReset()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetConfirm-IEs}}, + ... +} +*/ + +struct ENDCPartialResetConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} +*/ + +struct ENDCPartialResetRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(id_UEs_ToBeReset); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_ToBeReset)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_ToBeReset);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_ToBeReset() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_ToBeReset()); return true; + case 2: v(select_id_Cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetRequired-IEs}}, + ... +} +*/ + +struct ENDCPartialResetRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCX2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalFailure-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Removal ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Removal() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Removal CRITICALITY reject TYPE InitiatingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(id_InitiatingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Removal& select_id_InitiatingNodeType_EndcX2Removal() { return set(1); } + InitiatingNodeType_EndcX2Removal const* get_id_InitiatingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalRequest-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Removal ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Removal() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Removal CRITICALITY reject TYPE RespondingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(id_RespondingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Removal& select_id_RespondingNodeType_EndcX2Removal() { return set(1); } + RespondingNodeType_EndcX2Removal const* get_id_RespondingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalResponse-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } | + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCX2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupFailure-IEs}}, + ... +} +*/ + +struct ENDCX2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Setup ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Setup() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Setup CRITICALITY reject TYPE InitiatingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(id_InitiatingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Setup& select_id_InitiatingNodeType_EndcX2Setup() { return set(1); } + InitiatingNodeType_EndcX2Setup const* get_id_InitiatingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupRequest-IEs}}, + ... +} +*/ + +struct ENDCX2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Setup ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Setup() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Setup CRITICALITY reject TYPE RespondingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(id_RespondingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Setup& select_id_RespondingNodeType_EndcX2Setup() { return set(1); } + RespondingNodeType_EndcX2Setup const* get_id_RespondingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupResponse-IEs}}, + ... +} +*/ + +struct ENDCX2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofEUTRACellsinNRCoordinationReq ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinNRCoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ListofNRCellsinNRCoordinationReq ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationReq_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-ListofEUTRACellsinNRCoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinNRCoordinationReq PRESENCE mandatory }| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationReq CRITICALITY reject TYPE ListofNRCellsinNRCoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(id_ListofEUTRACellsinNRCoordinationReq); type=2;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(id_ListofNRCellsinNRCoordinationReq); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_ListofEUTRACellsinNRCoordinationReq)) { type = 2; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 3; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationReq)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinNRCoordinationReq);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationReq);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(reject); type=2;} + void select_id_SpectrumSharingGroupID() { set(reject); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + ListofEUTRACellsinNRCoordinationReq& select_id_ListofEUTRACellsinNRCoordinationReq() { return set(2); } + ListofEUTRACellsinNRCoordinationReq const* get_id_ListofEUTRACellsinNRCoordinationReq() const { return get(2); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(3); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(3); } + ListofNRCellsinNRCoordinationReq& select_id_ListofNRCellsinNRCoordinationReq() { return set(4); } + ListofNRCellsinNRCoordinationReq const* get_id_ListofNRCellsinNRCoordinationReq() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_ListofEUTRACellsinNRCoordinationReq()); return true; + case 3: v(select_id_SpectrumSharingGroupID()); return true; + case 4: v(select_id_ListofNRCellsinNRCoordinationReq()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinNRCoordinationReq)]; + char dummy3[sizeof(ListofNRCellsinNRCoordinationReq)]; + char dummy4[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(mandatory); type=2;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EutranrCellResourceCoordination ::= CHOICE { + initiate-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqIEs}}, + initiate-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EutranrCellResourceCoordination() {clear();} + struct initiate_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct initiate_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + initiate_eNB_t& select_initiate_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiate_eNB_t const* get_initiate_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + initiate_en_gNB_t& select_initiate_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + initiate_en_gNB_t const* get_initiate_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiate_eNB_t)]; + char dummy2[sizeof(initiate_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE InitiatingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(id_InitiatingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EutranrCellResourceCoordination& select_id_InitiatingNodeType_EutranrCellResourceCoordination() { return set(1); } + InitiatingNodeType_EutranrCellResourceCoordination const* get_id_InitiatingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationRequest-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofNRCellsinNRCoordinationResp ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationResp_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationResp CRITICALITY reject TYPE ListofNRCellsinNRCoordinationResp PRESENCE mandatory}, + + + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(id_ListofNRCellsinNRCoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofNRCellsinNRCoordinationResp& select_id_ListofNRCellsinNRCoordinationResp() { return set(3); } + ListofNRCellsinNRCoordinationResp const* get_id_ListofNRCellsinNRCoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofNRCellsinNRCoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofNRCellsinNRCoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EutranrCellResourceCoordination ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EutranrCellResourceCoordination() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE RespondingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(id_RespondingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EutranrCellResourceCoordination& select_id_RespondingNodeType_EutranrCellResourceCoordination() { return set(1); } + RespondingNodeType_EutranrCellResourceCoordination const* get_id_RespondingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationResponse-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct ErrorIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(id_Old_SgNB_UE_X2AP_ID); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_Old_SgNB_UE_X2AP_ID)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_Old_SgNB_UE_X2AP_ID);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(6); } + SgNB_UE_X2AP_ID& select_id_Old_SgNB_UE_X2AP_ID() { return set(7); } + SgNB_UE_X2AP_ID const* get_id_Old_SgNB_UE_X2AP_ID() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_Old_SgNB_UE_X2AP_ID()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(optional); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} +*/ + +struct ErrorIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ErrorIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +GNBStatusIndicationIEs X2AP-PROTOCOL-IES ::= { + { ID id-GNBOverloadInformation CRITICALITY ignore TYPE GNBOverloadInformation PRESENCE mandatory}, + ... +} +*/ + +struct GNBStatusIndicationIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(id_GNBOverloadInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GNBOverloadInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GNBOverloadInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GNBOverloadInformation& select_id_GNBOverloadInformation() { return set(1); } + GNBOverloadInformation const* get_id_GNBOverloadInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GNBOverloadInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GNBOverloadInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GNBStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBStatusIndicationIEs} }, + ... +} +*/ + +struct GNBStatusIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "GNBStatusIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct HandoverCancel_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, + ... +} +*/ + +struct HandoverCancel : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverCancel";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + + ... +} +*/ + +struct HandoverPreparationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, + ... +} +*/ + +struct HandoverPreparationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverPreparationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityInformation ::= BIT STRING (SIZE(32)) +*/ + +struct MobilityInformation : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MobilityInformation";} + using parent_t = asn::bstring<>; + +}; + +/* +HandoverReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- | + { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to "InterRAT ping-pong" --| + { ID id-SourceCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct HandoverReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(id_HandoverReportType); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_SourceCellECGI() { set(id_SourceCellECGI); type=3;} + void select_id_FailureCellECGI() { set(id_FailureCellECGI); type=4;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=5;} + void select_id_TargetCellInUTRAN() { set(id_TargetCellInUTRAN); type=6;} + void select_id_SourceCellCRNTI() { set(id_SourceCellCRNTI); type=7;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=8;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_HandoverReportType)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_SourceCellECGI)) { type = 3; return true; } + else if(equal(id_FailureCellECGI)) { type = 4; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 5; return true; } + else if(equal(id_TargetCellInUTRAN)) { type = 6; return true; } + else if(equal(id_SourceCellCRNTI)) { type = 7; return true; } + else if(equal(id_MobilityInformation)) { type = 8; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 9; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_HandoverReportType);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SourceCellECGI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_FailureCellECGI);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_TargetCellInUTRAN);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SourceCellCRNTI);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_SourceCellECGI() { set(ignore); type=3;} + void select_id_FailureCellECGI() { set(ignore); type=4;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=5;} + void select_id_TargetCellInUTRAN() { set(ignore); type=6;} + void select_id_SourceCellCRNTI() { set(ignore); type=7;} + void select_id_MobilityInformation() { set(ignore); type=8;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + HandoverReportType& select_id_HandoverReportType() { return set(1); } + HandoverReportType const* get_id_HandoverReportType() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_SourceCellECGI() { return set(3); } + ECGI const* get_id_SourceCellECGI() const { return get(3); } + ECGI& select_id_FailureCellECGI() { return set(4); } + ECGI const* get_id_FailureCellECGI() const { return get(4); } + ECGI& select_id_Re_establishmentCellECGI() { return set(5); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(5); } + TargetCellInUTRAN& select_id_TargetCellInUTRAN() { return set(6); } + TargetCellInUTRAN const* get_id_TargetCellInUTRAN() const { return get(6); } + CRNTI& select_id_SourceCellCRNTI() { return set(7); } + CRNTI const* get_id_SourceCellCRNTI() const { return get(7); } + MobilityInformation& select_id_MobilityInformation() { return set(8); } + MobilityInformation const* get_id_MobilityInformation() const { return get(8); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(9); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(9); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(10); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_HandoverReportType()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_SourceCellECGI()); return true; + case 4: v(select_id_FailureCellECGI()); return true; + case 5: v(select_id_Re_establishmentCellECGI()); return true; + case 6: v(select_id_TargetCellInUTRAN()); return true; + case 7: v(select_id_SourceCellCRNTI()); return true; + case 8: v(select_id_MobilityInformation()); return true; + case 9: v(select_id_UE_RLF_Report_Container()); return true; + case 10: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(HandoverReportType)]; + char dummy5[sizeof(MobilityInformation)]; + char dummy6[sizeof(TargetCellInUTRAN)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_SourceCellECGI() { set(mandatory); type=3;} + void select_id_FailureCellECGI() { set(mandatory); type=4;} + void select_id_Re_establishmentCellECGI() { set(conditional); type=5;} + void select_id_TargetCellInUTRAN() { set(conditional); type=6;} + void select_id_SourceCellCRNTI() { set(optional); type=7;} + void select_id_MobilityInformation() { set(optional); type=8;} + void select_id_UE_RLF_Report_Container() { set(optional); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(conditional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(conditional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, + ... +} +*/ + +struct HandoverReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION ManagementBasedMDTallowed PRESENCE optional }| +{ ID id-ManagementBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }| +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(id_ManagementBasedMDTallowed); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(id_ManagementBasedMDTPLMNList); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ManagementBasedMDTallowed)) { type = 1; return true; } + else if(equal(id_ManagementBasedMDTPLMNList)) { type = 2; return true; } + else if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ManagementBasedMDTallowed);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ManagementBasedMDTPLMNList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(ignore); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(ignore); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ManagementBasedMDTallowed& select_id_ManagementBasedMDTallowed() { return set(1); } + ManagementBasedMDTallowed const* get_id_ManagementBasedMDTallowed() const { return get(1); } + MDTPLMNList& select_id_ManagementBasedMDTPLMNList() { return set(2); } + MDTPLMNList const* get_id_ManagementBasedMDTPLMNList() const { return get(2); } + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(3); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ManagementBasedMDTallowed()); return true; + case 2: v(select_id_ManagementBasedMDTPLMNList()); return true; + case 3: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDTPLMNList)]; + char dummy2[sizeof(ManagementBasedMDTallowed)]; + char dummy3[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(optional); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(optional); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation : asn::sequence<10, 0, true, 4> +{ + static constexpr const char* name() {return "UE-ContextInformation";} + using parent_t = asn::sequence<10, 0, true, 4>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_List_t : E_RABs_ToBeSetup_List + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_List_t";} + using parent_t = E_RABs_ToBeSetup_List; + + }; + e_RABs_ToBeSetup_List_t& ref_e_RABs_ToBeSetup_List() {return e_RABs_ToBeSetup_List;} + e_RABs_ToBeSetup_List_t const& ref_e_RABs_ToBeSetup_List() const {return e_RABs_ToBeSetup_List;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_List.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSeNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSeNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSeNB ::= SEQUENCE { + source-GlobalSeNB-ID GlobalENB-ID, + seNB-UE-X2AP-ID UE-X2AP-ID, + seNB-UE-X2AP-ID-Extension UE-X2AP-ID-Extension, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSeNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSeNB : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSeNB";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct source_GlobalSeNB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalSeNB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalSeNB_ID_t& ref_source_GlobalSeNB_ID() {return source_GlobalSeNB_ID;} + source_GlobalSeNB_ID_t const& ref_source_GlobalSeNB_ID() const {return source_GlobalSeNB_ID;} + struct seNB_UE_X2AP_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + seNB_UE_X2AP_ID_t& ref_seNB_UE_X2AP_ID() {return seNB_UE_X2AP_ID;} + seNB_UE_X2AP_ID_t const& ref_seNB_UE_X2AP_ID() const {return seNB_UE_X2AP_ID;} + struct seNB_UE_X2AP_ID_Extension_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_Extension_t";} + using parent_t = UE_X2AP_ID_Extension; + + }; + seNB_UE_X2AP_ID_Extension_t& ref_seNB_UE_X2AP_ID_Extension() {return seNB_UE_X2AP_ID_Extension;} + seNB_UE_X2AP_ID_Extension_t const& ref_seNB_UE_X2AP_ID_Extension() const {return seNB_UE_X2AP_ID_Extension;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSeNB_ID.clear(); + seNB_UE_X2AP_ID.clear(); + seNB_UE_X2AP_ID_Extension.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSeNB_ID_t source_GlobalSeNB_ID; + seNB_UE_X2AP_ID_t seNB_UE_X2AP_ID; + seNB_UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtWT-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtWT_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtWT ::= SEQUENCE { + wTID WTID, + wT-UE-XwAP-ID WT-UE-XwAP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtWT-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtWT : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtWT";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct wTID_t : WTID + { + static constexpr const char* name() {return "wTID_t";} + using parent_t = WTID; + + }; + wTID_t& ref_wTID() {return wTID;} + wTID_t const& ref_wTID() const {return wTID;} + struct wT_UE_XwAP_ID_t : WT_UE_XwAP_ID + { + static constexpr const char* name() {return "wT_UE_XwAP_ID_t";} + using parent_t = WT_UE_XwAP_ID; + + }; + wT_UE_XwAP_ID_t& ref_wT_UE_XwAP_ID() {return wT_UE_XwAP_ID;} + wT_UE_XwAP_ID_t const& ref_wT_UE_XwAP_ID() const {return wT_UE_XwAP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + void clear() + { + wTID.clear(); + wT_UE_XwAP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + wTID_t wTID; + wT_UE_XwAP_ID_t wT_UE_XwAP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSgNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSgNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSgNB ::= SEQUENCE { + source-GlobalSgNB-ID GlobalGNB-ID, + sgNB-UE-X2AP-ID SgNB-UE-X2AP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSgNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSgNB : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSgNB";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct source_GlobalSgNB_ID_t : GlobalGNB_ID + { + static constexpr const char* name() {return "source_GlobalSgNB_ID_t";} + using parent_t = GlobalGNB_ID; + + }; + source_GlobalSgNB_ID_t& ref_source_GlobalSgNB_ID() {return source_GlobalSgNB_ID;} + source_GlobalSgNB_ID_t const& ref_source_GlobalSgNB_ID() const {return source_GlobalSgNB_ID;} + struct sgNB_UE_X2AP_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_UE_X2AP_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + + }; + sgNB_UE_X2AP_ID_t& ref_sgNB_UE_X2AP_ID() {return sgNB_UE_X2AP_ID;} + sgNB_UE_X2AP_ID_t const& ref_sgNB_UE_X2AP_ID() const {return sgNB_UE_X2AP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSgNB_ID.clear(); + sgNB_UE_X2AP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSgNB_ID_t source_GlobalSgNB_ID; + sgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory}| + { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-UE-HistoryInformationFromTheUE CRITICALITY ignore TYPE UE-HistoryInformationFromTheUE PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtSeNB CRITICALITY ignore TYPE UE-ContextReferenceAtSeNB PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtWT CRITICALITY ignore TYPE UE-ContextReferenceAtWT PRESENCE optional}| + { ID id-NRUESecurityCapabilities CRITICALITY ignore TYPE NRUESecurityCapabilities PRESENCE optional}| + { ID id-UE-ContextReferenceAtSgNB CRITICALITY ignore TYPE UE-ContextReferenceAtSgNB PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct HandoverRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_TargetCell_ID() { set(id_TargetCell_ID); type=3;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=4;} + void select_id_UE_ContextInformation() { set(id_UE_ContextInformation); type=5;} + void select_id_UE_HistoryInformation() { set(id_UE_HistoryInformation); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=9;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=10;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(id_UE_HistoryInformationFromTheUE); type=12;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=13;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(id_UE_ContextReferenceAtSeNB); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=16;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(id_UE_ContextReferenceAtWT); type=18;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(id_UE_ContextReferenceAtSgNB); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=22;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_TargetCell_ID)) { type = 3; return true; } + else if(equal(id_GUMMEI_ID)) { type = 4; return true; } + else if(equal(id_UE_ContextInformation)) { type = 5; return true; } + else if(equal(id_UE_HistoryInformation)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 9; return true; } + else if(equal(id_MobilityInformation)) { type = 10; return true; } + else if(equal(id_Masked_IMEISV)) { type = 11; return true; } + else if(equal(id_UE_HistoryInformationFromTheUE)) { type = 12; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 13; return true; } + else if(equal(id_ProSeAuthorized)) { type = 14; return true; } + else if(equal(id_UE_ContextReferenceAtSeNB)) { type = 15; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 16; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 17; return true; } + else if(equal(id_UE_ContextReferenceAtWT)) { type = 18; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 19; return true; } + else if(equal(id_UE_ContextReferenceAtSgNB)) { type = 20; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 21; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TargetCell_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_HistoryInformation);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_UE_HistoryInformationFromTheUE);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSeNB);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtWT);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSgNB);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_TargetCell_ID() { set(reject); type=3;} + void select_id_GUMMEI_ID() { set(reject); type=4;} + void select_id_UE_ContextInformation() { set(reject); type=5;} + void select_id_UE_HistoryInformation() { set(ignore); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_CSGMembershipStatus() { set(reject); type=9;} + void select_id_MobilityInformation() { set(ignore); type=10;} + void select_id_Masked_IMEISV() { set(ignore); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(ignore); type=12;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=13;} + void select_id_ProSeAuthorized() { set(ignore); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(ignore); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=16;} + void select_id_V2XServicesAuthorized() { set(ignore); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(ignore); type=18;} + void select_id_NRUESecurityCapabilities() { set(ignore); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(ignore); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=22;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(ignore)) { type = 18; return true; } + else if(equal(ignore)) { type = 19; return true; } + else if(equal(ignore)) { type = 20; return true; } + else if(equal(ignore)) { type = 21; return true; } + else if(equal(ignore)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(ignore);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(ignore);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(ignore);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(ignore);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(ignore);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_TargetCell_ID() { return set(3); } + ECGI const* get_id_TargetCell_ID() const { return get(3); } + GUMMEI& select_id_GUMMEI_ID() { return set(4); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(4); } + UE_ContextInformation& select_id_UE_ContextInformation() { return set(5); } + UE_ContextInformation const* get_id_UE_ContextInformation() const { return get(5); } + UE_HistoryInformation& select_id_UE_HistoryInformation() { return set(6); } + UE_HistoryInformation const* get_id_UE_HistoryInformation() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(9); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(9); } + MobilityInformation& select_id_MobilityInformation() { return set(10); } + MobilityInformation const* get_id_MobilityInformation() const { return get(10); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(11); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(11); } + UE_HistoryInformationFromTheUE& select_id_UE_HistoryInformationFromTheUE() { return set(12); } + UE_HistoryInformationFromTheUE const* get_id_UE_HistoryInformationFromTheUE() const { return get(12); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(13); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(13); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(14); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(14); } + UE_ContextReferenceAtSeNB& select_id_UE_ContextReferenceAtSeNB() { return set(15); } + UE_ContextReferenceAtSeNB const* get_id_UE_ContextReferenceAtSeNB() const { return get(15); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(16); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(16); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(17); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(17); } + UE_ContextReferenceAtWT& select_id_UE_ContextReferenceAtWT() { return set(18); } + UE_ContextReferenceAtWT const* get_id_UE_ContextReferenceAtWT() const { return get(18); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(19); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(19); } + UE_ContextReferenceAtSgNB& select_id_UE_ContextReferenceAtSgNB() { return set(20); } + UE_ContextReferenceAtSgNB const* get_id_UE_ContextReferenceAtSgNB() const { return get(20); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(21); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(21); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(22); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(22); } + bool is_unknown() const { return type == 23; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_TargetCell_ID()); return true; + case 4: v(select_id_GUMMEI_ID()); return true; + case 5: v(select_id_UE_ContextInformation()); return true; + case 6: v(select_id_UE_HistoryInformation()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_CSGMembershipStatus()); return true; + case 10: v(select_id_MobilityInformation()); return true; + case 11: v(select_id_Masked_IMEISV()); return true; + case 12: v(select_id_UE_HistoryInformationFromTheUE()); return true; + case 13: v(select_id_ExpectedUEBehaviour()); return true; + case 14: v(select_id_ProSeAuthorized()); return true; + case 15: v(select_id_UE_ContextReferenceAtSeNB()); return true; + case 16: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 17: v(select_id_V2XServicesAuthorized()); return true; + case 18: v(select_id_UE_ContextReferenceAtWT()); return true; + case 19: v(select_id_NRUESecurityCapabilities()); return true; + case 20: v(select_id_UE_ContextReferenceAtSgNB()); return true; + case 21: v(select_id_AerialUEsubscriptionInformation()); return true; + case 22: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 23: if(type != 23) {clear(); asn::base::set();} type = 23; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CSGMembershipStatus)]; + char dummy3[sizeof(Cause)]; + char dummy4[sizeof(ECGI)]; + char dummy5[sizeof(ExpectedUEBehaviour)]; + char dummy6[sizeof(GUMMEI)]; + char dummy7[sizeof(Masked_IMEISV)]; + char dummy8[sizeof(MobilityInformation)]; + char dummy9[sizeof(NRUESecurityCapabilities)]; + char dummy10[sizeof(ProSeAuthorized)]; + char dummy11[sizeof(SRVCCOperationPossible)]; + char dummy12[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy13[sizeof(TraceActivation)]; + char dummy14[sizeof(UE_ContextInformation)]; + char dummy15[sizeof(UE_ContextReferenceAtSeNB)]; + char dummy16[sizeof(UE_ContextReferenceAtSgNB)]; + char dummy17[sizeof(UE_ContextReferenceAtWT)]; + char dummy18[sizeof(UE_HistoryInformation)]; + char dummy19[sizeof(UE_HistoryInformationFromTheUE)]; + char dummy20[sizeof(UE_X2AP_ID)]; + char dummy21[sizeof(UE_X2AP_ID_Extension)]; + char dummy22[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_TargetCell_ID() { set(mandatory); type=3;} + void select_id_GUMMEI_ID() { set(mandatory); type=4;} + void select_id_UE_ContextInformation() { set(mandatory); type=5;} + void select_id_UE_HistoryInformation() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_CSGMembershipStatus() { set(optional); type=9;} + void select_id_MobilityInformation() { set(optional); type=10;} + void select_id_Masked_IMEISV() { set(optional); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(optional); type=12;} + void select_id_ExpectedUEBehaviour() { set(optional); type=13;} + void select_id_ProSeAuthorized() { set(optional); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(optional); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=16;} + void select_id_V2XServicesAuthorized() { set(optional); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(optional); type=18;} + void select_id_NRUESecurityCapabilities() { set(optional); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(optional); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=22;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(optional)) { type = 16; return true; } + else if(equal(optional)) { type = 17; return true; } + else if(equal(optional)) { type = 18; return true; } + else if(equal(optional)) { type = 19; return true; } + else if(equal(optional)) { type = 20; return true; } + else if(equal(optional)) { type = 21; return true; } + else if(equal(optional)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(optional);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(optional);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(optional);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(optional);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(optional);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(optional);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(optional);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, + ... +} +*/ + +struct HandoverRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-WT-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}, + ... +} +*/ + +struct HandoverRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_List() { set(id_E_RABs_Admitted_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(id_TargeteNBtoSource_eNBTransparentContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(id_WT_UE_ContextKeptIndicator); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_TargeteNBtoSource_eNBTransparentContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_WT_UE_ContextKeptIndicator)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_TargeteNBtoSource_eNBTransparentContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_WT_UE_ContextKeptIndicator);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(ignore); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_List& select_id_E_RABs_Admitted_List() { return set(3); } + E_RABs_Admitted_List const* get_id_E_RABs_Admitted_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + TargeteNBtoSource_eNBTransparentContainer& select_id_TargeteNBtoSource_eNBTransparentContainer() { return set(5); } + TargeteNBtoSource_eNBTransparentContainer const* get_id_TargeteNBtoSource_eNBTransparentContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(7); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(10); } + UE_ContextKeptIndicator& select_id_WT_UE_ContextKeptIndicator() { return set(11); } + UE_ContextKeptIndicator const* get_id_WT_UE_ContextKeptIndicator() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_TargeteNBtoSource_eNBTransparentContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_UE_ContextKeptIndicator()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_WT_UE_ContextKeptIndicator()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_List)]; + char dummy4[sizeof(TargeteNBtoSource_eNBTransparentContainer)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, + ... +} +*/ + +struct HandoverRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +LoadInformation-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , + ... +} +*/ + +struct LoadInformation_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(id_CellInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_List& select_id_CellInformation() { return set(1); } + CellInformation_List const* get_id_CellInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LoadInformation ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, + ... +} +*/ + +struct LoadInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "LoadInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementInitiationResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementInitiationResult_Item : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "MeasurementInitiationResult-Item";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + static constexpr bool optional = true; + + }; + measurementFailureCause_List_t& set_measurementFailureCause_List() { measurementFailureCause_List.setpresent(true); return measurementFailureCause_List;} + measurementFailureCause_List_t const* get_measurementFailureCause_List() const {return measurementFailureCause_List.is_valid() ? &measurementFailureCause_List : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE MeasurementInitiationResult-Item PRESENCE mandatory} +} +*/ + +struct MeasurementInitiationResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(id_MeasurementInitiationResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementInitiationResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementInitiationResult_Item& select_id_MeasurementInitiationResult_Item() { return set(1); } + MeasurementInitiationResult_Item const* get_id_MeasurementInitiationResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementInitiationResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementInitiationResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {MeasurementInitiationResult-ItemIEs} } +*/ + +struct MeasurementInitiationResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementInitiationResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementInitiationResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementInitiationResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(ECGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, + ... +} +*/ + +struct MobilityChangeAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(id_ENB2_Mobility_Parameters_Modification_Range); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_ENB2_Mobility_Parameters_Modification_Range)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Mobility_Parameters_Modification_Range);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(ignore); type=1;} + void select_id_ENB2_Cell_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MobilityParametersModificationRange& select_id_ENB2_Mobility_Parameters_Modification_Range() { return set(4); } + MobilityParametersModificationRange const* get_id_ENB2_Mobility_Parameters_Modification_Range() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_ENB2_Mobility_Parameters_Modification_Range()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(MobilityParametersModificationRange)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, + ... +} +*/ + +struct MobilityChangeFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory}| + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct MobilityChangeRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(id_ENB1_Mobility_Parameters); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(id_ENB2_Proposed_Mobility_Parameters); type=4;} + void select_id_Cause() { set(id_Cause); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_ENB1_Mobility_Parameters)) { type = 3; return true; } + else if(equal(id_ENB2_Proposed_Mobility_Parameters)) { type = 4; return true; } + else if(equal(id_Cause)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ENB1_Mobility_Parameters);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Proposed_Mobility_Parameters);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(ignore); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(reject); type=4;} + void select_id_Cause() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + MobilityParametersInformation& select_id_ENB1_Mobility_Parameters() { return set(3); } + MobilityParametersInformation const* get_id_ENB1_Mobility_Parameters() const { return get(3); } + MobilityParametersInformation& select_id_ENB2_Proposed_Mobility_Parameters() { return set(4); } + MobilityParametersInformation const* get_id_ENB2_Proposed_Mobility_Parameters() const { return get(4); } + Cause& select_id_Cause() { return set(5); } + Cause const* get_id_Cause() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_ENB1_Mobility_Parameters()); return true; + case 4: v(select_id_ENB2_Proposed_Mobility_Parameters()); return true; + case 5: v(select_id_Cause()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(MobilityParametersInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(optional); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(mandatory); type=4;} + void select_id_Cause() { set(mandatory); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, + ... +} +*/ + +struct MobilityChangeRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +PartialSuccessIndicator ::= ENUMERATED { + partial-success-allowed, +... +} +*/ + +struct PartialSuccessIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "PartialSuccessIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + partial_success_allowed + } index_t; + +}; + +/* +PrivateMessage-IEs X2AP-PRIVATE-IES ::= { + ... +} +*/ + +struct PrivateMessage_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} +*/ + +struct PrivateMessage : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "PrivateMessage";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct privateIEs_t : PrivateIE_Container + { + static constexpr const char* name() {return "privateIEs_t";} + using parent_t = PrivateIE_Container; + + }; + privateIEs_t& ref_privateIEs() {return privateIEs;} + privateIEs_t const& ref_privateIEs() const {return privateIEs;} + template void decode(V& v) + { + v(privateIEs); + + }; + template void encode(V& v) const + { + v(privateIEs); + + }; + void clear() + { + privateIEs.clear(); + + }; + private: + privateIEs_t privateIEs; + +}; +/* +RLFIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE RRCConnSetupIndicator PRESENCE optional}| + { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE RRCConnReestabIndicator PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct RLFIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=1;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=2;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=5;} + void select_id_RRCConnSetupIndicator() { set(id_RRCConnSetupIndicator); type=6;} + void select_id_RRCConnReestabIndicator() { set(id_RRCConnReestabIndicator); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_FailureCellPCI)) { type = 1; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 2; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 5; return true; } + else if(equal(id_RRCConnSetupIndicator)) { type = 6; return true; } + else if(equal(id_RRCConnReestabIndicator)) { type = 7; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RRCConnSetupIndicator);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RRCConnReestabIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(ignore); type=1;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=2;} + void select_id_FailureCellCRNTI() { set(ignore); type=3;} + void select_id_ShortMAC_I() { set(ignore); type=4;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=5;} + void select_id_RRCConnSetupIndicator() { set(reject); type=6;} + void select_id_RRCConnReestabIndicator() { set(ignore); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + PCI& select_id_FailureCellPCI() { return set(1); } + PCI const* get_id_FailureCellPCI() const { return get(1); } + ECGI& select_id_Re_establishmentCellECGI() { return set(2); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(2); } + CRNTI& select_id_FailureCellCRNTI() { return set(3); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(5); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(5); } + RRCConnSetupIndicator& select_id_RRCConnSetupIndicator() { return set(6); } + RRCConnSetupIndicator const* get_id_RRCConnSetupIndicator() const { return get(6); } + RRCConnReestabIndicator& select_id_RRCConnReestabIndicator() { return set(7); } + RRCConnReestabIndicator const* get_id_RRCConnReestabIndicator() const { return get(7); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(8); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_FailureCellPCI()); return true; + case 2: v(select_id_Re_establishmentCellECGI()); return true; + case 3: v(select_id_FailureCellCRNTI()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_UE_RLF_Report_Container()); return true; + case 6: v(select_id_RRCConnSetupIndicator()); return true; + case 7: v(select_id_RRCConnReestabIndicator()); return true; + case 8: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(RRCConnReestabIndicator)]; + char dummy5[sizeof(RRCConnSetupIndicator)]; + char dummy6[sizeof(ShortMAC_I)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(mandatory); type=1;} + void select_id_Re_establishmentCellECGI() { set(mandatory); type=2;} + void select_id_FailureCellCRNTI() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(optional); type=4;} + void select_id_UE_RLF_Report_Container() { set(optional); type=5;} + void select_id_RRCConnSetupIndicator() { set(optional); type=6;} + void select_id_RRCConnReestabIndicator() { set(optional); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLFIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, + ... +} +*/ + +struct RLFIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RLFIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RNL-Header-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RNL_Header_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RNL-Header ::= SEQUENCE { + source-GlobalENB-ID GlobalENB-ID, + target-GlobalENB-ID GlobalENB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RNL-Header-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RNL_Header : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "RNL-Header";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct source_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalENB_ID_t& ref_source_GlobalENB_ID() {return source_GlobalENB_ID;} + source_GlobalENB_ID_t const& ref_source_GlobalENB_ID() const {return source_GlobalENB_ID;} + struct target_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "target_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + static constexpr bool optional = true; + + }; + target_GlobalENB_ID_t& set_target_GlobalENB_ID() { target_GlobalENB_ID.setpresent(true); return target_GlobalENB_ID;} + target_GlobalENB_ID_t const* get_target_GlobalENB_ID() const {return target_GlobalENB_ID.is_valid() ? &target_GlobalENB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalENB_ID.clear(); + target_GlobalENB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalENB_ID_t source_GlobalENB_ID; + target_GlobalENB_ID_t target_GlobalENB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +RRCTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SplitSRB CRITICALITY reject TYPE SplitSRB PRESENCE optional}| + { ID id-UENRMeasurement CRITICALITY reject TYPE UENRMeasurement PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct RRCTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SplitSRB() { set(id_SplitSRB); type=3;} + void select_id_UENRMeasurement() { set(id_UENRMeasurement); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SplitSRB)) { type = 3; return true; } + else if(equal(id_UENRMeasurement)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SplitSRB);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_UENRMeasurement);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SplitSRB() { set(reject); type=3;} + void select_id_UENRMeasurement() { set(reject); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SplitSRB& select_id_SplitSRB() { return set(3); } + SplitSRB const* get_id_SplitSRB() const { return get(3); } + UENRMeasurement& select_id_UENRMeasurement() { return set(4); } + UENRMeasurement const* get_id_UENRMeasurement() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SplitSRB()); return true; + case 4: v(select_id_UENRMeasurement()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SgNB_UE_X2AP_ID)]; + char dummy2[sizeof(SplitSRB)]; + char dummy3[sizeof(UENRMeasurement)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SplitSRB() { set(optional); type=3;} + void select_id_UENRMeasurement() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RRCTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RRCTransfer-IEs}}, + ... +} +*/ + +struct RRCTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RRCTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ReportingPeriodicity ::= ENUMERATED { + one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} +*/ + +struct ReportingPeriodicity : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicity";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_thousand_ms + ,two_thousand_ms + ,five_thousand_ms + ,ten_thousand_ms + } index_t; + +}; + +/* +ResetRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct ResetRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, + ... +} +*/ + +struct ResetRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResetResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ResetResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, + ... +} +*/ + +struct ResetResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE CompleteFailureCauseInformation-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(id_CompleteFailureCauseInformation_List); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_CompleteFailureCauseInformation_List)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_List);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + CompleteFailureCauseInformation_List& select_id_CompleteFailureCauseInformation_List() { return set(5); } + CompleteFailureCauseInformation_List const* get_id_CompleteFailureCauseInformation_List() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_CompleteFailureCauseInformation_List()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CompleteFailureCauseInformation_List)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + char dummy4[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, + ... +} +*/ + +struct ResourceStatusFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”, “Partial stop” or to “Add”-- + { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory}| + { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional}| + { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory}| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}| + { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE PartialSuccessIndicator PRESENCE optional}| + { ID id-ReportingPeriodicityRSRPMR CRITICALITY ignore TYPE ReportingPeriodicityRSRPMR PRESENCE optional}| + { ID id-ReportingPeriodicityCSIR CRITICALITY ignore TYPE ReportingPeriodicityCSIR PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Registration_Request() { set(id_Registration_Request); type=3;} + void select_id_ReportCharacteristics() { set(id_ReportCharacteristics); type=4;} + void select_id_CellToReport() { set(id_CellToReport); type=5;} + void select_id_ReportingPeriodicity() { set(id_ReportingPeriodicity); type=6;} + void select_id_PartialSuccessIndicator() { set(id_PartialSuccessIndicator); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(id_ReportingPeriodicityRSRPMR); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(id_ReportingPeriodicityCSIR); type=9;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Registration_Request)) { type = 3; return true; } + else if(equal(id_ReportCharacteristics)) { type = 4; return true; } + else if(equal(id_CellToReport)) { type = 5; return true; } + else if(equal(id_ReportingPeriodicity)) { type = 6; return true; } + else if(equal(id_PartialSuccessIndicator)) { type = 7; return true; } + else if(equal(id_ReportingPeriodicityRSRPMR)) { type = 8; return true; } + else if(equal(id_ReportingPeriodicityCSIR)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Registration_Request);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReportCharacteristics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellToReport);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_ReportingPeriodicity);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_PartialSuccessIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_ReportingPeriodicityRSRPMR);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ReportingPeriodicityCSIR);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(ignore); type=2;} + void select_id_Registration_Request() { set(reject); type=3;} + void select_id_ReportCharacteristics() { set(reject); type=4;} + void select_id_CellToReport() { set(ignore); type=5;} + void select_id_ReportingPeriodicity() { set(ignore); type=6;} + void select_id_PartialSuccessIndicator() { set(ignore); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(ignore); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(ignore); type=9;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Registration_Request& select_id_Registration_Request() { return set(3); } + Registration_Request const* get_id_Registration_Request() const { return get(3); } + ReportCharacteristics& select_id_ReportCharacteristics() { return set(4); } + ReportCharacteristics const* get_id_ReportCharacteristics() const { return get(4); } + CellToReport_List& select_id_CellToReport() { return set(5); } + CellToReport_List const* get_id_CellToReport() const { return get(5); } + ReportingPeriodicity& select_id_ReportingPeriodicity() { return set(6); } + ReportingPeriodicity const* get_id_ReportingPeriodicity() const { return get(6); } + PartialSuccessIndicator& select_id_PartialSuccessIndicator() { return set(7); } + PartialSuccessIndicator const* get_id_PartialSuccessIndicator() const { return get(7); } + ReportingPeriodicityRSRPMR& select_id_ReportingPeriodicityRSRPMR() { return set(8); } + ReportingPeriodicityRSRPMR const* get_id_ReportingPeriodicityRSRPMR() const { return get(8); } + ReportingPeriodicityCSIR& select_id_ReportingPeriodicityCSIR() { return set(9); } + ReportingPeriodicityCSIR const* get_id_ReportingPeriodicityCSIR() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Registration_Request()); return true; + case 4: v(select_id_ReportCharacteristics()); return true; + case 5: v(select_id_CellToReport()); return true; + case 6: v(select_id_ReportingPeriodicity()); return true; + case 7: v(select_id_PartialSuccessIndicator()); return true; + case 8: v(select_id_ReportingPeriodicityRSRPMR()); return true; + case 9: v(select_id_ReportingPeriodicityCSIR()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_List)]; + char dummy2[sizeof(Measurement_ID)]; + char dummy3[sizeof(PartialSuccessIndicator)]; + char dummy4[sizeof(Registration_Request)]; + char dummy5[sizeof(ReportCharacteristics)]; + char dummy6[sizeof(ReportingPeriodicity)]; + char dummy7[sizeof(ReportingPeriodicityCSIR)]; + char dummy8[sizeof(ReportingPeriodicityRSRPMR)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(conditional); type=2;} + void select_id_Registration_Request() { set(mandatory); type=3;} + void select_id_ReportCharacteristics() { set(optional); type=4;} + void select_id_CellToReport() { set(mandatory); type=5;} + void select_id_ReportingPeriodicity() { set(optional); type=6;} + void select_id_PartialSuccessIndicator() { set(optional); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(optional); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(optional); type=9;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, + ... +} +*/ + +struct ResourceStatusRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE MeasurementInitiationResult-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeasurementInitiationResult_List() { set(id_MeasurementInitiationResult_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeasurementInitiationResult_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeasurementInitiationResult_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + MeasurementInitiationResult_List& select_id_MeasurementInitiationResult_List() { return set(4); } + MeasurementInitiationResult_List const* get_id_MeasurementInitiationResult_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeasurementInitiationResult_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeasurementInitiationResult_List)]; + char dummy3[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeasurementInitiationResult_List() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, + ... +} +*/ + +struct ResourceStatusResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, + ... +} +*/ + +struct ResourceStatusUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CellMeasurementResult() { set(id_CellMeasurementResult); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CellMeasurementResult)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CellMeasurementResult);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CellMeasurementResult() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CellMeasurementResult_List& select_id_CellMeasurementResult() { return set(3); } + CellMeasurementResult_List const* get_id_CellMeasurementResult() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CellMeasurementResult()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_List)]; + char dummy2[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CellMeasurementResult() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, + ... +} +*/ + +struct ResourceStatusUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItem : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp ::= CHOICE { + success ResponseInformationSeNBReconfComp-SuccessItem, + reject-by-MeNB ResponseInformationSeNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSeNBReconfComp() {clear();} + struct success_t : ResponseInformationSeNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_t";} + using parent_t = ResponseInformationSeNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_t : ResponseInformationSeNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_t";} + using parent_t = ResponseInformationSeNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_t& select_success() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_t const* get_success() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_t& select_reject_by_MeNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_t const* get_reject_by_MeNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_t)]; + char dummy2[sizeof(reject_by_MeNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ResponseInformationSgNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSgNBContainer MeNBtoSgNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSgNBContainer_t : MeNBtoSgNBContainer + { + static constexpr const char* name() {return "meNBtoSgNBContainer_t";} + using parent_t = MeNBtoSgNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSgNBContainer_t& set_meNBtoSgNBContainer() { meNBtoSgNBContainer.setpresent(true); return meNBtoSgNBContainer;} + meNBtoSgNBContainer_t const* get_meNBtoSgNBContainer() const {return meNBtoSgNBContainer.is_valid() ? &meNBtoSgNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSgNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSgNBContainer_t meNBtoSgNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp ::= CHOICE { + success-SgNBReconfComp ResponseInformationSgNBReconfComp-SuccessItem, + reject-by-MeNB-SgNBReconfComp ResponseInformationSgNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSgNBReconfComp() {clear();} + struct success_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_SgNBReconfComp_t& select_success_SgNBReconfComp() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_SgNBReconfComp_t const* get_success_SgNBReconfComp() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_SgNBReconfComp_t& select_reject_by_MeNB_SgNBReconfComp() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_SgNBReconfComp_t const* get_reject_by_MeNB_SgNBReconfComp() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_SgNBReconfComp_t)]; + char dummy2[sizeof(reject_by_MeNB_SgNBReconfComp_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RetrieveUEContextFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, + ... +} +*/ + +struct RetrieveUEContextFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RetrieveUEContextRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-resumeID CRITICALITY reject TYPE ResumeID PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY reject TYPE ShortMAC-I PRESENCE mandatory}| + { ID id-NewEUTRANCellIdentifier CRITICALITY reject TYPE EUTRANCellIdentifier PRESENCE mandatory}| + {ID id-FailureCellCRNTI CRITICALITY reject TYPE CRNTI PRESENCE optional}| + {ID id-FailureCellPCI CRITICALITY reject TYPE PCI PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=2;} + void select_id_resumeID() { set(id_resumeID); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(id_NewEUTRANCellIdentifier); type=5;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=6;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_resumeID)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_NewEUTRANCellIdentifier)) { type = 5; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 6; return true; } + else if(equal(id_FailureCellPCI)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_resumeID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NewEUTRANCellIdentifier);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=2;} + void select_id_resumeID() { set(reject); type=3;} + void select_id_ShortMAC_I() { set(reject); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(reject); type=5;} + void select_id_FailureCellCRNTI() { set(reject); type=6;} + void select_id_FailureCellPCI() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(2); } + ResumeID& select_id_resumeID() { return set(3); } + ResumeID const* get_id_resumeID() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + EUTRANCellIdentifier& select_id_NewEUTRANCellIdentifier() { return set(5); } + EUTRANCellIdentifier const* get_id_NewEUTRANCellIdentifier() const { return get(5); } + CRNTI& select_id_FailureCellCRNTI() { return set(6); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(6); } + PCI& select_id_FailureCellPCI() { return set(7); } + PCI const* get_id_FailureCellPCI() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_resumeID()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_NewEUTRANCellIdentifier()); return true; + case 6: v(select_id_FailureCellCRNTI()); return true; + case 7: v(select_id_FailureCellPCI()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(EUTRANCellIdentifier)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(ResumeID)]; + char dummy5[sizeof(ShortMAC_I)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_resumeID() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(mandatory); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(mandatory); type=5;} + void select_id_FailureCellCRNTI() { set(optional); type=6;} + void select_id_FailureCellPCI() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextRequest-IEs}}, + ... +} +*/ + +struct RetrieveUEContextRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationRetrieve-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationRetrieve_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(1); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationRetrieve ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-ListRetrieve E-RABs-ToBeSetup-ListRetrieve, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + managBasedMDTallowed ManagementBasedMDTallowed OPTIONAL, + managBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationRetrieve-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationRetrieve : asn::sequence<12, 0, true, 6> +{ + static constexpr const char* name() {return "UE-ContextInformationRetrieve";} + using parent_t = asn::sequence<12, 0, true, 6>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_ListRetrieve_t : E_RABs_ToBeSetup_ListRetrieve + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_ListRetrieve_t";} + using parent_t = E_RABs_ToBeSetup_ListRetrieve; + + }; + e_RABs_ToBeSetup_ListRetrieve_t& ref_e_RABs_ToBeSetup_ListRetrieve() {return e_RABs_ToBeSetup_ListRetrieve;} + e_RABs_ToBeSetup_ListRetrieve_t const& ref_e_RABs_ToBeSetup_ListRetrieve() const {return e_RABs_ToBeSetup_ListRetrieve;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct managBasedMDTallowed_t : ManagementBasedMDTallowed + { + static constexpr const char* name() {return "managBasedMDTallowed_t";} + using parent_t = ManagementBasedMDTallowed; + static constexpr bool optional = true; + + }; + managBasedMDTallowed_t& set_managBasedMDTallowed() { managBasedMDTallowed.setpresent(true); return managBasedMDTallowed;} + managBasedMDTallowed_t const* get_managBasedMDTallowed() const {return managBasedMDTallowed.is_valid() ? &managBasedMDTallowed : nullptr;} + struct managBasedMDTPLMNList_t : MDTPLMNList + { + static constexpr const char* name() {return "managBasedMDTPLMNList_t";} + using parent_t = MDTPLMNList; + static constexpr bool optional = true; + + }; + managBasedMDTPLMNList_t& set_managBasedMDTPLMNList() { managBasedMDTPLMNList.setpresent(true); return managBasedMDTPLMNList;} + managBasedMDTPLMNList_t const* get_managBasedMDTPLMNList() const {return managBasedMDTPLMNList.is_valid() ? &managBasedMDTPLMNList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_ListRetrieve.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + managBasedMDTallowed.clear(); + managBasedMDTPLMNList.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + managBasedMDTallowed_t managBasedMDTallowed; + managBasedMDTPLMNList_t managBasedMDTPLMNList; + iE_Extensions_t iE_Extensions; + +}; +/* +RetrieveUEContextResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformationRetrieve CRITICALITY reject TYPE UE-ContextInformationRetrieve PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(id_UE_ContextInformationRetrieve); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=11;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=12;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=15;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_GUMMEI_ID)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationRetrieve)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_Masked_IMEISV)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_ProSeAuthorized)) { type = 11; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 12; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 13; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 14; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationRetrieve);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_GUMMEI_ID() { set(reject); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(reject); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_Masked_IMEISV() { set(ignore); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_ProSeAuthorized() { set(ignore); type=11;} + void select_id_CriticalityDiagnostics() { set(ignore); type=12;} + void select_id_V2XServicesAuthorized() { set(ignore); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=15;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(3); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + GUMMEI& select_id_GUMMEI_ID() { return set(5); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(5); } + UE_ContextInformationRetrieve& select_id_UE_ContextInformationRetrieve() { return set(6); } + UE_ContextInformationRetrieve const* get_id_UE_ContextInformationRetrieve() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(9); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(11); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(11); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(12); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(12); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(13); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(13); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(14); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(14); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(15); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(15); } + bool is_unknown() const { return type == 16; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_GUMMEI_ID()); return true; + case 6: v(select_id_UE_ContextInformationRetrieve()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_Masked_IMEISV()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_ProSeAuthorized()); return true; + case 12: v(select_id_CriticalityDiagnostics()); return true; + case 13: v(select_id_V2XServicesAuthorized()); return true; + case 14: v(select_id_AerialUEsubscriptionInformation()); return true; + case 15: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 16: if(type != 16) {clear(); asn::base::set();} type = 16; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(GUMMEI)]; + char dummy5[sizeof(Masked_IMEISV)]; + char dummy6[sizeof(ProSeAuthorized)]; + char dummy7[sizeof(SRVCCOperationPossible)]; + char dummy8[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy9[sizeof(TraceActivation)]; + char dummy10[sizeof(UE_ContextInformationRetrieve)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + char dummy13[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_GUMMEI_ID() { set(mandatory); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_Masked_IMEISV() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_ProSeAuthorized() { set(optional); type=11;} + void select_id_CriticalityDiagnostics() { set(optional); type=12;} + void select_id_V2XServicesAuthorized() { set(optional); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=15;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, + ... +} +*/ + +struct RetrieveUEContextResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct SNStatusTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(id_E_RABs_SubjectToStatusTransfer_List); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToStatusTransfer_List)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToStatusTransfer_List& select_id_E_RABs_SubjectToStatusTransfer_List() { return set(3); } + E_RABs_SubjectToStatusTransfer_List const* get_id_E_RABs_SubjectToStatusTransfer_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToStatusTransfer_List()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SNStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, + ... +} +*/ + +struct SNStatusTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SNStatusTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-UE-SecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBSecurityKey CRITICALITY reject TYPE SeNBSecurityKey PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-List CRITICALITY reject TYPE E-RABs-ToBeAdded-List PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY reject TYPE MeNBtoSeNBContainer PRESENCE mandatory}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_UE_SecurityCapabilities() { set(id_UE_SecurityCapabilities); type=2;} + void select_id_SeNBSecurityKey() { set(id_SeNBSecurityKey); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(id_SeNBUEAggregateMaximumBitRate); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(id_E_RABs_ToBeAdded_List); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_UE_SecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SeNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SeNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_E_RABs_ToBeAdded_List)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 11; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UE_SecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SeNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SeNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_UE_SecurityCapabilities() { set(reject); type=2;} + void select_id_SeNBSecurityKey() { set(reject); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(reject); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UESecurityCapabilities& select_id_UE_SecurityCapabilities() { return set(2); } + UESecurityCapabilities const* get_id_UE_SecurityCapabilities() const { return get(2); } + SeNBSecurityKey& select_id_SeNBSecurityKey() { return set(3); } + SeNBSecurityKey const* get_id_SeNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SeNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SeNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + E_RABs_ToBeAdded_List& select_id_E_RABs_ToBeAdded_List() { return set(6); } + E_RABs_ToBeAdded_List const* get_id_E_RABs_ToBeAdded_List() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(9); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(11); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(11); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(12); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_UE_SecurityCapabilities()); return true; + case 3: v(select_id_SeNBSecurityKey()); return true; + case 4: v(select_id_SeNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_E_RABs_ToBeAdded_List()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_ExpectedUEBehaviour()); return true; + case 12: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(E_RABs_ToBeAdded_List)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(MeNBtoSeNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SeNBSecurityKey)]; + char dummy7[sizeof(UEAggregateMaximumBitRate)]; + char dummy8[sizeof(UESecurityCapabilities)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_UE_SecurityCapabilities() { set(conditional); type=2;} + void select_id_SeNBSecurityKey() { set(conditional); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(mandatory); type=6;} + void select_id_MeNBtoSeNBContainer() { set(mandatory); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_ExpectedUEBehaviour() { set(optional); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-List CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY reject TYPE SeNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(id_E_RABs_Admitted_ToBeAdded_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_GW_TransportLayerAddress() { set(id_GW_TransportLayerAddress); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(id_SIPTO_L_GW_TransportLayerAddress); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(id_Tunnel_Information_for_BBF); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_GW_TransportLayerAddress)) { type = 7; return true; } + else if(equal(id_SIPTO_L_GW_TransportLayerAddress)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_Tunnel_Information_for_BBF)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_GW_TransportLayerAddress);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SIPTO_L_GW_TransportLayerAddress);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Tunnel_Information_for_BBF);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SeNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_GW_TransportLayerAddress() { set(ignore); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_List& select_id_E_RABs_Admitted_ToBeAdded_List() { return set(3); } + E_RABs_Admitted_ToBeAdded_List const* get_id_E_RABs_Admitted_ToBeAdded_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(5); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + TransportLayerAddress& select_id_GW_TransportLayerAddress() { return set(7); } + TransportLayerAddress const* get_id_GW_TransportLayerAddress() const { return get(7); } + TransportLayerAddress& select_id_SIPTO_L_GW_TransportLayerAddress() { return set(8); } + TransportLayerAddress const* get_id_SIPTO_L_GW_TransportLayerAddress() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + TunnelInformation& select_id_Tunnel_Information_for_BBF() { return set(11); } + TunnelInformation const* get_id_Tunnel_Information_for_BBF() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SeNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_GW_TransportLayerAddress()); return true; + case 8: v(select_id_SIPTO_L_GW_TransportLayerAddress()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_Tunnel_Information_for_BBF()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_List)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(TransportLayerAddress)]; + char dummy6[sizeof(TunnelInformation)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SeNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_GW_TransportLayerAddress() { set(optional); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(id_E_RABs_SubjectToCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToCounterCheck_List& select_id_E_RABs_SubjectToCounterCheck_List() { return set(3); } + E_RABs_SubjectToCounterCheck_List const* get_id_E_RABs_SubjectToCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheck_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SeNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(3); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_MeNBtoSeNBContainer()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeNBtoSeNBContainer)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SeNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(4); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSeNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SeNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSeNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextInformationSeNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationSeNBModReq ::= SEQUENCE { + uE-SecurityCapabilities UESecurityCapabilities OPTIONAL, + seNB-SecurityKey SeNBSecurityKey OPTIONAL, + seNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-List-ModReq OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-List-ModReq OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-List-ModReq OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSeNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationSeNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformationSeNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct uE_SecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uE_SecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + static constexpr bool optional = true; + + }; + uE_SecurityCapabilities_t& set_uE_SecurityCapabilities() { uE_SecurityCapabilities.setpresent(true); return uE_SecurityCapabilities;} + uE_SecurityCapabilities_t const* get_uE_SecurityCapabilities() const {return uE_SecurityCapabilities.is_valid() ? &uE_SecurityCapabilities : nullptr;} + struct seNB_SecurityKey_t : SeNBSecurityKey + { + static constexpr const char* name() {return "seNB_SecurityKey_t";} + using parent_t = SeNBSecurityKey; + static constexpr bool optional = true; + + }; + seNB_SecurityKey_t& set_seNB_SecurityKey() { seNB_SecurityKey.setpresent(true); return seNB_SecurityKey;} + seNB_SecurityKey_t const* get_seNB_SecurityKey() const {return seNB_SecurityKey.is_valid() ? &seNB_SecurityKey : nullptr;} + struct seNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "seNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + seNBUEAggregateMaximumBitRate_t& set_seNBUEAggregateMaximumBitRate() { seNBUEAggregateMaximumBitRate.setpresent(true); return seNBUEAggregateMaximumBitRate;} + seNBUEAggregateMaximumBitRate_t const* get_seNBUEAggregateMaximumBitRate() const {return seNBUEAggregateMaximumBitRate.is_valid() ? &seNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + uE_SecurityCapabilities.clear(); + seNB_SecurityKey.clear(); + seNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + uE_SecurityCapabilities_t uE_SecurityCapabilities; + seNB_SecurityKey_t seNB_SecurityKey; + seNBUEAggregateMaximumBitRate_t seNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-UE-ContextInformationSeNBModReq CRITICALITY reject TYPE UE-ContextInformationSeNBModReq PRESENCE optional}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(id_UE_ContextInformationSeNBModReq); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationSeNBModReq)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationSeNBModReq);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + UE_ContextInformationSeNBModReq& select_id_UE_ContextInformationSeNBModReq() { return set(6); } + UE_ContextInformationSeNBModReq const* get_id_UE_ContextInformationSeNBModReq() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_UE_ContextInformationSeNBModReq()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(PLMN_Identity)]; + char dummy5[sizeof(SCGChangeIndication)]; + char dummy6[sizeof(UE_ContextInformationSeNBModReq)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(optional); type=6;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SeNBModificationRequest-IEs}}, + ... +} +*/ + +struct SeNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-ModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(id_E_RABs_Admitted_ToBeAdded_ModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(id_E_RABs_Admitted_ToBeModified_ModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(id_E_RABs_Admitted_ToBeReleased_ModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_ModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_ModAckList& select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_ModAckList const* get_id_E_RABs_Admitted_ToBeAdded_ModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_ModAckList& select_id_E_RABs_Admitted_ToBeModified_ModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_ModAckList const* get_id_E_RABs_Admitted_ToBeModified_ModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_ModAckList& select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_ModAckList const* get_id_E_RABs_Admitted_ToBeReleased_ModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(7); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_ModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SeNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_ModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_ModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_ModAckList)]; + char dummy6[sizeof(SeNBtoMeNBContainer)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-ModReqd CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqd PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(id_E_RABs_ToBeReleased_ModReqd); type=5;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_ModReqd)) { type = 5; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqd);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(ignore); type=5;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_ModReqd& select_id_E_RABs_ToBeReleased_ModReqd() { return set(5); } + E_RABs_ToBeReleased_ModReqd const* get_id_E_RABs_ToBeReleased_ModReqd() const { return get(5); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(6); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_ModReqd()); return true; + case 6: v(select_id_SeNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_ModReqd)]; + char dummy3[sizeof(SCGChangeIndication)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(optional); type=5;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequired-IEs}}, + ... +} +*/ + +struct SeNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSeNBReconfComp CRITICALITY ignore TYPE ResponseInformationSeNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(id_ResponseInformationSeNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSeNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSeNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSeNBReconfComp& select_id_ResponseInformationSeNBReconfComp() { return set(3); } + ResponseInformationSeNBReconfComp const* get_id_ResponseInformationSeNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSeNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSeNBReconfComp)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SeNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-List-RelConf CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelConf PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(id_E_RABs_ToBeReleased_List_RelConf); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelConf)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelConf);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_List_RelConf& select_id_E_RABs_ToBeReleased_List_RelConf() { return set(3); } + E_RABs_ToBeReleased_List_RelConf const* get_id_E_RABs_ToBeReleased_List_RelConf() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_List_RelConf()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelConf)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SeNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-List-RelReq CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelReq PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MakeBeforeBreakIndicator CRITICALITY ignore TYPE MakeBeforeBreakIndicator PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(id_E_RABs_ToBeReleased_List_RelReq); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(id_MakeBeforeBreakIndicator); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelReq)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_MakeBeforeBreakIndicator)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelReq);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MakeBeforeBreakIndicator);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_List_RelReq& select_id_E_RABs_ToBeReleased_List_RelReq() { return set(4); } + E_RABs_ToBeReleased_List_RelReq const* get_id_E_RABs_ToBeReleased_List_RelReq() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + MakeBeforeBreakIndicator& select_id_MakeBeforeBreakIndicator() { return set(8); } + MakeBeforeBreakIndicator const* get_id_MakeBeforeBreakIndicator() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_List_RelReq()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_MakeBeforeBreakIndicator()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelReq)]; + char dummy3[sizeof(MakeBeforeBreakIndicator)]; + char dummy4[sizeof(UE_ContextKeptIndicator)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SecondaryRATDataUsageReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SecondaryRATUsageReportList CRITICALITY reject TYPE SecondaryRATUsageReportList PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SecondaryRATDataUsageReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SecondaryRATUsageReportList() { set(id_SecondaryRATUsageReportList); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SecondaryRATUsageReportList)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReportList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SecondaryRATUsageReportList() { set(reject); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SecondaryRATUsageReportList& select_id_SecondaryRATUsageReportList() { return set(3); } + SecondaryRATUsageReportList const* get_id_SecondaryRATUsageReportList() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SecondaryRATUsageReportList()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReportList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SecondaryRATUsageReportList() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, + ... +} +*/ + +struct SecondaryRATDataUsageReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SecondaryRATDataUsageReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBActivityNotification-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-UEContextLevelUserPlaneActivity CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional}| + { ID id-ERABActivityNotifyItemList CRITICALITY ignore TYPE ERABActivityNotifyItemList PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBActivityNotification_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(id_UEContextLevelUserPlaneActivity); type=3;} + void select_id_ERABActivityNotifyItemList() { set(id_ERABActivityNotifyItemList); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_UEContextLevelUserPlaneActivity)) { type = 3; return true; } + else if(equal(id_ERABActivityNotifyItemList)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UEContextLevelUserPlaneActivity);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ERABActivityNotifyItemList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(ignore); type=3;} + void select_id_ERABActivityNotifyItemList() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + UserPlaneTrafficActivityReport& select_id_UEContextLevelUserPlaneActivity() { return set(3); } + UserPlaneTrafficActivityReport const* get_id_UEContextLevelUserPlaneActivity() const { return get(3); } + ERABActivityNotifyItemList& select_id_ERABActivityNotifyItemList() { return set(4); } + ERABActivityNotifyItemList const* get_id_ERABActivityNotifyItemList() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_UEContextLevelUserPlaneActivity()); return true; + case 4: v(select_id_ERABActivityNotifyItemList()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ERABActivityNotifyItemList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + char dummy5[sizeof(UserPlaneTrafficActivityReport)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(optional); type=3;} + void select_id_ERABActivityNotifyItemList() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBActivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBActivityNotification-IEs}}, + ... +} +*/ + +struct SgNBActivityNotification : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBActivityNotification";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-NRUESecurityCapabilities CRITICALITY reject TYPE NRUESecurityCapabilities PRESENCE mandatory}| + { ID id-SgNBSecurityKey CRITICALITY reject TYPE SgNBSecurityKey PRESENCE mandatory}| + { ID id-SgNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-SgNBAddReqList CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReqList PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-SGNB-Addition-Trigger-Ind CRITICALITY reject TYPE SGNB-Addition-Trigger-Ind PRESENCE optional}| + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| + { ID id-MeNBCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}, + ... +} +*/ + +struct SgNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=2;} + void select_id_SgNBSecurityKey() { set(id_SgNBSecurityKey); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(id_SgNBUEAggregateMaximumBitRate); type=4;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=5;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(id_E_RABs_ToBeAdded_SgNBAddReqList); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=11;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(id_SGNB_Addition_Trigger_Ind); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=15;} + void select_id_MeNBCell_ID() { set(id_MeNBCell_ID); type=16;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SgNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SgNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_SelectedPLMN)) { type = 5; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 6; return true; } + else if(equal(id_E_RABs_ToBeAdded_SgNBAddReqList)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 12; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 13; return true; } + else if(equal(id_SGNB_Addition_Trigger_Ind)) { type = 14; return true; } + else if(equal(id_SubscriberProfileIDforRFP)) { type = 15; return true; } + else if(equal(id_MeNBCell_ID)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SgNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SgNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReqList);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_SGNB_Addition_Trigger_Ind);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_MeNBCell_ID);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_NRUESecurityCapabilities() { set(reject); type=2;} + void select_id_SgNBSecurityKey() { set(reject); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_SelectedPLMN() { set(ignore); type=5;} + void select_id_HandoverRestrictionList() { set(ignore); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=11;} + void select_id_RequestedSplitSRBs() { set(reject); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(reject); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=15;} + void select_id_MeNBCell_ID() { set(reject); type=16;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(2); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(2); } + SgNBSecurityKey& select_id_SgNBSecurityKey() { return set(3); } + SgNBSecurityKey const* get_id_SgNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SgNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SgNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_SelectedPLMN() { return set(5); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(5); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(6); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(6); } + E_RABs_ToBeAdded_SgNBAddReqList& select_id_E_RABs_ToBeAdded_SgNBAddReqList() { return set(7); } + E_RABs_ToBeAdded_SgNBAddReqList const* get_id_E_RABs_ToBeAdded_SgNBAddReqList() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(9); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(11); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(12); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(13); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(13); } + SGNB_Addition_Trigger_Ind& select_id_SGNB_Addition_Trigger_Ind() { return set(14); } + SGNB_Addition_Trigger_Ind const* get_id_SGNB_Addition_Trigger_Ind() const { return get(14); } + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(15); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(15); } + ECGI& select_id_MeNBCell_ID() { return set(16); } + ECGI const* get_id_MeNBCell_ID() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_NRUESecurityCapabilities()); return true; + case 3: v(select_id_SgNBSecurityKey()); return true; + case 4: v(select_id_SgNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_SelectedPLMN()); return true; + case 6: v(select_id_HandoverRestrictionList()); return true; + case 7: v(select_id_E_RABs_ToBeAdded_SgNBAddReqList()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 12: v(select_id_RequestedSplitSRBs()); return true; + case 13: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 14: v(select_id_SGNB_Addition_Trigger_Ind()); return true; + case 15: v(select_id_SubscriberProfileIDforRFP()); return true; + case 16: v(select_id_MeNBCell_ID()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(E_RABs_ToBeAdded_SgNBAddReqList)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(HandoverRestrictionList)]; + char dummy5[sizeof(MeNBResourceCoordinationInformation)]; + char dummy6[sizeof(MeNBtoSgNBContainer)]; + char dummy7[sizeof(NRUESecurityCapabilities)]; + char dummy8[sizeof(PLMN_Identity)]; + char dummy9[sizeof(SGNB_Addition_Trigger_Ind)]; + char dummy10[sizeof(SgNBSecurityKey)]; + char dummy11[sizeof(SgNB_UE_X2AP_ID)]; + char dummy12[sizeof(SplitSRBs)]; + char dummy13[sizeof(SubscriberProfileIDforRFP)]; + char dummy14[sizeof(UEAggregateMaximumBitRate)]; + char dummy15[sizeof(UE_X2AP_ID)]; + char dummy16[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_NRUESecurityCapabilities() { set(mandatory); type=2;} + void select_id_SgNBSecurityKey() { set(mandatory); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_SelectedPLMN() { set(optional); type=5;} + void select_id_HandoverRestrictionList() { set(optional); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(mandatory); type=7;} + void select_id_MeNBtoSgNBContainer() { set(mandatory); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=11;} + void select_id_RequestedSplitSRBs() { set(optional); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(optional); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=15;} + void select_id_MeNBCell_ID() { set(mandatory); type=16;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(mandatory)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(mandatory)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(mandatory);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(mandatory);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_AdmittedSplitSRBs() { set(reject); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(8); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_AdmittedSplitSRBs()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)]; + char dummy4[sizeof(RRC_Config_Ind)]; + char dummy5[sizeof(SgNBResourceCoordinationInformation)]; + char dummy6[sizeof(SgNB_UE_X2AP_ID)]; + char dummy7[sizeof(SgNBtoMeNBContainer)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SgNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_AdmittedSplitSRBs() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBChaConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(id_E_RABs_ToBeReleased_SgNBChaConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBChaConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBChaConfList& select_id_E_RABs_ToBeReleased_SgNBChaConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBChaConfList const* get_id_E_RABs_ToBeReleased_SgNBChaConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBChaConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBChaConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeConfirm-IEs}}, + ... +} +*/ + +struct SgNBChangeConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRefuse-IEs}}, + ... +} +*/ + +struct SgNBChangeRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Target-SgNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Target_SgNB_ID() { set(id_Target_SgNB_ID); type=3;} + void select_id_Cause() { set(id_Cause); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Target_SgNB_ID)) { type = 3; return true; } + else if(equal(id_Cause)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Target_SgNB_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Target_SgNB_ID() { set(reject); type=3;} + void select_id_Cause() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + GlobalGNB_ID& select_id_Target_SgNB_ID() { return set(3); } + GlobalGNB_ID const* get_id_Target_SgNB_ID() const { return get(3); } + Cause& select_id_Cause() { return set(4); } + Cause const* get_id_Cause() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Target_SgNB_ID()); return true; + case 4: v(select_id_Cause()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(GlobalGNB_ID)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(SgNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Target_SgNB_ID() { set(mandatory); type=3;} + void select_id_Cause() { set(mandatory); type=4;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRequired-IEs}}, + ... +} +*/ + +struct SgNBChangeRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToSgNBCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(id_E_RABs_SubjectToSgNBCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToSgNBCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToSgNBCounterCheck_List& select_id_E_RABs_SubjectToSgNBCounterCheck_List() { return set(3); } + E_RABs_SubjectToSgNBCounterCheck_List const* get_id_E_RABs_SubjectToSgNBCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToSgNBCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SgNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-AdmittedToBeModified-SgNBModConfList CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConfList PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(id_E_RABs_AdmittedToBeModified_SgNBModConfList); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_AdmittedToBeModified_SgNBModConfList& select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { return set(3); } + E_RABs_AdmittedToBeModified_SgNBModConfList const* get_id_E_RABs_AdmittedToBeModified_SgNBModConfList() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(7); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConfList()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_AdmittedToBeModified_SgNBModConfList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(SgNB_UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(optional); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SgNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SgNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSgNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore EXTENSION SubscriberProfileIDforRFP PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationSgNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SubscriberProfileIDforRFP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(1); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SubscriberProfileIDforRFP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SubscriberProfileIDforRFP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation-SgNBModReq ::= SEQUENCE { + nRUE-SecurityCapabilities NRUESecurityCapabilities OPTIONAL, + sgNB-SecurityKey SgNBSecurityKey OPTIONAL, + sgNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-SgNBModReq-List OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-SgNBModReq-List OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-SgNBModReq-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSgNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation_SgNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformation-SgNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct nRUE_SecurityCapabilities_t : NRUESecurityCapabilities + { + static constexpr const char* name() {return "nRUE_SecurityCapabilities_t";} + using parent_t = NRUESecurityCapabilities; + static constexpr bool optional = true; + + }; + nRUE_SecurityCapabilities_t& set_nRUE_SecurityCapabilities() { nRUE_SecurityCapabilities.setpresent(true); return nRUE_SecurityCapabilities;} + nRUE_SecurityCapabilities_t const* get_nRUE_SecurityCapabilities() const {return nRUE_SecurityCapabilities.is_valid() ? &nRUE_SecurityCapabilities : nullptr;} + struct sgNB_SecurityKey_t : SgNBSecurityKey + { + static constexpr const char* name() {return "sgNB_SecurityKey_t";} + using parent_t = SgNBSecurityKey; + static constexpr bool optional = true; + + }; + sgNB_SecurityKey_t& set_sgNB_SecurityKey() { sgNB_SecurityKey.setpresent(true); return sgNB_SecurityKey;} + sgNB_SecurityKey_t const* get_sgNB_SecurityKey() const {return sgNB_SecurityKey.is_valid() ? &sgNB_SecurityKey : nullptr;} + struct sgNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "sgNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + sgNBUEAggregateMaximumBitRate_t& set_sgNBUEAggregateMaximumBitRate() { sgNBUEAggregateMaximumBitRate.setpresent(true); return sgNBUEAggregateMaximumBitRate;} + sgNBUEAggregateMaximumBitRate_t const* get_sgNBUEAggregateMaximumBitRate() const {return sgNBUEAggregateMaximumBitRate.is_valid() ? &sgNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + nRUE_SecurityCapabilities.clear(); + sgNB_SecurityKey.clear(); + sgNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + nRUE_SecurityCapabilities_t nRUE_SecurityCapabilities; + sgNB_SecurityKey_t sgNB_SecurityKey; + sgNBUEAggregateMaximumBitRate_t sgNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional}| + { ID id-UE-ContextInformation-SgNBModReq CRITICALITY reject TYPE UE-ContextInformation-SgNBModReq PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RequestedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=4;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=5;} + void select_id_SCGConfigurationQuery() { set(id_SCGConfigurationQuery); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(id_UE_ContextInformation_SgNBModReq); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=10;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(id_RequestedSplitSRBsrelease); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SelectedPLMN)) { type = 4; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 5; return true; } + else if(equal(id_SCGConfigurationQuery)) { type = 6; return true; } + else if(equal(id_UE_ContextInformation_SgNBModReq)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBsrelease)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SCGConfigurationQuery);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextInformation_SgNBModReq);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBsrelease);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SelectedPLMN() { set(ignore); type=4;} + void select_id_HandoverRestrictionList() { set(ignore); type=5;} + void select_id_SCGConfigurationQuery() { set(ignore); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_RequestedSplitSRBs() { set(ignore); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(ignore); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PLMN_Identity& select_id_SelectedPLMN() { return set(4); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(4); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(5); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(5); } + SCGConfigurationQuery& select_id_SCGConfigurationQuery() { return set(6); } + SCGConfigurationQuery const* get_id_SCGConfigurationQuery() const { return get(6); } + UE_ContextInformation_SgNBModReq& select_id_UE_ContextInformation_SgNBModReq() { return set(7); } + UE_ContextInformation_SgNBModReq const* get_id_UE_ContextInformation_SgNBModReq() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(10); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBsrelease() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SelectedPLMN()); return true; + case 5: v(select_id_HandoverRestrictionList()); return true; + case 6: v(select_id_SCGConfigurationQuery()); return true; + case 7: v(select_id_UE_ContextInformation_SgNBModReq()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 11: v(select_id_RequestedSplitSRBs()); return true; + case 12: v(select_id_RequestedSplitSRBsrelease()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(HandoverRestrictionList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SCGConfigurationQuery)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_ContextInformation_SgNBModReq)]; + char dummy10[sizeof(UE_X2AP_ID)]; + char dummy11[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SelectedPLMN() { set(optional); type=4;} + void select_id_HandoverRestrictionList() { set(optional); type=5;} + void select_id_SCGConfigurationQuery() { set(optional); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(optional); type=7;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_RequestedSplitSRBs() { set(optional); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SgNBModificationRequest-IEs}}, + ... +} +*/ + +struct SgNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-AdmittedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=10;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(id_AdmittedSplitSRBsrelease); type=12;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=13;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 11; return true; } + else if(equal(id_AdmittedSplitSRBsrelease)) { type = 12; return true; } + else if(equal(id_RRCConfigIndication)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBsrelease);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_AdmittedSplitSRBs() { set(ignore); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(ignore); type=12;} + void select_id_RRCConfigIndication() { set(reject); type=13;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_SgNBModAckList& select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(7); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(10); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_AdmittedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_AdmittedSplitSRBsrelease() const { return get(12); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(13); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(13); } + bool is_unknown() const { return type == 14; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SgNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 11: v(select_id_AdmittedSplitSRBs()); return true; + case 12: v(select_id_AdmittedSplitSRBsrelease()); return true; + case 13: v(select_id_RRCConfigIndication()); return true; + case 14: if(type != 14) {clear(); asn::base::set();} type = 14; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_SgNBModAckList)]; + char dummy6[sizeof(RRC_Config_Ind)]; + char dummy7[sizeof(SgNBResourceCoordinationInformation)]; + char dummy8[sizeof(SgNB_UE_X2AP_ID)]; + char dummy9[sizeof(SgNBtoMeNBContainer)]; + char dummy10[sizeof(SplitSRBs)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_AdmittedSplitSRBs() { set(optional); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(optional); type=12;} + void select_id_RRCConfigIndication() { set(optional); type=13;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-E-RABs-ToBeModified-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_PDCPChangeIndication() { set(id_PDCPChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(id_E_RABs_ToBeReleased_SgNBModReqdList); type=5;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(id_E_RABs_ToBeModified_SgNBModReqdList); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_PDCPChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBModReqdList)) { type = 5; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_E_RABs_ToBeModified_SgNBModReqdList)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_PDCPChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqdList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqdList);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_PDCPChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(ignore); type=5;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(ignore); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PDCPChangeIndication& select_id_PDCPChangeIndication() { return set(4); } + PDCPChangeIndication const* get_id_PDCPChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_SgNBModReqdList& select_id_E_RABs_ToBeReleased_SgNBModReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBModReqdList const* get_id_E_RABs_ToBeReleased_SgNBModReqdList() const { return get(5); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(6); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + E_RABs_ToBeModified_SgNBModReqdList& select_id_E_RABs_ToBeModified_SgNBModReqdList() { return set(8); } + E_RABs_ToBeModified_SgNBModReqdList const* get_id_E_RABs_ToBeModified_SgNBModReqdList() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_PDCPChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBModReqdList()); return true; + case 6: v(select_id_SgNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_E_RABs_ToBeModified_SgNBModReqdList()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeModified_SgNBModReqdList)]; + char dummy3[sizeof(E_RABs_ToBeReleased_SgNBModReqdList)]; + char dummy4[sizeof(PDCPChangeIndication)]; + char dummy5[sizeof(RRC_Config_Ind)]; + char dummy6[sizeof(SgNBResourceCoordinationInformation)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SgNBtoMeNBContainer)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_PDCPChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(optional); type=5;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequired-IEs}}, + ... +} +*/ + +struct SgNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSgNBReconfComp CRITICALITY ignore TYPE ResponseInformationSgNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(id_ResponseInformationSgNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSgNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSgNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSgNBReconfComp& select_id_ResponseInformationSgNBReconfComp() { return set(3); } + ResponseInformationSgNBReconfComp const* get_id_ResponseInformationSgNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSgNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSgNBReconfComp)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SgNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(id_E_RABs_ToBeReleased_SgNBRelConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBRelConfList& select_id_E_RABs_ToBeReleased_SgNBRelConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBRelConfList const* get_id_E_RABs_ToBeReleased_SgNBRelConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBRelConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SgNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelReqList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqList PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(id_E_RABs_ToBeReleased_SgNBRelReqList); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqList)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_SgNBRelReqList& select_id_E_RABs_ToBeReleased_SgNBRelReqList() { return set(4); } + E_RABs_ToBeReleased_SgNBRelReqList const* get_id_E_RABs_ToBeReleased_SgNBRelReqList() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(7); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_SgNBRelReqList()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBtoSgNBContainer()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqList)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestReject-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-ToBeReleased-SgNBRelReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqdList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(id_E_RABs_ToBeReleased_SgNBRelReqdList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqdList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqdList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_ToBeReleased_SgNBRelReqdList& select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBRelReqdList const* get_id_E_RABs_ToBeReleased_SgNBRelReqdList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBRelReqdList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqdList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SIPTO-BearerDeactivationIndication CRITICALITY ignore TYPE SIPTOBearerDeactivationIndication PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct UEContextRelease_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(id_SIPTO_BearerDeactivationIndication); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SIPTO_BearerDeactivationIndication)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SIPTO_BearerDeactivationIndication);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(ignore); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(4); } + SIPTOBearerDeactivationIndication& select_id_SIPTO_BearerDeactivationIndication() { return set(5); } + SIPTOBearerDeactivationIndication const* get_id_SIPTO_BearerDeactivationIndication() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SIPTO_BearerDeactivationIndication()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SIPTOBearerDeactivationIndication)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEContextRelease ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, + ... +} +*/ + +struct UEContextRelease : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "UEContextRelease";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2AP-Message ::= OCTET STRING +*/ + +struct X2AP_Message : asn::ostring<> +{ + static constexpr const char* name() {return "X2AP-Message";} + using parent_t = asn::ostring<>; + +}; + +/* +X2APMessageTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RNL-Header CRITICALITY reject TYPE RNL-Header PRESENCE mandatory}| + { ID id-x2APMessage CRITICALITY reject TYPE X2AP-Message PRESENCE optional}, + ... +} +*/ + +struct X2APMessageTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(id_RNL_Header); type=1;} + void select_id_x2APMessage() { set(id_x2APMessage); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RNL_Header)) { type = 1; return true; } + else if(equal(id_x2APMessage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RNL_Header);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_x2APMessage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(reject); type=1;} + void select_id_x2APMessage() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RNL_Header& select_id_RNL_Header() { return set(1); } + RNL_Header const* get_id_RNL_Header() const { return get(1); } + X2AP_Message& select_id_x2APMessage() { return set(2); } + X2AP_Message const* get_id_x2APMessage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RNL_Header()); return true; + case 2: v(select_id_x2APMessage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RNL_Header)]; + char dummy2[sizeof(X2AP_Message)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(mandatory); type=1;} + void select_id_x2APMessage() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2APMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2APMessageTransfer-IEs}}, + ... +} +*/ + +struct X2APMessageTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2APMessageTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2Release-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, +... +} +*/ + +struct X2Release_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2Release ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2Release-IEs}}, + ... +} +*/ + +struct X2Release : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2Release";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalFailure-IEs}}, + ... +} +*/ + +struct X2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-X2RemovalThreshold CRITICALITY reject TYPE X2BenefitValue PRESENCE optional}, +... +} +*/ + +struct X2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_X2RemovalThreshold() { set(id_X2RemovalThreshold); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_X2RemovalThreshold)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_X2RemovalThreshold);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_X2RemovalThreshold() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + X2BenefitValue& select_id_X2RemovalThreshold() { return set(2); } + X2BenefitValue const* get_id_X2RemovalThreshold() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_X2RemovalThreshold()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(X2BenefitValue)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_X2RemovalThreshold() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalRequest-IEs}}, + ... +} +*/ + +struct X2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalResponse-IEs}}, + ... +} +*/ + +struct X2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupFailure-IEs X2AP-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 }, + + ... +} +*/ + +struct X2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, + ... +} +*/ + +struct X2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, +... +} +*/ + +struct X2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_LHN_ID() { set(id_LHN_ID); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_LHN_ID)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_LHN_ID() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + LHN_ID& select_id_LHN_ID() { return set(4); } + LHN_ID const* get_id_LHN_ID() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_LHN_ID()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GUGroupIDList)]; + char dummy2[sizeof(GlobalENB_ID)]; + char dummy3[sizeof(LHN_ID)]; + char dummy4[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_LHN_ID() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, + ... +} +*/ + +struct X2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, + ... +} +*/ + +struct X2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_LHN_ID() { set(id_LHN_ID); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_LHN_ID)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_LHN_ID() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + LHN_ID& select_id_LHN_ID() { return set(5); } + LHN_ID const* get_id_LHN_ID() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_LHN_ID()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(GlobalENB_ID)]; + char dummy4[sizeof(LHN_ID)]; + char dummy5[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_LHN_ID() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, + ... +} +*/ + +struct X2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..5fbef04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp @@ -0,0 +1,1537 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" + +/* +X2AP-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] +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { + X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + HandoverRequest& select_id_handoverPreparation() { return set(1); } + HandoverRequest const* get_id_handoverPreparation() const { return get(1); } + ResetRequest& select_id_reset() { return set(2); } + ResetRequest const* get_id_reset() const { return get(2); } + X2SetupRequest& select_id_x2Setup() { return set(3); } + X2SetupRequest const* get_id_x2Setup() const { return get(3); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeRequest& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationRequest& select_id_cellActivation() { return set(7); } + CellActivationRequest const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalRequest& select_id_x2Removal() { return set(12); } + X2RemovalRequest const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextRequest& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeRequired& select_id_sgNBChange() { return set(19); } + SgNBChangeRequired const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationRequest& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetRequired& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalRequest& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get(25); } + SNStatusTransfer& select_id_snStatusTransfer() { return set(26); } + SNStatusTransfer const* get_id_snStatusTransfer() const { return get(26); } + UEContextRelease& select_id_uEContextRelease() { return set(27); } + UEContextRelease const* get_id_uEContextRelease() const { return get(27); } + HandoverCancel& select_id_handoverCancel() { return set(28); } + HandoverCancel const* get_id_handoverCancel() const { return get(28); } + ErrorIndication& select_id_errorIndication() { return set(29); } + ErrorIndication const* get_id_errorIndication() const { return get(29); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(30); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(30); } + LoadInformation& select_id_loadIndication() { return set(31); } + LoadInformation const* get_id_loadIndication() const { return get(31); } + PrivateMessage& select_id_privateMessage() { return set(32); } + PrivateMessage const* get_id_privateMessage() const { return get(32); } + RLFIndication& select_id_rLFIndication() { return set(33); } + RLFIndication const* get_id_rLFIndication() const { return get(33); } + HandoverReport& select_id_handoverReport() { return set(34); } + HandoverReport const* get_id_handoverReport() const { return get(34); } + X2Release& select_id_x2Release() { return set(35); } + X2Release const* get_id_x2Release() const { return get(35); } + X2APMessageTransfer& select_id_x2APMessageTransfer() { return set(36); } + X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get(36); } + SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set(37); } + SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get(37); } + SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set(38); } + SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get(38); } + SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set(39); } + SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get(39); } + SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set(40); } + SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get(40); } + SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set(41); } + SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get(41); } + RRCTransfer& select_id_rRCTransfer() { return set(42); } + RRCTransfer const* get_id_rRCTransfer() const { return get(42); } + SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set(43); } + SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get(43); } + SgNBActivityNotification& select_id_SgNBActivityNotification() { return set(44); } + SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get(44); } + DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set(45); } + DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get(45); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + case 26: var.destroy(); break; + case 27: var.destroy(); break; + case 28: var.destroy(); break; + case 29: var.destroy(); break; + case 30: var.destroy(); break; + case 31: var.destroy(); break; + case 32: var.destroy(); break; + case 33: var.destroy(); break; + case 34: var.destroy(); break; + case 35: var.destroy(); break; + case 36: var.destroy(); break; + case 37: var.destroy(); break; + case 38: var.destroy(); break; + case 39: var.destroy(); break; + case 40: var.destroy(); break; + case 41: var.destroy(); break; + case 42: var.destroy(); break; + case 43: var.destroy(); break; + case 44: var.destroy(); break; + case 45: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + v.template operator()(26); + v.template operator()(27); + v.template operator()(28); + v.template operator()(29); + v.template operator()(30); + v.template operator()(31); + v.template operator()(32); + v.template operator()(33); + v.template operator()(34); + v.template operator()(35); + v.template operator()(36); + v.template operator()(37); + v.template operator()(38); + v.template operator()(39); + v.template operator()(40); + v.template operator()(41); + v.template operator()(42); + v.template operator()(43); + v.template operator()(44); + v.template operator()(45); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 26: v(select_id_snStatusTransfer()); return true; + case 27: v(select_id_uEContextRelease()); return true; + case 28: v(select_id_handoverCancel()); return true; + case 29: v(select_id_errorIndication()); return true; + case 30: v(select_id_resourceStatusReporting()); return true; + case 31: v(select_id_loadIndication()); return true; + case 32: v(select_id_privateMessage()); return true; + case 33: v(select_id_rLFIndication()); return true; + case 34: v(select_id_handoverReport()); return true; + case 35: v(select_id_x2Release()); return true; + case 36: v(select_id_x2APMessageTransfer()); return true; + case 37: v(select_id_seNBReconfigurationCompletion()); return true; + case 38: v(select_id_meNBinitiatedSeNBRelease()); return true; + case 39: v(select_id_seNBCounterCheck()); return true; + case 40: v(select_id_sgNBReconfigurationCompletion()); return true; + case 41: v(select_id_sgNBCounterCheck()); return true; + case 42: v(select_id_rRCTransfer()); return true; + case 43: v(select_id_secondaryRATDataUsageReport()); return true; + case 44: v(select_id_SgNBActivityNotification()); return true; + case 45: v(select_id_dataForwardingAddressIndication()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + case 26: v(var.as()); return true; + case 27: v(var.as()); return true; + case 28: v(var.as()); return true; + case 29: v(var.as()); return true; + case 30: v(var.as()); return true; + case 31: v(var.as()); return true; + case 32: v(var.as()); return true; + case 33: v(var.as()); return true; + case 34: v(var.as()); return true; + case 35: v(var.as()); return true; + case 36: v(var.as()); return true; + case 37: v(var.as()); return true; + case 38: v(var.as()); return true; + case 39: v(var.as()); return true; + case 40: v(var.as()); return true; + case 41: v(var.as()); return true; + case 42: v(var.as()); return true; + case 43: v(var.as()); return true; + case 44: v(var.as()); return true; + case 45: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationRequest)]; + char dummy2[sizeof(DataForwardingAddressIndication)]; + char dummy3[sizeof(ENBConfigurationUpdate)]; + char dummy4[sizeof(ENDCCellActivationRequest)]; + char dummy5[sizeof(ENDCConfigurationUpdate)]; + char dummy6[sizeof(ENDCPartialResetRequired)]; + char dummy7[sizeof(ENDCX2RemovalRequest)]; + char dummy8[sizeof(ENDCX2SetupRequest)]; + char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)]; + char dummy10[sizeof(ErrorIndication)]; + char dummy11[sizeof(HandoverCancel)]; + char dummy12[sizeof(HandoverReport)]; + char dummy13[sizeof(HandoverRequest)]; + char dummy14[sizeof(LoadInformation)]; + char dummy15[sizeof(MobilityChangeRequest)]; + char dummy16[sizeof(PrivateMessage)]; + char dummy17[sizeof(RLFIndication)]; + char dummy18[sizeof(RRCTransfer)]; + char dummy19[sizeof(ResetRequest)]; + char dummy20[sizeof(ResourceStatusRequest)]; + char dummy21[sizeof(ResourceStatusUpdate)]; + char dummy22[sizeof(RetrieveUEContextRequest)]; + char dummy23[sizeof(SNStatusTransfer)]; + char dummy24[sizeof(SeNBAdditionRequest)]; + char dummy25[sizeof(SeNBCounterCheckRequest)]; + char dummy26[sizeof(SeNBModificationRequest)]; + char dummy27[sizeof(SeNBModificationRequired)]; + char dummy28[sizeof(SeNBReconfigurationComplete)]; + char dummy29[sizeof(SeNBReleaseRequest)]; + char dummy30[sizeof(SeNBReleaseRequired)]; + char dummy31[sizeof(SecondaryRATDataUsageReport)]; + char dummy32[sizeof(SgNBActivityNotification)]; + char dummy33[sizeof(SgNBAdditionRequest)]; + char dummy34[sizeof(SgNBChangeRequired)]; + char dummy35[sizeof(SgNBCounterCheckRequest)]; + char dummy36[sizeof(SgNBModificationRequest)]; + char dummy37[sizeof(SgNBModificationRequired)]; + char dummy38[sizeof(SgNBReconfigurationComplete)]; + char dummy39[sizeof(SgNBReleaseRequest)]; + char dummy40[sizeof(SgNBReleaseRequired)]; + char dummy41[sizeof(UEContextRelease)]; + char dummy42[sizeof(X2APMessageTransfer)]; + char dummy43[sizeof(X2Release)]; + char dummy44[sizeof(X2RemovalRequest)]; + char dummy45[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverRequestAcknowledge& select_id_handoverPreparation() { return set(1); } + HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get(1); } + ResetResponse& select_id_reset() { return set(2); } + ResetResponse const* get_id_reset() const { return get(2); } + X2SetupResponse& select_id_x2Setup() { return set(3); } + X2SetupResponse const* get_id_x2Setup() const { return get(3); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationResponse& select_id_cellActivation() { return set(7); } + CellActivationResponse const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalResponse& select_id_x2Removal() { return set(12); } + X2RemovalResponse const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextResponse& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeConfirm& select_id_sgNBChange() { return set(19); } + SgNBChangeConfirm const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationResponse& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetConfirm& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalResponse& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationResponse)]; + char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCCellActivationResponse)]; + char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy5[sizeof(ENDCPartialResetConfirm)]; + char dummy6[sizeof(ENDCX2RemovalResponse)]; + char dummy7[sizeof(ENDCX2SetupResponse)]; + char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)]; + char dummy9[sizeof(HandoverRequestAcknowledge)]; + char dummy10[sizeof(MobilityChangeAcknowledge)]; + char dummy11[sizeof(ResetResponse)]; + char dummy12[sizeof(ResourceStatusResponse)]; + char dummy13[sizeof(RetrieveUEContextResponse)]; + char dummy14[sizeof(SeNBAdditionRequestAcknowledge)]; + char dummy15[sizeof(SeNBModificationConfirm)]; + char dummy16[sizeof(SeNBModificationRequestAcknowledge)]; + char dummy17[sizeof(SeNBReleaseConfirm)]; + char dummy18[sizeof(SgNBAdditionRequestAcknowledge)]; + char dummy19[sizeof(SgNBChangeConfirm)]; + char dummy20[sizeof(SgNBModificationConfirm)]; + char dummy21[sizeof(SgNBModificationRequestAcknowledge)]; + char dummy22[sizeof(SgNBReleaseConfirm)]; + char dummy23[sizeof(SgNBReleaseRequestAcknowledge)]; + char dummy24[sizeof(X2RemovalResponse)]; + char dummy25[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverPreparationFailure& select_id_handoverPreparation() { return set(1); } + HandoverPreparationFailure const* get_id_handoverPreparation() const { return get(1); } + X2SetupFailure& select_id_x2Setup() { return set(3); } + X2SetupFailure const* get_id_x2Setup() const { return get(3); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeFailure& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationFailure& select_id_cellActivation() { return set(7); } + CellActivationFailure const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + X2RemovalFailure& select_id_x2Removal() { return set(12); } + X2RemovalFailure const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextFailure& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBChangeRefuse& select_id_sgNBChange() { return set(19); } + SgNBChangeRefuse const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationFailure& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get(22); } + ENDCX2RemovalFailure& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationFailure)]; + char dummy2[sizeof(ENBConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCCellActivationFailure)]; + char dummy4[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy5[sizeof(ENDCX2RemovalFailure)]; + char dummy6[sizeof(ENDCX2SetupFailure)]; + char dummy7[sizeof(HandoverPreparationFailure)]; + char dummy8[sizeof(MobilityChangeFailure)]; + char dummy9[sizeof(ResourceStatusFailure)]; + char dummy10[sizeof(RetrieveUEContextFailure)]; + char dummy11[sizeof(SeNBAdditionRequestReject)]; + char dummy12[sizeof(SeNBModificationRefuse)]; + char dummy13[sizeof(SeNBModificationRequestReject)]; + char dummy14[sizeof(SgNBAdditionRequestReject)]; + char dummy15[sizeof(SgNBChangeRefuse)]; + char dummy16[sizeof(SgNBModificationRefuse)]; + char dummy17[sizeof(SgNBModificationRequestReject)]; + char dummy18[sizeof(SgNBReleaseRequestReject)]; + char dummy19[sizeof(X2RemovalFailure)]; + char dummy20[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;} + void select_id_reset() { set(id_reset); type=2;} + void select_id_x2Setup() { set(id_x2Setup); type=3;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;} + void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;} + void select_id_cellActivation() { set(id_cellActivation); type=7;} + void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;} + void select_id_x2Removal() { set(id_x2Removal); type=12;} + void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;} + void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;} + void select_id_sgNBChange() { set(id_sgNBChange); type=19;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;} + void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;} + void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;} + void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;} + void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;} + void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;} + void select_id_handoverCancel() { set(id_handoverCancel); type=28;} + void select_id_errorIndication() { set(id_errorIndication); type=29;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;} + void select_id_loadIndication() { set(id_loadIndication); type=31;} + void select_id_privateMessage() { set(id_privateMessage); type=32;} + void select_id_rLFIndication() { set(id_rLFIndication); type=33;} + void select_id_handoverReport() { set(id_handoverReport); type=34;} + void select_id_x2Release() { set(id_x2Release); type=35;} + void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;} + void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;} + void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;} + void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;} + void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;} + void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;} + void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;} + void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;} + X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_handoverPreparation)) { type = 1; return true; } + else if(equal(id_reset)) { type = 2; return true; } + else if(equal(id_x2Setup)) { type = 3; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; } + else if(equal(id_mobilitySettingsChange)) { type = 6; return true; } + else if(equal(id_cellActivation)) { type = 7; return true; } + else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; } + else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; } + else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; } + else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; } + else if(equal(id_x2Removal)) { type = 12; return true; } + else if(equal(id_retrieveUEContext)) { type = 13; return true; } + else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; } + else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; } + else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; } + else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; } + else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; } + else if(equal(id_sgNBChange)) { type = 19; return true; } + else if(equal(id_endcX2Setup)) { type = 20; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; } + else if(equal(id_endcCellActivation)) { type = 22; return true; } + else if(equal(id_endcPartialReset)) { type = 23; return true; } + else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; } + else if(equal(id_endcX2Removal)) { type = 25; return true; } + else if(equal(id_snStatusTransfer)) { type = 26; return true; } + else if(equal(id_uEContextRelease)) { type = 27; return true; } + else if(equal(id_handoverCancel)) { type = 28; return true; } + else if(equal(id_errorIndication)) { type = 29; return true; } + else if(equal(id_resourceStatusReporting)) { type = 30; return true; } + else if(equal(id_loadIndication)) { type = 31; return true; } + else if(equal(id_privateMessage)) { type = 32; return true; } + else if(equal(id_rLFIndication)) { type = 33; return true; } + else if(equal(id_handoverReport)) { type = 34; return true; } + else if(equal(id_x2Release)) { type = 35; return true; } + else if(equal(id_x2APMessageTransfer)) { type = 36; return true; } + else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; } + else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; } + else if(equal(id_seNBCounterCheck)) { type = 39; return true; } + else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; } + else if(equal(id_sgNBCounterCheck)) { type = 41; return true; } + else if(equal(id_rRCTransfer)) { type = 42; return true; } + else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; } + else if(equal(id_SgNBActivityNotification)) { type = 44; return true; } + else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(reject); type=1;} + void select_id_reset() { set(reject); type=2;} + void select_id_x2Setup() { set(reject); type=3;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=4;} + void select_id_eNBConfigurationUpdate() { set(reject); type=5;} + void select_id_mobilitySettingsChange() { set(reject); type=6;} + void select_id_cellActivation() { set(reject); type=7;} + void select_id_seNBAdditionPreparation() { set(reject); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;} + void select_id_x2Removal() { set(reject); type=12;} + void select_id_retrieveUEContext() { set(reject); type=13;} + void select_id_sgNBAdditionPreparation() { set(reject); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;} + void select_id_sgNBChange() { set(reject); type=19;} + void select_id_endcX2Setup() { set(reject); type=20;} + void select_id_endcConfigurationUpdate() { set(reject); type=21;} + void select_id_endcCellActivation() { set(reject); type=22;} + void select_id_endcPartialReset() { set(reject); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;} + void select_id_endcX2Removal() { set(reject); type=25;} + void select_id_snStatusTransfer() { set(ignore); type=26;} + void select_id_uEContextRelease() { set(ignore); type=27;} + void select_id_handoverCancel() { set(ignore); type=28;} + void select_id_errorIndication() { set(ignore); type=29;} + void select_id_resourceStatusReporting() { set(ignore); type=30;} + void select_id_loadIndication() { set(ignore); type=31;} + void select_id_privateMessage() { set(ignore); type=32;} + void select_id_rLFIndication() { set(ignore); type=33;} + void select_id_handoverReport() { set(ignore); type=34;} + void select_id_x2Release() { set(reject); type=35;} + void select_id_x2APMessageTransfer() { set(reject); type=36;} + void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;} + void select_id_seNBCounterCheck() { set(reject); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;} + void select_id_sgNBCounterCheck() { set(reject); type=41;} + void select_id_rRCTransfer() { set(reject); type=42;} + void select_id_secondaryRATDataUsageReport() { set(reject); type=43;} + void select_id_SgNBActivityNotification() { set(reject); type=44;} + void select_id_dataForwardingAddressIndication() { set(ignore); type=45;} + X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(reject)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(reject)) { type = 18; return true; } + else if(equal(reject)) { type = 19; return true; } + else if(equal(reject)) { type = 20; return true; } + else if(equal(reject)) { type = 21; return true; } + else if(equal(reject)) { type = 22; return true; } + else if(equal(reject)) { type = 23; return true; } + else if(equal(reject)) { type = 24; return true; } + else if(equal(reject)) { type = 25; return true; } + else if(equal(ignore)) { type = 26; return true; } + else if(equal(ignore)) { type = 27; return true; } + else if(equal(ignore)) { type = 28; return true; } + else if(equal(ignore)) { type = 29; return true; } + else if(equal(ignore)) { type = 30; return true; } + else if(equal(ignore)) { type = 31; return true; } + else if(equal(ignore)) { type = 32; return true; } + else if(equal(ignore)) { type = 33; return true; } + else if(equal(ignore)) { type = 34; return true; } + else if(equal(reject)) { type = 35; return true; } + else if(equal(reject)) { type = 36; return true; } + else if(equal(ignore)) { type = 37; return true; } + else if(equal(ignore)) { type = 38; return true; } + else if(equal(reject)) { type = 39; return true; } + else if(equal(ignore)) { type = 40; return true; } + else if(equal(reject)) { type = 41; return true; } + else if(equal(reject)) { type = 42; return true; } + else if(equal(reject)) { type = 43; return true; } + else if(equal(reject)) { type = 44; return true; } + else if(equal(ignore)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingMessage ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +SuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +X2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct X2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "X2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~X2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp new file mode 100644 index 0000000..fa2fd88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.cpp @@ -0,0 +1,982 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "asn_e2ap.hpp" +#include "asn_e2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void) +{ + E2APpduWrapper* pduWrapper = new E2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int e2ap_get_index(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &gnb_cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupResponse::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-RespondingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup(); + + /* RespondingNodeType-EndcX2Setup = respond-en-gNB {En-gNB-ENDCX2SetupReqAckIEs} */ + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB(); + + using gNB_val_t = RespondingNodeType_EndcX2Setup::respond_en_gNB_t::value_type; + + ProtocolIE_Container* gNB_node = + &(ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB()); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-Globalen-gNB-ID */ + gNB_val_t* val_Globalen_gNB_ID = new gNB_val_t; + gNB_node->push_back(*val_Globalen_gNB_ID); + + val_Globalen_gNB_ID->ref_id().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_criticality().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID() + .ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID().ref_gNB_ID() + .select_gNB_ID().set_buffer(22, gnb_cfg.gNB_ID); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-ServedNRcellsENDCX2ManagementList */ + gNB_val_t* val_ServedNRCells = new gNB_val_t; + gNB_node->push_back(*val_ServedNRCells); + + val_ServedNRCells->ref_id().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_criticality().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList(); + + /* ServedNRcellsENDCX2ManagementList <-- servedNRCellInfo*/ + ServedNRcellsENDCX2ManagementList::value_type* elm = + new ServedNRcellsENDCX2ManagementList::value_type(); + + /* + ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + */ + ServedNRCell_Information* info = &(elm->ref_servedNRCellInfo()); + { + // nrpCI NRPCI, + info->ref_nrpCI().set(gnb_cfg.nrpCI); + + /* nrCellID NRCGI, + + NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... + } + */ + info->ref_nrCellID().ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + info->ref_nrCellID().ref_nRcellIdentifier().set_buffer(36, gnb_cfg.nRcellIdentifier); + + /* broadcastPLMNs BroadcastPLMNs-Item */ + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, gnb_cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + /* nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + + FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + + NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... + } + + */ + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.uL_nRARFCN); + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.dL_nRARFCN); + + /* + FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... + } + */ + //uplink + asn::sequenceof::value_type* ul_band_item = + new asn::sequenceof::value_type(); + { + ul_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* ul_supported_band_item = + new asn::sequenceof::value_type(); + + ul_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + ul_band_item->ref_supportedSULBandList().push_back(*ul_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo() + .ref_freqBandListNr().push_back(*ul_band_item); + + //downlink + asn::sequenceof::value_type* dl_band_item = + new asn::sequenceof::value_type(); + { + dl_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* dl_supported_band_item = + new asn::sequenceof::value_type(); + + dl_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + dl_band_item->ref_supportedSULBandList().push_back(*dl_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo() + .ref_freqBandListNr().push_back(*dl_band_item); + + /* + NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... + } + */ + { + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.uL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.uL_NRSCS) ); + + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.dL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.dL_NRSCS) ); + } + + /* + measurementTimingConfiguration OCTET STRING, + */ + info->ref_measurementTimingConfiguration().set(gnb_cfg.measurementTimingConfiguration); + } + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList().push_back(*elm); + + + + return true; +} + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu) +{ + + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupFailure::protocolIEs_t::value_type; + + /* ENDCX2SetupFailure-IEs := id-Cause*/ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//RICSubscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_criticality().select_id_ricSubscription(); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionRequest::protocolIEs_t::value_type; + + /* RICsubscriptionRequest-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionRequest-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + + /* + RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... + } + + RICeventTriggerDefinition ::= OCTET STRING + RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } + + RICaction-ToBeSetup-ItemIEs X2AP-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, + ... + } + + RICactionID ::= INTEGER (0..255) + + RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... + } + */ + + /* RICsubscriptionRequest-IEs : RICsubscription */ + IE_value_t* ie_RICsubscription = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICsubscription); + + ie_RICsubscription->ref_id().select_id_RICsubscription(); + ie_RICsubscription->ref_criticality().select_id_RICsubscription(); + + // RICeventTriggerDefinition + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricEventTriggerDefinition().set(params.event_trigger_def); + + //RICactions-ToBeSetup-List + for( auto const &action : params.actionList) + { + RICactions_ToBeSetup_List::value_type* item = + new RICactions_ToBeSetup_List::value_type(); + + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricAction_ToBeSetup_List().push_back(*item); + + item->ref_id().select_id_RICaction_ToBeSetup_Item(); + item->ref_criticality().select_id_RICaction_ToBeSetup_Item(); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionID().set(action.action_id); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionType().set(action.action_type); + + } + + return true; +} + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + + for(auto &e : container->ref_protocolIEs()) + { + /*See struct RICsubscriptionRequest_IEs*/ + size_t type = e.ref_value().get_index(); + + switch(type) + { + case 1: //RICrequestID + { + params.request_id = e.ref_value().select_id_RICrequestID().ref_ricRequestorID().get(); + params.seq_number = e.ref_value().select_id_RICrequestID().ref_ricRequestSequenceNumber().get(); + } + break; + + case 2: //RANfunctionID + params.ran_func_id = e.ref_value().select_id_RANfunctionID().get(); + break; + + case 3: //RICsubscription + { + auto event = e.ref_value().select_id_RICsubscription().ref_ricEventTriggerDefinition().get(); + (params.event_trigger_def).assign(std::string(event.data(), event.data() + event.size())); + + //ricAction_ToBeSetup_List + for (auto & f : e.ref_value().select_id_RICsubscription().ref_ricAction_ToBeSetup_List()) + { + RIC_action_t action; + action.action_id = f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionID().get(); + action.action_type = static_cast(f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionType().get()); + + params.actionList.push_back(action); + } + } + break; + + default: + printf("Unknown IE type = %d\n", (int)type); + return false; + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionResponse* container = &(pduWrapper->ref_pdu() + .select_successfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionResponse::protocolIEs_t::value_type; + + /* RICsubscriptionResponse-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionResponse-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionResponse-IEs : RICaction-Admitted-List */ + IE_value_t* ie_admittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_admittedList); + + ie_admittedList->ref_id().select_id_RICactions_Admitted(); + ie_admittedList->ref_criticality().select_id_RICactions_Admitted(); + + /* RICsubscriptionResponse-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + //add action to admitted and not-admitted list + for(auto const &a : params.actionList) + { + if(a.isAdmitted) + { + RICaction_Admitted_List::value_type* item = new RICaction_Admitted_List::value_type(); + + ie_admittedList->ref_value().select_id_RICactions_Admitted().push_back(*item); + + item->ref_id().select_id_RICaction_Admitted_Item(); + item->ref_criticality().select_id_RICaction_Admitted_Item(); + item->ref_value().select_id_RICaction_Admitted_Item().ref_ricActionID().set(a.action_id); + } + else + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionFailure* container = &(pduWrapper->ref_pdu() + .select_unsuccessfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionFailure::protocolIEs_t::value_type; + + /* RICsubscriptionFailure-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionFailure-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionFailure-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + for(auto const &a : params.actionList) + { + if(!a.isAdmitted) + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void) +{ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + // e2ap_init_X2SetupRequest(pdu); + eNB_config cfg; + e2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + e2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = e2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + int rc = e2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + e2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", e2ap_get_index(pdu2)); + printf("procedureCode = %d\n", e2ap_get_procedureCode(pdu2)); + + //Test X2SetupResponse + e2ap_pdu_t* pdu_resp = new_e2ap_pdu(); + e2ap_create_X2SetupResponse(pdu_resp, cfg); + e2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + e2ap_pdu_t* pdu_failure = new_e2ap_pdu(); + e2ap_create_X2SetupFailure(pdu_failure); + e2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp new file mode 100644 index 0000000..aa858b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_E2AP_HPP +#define ASN_E2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy01 e2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void); + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_get_index(e2ap_pdu_t* pdu); + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ + +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu); + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu); + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &cfg); + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu); + +//RIC Subscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp new file mode 100644 index 0000000..38704e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_e2ap_wrapper.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_E2AP_PDU_WRAPPER_HPP +#define ASN_E2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +// #include + +// #include +// #include +// #include +// #include +// #include + +#include +// #include +#include +#include +#include + +#define E2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct E2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + E2APpduWrapper(size_t allocation_buffer_size = E2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~E2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + E2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + E2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp new file mode 100644 index 0000000..dae9ca8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.cpp @@ -0,0 +1,428 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "asn_x2ap.hpp" +#include "asn_x2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +x2ap_pdu_t* new_x2ap_pdu(void) +{ + X2APpduWrapper* pduWrapper = new X2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int x2ap_get_index(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void) +{ + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + eNB_config cfg; + x2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = x2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test encode error + x2ap_pdu_t* pdu1 = new_x2ap_pdu(); + x2ap_init_X2SetupRequest(pdu1); + + int packed_len1 = x2ap_asn_per_encode(pdu1, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len1 != -1) { + printf("Encode successful, packed_len = %d\n", packed_len1); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + x2ap_pdu_t* pdu2 = new_x2ap_pdu(); + int rc = x2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + x2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", x2ap_get_index(pdu2)); + printf("procedureCode = %d\n", x2ap_get_procedureCode(pdu2)); + + + //Test decode error + x2ap_pdu_t* pdu3 = new_x2ap_pdu(); + int rc2 = x2ap_asn_per_decode(pdu3, packed_buf, 1, err_buf, sizeof(err_buf)); + if(rc2 == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + //Test X2SetupResponse + x2ap_pdu_t* pdu_resp = new_x2ap_pdu(); + x2ap_create_X2SetupResponse(pdu_resp, cfg); + x2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + x2ap_pdu_t* pdu_failure = new_x2ap_pdu(); + x2ap_create_X2SetupFailure(pdu_failure); + x2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp new file mode 100644 index 0000000..d0c02d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap.hpp @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_X2AP_HPP +#define ASN_X2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy00 x2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ + +x2ap_pdu_t* new_x2ap_pdu(void); + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_get_index(x2ap_pdu_t* pdu); + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu); + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu); + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp new file mode 100644 index 0000000..96ea81c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/asn_x2ap_wrapper.hpp @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_X2AP_PDU_WRAPPER_HPP +#define ASN_X2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define X2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct X2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + X2APpduWrapper(size_t allocation_buffer_size = X2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~X2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + X2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + X2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp new file mode 100644 index 0000000..9182ed1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/ASN1/lib/e2ap_config.hpp @@ -0,0 +1,160 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_CONFIG_HPP +#define E2AP_CONFIG_HPP + +#include +#include + +enum enum_Transmission_Bandwidth { + enum_bw6, + enum_bw15, + enum_bw25, + enum_bw50, + enum_bw75, + enum_bw100, + enum_bw1 +}; + +enum enum_NRNRB{ + enum_nrb11, enum_nrb18, enum_nrb24, enum_nrb25, enum_nrb31, enum_nrb32, + enum_nrb38, enum_nrb51, enum_nrb52, enum_nrb65, enum_nrb66, enum_nrb78, + enum_nrb79, enum_nrb93, enum_nrb106, enum_nrb107, enum_nrb121, + enum_nrb132, enum_nrb133, enum_nrb135, enum_nrb160, enum_nrb162, + enum_nrb189, enum_nrb216, enum_nrb217, enum_nrb245, enum_nrb264, + enum_nrb270, enum_nrb273 +}; + +enum enum_NRSCS { + enum_scs15, enum_scs30, enum_scs60, enum_scs120 +}; + +class eNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* macro_eNB_ID; + int64_t pCI; + uint8_t* tAC; + uint8_t* eUTRANcellIdentifier; + + int64_t uL_EARFCN; + int64_t dL_EARFCN; + + enum_Transmission_Bandwidth uL_Bandwidth; + enum_Transmission_Bandwidth dL_Bandwidth; + + /*Default Constructor*/ + eNB_config() { + pLMN_Identity = (uint8_t*)"abc"; + macro_eNB_ID = (uint8_t*)"5"; + pCI = 0; + tAC = (uint8_t*)"ab"; + eUTRANcellIdentifier = (uint8_t*)"def"; + uL_EARFCN = 21400; + dL_EARFCN = 3400; + uL_Bandwidth = enum_bw25; + dL_Bandwidth = enum_bw50; + } +}; + +class gNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* gNB_ID; + int64_t nrpCI; + uint8_t* tAC; + uint8_t* nRcellIdentifier; + + int64_t uL_nRARFCN; + int64_t dL_nRARFCN; + + enum enum_NRNRB uL_NRNRB; + enum enum_NRNRB dL_NRNRB; + + enum enum_NRSCS uL_NRSCS; + enum enum_NRSCS dL_NRSCS; + + uint8_t ul_freqBandIndicatorNr; + uint8_t dl_freqBandIndicatorNr; + + std::string measurementTimingConfiguration; + + /*Default Constructor*/ + gNB_config() { + pLMN_Identity = (uint8_t*)"xyz"; + gNB_ID = (uint8_t*)"3"; + nrpCI = 1; + tAC = (uint8_t*)"ab"; + nRcellIdentifier = (uint8_t*)"gnb_id_123"; + uL_nRARFCN = 21400; + dL_nRARFCN = 21500; + + uL_NRNRB = enum_nrb11; + dL_NRNRB = enum_nrb121; + + uL_NRSCS = enum_scs15; + dL_NRSCS = enum_scs120; + + ul_freqBandIndicatorNr = 11; + dl_freqBandIndicatorNr = 12; + + measurementTimingConfiguration = "dummy timing"; + } +}; + +enum enum_RICactionType { + RICactionType_report, + RICactionType_insert, + RICactionType_policy +}; + +enum enum_RICcause { + RICcause_radioNetwork = 1, + RICcause_transport, + RICcause_protocol, + RICcause_misc, + RICcause_ric +}; + +struct RIC_action_t { + unsigned char action_id; + enum_RICactionType action_type; + bool isAdmitted = false; //for response/failure only + enum_RICcause notAdmitted_cause; //for response/failure only + unsigned int notAdmitted_subCause; //for response/failure only + + RIC_action_t() {;} + + RIC_action_t(unsigned char id, enum_RICactionType type) + { + action_id = id; + action_type = type; + } +}; + +struct RICsubscription_params_t { + uint16_t request_id = 0; + uint16_t seq_number = 0; + uint16_t ran_func_id = 0; + std::string event_trigger_def = ""; + + std::vector actionList; +} ; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.cpp @@ -0,0 +1,125 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "e2sim_defs.h" +#include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} + +options_t read_input_options_old(int argc, char* argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + // Parse command line options + static struct option long_options[] = + { + {"ipv4", required_argument, 0, 'i'}, + {"ipv6", required_argument, 0, 'I'}, + {"port", required_argument, 0, 'p'}, + {"verbose", no_argument, 0, 'v'}, + }; + + while(1) + { + int option_index = 0; + + char c = getopt_long(argc, argv, "i:I:p:", long_options, &option_index); + + if(c == -1) + break; + + switch(c) + { + case 'i': + options.server_ip = optarg; + break; + case 'I': + break; + case 'p': + options.server_port = atoi(optarg); + if(options.server_port < 1 || options.server_port > 65535) + { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + break; + + default: + LOG_E("Error: unknown input option: %c\n", optopt); + exit(1); + } + } + + return options; +} + +options_t read_input_options(int argc, char *argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + if(argc == 3) //user provided IP and PORT + { + options.server_ip = argv[1]; + options.server_port = atoi(argv[2]); + if(options.server_port < 1 || options.server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + } + else if(argc == 2) //user provided only IP + { + options.server_ip = argv[1]; + } + else if(argc == 1) + { + options.server_ip = (char*)DEFAULT_SCTP_IP; + } + else + { + LOG_I("Unrecognized option.\n"); + LOG_I("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + exit(1); + } + + return options; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/DEF/e2sim_defs.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef E2SIM_DEFS_H +#define E2SIM_DEFS_H + +// #include +#include +#include + +#define VERSION "1.2.0" //May 2019 +#define DEFAULT_SCTP_IP "127.0.0.1" +#define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) +#define X2AP_SCTP_PORT 36421 +#define RIC_SCTP_SRC_PORT 36422 +#define MAX_SCTP_BUFFER 10000 +#define WORKDIR_ENV "E2SIM_DIR" //environment variable + +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + +#define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} + +typedef struct SCTP_DATA { + unsigned char *data; + int len; +} sctp_data_t; + +typedef struct { + unsigned char buffer[MAX_SCTP_BUFFER]; + int len; +} sctp_buffer_t; + +typedef struct { + char* server_ip; + int server_port; + //... extend as needed +} options_t; + +options_t read_input_options(int argc, char *argv[]); + +#define min(a, b) ((a) < (b)) ? (a) : (b) + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml new file mode 100644 index 0000000..43db78a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml @@ -0,0 +1 @@ +400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml new file mode 100644 index 0000000..6d8c654 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_SetupRequest2.xml @@ -0,0 +1,30 @@ + + + 1 + + + + + + 4 + + + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml new file mode 100644 index 0000000..dd21201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/GlobalE2node-ID.xml @@ -0,0 +1,12 @@ + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c new file mode 100644 index 0000000..f76032d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp new file mode 100644 index 0000000..c02a4b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.cpp @@ -0,0 +1,295 @@ + + +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include + +#include "encode_e2apv1.hpp" +#include "kpm_callbacks.hpp" + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICsubscription: //RIC SUBSCRIPTION = 201 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: { //initiatingMessage + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + long func_id = get_function_id_from_subscription(pdu); + SubscriptionCallback cb = e2sim->get_subscription_callback(func_id); + cb(pdu,socket_fd); + // callback_kpm_subscription_request(pdu, socket_fd); + // e2ap_handle_RICSubscriptionRequest_securityDemo(pdu, socket_fd); + } + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp new file mode 100644 index 0000000..32c0ea3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2AP/e2ap_message_handler.hpp @@ -0,0 +1,47 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + +#include "e2sim.hpp" +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml new file mode 100644 index 0000000..43db78a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml @@ -0,0 +1 @@ +400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_PartSetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml new file mode 100644 index 0000000..6d8c654 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_SetupRequest2.xml @@ -0,0 +1,30 @@ + + + 1 + + + + + + 4 + + + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml new file mode 100644 index 0000000..dd21201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/GlobalE2node-ID.xml @@ -0,0 +1,12 @@ + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c new file mode 100644 index 0000000..f76032d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp new file mode 100644 index 0000000..1226710 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.cpp @@ -0,0 +1,267 @@ + + +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include + +#include "encode_e2apv1.hpp" + + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp new file mode 100644 index 0000000..1d5b4ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/E2APr/e2ap_message_handler.hpp @@ -0,0 +1,47 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + + +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.c @@ -0,0 +1,173 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.h" + +const int CLIENT_SEND_COUNT = 1; +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return -1; + } + + int server_fd; + if((server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + return -1; + } + + struct sockaddr_in server_addr; + memset(&server_addr, 0, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(server_port); + server_addr.sin_addr.s_addr = inet_addr(server_ip_str); + + if(bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + return -1; + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + return -1; + } + + assert(server_fd != 0); + + fprintf(stderr, "SCTP server started on %s:%d\n", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd; + + if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + return -1; + } + + struct sockaddr_in peer_addr; + memset(&peer_addr, 0, sizeof(struct sockaddr_in)); + peer_addr.sin_family = AF_INET; + peer_addr.sin_port = htons(server_port); + peer_addr.sin_addr.s_addr = inet_addr(server_ip_str); + // if(inet_pton(AF_INET, server_ip, &(peer_addr.sin_addr)) != 1) { + // printf("Error converting IP address (%s) to sockaddr_in structure\n", server_ip); + // return 0; + // } + + fprintf(stderr, "Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) == -1) { + perror("connect"); + return -1; + } + + assert(client_fd != 0); + + fprintf(stderr, "OK\n"); + + return client_fd; + +} + +//ssize_t sctp_send_to_socket(int sockfd, const void* buf, size_t len) +int sctp_send_to_socket(int sockfd, const void* buf, size_t len) +{ + int sent_len = 0; + + sent_len = send(sockfd, buf, len, 0); + + if(sent_len == -1) + { + perror("sctp_send_to_socket"); + return -1; + } + + return sent_len; +} + +// int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size) +// { +// //int len = 0; +// +// memset(buf, 0, buf_size); +// +// int len = recv(sockfd, &buf, buf_size, 0); +// if(len == -1) +// { +// perror("sctp_recv_from_socket"); +// return -1; +// } +// +// return len; +// } + + +//test only +void client_send_multiple_test_msg(int client_fd) +{ + char buf[1024]; + int SEND_COUNT = 4; + + for(int i = 0; i < SEND_COUNT; i++) + { + fprintf(stderr, "Sending message %d of %d \n", i+1, SEND_COUNT); + + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf)-1, "DATA %d", i+1); + + if(send(client_fd, &buf, strlen(buf), 0) == -1) { + perror("send"); + return; + } + + memset(buf, 0, sizeof(buf)); + + if(recv(client_fd, &buf, sizeof(buf), 0) == -1) { + perror("recv"); + return; + } + + fprintf(stderr, "Server reply: %s\n", buf); + + sleep(1); + } + + fprintf(stderr, "Closing...\n"); + if(close(client_fd) == -1) { + perror("close"); + return; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..55547b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.cpp @@ -0,0 +1,297 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.hpp" +// #include "e2sim_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + exit(1); + } + + int server_fd, af; + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + + server_addr = (struct sockaddr*)&server4_addr; + af = AF_INET; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + + server_addr = (struct sockaddr*)&server6_addr; + af = AF_INET6; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((server_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + exit(1); + } + + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + + if(bind(server_fd, server_addr, addr_len) == -1) { + perror("bind"); + exit(1); + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + exit(1); + } + + assert(server_fd != 0); + + LOG_I("[SCTP] Server started on %s:%d", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd, af; + + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + server_addr = (struct sockaddr*)&server4_addr; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + server_addr = (struct sockaddr*)&server6_addr; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + exit(1); + } + + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, server_addr, addr_len) == -1) { + perror("connect"); + exit(1); + } + assert(client_fd != 0); + + LOG_I("[SCTP] Connection established"); + + return client_fd; +} + +int sctp_accept_connection(const char *server_ip_str, const int server_fd) +{ + LOG_I("[SCTP] Waiting for new connection..."); + + struct sockaddr client_addr; + socklen_t client_addr_size; + int client_fd; + + //Blocking call + client_fd = accept(server_fd, &client_addr, &client_addr_size); + fprintf(stderr, "client fd is %d\n", client_fd); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + exit(1); + } + + //Retrieve client IP_ADDR + char client_ip6_addr[INET6_ADDRSTRLEN], client_ip4_addr[INET_ADDRSTRLEN]; + if(strchr(server_ip_str, ':') != NULL) //IPv6 + { + struct sockaddr_in6* client_ipv6 = (struct sockaddr_in6*)&client_addr; + inet_ntop(AF_INET6, &(client_ipv6->sin6_addr), client_ip6_addr, INET6_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip6_addr); + } + else { + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip4_addr, INET_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip4_addr); + } + + return client_fd; +} + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data) +{ + fprintf(stderr,"in sctp send data func\n"); + fprintf(stderr,"data.len is %d", data.len); + int sent_len = send(socket_fd, (void*)(&(data.buffer[0])), data.len, 0); + fprintf(stderr,"after getting sent_len\n"); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + + return sent_len; +} + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + +} + +/* +Receive data from SCTP socket +Outcome of recv() +-1: exit the program +0: close the connection ++: new data +*/ +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data) +{ + //clear out the data before receiving + fprintf(stderr, "receive data1\n"); + memset(data.buffer, 0, sizeof(data.buffer)); + fprintf(stderr, "receive data2\n"); + data.len = 0; + + //receive data from the socket + int recv_len = recv(socket_fd, &(data.buffer), sizeof(data.buffer), 0); + fprintf(stderr, "receive data3\n"); + + if(recv_len == -1) + { + perror("[SCTP] recv"); + exit(1); + } + else if (recv_len == 0) + { + LOG_I("[SCTP] Connection closed by remote peer"); + if(close(socket_fd) == -1) + { + perror("[SCTP] close"); + } + return -1; + } + + data.len = recv_len; + + return recv_len; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/*! \file e2sim_sctp.h + */ + +#ifndef E2SIM_SCTP_H +#define E2SIM_SCTP_H + +void *handle_connection(void *thread_data); + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_send_to_socket(int sockfd, const void *buf, size_t len); + +//int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size); + +//test only +void client_send_multiple_test_msg(int client_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/SCTP/e2sim_sctp.hpp @@ -0,0 +1,39 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_SCTP_HPP +#define E2SIM_SCTP_HPP + +#include "e2sim_defs.h" + +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_accept_connection(const char *server_ip_str, const int server_fd); + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data); + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data); + +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml new file mode 100644 index 0000000..f0b6262 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml new file mode 100644 index 0000000..5f94d2e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml new file mode 100644 index 0000000..587b578 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml @@ -0,0 +1,36 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 01001010100101010010101010101010 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml new file mode 100644 index 0000000..3b82969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml new file mode 100644 index 0000000..3589f28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000100000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100010000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml new file mode 100644 index 0000000..bab51d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml @@ -0,0 +1,69 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000110000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100011000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + 24 + + + + + 02 F8 39 + 00 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c new file mode 100644 index 0000000..959e7ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.c @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "x2ap_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +/* Encode X2AP PDU ASN1 buffer*/ +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + + assert(pdu != NULL); + assert(buffer != NULL); + assert(len != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, pdu, (void **)buffer); + + if (encoded < 0) + { + return -1; + } + + *len = encoded; + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, pdu); + return encoded; +} + +/* Decode XASN1 buffer to X2AP PDU*/ +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_X2AP_PDU, (void **)&pdu, buffer, + len, 0, 0); + + //xer_fprint(stdout, &asn_DEF_X2AP_PDU, pdu); + + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode pdu\n"); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp new file mode 100644 index 0000000..7f2e6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.cpp @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "x2ap_asn_codec.hpp" + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + encoded_size = x2ap_asn_per_encode(pdu, buf, buf_size, err_buf, sizeof(err_buf)); + + if(encoded_size != -1) + { + LOG_D("[X2AP] ASN Encode successful, encoded_size = %d", encoded_size); + } + else + { + LOG_E("[X2AP] Encode error: %s", err_buf); + exit(1); + } + +} + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + int rc = x2ap_asn_per_decode(pdu, buf, encoded_size, err_buf, sizeof(err_buf)); + if(rc == -1) { + LOG_E("[X2AP] Decode error: %s", err_buf); + } else { + LOG_D("[X2AP] ASN decode successful"); + } +} + +void x2ap_print_pdu(x2ap_pdu_t* pdu) +{ + char pdu_str[X2AP_PDU_PRINT_BUFFER]; + + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + + LOG_D("[X2AP] %s", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h new file mode 100644 index 0000000..bad3ae7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ASN_CODEC_H_ +#define X2AP_ASN_CODEC_H_ + +#include "X2AP-PDU.h" + +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +__attribute__ ((warn_unused_result)); + +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp new file mode 100644 index 0000000..a07f441 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_asn_codec.hpp @@ -0,0 +1,34 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_ASN_CODEC_HPP +#define X2AP_ASN_CODEC_HPP + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" + +#define X2AP_ERROR_MESSAGE_BUFFER 1024 +#define X2AP_PDU_PRINT_BUFFER 4096 + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size); + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size); + +void x2ap_print_pdu(x2ap_pdu_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c new file mode 100644 index 0000000..db12a3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.c @@ -0,0 +1,113 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "x2ap_generate_messages.h" +#include "x2ap_asn_codec.h" +#include "e2sim_defs.h" + +int asn1_xer_print = 0; +int MAX_XML_BUFFER = 10000; + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename) +{ + + uint8_t buf[MAX_XML_BUFFER]; + + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[200]; + char *work_dir = getenv(WORKDIR_ENV); + + strcpy(XML_path, work_dir); + strcat(XML_path, "/src/X2AP/MESSAGES/XML/"); + strcat(XML_path, filename); + + //printf("Generate X2AP PDU from XML file: %s\n", XML_path); + + f = fopen(XML_path, "r"); + assert(f); + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + fprintf(stderr, "%s: Too large input\n", XML_path); + exit(1); + } + + fclose(f); + + //printf("Decode the XER buffer\n"); + rval = xer_decode(NULL, &asn_DEF_X2AP_PDU, (void **)pdu, buf, size); + assert(rval.code == RC_OK); + +} + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_request.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_response.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h new file mode 100644 index 0000000..53998b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_generate_messages.h @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_GENERATE_MESSAGES_H_ +#define X2AP_ENB_GENERATE_MESSAGES_H_ + +#include "X2AP-PDU.h" + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename); + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer); + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c new file mode 100644 index 0000000..4fa635e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.c @@ -0,0 +1,139 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "x2ap_message_handler.h" + +typedef int (*x2ap_message_decoded_handler)(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t *response); + +/* Handlers matrix. Only eNB related procedure present here +/* rowID = procedureCode (start with 0) +*/ +x2ap_message_decoded_handler x2ap_messages_handler[][3] = { + { 0, 0, 0 }, /* handoverPreparation */ + { 0, 0, 0 }, /* handoverCancel */ + { 0, 0, 0 }, /* loadIndication */ + { 0, 0, 0 }, /* errorIndication */ + { 0, 0, 0 }, /* snStatusTransfer */ + { 0, 0, 0 }, /* uEContextRelease */ + { handle_x2_setup_request, handle_x2_setup_response, handle_x2_setup_failure }, /* x2Setup */ + { 0, 0, 0 }, /* reset */ + { 0, 0, 0 }, /* eNBConfigurationUpdate */ + { 0, 0, 0 }, /* resourceStatusReportingInitiation */ + { 0, 0, 0 }, /* resourceStatusReporting */ + { 0, 0, 0 }, /* privateMessage */ + { 0, 0, 0 }, /* mobilitySettingsChange */ + { 0, 0, 0 }, /* rLFIndication */ + { 0, 0, 0 }, /* handoverReport */ + { 0, 0, 0 }, /* cellActivation */ + { 0, 0, 0 }, /* x2Release */ + { 0, 0, 0 }, /* x2APMessageTransfer */ + { 0, 0, 0 }, /* x2Removal */ + { 0, 0, 0 }, /* seNBAdditionPreparation */ + { 0, 0, 0 }, /* seNBReconfigurationCompletion */ + { 0, 0, 0 }, /* meNBinitiatedSeNBModificationPreparation */ + { 0, 0, 0 }, /* seNBinitiatedSeNBModification */ + { 0, 0, 0 }, /* meNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBCounterCheck */ + { 0, 0, 0 } /* retrieveUEContext */ +}; + +char *x2ap_direction2String(int x2ap_dir) +{ + static char *x2ap_direction_String[] = { + "", /* Nothing */ + "Originating message", /* originating message */ + "Successfull outcome", /* successfull outcome */ + "UnSuccessfull outcome", /* successfull outcome */ + }; + return(x2ap_direction_String[x2ap_dir]); +} + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response) +{ + X2AP_PDU_t pdu; + int ret; + + memset(&pdu, 0, sizeof(pdu)); + + //printf("Decode the PDU \n"); + + if (X2AP_ASN_decode(&pdu, data, data_len) < 0){ + return -1; + } + + /* Checking procedure Code and direction of message */ + if (pdu.choice.initiatingMessage.procedureCode > sizeof(x2ap_messages_handler) + / (3 * sizeof(x2ap_message_decoded_handler)) + || (pdu.present > X2AP_PDU_PR_unsuccessfulOutcome)) { + + fprintf(stderr, "Either procedureCode %ld or direction %d exceed expected\n", + pdu.choice.initiatingMessage.procedureCode, pdu.present); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + if (x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1] == NULL) + { + fprintf(stderr, "No handler for procedureCode %ld in direction %s\n", + pdu.choice.initiatingMessage.procedureCode, + x2ap_direction2String(pdu.present - 1)); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + /*calling the appropriate handler */ + ret = (*x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1])(&pdu, response); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return ret; +} + +int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP REQUEST\n"); + + /* Todo: when to generate X2 Setup Failure??? + */ + + response->len = x2ap_generate_x2_setup_response(&response->data); + + return 0; +} + +int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP RESPONSE\n"); + return 0; +} + +int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP FAILURE\n"); + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp new file mode 100644 index 0000000..f818304 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "x2ap_message_handler.hpp" + + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) +{ + //decode the data into X2AP-PDU + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + x2ap_decode_pdu(pdu, data.buffer, data.len); + + x2ap_print_pdu(pdu); + + int index = x2ap_get_index(pdu); + int procedureCode = x2ap_get_procedureCode(pdu); + + switch(procedureCode) + { + case 6: //X2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received X2 SETUP REQUEST"); + x2ap_handle_X2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + case 36: //ENDCX2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received ENDC X2 SETUP REQUEST"); + x2ap_handle_ENDCX2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received ENDC X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received ENDC X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + default: + LOG_E("[X2AP] No available handler for procedureCode=%d", procedureCode); + break; + } +} + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back X2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + + x2ap_pdu_t* res_pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupResponse(res_pdu, cfg); + LOG_D("[X2AP] Created X2 SETUP RESPONSE") + + x2ap_print_pdu(res_pdu); + + //encode response pdu into buffer + sctp_buffer_t res_data; + x2ap_encode_pdu(res_pdu, res_data.buffer, sizeof(res_data.buffer), res_data.len); + + //send response data over sctp + if(sctp_send_data(socket_fd, res_data) > 0) { + LOG_D("[SCTP] Sent X2 SETUP RESPONSE"); + } else { + LOG_D("[SCTP] Unable to send X2 SETUP RESPONSE to peer"); + } +} + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd) +{ + ; +} + + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back ENDCX2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + ; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h new file mode 100644 index 0000000..9c9d6ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_HANDLER_H_ +#define X2AP_ENB_HANDLER_H_ + +#include "x2ap_asn_codec.h" +#include "X2AP-PDU.h" +#include "e2sim_defs.h" +#include "x2ap_generate_messages.h" + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp new file mode 100644 index 0000000..b3146c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/src/X2AP/x2ap_message_handler.hpp @@ -0,0 +1,35 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_MESSAGE_HANDLER_HPP +#define X2AP_MESSAGE_HANDLER_HPP + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "asn_x2ap.hpp" +#include "x2ap_asn_codec.hpp" + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data); + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt new file mode 100644 index 0000000..bf6c51c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/CMakeLists.txt @@ -0,0 +1,86 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(e2sim) + +set (HOME_DIR $ENV{HOME}) +#set (E2SIM_ROOT ../../../) + +include_directories("src") +include_directories("src/SCTP/") +include_directories("src/E2AP") +include_directories("src/E2AP/E2SM") +include_directories("ASN1c") + +find_library( SCTP_LIBRARY sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB E2AGENT_SOURCES + "src/e2agent.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(e2agent ${E2AGENT_SOURCES}) +target_link_libraries( e2agent ${SCTP_LIBRARY} ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + "src/ric_sim.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(ric_sim ${RICSIM_SOURCES}) +target_link_libraries( ric_sim ${SCTP_LIBRARY} ) + + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "src/x2term.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_LIBRARY} ) + + +#----------------------------------------------- +file(GLOB TEST + "src/test_asn1c.cpp" + "src/e2sim_defs.cpp" +# "src/SCTP/*.cpp" + "ASN1c/*.c" + "src/E2AP/*.c" + "src/E2AP/E2SM/*.c" + ) +add_executable(test_asn1c ${TEST}) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp new file mode 100644 index 0000000..690f767 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Misc/test_asn1c.cpp @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "e2sm.h" + +} + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("Test ASN1c"); + + test_eventTriggerDefinition(); + return 0; + + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ErrorIndication.xml"); + + e2ap_asn1c_print_pdu(pdu); + + /* Test encoding */ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + /* Test decoding */ + E2AP_PDU_t* pdu1 = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(pdu1, data.buffer, data.len); + + e2ap_asn1c_print_pdu(pdu1); + + int index = (int)pdu1->present; + + int pCode = e2ap_asn1c_get_procedureCode(pdu1); + + LOG_I("Index = %d, procedureCode = %d", index, pCode); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c new file mode 100644 index 0000000..9b44adf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.c @@ -0,0 +1,180 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Pendulum_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +#include "OCTET_STRING.h" + +static int ASN_DEBUG = 0; + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + assert(pend != NULL); + assert(buffer != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_Pendulum, 0, pend, (void **)buffer); + if(encoded < 0){ + perror("Failed to aper encode\n"); + exit(1); + } + + *len = encoded; + //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_Pendulum, pend); + return encoded; +} + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + // THIS IS IMPORTANT, otherwise: Segmentation fault + memset(pend, 0, sizeof(*pend)); + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_Pendulum, (void **)&pend, buffer, len, 0, 0); + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode asn1 message\n"); + return -1; + } + + if(ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + return 0; +} + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg) +{ + //Create Pendulum payload struct + Pendulum_t *pend; + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + //convert char* to PrintableString_t* + PrintableString_t *payload = calloc(1, sizeof(PrintableString_t)); + payload->buf = (uint8_t *)msg; + payload->size = strlen(msg); + + pend->strval = payload; + pend->sequence = &sequence; + pend->angle = ∠ + pend->torque = &torque; + + if (ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //Encode Pendulum payload struct to asn1 buffer + uint32_t len; + if(pendulum_asn_encode(pend, buffer, &len) < 0) + { + return -1; + } + //fprintf(stderr, "len = %d\n", len); + + return len; +} + +long pendulum_get_sequence(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.sequence); +} + +double pendulum_get_angle(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.angle); +} + +double pendulum_get_torque(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.torque); +} + +char* pendulum_get_strval(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + char* str; + + pendulum_asn_decode(&pend, buffer, len); + + str = (char*)pend.strval->buf; + + return str; +} + +void test_pendulum_msg(void) +{ + uint8_t *buffer = NULL; + uint32_t len = 0; + double angle = 1.9; + len = pendulum_create_asn_msg(&buffer, 0, angle, 0, NULL); + + double ex_angle = pendulum_get_angle(buffer, len); + fprintf(stderr, "Extracted angle = %f\n", ex_angle); +} + +void test_pendulum_asn1(void) +{ + fprintf(stderr, "test_pendulum_asn1\n"); + + Pendulum_t *pend; + + long sequence = 0; /* OPTIONAL */ + double angle = 1.5; /* OPTIONAL */ + //double torque = 0.7; /* OPTIONAL */ + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + pend->sequence = &sequence; + pend->angle = ∠ + //pend->torque = &torque; + + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //encode + uint8_t *buffer = NULL; + uint32_t len; + pendulum_asn_encode(pend, &buffer, &len); + fprintf(stderr, "len = %d\n", len); + + //decode + Pendulum_t dec_pend; + pendulum_asn_decode(&dec_pend, buffer, len); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h new file mode 100644 index 0000000..3928caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Pendulum_asn_codec.h @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef PENDULUM_ASN_CODEC_H_ +#define PENDULUM_ASN_CODEC_H_ + +#include "Pendulum.h" + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len); + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len); + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg); + +long pendulum_get_sequence(const uint8_t *const buffer, const int len); + +double pendulum_get_angle(const uint8_t *const buffer, const int len); + +double pendulum_get_torque(const uint8_t *const buffer, const int len); + +char* pendulum_get_strval(const uint8_t *const buffer, const int len); + +//For testing only + +void test_pendulum_msg(void); + +void test_pendulum_asn1(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c new file mode 100644 index 0000000..e67465c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "stdio.h" +#include +#include + +#include "adruino_serial.h" + +int start_serial_inferface(int baudrate, char *serial_port) +{ + int fd = -1; + + fd = serialport_init(serial_port, baudrate); + if(fd == -1) { + fprintf(stderr, "couldn't open serial port %s\n", serial_port); + return -1; + } else { + fprintf(stderr, "Openning serial port: %s ...\n", serial_port); + } + + serialport_flush(fd); // take 2 seconds + fprintf(stderr, "Serial port ready!\n"); + + return fd; + +} + +int serial_readline(int fd, char* buf, int buf_max) +{ + if( fd == -1 ){ + perror("serial port not opened"); + return -1; + } + + memset(buf, 0, buf_max); + + do { + serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + } while( buf[0] == '\n' ); + + // serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + + return 0; +} + +int serial_writeline(int fd, char* buf) +{ + if(buf[strlen(buf)-1] != SERIAL_EOL_CHAR){ + //append EOL to buf + int len = strlen(buf); + buf[len] = SERIAL_EOL_CHAR; + buf[len+1] = '\0'; + } + + serialport_write(fd, buf); + + return 0; +} + +//For testing only +void test_adruino_serial(void) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1){ + fprintf(stderr, "[E2 Agent]: "); + fgets(buf, MAX_SERIAL_BUFFER, stdin); + + // serialport_write(fd, "hello\n"); + //serialport_write(fd, buf); + serial_writeline(fd, buf); + + serial_readline(fd, buf, MAX_SERIAL_BUFFER); + fprintf(stderr, "[Adruino] %s", buf); + } + + return; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h new file mode 100644 index 0000000..c061f8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/adruino_serial.h @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ADRUINO_SERIAL_H +#define ADRUINO_SERIAL_H + +#include "arduino-serial-lib.h" + +#define MAX_SERIAL_BUFFER 256 +#define DEFAULT_SERIAL_PORT "/dev/ttyACM0" +#define DEFAULT_BAUDRATE 115200 +#define SERIAL_EOL_CHAR '\n' +#define SERIAL_TIMEOUT 5000 //ms + +int start_serial_inferface(int baudrate, char *serial_port); + +int serial_readline(int fd, char* buf, int buf_max); + +int serial_writeline(int fd, char* buf); + +//For testing only +void test_adruino_serial(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c new file mode 100644 index 0000000..73cac84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.c @@ -0,0 +1,170 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + +#include "arduino-serial-lib.h" + +#include // Standard input/output definitions +#include // UNIX standard function definitions +#include // File control definitions +#include // Error number definitions +#include // POSIX terminal control definitions +#include // String function definitions +#include + +// uncomment this to debug reads +//#define SERIALPORTDEBUG + +// takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1") +// and a baud rate (bps) and connects to that port at that speed and 8N1. +// opens the port in fully raw mode so you can send binary data. +// returns valid fd, or -1 on error +int serialport_init(const char* serialport, int baud) +{ + struct termios toptions; + int fd; + + //fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); + fd = open(serialport, O_RDWR | O_NONBLOCK ); + + if (fd == -1) { + perror("serialport_init: Unable to open port s"); + return -1; + } + + //int iflags = TIOCM_DTR; + //ioctl(fd, TIOCMBIS, &iflags); // turn on DTR + //ioctl(fd, TIOCMBIC, &iflags); // turn off DTR + + if (tcgetattr(fd, &toptions) < 0) { + perror("serialport_init: Couldn't get term attributes"); + return -1; + } + speed_t brate = baud; // let you override switch below if needed + switch(baud) + { + case 4800: brate=B4800; break; + case 9600: brate=B9600; break; + #ifdef B14400 + case 14400: brate=B14400; break; + #endif + case 19200: brate=B19200; break; + #ifdef B28800 + case 28800: brate=B28800; break; + #endif + case 38400: brate=B38400; break; + case 57600: brate=B57600; break; + case 115200: brate=B115200; break; + } + cfsetispeed(&toptions, brate); + cfsetospeed(&toptions, brate); + + // 8N1 + toptions.c_cflag &= ~PARENB; + toptions.c_cflag &= ~CSTOPB; + toptions.c_cflag &= ~CSIZE; + toptions.c_cflag |= CS8; + // no flow control + toptions.c_cflag &= ~CRTSCTS; + + //toptions.c_cflag &= ~HUPCL; // disable hang-up-on-close to avoid reset + + toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines + toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl + + toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw + toptions.c_oflag &= ~OPOST; // make raw + + // see: http://unixwiz.net/techtips/termios-vmin-vtime.html + toptions.c_cc[VMIN] = 0; + toptions.c_cc[VTIME] = 0; + //toptions.c_cc[VTIME] = 20; + + tcsetattr(fd, TCSANOW, &toptions); + if( tcsetattr(fd, TCSAFLUSH, &toptions) < 0) { + perror("init_serialport: Couldn't set term attributes"); + return -1; + } + + return fd; +} + +// +int serialport_close( int fd ) +{ + return close( fd ); +} + +// +int serialport_writebyte( int fd, uint8_t b) +{ + int n = write(fd,&b,1); + if( n!=1) + return -1; + return 0; +} + +// +int serialport_write(int fd, const char* str) +{ + int len = strlen(str); + int n = write(fd, str, len); + if( n!=len ) { + perror("serialport_write: couldn't write whole string\n"); + return -1; + } + return 0; +} + +// +int serialport_read_until(int fd, char* buf, char until, int buf_max, int timeout) +{ + char b[1]; // read expects an array, so we give it a 1-byte array + int i=0; + do { + int n = read(fd, b, 1); // read a char at a time + if( n==-1) return -1; // couldn't read + if( n==0 ) { + usleep( 1 * 1000 ); // wait 1 msec try again + timeout--; + if( timeout==0 ) return -2; + continue; + } +#ifdef SERIALPORTDEBUG + fprintf(stderr, "serialport_read_until: i=%d, n=%d b='%c'\n",i,n,b[0]); // debug +#endif + buf[i] = b[0]; + i++; + } while( b[0] != until && i < buf_max && timeout>0 ); + + buf[i] = 0; // null terminate the string + return 0; +} + +// +int serialport_flush(int fd) +{ + sleep(2); //required to make flush work, for some reason + return tcflush(fd, TCIOFLUSH); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h new file mode 100644 index 0000000..74fe592 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/Serial/arduino-serial-lib.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + + +#ifndef __ARDUINO_SERIAL_LIB_H__ +#define __ARDUINO_SERIAL_LIB_H__ + +#include // Standard types + +int serialport_init(const char* serialport, int baud); +int serialport_close(int fd); +int serialport_writebyte( int fd, uint8_t b); +int serialport_write(int fd, const char* str); +int serialport_read_until(int fd, char* buf, char until, int buf_max,int timeout); +int serialport_flush(int fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt new file mode 100644 index 0000000..727edbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/demo_setup.txt @@ -0,0 +1,14 @@ +# DEMO March 20, 2019 + ## E2 Agent Laptop with IP x.x.x.x + - Connect to adruino via USB + - Connect to E2 Termination Desktop via Ethernet + - Run E2 Agent: $E2SIM_DIR/build/e2sim x.x.x.x + + ## E2 Termination Desktop + - Run xApp + cd $E2SIM_DIR/rmr_interface/tests/pendulum_xapp + bash run_receiver + + - Run E2 Termination + cd $E2SIM_DIR + ./build_and_run_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c new file mode 100644 index 0000000..613ce57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_closedloop.c @@ -0,0 +1,263 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include +#include +#include +#include +#include +#include //for close() +#include //for inet_ntop() + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" +#include "adruino_serial.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +static void pendulum_control_E2_agent(int client_fd) +{ + fprintf(stderr, "--------------------------------------\n"); + fprintf(stderr, "E2 AGENT - START PENDULUM CONTROL\n"); + fprintf(stderr, "--------------------------------------\n"); + + uint8_t *buffer; + uint32_t len; + clock_t begin; + double rtt; //ms + + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len; + + double angle; + double torque; + long sqn; + int count = 0; + + //serial + // int serial_fd; + char serial_buffer[MAX_SERIAL_BUFFER]; + // serial_fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + // + // char *delay_str_prev = "$0#\n"; + // //char *delay_str_new; + // + // int MSG_NUM = 10; + // + // //Always start with 0 delay + // serialport_write(serial_fd, "$0#\n"); + + // for(int i = 0; i < MSG_NUM; i++) + while(1) + { + + fprintf(stderr, "----------------\n"); + count += 1; + buffer = NULL; + len = 0; + + // //1.Read from serial + // serial_readline(serial_fd, serial_buffer, MAX_SERIAL_BUFFER); + // if(serial_buffer[0] == '\n') + // { + // //fprintf(stderr, "RECEIVED EOL\n"); + // continue; + // } + // //fprintf(stderr, "[Adruino] %s", serial_buffer); + usleep(5*1000); + + snprintf(serial_buffer, sizeof(serial_buffer)-1, "E2 AGENT PING"); + + begin = clock(); + + //2. Encode pendulum angle to ASN1 message + + len = pendulum_create_asn_msg(&buffer, 0, 0, 0, serial_buffer); + + //3. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + fprintf(stderr, "Sent ASN1 message to E2 Termination\n"); + } + + // 4. Receive response from E2 Termination + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = 0; + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return; + } + + char *recv_str; + recv_str = pendulum_get_strval(recv_buf, recv_len); + fprintf(stderr, "Received response message #%d from xApp: %s\n", count, recv_str); + + // 5. TODO: Send response to serial + // Compare if delay has changed: + // if(strcmp(delay_str_prev, recv_str) != 0) { + // serial_writeline(serial_fd, recv_str); + // } + + //serial_writeline(serial_fd, recv_str); + + //Write to a file + FILE *f; + f = fopen("arduino_delay.txt", "w"); + fprintf(f, "%s", recv_str); + fclose(f); + + begin = clock() - begin; + rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + fprintf(stderr, "E2Agent-RIC-E2Agent RTT = %f ms\n", rtt); + + } + + close(client_fd); +} + +int main(int argc, char *argv[]) +{ + fprintf(stderr, "E2 AGENT - PENDULUM CONTROL. Version %s\n", VERSION); + + // char *recv_str = "9"; + // int delay; + // + // printf("delay = %d\n", atoi(recv_str)); + // + // long delay = 22.5; + // + // printf("delay = %d\n", (int)delay); + // return 0; + + // test_rmr(); return 0; + // test_adruino_serial(); return 0; + + char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + int server_fd; + int client_fd; + struct sockaddr client_addr; + socklen_t client_addr_size; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n" , server_port); + return -1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + fprintf(stderr, "Unrecognized option.\n"); + fprintf(stderr, "Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return -1; + } + + server_fd = sctp_start_server(server_ip, server_port); + + fprintf(stderr, "Waiting for connection...\n"); + client_fd = accept(server_fd, &client_addr, &client_addr_size); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + return -1; + } + + //Todo: retrieve client ip addr + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + char client_ip_addr[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip_addr, INET_ADDRSTRLEN); + + fprintf(stderr, "New client connected from %s\n", client_ip_addr); + + // while(1) //put while loop if want to receive from multiple clients + // { + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + memset(recv_buf, 0, sizeof(recv_buf)); + + fprintf(stderr, "------------------------\n"); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + else if(recv_len == 0) + { + fprintf(stderr, "\nConnection from %s closed by remote peer\n", client_ip_addr); + if(close(client_fd) == -1) + { + perror("close"); + } + return -1; + } + + //fprintf(stderr, "Received a message of size %d\n", recv_len); + + //TODO: check PPID here before calling x2ap handler + + sctp_data_t response = {NULL, 0}; + x2ap_eNB_handle_message(recv_buf, recv_len, &response); + + //======================================================================= + //reply to client + assert(response.data != NULL); + if(sctp_send_to_socket(client_fd, response.data, (size_t)response.len) > 0){ + fprintf(stderr, "Sent X2 SETUP RESPONSE \n"); + } else{ + perror("send to socket"); + return -1; + } + + fprintf(stderr, "X2 Setup Completed \n"); + + //========================================================================= + // Pendulum interaction + // Send pendulum state to E2 Termination and receive response + pendulum_control_E2_agent(client_fd); + // } //end while + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c new file mode 100644 index 0000000..33fa0ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_serial.c @@ -0,0 +1,56 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "e2sim_defs.h" +#include + +#include "adruino_serial.h" + +int main(int argc, char *argv[]) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1) + { + //usleep(5*1000); //sleep 5ms between read + sleep(1); + + FILE *f; + f = fopen("arduino_delay.txt", "r"); + assert(f); + + fread(buf, 1, sizeof(buf), f); + + printf("delay content = %s \n", buf); + + serial_writeline(fd, buf); + + fclose(f); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c new file mode 100644 index 0000000..c96a440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2sim_test_client.c @@ -0,0 +1,378 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +#include "x2ap_generate_messages.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +//time +#include + +//these are the metrics being sent to the a1 mediator +int ave_ric_rtt_last_epoch=0; +int ave_msg_rate_last_epoch=0; +int ave_pendulum_msg_rate_last_epoch=0; + +int total_rtt_current_epoch=0; +int total_messages_current_epoch=0; +int total_pendulum_messages_current_epoch=0; + +int total_rtt_entries_current_epoch=0; + +int epoch_duration = 1;//in seconds + +long rtt_epoch_start_time =0; + +long msg_rate_epoch_start_time =0; +long pendulum_msg_rate_epoch_start_time = 0; + +long current_timestamp_in_us(){ + struct timeval currentTime; + gettimeofday(¤tTime, NULL); + return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec; +} +void update_rtt_metrics(long rtt){//called every time there is a new rtt measurement + if(rtt_epoch_start_time == 0) + rtt_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + + total_rtt_current_epoch = total_rtt_current_epoch+rtt; + total_rtt_entries_current_epoch++; + + if((current_timestamp_in_us() - rtt_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_ric_rtt_last_epoch = total_rtt_current_epoch/total_rtt_entries_current_epoch; + total_rtt_current_epoch =0; + rtt_epoch_start_time = 0; + } +} + +void update_msg_rate_metrics(){ + if(msg_rate_epoch_start_time == 0) + msg_rate_epoch_start_time= current_timestamp_in_us(); //start of a new epoch + total_messages_current_epoch++; + if((current_timestamp_in_us() - msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_msg_rate_last_epoch = total_messages_current_epoch; + total_messages_current_epoch =0; + msg_rate_epoch_start_time =0; + } +} + +void update_pendulum_control_rate() +{ + if(pendulum_msg_rate_epoch_start_time == 0) + pendulum_msg_rate_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + total_pendulum_messages_current_epoch++; + + if((current_timestamp_in_us() - pendulum_msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_pendulum_msg_rate_last_epoch = total_pendulum_messages_current_epoch; + total_pendulum_messages_current_epoch = 0; + pendulum_msg_rate_epoch_start_time = 0; + } + +} + +void send_metrics_to_a1_med(struct rmr_context *rmr_c){ + int mtype=103; + char* metrics= malloc(1024); + int time_int = current_timestamp_in_us()/1000000; + //int ave_msg_rate_last_epoch=500; + snprintf(metrics, 1024, "{%s:%d, %s:%d, %s:%d, %s:%d}", \ + "\"latency\"", ave_ric_rtt_last_epoch/1000, \ + "\"ricload\"",ave_msg_rate_last_epoch, \ + "\"load\"",ave_pendulum_msg_rate_last_epoch, \ + "\"time\"",time_int); + rmr_send_wrapper(rmr_c, mtype, metrics); + printf("Sent message of type:%d to a1_med with content:%s\n",mtype,metrics); +} + +void forward_to_load_consumer(struct rmr_context *rmr_c){//the content does not matter + int mtype=105; + char* load_message="dummy load"; + rmr_send_wrapper(rmr_c, mtype, load_message); + printf("Sent message of type:%d to load consumer with content:%s\n",mtype,load_message); +} + +static void pendulum_control_E2_Termination(int client_fd) +{ + printf("--------------------------------------\n"); + printf("E2 TERMINATION - START PENDULUM CONTROL\n"); + printf("--------------------------------------\n"); + + uint8_t *send_buffer; + uint8_t recv_buffer[1024]; + uint32_t send_len; + uint32_t recv_len; + + clock_t begin = clock(); + double rtt; + double rtt_stats[100000]; + long recv_count = 0; + long fail_count = -1; //ignore the first message (see adruino code) + + long sqn; + int count = 0; + + //================================= + + //Setup context + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "E2TERM_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMR to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + + //================================== + long loop_start_time = 0; + while(1){ + printf("----------------\n"); + count += 1; + loop_start_time = current_timestamp_in_us(); + //0. Receiving ASN message from E2 Agent + memset(recv_buffer, 0, sizeof(recv_buffer)); + printf("Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + recv_len = 0; + + printf(" 1Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + //long time_of_message_from_e2agent = current_timestamp_in_us(); + + if((recv_len = recv(client_fd, &recv_buffer, sizeof(recv_buffer), 0)) == -1) { + perror("recv"); + return; + } + + long time_of_message_from_e2agent = current_timestamp_in_us(); + + printf(" 2Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + if(recv_len == 0) { + rmr_close_wrapper(rmr_c); + + printf("Connection from closed by remote peer.\n"); + if(close(client_fd) == -1) { + perror("close"); + } + return; + } + + printf(" 3Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // begin = clock() - begin; + // rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + //printf("E2Term-Adruino-E2Term = %f ms\n", rtt); + + //2. Decode ASN message and Extract pendulum angle + char *recv_str; + recv_str = pendulum_get_strval(recv_buffer, recv_len); + // if( (strcmp(recv_str, "-1") == 0) || (strcmp(recv_str, "") == 0) ) + + if(strcmp(recv_str, "\n") == 0) + { + printf("RECEIVED EOL\n"); + } + + printf(" 4Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // if(atof(recv_str) <= 0) + // { + // printf("FAILLLLLL\n"); + // fail_count += 1; + // } + // else { + // rtt_stats[recv_count] = atof(recv_str); + // recv_count++; + // } + + printf("Time to receive angle message from arduino after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + printf("Received message #%d from Adruino: %s\n", count, recv_str); + //printf("Last reported RTT (Adruino-RIC-Adruino): %f ms, fail_count = %ld\n", + // atof(recv_str)/1000, fail_count); + + // 3. [BHARATH] send_to_xApp(&pendulum_state, &response) + // while(1) { + // usleep( 10 ); + // char* message = "foo 111"; + char reply[1024]; + int got_pend_control=0; + rmr_send_wrapper(rmr_c, mtype, recv_str ); + printf("Sent message of type:%d to pendulum xApp with content:%s\n",mtype,recv_str); + long angle_receive_time =0; + while (got_pend_control == 0){ + if(rmr_poll_for_message(rmr_c) == 1) { + update_msg_rate_metrics(); + switch(rmr_c->rbuf->mtype) { + case 33 : + angle_receive_time = current_timestamp_in_us(); + got_pend_control=1; + update_pendulum_control_rate(); //add this + strcpy(reply,rmr_c->rbuf->payload); + printf("Received control message from pendulum xapp with message type: %d and content %s\n",rmr_c->rbuf->mtype, reply); + break; + case 102 : + printf("Received METRIC request from A1 mediator with message type: %d and content %s\n",rmr_c->rbuf->mtype,rmr_c->rbuf->payload); + send_metrics_to_a1_med(rmr_c); + break; + case 104 : + printf("***************************Received load from load generator****************************"); + forward_to_load_consumer(rmr_c); + break; + default : + continue; + } + } + + } + printf("Time to receive control message from xapp after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); +// snprintf(reply, 1024, "$%d#\n", (int)ave_ric_rtt_last_epoch/1000); + send_len = pendulum_create_asn_msg(&send_buffer, 0, 0, 0, reply); + printf("Time to create asn message after receiving angle: %ld microseconds\n",current_timestamp_in_us() - angle_receive_time); + begin = clock(); + + //6. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, send_buffer, (size_t)send_len) > 0){ + printf("Sent ASN1 response to E2 Agent\n"); + } + long time_of_reply_to_e2agent = current_timestamp_in_us(); + printf("Time to send asn message after receiving angle: %ld microseconds \n",current_timestamp_in_us() - angle_receive_time); + long rtt = (time_of_reply_to_e2agent - time_of_message_from_e2agent); + ave_ric_rtt_last_epoch = rtt; + printf("RIC RTT is %lf milliseconds\n", rtt/1000.0); + //update_rtt_metrics(rtt); + } + + rmr_close_wrapper(rmr_c); + +} + +int main(int argc, char* argv[]) +{ + // test_rmr(); return 0; + + const char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + printf("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return 1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + printf("Unrecognized option.\n"); + printf("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return 0; + } + + int client_fd; + client_fd = sctp_start_client(server_ip, server_port); + + uint8_t *buffer; + uint32_t len; + + //Note: put a while(1) loop here if want client to stay + // for(int i = 0; i < 3; i++) + // { + buffer = NULL; + len = 0; + + printf("------------------------\n"); + clock_t begin; + begin = clock(); + + //Create pdu for x2 message and send to socket + len = x2ap_generate_x2_setup_request(&buffer); + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + printf("Sent X2 SETUP REQUEST\n"); + } + + //======================================================================= + //printf("waiting for server response\n"); + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + //sctp_recv_from_socket(client_fd, recv_buf, sizeof(recv_buf)); + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + + //printf("Received a message of size %d\n", recv_len); + x2ap_eNB_handle_message(recv_buf, recv_len, NULL); + + begin = clock() - begin; + double time_taken = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + printf("Close-loop time: %f ms \n", time_taken); + printf("X2 Setup Completed \n"); + + // } //end iteration + + //========================================================================= + // Pendulum interaction + // Receive pendulum state from E2 Agent and send response + pendulum_control_E2_Termination(client_fd); + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp new file mode 100644 index 0000000..b65ac65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/e2termination_test.cpp @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "asn_e2ap.hpp" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "e2ap_asn_codec.hpp" + +using namespace std; + +void test_send_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_X2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + } + +void test_send_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_ENDCX2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_send_RICSubscriptionRequest(int &client_fd) +{ + LOG_I("Test RIC SUBSCRIPTION"); + + /* Create RIC SUBSCRITION REQUEST */ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + RICsubscription_params_t params; + params.request_id = 2; + params.seq_number = 200; + params.ran_func_id = 0; + params.event_trigger_def = "hello world"; + + RIC_action_t action1(1, RICactionType_report); + // RIC_action_t action2(3, RICactionType_insert); + // RIC_action_t action3(5, RICactionType_insert); + // RIC_action_t action4(7, RICactionType_insert); + params.actionList.push_back(action1); + // params.actionList.push_back(action2); + // params.actionList.push_back(action3); + // params.actionList.push_back(action4); + + e2ap_create_RICsubscriptionRequest(pdu, params); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + //wait to receive response and indication (if any) + sctp_buffer_t recv_buf; + LOG_I("[SCTP] Waiting for SCTP data"); + while(1) + { + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + else + break; + + } + + + return; + //========================================================================== + + //decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + + e2ap_decode_pdu(pdu2, data.buffer, data.len); + + RICsubscription_params_t params2; + e2ap_parse_RICsubscriptionRequest(pdu2, params2); + printf("request_id = %d\n", params2.request_id); + printf("seq_number = %d\n", params2.seq_number); + printf("ran_func_id = %d\n", params2.ran_func_id); + printf("event = %s\n", ¶ms2.event_trigger_def[0]); + + for( auto const &a : params.actionList) + { + printf("action id = %d, action type = %d\n", (int)a.action_id, (int)a.action_type); + } + + + LOG_I("================= RESPONSE ==========================="); + for(size_t i = 0; i < params2.actionList.size(); i++) + { + //example logic: admit every other action + if(i%2 == 0) { + params2.actionList[i].isAdmitted = true; + } else { + params2.actionList[i].isAdmitted = false; + params2.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params2.actionList[i].notAdmitted_subCause = 5; + } + } + + e2ap_pdu_t* res_pdu = new_e2ap_pdu(); + e2ap_create_RICsubscriptionResponse(res_pdu, params2); + + e2ap_print_pdu(res_pdu); + + //Encode into buffer + sctp_buffer_t data_resp; + e2ap_encode_pdu(res_pdu, data_resp.buffer, sizeof(data_resp.buffer), data_resp.len); + + LOG_I("================= FAILURE ==========================="); + e2ap_pdu_t* fail_pdu = new_e2ap_pdu(); + + RICsubscription_params_t params3; + e2ap_parse_RICsubscriptionRequest(pdu2, params3); + + for(size_t i = 0; i < params3.actionList.size(); i++) + { + params3.actionList[i].isAdmitted = false; + params3.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params3.actionList[i].notAdmitted_subCause = 5; + } + + e2ap_create_RICsubscriptionFailure(fail_pdu, params3); + e2ap_print_pdu(fail_pdu); + + //Encode into buffer + sctp_buffer_t data_fail; + e2ap_encode_pdu(fail_pdu, data_fail.buffer, sizeof(data_fail.buffer), data_fail.len); + +} + +int main(int argc, char* argv[]){ + + LOG_I("E2 Termination Test"); + + // test_send_RICSubscriptionRequest(); + // return 0; + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //--------------------------------------------------- + // test_send_X2Setup(client_fd); + test_send_ENDCX2Setup(client_fd); + test_send_RICSubscriptionRequest(client_fd); + + //--------------------------------------------------- + + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 new file mode 100644 index 0000000..d36a4de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/Pendulum/pendulum.asn1 @@ -0,0 +1,12 @@ +PendulumModule DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Pendulum ::= SEQUENCE { + sequence INTEGER OPTIONAL, + angle REAL OPTIONAL, + torque REAL OPTIONAL, + strval PrintableString OPTIONAL +} + +END diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt new file mode 100644 index 0000000..4faee6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/CMakeLists.txt @@ -0,0 +1,59 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB WLG_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_wlg.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_wlg ${WLG_SOURCES}) +target_link_libraries( ric_wlg ${SCTP_STD_LIB} ) + +#---------------------------------------------- +file(GLOB RICPERF_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_perf.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_perf ${RICPERF_SOURCES}) +target_link_libraries( ric_perf ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh new file mode 100644 index 0000000..2f81b56 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/build_wlg.sh @@ -0,0 +1,27 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +mkdir -p build +cd build +rm -rf CMakeCache.txt +cmake .. +make -j`nproc` diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp new file mode 100644 index 0000000..9403283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_perf.cpp @@ -0,0 +1,287 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +void set_seqnum(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + // xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + + // e2ap_asn1c_print_pdu(pdu); +} + +int subresponse_get_sequenceNum(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + return requestid->ricRequestSequenceNumber; + break; + } + } +} + +void subrequest_set_sequenceNum(E2AP_PDU_t* pdu, int seq) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + requestid->ricRequestSequenceNumber = seq; + break; + } + } + +} + +void subscription_response_get_field(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int requestID_val, sequenceNum; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + requestID_val = requestid->ricRequestorID; + sequenceNum = requestid->ricRequestSequenceNumber; + requestid->ricRequestSequenceNumber = 202; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + // case (ProtocolIE_ID_id_RICsubscription): + // ricsubscription = &memb_ptr->value.choice.RICsubscription; + // xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + // break; + } + } + + LOG_I("Request ID = %d, seq = %d", requestID_val, sequenceNum); +} + +void subscription_request_get_field(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICsubscription): + ricsubscription = &memb_ptr->value.choice.RICsubscription; + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + break; + } + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator - Performance Test"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + + //4. Receive RIC SUBSCRIPT RESPONSE + int count = 0; + + while(1) + { + usleep(1000); //sleep for one ms + + sctp_buffer_t recv_buf; + + int res_seq; + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + // e2ap_handle_sctp_data(client_fd, recv_buf); + + E2AP_PDU_t* res_pdu = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(res_pdu, recv_buf.buffer, recv_buf.len); + + int procedureCode = e2ap_asn1c_get_procedureCode(res_pdu); + int index = (int)res_pdu->present; + + if(index == E2AP_PDU_PR_successfulOutcome && \ + procedureCode == ProcedureCode_id_ricSubscription) + { + res_seq =subresponse_get_sequenceNum(res_pdu); + count++; + + LOG_I("Received RIC SUBSCRIPTION RESPONSE, seq = %d, totalCount = %d",\ + res_seq, count); + + //Put res_seq in new subscription request + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + subrequest_set_sequenceNum(req_pdu, res_seq); + // e2ap_asn1c_print_pdu(req_pdu); + + encode_and_send_sctp_data(req_pdu, client_fd); + LOG_I("Send new SUBSCRIPT REQUEST, seq = %d", res_seq); + } + + } + } + + + // E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // + // //Extract subscription response sequence number + // int res_seq = subresponse_get_sequenceNum(res_pdu); + // LOG_I("Subscription Response SeqNo = %d", res_seq); + // + // //Put responseSeq in new subscription request + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // + // subrequest_set_sequenceNum(req_pdu, res_seq); + + // e2ap_asn1c_print_pdu(req_pdu); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp new file mode 100644 index 0000000..309153d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/WLG/ric_wlg.cpp @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC WLG"); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt new file mode 100644 index 0000000..b257505 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/CMakeLists.txt @@ -0,0 +1,49 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(x2term) + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "${E2SIM_ROOT}/test/X2/x2term.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp new file mode 100644 index 0000000..db279a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2agent.cpp @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("X2 Agent. Version %s", VERSION); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(server_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp new file mode 100644 index 0000000..e325827 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2term.cpp @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + // sctp_send_data(client_fd, data); + sctp_send_data_X2AP(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //Send X2 Setup Request + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + + //wait to receive X2SetupResponse + while(1){ + wait_for_sctp_data(client_fd); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp new file mode 100644 index 0000000..1953ce6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/X2/x2termination_test.cpp @@ -0,0 +1,119 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" +#include "x2ap_message_handler.hpp" +#include "x2ap_asn_codec.hpp" + +using namespace std; + +void test_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //expect X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_ENDCX2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //expect ENDC X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect ENDC X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +int main(int argc, char* argv[]){ + + LOG_I("X2 Termination Test"); + + options_t ops = read_input_options(argc, argv); + + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + test_X2Setup(client_fd); + // test_ENDCX2Setup(client_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README new file mode 100644 index 0000000..9e5a197 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/README @@ -0,0 +1,13 @@ +This is just a basic version of the README that the author of the E2 simulator can augment as he/she sees fit. + +Building rmr + +- Call the rmr_install.sh + + +# Running the sender and receiver + +- Create a route generate (.rt) file that is common to both the sender and receiver and place it in $HOME/global_rmr_files/global_rmr_routes.rt +- Build the receiver in the /tests/pendulum_xapp folder by invoking build_recvr.sh. Run it using bash run_receiver +- Build the sender in the /tests/sender folder by invoking build_sender.sh. Run it using bash run_sender. +- You can see packets being exchanged. diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh new file mode 100644 index 0000000..786a07e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/rmr_install.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +#git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr && (cd rmr && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.oran-osc.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg && git checkout 6735f136906ce2 ) + +cd rmr/ +mkdir $HOME/usr +mkdir .build +cd .build +cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh new file mode 100644 index 0000000..602046f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_rcvr.c -g -o rmr_rcvr -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export PENDULUM_XAPP_RMR_RCV_PORT=5560 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies + +export PRINT_FREQ=10000 #frequency at which test stats will be printed + +RMR_RCV_ACK=1 ./rmr_rcvr $PRINT_FREQ; # receiver that will ack every sender message diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c new file mode 100644 index 0000000..2d8e7fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/receiver/rmr_rcvr.c @@ -0,0 +1,163 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// :vim ts=4 sw=4 noet: +/* + Mnemonic: rmr_rcvr2.c + Abstract: Very simple test listener built on RMr libraries. It does nothing + but return the message it recevied back to the sender. + + Define these environment variables to have some control: + RMR_SEED_RT -- path to the static routing table + RMR_RTG_SVC -- host:port of the route table generator + + One command line parm is accepted: stats frequency. This is a number, n, + which causes stats to be generated after every n messages. If set to 0 + each message is written when received and no stats (msg rate) is generated. + + Date: 11 February 2018 + Author: E. Scott Daniels + + Mods: 18 Mar 2019 -- simplified for demo base. +*/ + +#include +#include +#include +#include +#include + +#include + +typedef struct { + int32_t mtype; // message type ("long" network integer) + int32_t plen; // payload length + unsigned char xid[RMR_MAX_XID]; // space for user transaction id or somesuch + unsigned char sid[RMR_MAX_SID]; // sender ID for return to sender needs + unsigned char src[RMR_MAX_SRC]; // name of the sender (source) + struct timespec ts; // timestamp ??? +} mhdr_t; + + +int main( int argc, char** argv ) { + void* mrc; // msg router context + rmr_mbuf_t* msg = NULL; // message received + int i; + char* listen_port; + char* tok; + int must_ack = 1; // flag -- if set we rts all messages + mhdr_t* hdr; + int last_seq = 0; // sequence number from last message + int this_seq; // sequence number on this message + int count = 0; // count of msg since last status + long long tcount = 0; // total count of messages + time_t ts; + time_t lts; + int stat_freq = 20000; // write stats after reciving this many messages + int first_seq = -1; // first sequence number we got to report total received + int max_rt = 1000; // max times we'll retry an ack + + if( (tok = getenv( "RMR_RCV_ACK" )) != NULL ) { + must_ack = atoi( tok ); + } + + if( (listen_port = getenv( "PENDULUM_XAPP_RMR_RCV_PORT" )) == NULL ) { + listen_port = "4560"; + } + + if( argc > 1 ) { + stat_freq = atoi( argv[1] ); + } + fprintf( stderr, " stats will be reported every %d messages\n", stat_freq ); + + mrc = rmr_init( listen_port, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // start your engines! + if( mrc == NULL ) { + fprintf( stderr, " ABORT: unable to initialise RMr\n" ); + exit( 1 ); + } + + while( ! rmr_ready( mrc ) ) { + fprintf( stderr, " waiting for RMr to show ready\n" ); + sleep( 1 ); + } + fprintf( stderr, " RMr now shows ready\n" ); + + lts = time( NULL ); + fprintf( stderr, " listening on %s acking %s\n", listen_port, must_ack != 0 ? "on" : "off" ); + + //rmr_set_stimeout( mrc, 50 ); + while( 1 ) { + sleep (2 ); + msg = rmr_rcv_msg( mrc, msg ); // block until one arrives + if( msg == NULL ) { + continue; // shouldn't happen, but don't crash if we get nothing + } + if( msg->mtype < 0 || msg->state != RMR_OK ) { + fprintf( stderr, "[WRN] bad msg: state=%d errno=%d\n", msg->state, errno ); + continue; // just loop to receive another + } + + if( stat_freq == 0 ) { // mechanism to dump all received messages for quick testing + fprintf( stdout, " msg received: type = %d len = %d (%s)\n", msg->mtype, msg->len, msg->payload ); // assume a nil term string in payload + } + + count++; // messages received for stats output + tcount++; + + //if( stat_freq >= 1000 ) { + if(1) { + //if( (count % stat_freq) == 0 ) { + if(1) { + ts = time( NULL ); + if( ts - lts ) { + + fprintf( stderr, " %7lld received %5lld msg/s over the last %3lld seconds mrt=%d, with content=%s\n", + (long long) last_seq - first_seq, (long long) (count / (ts-lts)), (long long) ts-lts, max_rt,msg->payload ); + lts = ts; + count = 0; + } + } + } + + if( must_ack ) { // send back a response + //fprintf( stdout, " msg: type = %d len = %d; acking\n", msg->mtype, msg->len ); + //msg->len = snprintf( msg->payload, 1024, "bar %lld", tcount ); // ack with bar and counter + msg->len = snprintf( msg->payload, 1024, "Reply hello back to Arduino!\n"); + // msg->len = snprintf( msg->payload, 1024, "OK\n"); + + + //msg->mtype = 999; //only to be used if rts is not possible + + //msg = rmr_send_msg (mrc, msg); //only to be used if rts is not possible + + msg = rmr_rts_msg( mrc, msg ); // this is a retur to sender; preferred + //if( (msg = rmr_send_msg( mrc, msg )) != NULL ) { // this is a routed send; not preferred, but possible + if( (msg = rmr_rts_msg( mrc, msg )) != NULL ) { + //----- checking too many times here has been problematic and causes what appears to be race condidtions in NNG threads; for now max_rt should be small + max_rt = 2; + while( max_rt > 0 && msg->state != RMR_OK && errno == EAGAIN ) { // NNG likes to refuse sends, just keep trying on eagain + max_rt--; + rmr_rts_msg( mrc, msg ); + //rmr_send_msg (mrc, msg); + } + } + } + + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh new file mode 100644 index 0000000..c4eb8fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/build_and_run_sender.sh @@ -0,0 +1,29 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_sender.c -g -o rmr_sender -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export DUMMY_SENDER_RMR_RCV_PORT=38086 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies +export DEMO_MAX_PAYLOAD_BYTES=240 # max_size of payload + +./rmr_sender; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c new file mode 100644 index 0000000..724b0d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_sender.c @@ -0,0 +1,96 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// :vim ts=4 sw=4 noet: + +/* + Mnemonic: rmr_sender2.c + Abstract: Very simple test sender that polls and deals with responses + in between sends (from a single process). + + Date: 18 February 2018 + Author: E. Scott Daniels + + Modified: 18 Mar 2019 - changes to support demo +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "rmr_wrapper.h" + + +void usage( char* argv0 ) { + fprintf( stderr, "usage: %s [mtype-max]\n", argv0 ); + fprintf( stderr, "Sender will send messages with rotating msg types from 0 through mtype-max (if supplied)\n" ); + fprintf( stderr, "if not supplied, only mtype 0 is sent\n" ); + fprintf( stderr, "The default listen port for return messages is 43086; this can be changed by setting DUMMY_SENDER_RMR_RCV_PORT in the environment.\n" ); + fprintf( stderr, "The sender will send forever unless DEMO_SENDER_MAX is set in the environment which causes termination after max messages.\n" ); + fprintf( stderr, "The sender will poll for received messages after each send. The amount of time waited is controlled with DEMO_SENDER_PTO (ms) in the env. Use 0 for non-blocking poll.\n" ); +} + +int main( int argc, char** argv ) { + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + long count = 0; + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "DUMMY_SENDER_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMr to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + while( 1 ) { + usleep( 10 ); // simulate some work being done + char* message = "foo 111"; + + if(rmr_send_wrapper (rmr_c, mtype, message ) == 1) { + //message successfully received in the receive buffer + char reply[1024]; + strcpy(reply,rmr_c->rbuf->payload); + fprintf( stderr, "Acknowledgment received with content:%s\n",rmr_c->rbuf->payload); + rcount++; + } + count++; + + if( (count % 5000) == 0 ) { + fprintf( stdout, "[INFO] total sent: %ld total received: %ld drops=%ld\n", count, rcount, count - rcount ); + } + + } + + fprintf( stderr, "[INFO] sender is terminating having sent %ld messages\n", count ); + rmr_close_wrapper(rmr_c); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h new file mode 100644 index 0000000..446d20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/test/rmr_interface/tests/sender/rmr_wrapper.h @@ -0,0 +1,142 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +int epoll_to = 1;// global default epoll timout -- 1ms +char* eparm; // generic env pointer + +struct rmr_context { + void* mrc; + int rcv_fd; // pollable fd + struct epoll_event epe; // event definition for event to listen to + struct epoll_event events[10]; // wait on 10 possible events + int ep_fd; + int max_payload_size; // ++SCOTT + rmr_mbuf_t* sbuf; // send buffer + rmr_mbuf_t* rbuf; // received buffer +}; + + +struct rmr_context * rmr_init_wrapper(char* lport){ + + struct rmr_context *rmr_c = malloc(sizeof (struct rmr_context)); + fprintf( stderr, "[INFO] glistening for replies on %s\n", lport ); + + + rmr_c->mrc = rmr_init(lport, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // setup RMr and get a context (rmr_c.mrc) + rmr_c->ep_fd=-1; + + //polling related initializations + rmr_c->rcv_fd = rmr_get_rcvfd( rmr_c->mrc );// get the fd to poll for messages received + if( rmr_c->rcv_fd < 0 ) { + fprintf( stderr, "[FAIL] unable to set up polling fd\n" ); + exit( 1 ); + } + + if( (rmr_c->ep_fd = epoll_create1( 0 )) < 0 ) { + fprintf( stderr, "[FAIL] unable to create epoll fd: %d\n", errno ); + exit( 1 ); + } + rmr_c->epe.events = EPOLLIN; + rmr_c->epe.data.fd = rmr_c->rcv_fd; + + if( epoll_ctl( rmr_c->ep_fd, EPOLL_CTL_ADD, rmr_c->rcv_fd, &rmr_c->epe ) != 0 ) { + fprintf( stderr, "[FAIL] epoll_ctl status not 0 : %s\n", strerror( errno ) ); + exit( 1 ); + } + //end of polling related initializations + + //++SCOTT------ next lines until !!SCOTT + rmr_c->max_payload_size = 240; //default + if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + rmr_c->max_payload_size = atoi(eparm); // override with env + } + //!!SCOTT + + //~~SCOTT next line + rmr_c->sbuf = rmr_alloc_msg( rmr_c->mrc, rmr_c->max_payload_size ); // allocate largest payload to send + rmr_c->rbuf = NULL; + + return rmr_c; +} + +void rmr_send_wrapper (struct rmr_context *rmr_c, int mtype, char* message) { + //--SCOTT int max_payload_size = 240; //default + //--SCOTT if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + //--SCOTT max_payload_size = atoi(eparm); + //--SCOTT } + + //~~SCOTT next line + snprintf( rmr_c->sbuf->payload, rmr_c->max_payload_size, "%s", message); // simple send message -- replace with real content + + rmr_c->sbuf->mtype = mtype; // fill in message meta data + rmr_c->sbuf->len = strlen( rmr_c->sbuf->payload ) + 1; // actual length of payload (count the nil end of string) + rmr_c->sbuf->state = 0; + + //retry send for a few times before giving up + long natter = 0; // natter on for errors only once in a while + if( (rmr_c->sbuf = rmr_send_msg( rmr_c->mrc, rmr_c->sbuf )) != NULL ) {// unlikely, but might get a null pointer back if NNG really is buggered + if( rmr_c->sbuf->state != RMR_OK ) { + if( errno == EAGAIN ) { + while( rmr_c->sbuf->state != RMR_OK && errno == EAGAIN ) {// NNG likes to refuse sends, just keep trying on eagain + rmr_send_msg( rmr_c->mrc, rmr_c->sbuf ); + } + } else {// most likely connection refused, don't natter on + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + } + } else { + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + +} + +int rmr_poll_for_message(struct rmr_context *rmr_c){ + int nready; + int i; + int return_type =0; + //start polling the channel to read the acknowledgment + //~~SCOTT next line + + nready = epoll_wait( rmr_c->ep_fd, rmr_c->events, 10, epoll_to ); // wait up to epoll_to ms for a response + for( i = 0; i < nready && i < 10; i++ ) { // loop through to find what is ready + if( rmr_c->events[i].data.fd == rmr_c->rcv_fd ) { // RMr has something + errno = 0; + rmr_c->rbuf = rmr_rcv_msg( rmr_c->mrc, rmr_c->rbuf ); // something ready; this should not block + if( rmr_c->rbuf ) { + // fprintf( stderr, " acknowledgment received:%s\n",rmr_c->rbuf->payload); + return_type = 1; //the message has been acknowledged + } + } + } + return return_type; +} + +void rmr_close_wrapper (struct rmr_context *rmr_c){ + + rmr_close( rmr_c->mrc ); + free(rmr_c); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes new file mode 100644 index 0000000..87ced95 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/asn_defs/generate_e2ap_e2sm_codes @@ -0,0 +1,39 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +E2AP_asn="e2ap-v031.asn" +E2SM_asn="e2sm-gNB-X2-release-1-v041.asn" +X2AP_asn="x2ap-no-desc-15-04.asn" + +GEN_DIR=../../src/ASN1c/ + +rm -f $GEN_DIR/*.c $GEN_DIR/*.h + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2AP_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2SM_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +echo "ASN1 C codes generated at $GEN_DIR" + +# asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER /tmp/e2ap-v031.asn /tmp/x2ap-no-desc-15-04.asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash new file mode 100644 index 0000000..1759621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/build_helper.bash @@ -0,0 +1,93 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +####################################### +# Helper Func +###################################### + +black='\E[30m' +red='\E[31m' +green='\E[32m' +yellow='\E[33m' +blue='\E[34m' +magenta='\E[35m' +cyan='\E[36m' +white='\E[37m' +reset_color='\E[00m' + +cecho() # Color-echo. arg1 = message, arg2 = color +{ + local default_msg="No Message." + message=${1:-$default_msg} + color=${2:-$green} + echo -e -n "$color$message$reset_color" + echo + return +} + +echo_error() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $red +} + +echo_fatal() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + echo_error "$my_string" + exit -1 +} + +echo_warning() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $yellow +} + +echo_success() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $green +} + +echo_info() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $blue +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c new file mode 100644 index 0000000..7d1391f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_asn1c @@ -0,0 +1,31 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +echo "Will install asn1c" +sudo rm -rf asn1c +git clone https://gerrit.o-ran-sc.org/r/com/asn1c.git +cd asn1c/ +autoreconf -iv +./configure +cd examples +chmod u+x crfc2asn1.pl +cd .. +make +sudo make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies new file mode 100644 index 0000000..c5b3d7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ricsim/tools/install_dependencies @@ -0,0 +1,38 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +sudo apt-get update \ + && sudo apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + && sudo apt-get clean diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/simulation.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/simulation.txt new file mode 100644 index 0000000..c1eedb7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/simulation.txt @@ -0,0 +1,3 @@ +This is a silulation file +This is a simulation +This is a a a a a simulation file! diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp new file mode 100644 index 0000000..3affd81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/asn.hpp @@ -0,0 +1,27 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/version.hpp" +#include "asn/elements.hpp" +#include "asn/constraints.hpp" +#include "asn/variant.hpp" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp new file mode 100644 index 0000000..3a42ad5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/codec.hpp @@ -0,0 +1,931 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/ber/common.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tag.hpp" +#include "asn/ber/length.hpp" +#include "asn/ber/visitor.hpp" +#include "asn/ber/opentype.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +pack (X.690) +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack (X.690) +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* ExplicitCodec: Codec for elements with EXPLICIT tag +***************************************************************************************/ +template +struct ExplicitCodec +{ + using tag_t = Tag; + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + Element::run(static_cast(ie), ctx); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + { + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("EX buffer: %s", static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + Element::run(static_cast(ie), ctx); + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + Element::run(static_cast(ie), ctx); + + buffer.set_end(end); + } + } + + } + } +}; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.690 8.2) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(1, ctx); + if(ie.get()) + Tools::put_bytes(0xFF, 1, ctx); + else + Tools::put_bytes(0, 1, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length != 1) + { + ctx.refErrorCtx().sizeRangeError(length, 1, 1); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t value; + Tools::get_bytes(value, 1, ctx); + ie.set(value > 0); + } + } + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.690 8.3) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.690 8.4) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* REAL: Encoding the real type (X.690 8.5) +***************************************************************************************/ +//missing... +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.690 8.6) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + + uint8_t tail = ie.get_bitqty() % 8; + + size_t length = ie.get_buffer().size(); + Length::encode(length + 1, ctx); + + auto & buffer = ctx.refBuffer(); + buffer.putByte((8 - tail) & 0x7F); + + if (tail) + { + buffer.putBytes(ie.get_buffer().data(), length - 1); + u8 last_byte = *(ie.get_buffer().data() + length - 1); + + last_byte <<= 8 - tail; + buffer.putBytes(&last_byte, 1); + } + else + { + buffer.putBytes(ie.get_buffer().data(), length); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + size_t len_bytes = length - 1; + size_t bitqty = len_bytes << 3; + + if((data_in[0] & 0x80) || (bitqty < data_in[0])) + { + ctx.refErrorCtx().valueRangeError(data_in[0]); + } + else + { + bitqty = bitqty - data_in[0]; + uint8_t* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, &data_in[1], len_bytes); + const u8 shift = bitqty % 8; + if (shift) + { + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(bitqty, data_out); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.690 8.7) +* Restricted Character string types (X.690 8.23) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.690 8.8) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(0, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length) + ctx.refErrorCtx().sizeRangeError(length); + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + } + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.690 8.9) +* SET: Encoding the set type (X.690 8.11) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + VisitorEncoderSeq ve(ctx, ie); + ie.encode(ve); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) //todo: support arbitrary order of IEs in SET + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + VisitorDecoderSeq vd(ctx, ie); + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + ie.decode(vd); + if(ctx) + { + if(invalid_tag != vd.get_unhandled_tag()) + { + tag_value_t _tag = vd.get_unhandled_tag(); + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else // it should be the end-of-contents octets (8.1.5) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + ie.decode(vd); + tag_value_t _tag = vd.get_unhandled_tag(); + if(invalid_tag != _tag) + { + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && buffer.getBytesLeft() > 0); + } + else + ctx.refErrorCtx().tagError(static_cast(tag)); // unexpected tag + } + buffer.set_end(end); + } + } + + } + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.690 8.10) +* SET OF: Encoding the set-of type (X.690 8.12) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + for (auto& elem : ie) + { + Element::run(elem, ctx); + } + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + tag_value_t elm_tag = get_tag(ctx); + + while(ctx && Element::is_matched(elm_tag)) + { + add_element(ie, ctx, &elm_tag); + elm_tag = get_tag(ctx); + } + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (elm_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + while(ctx && buffer.getBytesLeft() > 0) + add_element(ie, ctx); + + buffer.set_end(end); + } + } + } + } + +private: + static void inline add_element(IE& ie, DecoderCtx& ctx, tag_value_t const* elm_tag = nullptr) + { + uint8_t* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + Element::run(*v, ctx, elm_tag); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + } + } +}; + +/*************************************************************************************** +* CHOICE: Encoding the choice type +***************************************************************************************/ +struct ChoiceVisitorEncoder +{ + ChoiceVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator()(IE const& ie) + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + + EncoderCtx& m_ctx; +}; + +struct ChoiceVisitorDecoder +{ + ChoiceVisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag) {} + + template bool operator()(IE& ie) + { + Element::run(ie, m_ctx, &m_tag); + return static_cast(m_ctx); + } + + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(!m_valid && Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector {tag}; + IE::enumerate(selector); + return selector.is_valid(); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceVisitorEncoder ve(ctx); + + if(ctx && !ie.encode(ve)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + Selector selector {tag}; + IE::enumerate(selector); + + if(!selector.is_valid()) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + ChoiceVisitorDecoder vd {ctx, tag}; + if(ctx && !ie.decode(selector.get_idx(), vd)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + } +}; + +template +struct ElementType > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector(tag); + IE::enumerate(selector); + + return selector.is_valid(); + } +}; + +/*************************************************************************************** +* Identifier +***************************************************************************************/ +template +struct Identifier +{ + static bool inline is_matched(tag_value_t _tag) + { + return ElementType::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ElementType::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ElementType::run(ie, ctx, tag); + } +}; + +template +struct Identifier > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static bool inline is_matched(tag_value_t _tag) + { + return Identifier::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + Identifier::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t const* tag_ptr = nullptr) + { + if (ctx) + { + ctx.ie_name(IE::name()); + + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + if(ctx) + Identifier::run(ie, ctx, tag); + } + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp new file mode 100644 index 0000000..edd830b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/common.hpp @@ -0,0 +1,51 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "asn/buffer.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tools.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace ber { + +template struct Element; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp new file mode 100644 index 0000000..4159f00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/context.hpp @@ -0,0 +1,118 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp new file mode 100644 index 0000000..51b387c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/length.hpp @@ -0,0 +1,103 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +constexpr size_t indefinite_length = std::numeric_limits::max(); + +/*************************************************************************************** +* Length +***************************************************************************************/ +struct Length +{ + static size_t inline get(int64_t value) + { + size_t length = 1; + + if(value != 0) + { + size_t extra_sign_bits = __builtin_clrsbll(value); + length = sizeof(value) - (extra_sign_bits >> 3) ; + } + + return length; + } + + static void inline encode(size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + if(length <= 0x7F) + { + buffer.putByte(static_cast(length)); + } + else + { + size_t lenlen = get(length); + if(lenlen > 0x7F) + { + ctx.refErrorCtx().sizeRangeError(length, 0, 0x7F); + } + else + { + uint8_t bt = static_cast(lenlen); + bt |= 0x80; + buffer.putByte(bt); + Tools::put_bytes(length, lenlen, ctx); + } + } + + } + + static size_t inline decode(DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + size_t length = 0; + + uint8_t const* data = buffer.getBytes(1); + + if(data) + { + if(!(data[0] & 0x80)) + { + length = data[0]; + } + else + { + size_t lenlen = data[0] & 0x7F; + + if(lenlen) + Tools::get_bytes(length, lenlen, ctx); + else + length = indefinite_length; + } + } + + return length; + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp new file mode 100644 index 0000000..0ff9366 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/opentype.hpp @@ -0,0 +1,73 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* OpenType +***************************************************************************************/ +struct OpenType +{ + static tag_value_t decode(DecoderCtx& ctx, size_t& length, tag_value_t const* tag_ptr = nullptr) + { + auto & buffer = ctx.refBuffer(); + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + length = Length::decode(ctx); + + if(!length) + { + //just return + } + else if(length == indefinite_length) + { + tag_value_t _tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length); + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + size_t _length; + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + decode(ctx, _length); + buffer.set_end(end); + } + } + return tag; + } +}; + +} //namespace ber +} //namespace asn \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp new file mode 100644 index 0000000..dba9733 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tag.hpp @@ -0,0 +1,163 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define IE_CLASS_SHIFT 6 +#define IE_PC_SHIFT 5 +#define IE_BIG_TAG_FST_OCTET 0b011111 + +namespace asn { +namespace ber { + +constexpr tag_value_t invalid_tag = std::numeric_limits::max(); + +/*************************************************************************************** +* Tag +***************************************************************************************/ +template +struct Tag; + +template +struct Tag > +{ + static constexpr tag_value_t value() + { + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= static_cast(IE::asn_identifier_t::tag_value); + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + ctx.refBuffer().putByte(static_cast(value())); + } +}; + + +template +struct Tag= 31) > > +{ + static constexpr tag_value_t value() + { + static_assert(IE::asn_identifier_t::tag_value > 0, "null tag value"); + + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= IE_BIG_TAG_FST_OCTET; + + size_t leadbits = __builtin_clzll(IE::asn_identifier_t::tag_value); + tag_value_t tv = IE::asn_identifier_t::tag_value << leadbits; + size_t length = sizeof(tag_value_t)*CHAR_BIT - leadbits; + + size_t shift = sizeof(tag_value_t)*CHAR_BIT - 7; + + size_t lb = length % 7; + if(lb) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> (shift + 7 - lb)); + tv <<= lb; + length -= lb; + } + + while(length) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> shift); + tv <<= 7; + length -= 7; + } + v &= ((tag_value_t)-1) & ~((tag_value_t) 0x80); + + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + size_t size = 0; + tag_value_t tv = data(size); + ctx.refBuffer().putBytes(reinterpret_cast(&tv), size); + } + +private: + + static constexpr tag_value_t data(size_t& size) + { + tag_value_t rv = 0; + tag_value_t tv = value(); + size = sizeof(tag_value_t) - (__builtin_clzll(tv) >> 3); + + uint8_t* ptr = reinterpret_cast(&rv); + + size_t shift = (size - 1) * 8; + for(size_t i = 0; i < size; ++i) + { + ptr[i] = static_cast(tv >> shift); + shift -= 8; + } + + return rv; + } +}; + +inline +tag_value_t get_tag(DecoderCtx& ctx) +{ + tag_value_t rv = 0; + auto & buffer = ctx.refBuffer(); + uint8_t const* data = buffer.getBytes(1); + + if (data) + { + rv = data[0]; + if((data[0] & 0x1F) == IE_BIG_TAG_FST_OCTET) + { + size_t limit = sizeof(tag_value_t) - 1; + while((data = buffer.getBytes(1))) + { + if(!limit) + { + ctx.refErrorCtx().sizeRangeError(0); + break; + } + + rv <<= 8; + rv |= data[0]; + --limit; + + if(!(data[0] & 0x80)) + break; + } + } + } + return rv; +} + +} //namespace ber +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp new file mode 100644 index 0000000..9f9bc9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/tools.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; + + + template + static void put_bytes(T value, size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + size_t shift = (length - 1) << 3; + for(size_t i = 0; i < length; ++i) + { + buffer.putByte(static_cast(value >> shift)); + shift -= 8; + } + } + + template + static void get_bytes(T& value, size_t length, DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + value = 0; + uint8_t const* data = buffer.getBytes(length); + + if(data) + { + value = data[0]; + for(size_t i = 1; i < length; ++i) + { + value <<= 8; + value |= data[i]; + } + } + } + +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp new file mode 100644 index 0000000..98c1f05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/ber/visitor.hpp @@ -0,0 +1,177 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* VisitorEncoder +***************************************************************************************/ +struct VisitorEncoder +{ + VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx){} + + template bool operator() (ELM const& elm) + { + if(m_ctx) + Element::run(elm, m_ctx); + return static_cast(m_ctx); + } +private: + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* VisitorDecoder +***************************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag){} + + template bool operator() (ELM& elm) + { + if(m_ctx) + Element::run(elm, m_ctx, &m_tag); + return static_cast(m_ctx); + } + +private: + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +/*************************************************************************************** +* VisitorAdapter +***************************************************************************************/ +template +struct VisitorAdapter //default +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + Element::run(ie, ctx, &tag); + } +}; + +template +struct VisitorAdapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + VisitorDecoder v(ctx, tag); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; + +/*************************************************************************************** +* VisitorEncoderSeq +***************************************************************************************/ +template +struct VisitorEncoderSeq +{ + VisitorEncoderSeq(EncoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM const& elm) + { + if(ELM::optional) + { + if(elm.is_valid()) + VisitorAdapter::run(elm, m_ctx, m_cont); + } + else + VisitorAdapter::run(elm, m_ctx, m_cont); + } + + EncoderCtx& m_ctx; + CONT const& m_cont; +}; + + +/*************************************************************************************** +* VisitorDecoderSeq +***************************************************************************************/ +template +struct VisitorDecoderSeq +{ + VisitorDecoderSeq(DecoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM& elm) + { + if(m_ctx) + { + tag_value_t tag; + + if(invalid_tag == m_tag && m_ctx.refBuffer().getBytesLeft()) + { + m_tag = get_tag(m_ctx); + } + tag = m_tag; + + if(m_ctx) + { + if (!Element::is_matched(tag)) + { + if(!ELM::optional) + { + m_ctx.refErrorCtx().tagError(static_cast(tag)); + } + } + else + { + m_tag = invalid_tag; + VisitorAdapter::run(elm, m_ctx, m_cont, tag); + elm.setpresent(true); + } + } + } + } + + tag_value_t get_unhandled_tag() const {return m_tag;} + + DecoderCtx& m_ctx; + tag_value_t m_tag {invalid_tag}; + CONT const& m_cont; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp new file mode 100644 index 0000000..4022b48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/buffer.hpp @@ -0,0 +1,689 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/error_context.hpp" +#include "value_traits.hpp" + +//#define CODEC_BIT_TRACE_ENABLE +#ifdef CODEC_BIT_TRACE_ENABLE + #define CODEC_BIT_TRACE(FMT, args...) printf("%s[%u]:" FMT "\n", std::strrchr(__FILE__, '/') + 1, __LINE__, ##args) +#else + #define CODEC_BIT_TRACE(...) +#endif + +namespace asn { + +template +struct bit_accessor; + +template +struct bit_accessor_cross_byte; + +template +class buffer +{ +public: + typedef PTR pointer; + + explicit buffer(error_context& err) + : m_errCtx(err) + {} + + void reset(pointer data, u32 size) + { + m_start = data; + m_end = m_start + size; + m_current = m_start; + m_shift = 0; + } + + u32 getOffset() const { return begin() - m_start; } + + u32 getBytesLeft() const { return end() - begin(); } + u32 getBytesUsed() const { return getOffset() + (get_shift() ? 1 : 0); } + + u8 get_shift() const { return m_shift; } + void reset_shift() { m_shift = 0; } + void byte_align() { if (get_shift()) { m_shift = 0; ++m_current; } } + + pointer advance(u32 delta) { pointer p = begin(); m_current += delta; return p; } + + pointer begin() const { return m_current; } + + void set_begin(pointer ptr, u8 bit_shift) + { + if (m_start <= ptr && ptr <= end()) + { + m_current = ptr; + m_shift = bit_shift; + } + } + + pointer end() const { return m_end; } + void set_end(pointer v) { m_end = v; } + + bool checkAlignment(char const* name, u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + return false; + } + + bool checkBytesLeft(char const* name, u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(char const* name, u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(name, getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(char const* name, u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(char const* name, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(char const* name, u32 max_requested, u32& num_bytes) + { + if (checkAlignment(name)) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(char const* name, u8 byte) + { + if (checkBytesAndAlignment(name, 1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(char const* name, void const* in, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + return true; + } + return false; + } + + bool checkAlignment(u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + return false; + } + + bool checkBytesLeft(u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(u32 num_bytes) + { + if (checkBytesAndAlignment(num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(u32 max_requested, u32& num_bytes) + { + if (checkAlignment()) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(u8 byte) + { + if (checkBytesAndAlignment(1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(void const* in, u32 num_bytes) + { + if (num_bytes) + { + if(checkBytesAndAlignment(num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + } + else + return false; + } + return true; + } + + char const* toString() const + { + static char sz[64]; + u8 const* p = begin(); + snprintf(sz, sizeof(sz), "%02X %02X %02X %02X [%02X]=%p@%u..%p -%u bits: +%u bytes", p[-4], p[-3], p[-2], p[-1], p[0], p + , getOffset(), end(), get_shift(), getBytesLeft()); + return sz; + } + +private: + template + friend class bit_accessor; + + template + friend struct bit_accessor_cross_byte; + + template + void push_u8(U value) { *m_current++ = static_cast(value); } + template + void put_u8(U value) { m_current[0] = static_cast(value); } + +//khxm68: TODO: won't compile without it. WTF?! +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + u8 get_u8() const { return m_current[0]; } +#pragma GCC diagnostic pop + u8 extract_u8(u8 value, u8 mask, u8 shift) const + { return (get_u8() & ~(mask << shift)) | ((value & mask) << shift); } + + u16 get_u16() const { return (static_cast(m_current[0]) << 8) | m_current[1]; } + u16 extract_u16(u16 value, u16 mask, u16 shift) const + { return (get_u16() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u24() const { return (static_cast(m_current[0]) << 16) | (static_cast(m_current[1]) << 8) | m_current[2]; } + u32 extract_u24(u32 value, u32 mask, u32 shift) const + { return (get_u24() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u32() const { return (static_cast(m_current[0]) << 24) | (static_cast(m_current[1]) << 16) | (static_cast(m_current[2]) << 8) | m_current[3]; } + u32 extract_u32(u32 value, u32 mask, u32 shift) const + { return (get_u32() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 getBitsLeft() const { return begin() == end() ? 0 : (getBytesLeft()*8 - get_shift()); } + + void bit_advance(u8 num_bits) + { + m_shift += num_bits; + if (get_shift() > 7) + { + reset_shift(); + m_current++; + } + } + + pointer m_current; + pointer m_end; + pointer m_start; + u8 m_shift; + error_context& m_errCtx; +}; + +template //LSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //LSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = buf.extract_u16(value, mask, shift); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + +template //LSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //LSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + + +template //MSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //MSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = buf.extract_u16(value, mask, shift); + + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + + +template //MSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //MSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + +/******************************************************************************** +bit_accessor_cross_byte +*********************************************************************************/ +template<> +struct bit_accessor_cross_byte //MSB +{ + static bool put(u8 value, u8 length, buffer& buf) + { + u8 spare = 8 - buf.get_shift(); + + if (spare < length) + { + length -= spare; + u8 chunk = value >> length; + u8 const mask = static_cast((1u << spare) - 1); + u8 data = buf.extract_u8(chunk, mask, 0); + buf.put_u8(data); + + buf.bit_advance(spare); + } + if (buf.checkBytesLeft(1)) + { + u8 const mask = static_cast((1u << length) - 1); + u8 const shift = 8 - buf.get_shift() - length; + u8 data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + buf.bit_advance(length); + + return true; + } + return false; + } + + static u8 get(u8 length, buffer& buf) + { + u8 rval {0}; + u8 const mask = static_cast((1u << length) - 1); + u8 const spare = 8 - buf.get_shift(); + if (spare < length) + { + length -= spare; + rval = buf.get_u8() << length; + buf.bit_advance(spare); + } + if (length && buf.checkBytesLeft(1)) + { + u8 val = buf.get_u8(); + val = val >> (8 - length - buf.get_shift()); + rval |= val; + rval &= mask; + buf.bit_advance(length); + } + return rval; + } + + static void padByte(buffer& buf) + { + if (buf.get_shift()) + { + u8 mask = static_cast((1u << buf.get_shift()) - 1); + mask = mask << (8 - buf.get_shift()); + buf.begin()[0] &= mask; + buf.bit_advance(8 - buf.get_shift()); + } + } + + static void padByte(buffer& buf) + { + if(buf.get_shift()) + buf.bit_advance(8 - buf.get_shift()); + } + + static bool put(const u8* in, size_t len, buffer& buf, u8 trail_bitsqty) + { + if (len) + { + if (trail_bitsqty) + { + buf.putBytes(in, len - 1); + u8 last_byte = in[len - 1]; + last_byte = last_byte >> (8 - trail_bitsqty); + return put(last_byte, trail_bitsqty, buf); + } + buf.putBytes(in, len); + } + return true; + } +}; + +} //end: namespace asn + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp new file mode 100644 index 0000000..008be98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/chunked_allocator.hpp @@ -0,0 +1,84 @@ +#pragma once + +/******************************************************************************* +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include //std::bad_alloc +#include +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +template +class chunked_allocator +{ +public: + using allocator_t = ALLOC; + + chunked_allocator() + { + put_chunk(new_chunk()); + } + + template + decltype(auto) emplace_back(TSEQ& v) + { + try + { + return v.emplace_back(m_allocator); + } + catch (std::bad_alloc const&) + { + put_chunk(new_chunk()); + return v.emplace_back(m_allocator); + } + } + + uint8_t* alloc_bytes(std::size_t sz) + { + //TODO: unify allocation: now it returns nullptr instead of throw! + auto* ret = m_allocator.alloc_bytes(sz); + if (!ret) + { + put_chunk(new_chunk()); + ret = m_allocator.alloc_bytes(sz); + } + return ret; + } + +private: + static constexpr std::size_t CHUNK_SIZE = 32*1024; + using chunk_t = std::array; + using chunks_t = std::list; + + chunk_t& new_chunk() { return m_chunks.emplace_back(); } + void put_chunk(chunk_t& c) { m_allocator.reset(c.data(), c.size()); } + + + allocator_t m_allocator; + chunks_t m_chunks; +}; + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp new file mode 100644 index 0000000..e8e787d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/constraints.hpp @@ -0,0 +1,140 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +using bound_t = int64_t; + +enum class constraint_type : uint8_t +{ + UNCONSTRAINED, + CONSTRAINED, + SEMICONSTRAINED, + CONSTRAINED_EXTENDED, + SEMICONSTRAINED_EXTENDED +}; + +template +struct span +{ + static_assert(UB >= LB, "UPPER >= LOWER"); + static constexpr bound_t lower_bound = LB; + static constexpr bound_t upper_bound = UB; +}; + +template +struct pair +{ + T const lower_bound; + T const upper_bound; +}; + +template +struct one : span {}; + +struct max : one::max()> {}; +struct min : one::min()> {}; + +static constexpr bound_t MAX = std::numeric_limits::max(); +static constexpr bound_t MIN = std::numeric_limits::min(); + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = std::min({RANGE::lower_bound...}); + static constexpr bound_t upper_bound = std::max({RANGE::upper_bound...}); + + static constexpr constraint_type type = + (Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED : + (Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED : + (Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED : constraint_type::UNCONSTRAINED; + + static constexpr bool is_signed = lower_bound < 0; + + static constexpr bound_t num_spans = static_cast(sizeof...(RANGE)); + static constexpr pair bounds[] = {{RANGE::lower_bound, RANGE::upper_bound}...}; + + using boundary_type = bound_t; + + static constexpr bool is_extended(bound_t val) + { + for (bound_t i = 0; i < num_spans; ++i) + { + auto const& p = bounds[i]; + if (val <= p.upper_bound) + { + if(val < p.lower_bound) + return true; + return false; + } + } + return true; + } +}; + +template +constexpr pair constraints::bounds[]; + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr constraint_type type = constraint_type::UNCONSTRAINED; + static constexpr bound_t lower_bound = std::numeric_limits::min(); + static constexpr bound_t upper_bound = std::numeric_limits::max(); + + static constexpr bool is_extended(bound_t val) {return true;} +}; + +/*************************************************************************************** +* RANGE for sequences +***************************************************************************************/ +template +struct seq_range +{ + static_assert(Extended || TotalNumEntries > 0, "TotalNumEntries must be > 0"); + static_assert(NumExtEntries <= TotalNumEntries, "NumExtEntries must be <= TotalNumEntries"); + + static constexpr constraint_type type = Extended ? constraint_type::CONSTRAINED_EXTENDED : constraint_type::CONSTRAINED; + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = 0; + static constexpr bound_t upper_bound = TotalNumEntries - NumExtEntries - 1; + static constexpr bound_t default_value = lower_bound; + static constexpr bound_t total_num_entries = TotalNumEntries; + + using boundary_type = bound_t; + using value_type = uint32_t; +}; + +} // namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp new file mode 100644 index 0000000..9cbcd42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/elements.hpp @@ -0,0 +1,565 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/constraints.hpp" +#include "asn/identifier.hpp" + +namespace asn { + +enum class element_type : uint8_t +{ + T_BOOLEAN + ,T_INTEGER + ,T_ENUMERATED + ,T_REAL + ,T_BITSTRING + ,T_OCTETSTRING + ,T_NULL + ,T_SEQUENCE + ,T_SEQUENCE_OF + ,T_SET + ,T_SET_OF + ,T_CHOICE + ,T_OBJECTIDENTIFIER + ,T_OBJFIELD_FTV + ,T_OBJFIELD_TF +}; + +/*************************************************************************************** +* BASE +***************************************************************************************/ + +struct base +{ + static constexpr bool optional = false; + static constexpr bool extension = false; + + static constexpr char const* name() {return "";} + + void setpresent(bool p) {is_set = p;} + void clear() {is_set = false;} + + bool is_valid() const {return is_set;} + +protected: + base() {} + void set() {is_set = true;} +protected: + bool is_set {false}; + + base& operator=(const base&) = delete; + base (const base&) = delete; +}; + +/*************************************************************************************** +* IE_NULL +***************************************************************************************/ + +struct nulltype : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::NULL_TYPE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_NULL; + static constexpr const char* name() {return "NULL";} + + void clear() {} +}; + +/*************************************************************************************** +* T_BOOLEAN +***************************************************************************************/ + +struct boolean : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BOOLEAN), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BOOLEAN; + static constexpr const char* name() {return "BOOLEAN";} + + using value_type = bool; + + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = false; base::clear();} + +private: + value_type m_value {false}; +}; + +/*************************************************************************************** +* T_INTEGER +***************************************************************************************/ +template < class Constraint = constraints > +struct integer : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::INTEGER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_INTEGER; + static constexpr const char* name() {return "INTEGER";} + + using constraint_t = Constraint; + using value_type = int64_t; + + bool equal(value_type v) const {return m_value == v;} + + void set(value_type v) { m_value = v; base::set();} + value_type get() const { return m_value; } + + void clear() { m_value = 0; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_ENUMERATED +***************************************************************************************/ +template +struct enumerated : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::ENUMERATED), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_ENUMERATED; + static constexpr const char* name() {return "ENUMERATED";} + + using constraint_t = seq_range; + using value_type = typename constraint_t::value_type; + + bool equal(value_type v) const {return m_value == v;} + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = constraint_t::default_value; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_OCTETSTRING +***************************************************************************************/ +template< class Constraint = constraints > +struct ostring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::OCTET_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OCTETSTRING; + static constexpr const char* name() {return "OCTET STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data) : m_size(size), m_data(reinterpret_cast(data)) {} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + + using const_iterator = uint8_t const*; + const_iterator begin() const { return data(); } + const_iterator end() const { return begin() + size(); } + + void assign(void const* p, size_t sz) { m_data = static_cast(p); m_size = sz; } + + private: + const uint8_t* m_data{ 0 }; + size_t m_size{ 0 }; + }; + + value_type const& get() const { return m_value; } + + //Use std::string, std::vector or IE_OSTR::value_type + template value_type const& set(T const& tval) + { + set(tval.size(), tval.data()); + base::set(); + return m_value; + } + + void set(size_t size, void const* data) + { + m_value.assign(data, size); + base::set(); + } + + template + ostring& emplace(AT& allocator, size_t size, uint8_t const * data_in) + { + if(size) + { + base::clear(); + uint8_t* data_out = allocator.alloc_bytes(size); + if (data_out) + { + memcpy(data_out, data_in, size); + set(size, data_out); + } + } + else + base::set(); + return *this; + } + + template + ostring& emplace(AT& allocator, T const& tval) + { + return emplace(allocator, tval.size(), reinterpret_cast(tval.data())); + } + + void clear() { m_value = value_type{}; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_BITSTRING +***************************************************************************************/ +template > +struct bstring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BIT_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BITSTRING; + static constexpr const char* name() {return "BIT STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data, size_t bitqty) : m_size(size), m_data(reinterpret_cast(data)), m_bitqty(bitqty){} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + size_t bitqty() const { return m_bitqty; } + + void assign(void const* p, size_t sz, size_t bits) { m_data = static_cast(p); m_size = sz; m_bitqty = bits; } + + private: + const uint8_t* m_data{ nullptr }; + size_t m_size{ 0 }; + size_t m_bitqty{ 0 }; + }; + + value_type const& get_buffer() const { return m_value; } + + size_t get_bitqty() const { return m_value.bitqty(); } + + //Use std::string, std::vector or IE_BSTR::value_type + template value_type const& set_buffer(T& tval, size_t bitqty) + { + m_value.assign(tval.data(), tval.size(), bitqty); + base::set(); + return m_value; + } + + void set_buffer(size_t bitqty, const uint8_t* data) + { + m_value.assign(data, (bitqty +7) >> 3, bitqty); + base::set(); + } + + template + bstring& emplace_buffer(AT& allocator, size_t bitqty, uint8_t const * data_in) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + memcpy(data_out, data_in, size); + set_buffer(bitqty, data_out); + return *this; + } + + void clear() { m_value = value_type{}; base::clear();} + + uint64_t get_number() const + { + uint64_t retval{0}; + size_t i = 0; + for(; i < m_value.size() - 1; ++i) + { + retval <<= 8; + retval |= m_value.data()[i]; + } + + uint8_t shift = m_value.bitqty() % 8; + if (shift) + { + retval <<= shift; + } + else + { + retval <<= 8; + } + + retval |= m_value.data()[i]; + + return retval; + } + + template + void set_number(AT& allocator, size_t bitqty, uint64_t data) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + + const uint8_t shift = bitqty % 8; + if (shift) + { + data_out[size-1] = data & (0xFF >> (8 - shift)); + data >>= shift; + } + else + { + data_out[size-1] = data & (0xFF); + data >>= 8; + } + + for (size_t i = 1; i <= size - 1; i++) + { + data_out[size-1-i] = data & (0xFF); + data >>= 8; + } + + m_value.assign(data_out, size, bitqty); + base::set(); + } + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_CHOICE +***************************************************************************************/ +template +struct choice : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::CHOICE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_CHOICE; + static constexpr const char* name() {return "CHOICE";} + + using constraint_t = seq_range; + using index_type = size_t; + using value_type = size_t; + + static constexpr index_type fst_index = 1; + static constexpr index_type ext_index = fst_index + TotalNumEntries; + + static index_type normalize(index_type idx) {return idx - fst_index;} + static index_type denormalize(index_type idx) {return idx + fst_index;} +}; + +/*************************************************************************************** +* T_SEQUENCE +***************************************************************************************/ +template +struct sequence : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE; + static constexpr const char* name() {return "SEQUENCE";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; + +}; + +/*************************************************************************************** +* T_SEQUENCE_OF +***************************************************************************************/ +template > +struct sequenceof : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE_OF; + static constexpr const char* name() {return "SEQUENCE OF";} + + struct value_type : T, boost::intrusive::list_base_hook< boost::intrusive::link_mode > + { + value_type(){} + private: + value_type& operator=(const value_type&) = delete; + value_type (const value_type&) = delete; + }; + + using values_t = boost::intrusive::list>; + using constraint_t = Constraint; + using element_t = T; + + void clear() { m_list.clear(); base::clear();} + size_t size() const { return m_list.size(); } + template + void sort(Predicate const& p) { m_list.sort(p); } + + template + void set(V& v) {for(auto & e : v) {m_list.push_back(e);} base::set();} + + void push_back(value_type& v) { m_list.push_back(v); base::set();} + + template //Note: Allocator must return word alligned buffer! + T& emplace_back(AT& allocator) + { + uint8_t* data = allocator.alloc_bytes(sizeof(value_type)); + if(!data) + throw std::bad_alloc(); + value_type* v = new (data) value_type; + push_back(*v); + return *v; + }; + + using iterator = typename values_t::iterator; + iterator begin() { return m_list.begin(); } + iterator end() { return m_list.end(); } + + using const_iterator = typename values_t::const_iterator; + const_iterator begin() const { return m_list.begin(); } + const_iterator end() const { return m_list.end(); } + + sequenceof(){} + +private: + values_t m_list; +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct fixedtypefield : T +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_FTV; + + T& ref_nested() {return *this;} + T const & ref_nested() const {return *this;} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct typefield : base +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_TF; + static constexpr const char* name() {return "type-field";} + + typefield& ref_nested() {return *this;} + typefield const& ref_nested() const {return *this;} + + bool is_unknown() const {return false;} +}; + +/*************************************************************************************** +* T_OBJECTIDENTIFIER +***************************************************************************************/ +struct oid : ostring<> +{ + using asn_identifier_t = identifier(tag_rvalue_t::OBJECT_IDENTIFIER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OBJECTIDENTIFIER; + static constexpr const char* name() {return "OBJECT IDENTIFIER";} +}; + +/*************************************************************************************** +* T_PRINTABLESTRING +***************************************************************************************/ +template > +struct printable_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::PrintableString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "PrintableString";} +}; + +/*************************************************************************************** +* T_IA5_STRING +***************************************************************************************/ +template > +struct ia5_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::IA5String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_GRAPHIC_STRING +***************************************************************************************/ +template > +struct graphic_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::GraphicString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_UTF8_STRING +***************************************************************************************/ +template > +struct utf8_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::UTF8String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "UTF8String";} +}; + +/*************************************************************************************** +* T_SET +***************************************************************************************/ +template +struct set : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET; + static constexpr const char* name() {return "SET";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; +}; + +/*************************************************************************************** +* T_SET_OF +***************************************************************************************/ +template > +struct setof : sequenceof +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET_OF; + static constexpr const char* name() {return "SET OF";} +}; +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp new file mode 100644 index 0000000..8a7285a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/error_context.hpp @@ -0,0 +1,267 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + + +// Local Includes: Application specific classes, functions, and libraries +#include "type_defs.h" + +namespace asn { + +class error_context +{ +public: + enum error_e : u8 + { + SUCCESS = 0 + ,INCORRECT_LENGTH_BITS + ,INCORRECT_LENGTH_BYTES + ,ALIGNMENT + ,INCORRECT_VALUE + ,INCORRECT_CHOICE_TAG + ,INCORRECT_IE_TAG + ,VALUE_OUT_OF_RANGE + ,SIZE_OUT_OF_RANGE + ,ALLOC_NO_MEMORY + ,NO_OBJECT + ,NO_MANDATORY + ,WRONG_END_OF_CONTENT + ,UNSUPPORTED + ,UNSPECIFIED + }; + + explicit operator bool() const { return SUCCESS == m_error; } + + void reset() { m_error = SUCCESS; } + error_e getError() const { return m_error; } + + char const* toString() const; + + void alignmentError(u32 shift); + void lengthErrorBytes(u32 bytes_left, u32 requested); + void lengthErrorBits(u32 bits_left, u32 requested); + void valueError(u32 got, u32 expected, u32 ofs); + void tagError(u32 tag); + void valueRangeError(size_t value); + void sizeRangeError(size_t size, size_t low = 0, size_t high = 0); + void allocatorNoMem(size_t bytes_left, size_t bytes_required); + void errorUnsupported() {setError(UNSUPPORTED);} + void errorUnspecified() {setError(UNSPECIFIED);} + void errorNoObject(const char* container_name_); + void errorNoMandatory(); + void errorWrongEndOfContent() {setError(WRONG_END_OF_CONTENT);} + + //to inline in choice decoder: TODO: think of changing it! + void choiceError(char const* name, u32 id) + { + m_name = name; + m_param[0] = id; + setError(INCORRECT_CHOICE_TAG); + } + //Name of the being processed IE + void ie_name(const char* name) { m_ie_name = name; } + char const* ie_name() const { return m_ie_name; } + + void container_name(const char* name) { m_container_name = name; } + char const* container_name() const { return m_container_name; } + + +private: + void setError(error_e n) { m_error = n; } + + enum { MAX_PARAMS = 3 }; + error_e m_error; + char const* m_name; + char const* m_ie_name {""}; + char const* m_container_name {""}; + size_t m_param[MAX_PARAMS]; + +}; + +inline +void error_context::errorNoObject(const char* c_name) +{ + container_name(c_name); + m_name = m_ie_name; + setError(NO_OBJECT); +} + +inline +void error_context::errorNoMandatory() +{ + m_name = m_ie_name; + setError(NO_MANDATORY); +} + +inline +void error_context::alignmentError(u32 shift) +{ + m_name = m_ie_name; + m_param[0] = shift; + setError(ALIGNMENT); +} + +inline +void error_context::lengthErrorBytes(u32 bytes_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BYTES); +} + +inline +void error_context::lengthErrorBits(u32 bits_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bits_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BITS); +} + +inline +void error_context::valueError(u32 got, u32 expected, u32 ofs) +{ + m_name = m_ie_name; + m_param[0] = got; + m_param[1] = expected; + m_param[2] = ofs; + setError(INCORRECT_VALUE); +} + +inline +void error_context::tagError(u32 tag) +{ + m_name = m_ie_name; + m_param[0] = tag; + setError(INCORRECT_IE_TAG); +} + +inline +void error_context::valueRangeError(size_t value) +{ + m_name = m_ie_name; + m_param[0] = value; + setError(VALUE_OUT_OF_RANGE); +} + +inline +void error_context::sizeRangeError(size_t size, size_t low, size_t high) +{ + m_name = m_ie_name; + m_param[0] = size; + m_param[1] = low; + m_param[2] = high; + setError(SIZE_OUT_OF_RANGE); +} + +inline +void error_context::allocatorNoMem(size_t bytes_left, size_t bytes_required) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = bytes_required; + setError(ALLOC_NO_MEMORY); +} + +inline +char const* error_context::toString() const +{ + static char sz[256]; + + switch (m_error) + { + case SUCCESS: + return "OK"; + + case INCORRECT_LENGTH_BITS: + snprintf(sz, sizeof(sz)-1, "%zu bits left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + + case INCORRECT_LENGTH_BYTES: + snprintf(sz, sizeof(sz)-1, "%zu bytes left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + case ALIGNMENT: + snprintf(sz, sizeof(sz)-1, "misaligned '%s::%s': shift %zu bits", m_container_name, m_name, m_param[0]); + break; + + case INCORRECT_VALUE: + snprintf(sz, sizeof(sz)-1, "Wrong value of '%s::%s' at %zu: 0x%zX expected=0x%zX", m_container_name, m_name, m_param[2], m_param[0], m_param[1]); + break; + + case INCORRECT_CHOICE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong choice tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case INCORRECT_IE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case VALUE_OUT_OF_RANGE: + snprintf(sz, sizeof(sz) - 1, "Value is out of the range '%s::%s': value: %zu", m_container_name, m_name, m_param[0]); + break; + + case SIZE_OUT_OF_RANGE: + if (m_param[2]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range [%zu, %zu] in '%s::%s'", m_param[0], m_param[1], m_param[2], m_container_name, m_name); + } + else + { + if (m_param[1]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is less than %zu in '%s::%s'", m_param[0], m_param[1], m_container_name, m_name); + } + else + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range in '%s::%s'", m_param[0], m_container_name, m_name); + } + } + break; + + case ALLOC_NO_MEMORY: + snprintf(sz, sizeof(sz) - 1, "Allocator memory has ended '%s::%s': left bytes: %zu; required bytes: %zu", m_container_name, m_name, m_param[0], m_param[1]); + break; + case NO_OBJECT: + snprintf(sz, sizeof(sz) - 1, "Component relation constraint violated '%s::%s'", m_container_name, m_name); + break; + case NO_MANDATORY: + snprintf(sz, sizeof(sz) - 1, "no mandatory '%s::%s' is found", m_container_name, m_name); + break; + case UNSUPPORTED: + snprintf(sz, sizeof(sz) - 1, "unsupported object '%s::%s' is found", m_container_name, m_name); + return "unsupported"; + break; + case UNSPECIFIED: + snprintf(sz, sizeof(sz) - 1, "unspecified object '%s::%s' is found", m_container_name, m_name); + return "unspecified"; + break; + case WRONG_END_OF_CONTENT: + snprintf(sz, sizeof(sz) - 1, "wrong end of content in object '%s::%s'", m_container_name, m_name); + return "wrong end of content"; + break; + } + + return sz; +} + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp new file mode 100644 index 0000000..9b603fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/identifier.hpp @@ -0,0 +1,97 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +enum class class_type_t : uint8_t +{ + UNIVERSAL + ,APPLICATION + ,CONTEXT + ,PRIVATE + ,UNSPECIFIED //reserved for internal use +}; + +enum class tag_type_t : uint8_t +{ + EXPLICIT + ,IMPLICIT + ,AUTOMATIC +}; + +using tag_value_t = uint64_t; + +template +struct identifier +{ + static constexpr class_type_t class_type = CT; + static constexpr tag_value_t tag_value = TAG; + static constexpr tag_type_t tag_type = TT; +}; + + +enum class tag_rvalue_t : tag_value_t +{ + BOOLEAN = 1 + ,INTEGER = 2 + ,BIT_STRING = 3 + ,OCTET_STRING = 4 + ,NULL_TYPE = 5 + ,OBJECT_IDENTIFIER = 6 + ,REAL = 9 + ,ENUMERATED = 10 + ,SEQUENCE = 16 + ,SEQUENCE_OF = 16 + ,UTF8String = 12 + ,NumericString = 18 + ,IA5String = 22 + ,VisibleString = 26 + ,DATE = 31 + ,TIME_OF_DAY = 32 + ,DATE_TIME = 33 + ,DURATION = 34 + ,ObjectDescriptor = 7 + ,EXTERNAL = 8 + ,EMBEDDED_PDV = 11 + ,OID_IRI = 35 + ,RELATIVE_OID_IRI = 36 + ,SET = 17 + ,SET_OF = 17 + ,UTCTime = 23 + ,GeneralizedTime = 24 + ,PrintableString = 19 + ,T61String = 20 + ,VideotexString = 21 + ,GraphicString = 25 + ,GeneralString = 27 + ,UniversalString = 28 + ,CHARACTER_STRING = 29 + ,BMPString = 30 + ,ISO646String = 26 + ,TeletexString = 20 + ,CHOICE = 99 // fake id for internal use +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp new file mode 100644 index 0000000..6ba2f15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/binary_integer.hpp @@ -0,0 +1,168 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/length.hpp" + +namespace asn { +namespace per { + +template +struct BinaryIntegerLength; + +/*************************************************************************************** +* Encoding of a non-negative-binary-integer (X.691 10.3) +***************************************************************************************/ +template +struct NonnegativeBinaryInteger +{ + static void inline run(u64 val, EncoderCtx& ctx) + { + if(val) + { + size_t const len = sizeof(val) - (__builtin_clzll(val) >> 3); + + BinaryIntegerLength< Range >::run(ctx, len); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 buff[len]; + size_t shift = (len - 1) << 3; + for(size_t i = 0; i < len; ++i) + { + buff[i] = static_cast(val >> shift); + shift -= 8; + } + + ctx.refBuffer().putBytes(buff, len); + } + else + { + BinaryIntegerLength< Range >::run(ctx, 1); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(0); + } + } + template + static void inline run(T& retval, DecoderCtx& ctx, bool extended_val) + { + retval = 0; + size_t len = (size_t)BinaryIntegerLength< Range >::run(ctx, extended_val); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(len); + + if (data) + { + for (size_t i = 0; i < len; ++i) + { + retval = retval << 8; + retval |= data[i]; + } + } + } +}; + +/*************************************************************************************** +* Encoding of a 2's-complement-binary-integer (X.691 10.4) +***************************************************************************************/ + +template +struct TwosComplementBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u64 val = ie.get(); + u64 tval = val; + u64 mask = static_cast(-128); + u8 len = 1; + u8 i = 7; + + u8 buf[8]; + + while (len < 8) + { + buf[i] = static_cast(tval); + if (!(val & mask) || (val & mask) == mask) + break; + mask = mask << 8; + tval = tval >> 8; + len++; + i--; + } + + ctx.refBuffer().putByte(len) && ctx.refBuffer().putBytes(&buf[i], len); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = nullptr; + typename IE::value_type val = 0; + + u8 const* len = ctx.refBuffer().getBytes(1); + + if (len && (*len) <= 8 && (data = ctx.refBuffer().getBytes(*len))) + { + for (u8 i = 0; i < *len; ++i) + { + val = val << 8; + val |= data[i]; + } + } + ie.set(val); + } +}; + +/*************************************************************************************** +* Encoding of a normally small non-negativebinary integer (X.691 10.6) +***************************************************************************************/ +template +struct NormallySmallNonnegativeBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx, typename IE::constraint_t::boundary_type val) + { + if (val <= 63) + { + Tools::bit_accessor::put(static_cast(val), 7, ctx.refBuffer()); //7 bits ('0' indicator + value) + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); //1 bit ('1' indicator) + NonnegativeBinaryInteger::run(val, ctx); + } + } + static TValue inline run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) { + TValue rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, true); + return rval; + } + return Tools::bit_accessor::get(6, ctx.refBuffer()); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp new file mode 100644 index 0000000..5d25599 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/bstring.hpp @@ -0,0 +1,279 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +//15.11 Default +template +struct BitstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +//15.8 Zero length +template +struct BitstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//15.9 Up to 6 bits, fixed length +template +struct BitstringNoExt 0)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[0])) & (0xFF >> (8 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(1); + if (data) + { + data[0] = Tools::bit_accessor::get(IE::constraint_t::upper_bound, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; +template +struct BitstringNoExt 8)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(ie.get_buffer().data()[0], 8, ctx.refBuffer()); + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[1])) & (0xFF >> (16 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(2); + if (data) + { + data[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data[1] = Tools::bit_accessor::get(IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 2); + } +}; + +//15.10 More than 6 bits, up to 64K bits, fixed length +template +struct BitstringNoExt 16)) +>> +{ + constexpr static size_t len_bytes = (IE::constraint_t::upper_bound + 7) >> 3; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + if (ie.get_buffer().size() != len_bytes) + { + ctx.refErrorCtx().sizeRangeError(ie.get_buffer().size(), len_bytes, len_bytes); + } + else + { + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = IE::constraint_t::upper_bound % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(IE::constraint_t::upper_bound, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +/**************************************************/ + +template +struct Bitstring; + +//15.6 : Extension present +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + + if (ie.get_bitqty() <= IE::constraint_t::upper_bound && ie.get_bitqty() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + BitstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = LengthDeterminant::run(ctx, true); + const size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + else + BitstringNoExt::run(ie, ctx); + } +}; + +//15.7 : No extension +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp new file mode 100644 index 0000000..f0d115c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/choice.hpp @@ -0,0 +1,136 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +Choice +*********************************************************************************/ + +/**************************************************/ +//22.6-7 Default +template +struct ChoiceNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ConstrainedWholeNumber::run(ctx, IE::normalize(ie.get_index())); + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::index_type idx = ConstrainedWholeNumber::run(ctx); + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } +}; + +//22.4 One alternative +template +struct ChoiceNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(0), ve); + } +}; + +/**************************************************/ + +template +struct Choice; + +//22.5 Extension present +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto idx = IE::normalize(ie.get_index()); + if (idx <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ChoiceNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, idx - IE::constraint_t::upper_bound - 1); + OpenTypeVisitorEncoder ve{ ctx }; + ie.encode(ve); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + typename IE::index_type idx = IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx); + if (idx >= IE::constraint_t::total_num_entries) + { + ie.set_unknown(); + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + else + { + OpenTypeVisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } + } + else + ChoiceNoExt::run(ie, ctx); + } +}; + +//22.6 No extension +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp new file mode 100644 index 0000000..176792a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/codec.hpp @@ -0,0 +1,325 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/elements.hpp" +#include "asn/per/context.hpp" +#include "asn/per/length.hpp" +#include "asn/per/integer.hpp" +#include "asn/per/enumerated.hpp" +#include "asn/per/ostring.hpp" +#include "asn/per/bstring.hpp" +#include "asn/per/sequence_of.hpp" +#include "asn/per/sequence.hpp" +#include "asn/per/choice.hpp" +#include "asn/per/visitor.hpp" +#include "asn/per/oid.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +pack +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.691 11) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get()), 1, ctx.refBuffer()); + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(0 != Tools::bit_accessor::get(1, ctx.refBuffer())); + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.691 12) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Integer::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Integer::run(ie, ctx); + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.691 13) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } +}; +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.691 15) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Bitstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Bitstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.691 16) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Octetstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Octetstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.691 17) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) { /*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.setpresent(true); + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.691 18) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + Seq::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ctx.m_container = &ie; + Seq::run(ie, ctx); + ctx.m_container = nullptr; + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.691 19) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + SequenceOf::run(ie, ctx); + + for (auto& elem : ie) + Element::run(elem, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + SequenceOf::run(ie, ctx); + + for (auto & elem : ie) + Element::run(elem, ctx); + } +}; +/*************************************************************************************** +* SET: Encoding the set type (X.691 20) +***************************************************************************************/ + + +/*************************************************************************************** +* SET OF: Encoding the set-of type (X.691 21) +***************************************************************************************/ + +/*************************************************************************************** +* CHOICE: Encoding the choice type (X.691 22) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(ie.is_valid()) + { + ctx.container_name(IE::name()); + Choice::run(ie, ctx); + } + else + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + ctx.m_container = &ie; + Choice::run(ie, ctx); + ctx.m_container = nullptr; + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type (X.691 23) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Oid::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Oid::run(ie, ctx); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + if (IE_TYPE != element_type::T_SEQUENCE && !ie.is_valid()) + { + ctx.refErrorCtx().errorNoMandatory(); + } + else + ElementType::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + if (ctx) + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + ElementType::run(ie, ctx); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp new file mode 100644 index 0000000..5b92100 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/common.hpp @@ -0,0 +1,58 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "type_defs.h" + +#include "asn/buffer.hpp" +#include "context.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace per { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; +}; + +template +struct Element; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp new file mode 100644 index 0000000..2a5d7e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/context.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + typedef u64 map_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + m_map = 0; + m_container = nullptr; + } + + bool map_elm() + { + //m_map = (m_map << 1) | (m_map >> (sizeof(m_map)*CHAR_BIT - 1)); + //return m_map & 1u; + + constexpr map_type mask = ((map_type)1) << (sizeof(map_type)*CHAR_BIT - 1); + + bool rv = m_map & mask; + m_map = m_map << 1; + + return rv; + } + + map_type set_map(map_type map) + { + map_type rval = m_map; + m_map = map; + return rval; + } + + map_type get_map() const {return m_map;} + + //Pointer to container (SEQ | CHO) + void* m_container{ nullptr }; + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + //Optional or Extension elements' presence bitmap. Used in sequences + map_type m_map{ 0 }; + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp new file mode 100644 index 0000000..c2e8851 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/enumerated.hpp @@ -0,0 +1,79 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +template +struct Enumerated; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() > IE::constraint_t::upper_bound) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, ie.get() - IE::constraint_t::upper_bound - 1); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + ie.set(IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx)); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp new file mode 100644 index 0000000..7bb93c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/integer.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +template +struct Integer; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Integer > +{ + //X.691 12.1 + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + //X.691 12.2 + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + //X.691 12.2.4, 12.2.6, 10.8s + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +// (X.691 10.7) +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(IE::constraint_t::lower_bound + val); + } +}; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(val + IE::constraint_t::lower_bound); + } + } +}; + +/*************************************************************************************** +* Encoding of an unconstrained whole number (X.691 10.8) +***************************************************************************************/ + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp new file mode 100644 index 0000000..488a830 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/length.hpp @@ -0,0 +1,238 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +* Encoding of a length determinant (X.691 10.9) +*********************************************************************************/ + +template +struct LengthDeterminant; + +struct LengthDeterminantDefault //Unconstrained length +{ + static u8 bytes_needed(size_t len) + { + if (len <= 127) + return 1; + return 2; + } + + static void run(EncoderCtx& ctx, size_t len) + { + if (len <= 127) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(len)); + } + else if (len < 16384) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + len += 0x8000; + ctx.refBuffer().putByte(static_cast(len >> 8)); + ctx.refBuffer().putByte(static_cast(len)); + } + else + { + //todo: 10.9.3.8.1 for len >= 16K + } + } + static size_t run(DecoderCtx& ctx) + { + size_t rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + { + if (*data & 0x80) + { + rval = (*data & 0x7F) << 8; + data = ctx.refBuffer().getBytes(1); + if (data) + rval |= *data; + } + else + rval = *data; + } + return rval; + } +}; + +//10.9.3.3 +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return ConstrainedWholeNumber::run(ctx); + } +}; +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + if (len > Range::upper_bound || len < Range::lower_bound) + LengthDeterminantDefault::run(ctx, len); + else + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + if (extended_len) + return LengthDeterminantDefault::run(ctx); + + return ConstrainedWholeNumber::run(ctx); + } +}; + +template +struct LengthDeterminant= 65536) > > +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +//10.9.3.4 : for "normally small length". bitmaps, sequence types +template +struct NormallySmallLength; + +template +struct NormallySmallLength > +{ + static_assert(Length > 0, "NormallySmallLength must be > 0"); + + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put((u8)(Length - 1), 7, ctx.refBuffer()); + } + static size_t run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + return LengthDeterminantDefault::run(ctx); + return Tools::bit_accessor::get(6, ctx.refBuffer()) + 1; + } +}; + +template +struct NormallySmallLength 64)> > +{ + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminantDefault::run(ctx, Length); + } +}; + +/* +* BinaryIntegerLength +*/ + +template +struct NBytes +{ + static constexpr bound_t value = std::log2( N ) / 8 + 1; +}; + +template +struct NBytes > +{ + static constexpr bound_t value = 1; +}; + +template +struct NRange +{ + static constexpr bound_t lower_bound = B1; + static constexpr bound_t upper_bound = B2; +}; + +template +struct NRange > +{ + static constexpr bound_t lower_bound = B2; + static constexpr bound_t upper_bound = B1; +}; + +template +struct BinaryIntegerLength +{ + typedef NRange< + NBytes::value, + NBytes::value + > nrange; + + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr bound_t lower_bound = nrange::lower_bound; + static constexpr bound_t upper_bound = nrange::upper_bound; + + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminant::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminant::run(ctx, extended_len); + } +}; + +template +struct BinaryIntegerLength> +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp new file mode 100644 index 0000000..c4f222a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/oid.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct Oid +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + size_t len = ie.get().size(); + + if (len > 255) + { + ctx.refErrorCtx().valueError(len, 0, 0); + } + else + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(reinterpret_cast(&len), 1); + ctx.refBuffer().putBytes(ie.get().data(), len); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + uint8_t const* data_in = ctx.refBuffer().getBytes(1); // length + + if(data_in) + { + size_t len = *data_in; + data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp new file mode 100644 index 0000000..4d601bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/ostring.hpp @@ -0,0 +1,209 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template < class IE, class Enable = void> +struct Octetstring; + +//16.8 Default +template +struct OctetstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + + } +}; + +//16.5 Zero length +template +struct OctetstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//16.6 Up to two octets, fixed length +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(1); + if (data_out) { + data_out[0] = data_in; + ie.set(1, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; + +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + Tools::bit_accessor::put(static_cast(ie.get().data()[1]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in[2]; + data_in[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data_in[1] = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(sizeof(data_in)); + if (data_out) { + data_out[0] = data_in[0]; + data_out[1] = data_in[1]; + ie.set(sizeof(data_in), data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, sizeof(data_in)); + } +}; + +//16.7 More than 2 octets, up to 64K, fixed length +template +struct OctetstringNoExt 2)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), ie.get().size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = (size_t)IE::constraint_t::upper_bound; + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } +}; + +/**************************************************/ + +//16.3 : Extension present +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + if (size <= IE::constraint_t::upper_bound && size >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + OctetstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + size_t len = LengthDeterminant::run(ctx, true); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } + else + OctetstringNoExt::run(ie, ctx); + } +}; + +//16.4 : No extension +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + else + { + OctetstringNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + OctetstringNoExt::run(ie, ctx); + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp new file mode 100644 index 0000000..e533e80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence.hpp @@ -0,0 +1,568 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/****************************************************************** + * Adapter + *****************************************************************/ +template +struct Adapter +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } +}; +template +struct Adapter> +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + VisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; +template +struct Adapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + if(ie.is_unknown()) //skip the unknown Open Type + { + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + } +}; + +/****************************************************************** + * RootEncoder + *****************************************************************/ +template +struct RootEncoder +{ + RootEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + { + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + Adapter::run(ie, m_ctx, m_cont); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * RootDecoder + *****************************************************************/ +template +struct RootDecoder +{ + RootDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + { + if(IE::optional) + { + if(m_ctx.map_elm()) + { + ie.setpresent(true); + Adapter::run(ie, m_ctx, m_cont); + } + else + ie.setpresent(false); + } + else + { + Adapter::run(ie, m_ctx, m_cont); + } + } + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtEncoder + *****************************************************************/ +template +struct ExtEncoder +{ + explicit ExtEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Adapter::run(ie, m_ctx, m_cont); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + return false; + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtDecoder + *****************************************************************/ +template +struct ExtDecoder +{ + explicit ExtDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if (m_ctx.map_elm()) + { + ie.setpresent(true); + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Adapter::run(ie, m_ctx, m_cont); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + buffer.set_end(end); + } + else + { + ie.setpresent(false); + } + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * SeqMap + *****************************************************************/ +template +struct SeqMap; + +/* +template +struct SeqMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + u8 k = IE::num_opt_entries / 8; // num of full bytes in a seq map mask + u8 fb_bits = IE::num_opt_entries % 8; // num of first byte bits (without padding) + + if (fb_bits) { + // Put a part of a first byte (without padding, only seq map own bits) + Tools::bit_accessor::put((u8)(val >> 8*k), fb_bits, ctx.refBuffer()); + } + + // Put other bytes (full bytes) + for (int i = (k-1); i >= 0; i--) { + Tools::bit_accessor::put((u8)(val >> 8*i), 8, ctx.refBuffer()); + } + } + + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + uint num_opts = IE::num_opt_entries; + u64 res = 0; + u8 k = 1; + u8 lb_bits = IE::num_opt_entries % 8; // num of last byte bits (without padding) + + while (num_opts >= 8) { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(8, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + + k++; + num_opts -= 8; + } + + if (lb_bits > 0) { + // (8 - lb_bits) - padding in a last byte + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k + 8 - lb_bits; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(lb_bits, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + } + + return res; + } +} +; +*/ + +template +struct SeqMap > //todo: to add code for more than 8 optional elements +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + Tools::bit_accessor::put((u8)val, IE::num_opt_entries, ctx.refBuffer()); + } + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - IE::num_opt_entries; + DecoderCtx::map_type rval = Tools::bit_accessor::get(IE::num_opt_entries, ctx.refBuffer()); + rval = rval << shift; + return rval; + } +}; + +/****************************************************************** + * SeqExtMap + *****************************************************************/ +template +struct SeqExtMap +{ + static void inline run(EncoderCtx& ctx, size_t val) {} + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t len = NormallySmallLength<1>::run(ctx); + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - len; + u8 tmp; + DecoderCtx::map_type rval{ 0 }; + u8 val; + + while (len) { + tmp = len > 8 ? 8 : (u8)len; + val = Tools::bit_accessor::get(tmp, ctx.refBuffer()); + rval = rval << tmp; + rval |= val; + len -= tmp; + } + rval = rval << shift; + return rval; + } +}; + +template +struct SeqExtMap 0)) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + Tools::bit_accessor::put((u8)val, NumExtEntries, ctx.refBuffer()); + } +}; + +template +struct SeqExtMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + + size_t len = NumExtEntries; + size_t tmp; + + while (len) { + tmp = len > 8 ? 8 : len; + Tools::bit_accessor::put((u8)val, tmp, ctx.refBuffer()); + val = val >> tmp; + len -= tmp; + } + } +}; + +/****************************************************************** + * SeqMapBuilder + *****************************************************************/ +struct SeqMapBuilder +{ + SeqMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(!IE::extension && IE::optional) + { + m_map = m_map << 1; + if(ie.is_valid()) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqExtMapBuilder + *****************************************************************/ +struct SeqExtMapBuilder +{ + SeqExtMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(IE::extension) + { + m_map = m_map << 1; + if(!IE::optional || (IE::optional && ie.is_valid())) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqNoExtDefault + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExtDefault +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + RootEncoder ve(ctx, ie); + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx, DecoderCtx::map_type map = 0) + { + RootDecoder ve(ctx, ie); + + DecoderCtx::map_type old_map = ctx.set_map(map); + ie.decode(ve); + ctx.set_map(old_map); + } +}; + +/****************************************************************** + * SeqNoExt + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } +}; + +//18.2 OPT/DEF present within the extension root +template +struct SeqNoExt 0) > > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqMapBuilder mb(map); + ie.encode(mb); + SeqMap::run(ctx, map); + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx, SeqMap::run(ctx)); + } +}; + +/****************************************************************** + * Seq + *****************************************************************/ +template +struct Seq; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqExtMapBuilder emb(map); + ie.encode(emb); + + if (map) { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + SeqExtMap::run(ctx, map); + ExtEncoder ove(ctx, ie); + ie.encode(ove); + } + else { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + SeqNoExt::run(ie, ctx); + + auto old_map = ctx.set_map(SeqExtMap::run(ctx)); // we do not know how many exts can be received + { + ExtDecoder ove(ctx, ie); + ie.decode(ove); + + auto& buffer = ctx.refBuffer(); + while(ctx.get_map()) + { + if(ctx.map_elm()) //skip unknown extensions + { + size_t size = LengthDeterminantDefault::run(ctx); + if (buffer.getBytesLeft() < size) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + break; + } + buffer.advance(size); + } + } + } + ctx.set_map(old_map); + } + else + SeqNoExt::run(ie, ctx); + } +}; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp new file mode 100644 index 0000000..d4e21a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/sequence_of.hpp @@ -0,0 +1,156 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct SequenceOf; + +//19.6 Default +template +struct SequenceOfNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +//16.6 +template +struct SequenceOfNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + for (size_t i = 0; i < IE::constraint_t::upper_bound; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +/**************************************************/ + +//19.4 Extension present +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.size() <= IE::constraint_t::upper_bound && ie.size() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SequenceOfNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + size_t len = LengthDeterminant::run(ctx, true); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + //v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } + else + SequenceOfNoExt::run(ie, ctx); + } +}; + +//19.5-6 No extension +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (IE::constraint_t::lower_bound >= 0 && ie.size() < size_t(IE::constraint_t::lower_bound)) + { + ctx.refErrorCtx().sizeRangeError(ie.size(), size_t(IE::constraint_t::lower_bound)); + } + else + { + SequenceOfNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SequenceOfNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp new file mode 100644 index 0000000..f379044 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/visitor.hpp @@ -0,0 +1,141 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +VisitorEncoder +*********************************************************************************/ +struct VisitorEncoder +{ + explicit VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/******************************************************************************** +VisitorDecoder +*********************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Encode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorEncoder +{ + explicit OpenTypeVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Element::run(ie, m_ctx); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Decode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorDecoder +{ + explicit OpenTypeVisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Element::run(ie, m_ctx); + buffer.set_end(end); + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp new file mode 100644 index 0000000..c614998 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/per/whole_number.hpp @@ -0,0 +1,147 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +/*************************************************************************************** +* Encoding of a constrained whole number (X.691 10.5) +***************************************************************************************/ + +template +struct length_determinant; + +template +struct length_determinant > { static constexpr bound_t value = 0; }; + +template +struct length_determinant > { static constexpr bound_t value = 1; }; + +template +struct length_determinant 1) > > { static constexpr bound_t value = boost::static_log2<(R - 1)>::value + 1; }; + +/*************************************************************************************** +***************************************************************************************/ + +template +struct ConstrainedWholeNumber; + +//Bit-field case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::put(static_cast(val - Range::lower_bound), + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } + static V inline run(DecoderCtx& ctx) + { + return Range::lower_bound + Tools::bit_accessor::get( + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } +}; + +//One octet case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(val - Range::lower_bound)); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + rval = Range::lower_bound + data[0]; + return rval; + } +}; + +//Two octets case +template +struct ConstrainedWholeNumber (Range::lower_bound + 255)) && (Range::upper_bound <= (Range::lower_bound + 65535))> > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& v) + { + u64 val = static_cast(v - Range::lower_bound); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte((u8)(val >> 8)); + ctx.refBuffer().putByte((u8)val); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(2); + if (data) { + rval = data[0]; + rval = rval << 8; + rval |= data[1]; + rval += Range::lower_bound; + } + return rval; + } +}; + +//Indefinite case +template +struct ConstrainedWholeNumber Range::lower_bound + 65535) > > +{ + struct NormalizedValueRange + { + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr boundary_type lower_bound = 0; + static constexpr boundary_type upper_bound = Range::upper_bound - Range::lower_bound; + }; + + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + NonnegativeBinaryInteger::run(val - Range::lower_bound, ctx); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, false); + return rval + Range::lower_bound; + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp new file mode 100644 index 0000000..b21eaef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/printer.hpp @@ -0,0 +1,338 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" + +namespace asn{ + +/******************************************************************************** +Utility +**********************************S***********************************************/ +inline void skip_row(std::ostream* str, size_t row_shift) + //{*str << std::string(row_shift, ' ');} +{ + std::string s(row_shift, ' '); + str->write(s.data(), s.size()); +} + +inline void print_hex(std::ostream* str, size_t size, const uint8_t* data, size_t row_shift) +{ + *str << std::setfill('0') << std::hex << std::noshowbase; + for (size_t i = 0; i < size; ++i) + { + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)data[i] << " "; + if (0x0f == (i & 0x0f)) { *str << '\n'; } + } +} + +/******************************************************************************** + +Print + +*********************************************************************************/ + + +/******************************************************************************** +default implementation for IE +*********************************************************************************/ +template +struct Print; + +template +void print(IE const& ie, std::ostream& out, size_t row_shift) +{ + Print::run(ie, &out, row_shift); +} + +template +std::string get_printed(IE const& ie, size_t row_shift = 0) +{ + std::stringstream out; + print(ie, out, row_shift); + return out.str(); +} + + +/******************************************************************************** +VisitorPrinter +*********************************************************************************/ +struct VisitorPrinter +{ + VisitorPrinter(std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift) {} + + template + bool operator() (IE & ie) + { + Print::run(ie, m_pStream, m_RowShift); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; +}; + +/****************************************************************** + * PrinterAdapter + *****************************************************************/ +template +struct PrinterAdapter +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + Print::run(ie, str, row_shift); + } +}; +template +struct PrinterAdapter> +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; +template +struct PrinterAdapter > +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; + +/******************************************************************************** +SeqVisitorPrinter +*********************************************************************************/ +template +struct SeqVisitorPrinter +{ + SeqVisitorPrinter(Container const& cont, std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift), m_cont(cont) {} + + template + bool operator() (IE & ie) + { + if(!IE::optional || ie.is_valid()) + PrinterAdapter::run(ie, m_pStream, m_RowShift, m_cont); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; + Container const& m_cont; +}; + + +/******************************************************************************** +T_NULL +*********************************************************************************/ + +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +/******************************************************************************** +T_BOOLEAN +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << (ie.get() ? "true" : "false")<< std::endl; + } +}; + +/******************************************************************************** +T_INTEGER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_ENUMERATED +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_BITSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + auto& val = ie.get_buffer(); + *str << IE::name() << " = "; + + print_hex(str, val.size() - 1, val.data(), row_shift + strlen(IE::name()) + 3); + + size_t i = val.size() - 1; + uint8_t c = val.data()[i]; + uint8_t b = val.bitqty() % 8; + if (b != 0) c = c << (8 - b); + + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)c; + + *str << " (" << std::dec << val.bitqty() << " bits)" << std::endl; + + } +}; + +/******************************************************************************** +T_OCTETSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = "; + auto & val = ie.get(); + print_hex(str, val.size(), val.data(), row_shift + strlen(IE::name()) + 3); + *str << std::endl; + } +}; + +/******************************************************************************** +T_SEQUENCE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SET +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + + +/******************************************************************************** +T_CHOICE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + VisitorPrinter vp(str, row_shift+1); + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SEQUENCE_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_SET_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_OBJECTIDENTIFIER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h new file mode 100644 index 0000000..e7cc539 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/type_defs.h @@ -0,0 +1,36 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp new file mode 100644 index 0000000..ae1ad74 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/utility.hpp @@ -0,0 +1,88 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn +{ + +struct allocator +{ + allocator() = default; + + allocator(void* data, size_t size) { reset(data, size); } + + template + explicit allocator(T (&buf)[SZ]) : allocator(buf, SZ * sizeof(T)) { } + + void reset(void* data, size_t size) + { + std::size_t space = size; + m_begin = static_cast(std::align(alignment, size, data, space)); + m_end = m_begin ? m_begin + space : nullptr; + m_current = m_begin; + m_ref_counter = 0; + } + + uint8_t* alloc_bytes(std::size_t size) + { + std::size_t const esize = (size + alignment - 1) & -alignment; + if (m_current + esize > m_end) { return nullptr; } //throw std::bad_alloc(); + + uint8_t* const rval = m_current; + m_current += esize; + return rval; + } + + size_t add_ref() { return ++m_ref_counter; } + size_t release() + { + if (m_ref_counter) --m_ref_counter; + if (m_ref_counter == 0) reset(); + return m_ref_counter; + } + size_t ref_counter() const { return m_ref_counter; } +private: + //called by last release() when m_ref_counter becomes 0 + void reset() + { + m_current = m_begin; + } + + + enum : std::size_t + { + alignment = alignof(std::size_t) + }; + + uint8_t* m_begin { nullptr }; //set in reset() + uint8_t* m_current { nullptr }; //changed by alloc_bytes + uint8_t* m_end { nullptr }; + + size_t m_ref_counter {0}; +}; + +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp new file mode 100644 index 0000000..4b67374 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/value_traits.hpp @@ -0,0 +1,187 @@ +#ifndef _STDEX_VALUE_TRAITS_HPP_INCLUDED_ +#define _STDEX_VALUE_TRAITS_HPP_INCLUDED_ + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "type_defs.h" + +namespace stdex { +namespace value { + +namespace mpl = boost::mpl; + +//NOTE! length is in bits +typedef mpl::int_<8> _8; +typedef mpl::int_<16> _16; +typedef mpl::int_<24> _24; +typedef mpl::int_<32> _32; +typedef mpl::int_<40> _40; +typedef mpl::int_<48> _48; +typedef mpl::int_<56> _56; +typedef mpl::int_<64> _64; + +template +struct bits_to_bytes : mpl::int_< (num_bits + 7) / 8 > {}; + +/****************************************************************************** +* Class: value::traits +* Description: select min integer type to fit LEN bits +* Notes: LEN is positive integer type (mpl::int_) = number of bits +******************************************************************************/ +template struct traits; + +template +struct traits + >::type +> +{ + typedef _8 value_length; + typedef u8 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _16 value_length; + typedef u16 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _24 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _32 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _40 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _48 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _56 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _64 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits + >::type +> +{ + typedef LEN value_length; + struct value_type {u8 value[bits_to_bytes::value];}; + typedef value_type const& param_type; +}; + + +//template +//struct traits +// >::type +//> +//{ +// typedef LEN value_length; +// struct value_type {unsigned char value[LEN::value/8];}; +// typedef value_type const& param_type; +// +//}; + +/****************************************************************************** +* Class: value::traits_c +* Description: select min integer type to fit BITS bits +* Notes: N is positive integer value = number of bits +******************************************************************************/ +template +struct traits_c : traits > +{ +}; + +} //end: namespace value + +} //end: namespace stdex + +#ifdef _MSC_VER +#pragma component( mintypeinfo, off ) +#endif + +#endif //_STDEX_VALUE_TRAITS_HPP_INCLUDED_ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp new file mode 100644 index 0000000..be205aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/variant.hpp @@ -0,0 +1,146 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + + +// Local Includes: Application specific classes, functions, and libraries + + +namespace asn{ + +template +struct variant +{ + typedef variant self_type; + + template + static void check_size () {static_assert(sizeof (T) <= S, "wrong type");} + + variant () + : typeinfo (nullptr) + {} + + template + variant (const T& t) + : typeinfo (&typeid (T)) + { + check_size(); + new (as_()) T (t); + } + + ~variant () + { + assert(!typeinfo); + } + + template + T& build () + { + assert(!typeinfo); + typeinfo = & typeid (T); + return *new (as_()) T; + } + + template + T& build (const T& t) + { + assert(!typeinfo); + check_size(); + typeinfo = & typeid (T); + return *new (as_ ()) T (t); + } + + template + T& as() + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + const T& as() const + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + void swap(self_type& other) + { + assert (typeinfo); + assert (*typeinfo == *other.typeinfo); + std::swap (as (), other.as ()); + } + + template + void move(self_type& other) + { + build (); + swap (other); + other.destroy (); + } + + template + void copy(const self_type& other) + { + build (other.as ()); + } + + template + void destroy() + { + as ().~T (); + typeinfo = nullptr; + } + +private: + self_type& operator=(const self_type&){} + variant (const self_type&){} + + template + T* as_() + { + void *p = buffer.raw; + return static_cast (p); + } + + template + const T* as_() const + { + const void *p = buffer.raw; + return static_cast (p); + } + + union + { + long double align_me; + char raw[S]; + } buffer; + + const std::type_info *typeinfo; +}; + +} //namspace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp new file mode 100644 index 0000000..50854f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/asn/version.hpp @@ -0,0 +1,27 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define ASN_API_VERSION_MAJOR 5 +#define ASN_API_VERSION_MINOR 0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp new file mode 100644 index 0000000..2ed8200 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-Constants.hpp @@ -0,0 +1,244 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-RANfunction-Item ProtocolIE-ID ::= 60001 +*/ + +constexpr int64_t id_RANfunction_Item = 60001; +/* +id-RANfunctionDefinition ProtocolIE-ID ::= 60002 +*/ + +constexpr int64_t id_RANfunctionDefinition = 60002; +/* +id-RANfunctionID ProtocolIE-ID ::= 60003 +*/ + +constexpr int64_t id_RANfunctionID = 60003; +/* +id-RANfunctionID-Item ProtocolIE-ID ::= 60004 +*/ + +constexpr int64_t id_RANfunctionID_Item = 60004; +/* +id-RANfunctionIEcause-Item ProtocolIE-ID ::= 60005 +*/ + +constexpr int64_t id_RANfunctionIEcause_Item = 60005; +/* +id-RANfunctionsAccepted ProtocolIE-ID ::= 60006 +*/ + +constexpr int64_t id_RANfunctionsAccepted = 60006; +/* +id-RANfunctionsAdded ProtocolIE-ID ::= 60007 +*/ + +constexpr int64_t id_RANfunctionsAdded = 60007; +/* +id-RANfunctionsDeleted ProtocolIE-ID ::= 60008 +*/ + +constexpr int64_t id_RANfunctionsDeleted = 60008; +/* +id-RANfunctionsModified ProtocolIE-ID ::= 60009 +*/ + +constexpr int64_t id_RANfunctionsModified = 60009; +/* +id-RANfunctionsRejected ProtocolIE-ID ::= 60010 +*/ + +constexpr int64_t id_RANfunctionsRejected = 60010; +/* +id-RICaction-Admitted-Item ProtocolIE-ID ::= 60013 +*/ + +constexpr int64_t id_RICaction_Admitted_Item = 60013; +/* +id-RICaction-NotAdmitted-Item ProtocolIE-ID ::= 60015 +*/ + +constexpr int64_t id_RICaction_NotAdmitted_Item = 60015; +/* +id-RICaction-ToBeSetup-Item ProtocolIE-ID ::= 60011 +*/ + +constexpr int64_t id_RICaction_ToBeSetup_Item = 60011; +/* +id-RICactionDefinition ProtocolIE-ID ::= 60016 +*/ + +constexpr int64_t id_RICactionDefinition = 60016; +/* +id-RICactionID ProtocolIE-ID ::= 60017 +*/ + +constexpr int64_t id_RICactionID = 60017; +/* +id-RICactionType ProtocolIE-ID ::= 60018 +*/ + +constexpr int64_t id_RICactionType = 60018; +/* +id-RICactions-Admitted ProtocolIE-ID ::= 60012 +*/ + +constexpr int64_t id_RICactions_Admitted = 60012; +/* +id-RICactions-NotAdmitted ProtocolIE-ID ::= 60014 +*/ + +constexpr int64_t id_RICactions_NotAdmitted = 60014; +/* +id-RICcallProcessID ProtocolIE-ID ::= 60019 +*/ + +constexpr int64_t id_RICcallProcessID = 60019; +/* +id-RICcause ProtocolIE-ID ::= 60020 +*/ + +constexpr int64_t id_RICcause = 60020; +/* +id-RICcontrolAckRequest ProtocolIE-ID ::= 60021 +*/ + +constexpr int64_t id_RICcontrolAckRequest = 60021; +/* +id-RICcontrolHeader ProtocolIE-ID ::= 60022 +*/ + +constexpr int64_t id_RICcontrolHeader = 60022; +/* +id-RICcontrolMessage ProtocolIE-ID ::= 60023 +*/ + +constexpr int64_t id_RICcontrolMessage = 60023; +/* +id-RICcontrolStatus ProtocolIE-ID ::= 60024 +*/ + +constexpr int64_t id_RICcontrolStatus = 60024; +/* +id-RICeventTriggerDefinition ProtocolIE-ID ::= 60025 +*/ + +constexpr int64_t id_RICeventTriggerDefinition = 60025; +/* +id-RICindicationHeader ProtocolIE-ID ::= 60026 +*/ + +constexpr int64_t id_RICindicationHeader = 60026; +/* +id-RICindicationMessage ProtocolIE-ID ::= 60027 +*/ + +constexpr int64_t id_RICindicationMessage = 60027; +/* +id-RICindicationSN ProtocolIE-ID ::= 60028 +*/ + +constexpr int64_t id_RICindicationSN = 60028; +/* +id-RICindicationType ProtocolIE-ID ::= 60029 +*/ + +constexpr int64_t id_RICindicationType = 60029; +/* +id-RICrequestID ProtocolIE-ID ::= 60030 +*/ + +constexpr int64_t id_RICrequestID = 60030; +/* +id-RICrequestSequenceNumber ProtocolIE-ID ::= 60032 +*/ + +constexpr int64_t id_RICrequestSequenceNumber = 60032; +/* +id-RICrequestorID ProtocolIE-ID ::= 60031 +*/ + +constexpr int64_t id_RICrequestorID = 60031; +/* +id-RICsubscription ProtocolIE-ID ::= 60033 +*/ + +constexpr int64_t id_RICsubscription = 60033; +/* +id-RICsubsequentAction ProtocolIE-ID ::= 60034 +*/ + +constexpr int64_t id_RICsubsequentAction = 60034; +/* +id-RICsubsequentActionType ProtocolIE-ID ::= 60035 +*/ + +constexpr int64_t id_RICsubsequentActionType = 60035; +/* +id-RICtimeToWait ProtocolIE-ID ::= 60036 +*/ + +constexpr int64_t id_RICtimeToWait = 60036; +/* +id-ricControl ProcedureCode ::= 204 +*/ + +constexpr int64_t id_ricControl = 204; +/* +id-ricIndication ProcedureCode ::= 205 +*/ + +constexpr int64_t id_ricIndication = 205; +/* +id-ricServiceQuery ProcedureCode ::= 206 +*/ + +constexpr int64_t id_ricServiceQuery = 206; +/* +id-ricServiceUpdate ProcedureCode ::= 203 +*/ + +constexpr int64_t id_ricServiceUpdate = 203; +/* +id-ricSubscription ProcedureCode ::= 201 +*/ + +constexpr int64_t id_ricSubscription = 201; +/* +id-ricSubscriptionDelete ProcedureCode ::= 202 +*/ + +constexpr int64_t id_ricSubscriptionDelete = 202; +/* +maxofRANfunctionID INTEGER ::=256 +*/ + +constexpr int64_t maxofRANfunctionID = 256; +/* +maxofRICactionID INTEGER ::= 16 +*/ + +constexpr int64_t maxofRICactionID = 16; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp new file mode 100644 index 0000000..40f7bbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-IEs.hpp @@ -0,0 +1,568 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" + +/* +CauseRIC ::= ENUMERATED { + 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, + function-not-required, + excessive-functions, + ric-resource-limit, + ... +} +*/ + +struct CauseRIC : asn::enumerated<13, 0, true> +{ + static constexpr const char* name() {return "CauseRIC";} + using parent_t = asn::enumerated<13, 0, true>; + typedef enum { + 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 + ,function_not_required + ,excessive_functions + ,ric_resource_limit + } index_t; + +}; + +/* +RANfunctionDefinition ::= OCTET STRING +*/ + +struct RANfunctionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RANfunctionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RANfunctionID ::= INTEGER (0..4095) +*/ + +struct RANfunctionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RANfunctionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionDefinition ::= OCTET STRING +*/ + +struct RICactionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICactionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICactionID ::= INTEGER (0..255) +*/ + +struct RICactionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICactionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... +} +*/ + +struct RICactionType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICactionType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + report + ,insert + ,policy + } index_t; + +}; + +/* +RICcallProcessID ::= OCTET STRING +*/ + +struct RICcallProcessID : asn::ostring<> +{ + static constexpr const char* name() {return "RICcallProcessID";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ric CauseRIC, + ... +} +*/ + +struct RICcause : asn::choice<5, 0, true> +{ + static constexpr const char* name() {return "RICcause";} + using parent_t = asn::choice<5, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 6;} + void set_unknown() { set_index(6); } + ~RICcause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + struct ric_t : CauseRIC + { + static constexpr const char* name() {return "ric_t";} + using parent_t = CauseRIC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + case 5: set_index(5); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + case 5: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + ric_t& select_ric() { if(get_index() != 5) { clear(); set_index(5); return var.build();} return var.as();} + ric_t const* get_ric() const { if(get_index() == 5) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + char dummy5[sizeof(ric_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RICcontrolAckRequest ::= ENUMERATED{ + noAck, + ack, + nAck, + ... +} +*/ + +struct RICcontrolAckRequest : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolAckRequest";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + noAck + ,ack + ,nAck + } index_t; + +}; + +/* +RICcontrolHeader ::= OCTET STRING +*/ + +struct RICcontrolHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolMessage ::= OCTET STRING +*/ + +struct RICcontrolMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolStatus ::= ENUMERATED{ + success, + rejected, + failed, + ... +} +*/ + +struct RICcontrolStatus : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolStatus";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + success + ,rejected + ,failed + } index_t; + +}; + +/* +RICeventTriggerDefinition ::= OCTET STRING +*/ + +struct RICeventTriggerDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICeventTriggerDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationHeader ::= OCTET STRING +*/ + +struct RICindicationHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationMessage ::= OCTET STRING +*/ + +struct RICindicationMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationSN ::= INTEGER (0..65535) +*/ + +struct RICindicationSN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICindicationSN";} + using parent_t = asn::integer<>; + +}; + +/* +RICindicationType ::= ENUMERATED{ + report, + insert, + ... +} +*/ + +struct RICindicationType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICindicationType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + report + ,insert + } index_t; + +}; + +/* +RICrequestID ::= SEQUENCE { + ricRequestorID INTEGER (0..65535), + ricRequestSequenceNumber INTEGER (0..65535), + ... +} +*/ + +struct RICrequestID : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICrequestID";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricRequestorID_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestorID_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestorID_t& ref_ricRequestorID() {return ricRequestorID;} + ricRequestorID_t const& ref_ricRequestorID() const {return ricRequestorID;} + struct ricRequestSequenceNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestSequenceNumber_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestSequenceNumber_t& ref_ricRequestSequenceNumber() {return ricRequestSequenceNumber;} + ricRequestSequenceNumber_t const& ref_ricRequestSequenceNumber() const {return ricRequestSequenceNumber;} + template void decode(V& v) + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + template void encode(V& v) const + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + void clear() + { + ricRequestorID.clear(); + ricRequestSequenceNumber.clear(); + + }; + private: + ricRequestorID_t ricRequestorID; + ricRequestSequenceNumber_t ricRequestSequenceNumber; + +}; +/* +RICsubsequentActionType ::= ENUMERATED{ + continue, + wait, + ... +} +*/ + +struct RICsubsequentActionType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICsubsequentActionType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + Continue + ,wait + } index_t; + +}; + +/* +RICtimeToWait ::= ENUMERATED{ + zero, + w1ms, + w2ms, + w5ms, + w10ms, + w20ms, + w30ms, + w40ms, + w50ms, + w100ms, + w200ms, + w500ms, + w1s, + w2s, + w5s, + w10s, + w20s, + w60s, + ... +} +*/ + +struct RICtimeToWait : asn::enumerated<18, 0, true> +{ + static constexpr const char* name() {return "RICtimeToWait";} + using parent_t = asn::enumerated<18, 0, true>; + typedef enum { + zero + ,w1ms + ,w2ms + ,w5ms + ,w10ms + ,w20ms + ,w30ms + ,w40ms + ,w50ms + ,w100ms + ,w200ms + ,w500ms + ,w1s + ,w2s + ,w5s + ,w10s + ,w20s + ,w60s + } index_t; + +}; + +/* +RICsubsequentAction ::=SEQUENCE{ + ricSubsequentActionType RICsubsequentActionType, + ricTimeToWait RICtimeToWait, + ... +} +*/ + +struct RICsubsequentAction : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubsequentAction";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricSubsequentActionType_t : RICsubsequentActionType + { + static constexpr const char* name() {return "ricSubsequentActionType_t";} + using parent_t = RICsubsequentActionType; + + }; + ricSubsequentActionType_t& ref_ricSubsequentActionType() {return ricSubsequentActionType;} + ricSubsequentActionType_t const& ref_ricSubsequentActionType() const {return ricSubsequentActionType;} + struct ricTimeToWait_t : RICtimeToWait + { + static constexpr const char* name() {return "ricTimeToWait_t";} + using parent_t = RICtimeToWait; + + }; + ricTimeToWait_t& ref_ricTimeToWait() {return ricTimeToWait;} + ricTimeToWait_t const& ref_ricTimeToWait() const {return ricTimeToWait;} + template void decode(V& v) + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + template void encode(V& v) const + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + void clear() + { + ricSubsequentActionType.clear(); + ricTimeToWait.clear(); + + }; + private: + ricSubsequentActionType_t ricSubsequentActionType; + ricTimeToWait_t ricTimeToWait; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp new file mode 100644 index 0000000..e2073d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Contents.hpp @@ -0,0 +1,5512 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "E2AP-IEs.hpp" +#include "X2AP-IEs.hpp" +#include "X2AP-Constants.hpp" +#include "X2AP-Containers.hpp" +#include "E2AP-Constants.hpp" + +/* +RANfunction-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ranFunctionDefinition RANfunctionDefinition, + ... +} +*/ + +struct RANfunction_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunction-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ranFunctionDefinition_t : RANfunctionDefinition + { + static constexpr const char* name() {return "ranFunctionDefinition_t";} + using parent_t = RANfunctionDefinition; + + }; + ranFunctionDefinition_t& ref_ranFunctionDefinition() {return ranFunctionDefinition;} + ranFunctionDefinition_t const& ref_ranFunctionDefinition() const {return ranFunctionDefinition;} + template void decode(V& v) + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + void clear() + { + ranFunctionID.clear(); + ranFunctionDefinition.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ranFunctionDefinition_t ranFunctionDefinition; + +}; +/* +RANfunction-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunction-Item CRITICALITY ignore TYPE RANfunction-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunction_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(id_RANfunction_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunction_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunction_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunction_Item& select_id_RANfunction_Item() { return set(1); } + RANfunction_Item const* get_id_RANfunction_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunction_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunction_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionID-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ... +} +*/ + +struct RANfunctionID_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionID-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + template void decode(V& v) + { + v(ranFunctionID); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + + }; + void clear() + { + ranFunctionID.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + +}; +/* +RANfunctionID-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionID-Item CRITICALITY ignore TYPE RANfunctionID-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionID_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(id_RANfunctionID_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionID_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionID_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionID_Item& select_id_RANfunctionID_Item() { return set(1); } + RANfunctionID_Item const* get_id_RANfunctionID_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionID_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionIDcause-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ricCause RICcause, + ... +} +*/ + +struct RANfunctionIDcause_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionIDcause-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ranFunctionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ricCause); + + }; + void clear() + { + ranFunctionID.clear(); + ricCause.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ricCause_t ricCause; + +}; +/* +RANfunctionIDcause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionIEcause-Item CRITICALITY ignore TYPE RANfunctionIDcause-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionIDcause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(id_RANfunctionIEcause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionIEcause_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionIEcause_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionIDcause_Item& select_id_RANfunctionIEcause_Item() { return set(1); } + RANfunctionIDcause_Item const* get_id_RANfunctionIEcause_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionIEcause_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionIDcause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunction-ItemIEs} } +*/ + +struct RANfunctions_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctions_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctions_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctions-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsID-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container{{RANfunctionID-ItemIEs}} +*/ + +struct RANfunctionsID_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsID_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsID_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsID-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsIDcause-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunctionIDcause-ItemIEs} } +*/ + +struct RANfunctionsIDcause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsIDcause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsIDcause_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsIDcause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-Admitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ... +} +*/ + +struct RICaction_Admitted_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-Admitted-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + template void decode(V& v) + { + v(ricActionID); + + }; + template void encode(V& v) const + { + v(ricActionID); + + }; + void clear() + { + ricActionID.clear(); + + }; + private: + ricActionID_t ricActionID; + +}; +/* +RICaction-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-Admitted-Item CRITICALITY ignore TYPE RICaction-Admitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(id_RICaction_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_Admitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_Admitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_Admitted_Item& select_id_RICaction_Admitted_Item() { return set(1); } + RICaction_Admitted_Item const* get_id_RICaction_Admitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_Admitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-Admitted-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container{{RICaction-Admitted-ItemIEs}} +*/ + +struct RICaction_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-NotAdmitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ricCause RICcause, + ... +} +*/ + +struct RICaction_NotAdmitted_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ricActionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricCause); + + }; + void clear() + { + ricActionID.clear(); + ricCause.clear(); + + }; + private: + ricActionID_t ricActionID; + ricCause_t ricCause; + +}; +/* +RICaction-NotAdmitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-NotAdmitted-Item CRITICALITY ignore TYPE RICaction-NotAdmitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_NotAdmitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(id_RICaction_NotAdmitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_NotAdmitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_NotAdmitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_NotAdmitted_Item& select_id_RICaction_NotAdmitted_Item() { return set(1); } + RICaction_NotAdmitted_Item const* get_id_RICaction_NotAdmitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_NotAdmitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_NotAdmitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-NotAdmitted-List ::= SEQUENCE (SIZE(0..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-NotAdmitted-ItemIEs} } +*/ + +struct RICaction_NotAdmitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_NotAdmitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_NotAdmitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-ToBeSetup-Item ::= SEQUENCE { + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ... +} +*/ + +struct RICaction_ToBeSetup_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "RICaction-ToBeSetup-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricActionType_t : RICactionType + { + static constexpr const char* name() {return "ricActionType_t";} + using parent_t = RICactionType; + + }; + ricActionType_t& ref_ricActionType() {return ricActionType;} + ricActionType_t const& ref_ricActionType() const {return ricActionType;} + struct ricActionDefinition_t : RICactionDefinition + { + static constexpr const char* name() {return "ricActionDefinition_t";} + using parent_t = RICactionDefinition; + static constexpr bool optional = true; + + }; + ricActionDefinition_t& set_ricActionDefinition() { ricActionDefinition.setpresent(true); return ricActionDefinition;} + ricActionDefinition_t const* get_ricActionDefinition() const {return ricActionDefinition.is_valid() ? &ricActionDefinition : nullptr;} + struct ricSubsequentAction_t : RICsubsequentAction + { + static constexpr const char* name() {return "ricSubsequentAction_t";} + using parent_t = RICsubsequentAction; + static constexpr bool optional = true; + + }; + ricSubsequentAction_t& set_ricSubsequentAction() { ricSubsequentAction.setpresent(true); return ricSubsequentAction;} + ricSubsequentAction_t const* get_ricSubsequentAction() const {return ricSubsequentAction.is_valid() ? &ricSubsequentAction : nullptr;} + template void decode(V& v) + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + void clear() + { + ricActionID.clear(); + ricActionType.clear(); + ricActionDefinition.clear(); + ricSubsequentAction.clear(); + + }; + private: + ricActionID_t ricActionID; + ricActionType_t ricActionType; + ricActionDefinition_t ricActionDefinition; + ricSubsequentAction_t ricSubsequentAction; + +}; +/* +RICaction-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-ToBeSetup-Item CRITICALITY ignore TYPE RICaction-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(id_RICaction_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_ToBeSetup_Item& select_id_RICaction_ToBeSetup_Item() { return set(1); } + RICaction_ToBeSetup_Item const* get_id_RICaction_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } +*/ + +struct RICactions_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICactions_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICactions_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICactions-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICcontrolAcknowledge-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolStatus() { set(id_RICcontrolStatus); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolStatus)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolStatus);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolStatus() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolStatus& select_id_RICcontrolStatus() { return set(4); } + RICcontrolStatus const* get_id_RICcontrolStatus() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolStatus()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolStatus)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolStatus() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolAcknowledge-IEs}}, + ... +} +*/ + +struct RICcontrolAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolFailure-IEs X2AP-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-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}, + ... +} +*/ + +struct RICcontrolFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcause() { set(id_RICcause); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcause)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcause() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcause& select_id_RICcause() { return set(4); } + RICcause const* get_id_RICcause() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcause()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcause() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolFailure-IEs}}, + ... +} +*/ + +struct RICcontrolFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolRequest-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolHeader() { set(id_RICcontrolHeader); type=4;} + void select_id_RICcontrolMessage() { set(id_RICcontrolMessage); type=5;} + void select_id_RICcontrolAckRequest() { set(id_RICcontrolAckRequest); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolHeader)) { type = 4; return true; } + else if(equal(id_RICcontrolMessage)) { type = 5; return true; } + else if(equal(id_RICcontrolAckRequest)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolHeader);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICcontrolMessage);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICcontrolAckRequest);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolHeader() { set(reject); type=4;} + void select_id_RICcontrolMessage() { set(reject); type=5;} + void select_id_RICcontrolAckRequest() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolHeader& select_id_RICcontrolHeader() { return set(4); } + RICcontrolHeader const* get_id_RICcontrolHeader() const { return get(4); } + RICcontrolMessage& select_id_RICcontrolMessage() { return set(5); } + RICcontrolMessage const* get_id_RICcontrolMessage() const { return get(5); } + RICcontrolAckRequest& select_id_RICcontrolAckRequest() { return set(6); } + RICcontrolAckRequest const* get_id_RICcontrolAckRequest() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolHeader()); return true; + case 5: v(select_id_RICcontrolMessage()); return true; + case 6: v(select_id_RICcontrolAckRequest()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolAckRequest)]; + char dummy4[sizeof(RICcontrolHeader)]; + char dummy5[sizeof(RICcontrolMessage)]; + char dummy6[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolHeader() { set(mandatory); type=4;} + void select_id_RICcontrolMessage() { set(mandatory); type=5;} + void select_id_RICcontrolAckRequest() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolRequest-IEs}}, + ... +} +*/ + +struct RICcontrolRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICindication-IEs X2AP-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 mandatory}| + { 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}, + ... +} +*/ + +struct RICindication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactionID() { set(id_RICactionID); type=3;} + void select_id_RICindicationSN() { set(id_RICindicationSN); type=4;} + void select_id_RICindicationType() { set(id_RICindicationType); type=5;} + void select_id_RICindicationHeader() { set(id_RICindicationHeader); type=6;} + void select_id_RICindicationMessage() { set(id_RICindicationMessage); type=7;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactionID)) { type = 3; return true; } + else if(equal(id_RICindicationSN)) { type = 4; return true; } + else if(equal(id_RICindicationType)) { type = 5; return true; } + else if(equal(id_RICindicationHeader)) { type = 6; return true; } + else if(equal(id_RICindicationMessage)) { type = 7; return true; } + else if(equal(id_RICcallProcessID)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactionID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICindicationSN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICindicationType);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICindicationHeader);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RICindicationMessage);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactionID() { set(reject); type=3;} + void select_id_RICindicationSN() { set(reject); type=4;} + void select_id_RICindicationType() { set(reject); type=5;} + void select_id_RICindicationHeader() { set(reject); type=6;} + void select_id_RICindicationMessage() { set(reject); type=7;} + void select_id_RICcallProcessID() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICactionID& select_id_RICactionID() { return set(3); } + RICactionID const* get_id_RICactionID() const { return get(3); } + RICindicationSN& select_id_RICindicationSN() { return set(4); } + RICindicationSN const* get_id_RICindicationSN() const { return get(4); } + RICindicationType& select_id_RICindicationType() { return set(5); } + RICindicationType const* get_id_RICindicationType() const { return get(5); } + RICindicationHeader& select_id_RICindicationHeader() { return set(6); } + RICindicationHeader const* get_id_RICindicationHeader() const { return get(6); } + RICindicationMessage& select_id_RICindicationMessage() { return set(7); } + RICindicationMessage const* get_id_RICindicationMessage() const { return get(7); } + RICcallProcessID& select_id_RICcallProcessID() { return set(8); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactionID()); return true; + case 4: v(select_id_RICindicationSN()); return true; + case 5: v(select_id_RICindicationType()); return true; + case 6: v(select_id_RICindicationHeader()); return true; + case 7: v(select_id_RICindicationMessage()); return true; + case 8: v(select_id_RICcallProcessID()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICactionID)]; + char dummy3[sizeof(RICcallProcessID)]; + char dummy4[sizeof(RICindicationHeader)]; + char dummy5[sizeof(RICindicationMessage)]; + char dummy6[sizeof(RICindicationSN)]; + char dummy7[sizeof(RICindicationType)]; + char dummy8[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactionID() { set(mandatory); type=3;} + void select_id_RICindicationSN() { set(mandatory); type=4;} + void select_id_RICindicationType() { set(mandatory); type=5;} + void select_id_RICindicationHeader() { set(mandatory); type=6;} + void select_id_RICindicationMessage() { set(mandatory); type=7;} + void select_id_RICcallProcessID() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICindication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICindication-IEs}}, + ... +} +*/ + +struct RICindication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICindication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceQuery-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceQuery_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceQuery ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceQuery-IEs}}, + ... +} +*/ + +struct RICserviceQuery : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceQuery";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdate-IEs X2AP-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}, + ... +} +*/ + +struct RICserviceUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(id_RANfunctionsAdded); type=1;} + void select_id_RANfunctionsModified() { set(id_RANfunctionsModified); type=2;} + void select_id_RANfunctionsDeleted() { set(id_RANfunctionsDeleted); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAdded)) { type = 1; return true; } + else if(equal(id_RANfunctionsModified)) { type = 2; return true; } + else if(equal(id_RANfunctionsDeleted)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAdded);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsModified);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RANfunctionsDeleted);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(reject); type=1;} + void select_id_RANfunctionsModified() { set(reject); type=2;} + void select_id_RANfunctionsDeleted() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctions_List& select_id_RANfunctionsAdded() { return set(1); } + RANfunctions_List const* get_id_RANfunctionsAdded() const { return get(1); } + RANfunctions_List& select_id_RANfunctionsModified() { return set(2); } + RANfunctions_List const* get_id_RANfunctionsModified() const { return get(2); } + RANfunctionsID_List& select_id_RANfunctionsDeleted() { return set(3); } + RANfunctionsID_List const* get_id_RANfunctionsDeleted() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAdded()); return true; + case 2: v(select_id_RANfunctionsModified()); return true; + case 3: v(select_id_RANfunctionsDeleted()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctions_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(optional); type=1;} + void select_id_RANfunctionsModified() { set(optional); type=2;} + void select_id_RANfunctionsDeleted() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdate-IEs}}, + ... +} +*/ + +struct RICserviceUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}| + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else if(equal(id_RANfunctionsRejected)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + void select_id_RANfunctionsRejected() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(2); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: v(select_id_RANfunctionsRejected()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + void select_id_RANfunctionsRejected() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsRejected)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(reject); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(1); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsRejected()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(optional); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateFailure-IEs}}, + ... +} +*/ + +struct RICserviceUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... +} +*/ + +struct RICsubscription : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscription";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricEventTriggerDefinition_t : RICeventTriggerDefinition + { + static constexpr const char* name() {return "ricEventTriggerDefinition_t";} + using parent_t = RICeventTriggerDefinition; + + }; + ricEventTriggerDefinition_t& ref_ricEventTriggerDefinition() {return ricEventTriggerDefinition;} + ricEventTriggerDefinition_t const& ref_ricEventTriggerDefinition() const {return ricEventTriggerDefinition;} + struct ricAction_ToBeSetup_List_t : RICactions_ToBeSetup_List + { + static constexpr const char* name() {return "ricAction_ToBeSetup_List_t";} + using parent_t = RICactions_ToBeSetup_List; + + }; + ricAction_ToBeSetup_List_t& ref_ricAction_ToBeSetup_List() {return ricAction_ToBeSetup_List;} + ricAction_ToBeSetup_List_t const& ref_ricAction_ToBeSetup_List() const {return ricAction_ToBeSetup_List;} + template void decode(V& v) + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + template void encode(V& v) const + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + void clear() + { + ricEventTriggerDefinition.clear(); + ricAction_ToBeSetup_List.clear(); + + }; + private: + ricEventTriggerDefinition_t ricEventTriggerDefinition; + ricAction_ToBeSetup_List_t ricAction_ToBeSetup_List; + +}; +/* +RICsubscriptionDeleteFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcause() { set(id_RICcause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcause() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcause& select_id_RICcause() { return set(3); } + RICcause const* get_id_RICcause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionFailure-IEs X2AP-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}, + ... +} +*/ + +struct RICsubscriptionFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_NotAdmitted() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(3); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_NotAdmitted()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_NotAdmitted() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICsubscription CRITICALITY reject TYPE RICsubscription PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICsubscription() { set(id_RICsubscription); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICsubscription)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICsubscription);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICsubscription() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICsubscription& select_id_RICsubscription() { return set(3); } + RICsubscription const* get_id_RICsubscription() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICsubscription()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + char dummy3[sizeof(RICsubscription)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICsubscription() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionResponse-IEs X2AP-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 }, + ... +} +*/ + +struct RICsubscriptionResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_Admitted() { set(id_RICactions_Admitted); type=3;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_Admitted)) { type = 3; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_Admitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_Admitted() { set(reject); type=3;} + void select_id_RICactions_NotAdmitted() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_Admitted_List& select_id_RICactions_Admitted() { return set(3); } + RICaction_Admitted_List const* get_id_RICactions_Admitted() const { return get(3); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(4); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_Admitted()); return true; + case 4: v(select_id_RICactions_NotAdmitted()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICaction_Admitted_List)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_Admitted() { set(mandatory); type=3;} + void select_id_RICactions_NotAdmitted() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container{{RICsubscriptionResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..f426b97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/E2AP-PDU-Descriptions.hpp @@ -0,0 +1,980 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" +#include "E2AP-PDU-Contents.hpp" +#include "E2AP-Constants.hpp" + +/* +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] +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= { + E2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + E2AP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionRequest& select_id_ricSubscription() { return set(1); } + RICsubscriptionRequest const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteRequest& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteRequest const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdate& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdate const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolRequest& select_id_ricControl() { return set(4); } + RICcontrolRequest const* get_id_ricControl() const { return get(4); } + X2SetupRequest& select_id_x2Setup() { return set(5); } + X2SetupRequest const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetRequest& select_id_reset() { return set(10); } + ResetRequest const* get_id_reset() const { return get(10); } + RICindication& select_id_ricIndication() { return set(11); } + RICindication const* get_id_ricIndication() const { return get(11); } + RICserviceQuery& select_id_ricServiceQuery() { return set(12); } + RICserviceQuery const* get_id_ricServiceQuery() const { return get(12); } + LoadInformation& select_id_loadIndication() { return set(13); } + LoadInformation const* get_id_loadIndication() const { return get(13); } + GNBStatusIndication& select_id_gNBStatusIndication() { return set(14); } + GNBStatusIndication const* get_id_gNBStatusIndication() const { return get(14); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(15); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(15); } + ErrorIndication& select_id_errorIndication() { return set(16); } + ErrorIndication const* get_id_errorIndication() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 11: v(select_id_ricIndication()); return true; + case 12: v(select_id_ricServiceQuery()); return true; + case 13: v(select_id_loadIndication()); return true; + case 14: v(select_id_gNBStatusIndication()); return true; + case 15: v(select_id_resourceStatusReporting()); return true; + case 16: v(select_id_errorIndication()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdate)]; + char dummy2[sizeof(ENDCConfigurationUpdate)]; + char dummy3[sizeof(ENDCX2SetupRequest)]; + char dummy4[sizeof(ErrorIndication)]; + char dummy5[sizeof(GNBStatusIndication)]; + char dummy6[sizeof(LoadInformation)]; + char dummy7[sizeof(RICcontrolRequest)]; + char dummy8[sizeof(RICindication)]; + char dummy9[sizeof(RICserviceQuery)]; + char dummy10[sizeof(RICserviceUpdate)]; + char dummy11[sizeof(RICsubscriptionDeleteRequest)]; + char dummy12[sizeof(RICsubscriptionRequest)]; + char dummy13[sizeof(ResetRequest)]; + char dummy14[sizeof(ResourceStatusRequest)]; + char dummy15[sizeof(ResourceStatusUpdate)]; + char dummy16[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionResponse& select_id_ricSubscription() { return set(1); } + RICsubscriptionResponse const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteResponse& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteResponse const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateAcknowledge& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateAcknowledge const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolAcknowledge& select_id_ricControl() { return set(4); } + RICcontrolAcknowledge const* get_id_ricControl() const { return get(4); } + X2SetupResponse& select_id_x2Setup() { return set(5); } + X2SetupResponse const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetResponse& select_id_reset() { return set(10); } + ResetResponse const* get_id_reset() const { return get(10); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy2[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCX2SetupResponse)]; + char dummy4[sizeof(RICcontrolAcknowledge)]; + char dummy5[sizeof(RICserviceUpdateAcknowledge)]; + char dummy6[sizeof(RICsubscriptionDeleteResponse)]; + char dummy7[sizeof(RICsubscriptionResponse)]; + char dummy8[sizeof(ResetResponse)]; + char dummy9[sizeof(ResourceStatusResponse)]; + char dummy10[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionFailure& select_id_ricSubscription() { return set(1); } + RICsubscriptionFailure const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteFailure& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteFailure const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateFailure& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateFailure const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolFailure& select_id_ricControl() { return set(4); } + RICcontrolFailure const* get_id_ricControl() const { return get(4); } + X2SetupFailure& select_id_x2Setup() { return set(5); } + X2SetupFailure const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(9); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateFailure)]; + char dummy2[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCX2SetupFailure)]; + char dummy4[sizeof(RICcontrolFailure)]; + char dummy5[sizeof(RICserviceUpdateFailure)]; + char dummy6[sizeof(RICsubscriptionDeleteFailure)]; + char dummy7[sizeof(RICsubscriptionFailure)]; + char dummy8[sizeof(ResourceStatusFailure)]; + char dummy9[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(id_ricSubscription); type=1;} + void select_id_ricSubscriptionDelete() { set(id_ricSubscriptionDelete); type=2;} + void select_id_ricServiceUpdate() { set(id_ricServiceUpdate); type=3;} + void select_id_ricControl() { set(id_ricControl); type=4;} + void select_id_x2Setup() { set(id_x2Setup); type=5;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=6;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=7;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=8;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=9;} + void select_id_reset() { set(id_reset); type=10;} + void select_id_ricIndication() { set(id_ricIndication); type=11;} + void select_id_ricServiceQuery() { set(id_ricServiceQuery); type=12;} + void select_id_loadIndication() { set(id_loadIndication); type=13;} + void select_id_gNBStatusIndication() { set(id_gNBStatusIndication); type=14;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=15;} + void select_id_errorIndication() { set(id_errorIndication); type=16;} + E2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ricSubscription)) { type = 1; return true; } + else if(equal(id_ricSubscriptionDelete)) { type = 2; return true; } + else if(equal(id_ricServiceUpdate)) { type = 3; return true; } + else if(equal(id_ricControl)) { type = 4; return true; } + else if(equal(id_x2Setup)) { type = 5; return true; } + else if(equal(id_endcX2Setup)) { type = 6; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 7; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 8; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 9; return true; } + else if(equal(id_reset)) { type = 10; return true; } + else if(equal(id_ricIndication)) { type = 11; return true; } + else if(equal(id_ricServiceQuery)) { type = 12; return true; } + else if(equal(id_loadIndication)) { type = 13; return true; } + else if(equal(id_gNBStatusIndication)) { type = 14; return true; } + else if(equal(id_resourceStatusReporting)) { type = 15; return true; } + else if(equal(id_errorIndication)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ricSubscription);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ricSubscriptionDelete);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ricServiceUpdate);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ricControl);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_reset);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ricIndication);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_ricServiceQuery);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_gNBStatusIndication);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(reject); type=1;} + void select_id_ricSubscriptionDelete() { set(reject); type=2;} + void select_id_ricServiceUpdate() { set(reject); type=3;} + void select_id_ricControl() { set(reject); type=4;} + void select_id_x2Setup() { set(reject); type=5;} + void select_id_endcX2Setup() { set(reject); type=6;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=7;} + void select_id_eNBConfigurationUpdate() { set(reject); type=8;} + void select_id_endcConfigurationUpdate() { set(reject); type=9;} + void select_id_reset() { set(reject); type=10;} + void select_id_ricIndication() { set(ignore); type=11;} + void select_id_ricServiceQuery() { set(ignore); type=12;} + void select_id_loadIndication() { set(ignore); type=13;} + void select_id_gNBStatusIndication() { set(ignore); type=14;} + void select_id_resourceStatusReporting() { set(ignore); type=15;} + void select_id_errorIndication() { set(ignore); type=16;} + E2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(ignore)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(ignore);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +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}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +E2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct E2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "E2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~E2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp new file mode 100644 index 0000000..0e1bb53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-CommonDataTypes.hpp @@ -0,0 +1,188 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + + +/* +Criticality ::= ENUMERATED { reject, ignore, notify } +*/ + +struct Criticality : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Criticality";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + reject + ,ignore + ,notify + } index_t; + +}; + +/* +Presence ::= ENUMERATED { optional, conditional, mandatory } +*/ + +struct Presence : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Presence";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + optional + ,conditional + ,mandatory + } index_t; + +}; + +/* +maxPrivateIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxPrivateIEs = 65535; +/* +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} +*/ + +struct PrivateIE_ID : asn::choice<2, 0, false> +{ + static constexpr const char* name() {return "PrivateIE-ID";} + using parent_t = asn::choice<2, 0, false>; + index_type get_index() const {return index;} + ~PrivateIE_ID() {clear();} + struct local_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "local_t";} + using parent_t = asn::integer<>; + + }; + + struct global_t : asn::oid + { + static constexpr const char* name() {return "global_t";} + using parent_t = asn::oid; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + local_t& select_local() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + local_t const* get_local() const { if(get_index() == 1) { return &var.as();} return nullptr; } + global_t& select_global() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + global_t const* get_global() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(local_t)]; + char dummy2[sizeof(global_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ProcedureCode ::= INTEGER (0..255) +*/ + +struct ProcedureCode : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProcedureCode";} + using parent_t = asn::integer<>; + +}; + +/* +maxProtocolIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolIEs = 65535; +/* +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) +*/ + +struct ProtocolIE_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProtocolIE-ID";} + using parent_t = asn::integer<>; + +}; + +/* +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} +*/ + +struct TriggeringMessage : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "TriggeringMessage";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + initiating_message + ,successful_outcome + ,unsuccessful_outcome + } index_t; + +}; + +/* +maxProtocolExtensions INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolExtensions = 65535; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp new file mode 100644 index 0000000..28be45d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Constants.hpp @@ -0,0 +1,2054 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-ABS-Status ProtocolIE-ID ::= 63 +*/ + +constexpr int64_t id_ABS_Status = 63; +/* +id-ABSInformation ProtocolIE-ID ::= 61 +*/ + +constexpr int64_t id_ABSInformation = 61; +/* +id-ActivatedCellList ProtocolIE-ID ::= 58 +*/ + +constexpr int64_t id_ActivatedCellList = 58; +/* +id-ActivatedNRCellList ProtocolIE-ID ::= 268 +*/ + +constexpr int64_t id_ActivatedNRCellList = 268; +/* +id-ActivationID ProtocolIE-ID ::= 256 +*/ + +constexpr int64_t id_ActivationID = 256; +/* +id-AdditionalSpecialSubframe-Info ProtocolIE-ID ::= 97 +*/ + +constexpr int64_t id_AdditionalSpecialSubframe_Info = 97; +/* +id-AdditionalSpecialSubframeExtension-Info ProtocolIE-ID ::= 179 +*/ + +constexpr int64_t id_AdditionalSpecialSubframeExtension_Info = 179; +/* +id-AdmittedSplitSRBs ProtocolIE-ID ::= 212 +*/ + +constexpr int64_t id_AdmittedSplitSRBs = 212; +/* +id-AdmittedSplitSRBsrelease ProtocolIE-ID ::= 281 +*/ + +constexpr int64_t id_AdmittedSplitSRBsrelease = 281; +/* +id-AerialUEsubscriptionInformation ProtocolIE-ID ::= 277 +*/ + +constexpr int64_t id_AerialUEsubscriptionInformation = 277; +/* +id-BandwidthReducedSI ProtocolIE-ID ::= 180 +*/ + +constexpr int64_t id_BandwidthReducedSI = 180; +/* +id-BearerType ProtocolIE-ID ::= 171 +*/ + +constexpr int64_t id_BearerType = 171; +/* +id-BluetoothMeasurementConfiguration ProtocolIE-ID ::= 303 +*/ + +constexpr int64_t id_BluetoothMeasurementConfiguration = 303; +/* +id-CNTypeRestrictions ProtocolIE-ID ::= 301 +*/ + +constexpr int64_t id_CNTypeRestrictions = 301; +/* +id-CSG-Id ProtocolIE-ID ::= 70 +*/ + +constexpr int64_t id_CSG_Id = 70; +/* +id-CSGMembershipStatus ProtocolIE-ID ::= 71 +*/ + +constexpr int64_t id_CSGMembershipStatus = 71; +/* +id-CSIReportList ProtocolIE-ID ::= 146 +*/ + +constexpr int64_t id_CSIReportList = 146; +/* +id-Cause ProtocolIE-ID ::= 5 +*/ + +constexpr int64_t id_Cause = 5; +/* +id-CellAssistanceInformation ProtocolIE-ID ::= 251 +*/ + +constexpr int64_t id_CellAssistanceInformation = 251; +/* +id-CellInformation ProtocolIE-ID ::= 6 +*/ + +constexpr int64_t id_CellInformation = 6; +/* +id-CellInformation-Item ProtocolIE-ID ::= 7 +*/ + +constexpr int64_t id_CellInformation_Item = 7; +/* +id-CellMeasurementResult ProtocolIE-ID ::= 32 +*/ + +constexpr int64_t id_CellMeasurementResult = 32; +/* +id-CellMeasurementResult-Item ProtocolIE-ID ::= 33 +*/ + +constexpr int64_t id_CellMeasurementResult_Item = 33; +/* +id-CellReportingIndicator ProtocolIE-ID ::= 170 +*/ + +constexpr int64_t id_CellReportingIndicator = 170; +/* +id-CellToReport ProtocolIE-ID ::= 29 +*/ + +constexpr int64_t id_CellToReport = 29; +/* +id-CellToReport-Item ProtocolIE-ID ::= 31 +*/ + +constexpr int64_t id_CellToReport_Item = 31; +/* +id-CoMPInformation ProtocolIE-ID ::= 108 +*/ + +constexpr int64_t id_CoMPInformation = 108; +/* +id-CompleteFailureCauseInformation-Item ProtocolIE-ID ::= 69 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_Item = 69; +/* +id-CompleteFailureCauseInformation-List ProtocolIE-ID ::= 68 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_List = 68; +/* +id-CompositeAvailableCapacityGroup ProtocolIE-ID ::= 42 +*/ + +constexpr int64_t id_CompositeAvailableCapacityGroup = 42; +/* +id-Correlation-ID ProtocolIE-ID ::= 166 +*/ + +constexpr int64_t id_Correlation_ID = 166; +/* +id-CoverageModificationList ProtocolIE-ID ::= 143 +*/ + +constexpr int64_t id_CoverageModificationList = 143; +/* +id-CriticalityDiagnostics ProtocolIE-ID ::= 17 +*/ + +constexpr int64_t id_CriticalityDiagnostics = 17; +/* +id-DL-EARFCNExtension ProtocolIE-ID ::= 96 +*/ + +constexpr int64_t id_DL_EARFCNExtension = 96; +/* +id-DL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 193 +*/ + +constexpr int64_t id_DL_scheduling_PDCCH_CCE_usage = 193; +/* +id-DLCOUNTValueExtended ProtocolIE-ID ::= 93 +*/ + +constexpr int64_t id_DLCOUNTValueExtended = 93; +/* +id-DLCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 152 +*/ + +constexpr int64_t id_DLCOUNTValuePDCP_SNlength18 = 152; +/* +id-DataTrafficResourceIndication ProtocolIE-ID ::= 287 +*/ + +constexpr int64_t id_DataTrafficResourceIndication = 287; +/* +id-DeactivationIndication ProtocolIE-ID ::= 59 +*/ + +constexpr int64_t id_DeactivationIndication = 59; +/* +id-DownlinkPacketLossRate ProtocolIE-ID ::= 273 +*/ + +constexpr int64_t id_DownlinkPacketLossRate = 273; +/* +id-DynamicDLTransmissionInformation ProtocolIE-ID ::= 106 +*/ + +constexpr int64_t id_DynamicDLTransmissionInformation = 106; +/* +id-E-RAB-Item ProtocolIE-ID ::= 2 +*/ + +constexpr int64_t id_E_RAB_Item = 2; +/* +id-E-RABUsageReport-Item ProtocolIE-ID ::= 263 +*/ + +constexpr int64_t id_E_RABUsageReport_Item = 263; +/* +id-E-RABs-Admitted-Item ProtocolIE-ID ::= 0 +*/ + +constexpr int64_t id_E_RABs_Admitted_Item = 0; +/* +id-E-RABs-Admitted-List ProtocolIE-ID ::= 1 +*/ + +constexpr int64_t id_E_RABs_Admitted_List = 1; +/* +id-E-RABs-Admitted-ToBeAdded-Item ProtocolIE-ID ::= 121 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_Item = 121; +/* +id-E-RABs-Admitted-ToBeAdded-List ProtocolIE-ID ::= 120 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_List = 120; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckItem ProtocolIE-ID ::= 131 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckList ProtocolIE-ID ::= 128 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckList = 128; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ProtocolIE-ID ::= 213 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ProtocolIE-ID ::= 210 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ProtocolIE-ID ::= 222 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAckList ProtocolIE-ID ::= 219 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219; +/* +id-E-RABs-Admitted-ToBeModified-ModAckItem ProtocolIE-ID ::= 132 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckItem = 132; +/* +id-E-RABs-Admitted-ToBeModified-ModAckList ProtocolIE-ID ::= 129 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckList = 129; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item ProtocolIE-ID ::= 223 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAckList ProtocolIE-ID ::= 220 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckItem ProtocolIE-ID ::= 133 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckList ProtocolIE-ID ::= 130 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckList = 130; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item ProtocolIE-ID ::= 224 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAckList ProtocolIE-ID ::= 221 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ProtocolIE-ID ::= 319 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ProtocolIE-ID ::= 318 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConf-Item ProtocolIE-ID ::= 295 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConfList ProtocolIE-ID ::= 294 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294; +/* +id-E-RABs-DataForwardingAddress-Item ProtocolIE-ID ::= 308 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_Item = 308; +/* +id-E-RABs-DataForwardingAddress-List ProtocolIE-ID ::= 307 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_List = 307; +/* +id-E-RABs-NotAdmitted-List ProtocolIE-ID ::= 3 +*/ + +constexpr int64_t id_E_RABs_NotAdmitted_List = 3; +/* +id-E-RABs-SubjectToCounterCheck-List ProtocolIE-ID ::= 141 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheck_List = 141; +/* +id-E-RABs-SubjectToCounterCheckItem ProtocolIE-ID ::= 142 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheckItem = 142; +/* +id-E-RABs-SubjectToSgNBCounterCheck-Item ProtocolIE-ID ::= 236 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_Item = 236; +/* +id-E-RABs-SubjectToSgNBCounterCheck-List ProtocolIE-ID ::= 235 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_List = 235; +/* +id-E-RABs-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 19 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_Item = 19; +/* +id-E-RABs-SubjectToStatusTransfer-List ProtocolIE-ID ::= 18 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_List = 18; +/* +id-E-RABs-ToBeAdded-Item ProtocolIE-ID ::= 118 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_Item = 118; +/* +id-E-RABs-ToBeAdded-List ProtocolIE-ID ::= 117 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_List = 117; +/* +id-E-RABs-ToBeAdded-ModReqItem ProtocolIE-ID ::= 125 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_ModReqItem = 125; +/* +id-E-RABs-ToBeAdded-SgNBAddReq-Item ProtocolIE-ID ::= 209 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209; +/* +id-E-RABs-ToBeAdded-SgNBAddReqList ProtocolIE-ID ::= 205 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReqList = 205; +/* +id-E-RABs-ToBeAdded-SgNBModReq-Item ProtocolIE-ID ::= 216 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBModReq_Item = 216; +/* +id-E-RABs-ToBeModified-ModReqItem ProtocolIE-ID ::= 126 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_ModReqItem = 126; +/* +id-E-RABs-ToBeModified-SgNBModReq-Item ProtocolIE-ID ::= 217 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReq_Item = 217; +/* +id-E-RABs-ToBeModified-SgNBModReqd-Item ProtocolIE-ID ::= 228 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqd_Item = 228; +/* +id-E-RABs-ToBeModified-SgNBModReqdList ProtocolIE-ID ::= 226 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqdList = 226; +/* +id-E-RABs-ToBeReleased-List-RelConf ProtocolIE-ID ::= 139 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelConf = 139; +/* +id-E-RABs-ToBeReleased-List-RelReq ProtocolIE-ID ::= 137 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelReq = 137; +/* +id-E-RABs-ToBeReleased-ModReqItem ProtocolIE-ID ::= 127 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqItem = 127; +/* +id-E-RABs-ToBeReleased-ModReqd ProtocolIE-ID ::= 134 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqd = 134; +/* +id-E-RABs-ToBeReleased-ModReqdItem ProtocolIE-ID ::= 135 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqdItem = 135; +/* +id-E-RABs-ToBeReleased-RelConfItem ProtocolIE-ID ::= 140 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelConfItem = 140; +/* +id-E-RABs-ToBeReleased-RelReqItem ProtocolIE-ID ::= 138 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelReqItem = 138; +/* +id-E-RABs-ToBeReleased-SgNBChaConf-Item ProtocolIE-ID ::= 230 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230; +/* +id-E-RABs-ToBeReleased-SgNBChaConfList ProtocolIE-ID ::= 229 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConfList = 229; +/* +id-E-RABs-ToBeReleased-SgNBModReq-Item ProtocolIE-ID ::= 218 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReq_Item = 218; +/* +id-E-RABs-ToBeReleased-SgNBModReqd-Item ProtocolIE-ID ::= 227 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227; +/* +id-E-RABs-ToBeReleased-SgNBModReqdList ProtocolIE-ID ::= 225 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqdList = 225; +/* +id-E-RABs-ToBeReleased-SgNBRelConf-Item ProtocolIE-ID ::= 234 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234; +/* +id-E-RABs-ToBeReleased-SgNBRelConfList ProtocolIE-ID ::= 233 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConfList = 233; +/* +id-E-RABs-ToBeReleased-SgNBRelReq-Item ProtocolIE-ID ::= 232 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232; +/* +id-E-RABs-ToBeReleased-SgNBRelReqList ProtocolIE-ID ::= 231 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqList = 231; +/* +id-E-RABs-ToBeReleased-SgNBRelReqd-Item ProtocolIE-ID ::= 321 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321; +/* +id-E-RABs-ToBeReleased-SgNBRelReqdList ProtocolIE-ID ::= 320 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqdList = 320; +/* +id-E-RABs-ToBeSetup-Item ProtocolIE-ID ::= 4 +*/ + +constexpr int64_t id_E_RABs_ToBeSetup_Item = 4; +/* +id-E-RABs-ToBeSetupRetrieve-Item ProtocolIE-ID ::= 174 +*/ + +constexpr int64_t id_E_RABs_ToBeSetupRetrieve_Item = 174; +/* +id-ECGI ProtocolIE-ID ::= 316 +*/ + +constexpr int64_t id_ECGI = 316; +/* +id-ENB1-Cell-ID ProtocolIE-ID ::= 43 +*/ + +constexpr int64_t id_ENB1_Cell_ID = 43; +/* +id-ENB1-Measurement-ID ProtocolIE-ID ::= 39 +*/ + +constexpr int64_t id_ENB1_Measurement_ID = 39; +/* +id-ENB1-Mobility-Parameters ProtocolIE-ID ::= 46 +*/ + +constexpr int64_t id_ENB1_Mobility_Parameters = 46; +/* +id-ENB2-Cell-ID ProtocolIE-ID ::= 44 +*/ + +constexpr int64_t id_ENB2_Cell_ID = 44; +/* +id-ENB2-Measurement-ID ProtocolIE-ID ::= 40 +*/ + +constexpr int64_t id_ENB2_Measurement_ID = 40; +/* +id-ENB2-Mobility-Parameters-Modification-Range ProtocolIE-ID ::= 47 +*/ + +constexpr int64_t id_ENB2_Mobility_Parameters_Modification_Range = 47; +/* +id-ENB2-Proposed-Mobility-Parameters ProtocolIE-ID ::= 45 +*/ + +constexpr int64_t id_ENB2_Proposed_Mobility_Parameters = 45; +/* +id-ERABActivityNotifyItemList ProtocolIE-ID ::= 297 +*/ + +constexpr int64_t id_ERABActivityNotifyItemList = 297; +/* +id-ExpectedUEBehaviour ProtocolIE-ID ::= 104 +*/ + +constexpr int64_t id_ExpectedUEBehaviour = 104; +/* +id-ExtendedULInterferenceOverloadInfo ProtocolIE-ID ::= 100 +*/ + +constexpr int64_t id_ExtendedULInterferenceOverloadInfo = 100; +/* +id-FailureCellCRNTI ProtocolIE-ID ::= 50 +*/ + +constexpr int64_t id_FailureCellCRNTI = 50; +/* +id-FailureCellECGI ProtocolIE-ID ::= 53 +*/ + +constexpr int64_t id_FailureCellECGI = 53; +/* +id-FailureCellPCI ProtocolIE-ID ::= 48 +*/ + +constexpr int64_t id_FailureCellPCI = 48; +/* +id-FreqBandIndicatorPriority ProtocolIE-ID ::= 160 +*/ + +constexpr int64_t id_FreqBandIndicatorPriority = 160; +/* +id-GNBOverloadInformation ProtocolIE-ID ::= 310 +*/ + +constexpr int64_t id_GNBOverloadInformation = 310; +/* +id-GUGroupIDList ProtocolIE-ID ::= 24 +*/ + +constexpr int64_t id_GUGroupIDList = 24; +/* +id-GUGroupIDToAddList ProtocolIE-ID ::= 34 +*/ + +constexpr int64_t id_GUGroupIDToAddList = 34; +/* +id-GUGroupIDToDeleteList ProtocolIE-ID ::= 35 +*/ + +constexpr int64_t id_GUGroupIDToDeleteList = 35; +/* +id-GUMMEI-ID ProtocolIE-ID ::= 23 +*/ + +constexpr int64_t id_GUMMEI_ID = 23; +/* +id-GW-TransportLayerAddress ProtocolIE-ID ::= 165 +*/ + +constexpr int64_t id_GW_TransportLayerAddress = 165; +/* +id-GlobalENB-ID ProtocolIE-ID ::= 21 +*/ + +constexpr int64_t id_GlobalENB_ID = 21; +/* +id-Globalen-gNB-ID ProtocolIE-ID ::= 252 +*/ + +constexpr int64_t id_Globalen_gNB_ID = 252; +/* +id-HO-cause ProtocolIE-ID ::= 80 +*/ + +constexpr int64_t id_HO_cause = 80; +/* +id-HandoverReportType ProtocolIE-ID ::= 54 +*/ + +constexpr int64_t id_HandoverReportType = 54; +/* +id-HandoverRestrictionList ProtocolIE-ID ::= 240 +*/ + +constexpr int64_t id_HandoverRestrictionList = 240; +/* +id-InitiatingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 245 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcConfigUpdate = 245; +/* +id-InitiatingNodeType-EndcX2Removal ProtocolIE-ID ::= 298 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Removal = 298; +/* +id-InitiatingNodeType-EndcX2Setup ProtocolIE-ID ::= 244 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Setup = 244; +/* +id-InitiatingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 285 +*/ + +constexpr int64_t id_InitiatingNodeType_EutranrCellResourceCoordination = 285; +/* +id-IntendedULDLConfiguration ProtocolIE-ID ::= 99 +*/ + +constexpr int64_t id_IntendedULDLConfiguration = 99; +/* +id-InvokeIndication ProtocolIE-ID ::= 62 +*/ + +constexpr int64_t id_InvokeIndication = 62; +/* +id-LHN-ID ProtocolIE-ID ::= 159 +*/ + +constexpr int64_t id_LHN_ID = 159; +/* +id-ListofEUTRACellsinEUTRACoordinationReq ProtocolIE-ID ::= 289 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationReq = 289; +/* +id-ListofEUTRACellsinEUTRACoordinationResp ProtocolIE-ID ::= 290 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationResp = 290; +/* +id-ListofEUTRACellsinNRCoordinationReq ProtocolIE-ID ::= 291 +*/ + +constexpr int64_t id_ListofEUTRACellsinNRCoordinationReq = 291; +/* +id-ListofNRCellsinNRCoordinationReq ProtocolIE-ID ::= 292 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationReq = 292; +/* +id-ListofNRCellsinNRCoordinationResp ProtocolIE-ID ::= 293 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationResp = 293; +/* +id-M3Configuration ProtocolIE-ID ::= 85 +*/ + +constexpr int64_t id_M3Configuration = 85; +/* +id-M4Configuration ProtocolIE-ID ::= 86 +*/ + +constexpr int64_t id_M4Configuration = 86; +/* +id-M5Configuration ProtocolIE-ID ::= 87 +*/ + +constexpr int64_t id_M5Configuration = 87; +/* +id-M6Configuration ProtocolIE-ID ::= 161 +*/ + +constexpr int64_t id_M6Configuration = 161; +/* +id-M7Configuration ProtocolIE-ID ::= 162 +*/ + +constexpr int64_t id_M7Configuration = 162; +/* +id-MBMS-Service-Area-List ProtocolIE-ID ::= 79 +*/ + +constexpr int64_t id_MBMS_Service_Area_List = 79; +/* +id-MBSFN-Subframe-Info ProtocolIE-ID ::= 56 +*/ + +constexpr int64_t id_MBSFN_Subframe_Info = 56; +/* +id-MDT-Location-Info ProtocolIE-ID ::= 88 +*/ + +constexpr int64_t id_MDT_Location_Info = 88; +/* +id-MDTConfiguration ProtocolIE-ID ::= 72 +*/ + +constexpr int64_t id_MDTConfiguration = 72; +/* +id-MakeBeforeBreakIndicator ProtocolIE-ID ::= 181 +*/ + +constexpr int64_t id_MakeBeforeBreakIndicator = 181; +/* +id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 89 +*/ + +constexpr int64_t id_ManagementBasedMDTPLMNList = 89; +/* +id-ManagementBasedMDTallowed ProtocolIE-ID ::= 74 +*/ + +constexpr int64_t id_ManagementBasedMDTallowed = 74; +/* +id-Masked-IMEISV ProtocolIE-ID ::= 98 +*/ + +constexpr int64_t id_Masked_IMEISV = 98; +/* +id-MeNB-UE-X2AP-ID ProtocolIE-ID ::= 111 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID = 111; +/* +id-MeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 157 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID_Extension = 157; +/* +id-MeNBCell-ID ProtocolIE-ID ::= 279 +*/ + +constexpr int64_t id_MeNBCell_ID = 279; +/* +id-MeNBCoordinationAssistanceInformation ProtocolIE-ID ::= 323 +*/ + +constexpr int64_t id_MeNBCoordinationAssistanceInformation = 323; +/* +id-MeNBResourceCoordinationInformation ProtocolIE-ID ::= 257 +*/ + +constexpr int64_t id_MeNBResourceCoordinationInformation = 257; +/* +id-MeNBtoSeNBContainer ProtocolIE-ID ::= 119 +*/ + +constexpr int64_t id_MeNBtoSeNBContainer = 119; +/* +id-MeNBtoSgNBContainer ProtocolIE-ID ::= 206 +*/ + +constexpr int64_t id_MeNBtoSgNBContainer = 206; +/* +id-Measurement-ID ProtocolIE-ID ::= 37 +*/ + +constexpr int64_t id_Measurement_ID = 37; +/* +id-MeasurementFailureCause-Item ProtocolIE-ID ::= 67 +*/ + +constexpr int64_t id_MeasurementFailureCause_Item = 67; +/* +id-MeasurementInitiationResult-Item ProtocolIE-ID ::= 66 +*/ + +constexpr int64_t id_MeasurementInitiationResult_Item = 66; +/* +id-MeasurementInitiationResult-List ProtocolIE-ID ::= 65 +*/ + +constexpr int64_t id_MeasurementInitiationResult_List = 65; +/* +id-MobilityInformation ProtocolIE-ID ::= 82 +*/ + +constexpr int64_t id_MobilityInformation = 82; +/* +id-MultibandInfoList ProtocolIE-ID ::= 84 +*/ + +constexpr int64_t id_MultibandInfoList = 84; +/* +id-NRCGI ProtocolIE-ID ::= 322 +*/ + +constexpr int64_t id_NRCGI = 322; +/* +id-NRS-NSSS-PowerOffset ProtocolIE-ID ::= 282 +*/ + +constexpr int64_t id_NRS_NSSS_PowerOffset = 282; +/* +id-NRUESecurityCapabilities ProtocolIE-ID ::= 248 +*/ + +constexpr int64_t id_NRUESecurityCapabilities = 248; +/* +id-NRrestrictionin5GS ProtocolIE-ID ::= 305 +*/ + +constexpr int64_t id_NRrestrictionin5GS = 305; +/* +id-NRrestrictioninEPSasSecondaryRAT ProtocolIE-ID ::= 202 +*/ + +constexpr int64_t id_NRrestrictioninEPSasSecondaryRAT = 202; +/* +id-NSSS-NumOccasionDifferentPrecoder ProtocolIE-ID ::= 283 +*/ + +constexpr int64_t id_NSSS_NumOccasionDifferentPrecoder = 283; +/* +id-NeighbourTAC ProtocolIE-ID ::= 76 +*/ + +constexpr int64_t id_NeighbourTAC = 76; +/* +id-New-eNB-UE-X2AP-ID ProtocolIE-ID ::= 9 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID = 9; +/* +id-New-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 155 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID_Extension = 155; +/* +id-NewEUTRANCellIdentifier ProtocolIE-ID ::= 175 +*/ + +constexpr int64_t id_NewEUTRANCellIdentifier = 175; +/* +id-Number-of-Antennaports ProtocolIE-ID ::= 41 +*/ + +constexpr int64_t id_Number_of_Antennaports = 41; +/* +id-OffsetOfNbiotChannelNumberToDL-EARFCN ProtocolIE-ID ::= 177 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177; +/* +id-OffsetOfNbiotChannelNumberToUL-EARFCN ProtocolIE-ID ::= 178 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178; +/* +id-Old-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 264 +*/ + +constexpr int64_t id_Old_SgNB_UE_X2AP_ID = 264; +/* +id-Old-eNB-UE-X2AP-ID ProtocolIE-ID ::= 10 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID = 10; +/* +id-Old-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 156 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID_Extension = 156; +/* +id-PDCPChangeIndication ProtocolIE-ID ::= 249 +*/ + +constexpr int64_t id_PDCPChangeIndication = 249; +/* +id-PRACH-Configuration ProtocolIE-ID ::= 55 +*/ + +constexpr int64_t id_PRACH_Configuration = 55; +/* +id-PartialSuccessIndicator ProtocolIE-ID ::= 64 +*/ + +constexpr int64_t id_PartialSuccessIndicator = 64; +/* +id-ProSeAuthorized ProtocolIE-ID ::= 103 +*/ + +constexpr int64_t id_ProSeAuthorized = 103; +/* +id-ProSeUEtoNetworkRelaying ProtocolIE-ID ::= 149 +*/ + +constexpr int64_t id_ProSeUEtoNetworkRelaying = 149; +/* +id-ProtectedEUTRAResourceIndication ProtocolIE-ID ::= 284 +*/ + +constexpr int64_t id_ProtectedEUTRAResourceIndication = 284; +/* +id-RLC-Status ProtocolIE-ID ::= 300 +*/ + +constexpr int64_t id_RLC_Status = 300; +/* +id-RLCMode-transferred ProtocolIE-ID ::= 317 +*/ + +constexpr int64_t id_RLCMode_transferred = 317; +/* +id-RNL-Header ProtocolIE-ID ::= 101 +*/ + +constexpr int64_t id_RNL_Header = 101; +/* +id-RRCConfigIndication ProtocolIE-ID ::= 272 +*/ + +constexpr int64_t id_RRCConfigIndication = 272; +/* +id-RRCConnReestabIndicator ProtocolIE-ID ::= 78 +*/ + +constexpr int64_t id_RRCConnReestabIndicator = 78; +/* +id-RRCConnSetupIndicator ProtocolIE-ID ::= 75 +*/ + +constexpr int64_t id_RRCConnSetupIndicator = 75; +/* +id-RRCContainer ProtocolIE-ID ::= 237 +*/ + +constexpr int64_t id_RRCContainer = 237; +/* +id-RSRPMRList ProtocolIE-ID ::= 110 +*/ + +constexpr int64_t id_RSRPMRList = 110; +/* +id-Re-establishmentCellECGI ProtocolIE-ID ::= 49 +*/ + +constexpr int64_t id_Re_establishmentCellECGI = 49; +/* +id-ReceiveStatusOfULPDCPSDUsExtended ProtocolIE-ID ::= 91 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsExtended = 91; +/* +id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ProtocolIE-ID ::= 150 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150; +/* +id-Registration-Request ProtocolIE-ID ::= 28 +*/ + +constexpr int64_t id_Registration_Request = 28; +/* +id-ReportCharacteristics ProtocolIE-ID ::= 38 +*/ + +constexpr int64_t id_ReportCharacteristics = 38; +/* +id-ReportingPeriodicity ProtocolIE-ID ::= 30 +*/ + +constexpr int64_t id_ReportingPeriodicity = 30; +/* +id-ReportingPeriodicityCSIR ProtocolIE-ID ::= 145 +*/ + +constexpr int64_t id_ReportingPeriodicityCSIR = 145; +/* +id-ReportingPeriodicityRSRPMR ProtocolIE-ID ::= 109 +*/ + +constexpr int64_t id_ReportingPeriodicityRSRPMR = 109; +/* +id-RequestedSplitSRBs ProtocolIE-ID ::= 208 +*/ + +constexpr int64_t id_RequestedSplitSRBs = 208; +/* +id-RequestedSplitSRBsrelease ProtocolIE-ID ::= 280 +*/ + +constexpr int64_t id_RequestedSplitSRBsrelease = 280; +/* +id-RespondingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 247 +*/ + +constexpr int64_t id_RespondingNodeType_EndcConfigUpdate = 247; +/* +id-RespondingNodeType-EndcX2Removal ProtocolIE-ID ::= 299 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Removal = 299; +/* +id-RespondingNodeType-EndcX2Setup ProtocolIE-ID ::= 246 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Setup = 246; +/* +id-RespondingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 286 +*/ + +constexpr int64_t id_RespondingNodeType_EutranrCellResourceCoordination = 286; +/* +id-ResponseInformationSeNBReconfComp ProtocolIE-ID ::= 123 +*/ + +constexpr int64_t id_ResponseInformationSeNBReconfComp = 123; +/* +id-ResponseInformationSgNBReconfComp ProtocolIE-ID ::= 214 +*/ + +constexpr int64_t id_ResponseInformationSgNBReconfComp = 214; +/* +id-SCGChangeIndication ProtocolIE-ID ::= 136 +*/ + +constexpr int64_t id_SCGChangeIndication = 136; +/* +id-SCGConfigurationQuery ProtocolIE-ID ::= 241 +*/ + +constexpr int64_t id_SCGConfigurationQuery = 241; +/* +id-SGNB-Addition-Trigger-Ind ProtocolIE-ID ::= 278 +*/ + +constexpr int64_t id_SGNB_Addition_Trigger_Ind = 278; +/* +id-SIPTO-BearerDeactivationIndication ProtocolIE-ID ::= 164 +*/ + +constexpr int64_t id_SIPTO_BearerDeactivationIndication = 164; +/* +id-SIPTO-Correlation-ID ProtocolIE-ID ::= 167 +*/ + +constexpr int64_t id_SIPTO_Correlation_ID = 167; +/* +id-SIPTO-L-GW-TransportLayerAddress ProtocolIE-ID ::= 168 +*/ + +constexpr int64_t id_SIPTO_L_GW_TransportLayerAddress = 168; +/* +id-SRBType ProtocolIE-ID ::= 238 +*/ + +constexpr int64_t id_SRBType = 238; +/* +id-SRVCCOperationPossible ProtocolIE-ID ::= 36 +*/ + +constexpr int64_t id_SRVCCOperationPossible = 36; +/* +id-SeNB-UE-X2AP-ID ProtocolIE-ID ::= 112 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID = 112; +/* +id-SeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 158 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID_Extension = 158; +/* +id-SeNBSecurityKey ProtocolIE-ID ::= 114 +*/ + +constexpr int64_t id_SeNBSecurityKey = 114; +/* +id-SeNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 115 +*/ + +constexpr int64_t id_SeNBUEAggregateMaximumBitRate = 115; +/* +id-SeNBtoMeNBContainer ProtocolIE-ID ::= 122 +*/ + +constexpr int64_t id_SeNBtoMeNBContainer = 122; +/* +id-SecondaryRATUsageReport ProtocolIE-ID ::= 255 +*/ + +constexpr int64_t id_SecondaryRATUsageReport = 255; +/* +id-SecondaryRATUsageReport-Item ProtocolIE-ID ::= 266 +*/ + +constexpr int64_t id_SecondaryRATUsageReport_Item = 266; +/* +id-SecondaryRATUsageReportList ProtocolIE-ID ::= 265 +*/ + +constexpr int64_t id_SecondaryRATUsageReportList = 265; +/* +id-SelectedPLMN ProtocolIE-ID ::= 269 +*/ + +constexpr int64_t id_SelectedPLMN = 269; +/* +id-ServedCells ProtocolIE-ID ::= 20 +*/ + +constexpr int64_t id_ServedCells = 20; +/* +id-ServedCellsToActivate ProtocolIE-ID ::= 57 +*/ + +constexpr int64_t id_ServedCellsToActivate = 57; +/* +id-ServedCellsToAdd ProtocolIE-ID ::= 25 +*/ + +constexpr int64_t id_ServedCellsToAdd = 25; +/* +id-ServedCellsToDelete ProtocolIE-ID ::= 27 +*/ + +constexpr int64_t id_ServedCellsToDelete = 27; +/* +id-ServedCellsToModify ProtocolIE-ID ::= 26 +*/ + +constexpr int64_t id_ServedCellsToModify = 26; +/* +id-ServedEUTRAcellsENDCX2ManagementList ProtocolIE-ID ::= 250 +*/ + +constexpr int64_t id_ServedEUTRAcellsENDCX2ManagementList = 250; +/* +id-ServedEUTRAcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 260 +*/ + +constexpr int64_t id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260; +/* +id-ServedEUTRAcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 259 +*/ + +constexpr int64_t id_ServedEUTRAcellsToModifyListENDCConfUpd = 259; +/* +id-ServedNRCellsToActivate ProtocolIE-ID ::= 267 +*/ + +constexpr int64_t id_ServedNRCellsToActivate = 267; +/* +id-ServedNRcellsENDCX2ManagementList ProtocolIE-ID ::= 253 +*/ + +constexpr int64_t id_ServedNRcellsENDCX2ManagementList = 253; +/* +id-ServedNRcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 262 +*/ + +constexpr int64_t id_ServedNRcellsToDeleteListENDCConfUpd = 262; +/* +id-ServedNRcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 261 +*/ + +constexpr int64_t id_ServedNRcellsToModifyListENDCConfUpd = 261; +/* +id-ServingPLMN ProtocolIE-ID ::= 116 +*/ + +constexpr int64_t id_ServingPLMN = 116; +/* +id-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 207 +*/ + +constexpr int64_t id_SgNB_UE_X2AP_ID = 207; +/* +id-SgNBActivityNotification ProcedureCode ::= 42 +*/ + +constexpr int64_t id_SgNBActivityNotification = 42; +/* +id-SgNBCoordinationAssistanceInformation ProtocolIE-ID ::= 324 +*/ + +constexpr int64_t id_SgNBCoordinationAssistanceInformation = 324; +/* +id-SgNBResourceCoordinationInformation ProtocolIE-ID ::= 258 +*/ + +constexpr int64_t id_SgNBResourceCoordinationInformation = 258; +/* +id-SgNBSecurityKey ProtocolIE-ID ::= 203 +*/ + +constexpr int64_t id_SgNBSecurityKey = 203; +/* +id-SgNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 204 +*/ + +constexpr int64_t id_SgNBUEAggregateMaximumBitRate = 204; +/* +id-SgNBtoMeNBContainer ProtocolIE-ID ::= 211 +*/ + +constexpr int64_t id_SgNBtoMeNBContainer = 211; +/* +id-ShortMAC-I ProtocolIE-ID ::= 51 +*/ + +constexpr int64_t id_ShortMAC_I = 51; +/* +id-SignallingBasedMDTPLMNList ProtocolIE-ID ::= 90 +*/ + +constexpr int64_t id_SignallingBasedMDTPLMNList = 90; +/* +id-SourceCellCRNTI ProtocolIE-ID ::= 83 +*/ + +constexpr int64_t id_SourceCellCRNTI = 83; +/* +id-SourceCellECGI ProtocolIE-ID ::= 52 +*/ + +constexpr int64_t id_SourceCellECGI = 52; +/* +id-SpectrumSharingGroupID ProtocolIE-ID ::= 288 +*/ + +constexpr int64_t id_SpectrumSharingGroupID = 288; +/* +id-SplitSRB ProtocolIE-ID ::= 242 +*/ + +constexpr int64_t id_SplitSRB = 242; +/* +id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 275 +*/ + +constexpr int64_t id_SubscriberProfileIDforRFP = 275; +/* +id-Subscription-Based-UE-DifferentiationInfo ProtocolIE-ID ::= 309 +*/ + +constexpr int64_t id_Subscription_Based_UE_DifferentiationInfo = 309; +/* +id-Target-SgNB-ID ProtocolIE-ID ::= 239 +*/ + +constexpr int64_t id_Target_SgNB_ID = 239; +/* +id-TargetCell-ID ProtocolIE-ID ::= 11 +*/ + +constexpr int64_t id_TargetCell_ID = 11; +/* +id-TargetCellInUTRAN ProtocolIE-ID ::= 81 +*/ + +constexpr int64_t id_TargetCellInUTRAN = 81; +/* +id-TargeteNBtoSource-eNBTransparentContainer ProtocolIE-ID ::= 12 +*/ + +constexpr int64_t id_TargeteNBtoSource_eNBTransparentContainer = 12; +/* +id-Time-UE-StayedInCell-EnhancedGranularity ProtocolIE-ID ::= 77 +*/ + +constexpr int64_t id_Time_UE_StayedInCell_EnhancedGranularity = 77; +/* +id-TimeToWait ProtocolIE-ID ::= 22 +*/ + +constexpr int64_t id_TimeToWait = 22; +/* +id-TraceActivation ProtocolIE-ID ::= 13 +*/ + +constexpr int64_t id_TraceActivation = 13; +/* +id-Tunnel-Information-for-BBF ProtocolIE-ID ::= 163 +*/ + +constexpr int64_t id_Tunnel_Information_for_BBF = 163; +/* +id-UE-ContextInformation ProtocolIE-ID ::= 14 +*/ + +constexpr int64_t id_UE_ContextInformation = 14; +/* +id-UE-ContextInformation-SgNBModReq ProtocolIE-ID ::= 215 +*/ + +constexpr int64_t id_UE_ContextInformation_SgNBModReq = 215; +/* +id-UE-ContextInformationRetrieve ProtocolIE-ID ::= 173 +*/ + +constexpr int64_t id_UE_ContextInformationRetrieve = 173; +/* +id-UE-ContextInformationSeNBModReq ProtocolIE-ID ::= 124 +*/ + +constexpr int64_t id_UE_ContextInformationSeNBModReq = 124; +/* +id-UE-ContextKeptIndicator ProtocolIE-ID ::= 154 +*/ + +constexpr int64_t id_UE_ContextKeptIndicator = 154; +/* +id-UE-ContextReferenceAtSeNB ProtocolIE-ID ::= 153 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSeNB = 153; +/* +id-UE-ContextReferenceAtSgNB ProtocolIE-ID ::= 254 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSgNB = 254; +/* +id-UE-ContextReferenceAtWT ProtocolIE-ID ::= 182 +*/ + +constexpr int64_t id_UE_ContextReferenceAtWT = 182; +/* +id-UE-HistoryInformation ProtocolIE-ID ::= 15 +*/ + +constexpr int64_t id_UE_HistoryInformation = 15; +/* +id-UE-HistoryInformationFromTheUE ProtocolIE-ID ::= 105 +*/ + +constexpr int64_t id_UE_HistoryInformationFromTheUE = 105; +/* +id-UE-RLF-Report-Container ProtocolIE-ID ::= 60 +*/ + +constexpr int64_t id_UE_RLF_Report_Container = 60; +/* +id-UE-RLF-Report-Container-for-extended-bands ProtocolIE-ID ::= 107 +*/ + +constexpr int64_t id_UE_RLF_Report_Container_for_extended_bands = 107; +/* +id-UE-SecurityCapabilities ProtocolIE-ID ::= 113 +*/ + +constexpr int64_t id_UE_SecurityCapabilities = 113; +/* +id-UE-X2AP-ID ProtocolIE-ID ::= 16 +*/ + +constexpr int64_t id_UE_X2AP_ID = 16; +/* +id-UEAppLayerMeasConfig ProtocolIE-ID ::= 195 +*/ + +constexpr int64_t id_UEAppLayerMeasConfig = 195; +/* +id-UEContextLevelUserPlaneActivity ProtocolIE-ID ::= 296 +*/ + +constexpr int64_t id_UEContextLevelUserPlaneActivity = 296; +/* +id-UEID ProtocolIE-ID ::= 147 +*/ + +constexpr int64_t id_UEID = 147; +/* +id-UENRMeasurement ProtocolIE-ID ::= 243 +*/ + +constexpr int64_t id_UENRMeasurement = 243; +/* +id-UESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 184 +*/ + +constexpr int64_t id_UESidelinkAggregateMaximumBitRate = 184; +/* +id-UEs-Admitted-ToBeReset ProtocolIE-ID ::= 271 +*/ + +constexpr int64_t id_UEs_Admitted_ToBeReset = 271; +/* +id-UEs-ToBeReset ProtocolIE-ID ::= 270 +*/ + +constexpr int64_t id_UEs_ToBeReset = 270; +/* +id-UL-EARFCNExtension ProtocolIE-ID ::= 95 +*/ + +constexpr int64_t id_UL_EARFCNExtension = 95; +/* +id-UL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 194 +*/ + +constexpr int64_t id_UL_scheduling_PDCCH_CCE_usage = 194; +/* +id-ULCOUNTValueExtended ProtocolIE-ID ::= 92 +*/ + +constexpr int64_t id_ULCOUNTValueExtended = 92; +/* +id-ULCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 151 +*/ + +constexpr int64_t id_ULCOUNTValuePDCP_SNlength18 = 151; +/* +id-UplinkPacketLossRate ProtocolIE-ID ::= 274 +*/ + +constexpr int64_t id_UplinkPacketLossRate = 274; +/* +id-V2XServicesAuthorized ProtocolIE-ID ::= 176 +*/ + +constexpr int64_t id_V2XServicesAuthorized = 176; +/* +id-WLANMeasurementConfiguration ProtocolIE-ID ::= 304 +*/ + +constexpr int64_t id_WLANMeasurementConfiguration = 304; +/* +id-WT-UE-ContextKeptIndicator ProtocolIE-ID ::= 183 +*/ + +constexpr int64_t id_WT_UE_ContextKeptIndicator = 183; +/* +id-X2RemovalThreshold ProtocolIE-ID ::= 169 +*/ + +constexpr int64_t id_X2RemovalThreshold = 169; +/* +id-cellActivation ProcedureCode ::= 15 +*/ + +constexpr int64_t id_cellActivation = 15; +/* +id-dL-Forwarding ProtocolIE-ID ::= 306 +*/ + +constexpr int64_t id_dL_Forwarding = 306; +/* +id-dLPDCPSnLength ProtocolIE-ID ::= 311 +*/ + +constexpr int64_t id_dLPDCPSnLength = 311; +/* +id-dataForwardingAddressIndication ProcedureCode ::= 44 +*/ + +constexpr int64_t id_dataForwardingAddressIndication = 44; +/* +id-duplicationActivation ProtocolIE-ID ::= 315 +*/ + +constexpr int64_t id_duplicationActivation = 315; +/* +id-eARFCNExtension ProtocolIE-ID ::= 94 +*/ + +constexpr int64_t id_eARFCNExtension = 94; +/* +id-eNBConfigurationUpdate ProcedureCode ::= 8 +*/ + +constexpr int64_t id_eNBConfigurationUpdate = 8; +/* +id-eUTRANRCellResourceCoordination ProcedureCode ::= 41 +*/ + +constexpr int64_t id_eUTRANRCellResourceCoordination = 41; +/* +id-endcCellActivation ProcedureCode ::= 39 +*/ + +constexpr int64_t id_endcCellActivation = 39; +/* +id-endcConfigurationUpdate ProcedureCode ::= 37 +*/ + +constexpr int64_t id_endcConfigurationUpdate = 37; +/* +id-endcPartialReset ProcedureCode ::= 40 +*/ + +constexpr int64_t id_endcPartialReset = 40; +/* +id-endcX2Removal ProcedureCode ::= 43 +*/ + +constexpr int64_t id_endcX2Removal = 43; +/* +id-endcX2Setup ProcedureCode ::= 36 +*/ + +constexpr int64_t id_endcX2Setup = 36; +/* +id-enhancedRNTP ProtocolIE-ID ::= 148 +*/ + +constexpr int64_t id_enhancedRNTP = 148; +/* +id-errorIndication ProcedureCode ::= 3 +*/ + +constexpr int64_t id_errorIndication = 3; +/* +id-extended-e-RAB-GuaranteedBitrateDL ProtocolIE-ID ::= 198 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateDL = 198; +/* +id-extended-e-RAB-GuaranteedBitrateUL ProtocolIE-ID ::= 199 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateUL = 199; +/* +id-extended-e-RAB-MaximumBitrateDL ProtocolIE-ID ::= 196 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateDL = 196; +/* +id-extended-e-RAB-MaximumBitrateUL ProtocolIE-ID ::= 197 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateUL = 197; +/* +id-extended-uEaggregateMaximumBitRateDownlink ProtocolIE-ID ::= 200 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateDownlink = 200; +/* +id-extended-uEaggregateMaximumBitRateUplink ProtocolIE-ID ::= 201 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateUplink = 201; +/* +id-gNBStatusIndication ProcedureCode ::= 45 +*/ + +constexpr int64_t id_gNBStatusIndication = 45; +/* +id-handoverCancel ProcedureCode ::= 1 +*/ + +constexpr int64_t id_handoverCancel = 1; +/* +id-handoverPreparation ProcedureCode ::= 0 +*/ + +constexpr int64_t id_handoverPreparation = 0; +/* +id-handoverReport ProcedureCode ::= 14 +*/ + +constexpr int64_t id_handoverReport = 14; +/* +id-lCID ProtocolIE-ID ::= 314 +*/ + +constexpr int64_t id_lCID = 314; +/* +id-loadIndication ProcedureCode ::= 2 +*/ + +constexpr int64_t id_loadIndication = 2; +/* +id-meNBinitiatedSeNBModificationPreparation ProcedureCode ::= 21 +*/ + +constexpr int64_t id_meNBinitiatedSeNBModificationPreparation = 21; +/* +id-meNBinitiatedSeNBRelease ProcedureCode ::= 23 +*/ + +constexpr int64_t id_meNBinitiatedSeNBRelease = 23; +/* +id-meNBinitiatedSgNBModificationPreparation ProcedureCode ::= 29 +*/ + +constexpr int64_t id_meNBinitiatedSgNBModificationPreparation = 29; +/* +id-meNBinitiatedSgNBRelease ProcedureCode ::= 31 +*/ + +constexpr int64_t id_meNBinitiatedSgNBRelease = 31; +/* +id-mobilitySettingsChange ProcedureCode ::= 12 +*/ + +constexpr int64_t id_mobilitySettingsChange = 12; +/* +id-new-drb-ID-req ProtocolIE-ID ::= 325 +*/ + +constexpr int64_t id_new_drb_ID_req = 325; +/* +id-privateMessage ProcedureCode ::= 11 +*/ + +constexpr int64_t id_privateMessage = 11; +/* +id-rLFIndication ProcedureCode ::= 13 +*/ + +constexpr int64_t id_rLFIndication = 13; +/* +id-rRCTransfer ProcedureCode ::= 35 +*/ + +constexpr int64_t id_rRCTransfer = 35; +/* +id-reset ProcedureCode ::= 7 +*/ + +constexpr int64_t id_reset = 7; +/* +id-resourceStatusReporting ProcedureCode ::= 10 +*/ + +constexpr int64_t id_resourceStatusReporting = 10; +/* +id-resourceStatusReportingInitiation ProcedureCode ::= 9 +*/ + +constexpr int64_t id_resourceStatusReportingInitiation = 9; +/* +id-resumeID ProtocolIE-ID ::= 172 +*/ + +constexpr int64_t id_resumeID = 172; +/* +id-retrieveUEContext ProcedureCode ::= 26 +*/ + +constexpr int64_t id_retrieveUEContext = 26; +/* +id-seNBAdditionPreparation ProcedureCode ::= 19 +*/ + +constexpr int64_t id_seNBAdditionPreparation = 19; +/* +id-seNBCounterCheck ProcedureCode ::= 25 +*/ + +constexpr int64_t id_seNBCounterCheck = 25; +/* +id-seNBReconfigurationCompletion ProcedureCode ::= 20 +*/ + +constexpr int64_t id_seNBReconfigurationCompletion = 20; +/* +id-seNBinitiatedSeNBModification ProcedureCode ::= 22 +*/ + +constexpr int64_t id_seNBinitiatedSeNBModification = 22; +/* +id-seNBinitiatedSeNBRelease ProcedureCode ::= 24 +*/ + +constexpr int64_t id_seNBinitiatedSeNBRelease = 24; +/* +id-secondaryRATDataUsageReport ProcedureCode ::= 38 +*/ + +constexpr int64_t id_secondaryRATDataUsageReport = 38; +/* +id-secondarymeNBULGTPTEIDatPDCP ProtocolIE-ID ::= 313 +*/ + +constexpr int64_t id_secondarymeNBULGTPTEIDatPDCP = 313; +/* +id-secondarysgNBDLGTPTEIDatPDCP ProtocolIE-ID ::= 312 +*/ + +constexpr int64_t id_secondarysgNBDLGTPTEIDatPDCP = 312; +/* +id-serviceType ProtocolIE-ID ::= 276 +*/ + +constexpr int64_t id_serviceType = 276; +/* +id-sgNBAdditionPreparation ProcedureCode ::= 27 +*/ + +constexpr int64_t id_sgNBAdditionPreparation = 27; +/* +id-sgNBChange ProcedureCode ::= 34 +*/ + +constexpr int64_t id_sgNBChange = 34; +/* +id-sgNBCounterCheck ProcedureCode ::= 33 +*/ + +constexpr int64_t id_sgNBCounterCheck = 33; +/* +id-sgNBReconfigurationCompletion ProcedureCode ::= 28 +*/ + +constexpr int64_t id_sgNBReconfigurationCompletion = 28; +/* +id-sgNBinitiatedSgNBModification ProcedureCode ::= 30 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBModification = 30; +/* +id-sgNBinitiatedSgNBRelease ProcedureCode ::= 32 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBRelease = 32; +/* +id-snStatusTransfer ProcedureCode ::= 4 +*/ + +constexpr int64_t id_snStatusTransfer = 4; +/* +id-uEContextRelease ProcedureCode ::= 5 +*/ + +constexpr int64_t id_uEContextRelease = 5; +/* +id-uL-GTPtunnelEndpoint ProtocolIE-ID ::= 185 +*/ + +constexpr int64_t id_uL_GTPtunnelEndpoint = 185; +/* +id-uLpDCPSnLength ProtocolIE-ID ::= 302 +*/ + +constexpr int64_t id_uLpDCPSnLength = 302; +/* +id-x2APMessage ProtocolIE-ID ::= 102 +*/ + +constexpr int64_t id_x2APMessage = 102; +/* +id-x2APMessageTransfer ProcedureCode ::= 17 +*/ + +constexpr int64_t id_x2APMessageTransfer = 17; +/* +id-x2Release ProcedureCode ::= 16 +*/ + +constexpr int64_t id_x2Release = 16; +/* +id-x2Removal ProcedureCode ::= 18 +*/ + +constexpr int64_t id_x2Removal = 18; +/* +id-x2Setup ProcedureCode ::= 6 +*/ + +constexpr int64_t id_x2Setup = 6; +/* +maxCSIProcess INTEGER ::= 4 +*/ + +constexpr int64_t maxCSIProcess = 4; +/* +maxCSIReport INTEGER ::= 2 +*/ + +constexpr int64_t maxCSIReport = 2; +/* +maxCellReport INTEGER ::= 9 +*/ + +constexpr int64_t maxCellReport = 9; +/* +maxCellineNB INTEGER ::= 256 +*/ + +constexpr int64_t maxCellineNB = 256; +/* +maxCellinengNB INTEGER ::= 16384 +*/ + +constexpr int64_t maxCellinengNB = 16384; +/* +maxEARFCN INTEGER ::= 65535 +*/ + +constexpr int64_t maxEARFCN = 65535; +/* +maxEARFCNPlusOne INTEGER ::= 65536 +*/ + +constexpr int64_t maxEARFCNPlusOne = 65536; +/* +maxFailedMeasObjects INTEGER ::= 32 +*/ + +constexpr int64_t maxFailedMeasObjects = 32; +/* +maxInterfaces INTEGER ::= 16 +*/ + +constexpr int64_t maxInterfaces = 16; +/* +maxNrOfErrors INTEGER ::= 256 +*/ + +constexpr int64_t maxNrOfErrors = 256; +/* +maxPools INTEGER ::= 16 +*/ + +constexpr int64_t maxPools = 16; +/* +maxSubband INTEGER ::= 14 +*/ + +constexpr int64_t maxSubband = 14; +/* +maxUEReport INTEGER ::= 128 +*/ + +constexpr int64_t maxUEReport = 128; +/* +maxUEsinengNBDU INTEGER ::= 8192 +*/ + +constexpr int64_t maxUEsinengNBDU = 8192; +/* +maxnoNRcellsSpectrumSharingWithE-UTRA INTEGER ::= 64 +*/ + +constexpr int64_t maxnoNRcellsSpectrumSharingWithE_UTRA = 64; +/* +maxnoofBPLMNs INTEGER ::= 6 +*/ + +constexpr int64_t maxnoofBPLMNs = 6; +/* +maxnoofBands INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofBands = 16; +/* +maxnoofBearers INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofBearers = 256; +/* +maxnoofBluetoothName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofBluetoothName = 4; +/* +maxnoofCellIDforMDT INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforMDT = 32; +/* +maxnoofCellIDforQMC INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforQMC = 32; +/* +maxnoofCells INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofCells = 16; +/* +maxnoofCoMPCells INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCoMPCells = 32; +/* +maxnoofCoMPHypothesisSet INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofCoMPHypothesisSet = 256; +/* +maxnoofEPLMNs INTEGER ::= 15 +*/ + +constexpr int64_t maxnoofEPLMNs = 15; +/* +maxnoofEPLMNsPlusOne INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofEPLMNsPlusOne = 16; +/* +maxnoofForbLACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbLACs = 4096; +/* +maxnoofForbTACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbTACs = 4096; +/* +maxnoofMBMSServiceAreaIdentities INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofMBMSServiceAreaIdentities = 256; +/* +maxnoofMBSFN INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofMBSFN = 8; +/* +maxnoofMDTPLMNs INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofMDTPLMNs = 16; +/* +maxnoofNeighbours INTEGER ::= 512 +*/ + +constexpr int64_t maxnoofNeighbours = 512; +/* +maxnoofNrCellBands INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofNrCellBands = 32; +/* +maxnoofPA INTEGER ::= 3 +*/ + +constexpr int64_t maxnoofPA = 3; +/* +maxnoofPDCP-SN INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPDCP_SN = 16; +/* +maxnoofPLMNforQMC INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPLMNforQMC = 16; +/* +maxnoofPRBs INTEGER ::= 110 +*/ + +constexpr int64_t maxnoofPRBs = 110; +/* +maxnoofProtectedResourcePatterns INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofProtectedResourcePatterns = 16; +/* +maxnoofTAforMDT INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforMDT = 8; +/* +maxnoofTAforQMC INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforQMC = 8; +/* +maxnoofWLANName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofWLANName = 4; +/* +maxnooftimeperiods INTEGER ::= 2 +*/ + +constexpr int64_t maxnooftimeperiods = 2; +/* +maxofNRNeighbours INTEGER ::= 1024 +*/ + +constexpr int64_t maxofNRNeighbours = 1024; +/* +newmaxEARFCN INTEGER ::= 262143 +*/ + +constexpr int64_t newmaxEARFCN = 262143; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp new file mode 100644 index 0000000..09545bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-Containers.hpp @@ -0,0 +1,700 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +X2AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PRIVATE_IES +{ + struct id_t : PrivateIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = PrivateIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct PrivateIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "PrivateIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} +*/ + +template +struct PrivateIE_Container_elm : PrivateIE_Field +{ + static constexpr const char* name() {return "PrivateIE_Container_elm";} + using parent_t = PrivateIE_Field; + +}; +template +struct PrivateIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "PrivateIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_EXTENSION +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} +*/ + +template +struct ProtocolExtensionField : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolExtensionField";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : ExtensionSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename ExtensionSetParam::id_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : ExtensionSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename ExtensionSetParam::criticality_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct extensionValue_t : ExtensionSetParam::Extension_t + { + static constexpr const char* name() {return "extensionValue_t";} + using parent_t = typename ExtensionSetParam::Extension_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::Extension_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::Extension_t::encode(c.id.get_index(), v); + }; + }; + extensionValue_t& ref_extensionValue() {return extensionValue;} + extensionValue_t const& ref_extensionValue() const {return extensionValue;} + template void decode(V& v) + { + v(id); + v(criticality); + v(extensionValue); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(extensionValue); + + }; + void clear() + { + id.clear(); + criticality.clear(); + extensionValue.clear(); + + }; + private: + id_t id; + criticality_t criticality; + extensionValue_t extensionValue; + +}; +/* +ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} +*/ + +template +struct ProtocolExtensionContainer_elm : ProtocolExtensionField +{ + static constexpr const char* name() {return "ProtocolExtensionContainer_elm";} + using parent_t = ProtocolExtensionField; + +}; +template +struct ProtocolExtensionContainer : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolExtensionContainer";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_IES +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Container_elm : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE_Container_elm";} + using parent_t = ProtocolIE_Field; + +}; +template +struct ProtocolIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerList_elm : ProtocolIE_Container +{ + static constexpr const char* name() {return "ProtocolIE_ContainerList_elm";} + using parent_t = ProtocolIE_Container; + +}; +template +struct ProtocolIE_ContainerList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-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 +} +*/ + +struct X2AP_PROTOCOL_IES_PAIR +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct firstCriticality_t : Criticality + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = Criticality; + + }; + struct secondCriticality_t : Criticality + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_FieldPair : asn::sequence<5, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-FieldPair";} + using parent_t = asn::sequence<5, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct firstCriticality_t : IEsSetParam::firstCriticality_t + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = typename IEsSetParam::firstCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::firstCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::firstCriticality_t::encode(c.id.get_index(), v); + }; + }; + firstCriticality_t& ref_firstCriticality() {return firstCriticality;} + firstCriticality_t const& ref_firstCriticality() const {return firstCriticality;} + struct firstValue_t : IEsSetParam::FirstValue_t + { + static constexpr const char* name() {return "firstValue_t";} + using parent_t = typename IEsSetParam::FirstValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::FirstValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::FirstValue_t::encode(c.id.get_index(), v); + }; + }; + firstValue_t& ref_firstValue() {return firstValue;} + firstValue_t const& ref_firstValue() const {return firstValue;} + struct secondCriticality_t : IEsSetParam::secondCriticality_t + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = typename IEsSetParam::secondCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::secondCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::secondCriticality_t::encode(c.id.get_index(), v); + }; + }; + secondCriticality_t& ref_secondCriticality() {return secondCriticality;} + secondCriticality_t const& ref_secondCriticality() const {return secondCriticality;} + struct secondValue_t : IEsSetParam::SecondValue_t + { + static constexpr const char* name() {return "secondValue_t";} + using parent_t = typename IEsSetParam::SecondValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::SecondValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::SecondValue_t::encode(c.id.get_index(), v); + }; + }; + secondValue_t& ref_secondValue() {return secondValue;} + secondValue_t const& ref_secondValue() const {return secondValue;} + template void decode(V& v) + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + template void encode(V& v) const + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + void clear() + { + id.clear(); + firstCriticality.clear(); + firstValue.clear(); + secondCriticality.clear(); + secondValue.clear(); + + }; + private: + id_t id; + firstCriticality_t firstCriticality; + firstValue_t firstValue; + secondCriticality_t secondCriticality; + secondValue_t secondValue; + +}; +/* +ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPair_elm : ProtocolIE_FieldPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPair_elm";} + using parent_t = ProtocolIE_FieldPair; + +}; +template +struct ProtocolIE_ContainerPair : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPair";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPairList_elm : ProtocolIE_ContainerPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPairList_elm";} + using parent_t = ProtocolIE_ContainerPair; + +}; +template +struct ProtocolIE_ContainerPairList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPairList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Single_Container : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE-Single-Container";} + using parent_t = ProtocolIE_Field; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp new file mode 100644 index 0000000..f056563 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-IEs.hpp @@ -0,0 +1,35962 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-Constants.hpp" +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-Containers.hpp" + +/* +DL-ABS-status::= INTEGER (0..100) +*/ + +struct DL_ABS_status : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-ABS-status";} + using parent_t = asn::integer<>; + +}; + +/* +UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationFDD ::= SEQUENCE { + usable-abs-pattern-info BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationFDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;} + usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usable_abs_pattern_info_t usable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationTDD ::= SEQUENCE { + usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationTDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usaable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usaable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;} + usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usaable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usaable_abs_pattern_info_t usaable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformation ::= CHOICE { + fdd UsableABSInformationFDD, + tdd UsableABSInformationTDD, + ... +} +*/ + +struct UsableABSInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "UsableABSInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~UsableABSInformation() {clear();} + struct fdd_t : UsableABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = UsableABSInformationFDD; + + }; + struct tdd_t : UsableABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = UsableABSInformationTDD; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABS_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABS-Status ::= SEQUENCE { + dL-ABS-status DL-ABS-status, + usableABSInformation UsableABSInformation, + iE-Extensions ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABS_Status : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ABS-Status";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_ABS_status_t : DL_ABS_status + { + static constexpr const char* name() {return "dL_ABS_status_t";} + using parent_t = DL_ABS_status; + + }; + dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;} + dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;} + struct usableABSInformation_t : UsableABSInformation + { + static constexpr const char* name() {return "usableABSInformation_t";} + using parent_t = UsableABSInformation; + + }; + usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;} + usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + void clear() + { + dL_ABS_status.clear(); + usableABSInformation.clear(); + iE_Extensions.clear(); + + }; + private: + dL_ABS_status_t dL_ABS_status; + usableABSInformation_t usableABSInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationFDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(40)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationFDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationFDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationTDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(1..70, ...)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationTDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationTDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformation ::= CHOICE { + fdd ABSInformationFDD, + tdd ABSInformationTDD, + abs-inactive NULL, + ... +} +*/ + +struct ABSInformation : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "ABSInformation";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~ABSInformation() {clear();} + struct fdd_t : ABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = ABSInformationFDD; + + }; + struct tdd_t : ABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = ABSInformationTDD; + + }; + struct abs_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "abs_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + char dummy3[sizeof(abs_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Key-eNodeB-Star ::= BIT STRING (SIZE(256)) +*/ + +struct Key_eNodeB_Star : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Key-eNodeB-Star";} + using parent_t = asn::bstring<>; + +}; + +/* +NextHopChainingCount ::= INTEGER (0..7) +*/ + +struct NextHopChainingCount : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NextHopChainingCount";} + using parent_t = asn::integer<>; + +}; + +/* +AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AS_SecurityInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AS-SecurityInformation ::= SEQUENCE { + key-eNodeB-star Key-eNodeB-Star, + nextHopChainingCount NextHopChainingCount, + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AS_SecurityInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "AS-SecurityInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct key_eNodeB_star_t : Key_eNodeB_Star + { + static constexpr const char* name() {return "key_eNodeB_star_t";} + using parent_t = Key_eNodeB_Star; + + }; + key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;} + key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;} + struct nextHopChainingCount_t : NextHopChainingCount + { + static constexpr const char* name() {return "nextHopChainingCount_t";} + using parent_t = NextHopChainingCount; + + }; + nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;} + nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + void clear() + { + key_eNodeB_star.clear(); + nextHopChainingCount.clear(); + iE_Extensions.clear(); + + }; + private: + key_eNodeB_star_t key_eNodeB_star; + nextHopChainingCount_t nextHopChainingCount; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivationID ::= INTEGER (0..255) +*/ + +struct ActivationID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ActivationID";} + using parent_t = asn::integer<>; + +}; + +/* +AdditionalSpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ... +} +*/ + +struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";} + using parent_t = asn::enumerated<10, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + ,ssp9 + } index_t; + +}; + +/* +CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixDL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixDL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixUL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixUL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframe-Info ::= SEQUENCE { + additionalspecialSubframePatterns AdditionalSpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns + { + static constexpr const char* name() {return "additionalspecialSubframePatterns_t";} + using parent_t = AdditionalSpecialSubframePatterns; + + }; + additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;} + additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatterns_t additionalspecialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AdditionalSpecialSubframePatternsExtension ::= ENUMERATED { + ssp10, + ... +} +*/ + +struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ssp10 + } index_t; + +}; + +/* +AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframeExtension-Info ::= SEQUENCE { + additionalspecialSubframePatternsExtension AdditionalSpecialSubframePatternsExtension, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension + { + static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";} + using parent_t = AdditionalSpecialSubframePatternsExtension; + + }; + additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;} + additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatternsExtension.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AerialUEsubscriptionInformation ::= ENUMERATED { + allowed, + not-allowed, + ... +} +*/ + +struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "AerialUEsubscriptionInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + allowed + ,not_allowed + } index_t; + +}; + +/* +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) +*/ + +struct PriorityLevel : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PriorityLevel";} + using parent_t = asn::integer<>; + enum {spare = 0, highest = 1, lowest = 14, no_priority = 15}; + +}; + +/* +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} +*/ + +struct Pre_emptionCapability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionCapability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + shall_not_trigger_pre_emption + ,may_trigger_pre_emption + } index_t; + +}; + +/* +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} +*/ + +struct Pre_emptionVulnerability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionVulnerability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + not_pre_emptable + ,pre_emptable + } index_t; + +}; + +/* +AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AllocationAndRetentionPriority_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AllocationAndRetentionPriority";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct priorityLevel_t : PriorityLevel + { + static constexpr const char* name() {return "priorityLevel_t";} + using parent_t = PriorityLevel; + + }; + priorityLevel_t& ref_priorityLevel() {return priorityLevel;} + priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;} + struct pre_emptionCapability_t : Pre_emptionCapability + { + static constexpr const char* name() {return "pre_emptionCapability_t";} + using parent_t = Pre_emptionCapability; + + }; + pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;} + pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;} + struct pre_emptionVulnerability_t : Pre_emptionVulnerability + { + static constexpr const char* name() {return "pre_emptionVulnerability_t";} + using parent_t = Pre_emptionVulnerability; + + }; + pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;} + pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + void clear() + { + priorityLevel.clear(); + pre_emptionCapability.clear(); + pre_emptionVulnerability.clear(); + iE_Extensions.clear(); + + }; + private: + priorityLevel_t priorityLevel; + pre_emptionCapability_t pre_emptionCapability; + pre_emptionVulnerability_t pre_emptionVulnerability; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMN-Identity ::= OCTET STRING (SIZE(3)) +*/ + +struct PLMN_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PLMN-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) +*/ + +struct EUTRANCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ECGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ECGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ECGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eUTRANcellIdentifier_t : EUTRANCellIdentifier + { + static constexpr const char* name() {return "eUTRANcellIdentifier_t";} + using parent_t = EUTRANCellIdentifier; + + }; + eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;} + eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eUTRANcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eUTRANcellIdentifier_t eUTRANcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI +*/ + +struct CellIdListforMDT_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforMDT_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedMDT::= SEQUENCE { + cellIdListforMDT CellIdListforMDT, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforMDT_t : CellIdListforMDT + { + static constexpr const char* name() {return "cellIdListforMDT_t";} + using parent_t = CellIdListforMDT; + + }; + cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;} + cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforMDT_t cellIdListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAC ::= OCTET STRING (SIZE (2)) +*/ + +struct TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC +*/ + +struct TAListforMDT_elm : TAC +{ + static constexpr const char* name() {return "TAListforMDT_elm";} + using parent_t = TAC; + +}; +struct TAListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedMDT::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforMDT_t : TAListforMDT + { + static constexpr const char* name() {return "tAListforMDT_t";} + using parent_t = TAListforMDT; + + }; + tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;} + tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforMDT_t tAListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAI_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAI-Item ::= SEQUENCE { + tAC TAC, + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAI_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TAI-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + void clear() + { + tAC.clear(); + pLMN_Identity.clear(); + iE_Extensions.clear(); + + }; + private: + tAC_t tAC; + pLMN_Identity_t pLMN_Identity; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item +*/ + +struct TAIListforMDT_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforMDT_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforMDT_t : TAIListforMDT + { + static constexpr const char* name() {return "tAIListforMDT_t";} + using parent_t = TAIListforMDT; + + }; + tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;} + tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAIListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforMDT_t tAIListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfMDT ::= CHOICE { + cellBased CellBasedMDT, + tABased TABasedMDT, + pLMNWide NULL, + ..., + tAIBased TAIBasedMDT +} +*/ + +struct AreaScopeOfMDT : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "AreaScopeOfMDT";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfMDT() {clear();} + struct cellBased_t : CellBasedMDT + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedMDT; + + }; + struct tABased_t : TABasedMDT + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedMDT; + + }; + struct pLMNWide_t : asn::nulltype + { + static constexpr const char* name() {return "pLMNWide_t";} + using parent_t = asn::nulltype; + + }; + struct tAIBased_t : TAIBasedMDT + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedMDT; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(pLMNWide_t)]; + char dummy4[sizeof(tAIBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI +*/ + +struct CellIdListforQMC_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforQMC_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedQMC::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforQMC_t : CellIdListforQMC + { + static constexpr const char* name() {return "cellIdListforQMC_t";} + using parent_t = CellIdListforQMC; + + }; + cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;} + cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforQMC_t cellIdListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC +*/ + +struct TAListforQMC_elm : TAC +{ + static constexpr const char* name() {return "TAListforQMC_elm";} + using parent_t = TAC; + +}; +struct TAListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforQMC_t : TAListforQMC + { + static constexpr const char* name() {return "tAListforQMC_t";} + using parent_t = TAListforQMC; + + }; + tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;} + tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforQMC_t tAListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item +*/ + +struct TAIListforQMC_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforQMC_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforQMC_t : TAIListforQMC + { + static constexpr const char* name() {return "tAIListforQMC_t";} + using parent_t = TAIListforQMC; + + }; + tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;} + tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAIListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforQMC_t tAIListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity +*/ + +struct PLMNListforQMC_elm : PLMN_Identity +{ + static constexpr const char* name() {return "PLMNListforQMC_elm";} + using parent_t = PLMN_Identity; + +}; +struct PLMNListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "PLMNListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PLMNAreaBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "PLMNAreaBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct plmnListforQMC_t : PLMNListforQMC + { + static constexpr const char* name() {return "plmnListforQMC_t";} + using parent_t = PLMNListforQMC; + + }; + plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;} + plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + void clear() + { + plmnListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + plmnListforQMC_t plmnListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + ... +} +*/ + +struct AreaScopeOfQMC : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "AreaScopeOfQMC";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfQMC() {clear();} + struct cellBased_t : CellBasedQMC + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedQMC; + + }; + struct tABased_t : TABasedQMC + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedQMC; + + }; + struct tAIBased_t : TAIBasedQMC + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedQMC; + + }; + struct pLMNAreaBased_t : PLMNAreaBasedQMC + { + static constexpr const char* name() {return "pLMNAreaBased_t";} + using parent_t = PLMNAreaBasedQMC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as();} return nullptr; } + pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(tAIBased_t)]; + char dummy4[sizeof(pLMNAreaBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +FreqBandIndicator ::= INTEGER (1..256, ...) +*/ + +struct FreqBandIndicator : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FreqBandIndicator";} + using parent_t = asn::integer<>; + +}; + +/* +BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BandInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BandInfo ::= SEQUENCE { + freqBandIndicator FreqBandIndicator, + iE-Extensions ProtocolExtensionContainer { {BandInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BandInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "BandInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicator_t : FreqBandIndicator + { + static constexpr const char* name() {return "freqBandIndicator_t";} + using parent_t = FreqBandIndicator; + + }; + freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;} + freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicator_t freqBandIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +BandwidthReducedSI::= ENUMERATED { + scheduled, + ... +} +*/ + +struct BandwidthReducedSI : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BandwidthReducedSI";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + scheduled + } index_t; + +}; + +/* +BearerType ::= ENUMERATED { + non-IP, + ... +} +*/ + +struct BearerType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BearerType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + non_IP + } index_t; + +}; + +/* +BenefitMetric ::= INTEGER (-101..100, ...) +*/ + +struct BenefitMetric : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BenefitMetric";} + using parent_t = asn::integer<>; + +}; + +/* +BitRate ::= INTEGER (0..10000000000) +*/ + +struct BitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BitRate";} + using parent_t = asn::integer<>; + +}; + +/* +BluetoothMeasConfig::= ENUMERATED {setup,...} +*/ + +struct BluetoothMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BluetoothMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +BluetoothName ::= OCTET STRING (SIZE (1..248)) +*/ + +struct BluetoothName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BluetoothName";} + using parent_t = asn::ostring<>; + +}; + +/* +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName +*/ + +struct BluetoothMeasConfigNameList_elm : BluetoothName +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";} + using parent_t = BluetoothName; + +}; +struct BluetoothMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BluetoothMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "BluetoothMeasurementConfiguration";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct bluetoothMeasConfig_t : BluetoothMeasConfig + { + static constexpr const char* name() {return "bluetoothMeasConfig_t";} + using parent_t = BluetoothMeasConfig; + + }; + bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;} + bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;} + struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList + { + static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";} + using parent_t = BluetoothMeasConfigNameList; + static constexpr bool optional = true; + + }; + bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;} + bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;} + struct bt_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "bt_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;} + bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + void clear() + { + bluetoothMeasConfig.clear(); + bluetoothMeasConfigNameList.clear(); + bt_rssi.clear(); + iE_Extensions.clear(); + + }; + private: + bluetoothMeasConfig_t bluetoothMeasConfig; + bluetoothMeasConfigNameList_t bluetoothMeasConfigNameList; + bt_rssi_t bt_rssi; + iE_Extensions_t iE_Extensions; + +}; +/* +BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity +*/ + +struct BroadcastPLMNs_Item_elm : PLMN_Identity +{ + static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";} + using parent_t = PLMN_Identity; + +}; +struct BroadcastPLMNs_Item : asn::sequenceof +{ + static constexpr const char* name() {return "BroadcastPLMNs-Item";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CNTypeRestrictionsItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CNTypeRestrictionsItem ::= SEQUENCE { + plmn-Id PLMN-Identity, + cn-type ENUMERATED {fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CNTypeRestrictionsItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct plmn_Id_t : PLMN_Identity + { + static constexpr const char* name() {return "plmn_Id_t";} + using parent_t = PLMN_Identity; + + }; + plmn_Id_t& ref_plmn_Id() {return plmn_Id;} + plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;} + struct cn_type_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "cn_type_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + fiveGC_forbidden + } index_t; + + }; + + cn_type_t& ref_cn_type() {return cn_type;} + cn_type_t const& ref_cn_type() const {return cn_type;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + void clear() + { + plmn_Id.clear(); + cn_type.clear(); + iE_Extensions.clear(); + + }; + private: + plmn_Id_t plmn_Id; + cn_type_t cn_type; + iE_Extensions_t iE_Extensions; + +}; +/* +CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem +*/ + +struct CNTypeRestrictions_elm : CNTypeRestrictionsItem +{ + static constexpr const char* name() {return "CNTypeRestrictions_elm";} + using parent_t = CNTypeRestrictionsItem; + +}; +struct CNTypeRestrictions : asn::sequenceof +{ + static constexpr const char* name() {return "CNTypeRestrictions";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PDCP-SNExtended ::= INTEGER (0..32767) +*/ + +struct PDCP_SNExtended : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNExtended";} + using parent_t = asn::integer<>; + +}; + +/* +HFNModified ::= INTEGER (0..131071) +*/ + +struct HFNModified : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNModified";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTValueExtended_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTValueExtended ::= SEQUENCE { + pDCP-SNExtended PDCP-SNExtended, + hFNModified HFNModified, + iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTValueExtended : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTValueExtended";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNExtended_t : PDCP_SNExtended + { + static constexpr const char* name() {return "pDCP_SNExtended_t";} + using parent_t = PDCP_SNExtended; + + }; + pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;} + pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;} + struct hFNModified_t : HFNModified + { + static constexpr const char* name() {return "hFNModified_t";} + using parent_t = HFNModified; + + }; + hFNModified_t& ref_hFNModified() {return hFNModified;} + hFNModified_t const& ref_hFNModified() const {return hFNModified;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNExtended.clear(); + hFNModified.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNExtended_t pDCP_SNExtended; + hFNModified_t hFNModified; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SN ::= INTEGER (0..4095) +*/ + +struct PDCP_SN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SN";} + using parent_t = asn::integer<>; + +}; + +/* +HFN ::= INTEGER (0..1048575) +*/ + +struct HFN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFN";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvalue_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvalue ::= SEQUENCE { + pDCP-SN PDCP-SN, + hFN HFN, + iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvalue : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvalue";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SN_t : PDCP_SN + { + static constexpr const char* name() {return "pDCP_SN_t";} + using parent_t = PDCP_SN; + + }; + pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;} + pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;} + struct hFN_t : HFN + { + static constexpr const char* name() {return "hFN_t";} + using parent_t = HFN; + + }; + hFN_t& ref_hFN() {return hFN;} + hFN_t const& ref_hFN() const {return hFN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SN.clear(); + hFN.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SN_t pDCP_SN; + hFN_t hFN; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SNlength18 ::= INTEGER (0..262143) +*/ + +struct PDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +HFNforPDCP-SNlength18 ::= INTEGER (0..16383) +*/ + +struct HFNforPDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNforPDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvaluePDCP-SNlength18 ::= SEQUENCE { + pDCP-SNlength18 PDCP-SNlength18, + hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, + iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNlength18_t : PDCP_SNlength18 + { + static constexpr const char* name() {return "pDCP_SNlength18_t";} + using parent_t = PDCP_SNlength18; + + }; + pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;} + pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;} + struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18 + { + static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";} + using parent_t = HFNforPDCP_SNlength18; + + }; + hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;} + hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNlength18.clear(); + hFNforPDCP_SNlength18.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNlength18_t pDCP_SNlength18; + hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + iE_Extensions_t iE_Extensions; + +}; +/* +CRNTI ::= BIT STRING (SIZE (16)) +*/ + +struct CRNTI : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CRNTI";} + using parent_t = asn::bstring<>; + +}; + +/* +CSG-Id ::= BIT STRING (SIZE (27)) +*/ + +struct CSG_Id : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CSG-Id";} + using parent_t = asn::bstring<>; + +}; + +/* +CSGMembershipStatus ::= ENUMERATED { + member, + not-member +} +*/ + +struct CSGMembershipStatus : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "CSGMembershipStatus";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + member + ,not_member + } index_t; + +}; + +/* +UEID ::= BIT STRING (SIZE (16)) +*/ + +struct UEID : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UEID";} + using parent_t = asn::bstring<>; + +}; + +/* +WidebandCQICodeword1::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + ... +} +*/ + +struct WidebandCQICodeword1 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WidebandCQICodeword1";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WidebandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WidebandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WidebandCQI ::= SEQUENCE { + widebandCQICodeword0 INTEGER (0..15, ...), + widebandCQICodeword1 WidebandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WidebandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "WidebandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct widebandCQICodeword0_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "widebandCQICodeword0_t";} + using parent_t = asn::integer<>; + + }; + + widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;} + widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;} + struct widebandCQICodeword1_t : WidebandCQICodeword1 + { + static constexpr const char* name() {return "widebandCQICodeword1_t";} + using parent_t = WidebandCQICodeword1; + static constexpr bool optional = true; + + }; + widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;} + widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + widebandCQICodeword0.clear(); + widebandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + widebandCQICodeword0_t widebandCQICodeword0; + widebandCQICodeword1_t widebandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandSize ::= ENUMERATED { + size2, + size3, + size4, + size6, + size8, + ... +} +*/ + +struct SubbandSize : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "SubbandSize";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + size2 + ,size3 + ,size4 + ,size6 + ,size8 + } index_t; + +}; + +/* +SubbandCQICodeword0 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword0 : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword0";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~SubbandCQICodeword0() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy3[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQICodeword1 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword1 : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword1";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~SubbandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy4[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQI ::= SEQUENCE { + subbandCQICodeword0 SubbandCQICodeword0, + subbandCQICodeword1 SubbandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "SubbandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct subbandCQICodeword0_t : SubbandCQICodeword0 + { + static constexpr const char* name() {return "subbandCQICodeword0_t";} + using parent_t = SubbandCQICodeword0; + + }; + subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;} + subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;} + struct subbandCQICodeword1_t : SubbandCQICodeword1 + { + static constexpr const char* name() {return "subbandCQICodeword1_t";} + using parent_t = SubbandCQICodeword1; + static constexpr bool optional = true; + + }; + subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;} + subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + subbandCQICodeword0.clear(); + subbandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQICodeword0_t subbandCQICodeword0; + subbandCQICodeword1_t subbandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQIItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQIItem ::= SEQUENCE { + subbandCQI SubbandCQI, + subbandIndex INTEGER (0..27,...), + iE-Extensions ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQIItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SubbandCQIItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct subbandCQI_t : SubbandCQI + { + static constexpr const char* name() {return "subbandCQI_t";} + using parent_t = SubbandCQI; + + }; + subbandCQI_t& ref_subbandCQI() {return subbandCQI;} + subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;} + struct subbandIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "subbandIndex_t";} + using parent_t = asn::integer<>; + + }; + + subbandIndex_t& ref_subbandIndex() {return subbandIndex;} + subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + void clear() + { + subbandCQI.clear(); + subbandIndex.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQI_t subbandCQI; + subbandIndex_t subbandIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem +*/ + +struct SubbandCQIList_elm : SubbandCQIItem +{ + static constexpr const char* name() {return "SubbandCQIList_elm";} + using parent_t = SubbandCQIItem; + +}; +struct SubbandCQIList : asn::sequenceof +{ + static constexpr const char* name() {return "SubbandCQIList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcessItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF + SEQUENCE { + rI INTEGER (1..8, ...), + widebandCQI WidebandCQI, + subbandSize SubbandSize, + subbandCQIList SubbandCQIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct rI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rI_t";} + using parent_t = asn::integer<>; + + }; + + rI_t& ref_rI() {return rI;} + rI_t const& ref_rI() const {return rI;} + struct widebandCQI_t : WidebandCQI + { + static constexpr const char* name() {return "widebandCQI_t";} + using parent_t = WidebandCQI; + + }; + widebandCQI_t& ref_widebandCQI() {return widebandCQI;} + widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;} + struct subbandSize_t : SubbandSize + { + static constexpr const char* name() {return "subbandSize_t";} + using parent_t = SubbandSize; + + }; + subbandSize_t& ref_subbandSize() {return subbandSize;} + subbandSize_t const& ref_subbandSize() const {return subbandSize;} + struct subbandCQIList_t : SubbandCQIList + { + static constexpr const char* name() {return "subbandCQIList_t";} + using parent_t = SubbandCQIList; + static constexpr bool optional = true; + + }; + subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;} + subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + void clear() + { + rI.clear(); + widebandCQI.clear(); + subbandSize.clear(); + subbandCQIList.clear(); + iE_Extensions.clear(); + + }; + private: + rI_t rI; + widebandCQI_t widebandCQI; + subbandSize_t subbandSize; + subbandCQIList_t subbandCQIList; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcessItem : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcess_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF + SEQUENCE { + cSIProcessConfigurationIndex INTEGER (1..7, ...), + cSIReportPerCSIProcessItem CSIReportPerCSIProcessItem, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cSIProcessConfigurationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";} + using parent_t = asn::integer<>; + + }; + + cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;} + cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;} + struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem + { + static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";} + using parent_t = CSIReportPerCSIProcessItem; + + }; + cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;} + cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + void clear() + { + cSIProcessConfigurationIndex.clear(); + cSIReportPerCSIProcessItem.clear(); + iE_Extensions.clear(); + + }; + private: + cSIProcessConfigurationIndex_t cSIProcessConfigurationIndex; + cSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcess : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + uEID UEID, + cSIReportPerCSIProcess CSIReportPerCSIProcess, + iE-Extensions ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportList_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportList_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEID_t : UEID + { + static constexpr const char* name() {return "uEID_t";} + using parent_t = UEID; + + }; + uEID_t& ref_uEID() {return uEID;} + uEID_t const& ref_uEID() const {return uEID;} + struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess + { + static constexpr const char* name() {return "cSIReportPerCSIProcess_t";} + using parent_t = CSIReportPerCSIProcess; + + }; + cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;} + cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + void clear() + { + uEID.clear(); + cSIReportPerCSIProcess.clear(); + iE_Extensions.clear(); + + }; + private: + uEID_t uEID; + cSIReportPerCSIProcess_t cSIReportPerCSIProcess; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportList : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CapacityValue ::= INTEGER (0..100) +*/ + +struct CapacityValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CapacityValue";} + using parent_t = asn::integer<>; + +}; + +/* +CauseRadioNetwork ::= ENUMERATED { + handover-desirable-for-radio-reasons, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + partial-handover, + unknown-new-eNB-UE-X2AP-ID, + unknown-old-eNB-UE-X2AP-ID, + unknown-pair-of-UE-X2AP-ID, + ho-target-not-allowed, + tx2relocoverall-expiry, + trelocprep-expiry, + cell-not-available, + no-radio-resources-available-in-target-cell, + invalid-MME-GroupID, + unknown-MME-Code, + encryption-and-or-integrity-protection-algorithms-not-supported, + reportCharacteristicsEmpty, + noReportPeriodicity, + existingMeasurementID, + unknown-eNB-Measurement-ID, + measurement-temporarily-not-available, + unspecified, + ..., + load-balancing, + handover-optimisation, + value-out-of-allowed-range, + multiple-E-RAB-ID-instances, + switch-off-ongoing, + not-supported-QCI-value, + measurement-not-supported-for-the-object, + tDCoverall-expiry, + tDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-aupported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + mCG-Mobility, + sCG-Mobility, + count-reaches-max-value, + unknown-old-en-gNB-UE-X2AP-ID, + pDCP-Overload + +} +*/ + +struct CauseRadioNetwork : asn::enumerated<51, 29, true> +{ + static constexpr const char* name() {return "CauseRadioNetwork";} + using parent_t = asn::enumerated<51, 29, true>; + typedef enum { + handover_desirable_for_radio_reasons + ,time_critical_handover + ,resource_optimisation_handover + ,reduce_load_in_serving_cell + ,partial_handover + ,unknown_new_eNB_UE_X2AP_ID + ,unknown_old_eNB_UE_X2AP_ID + ,unknown_pair_of_UE_X2AP_ID + ,ho_target_not_allowed + ,tx2relocoverall_expiry + ,trelocprep_expiry + ,cell_not_available + ,no_radio_resources_available_in_target_cell + ,invalid_MME_GroupID + ,unknown_MME_Code + ,encryption_and_or_integrity_protection_algorithms_not_supported + ,reportCharacteristicsEmpty + ,noReportPeriodicity + ,existingMeasurementID + ,unknown_eNB_Measurement_ID + ,measurement_temporarily_not_available + ,unspecified + ,load_balancing + ,handover_optimisation + ,value_out_of_allowed_range + ,multiple_E_RAB_ID_instances + ,switch_off_ongoing + ,not_supported_QCI_value + ,measurement_not_supported_for_the_object + ,tDCoverall_expiry + ,tDCprep_expiry + ,action_desirable_for_radio_reasons + ,reduce_load + ,resource_optimisation + ,time_critical_action + ,target_not_allowed + ,no_radio_resources_available + ,invalid_QoS_combination + ,encryption_algorithms_not_aupported + ,procedure_cancelled + ,rRM_purpose + ,improve_user_bit_rate + ,user_inactivity + ,radio_connection_with_UE_lost + ,failure_in_the_radio_interface_procedure + ,bearer_option_not_supported + ,mCG_Mobility + ,sCG_Mobility + ,count_reaches_max_value + ,unknown_old_en_gNB_UE_X2AP_ID + ,pDCP_Overload + } index_t; + +}; + +/* +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} +*/ + +struct CauseTransport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CauseTransport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + transport_resource_unavailable + ,unspecified + } index_t; + +}; + +/* +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + unspecified, + abstract-syntax-error-falsely-constructed-message, + ... +} +*/ + +struct CauseProtocol : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "CauseProtocol";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + transfer_syntax_error + ,abstract_syntax_error_reject + ,abstract_syntax_error_ignore_and_notify + ,message_not_compatible_with_receiver_state + ,semantic_error + ,unspecified + ,abstract_syntax_error_falsely_constructed_message + } index_t; + +}; + +/* +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + om-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} +*/ + +struct CauseMisc : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "CauseMisc";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + control_processing_overload + ,hardware_failure + ,om_intervention + ,not_enough_user_plane_processing_resources + ,unspecified + } index_t; + +}; + +/* +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ... +} +*/ + +struct Cause : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "Cause";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~Cause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } +*/ + +struct Cell_Size : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "Cell-Size";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + verysmall + ,small + ,medium + ,large + } index_t; + +}; + +/* +CellCapacityClassValue ::= INTEGER (1..100, ...) +*/ + +struct CellCapacityClassValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CellCapacityClassValue";} + using parent_t = asn::integer<>; + +}; + +/* +CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...} +*/ + +struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellDeploymentStatusIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + pre_change_notification + } index_t; + +}; + +/* +ReplacingCellsList-Item ::= SEQUENCE { + eCGI ECGI, + ... +} +*/ + +struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ReplacingCellsList-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + template void decode(V& v) + { + v(eCGI); + + }; + template void encode(V& v) const + { + v(eCGI); + + }; + void clear() + { + eCGI.clear(); + + }; + private: + eCGI_t eCGI; + +}; +/* +ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item +*/ + +struct ReplacingCellsList_elm : ReplacingCellsList_Item +{ + static constexpr const char* name() {return "ReplacingCellsList_elm";} + using parent_t = ReplacingCellsList_Item; + +}; +struct ReplacingCellsList : asn::sequenceof +{ + static constexpr const char* name() {return "ReplacingCellsList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellReplacingInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellReplacingInfo ::= SEQUENCE { + replacingCellsList ReplacingCellsList, + iE-Extensions ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellReplacingInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellReplacingInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct replacingCellsList_t : ReplacingCellsList + { + static constexpr const char* name() {return "replacingCellsList_t";} + using parent_t = ReplacingCellsList; + + }; + replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;} + replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(replacingCellsList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(replacingCellsList); + v(iE_Extensions); + + }; + void clear() + { + replacingCellsList.clear(); + iE_Extensions.clear(); + + }; + private: + replacingCellsList_t replacingCellsList; + iE_Extensions_t iE_Extensions; + +}; +/* +CellReportingIndicator ::= ENUMERATED {stop-request, ... } +*/ + +struct CellReportingIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellReportingIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + stop_request + } index_t; + +}; + +/* +CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellType_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellType ::= SEQUENCE { + cell-Size Cell-Size, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellType : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellType";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_Size_t : Cell_Size + { + static constexpr const char* name() {return "cell_Size_t";} + using parent_t = Cell_Size; + + }; + cell_Size_t& ref_cell_Size() {return cell_Size;} + cell_Size_t const& ref_cell_Size() const {return cell_Size;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_Size); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_Size); + v(iE_Extensions); + + }; + void clear() + { + cell_Size.clear(); + iE_Extensions.clear(); + + }; + private: + cell_Size_t cell_Size; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPHypothesisSetItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPHypothesisSetItem ::= SEQUENCE { + coMPCellID ECGI, + coMPHypothesis BIT STRING (SIZE(6..4400, ...)), + iE-Extensions ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPHypothesisSetItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPCellID_t : ECGI + { + static constexpr const char* name() {return "coMPCellID_t";} + using parent_t = ECGI; + + }; + coMPCellID_t& ref_coMPCellID() {return coMPCellID;} + coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;} + struct coMPHypothesis_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coMPHypothesis_t";} + using parent_t = asn::bstring<>; + + }; + + coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;} + coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + void clear() + { + coMPCellID.clear(); + coMPHypothesis.clear(); + iE_Extensions.clear(); + + }; + private: + coMPCellID_t coMPCellID; + coMPHypothesis_t coMPHypothesis; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem +*/ + +struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem +{ + static constexpr const char* name() {return "CoMPHypothesisSet_elm";} + using parent_t = CoMPHypothesisSetItem; + +}; +struct CoMPHypothesisSet : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPHypothesisSet";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF + SEQUENCE { + coMPHypothesisSet CoMPHypothesisSet, + benefitMetric BenefitMetric, + iE-Extensions ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationItem_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPHypothesisSet_t : CoMPHypothesisSet + { + static constexpr const char* name() {return "coMPHypothesisSet_t";} + using parent_t = CoMPHypothesisSet; + + }; + coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;} + coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;} + struct benefitMetric_t : BenefitMetric + { + static constexpr const char* name() {return "benefitMetric_t";} + using parent_t = BenefitMetric; + + }; + benefitMetric_t& ref_benefitMetric() {return benefitMetric;} + benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + void clear() + { + coMPHypothesisSet.clear(); + benefitMetric.clear(); + iE_Extensions.clear(); + + }; + private: + coMPHypothesisSet_t coMPHypothesisSet; + benefitMetric_t benefitMetric; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationItem : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF + SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationStartTime_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationStartTime : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationStartTime";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformation ::= SEQUENCE { + coMPInformationItem CoMPInformationItem, + coMPInformationStartTime CoMPInformationStartTime, + iE-Extensions ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPInformationItem_t : CoMPInformationItem + { + static constexpr const char* name() {return "coMPInformationItem_t";} + using parent_t = CoMPInformationItem; + + }; + coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;} + coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;} + struct coMPInformationStartTime_t : CoMPInformationStartTime + { + static constexpr const char* name() {return "coMPInformationStartTime_t";} + using parent_t = CoMPInformationStartTime; + + }; + coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;} + coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + void clear() + { + coMPInformationItem.clear(); + coMPInformationStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + coMPInformationItem_t coMPInformationItem; + coMPInformationStartTime_t coMPInformationStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacity_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "CompositeAvailableCapacity";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cellCapacityClassValue_t : CellCapacityClassValue + { + static constexpr const char* name() {return "cellCapacityClassValue_t";} + using parent_t = CellCapacityClassValue; + static constexpr bool optional = true; + + }; + cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;} + cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;} + struct capacityValue_t : CapacityValue + { + static constexpr const char* name() {return "capacityValue_t";} + using parent_t = CapacityValue; + + }; + capacityValue_t& ref_capacityValue() {return capacityValue;} + capacityValue_t const& ref_capacityValue() const {return capacityValue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + void clear() + { + cellCapacityClassValue.clear(); + capacityValue.clear(); + iE_Extensions.clear(); + + }; + private: + cellCapacityClassValue_t cellCapacityClassValue; + capacityValue_t capacityValue; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacityGroup_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompositeAvailableCapacityGroup";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;} + dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;} + struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;} + uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + void clear() + { + dL_CompositeAvailableCapacity.clear(); + uL_CompositeAvailableCapacity.clear(); + iE_Extensions.clear(); + + }; + private: + dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + iE_Extensions_t iE_Extensions; + +}; +/* +Correlation-ID ::= OCTET STRING (SIZE (4)) +*/ + +struct Correlation_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Correlation-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +CoverageModification-Item ::= SEQUENCE { + eCGI ECGI, + coverageState INTEGER (0..15, ...), + cellDeploymentStatusIndicator CellDeploymentStatusIndicator OPTIONAL, + cellReplacingInfo CellReplacingInfo OPTIONAL, +-- Included in case the Cell Deployment Status Indicator IE is present + ... +} +*/ + +struct CoverageModification_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "CoverageModification-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct coverageState_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coverageState_t";} + using parent_t = asn::integer<>; + + }; + + coverageState_t& ref_coverageState() {return coverageState;} + coverageState_t const& ref_coverageState() const {return coverageState;} + struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator + { + static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";} + using parent_t = CellDeploymentStatusIndicator; + static constexpr bool optional = true; + + }; + cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;} + cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;} + struct cellReplacingInfo_t : CellReplacingInfo + { + static constexpr const char* name() {return "cellReplacingInfo_t";} + using parent_t = CellReplacingInfo; + static constexpr bool optional = true; + + }; + cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;} + cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + template void encode(V& v) const + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + void clear() + { + eCGI.clear(); + coverageState.clear(); + cellDeploymentStatusIndicator.clear(); + cellReplacingInfo.clear(); + + }; + private: + eCGI_t eCGI; + coverageState_t coverageState; + cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator; + cellReplacingInfo_t cellReplacingInfo; + +}; +/* +CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item +*/ + +struct CoverageModificationList_elm : CoverageModification_Item +{ + static constexpr const char* name() {return "CoverageModificationList_elm";} + using parent_t = CoverageModification_Item; + +}; +struct CoverageModificationList : asn::sequenceof +{ + static constexpr const char* name() {return "CoverageModificationList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +*/ + +struct TypeOfError : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "TypeOfError";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_understood + ,missing + } index_t; + +}; + +/* +CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct iECriticality_t : Criticality + { + static constexpr const char* name() {return "iECriticality_t";} + using parent_t = Criticality; + + }; + iECriticality_t& ref_iECriticality() {return iECriticality;} + iECriticality_t const& ref_iECriticality() const {return iECriticality;} + struct iE_ID_t : ProtocolIE_ID + { + static constexpr const char* name() {return "iE_ID_t";} + using parent_t = ProtocolIE_ID; + + }; + iE_ID_t& ref_iE_ID() {return iE_ID;} + iE_ID_t const& ref_iE_ID() const {return iE_ID;} + struct typeOfError_t : TypeOfError + { + static constexpr const char* name() {return "typeOfError_t";} + using parent_t = TypeOfError; + + }; + typeOfError_t& ref_typeOfError() {return typeOfError;} + typeOfError_t const& ref_typeOfError() const {return typeOfError;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + void clear() + { + iECriticality.clear(); + iE_ID.clear(); + typeOfError.clear(); + iE_Extensions.clear(); + + }; + private: + iECriticality_t iECriticality; + iE_ID_t iE_ID; + typeOfError_t typeOfError; + iE_Extensions_t iE_Extensions; + +}; +struct CriticalityDiagnostics_IE_List : asn::sequenceof +{ + static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "CriticalityDiagnostics";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + static constexpr bool optional = true; + + }; + procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;} + procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;} + struct triggeringMessage_t : TriggeringMessage + { + static constexpr const char* name() {return "triggeringMessage_t";} + using parent_t = TriggeringMessage; + static constexpr bool optional = true; + + }; + triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;} + triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;} + struct procedureCriticality_t : Criticality + { + static constexpr const char* name() {return "procedureCriticality_t";} + using parent_t = Criticality; + static constexpr bool optional = true; + + }; + procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;} + procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;} + struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List + { + static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";} + using parent_t = CriticalityDiagnostics_IE_List; + static constexpr bool optional = true; + + }; + iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;} + iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + void clear() + { + procedureCode.clear(); + triggeringMessage.clear(); + procedureCriticality.clear(); + iEsCriticalityDiagnostics.clear(); + iE_Extensions.clear(); + + }; + private: + procedureCode_t procedureCode; + triggeringMessage_t triggeringMessage; + procedureCriticality_t procedureCriticality; + iEsCriticalityDiagnostics_t iEsCriticalityDiagnostics; + iE_Extensions_t iE_Extensions; + +}; +/* +DL-Forwarding ::= ENUMERATED { + dL-forwardingProposed, + ... +} +*/ + +struct DL_Forwarding : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DL-Forwarding";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + dL_forwardingProposed + } index_t; + +}; + +/* +DL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct DL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) +*/ + +struct DataTrafficResources : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DataTrafficResources";} + using parent_t = asn::bstring<>; + +}; + +/* +DLResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct DLResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +DLResourcesULandDLSharing ::= CHOICE { +unchanged NULL, + changed DLResourceBitmapULandDLSharing, + ... +} +*/ + +struct DLResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DLResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DLResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : DLResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = DLResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +DRB-ID ::= INTEGER (1..32) +*/ + +struct DRB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DRB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULOnlySharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULOnlySharing ::= SEQUENCE{ + uLResourceBitmapULOnlySharing DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULOnlySharing : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULOnlySharing";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uLResourceBitmapULOnlySharing_t : DataTrafficResources + { + static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";} + using parent_t = DataTrafficResources; + + }; + uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;} + uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourceBitmapULOnlySharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing; + iE_Extensions_t iE_Extensions; + +}; +/* +ULResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct ULResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +ULResourcesULandDLSharing ::= CHOICE { + unchanged NULL, + changed ULResourceBitmapULandDLSharing, + ... +} +*/ + +struct ULResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ULResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ULResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : ULResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = ULResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULandDLSharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULandDLSharing ::= SEQUENCE{ + uLResourcesULandDLSharing ULResourcesULandDLSharing, + dLResourcesULandDLSharing DLResourcesULandDLSharing, + iE-Extensions ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULandDLSharing : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ULandDLSharing";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing + { + static constexpr const char* name() {return "uLResourcesULandDLSharing_t";} + using parent_t = ULResourcesULandDLSharing; + + }; + uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;} + uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;} + struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing + { + static constexpr const char* name() {return "dLResourcesULandDLSharing_t";} + using parent_t = DLResourcesULandDLSharing; + + }; + dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;} + dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourcesULandDLSharing.clear(); + dLResourcesULandDLSharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourcesULandDLSharing_t uLResourcesULandDLSharing; + dLResourcesULandDLSharing_t dLResourcesULandDLSharing; + iE_Extensions_t iE_Extensions; + +}; +/* +SharedResourceType ::= CHOICE{ + uLOnlySharing ULOnlySharing, + uLandDLSharing ULandDLSharing, + ... +} +*/ + +struct SharedResourceType : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SharedResourceType";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SharedResourceType() {clear();} + struct uLOnlySharing_t : ULOnlySharing + { + static constexpr const char* name() {return "uLOnlySharing_t";} + using parent_t = ULOnlySharing; + + }; + struct uLandDLSharing_t : ULandDLSharing + { + static constexpr const char* name() {return "uLandDLSharing_t";} + using parent_t = ULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(uLOnlySharing_t)]; + char dummy2[sizeof(uLandDLSharing_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...} +*/ + +struct SubframeType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SubframeType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + mbsfn + ,nonmbsfn + } index_t; + +}; + +/* +ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ReservedSubframePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ReservedSubframePattern ::= SEQUENCE{ + subframeType SubframeType, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mBSFNControlRegionLength INTEGER (0..3), + iE-Extensions ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ReservedSubframePattern : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ReservedSubframePattern";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct subframeType_t : SubframeType + { + static constexpr const char* name() {return "subframeType_t";} + using parent_t = SubframeType; + + }; + subframeType_t& ref_subframeType() {return subframeType;} + subframeType_t const& ref_subframeType() const {return subframeType;} + struct reservedSubframePattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = asn::bstring<>; + + }; + + reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;} + reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + + }; + + mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + void clear() + { + subframeType.clear(); + reservedSubframePattern.clear(); + mBSFNControlRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + subframeType_t subframeType; + reservedSubframePattern_t reservedSubframePattern; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DataTrafficResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN INTEGER (0..1023), + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, +... +} +*/ + +struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "DataTrafficResourceIndication";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct sharedResourceType_t : SharedResourceType + { + static constexpr const char* name() {return "sharedResourceType_t";} + using parent_t = SharedResourceType; + + }; + sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;} + sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;} + struct reservedSubframePattern_t : ReservedSubframePattern + { + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = ReservedSubframePattern; + static constexpr bool optional = true; + + }; + reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;} + reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + sharedResourceType.clear(); + reservedSubframePattern.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + sharedResourceType_t sharedResourceType; + reservedSubframePattern_t reservedSubframePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +DeactivationIndication::= ENUMERATED { + deactivated, + ... +} +*/ + +struct DeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + deactivated + } index_t; + +}; + +/* +DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DeliveryStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DeliveryStatus ::= SEQUENCE { + highestSuccessDeliveredPDCPSN INTEGER (0..4095), + iE-Extensions ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DeliveryStatus : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "DeliveryStatus";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct highestSuccessDeliveredPDCPSN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";} + using parent_t = asn::integer<>; + + }; + + highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;} + highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + void clear() + { + highestSuccessDeliveredPDCPSN.clear(); + iE_Extensions.clear(); + + }; + private: + highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN; + iE_Extensions_t iE_Extensions; + +}; +/* +DuplicationActivation::= ENUMERATED {active, inactive, ...} +*/ + +struct DuplicationActivation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "DuplicationActivation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + active + ,inactive + } index_t; + +}; + +/* +PA-Values ::= ENUMERATED { + dB-6, + dB-4dot77, + dB-3, + dB-1dot77, + dB0, + dB1, + dB2, + dB3, + ... +} +*/ + +struct PA_Values : asn::enumerated<8, 0, true> +{ + static constexpr const char* name() {return "PA-Values";} + using parent_t = asn::enumerated<8, 0, true>; + typedef enum { + dB_6 + ,dB_4dot77 + ,dB_3 + ,dB_1dot77 + ,dB0 + ,dB1 + ,dB2 + ,dB3 + } index_t; + +}; + +/* +DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DynamicNAICSInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DynamicNAICSInformation ::= SEQUENCE { + transmissionModes BIT STRING (SIZE(8)) OPTIONAL, + pB-information INTEGER(0..3) OPTIONAL, + pA-list SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values, + iE-Extensions ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "DynamicNAICSInformation";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct transmissionModes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "transmissionModes_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;} + transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;} + struct pB_information_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pB_information_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;} + pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;} + struct pA_list_t_elm : PA_Values + { + static constexpr const char* name() {return "pA_list_t_elm";} + using parent_t = PA_Values; + + }; + struct pA_list_t : asn::sequenceof + { + static constexpr const char* name() {return "pA_list_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + pA_list_t& ref_pA_list() {return pA_list;} + pA_list_t const& ref_pA_list() const {return pA_list;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + void clear() + { + transmissionModes.clear(); + pB_information.clear(); + pA_list.clear(); + iE_Extensions.clear(); + + }; + private: + transmissionModes_t transmissionModes; + pB_information_t pB_information; + pA_list_t pA_list; + iE_Extensions_t iE_Extensions; + +}; +/* +DynamicDLTransmissionInformation ::= CHOICE { + naics-active DynamicNAICSInformation, + naics-inactive NULL, + ... +} +*/ + +struct DynamicDLTransmissionInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DynamicDLTransmissionInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DynamicDLTransmissionInformation() {clear();} + struct naics_active_t : DynamicNAICSInformation + { + static constexpr const char* name() {return "naics_active_t";} + using parent_t = DynamicNAICSInformation; + + }; + struct naics_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "naics_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as();} return nullptr; } + naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(naics_active_t)]; + char dummy2[sizeof(naics_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RAB-ID ::= INTEGER (0..15, ...) +*/ + +struct E_RAB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "E-RAB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RAB_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RAB-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RAB_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(id_E_RAB_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RAB_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RAB_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RAB_Item& select_id_E_RAB_Item() { return set(1); } + E_RAB_Item const* get_id_E_RAB_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RAB_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RAB_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +QCI ::= INTEGER (0..255) +*/ + +struct QCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "QCI";} + using parent_t = asn::integer<>; + +}; + +/* +ExtendedBitRate ::= INTEGER (10000000001..4000000000000,...) +*/ + +struct ExtendedBitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ExtendedBitRate";} + using parent_t = asn::integer<>; + +}; + +/* +GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for maximum bitrate > 10Gbps -- + { ID id-extended-e-RAB-MaximumBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-MaximumBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct GBR_QosInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; } + else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateDL);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set(1); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get(1); } + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set(2); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get(2); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set(3); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get(3); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set(4); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_e_RAB_MaximumBitrateDL()); return true; + case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true; + case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true; + case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GBR_QosInformation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "GBR-QosInformation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_MaximumBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;} + e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;} + struct e_RAB_MaximumBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;} + e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;} + struct e_RAB_GuaranteedBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;} + e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;} + struct e_RAB_GuaranteedBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;} + e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_MaximumBitrateDL.clear(); + e_RAB_MaximumBitrateUL.clear(); + e_RAB_GuaranteedBitrateDL.clear(); + e_RAB_GuaranteedBitrateUL.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_MaximumBitrateDL_t e_RAB_MaximumBitrateDL; + e_RAB_MaximumBitrateUL_t e_RAB_MaximumBitrateUL; + e_RAB_GuaranteedBitrateDL_t e_RAB_GuaranteedBitrateDL; + e_RAB_GuaranteedBitrateUL_t e_RAB_GuaranteedBitrateUL; + iE_Extensions_t iE_Extensions; + +}; +/* +Packet-LossRate ::= INTEGER(0..1000) +*/ + +struct Packet_LossRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Packet-LossRate";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance – + { ID id-DownlinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}| + { ID id-UplinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;} + void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DownlinkPacketLossRate)) { type = 1; return true; } + else if(equal(id_UplinkPacketLossRate)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DownlinkPacketLossRate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(ignore); type=1;} + void select_id_UplinkPacketLossRate() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Packet_LossRate& select_id_DownlinkPacketLossRate() { return set(1); } + Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get(1); } + Packet_LossRate& select_id_UplinkPacketLossRate() { return set(2); } + Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DownlinkPacketLossRate()); return true; + case 2: v(select_id_UplinkPacketLossRate()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Packet_LossRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(optional); type=1;} + void select_id_UplinkPacketLossRate() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Level-QoS-Parameters ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct qCI_t : QCI + { + static constexpr const char* name() {return "qCI_t";} + using parent_t = QCI; + + }; + qCI_t& ref_qCI() {return qCI;} + qCI_t const& ref_qCI() const {return qCI;} + struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority + { + static constexpr const char* name() {return "allocationAndRetentionPriority_t";} + using parent_t = AllocationAndRetentionPriority; + + }; + allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;} + allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;} + struct gbrQosInformation_t : GBR_QosInformation + { + static constexpr const char* name() {return "gbrQosInformation_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;} + gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + void clear() + { + qCI.clear(); + allocationAndRetentionPriority.clear(); + gbrQosInformation.clear(); + iE_Extensions.clear(); + + }; + private: + qCI_t qCI; + allocationAndRetentionPriority_t allocationAndRetentionPriority; + gbrQosInformation_t gbrQosInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } +*/ + +struct E_RAB_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RAB_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RAB_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RAB-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..4294967295), + usageCountDL INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABUsageReport-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct startTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;} + startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;} + struct endTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "endTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;} + endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;} + struct usageCountUL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountUL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountUL_t& ref_usageCountUL() {return usageCountUL;} + usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;} + struct usageCountDL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountDL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountDL_t& ref_usageCountDL() {return usageCountDL;} + usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + void clear() + { + startTimeStamp.clear(); + endTimeStamp.clear(); + usageCountUL.clear(); + usageCountDL.clear(); + iE_Extensions.clear(); + + }; + private: + startTimeStamp_t startTimeStamp; + endTimeStamp_t endTimeStamp; + usageCountUL_t usageCountUL; + usageCountDL_t usageCountDL; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABUsageReport-Item CRITICALITY ignore TYPE E-RABUsageReport-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(id_E_RABUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set(1); } + E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} } +*/ + +struct E_RABUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +EARFCN ::= INTEGER (0..maxEARFCN) +*/ + +struct EARFCN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCN";} + using parent_t = asn::integer<>; + +}; + +/* +EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...) +*/ + +struct EARFCNExtension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCNExtension";} + using parent_t = asn::integer<>; + +}; + +/* +EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EN_DC_ResourceConfigurationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EN-DC-ResourceConfiguration ::= SEQUENCE { + pDCPatSgNB ENUMERATED {present, not-present, ...}, + mCGresources ENUMERATED {present, not-present, ...}, + sCGresources ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} } OPTIONAL, + ... +} +*/ + +struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "EN-DC-ResourceConfiguration";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct pDCPatSgNB_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "pDCPatSgNB_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;} + pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;} + struct mCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "mCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + mCGresources_t& ref_mCGresources() {return mCGresources;} + mCGresources_t const& ref_mCGresources() const {return mCGresources;} + struct sCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "sCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + sCGresources_t& ref_sCGresources() {return sCGresources;} + sCGresources_t const& ref_sCGresources() const {return sCGresources;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + void clear() + { + pDCPatSgNB.clear(); + mCGresources.clear(); + sCGresources.clear(); + iE_Extensions.clear(); + + }; + private: + pDCPatSgNB_t pDCPatSgNB; + mCGresources_t mCGresources; + sCGresources_t sCGresources; + iE_Extensions_t iE_Extensions; + +}; +/* +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)) +} +*/ + +struct ENB_ID : asn::choice<4, 2, true> +{ + static constexpr const char* name() {return "ENB-ID";} + using parent_t = asn::choice<4, 2, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~ENB_ID() {clear();} + struct macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct home_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "home_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct short_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "short_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct long_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "long_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as();} return nullptr; } + short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as();} return nullptr; } + long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(macro_eNB_ID_t)]; + char dummy2[sizeof(home_eNB_ID_t)]; + char dummy3[sizeof(short_Macro_eNB_ID_t)]; + char dummy4[sizeof(long_Macro_eNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity +*/ + +struct EPLMNs_elm : PLMN_Identity +{ + static constexpr const char* name() {return "EPLMNs_elm";} + using parent_t = PLMN_Identity; + +}; +struct EPLMNs : asn::sequenceof +{ + static constexpr const char* name() {return "EPLMNs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} +*/ + +struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "UserPlaneTrafficActivityReport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + inactive + ,re_activated + } index_t; + +}; + +/* +ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ERABActivityNotifyItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ERABActivityNotifyItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + activityReport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ERABActivityNotifyItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct activityReport_t : UserPlaneTrafficActivityReport + { + static constexpr const char* name() {return "activityReport_t";} + using parent_t = UserPlaneTrafficActivityReport; + + }; + activityReport_t& ref_activityReport() {return activityReport;} + activityReport_t const& ref_activityReport() const {return activityReport;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + activityReport.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + activityReport_t activityReport; + iE_Extensions_t iE_Extensions; + +}; +/* +ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem +*/ + +struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";} + using parent_t = ERABActivityNotifyItem; + +}; +struct ERABActivityNotifyItemList : asn::sequenceof +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ..., + bw1 +} +*/ + +struct Transmission_Bandwidth : asn::enumerated<7, 1, true> +{ + static constexpr const char* name() {return "Transmission-Bandwidth";} + using parent_t = asn::enumerated<7, 1, true>; + typedef enum { + bw6 + ,bw15 + ,bw25 + ,bw50 + ,bw75 + ,bw100 + ,bw1 + } index_t; + +}; + +/* +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ... +} +*/ + +struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true> +{ + static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";} + using parent_t = asn::enumerated<21, 0, true>; + typedef enum { + minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,minusZeroDotFive + ,zero + ,one + ,two + ,three + ,four + ,five + ,six + ,seven + ,eight + ,nine + } index_t; + +}; + +/* +NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...} +*/ + +struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NRS-NSSS-PowerOffset";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + minusThree + ,zero + ,three + } index_t; + +}; + +/* +NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...} +*/ + +struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + two + ,four + ,eight + } index_t; + +}; + +/* +FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| + { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, + ... +} +*/ + +struct FDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;} + void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UL_EARFCNExtension)) { type = 1; return true; } + else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; } + else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; } + else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UL_EARFCNExtension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(reject); type=1;} + void select_id_DL_EARFCNExtension() { set(reject); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EARFCNExtension& select_id_UL_EARFCNExtension() { return set(1); } + EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get(1); } + EARFCNExtension& select_id_DL_EARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get(2); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set(3); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get(3); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set(4); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get(4); } + NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set(5); } + NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get(5); } + NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set(6); } + NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UL_EARFCNExtension()); return true; + case 2: v(select_id_DL_EARFCNExtension()); return true; + case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true; + case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true; + case 5: v(select_id_NRS_NSSS_PowerOffset()); return true; + case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(NRS_NSSS_PowerOffset)]; + char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)]; + char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(optional); type=1;} + void select_id_DL_EARFCNExtension() { set(optional); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-Info ::= SEQUENCE { + uL-EARFCN EARFCN, + dL-EARFCN EARFCN, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct uL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "uL_EARFCN_t";} + using parent_t = EARFCN; + + }; + uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;} + uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;} + struct dL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "dL_EARFCN_t";} + using parent_t = EARFCN; + + }; + dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;} + dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;} + struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;} + uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;} + struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;} + dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + void clear() + { + uL_EARFCN.clear(); + dL_EARFCN.clear(); + uL_Transmission_Bandwidth.clear(); + dL_Transmission_Bandwidth.clear(); + iE_Extensions.clear(); + + }; + private: + uL_EARFCN_t uL_EARFCN; + dL_EARFCN_t dL_EARFCN; + uL_Transmission_Bandwidth_t uL_Transmission_Bandwidth; + dL_Transmission_Bandwidth_t dL_Transmission_Bandwidth; + iE_Extensions_t iE_Extensions; + +}; +/* +SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} +*/ + +struct SubframeAssignment : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "SubframeAssignment";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sa0 + ,sa1 + ,sa2 + ,sa3 + ,sa4 + ,sa5 + ,sa6 + } index_t; + +}; + +/* +SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ... +} +*/ + +struct SpecialSubframePatterns : asn::enumerated<9, 0, true> +{ + static constexpr const char* name() {return "SpecialSubframePatterns";} + using parent_t = asn::enumerated<9, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + } index_t; + +}; + +/* +SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns SpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct specialSubframePatterns_t : SpecialSubframePatterns + { + static constexpr const char* name() {return "specialSubframePatterns_t";} + using parent_t = SpecialSubframePatterns; + + }; + specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;} + specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + specialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + specialSubframePatterns_t specialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}, + ... +} +*/ + +struct TDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_AdditionalSpecialSubframe_Info)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframe_Info);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set(1); } + AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set(3); } + AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_AdditionalSpecialSubframe_Info()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)]; + char dummy2[sizeof(AdditionalSpecialSubframe_Info)]; + char dummy3[sizeof(EARFCNExtension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-Info ::= SEQUENCE { + eARFCN EARFCN, + transmission-Bandwidth Transmission-Bandwidth, + subframeAssignment SubframeAssignment, + specialSubframe-Info SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;} + transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;} + struct subframeAssignment_t : SubframeAssignment + { + static constexpr const char* name() {return "subframeAssignment_t";} + using parent_t = SubframeAssignment; + + }; + subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;} + subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;} + struct specialSubframe_Info_t : SpecialSubframe_Info + { + static constexpr const char* name() {return "specialSubframe_Info_t";} + using parent_t = SpecialSubframe_Info; + + }; + specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;} + specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + void clear() + { + eARFCN.clear(); + transmission_Bandwidth.clear(); + subframeAssignment.clear(); + specialSubframe_Info.clear(); + iE_Extensions.clear(); + + }; + private: + eARFCN_t eARFCN; + transmission_Bandwidth_t transmission_Bandwidth; + subframeAssignment_t subframeAssignment; + specialSubframe_Info_t specialSubframe_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +EUTRA-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + ... +} +*/ + +struct EUTRA_Mode_Info : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "EUTRA-Mode-Info";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~EUTRA_Mode_Info() {clear();} + struct fDD_t : FDD_Info + { + static constexpr const char* name() {return "fDD_t";} + using parent_t = FDD_Info; + + }; + struct tDD_t : TDD_Info + { + static constexpr const char* name() {return "tDD_t";} + using parent_t = TDD_Info; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fDD_t)]; + char dummy2[sizeof(tDD_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANTraceID ::= OCTET STRING (SIZE (8)) +*/ + +struct EUTRANTraceID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANTraceID";} + using parent_t = asn::ostring<>; + +}; + +/* +EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct EncryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EncryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +RNTP-Threshold ::= ENUMERATED { + minusInfinity, + minusEleven, + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + zero, + one, + two, + three, + ... +} +*/ + +struct RNTP_Threshold : asn::enumerated<16, 0, true> +{ + static constexpr const char* name() {return "RNTP-Threshold";} + using parent_t = asn::enumerated<16, 0, true>; + typedef enum { + minusInfinity + ,minusEleven + ,minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,zero + ,one + ,two + ,three + } index_t; + +}; + +/* +EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTPStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTPStartTime ::= SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "EnhancedRNTPStartTime";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +/* +EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTP_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTP ::= SEQUENCE { + enhancedRNTPBitmap BIT STRING (SIZE(12..8800, ...)), + rNTP-High-Power-Threshold RNTP-Threshold, + enhancedRNTPStartTime EnhancedRNTPStartTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct EnhancedRNTP : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "EnhancedRNTP";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct enhancedRNTPBitmap_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "enhancedRNTPBitmap_t";} + using parent_t = asn::bstring<>; + + }; + + enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;} + enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;} + struct rNTP_High_Power_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;} + rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;} + struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime + { + static constexpr const char* name() {return "enhancedRNTPStartTime_t";} + using parent_t = EnhancedRNTPStartTime; + static constexpr bool optional = true; + + }; + enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;} + enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + void clear() + { + enhancedRNTPBitmap.clear(); + rNTP_High_Power_Threshold.clear(); + enhancedRNTPStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + enhancedRNTPBitmap_t enhancedRNTPBitmap; + rNTP_High_Power_Threshold_t rNTP_High_Power_Threshold; + enhancedRNTPStartTime_t enhancedRNTPStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +EventType ::= ENUMERATED{ + change-of-serving-cell, + ... +} +*/ + +struct EventType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "EventType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + change_of_serving_cell + } index_t; + +}; + +/* +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedActivityPeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedActivityPeriod";} + using parent_t = asn::integer<>; + +}; + +/* +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} +*/ + +struct ExpectedHOInterval : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "ExpectedHOInterval";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sec15 + ,sec30 + ,sec60 + ,sec90 + ,sec120 + ,sec180 + ,long_time + } index_t; + +}; + +/* +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedIdlePeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedIdlePeriod";} + using parent_t = asn::integer<>; + +}; + +/* +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} +*/ + +struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + subscription_information + ,statistics + } index_t; + +}; + +/* +ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEActivityBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ExpectedUEActivityBehaviour";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct expectedActivityPeriod_t : ExpectedActivityPeriod + { + static constexpr const char* name() {return "expectedActivityPeriod_t";} + using parent_t = ExpectedActivityPeriod; + static constexpr bool optional = true; + + }; + expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;} + expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;} + struct expectedIdlePeriod_t : ExpectedIdlePeriod + { + static constexpr const char* name() {return "expectedIdlePeriod_t";} + using parent_t = ExpectedIdlePeriod; + static constexpr bool optional = true; + + }; + expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;} + expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;} + struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation + { + static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";} + using parent_t = SourceOfUEActivityBehaviourInformation; + static constexpr bool optional = true; + + }; + sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;} + sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + void clear() + { + expectedActivityPeriod.clear(); + expectedIdlePeriod.clear(); + sourceofUEActivityBehaviourInformation.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivityPeriod_t expectedActivityPeriod; + expectedIdlePeriod_t expectedIdlePeriod; + sourceofUEActivityBehaviourInformation_t sourceofUEActivityBehaviourInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEBehaviour ::= SEQUENCE { + expectedActivity ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ExpectedUEBehaviour";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct expectedActivity_t : ExpectedUEActivityBehaviour + { + static constexpr const char* name() {return "expectedActivity_t";} + using parent_t = ExpectedUEActivityBehaviour; + static constexpr bool optional = true; + + }; + expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;} + expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;} + struct expectedHOInterval_t : ExpectedHOInterval + { + static constexpr const char* name() {return "expectedHOInterval_t";} + using parent_t = ExpectedHOInterval; + static constexpr bool optional = true; + + }; + expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;} + expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + void clear() + { + expectedActivity.clear(); + expectedHOInterval.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivity_t expectedActivity; + expectedHOInterval_t expectedHOInterval; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-InterferenceOverloadIndication-Item ::= ENUMERATED { + high-interference, + medium-interference, + low-interference, + ... +} +*/ + +struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + high_interference + ,medium_interference + ,low_interference + } index_t; + +}; + +/* +UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item +*/ + +struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item +{ + static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";} + using parent_t = UL_InterferenceOverloadIndication_Item; + +}; +struct UL_InterferenceOverloadIndication : asn::sequenceof +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExtendedULInterferenceOverloadInfo ::= SEQUENCE { + associatedSubframes BIT STRING (SIZE (5)), + extended-ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication, + iE-Extensions ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct associatedSubframes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "associatedSubframes_t";} + using parent_t = asn::bstring<>; + + }; + + associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;} + associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;} + struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + + }; + extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;} + extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + void clear() + { + associatedSubframes.clear(); + extended_ul_InterferenceOverloadIndication.clear(); + iE_Extensions.clear(); + + }; + private: + associatedSubframes_t associatedSubframes; + extended_ul_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +FiveGS-TAC ::= OCTET STRING (SIZE (3)) +*/ + +struct FiveGS_TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FiveGS-TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenInterRATs ::= ENUMERATED { + all, + geran, + utran, + cdma2000, + ..., + geranandutran, + cdma2000andutran + +} +*/ + +struct ForbiddenInterRATs : asn::enumerated<6, 2, true> +{ + static constexpr const char* name() {return "ForbiddenInterRATs";} + using parent_t = asn::enumerated<6, 2, true>; + typedef enum { + all + ,geran + ,utran + ,cdma2000 + ,geranandutran + ,cdma2000andutran + } index_t; + +}; + +/* +LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) +*/ + +struct LAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC +*/ + +struct ForbiddenLACs_elm : LAC +{ + static constexpr const char* name() {return "ForbiddenLACs_elm";} + using parent_t = LAC; + +}; +struct ForbiddenLACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenLAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenLAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenLACs ForbiddenLACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenLAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenLACs_t : ForbiddenLACs + { + static constexpr const char* name() {return "forbiddenLACs_t";} + using parent_t = ForbiddenLACs; + + }; + forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;} + forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenLACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenLACs_t forbiddenLACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item +*/ + +struct ForbiddenLAs_elm : ForbiddenLAs_Item +{ + static constexpr const char* name() {return "ForbiddenLAs_elm";} + using parent_t = ForbiddenLAs_Item; + +}; +struct ForbiddenLAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC +*/ + +struct ForbiddenTACs_elm : TAC +{ + static constexpr const char* name() {return "ForbiddenTACs_elm";} + using parent_t = TAC; + +}; +struct ForbiddenTACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenTAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenTAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenTAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenTACs_t : ForbiddenTACs + { + static constexpr const char* name() {return "forbiddenTACs_t";} + using parent_t = ForbiddenTACs; + + }; + forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;} + forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenTACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenTACs_t forbiddenTACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item +*/ + +struct ForbiddenTAs_elm : ForbiddenTAs_Item +{ + static constexpr const char* name() {return "ForbiddenTAs_elm";} + using parent_t = ForbiddenTAs_Item; + +}; +struct ForbiddenTAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Fourframes ::= BIT STRING (SIZE (24)) +*/ + +struct Fourframes : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Fourframes";} + using parent_t = asn::bstring<>; + +}; + +/* +FreqBandIndicatorPriority ::= ENUMERATED { + not-broadcasted, + broadcasted, + ... +} +*/ + +struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "FreqBandIndicatorPriority";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_broadcasted + ,broadcasted + } index_t; + +}; + +/* +SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SupportedSULFreqBandItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "SupportedSULFreqBandItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + iE_Extensions_t iE_Extensions; + +}; +/* +FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FreqBandNrItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FreqBandNrItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FreqBandNrItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct supportedSULBandList_t_elm : SupportedSULFreqBandItem + { + static constexpr const char* name() {return "supportedSULBandList_t_elm";} + using parent_t = SupportedSULFreqBandItem; + + }; + struct supportedSULBandList_t : asn::sequenceof + { + static constexpr const char* name() {return "supportedSULBandList_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;} + supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + supportedSULBandList.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + supportedSULBandList_t supportedSULBandList; + iE_Extensions_t iE_Extensions; + +}; +/* +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE (22..32)), + ... +} +*/ + +struct GNB_ID : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "GNB-ID";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~GNB_ID() {clear();} + struct gNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(gNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...} +*/ + +struct GNBOverloadInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "GNBOverloadInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + overloaded + ,not_overloaded + } index_t; + +}; + +/* +GTP-TEI ::= OCTET STRING (SIZE (4)) +*/ + +struct GTP_TEI : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "GTP-TEI";} + using parent_t = asn::ostring<>; + +}; + +/* +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TransportLayerAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TransportLayerAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GTPtunnelEndpoint_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GTPtunnelEndpoint ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEI, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GTPtunnelEndpoint";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct gTP_TEID_t : GTP_TEI + { + static constexpr const char* name() {return "gTP_TEID_t";} + using parent_t = GTP_TEI; + + }; + gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;} + gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + gTP_TEID.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + gTP_TEID_t gTP_TEID; + iE_Extensions_t iE_Extensions; + +}; +/* +MME-Group-ID ::= OCTET STRING (SIZE (2)) +*/ + +struct MME_Group_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Group-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GU_Group_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GU-Group-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mME-Group-ID MME-Group-ID, + iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GU_Group_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GU-Group-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct mME_Group_ID_t : MME_Group_ID + { + static constexpr const char* name() {return "mME_Group_ID_t";} + using parent_t = MME_Group_ID; + + }; + mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;} + mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + mME_Group_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + mME_Group_ID_t mME_Group_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID +*/ + +struct GUGroupIDList_elm : GU_Group_ID +{ + static constexpr const char* name() {return "GUGroupIDList_elm";} + using parent_t = GU_Group_ID; + +}; +struct GUGroupIDList : asn::sequenceof +{ + static constexpr const char* name() {return "GUGroupIDList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MME-Code ::= OCTET STRING (SIZE (1)) +*/ + +struct MME_Code : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Code";} + using parent_t = asn::ostring<>; + +}; + +/* +GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GUMMEI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GUMMEI ::= SEQUENCE { + + gU-Group-ID GU-Group-ID, + mME-Code MME-Code, + iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GUMMEI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GUMMEI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct gU_Group_ID_t : GU_Group_ID + { + static constexpr const char* name() {return "gU_Group_ID_t";} + using parent_t = GU_Group_ID; + + }; + gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;} + gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;} + struct mME_Code_t : MME_Code + { + static constexpr const char* name() {return "mME_Code_t";} + using parent_t = MME_Code; + + }; + mME_Code_t& ref_mME_Code() {return mME_Code;} + mME_Code_t const& ref_mME_Code() const {return mME_Code;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + void clear() + { + gU_Group_ID.clear(); + mME_Code.clear(); + iE_Extensions.clear(); + + }; + private: + gU_Group_ID_t gU_Group_ID; + mME_Code_t mME_Code; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalENB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalENB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalENB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalENB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eNB_ID_t : ENB_ID + { + static constexpr const char* name() {return "eNB_ID_t";} + using parent_t = ENB_ID; + + }; + eNB_ID_t& ref_eNB_ID() {return eNB_ID;} + eNB_ID_t const& ref_eNB_ID() const {return eNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eNB_ID_t eNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalGNB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalGNB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalGNB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalGNB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct gNB_ID_t : GNB_ID + { + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = GNB_ID; + + }; + gNB_ID_t& ref_gNB_ID() {return gNB_ID;} + gNB_ID_t const& ref_gNB_ID() const {return gNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + gNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + gNB_ID_t gNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +LoadIndicator ::= ENUMERATED { + lowLoad, + mediumLoad, + highLoad, + overLoad, + ... +} +*/ + +struct LoadIndicator : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "LoadIndicator";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + lowLoad + ,mediumLoad + ,highLoad + ,overLoad + } index_t; + +}; + +/* +HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct HWLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HWLoadIndicator ::= SEQUENCE { + dLHWLoadIndicator LoadIndicator, + uLHWLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HWLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "HWLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;} + dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;} + struct uLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;} + uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLHWLoadIndicator.clear(); + uLHWLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLHWLoadIndicator_t dLHWLoadIndicator; + uLHWLoadIndicator_t uLHWLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + ..., + interRATpingpong +} +*/ + +struct HandoverReportType : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "HandoverReportType";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + hoTooEarly + ,hoToWrongCell + ,interRATpingpong + } index_t; + +}; + +/* +NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED { + nRrestrictedinEPSasSecondaryRAT, + ... +} +*/ + +struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedinEPSasSecondaryRAT + } index_t; + +}; + +/* +NRrestrictionin5GS ::= ENUMERATED { + nRrestrictedin5GS, + ... +} +*/ + +struct NRrestrictionin5GS : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictionin5GS";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedin5GS + } index_t; + +}; + +/* +HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRrestrictioninEPSasSecondaryRAT CRITICALITY ignore EXTENSION NRrestrictioninEPSasSecondaryRAT PRESENCE optional}| + { ID id-CNTypeRestrictions CRITICALITY ignore EXTENSION CNTypeRestrictions PRESENCE optional}| + { ID id-NRrestrictionin5GS CRITICALITY ignore EXTENSION NRrestrictionin5GS PRESENCE optional}, + ... +} +*/ + +struct HandoverRestrictionList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;} + void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;} + void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; } + else if(equal(id_CNTypeRestrictions)) { type = 2; return true; } + else if(equal(id_NRrestrictionin5GS)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRrestrictioninEPSasSecondaryRAT);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;} + void select_id_CNTypeRestrictions() { set(ignore); type=2;} + void select_id_NRrestrictionin5GS() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set(1); } + NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get(1); } + CNTypeRestrictions& select_id_CNTypeRestrictions() { return set(2); } + CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get(2); } + NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set(3); } + NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRrestrictioninEPSasSecondaryRAT()); return true; + case 2: v(select_id_CNTypeRestrictions()); return true; + case 3: v(select_id_NRrestrictionin5GS()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CNTypeRestrictions)]; + char dummy2[sizeof(NRrestrictionin5GS)]; + char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;} + void select_id_CNTypeRestrictions() { set(optional); type=2;} + void select_id_NRrestrictionin5GS() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRestrictionList ::= SEQUENCE { + servingPLMN PLMN-Identity, + equivalentPLMNs EPLMNs OPTIONAL, + forbiddenTAs ForbiddenTAs OPTIONAL, + forbiddenLAs ForbiddenLAs OPTIONAL, + forbiddenInterRATs ForbiddenInterRATs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HandoverRestrictionList : asn::sequence<6, 0, true, 5> +{ + static constexpr const char* name() {return "HandoverRestrictionList";} + using parent_t = asn::sequence<6, 0, true, 5>; + struct servingPLMN_t : PLMN_Identity + { + static constexpr const char* name() {return "servingPLMN_t";} + using parent_t = PLMN_Identity; + + }; + servingPLMN_t& ref_servingPLMN() {return servingPLMN;} + servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;} + struct equivalentPLMNs_t : EPLMNs + { + static constexpr const char* name() {return "equivalentPLMNs_t";} + using parent_t = EPLMNs; + static constexpr bool optional = true; + + }; + equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;} + equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;} + struct forbiddenTAs_t : ForbiddenTAs + { + static constexpr const char* name() {return "forbiddenTAs_t";} + using parent_t = ForbiddenTAs; + static constexpr bool optional = true; + + }; + forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;} + forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;} + struct forbiddenLAs_t : ForbiddenLAs + { + static constexpr const char* name() {return "forbiddenLAs_t";} + using parent_t = ForbiddenLAs; + static constexpr bool optional = true; + + }; + forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;} + forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;} + struct forbiddenInterRATs_t : ForbiddenInterRATs + { + static constexpr const char* name() {return "forbiddenInterRATs_t";} + using parent_t = ForbiddenInterRATs; + static constexpr bool optional = true; + + }; + forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;} + forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + void clear() + { + servingPLMN.clear(); + equivalentPLMNs.clear(); + forbiddenTAs.clear(); + forbiddenLAs.clear(); + forbiddenInterRATs.clear(); + iE_Extensions.clear(); + + }; + private: + servingPLMN_t servingPLMN; + equivalentPLMNs_t equivalentPLMNs; + forbiddenTAs_t forbiddenTAs; + forbiddenLAs_t forbiddenLAs; + forbiddenInterRATs_t forbiddenInterRATs; + iE_Extensions_t iE_Extensions; + +}; +/* +IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct IntegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "IntegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +InterfacesToTrace ::= BIT STRING (SIZE (8)) +*/ + +struct InterfacesToTrace : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "InterfacesToTrace";} + using parent_t = asn::bstring<>; + +}; + +/* +InvokeIndication ::= ENUMERATED{ + abs-information, + ..., + naics-information-start, + naics-information-stop +} +*/ + +struct InvokeIndication : asn::enumerated<3, 2, true> +{ + static constexpr const char* name() {return "InvokeIndication";} + using parent_t = asn::enumerated<3, 2, true>; + typedef enum { + abs_information + ,naics_information_start + ,naics_information_stop + } index_t; + +}; + +/* +LCID ::= INTEGER(1..32, ...) +*/ + +struct LCID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LCID";} + using parent_t = asn::integer<>; + +}; + +/* +LHN-ID ::= OCTET STRING(SIZE (32..256)) +*/ + +struct LHN_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LHN-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +Time-UE-StayedInCell ::= INTEGER (0..4095) +*/ + +struct Time_UE_StayedInCell : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell";} + using parent_t = asn::integer<>; + +}; + +/* +Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) +*/ + +struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";} + using parent_t = asn::integer<>; + +}; + +/* +LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- + { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| + { ID id-HO-cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;} + void select_id_HO_cause() { set(id_HO_cause); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; } + else if(equal(id_HO_cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Time_UE_StayedInCell_EnhancedGranularity);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;} + void select_id_HO_cause() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set(1); } + Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get(1); } + Cause& select_id_HO_cause() { return set(2); } + Cause const* get_id_HO_cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Time_UE_StayedInCell_EnhancedGranularity()); return true; + case 2: v(select_id_HO_cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;} + void select_id_HO_cause() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LastVisitedEUTRANCellInformation ::= SEQUENCE { + global-Cell-ID ECGI, + cellType CellType, + time-UE-StayedInCell Time-UE-StayedInCell, + iE-Extensions ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct global_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "global_Cell_ID_t";} + using parent_t = ECGI; + + }; + global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;} + global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;} + struct cellType_t : CellType + { + static constexpr const char* name() {return "cellType_t";} + using parent_t = CellType; + + }; + cellType_t& ref_cellType() {return cellType;} + cellType_t const& ref_cellType() const {return cellType;} + struct time_UE_StayedInCell_t : Time_UE_StayedInCell + { + static constexpr const char* name() {return "time_UE_StayedInCell_t";} + using parent_t = Time_UE_StayedInCell; + + }; + time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;} + time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + void clear() + { + global_Cell_ID.clear(); + cellType.clear(); + time_UE_StayedInCell.clear(); + iE_Extensions.clear(); + + }; + private: + global_Cell_ID_t global_Cell_ID; + cellType_t cellType; + time_UE_StayedInCell_t time_UE_StayedInCell; + iE_Extensions_t iE_Extensions; + +}; +/* +LastVisitedUTRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedUTRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedUTRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedGERANCellInformation ::= CHOICE { + undefined NULL, + ... +} +*/ + +struct LastVisitedGERANCellInformation : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "LastVisitedGERANCellInformation";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~LastVisitedGERANCellInformation() {clear();} + struct undefined_t : asn::nulltype + { + static constexpr const char* name() {return "undefined_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(undefined_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +LastVisitedNGRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedNGRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedNGRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedCell-Item ::= CHOICE { + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + ..., + nG-RAN-Cell LastVisitedNGRANCellInformation +} +*/ + +struct LastVisitedCell_Item : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "LastVisitedCell-Item";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~LastVisitedCell_Item() {clear();} + struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation + { + static constexpr const char* name() {return "e_UTRAN_Cell_t";} + using parent_t = LastVisitedEUTRANCellInformation; + + }; + struct uTRAN_Cell_t : LastVisitedUTRANCellInformation + { + static constexpr const char* name() {return "uTRAN_Cell_t";} + using parent_t = LastVisitedUTRANCellInformation; + + }; + struct gERAN_Cell_t : LastVisitedGERANCellInformation + { + static constexpr const char* name() {return "gERAN_Cell_t";} + using parent_t = LastVisitedGERANCellInformation; + + }; + struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation + { + static constexpr const char* name() {return "nG_RAN_Cell_t";} + using parent_t = LastVisitedNGRANCellInformation; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as();} return nullptr; } + gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as();} return nullptr; } + nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(e_UTRAN_Cell_t)]; + char dummy2[sizeof(uTRAN_Cell_t)]; + char dummy3[sizeof(gERAN_Cell_t)]; + char dummy4[sizeof(nG_RAN_Cell_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} +*/ + +struct Links_to_log : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Links-to-log";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + uplink + ,downlink + ,both_uplink_and_downlink + } index_t; + +}; + +/* +ReportArea ::= ENUMERATED{ + ecgi, + ... +} +*/ + +struct ReportArea : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ReportArea";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ecgi + } index_t; + +}; + +/* +LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ + ... +} +*/ + +struct LocationReportingInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LocationReportingInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "LocationReportingInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct eventType_t : EventType + { + static constexpr const char* name() {return "eventType_t";} + using parent_t = EventType; + + }; + eventType_t& ref_eventType() {return eventType;} + eventType_t const& ref_eventType() const {return eventType;} + struct reportArea_t : ReportArea + { + static constexpr const char* name() {return "reportArea_t";} + using parent_t = ReportArea; + + }; + reportArea_t& ref_reportArea() {return reportArea;} + reportArea_t const& ref_reportArea() const {return reportArea;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + void clear() + { + eventType.clear(); + reportArea.clear(); + iE_Extensions.clear(); + + }; + private: + eventType_t eventType; + reportArea_t reportArea; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} +*/ + +struct ReportIntervalMDT : asn::enumerated<13, 0, false> +{ + static constexpr const char* name() {return "ReportIntervalMDT";} + using parent_t = asn::enumerated<13, 0, false>; + typedef enum { + ms120 + ,ms240 + ,ms480 + ,ms640 + ,ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + ,min6 + ,min12 + ,min30 + ,min60 + } index_t; + +}; + +/* +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} +*/ + +struct ReportAmountMDT : asn::enumerated<8, 0, false> +{ + static constexpr const char* name() {return "ReportAmountMDT";} + using parent_t = asn::enumerated<8, 0, false>; + typedef enum { + r1 + ,r2 + ,r4 + ,r8 + ,r16 + ,r32 + ,r64 + ,rinfinity + } index_t; + +}; + +/* +M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1PeriodicReporting_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1PeriodicReporting : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M1PeriodicReporting";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct reportInterval_t : ReportIntervalMDT + { + static constexpr const char* name() {return "reportInterval_t";} + using parent_t = ReportIntervalMDT; + + }; + reportInterval_t& ref_reportInterval() {return reportInterval;} + reportInterval_t const& ref_reportInterval() const {return reportInterval;} + struct reportAmount_t : ReportAmountMDT + { + static constexpr const char* name() {return "reportAmount_t";} + using parent_t = ReportAmountMDT; + + }; + reportAmount_t& ref_reportAmount() {return reportAmount;} + reportAmount_t const& ref_reportAmount() const {return reportAmount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + void clear() + { + reportInterval.clear(); + reportAmount.clear(); + iE_Extensions.clear(); + + }; + private: + reportInterval_t reportInterval; + reportAmount_t reportAmount; + iE_Extensions_t iE_Extensions; + +}; +/* +M1ReportingTrigger::= ENUMERATED{ + periodic, + a2eventtriggered, + ..., + a2eventtriggered-periodic +} +*/ + +struct M1ReportingTrigger : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "M1ReportingTrigger";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + periodic + ,a2eventtriggered + ,a2eventtriggered_periodic + } index_t; + +}; + +/* +Threshold-RSRP ::= INTEGER(0..97) +*/ + +struct Threshold_RSRP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRP";} + using parent_t = asn::integer<>; + +}; + +/* +Threshold-RSRQ ::= INTEGER(0..34) +*/ + +struct Threshold_RSRQ : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRQ";} + using parent_t = asn::integer<>; + +}; + +/* +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} +*/ + +struct MeasurementThresholdA2 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "MeasurementThresholdA2";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~MeasurementThresholdA2() {clear();} + struct threshold_RSRP_t : Threshold_RSRP + { + static constexpr const char* name() {return "threshold_RSRP_t";} + using parent_t = Threshold_RSRP; + + }; + struct threshold_RSRQ_t : Threshold_RSRQ + { + static constexpr const char* name() {return "threshold_RSRQ_t";} + using parent_t = Threshold_RSRQ; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as();} return nullptr; } + threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(threshold_RSRP_t)]; + char dummy2[sizeof(threshold_RSRQ_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1ThresholdEventA2_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M1ThresholdEventA2";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct measurementThreshold_t : MeasurementThresholdA2 + { + static constexpr const char* name() {return "measurementThreshold_t";} + using parent_t = MeasurementThresholdA2; + + }; + measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;} + measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementThreshold); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementThreshold); + v(iE_Extensions); + + }; + void clear() + { + measurementThreshold.clear(); + iE_Extensions.clear(); + + }; + private: + measurementThreshold_t measurementThreshold; + iE_Extensions_t iE_Extensions; + +}; +/* +M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } +*/ + +struct M3period : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "M3period";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + ms100 + ,ms1000 + ,ms10000 + } index_t; + +}; + +/* +M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M3Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M3Configuration ::= SEQUENCE { + m3period M3period, + iE-Extensions ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M3Configuration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M3Configuration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct m3period_t : M3period + { + static constexpr const char* name() {return "m3period_t";} + using parent_t = M3period; + + }; + m3period_t& ref_m3period() {return m3period;} + m3period_t const& ref_m3period() const {return m3period;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m3period); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m3period); + v(iE_Extensions); + + }; + void clear() + { + m3period.clear(); + iE_Extensions.clear(); + + }; + private: + m3period_t m3period; + iE_Extensions_t iE_Extensions; + +}; +/* +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M4period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M4period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M4Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M4Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M4Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m4period_t : M4period + { + static constexpr const char* name() {return "m4period_t";} + using parent_t = M4period; + + }; + m4period_t& ref_m4period() {return m4period;} + m4period_t const& ref_m4period() const {return m4period;} + struct m4_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m4_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;} + m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m4period.clear(); + m4_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m4period_t m4period; + m4_links_to_log_t m4_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M5period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M5period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M5Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M5Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M5Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m5period_t : M5period + { + static constexpr const char* name() {return "m5period_t";} + using parent_t = M5period; + + }; + m5period_t& ref_m5period() {return m5period;} + m5period_t const& ref_m5period() const {return m5period;} + struct m5_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m5_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;} + m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m5period.clear(); + m5_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m5period_t m5period; + m5_links_to_log_t m5_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } +*/ + +struct M6report_interval : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "M6report-interval";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + } index_t; + +}; + +/* +M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } +*/ + +struct M6delay_threshold : asn::enumerated<12, 0, true> +{ + static constexpr const char* name() {return "M6delay-threshold";} + using parent_t = asn::enumerated<12, 0, true>; + typedef enum { + ms30 + ,ms40 + ,ms50 + ,ms60 + ,ms70 + ,ms80 + ,ms90 + ,ms100 + ,ms150 + ,ms300 + ,ms500 + ,ms750 + } index_t; + +}; + +/* +M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M6Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M6Configuration ::= SEQUENCE { + m6report-interval M6report-interval, + m6delay-threshold M6delay-threshold OPTIONAL, +-- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” -- + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M6Configuration : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "M6Configuration";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct m6report_interval_t : M6report_interval + { + static constexpr const char* name() {return "m6report_interval_t";} + using parent_t = M6report_interval; + + }; + m6report_interval_t& ref_m6report_interval() {return m6report_interval;} + m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;} + struct m6delay_threshold_t : M6delay_threshold + { + static constexpr const char* name() {return "m6delay_threshold_t";} + using parent_t = M6delay_threshold; + static constexpr bool optional = true; + + }; + m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;} + m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;} + struct m6_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m6_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;} + m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m6report_interval.clear(); + m6delay_threshold.clear(); + m6_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m6report_interval_t m6report_interval; + m6delay_threshold_t m6delay_threshold; + m6_links_to_log_t m6_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M7period ::= INTEGER(1..60, ...) +*/ + +struct M7period : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "M7period";} + using parent_t = asn::integer<>; + +}; + +/* +M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M7Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M7Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M7Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m7period_t : M7period + { + static constexpr const char* name() {return "m7period_t";} + using parent_t = M7period; + + }; + m7period_t& ref_m7period() {return m7period;} + m7period_t const& ref_m7period() const {return m7period;} + struct m7_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m7_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;} + m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m7period.clear(); + m7_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m7period_t m7period; + m7_links_to_log_t m7_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) +*/ + +struct MBMS_Service_Area_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MBMS-Service-Area-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity +*/ + +struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity +{ + static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";} + using parent_t = MBMS_Service_Area_Identity; + +}; +struct MBMS_Service_Area_Identity_List : asn::sequenceof +{ + static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RadioframeAllocationPeriod ::= ENUMERATED{ + n1, + n2, + n4, + n8, + n16, + n32, + ... +} +*/ + +struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "RadioframeAllocationPeriod";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + n1 + ,n2 + ,n4 + ,n8 + ,n16 + ,n32 + } index_t; + +}; + +/* +RadioframeAllocationOffset ::= INTEGER (0..7, ...) +*/ + +struct RadioframeAllocationOffset : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RadioframeAllocationOffset";} + using parent_t = asn::integer<>; + +}; + +/* +Oneframe ::= BIT STRING (SIZE (6)) +*/ + +struct Oneframe : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Oneframe";} + using parent_t = asn::bstring<>; + +}; + +/* +SubframeAllocation ::= CHOICE { + oneframe Oneframe, + fourframes Fourframes, + ... +} +*/ + +struct SubframeAllocation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SubframeAllocation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SubframeAllocation() {clear();} + struct oneframe_t : Oneframe + { + static constexpr const char* name() {return "oneframe_t";} + using parent_t = Oneframe; + + }; + struct fourframes_t : Fourframes + { + static constexpr const char* name() {return "fourframes_t";} + using parent_t = Fourframes; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as();} return nullptr; } + fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(oneframe_t)]; + char dummy2[sizeof(fourframes_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MBSFN_Subframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MBSFN-Subframe-Info ::= SEQUENCE { + radioframeAllocationPeriod RadioframeAllocationPeriod, + radioframeAllocationOffset RadioframeAllocationOffset, + subframeAllocation SubframeAllocation, + iE-Extensions ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "MBSFN-Subframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod + { + static constexpr const char* name() {return "radioframeAllocationPeriod_t";} + using parent_t = RadioframeAllocationPeriod; + + }; + radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;} + radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;} + struct radioframeAllocationOffset_t : RadioframeAllocationOffset + { + static constexpr const char* name() {return "radioframeAllocationOffset_t";} + using parent_t = RadioframeAllocationOffset; + + }; + radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;} + radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;} + struct subframeAllocation_t : SubframeAllocation + { + static constexpr const char* name() {return "subframeAllocation_t";} + using parent_t = SubframeAllocation; + + }; + subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;} + subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + void clear() + { + radioframeAllocationPeriod.clear(); + radioframeAllocationOffset.clear(); + subframeAllocation.clear(); + iE_Extensions.clear(); + + }; + private: + radioframeAllocationPeriod_t radioframeAllocationPeriod; + radioframeAllocationOffset_t radioframeAllocationOffset; + subframeAllocation_t subframeAllocation; + iE_Extensions_t iE_Extensions; + +}; +/* +MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info +*/ + +struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info +{ + static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";} + using parent_t = MBSFN_Subframe_Info; + +}; +struct MBSFN_Subframe_Infolist : asn::sequenceof +{ + static constexpr const char* name() {return "MBSFN-Subframe-Infolist";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} +*/ + +struct MDT_Activation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "MDT-Activation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + immediate_MDT_only + ,immediate_MDT_and_Trace + } index_t; + +}; + +/* +MeasurementsToActivate::= BIT STRING (SIZE (8)) +*/ + +struct MeasurementsToActivate : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MeasurementsToActivate";} + using parent_t = asn::bstring<>; + +}; + +/* +MDT-Location-Info ::= BIT STRING (SIZE (8)) +*/ + +struct MDT_Location_Info : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MDT-Location-Info";} + using parent_t = asn::bstring<>; + +}; + +/* +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity +*/ + +struct MDTPLMNList_elm : PLMN_Identity +{ + static constexpr const char* name() {return "MDTPLMNList_elm";} + using parent_t = PLMN_Identity; + +}; +struct MDTPLMNList : asn::sequenceof +{ + static constexpr const char* name() {return "MDTPLMNList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasConfig::= ENUMERATED {setup,...} +*/ + +struct WLANMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "WLANMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +WLANName ::= OCTET STRING (SIZE (1..32)) +*/ + +struct WLANName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WLANName";} + using parent_t = asn::ostring<>; + +}; + +/* +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName +*/ + +struct WLANMeasConfigNameList_elm : WLANName +{ + static constexpr const char* name() {return "WLANMeasConfigNameList_elm";} + using parent_t = WLANName; + +}; +struct WLANMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "WLANMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WLANMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "WLANMeasurementConfiguration";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct wlanMeasConfig_t : WLANMeasConfig + { + static constexpr const char* name() {return "wlanMeasConfig_t";} + using parent_t = WLANMeasConfig; + + }; + wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;} + wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;} + struct wlanMeasConfigNameList_t : WLANMeasConfigNameList + { + static constexpr const char* name() {return "wlanMeasConfigNameList_t";} + using parent_t = WLANMeasConfigNameList; + static constexpr bool optional = true; + + }; + wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;} + wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;} + struct wlan_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;} + wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;} + struct wlan_rtt_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rtt_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;} + wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + void clear() + { + wlanMeasConfig.clear(); + wlanMeasConfigNameList.clear(); + wlan_rssi.clear(); + wlan_rtt.clear(); + iE_Extensions.clear(); + + }; + private: + wlanMeasConfig_t wlanMeasConfig; + wlanMeasConfigNameList_t wlanMeasConfigNameList; + wlan_rssi_t wlan_rssi; + wlan_rtt_t wlan_rtt; + iE_Extensions_t iE_Extensions; + +}; +/* +MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| + {ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| + {ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| + {ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| + {ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional}| + {ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| + {ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}| + { ID id-BluetoothMeasurementConfiguration CRITICALITY ignore EXTENSION BluetoothMeasurementConfiguration PRESENCE optional}| + { ID id-WLANMeasurementConfiguration CRITICALITY ignore EXTENSION WLANMeasurementConfiguration PRESENCE optional}, + ... +} +*/ + +struct MDT_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(id_M3Configuration); type=1;} + void select_id_M4Configuration() { set(id_M4Configuration); type=2;} + void select_id_M5Configuration() { set(id_M5Configuration); type=3;} + void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;} + void select_id_M6Configuration() { set(id_M6Configuration); type=6;} + void select_id_M7Configuration() { set(id_M7Configuration); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;} + void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_M3Configuration)) { type = 1; return true; } + else if(equal(id_M4Configuration)) { type = 2; return true; } + else if(equal(id_M5Configuration)) { type = 3; return true; } + else if(equal(id_MDT_Location_Info)) { type = 4; return true; } + else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; } + else if(equal(id_M6Configuration)) { type = 6; return true; } + else if(equal(id_M7Configuration)) { type = 7; return true; } + else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; } + else if(equal(id_WLANMeasurementConfiguration)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_M3Configuration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(ignore); type=1;} + void select_id_M4Configuration() { set(ignore); type=2;} + void select_id_M5Configuration() { set(ignore); type=3;} + void select_id_MDT_Location_Info() { set(ignore); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;} + void select_id_M6Configuration() { set(ignore); type=6;} + void select_id_M7Configuration() { set(ignore); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;} + void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + M3Configuration& select_id_M3Configuration() { return set(1); } + M3Configuration const* get_id_M3Configuration() const { return get(1); } + M4Configuration& select_id_M4Configuration() { return set(2); } + M4Configuration const* get_id_M4Configuration() const { return get(2); } + M5Configuration& select_id_M5Configuration() { return set(3); } + M5Configuration const* get_id_M5Configuration() const { return get(3); } + MDT_Location_Info& select_id_MDT_Location_Info() { return set(4); } + MDT_Location_Info const* get_id_MDT_Location_Info() const { return get(4); } + MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set(5); } + MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get(5); } + M6Configuration& select_id_M6Configuration() { return set(6); } + M6Configuration const* get_id_M6Configuration() const { return get(6); } + M7Configuration& select_id_M7Configuration() { return set(7); } + M7Configuration const* get_id_M7Configuration() const { return get(7); } + BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set(8); } + BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get(8); } + WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set(9); } + WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_M3Configuration()); return true; + case 2: v(select_id_M4Configuration()); return true; + case 3: v(select_id_M5Configuration()); return true; + case 4: v(select_id_MDT_Location_Info()); return true; + case 5: v(select_id_SignallingBasedMDTPLMNList()); return true; + case 6: v(select_id_M6Configuration()); return true; + case 7: v(select_id_M7Configuration()); return true; + case 8: v(select_id_BluetoothMeasurementConfiguration()); return true; + case 9: v(select_id_WLANMeasurementConfiguration()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BluetoothMeasurementConfiguration)]; + char dummy2[sizeof(M3Configuration)]; + char dummy3[sizeof(M4Configuration)]; + char dummy4[sizeof(M5Configuration)]; + char dummy5[sizeof(M6Configuration)]; + char dummy6[sizeof(M7Configuration)]; + char dummy7[sizeof(MDTPLMNList)]; + char dummy8[sizeof(MDT_Location_Info)]; + char dummy9[sizeof(WLANMeasurementConfiguration)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(conditional); type=1;} + void select_id_M4Configuration() { set(conditional); type=2;} + void select_id_M5Configuration() { set(conditional); type=3;} + void select_id_MDT_Location_Info() { set(optional); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;} + void select_id_M6Configuration() { set(conditional); type=6;} + void select_id_M7Configuration() { set(conditional); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;} + void select_id_WLANMeasurementConfiguration() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(conditional)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(conditional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(conditional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MDT-Configuration ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT, + measurementsToActivate MeasurementsToActivate, + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic, or event-triggered periodic reporting for measurement M1 + iE-Extensions ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MDT_Configuration : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "MDT-Configuration";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct mdt_Activation_t : MDT_Activation + { + static constexpr const char* name() {return "mdt_Activation_t";} + using parent_t = MDT_Activation; + + }; + mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;} + mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;} + struct areaScopeOfMDT_t : AreaScopeOfMDT + { + static constexpr const char* name() {return "areaScopeOfMDT_t";} + using parent_t = AreaScopeOfMDT; + + }; + areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;} + areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;} + struct measurementsToActivate_t : MeasurementsToActivate + { + static constexpr const char* name() {return "measurementsToActivate_t";} + using parent_t = MeasurementsToActivate; + + }; + measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;} + measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;} + struct m1reportingTrigger_t : M1ReportingTrigger + { + static constexpr const char* name() {return "m1reportingTrigger_t";} + using parent_t = M1ReportingTrigger; + + }; + m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;} + m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;} + struct m1thresholdeventA2_t : M1ThresholdEventA2 + { + static constexpr const char* name() {return "m1thresholdeventA2_t";} + using parent_t = M1ThresholdEventA2; + static constexpr bool optional = true; + + }; + m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;} + m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;} + struct m1periodicReporting_t : M1PeriodicReporting + { + static constexpr const char* name() {return "m1periodicReporting_t";} + using parent_t = M1PeriodicReporting; + static constexpr bool optional = true; + + }; + m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;} + m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + void clear() + { + mdt_Activation.clear(); + areaScopeOfMDT.clear(); + measurementsToActivate.clear(); + m1reportingTrigger.clear(); + m1thresholdeventA2.clear(); + m1periodicReporting.clear(); + iE_Extensions.clear(); + + }; + private: + mdt_Activation_t mdt_Activation; + areaScopeOfMDT_t areaScopeOfMDT; + measurementsToActivate_t measurementsToActivate; + m1reportingTrigger_t m1reportingTrigger; + m1thresholdeventA2_t m1thresholdeventA2; + m1periodicReporting_t m1periodicReporting; + iE_Extensions_t iE_Extensions; + +}; +/* +MakeBeforeBreakIndicator::= ENUMERATED {true, ...} +*/ + +struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MakeBeforeBreakIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} +*/ + +struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ManagementBasedMDTallowed";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allowed + } index_t; + +}; + +/* +Masked-IMEISV ::= BIT STRING (SIZE (64)) +*/ + +struct Masked_IMEISV : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Masked-IMEISV";} + using parent_t = asn::bstring<>; + +}; + +/* +MeNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +NRCellIdentifier ::= BIT STRING (SIZE (36)) +*/ + +struct NRCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRCGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRCGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRCGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct nRcellIdentifier_t : NRCellIdentifier + { + static constexpr const char* name() {return "nRcellIdentifier_t";} + using parent_t = NRCellIdentifier; + + }; + nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;} + nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + nRcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + nRcellIdentifier_t nRcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional}| + { ID id-MeNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct MeNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(id_NRCGI); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRCGI)) { type = 1; return true; } + else if(equal(id_MeNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRCGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(ignore); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRCGI& select_id_NRCGI() { return set(1); } + NRCGI const* get_id_NRCGI() const { return get(1); } + MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set(2); } + MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRCGI()); return true; + case 2: v(select_id_MeNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeNBCoordinationAssistanceInformation)]; + char dummy2[sizeof(NRCGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(optional); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeNBResourceCoordinationInformation ::= SEQUENCE { + eUTRA-Cell-ID ECGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "MeNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eUTRA_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "eUTRA_Cell_ID_t";} + using parent_t = ECGI; + + }; + eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;} + eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + eUTRA_Cell_ID.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRA_Cell_ID_t eUTRA_Cell_ID; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBtoSeNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +MeNBtoSgNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSgNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSgNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +Measurement-ID ::= INTEGER (1..4095, ...) +*/ + +struct Measurement_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Measurement-ID";} + using parent_t = asn::integer<>; + +}; + +/* +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct handoverTriggerChange_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChange_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;} + handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;} + template void decode(V& v) + { + v(handoverTriggerChange); + + }; + template void encode(V& v) const + { + v(handoverTriggerChange); + + }; + void clear() + { + handoverTriggerChange.clear(); + + }; + private: + handoverTriggerChange_t handoverTriggerChange; + +}; +/* +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersModificationRange";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct handoverTriggerChangeLowerLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;} + handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;} + struct handoverTriggerChangeUpperLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;} + handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;} + template void decode(V& v) + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + template void encode(V& v) const + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + void clear() + { + handoverTriggerChangeLowerLimit.clear(); + handoverTriggerChangeUpperLimit.clear(); + + }; + private: + handoverTriggerChangeLowerLimit_t handoverTriggerChangeLowerLimit; + handoverTriggerChangeUpperLimit_t handoverTriggerChangeUpperLimit; + +}; +/* +MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo +*/ + +struct MultibandInfoList_elm : BandInfo +{ + static constexpr const char* name() {return "MultibandInfoList_elm";} + using parent_t = BandInfo; + +}; +struct MultibandInfoList : asn::sequenceof +{ + static constexpr const char* name() {return "MultibandInfoList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} +*/ + +struct NRSCS : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "NRSCS";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + scs15 + ,scs30 + ,scs60 + ,scs120 + } index_t; + +}; + +/* +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} +*/ + +struct NRNRB : asn::enumerated<29, 0, true> +{ + static constexpr const char* name() {return "NRNRB";} + using parent_t = asn::enumerated<29, 0, true>; + typedef enum { + nrb11 + ,nrb18 + ,nrb24 + ,nrb25 + ,nrb31 + ,nrb32 + ,nrb38 + ,nrb51 + ,nrb52 + ,nrb65 + ,nrb66 + ,nrb78 + ,nrb79 + ,nrb93 + ,nrb106 + ,nrb107 + ,nrb121 + ,nrb132 + ,nrb133 + ,nrb135 + ,nrb160 + ,nrb162 + ,nrb189 + ,nrb216 + ,nrb217 + ,nrb245 + ,nrb264 + ,nrb270 + ,nrb273 + } index_t; + +}; + +/* +NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NR_TxBW_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NR_TxBW : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NR-TxBW";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRSCS_t : NRSCS + { + static constexpr const char* name() {return "nRSCS_t";} + using parent_t = NRSCS; + + }; + nRSCS_t& ref_nRSCS() {return nRSCS;} + nRSCS_t const& ref_nRSCS() const {return nRSCS;} + struct nRNRB_t : NRNRB + { + static constexpr const char* name() {return "nRNRB_t";} + using parent_t = NRNRB; + + }; + nRNRB_t& ref_nRNRB() {return nRNRB;} + nRNRB_t const& ref_nRNRB() const {return nRNRB;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + void clear() + { + nRSCS.clear(); + nRNRB.clear(); + iE_Extensions.clear(); + + }; + private: + nRSCS_t nRSCS; + nRNRB_t nRNRB; + iE_Extensions_t iE_Extensions; + +}; +/* +SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SULInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SULInformation ::= SEQUENCE { + sUL-ARFCN INTEGER (0.. 3279165), + sUL-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {SULInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SULInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SULInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct sUL_ARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "sUL_ARFCN_t";} + using parent_t = asn::integer<>; + + }; + + sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;} + sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;} + struct sUL_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "sUL_TxBW_t";} + using parent_t = NR_TxBW; + + }; + sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;} + sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + void clear() + { + sUL_ARFCN.clear(); + sUL_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + sUL_ARFCN_t sUL_ARFCN; + sUL_TxBW_t sUL_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRFreqInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... +} +*/ + +struct NRFreqInfo : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "NRFreqInfo";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nRARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "nRARFCN_t";} + using parent_t = asn::integer<>; + + }; + + nRARFCN_t& ref_nRARFCN() {return nRARFCN;} + nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;} + struct freqBandListNr_t_elm : FreqBandNrItem + { + static constexpr const char* name() {return "freqBandListNr_t_elm";} + using parent_t = FreqBandNrItem; + + }; + struct freqBandListNr_t : asn::sequenceof + { + static constexpr const char* name() {return "freqBandListNr_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;} + freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;} + struct sULInformation_t : SULInformation + { + static constexpr const char* name() {return "sULInformation_t";} + using parent_t = SULInformation; + static constexpr bool optional = true; + + }; + sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;} + sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + void clear() + { + nRARFCN.clear(); + freqBandListNr.clear(); + sULInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nRARFCN_t nRARFCN; + freqBandListNr_t freqBandListNr; + sULInformation_t sULInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +NRPCI ::= INTEGER (0..1007) +*/ + +struct NRPCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRPCI";} + using parent_t = asn::integer<>; + +}; + +/* +NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRencryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRencryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRintegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRUESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRUESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRUESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRencryptionAlgorithms_t : NRencryptionAlgorithms + { + static constexpr const char* name() {return "nRencryptionAlgorithms_t";} + using parent_t = NRencryptionAlgorithms; + + }; + nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;} + nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;} + struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms + { + static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";} + using parent_t = NRintegrityProtectionAlgorithms; + + }; + nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;} + nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + nRencryptionAlgorithms.clear(); + nRintegrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + nRencryptionAlgorithms_t nRencryptionAlgorithms; + nRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +PCI ::= INTEGER (0..503, ...) +*/ + +struct PCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PCI";} + using parent_t = asn::integer<>; + +}; + +/* +Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}, + ... +} +*/ + +struct Neighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(id_NeighbourTAC); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NeighbourTAC)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NeighbourTAC);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + TAC& select_id_NeighbourTAC() { return set(1); } + TAC const* get_id_NeighbourTAC() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NeighbourTAC()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(TAC)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE { + eCGI ECGI, + pCI PCI, + eARFCN EARFCN, + iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "Neighbour_Information_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + void clear() + { + eCGI.clear(); + pCI.clear(); + eARFCN.clear(); + iE_Extensions.clear(); + + }; + private: + eCGI_t eCGI; + pCI_t pCI; + eARFCN_t eARFCN; + iE_Extensions_t iE_Extensions; + +}; +struct Neighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "Neighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NewDRBIDrequest::= ENUMERATED {true, ...} +*/ + +struct NewDRBIDrequest : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NewDRBIDrequest";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +Number-of-Antennaports ::= ENUMERATED { + an1, + an2, + an4, + ... +} +*/ + +struct Number_of_Antennaports : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Number-of-Antennaports";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + an1 + ,an2 + ,an4 + } index_t; + +}; + +/* +PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...} +*/ + +struct PDCPChangeIndication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPChangeIndication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + s_KgNB_update_required + ,pDCP_data_recovery_required + } index_t; + +}; + +/* +PDCPSnLength ::= ENUMERATED {twelve-bits,eighteen-bits,...} +*/ + +struct PDCPSnLength : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPSnLength";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + twelve_bits + ,eighteen_bits + } index_t; + +}; + +/* +PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PRACH_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- + iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PRACH_Configuration : asn::sequence<6, 0, true, 2> +{ + static constexpr const char* name() {return "PRACH-Configuration";} + using parent_t = asn::sequence<6, 0, true, 2>; + struct rootSequenceIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rootSequenceIndex_t";} + using parent_t = asn::integer<>; + + }; + + rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;} + rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;} + struct zeroCorrelationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "zeroCorrelationIndex_t";} + using parent_t = asn::integer<>; + + }; + + zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;} + zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;} + struct highSpeedFlag_t : asn::boolean + { + static constexpr const char* name() {return "highSpeedFlag_t";} + using parent_t = asn::boolean; + + }; + highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;} + highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;} + struct prach_FreqOffset_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_FreqOffset_t";} + using parent_t = asn::integer<>; + + }; + + prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;} + prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;} + struct prach_ConfigIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_ConfigIndex_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;} + prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + void clear() + { + rootSequenceIndex.clear(); + zeroCorrelationIndex.clear(); + highSpeedFlag.clear(); + prach_FreqOffset.clear(); + prach_ConfigIndex.clear(); + iE_Extensions.clear(); + + }; + private: + rootSequenceIndex_t rootSequenceIndex; + zeroCorrelationIndex_t zeroCorrelationIndex; + highSpeedFlag_t highSpeedFlag; + prach_FreqOffset_t prach_FreqOffset; + prach_ConfigIndex_t prach_ConfigIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct PedestrianUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PedestrianUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +Port-Number ::= OCTET STRING (SIZE (2)) +*/ + +struct Port_Number : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Port-Number";} + using parent_t = asn::ostring<>; + +}; + +/* +ProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectDiscovery : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectDiscovery";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectCommunication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectCommunication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeUEtoNetworkRelaying ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, + ... +} +*/ + +struct ProSeAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ProSeUEtoNetworkRelaying)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ProSeUEtoNetworkRelaying);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set(1); } + ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ProSeUEtoNetworkRelaying()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ProSeUEtoNetworkRelaying)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProSeAuthorized ::= SEQUENCE { + proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, + proSeDirectCommunication ProSeDirectCommunication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProSeAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ProSeAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct proSeDirectDiscovery_t : ProSeDirectDiscovery + { + static constexpr const char* name() {return "proSeDirectDiscovery_t";} + using parent_t = ProSeDirectDiscovery; + static constexpr bool optional = true; + + }; + proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;} + proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;} + struct proSeDirectCommunication_t : ProSeDirectCommunication + { + static constexpr const char* name() {return "proSeDirectCommunication_t";} + using parent_t = ProSeDirectCommunication; + static constexpr bool optional = true; + + }; + proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;} + proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + void clear() + { + proSeDirectDiscovery.clear(); + proSeDirectCommunication.clear(); + iE_Extensions.clear(); + + }; + private: + proSeDirectDiscovery_t proSeDirectDiscovery; + proSeDirectCommunication_t proSeDirectCommunication; + iE_Extensions_t iE_Extensions; + +}; +/* +ResourceType ::= ENUMERATED { + downlinknonCRS, + cRS, + uplink, + ... +} +*/ + +struct ResourceType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "ResourceType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + downlinknonCRS + ,cRS + ,uplink + } index_t; + +}; + +/* +ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedFootprintTimePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimePeriodicity INTEGER (1..320, ...), + protectedFootprintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedFootprintTimePattern";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct protectedFootprintTimePeriodicity_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;} + protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;} + struct protectedFootprintStartTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintStartTime_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;} + protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + void clear() + { + protectedFootprintTimePeriodicity.clear(); + protectedFootprintStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + protectedFootprintTimePeriodicity_t protectedFootprintTimePeriodicity; + protectedFootprintStartTime_t protectedFootprintStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedResourceList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedResourceList-Item ::= SEQUENCE { + resourceType ResourceType, + intraPRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedResourceList-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct resourceType_t : ResourceType + { + static constexpr const char* name() {return "resourceType_t";} + using parent_t = ResourceType; + + }; + resourceType_t& ref_resourceType() {return resourceType;} + resourceType_t const& ref_resourceType() const {return resourceType;} + struct intraPRBProtectedResourceFootprint_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";} + using parent_t = asn::bstring<>; + + }; + + intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;} + intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;} + struct protectedFootprintFrequencyPattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";} + using parent_t = asn::bstring<>; + + }; + + protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;} + protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;} + struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern + { + static constexpr const char* name() {return "protectedFootprintTimePattern_t";} + using parent_t = ProtectedFootprintTimePattern; + + }; + protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;} + protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + void clear() + { + resourceType.clear(); + intraPRBProtectedResourceFootprint.clear(); + protectedFootprintFrequencyPattern.clear(); + protectedFootprintTimePattern.clear(); + iE_Extensions.clear(); + + }; + private: + resourceType_t resourceType; + intraPRBProtectedResourceFootprint_t intraPRBProtectedResourceFootprint; + protectedFootprintFrequencyPattern_t protectedFootprintFrequencyPattern; + protectedFootprintTimePattern_t protectedFootprintTimePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item +*/ + +struct ProtectedResourceList_elm : ProtectedResourceList_Item +{ + static constexpr const char* name() {return "ProtectedResourceList_elm";} + using parent_t = ProtectedResourceList_Item; + +}; +struct ProtectedResourceList : asn::sequenceof +{ + static constexpr const char* name() {return "ProtectedResourceList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} -- Rapporteur: missing extension -- +*/ + +struct ProtectedEUTRAResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedEUTRAResourceIndication::= SEQUENCE { + activationSFN INTEGER (0..1023), + protectedResourceList ProtectedResourceList, + mBSFNControlRegionLength INTEGER (0..3) OPTIONAL, + pDCCHRegionLength INTEGER (1..3) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct protectedResourceList_t : ProtectedResourceList + { + static constexpr const char* name() {return "protectedResourceList_t";} + using parent_t = ProtectedResourceList; + + }; + protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;} + protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;} + struct pDCCHRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCHRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;} + pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + protectedResourceList.clear(); + mBSFNControlRegionLength.clear(); + pDCCHRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + protectedResourceList_t protectedResourceList; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + pDCCHRegionLength_t pDCCHRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} +*/ + +struct Reestablishment_Indication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "Reestablishment-Indication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + reestablished + } index_t; + +}; + +/* +RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RLC_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RLC_Status : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RLC-Status";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct reestablishment_Indication_t : Reestablishment_Indication + { + static constexpr const char* name() {return "reestablishment_Indication_t";} + using parent_t = Reestablishment_Indication; + + }; + reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;} + reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + void clear() + { + reestablishment_Indication.clear(); + iE_Extensions.clear(); + + }; + private: + reestablishment_Indication_t reestablishment_Indication; + iE_Extensions_t iE_Extensions; + +}; +/* +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} +*/ + +struct RLCMode : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "RLCMode";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + rlc_am + ,rlc_um_bidirectional + ,rlc_um_unidirectional_ul + ,rlc_um_unidirectional_dl + } index_t; + +}; + +/* +RRC-Config-Ind ::= ENUMERATED { + full-config, + delta-config, + ... +} +*/ + +struct RRC_Config_Ind : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RRC-Config-Ind";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + full_config + ,delta_config + } index_t; + +}; + +/* +RRC-Context ::= OCTET STRING +*/ + +struct RRC_Context : asn::ostring<> +{ + static constexpr const char* name() {return "RRC-Context";} + using parent_t = asn::ostring<>; + +}; + +/* +RRCConnReestabIndicator ::= ENUMERATED { + reconfigurationFailure, handoverFailure, otherFailure, ... +} +*/ + +struct RRCConnReestabIndicator : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RRCConnReestabIndicator";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + reconfigurationFailure + ,handoverFailure + ,otherFailure + } index_t; + +}; + +/* +RRCConnSetupIndicator::= ENUMERATED { + rrcConnSetup, + ... +} +*/ + +struct RRCConnSetupIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "RRCConnSetupIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + rrcConnSetup + } index_t; + +}; + +/* +RRCContainer ::= OCTET STRING +*/ + +struct RRCContainer : asn::ostring<> +{ + static constexpr const char* name() {return "RRCContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RSRPMeasurementResult_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF + SEQUENCE { + rSRPCellID ECGI, + rSRPMeasured INTEGER (0..97, ...), + iE-Extensions ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMeasurementResult_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct rSRPCellID_t : ECGI + { + static constexpr const char* name() {return "rSRPCellID_t";} + using parent_t = ECGI; + + }; + rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;} + rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;} + struct rSRPMeasured_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rSRPMeasured_t";} + using parent_t = asn::integer<>; + + }; + + rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;} + rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + void clear() + { + rSRPCellID.clear(); + rSRPMeasured.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPCellID_t rSRPCellID; + rSRPMeasured_t rSRPMeasured; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMeasurementResult : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMeasurementResult";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional}, + ... +} +*/ + +struct RSRPMRList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(id_UEID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UEID& select_id_UEID() { return set(1); } + UEID const* get_id_UEID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + rSRPMeasurementResult RSRPMeasurementResult, + iE-Extensions ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMRList_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMRList_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct rSRPMeasurementResult_t : RSRPMeasurementResult + { + static constexpr const char* name() {return "rSRPMeasurementResult_t";} + using parent_t = RSRPMeasurementResult; + + }; + rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;} + rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + void clear() + { + rSRPMeasurementResult.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPMeasurementResult_t rSRPMeasurementResult; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMRList : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMRList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct UL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-DL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION DL-scheduling-PDCCH-CCE-usage PRESENCE optional}| + + {ID id-UL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION UL-scheduling-PDCCH-CCE-usage PRESENCE optional}, + ... +} +*/ + +struct RadioResourceStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; } + else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DL_scheduling_PDCCH_CCE_usage);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set(1); } + DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get(1); } + UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set(2); } + UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DL_scheduling_PDCCH_CCE_usage()); return true; + case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)]; + char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RadioResourceStatus : asn::sequence<7, 0, true, 1> +{ + static constexpr const char* name() {return "RadioResourceStatus";} + using parent_t = asn::sequence<7, 0, true, 1>; + struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_GBR_PRB_usage_t";} + using parent_t = DL_GBR_PRB_usage; + + }; + dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;} + dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;} + struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_GBR_PRB_usage_t";} + using parent_t = UL_GBR_PRB_usage; + + }; + uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;} + uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;} + struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";} + using parent_t = DL_non_GBR_PRB_usage; + + }; + dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;} + dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;} + struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";} + using parent_t = UL_non_GBR_PRB_usage; + + }; + uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;} + uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;} + struct dL_Total_PRB_usage_t : DL_Total_PRB_usage + { + static constexpr const char* name() {return "dL_Total_PRB_usage_t";} + using parent_t = DL_Total_PRB_usage; + + }; + dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;} + dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;} + struct uL_Total_PRB_usage_t : UL_Total_PRB_usage + { + static constexpr const char* name() {return "uL_Total_PRB_usage_t";} + using parent_t = UL_Total_PRB_usage; + + }; + uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;} + uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + void clear() + { + dL_GBR_PRB_usage.clear(); + uL_GBR_PRB_usage.clear(); + dL_non_GBR_PRB_usage.clear(); + uL_non_GBR_PRB_usage.clear(); + dL_Total_PRB_usage.clear(); + uL_Total_PRB_usage.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GBR_PRB_usage_t dL_GBR_PRB_usage; + uL_GBR_PRB_usage_t uL_GBR_PRB_usage; + dL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + uL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + dL_Total_PRB_usage_t dL_Total_PRB_usage; + uL_Total_PRB_usage_t uL_Total_PRB_usage; + iE_Extensions_t iE_Extensions; + +}; +/* +ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) +*/ + +struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) +*/ + +struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) +*/ + +struct ReceiveStatusofULPDCPSDUs : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";} + using parent_t = asn::bstring<>; + +}; + +/* +Registration-Request ::= ENUMERATED { + start, + stop, + ..., + partial-stop, + add +} +*/ + +struct Registration_Request : asn::enumerated<4, 2, true> +{ + static constexpr const char* name() {return "Registration-Request";} + using parent_t = asn::enumerated<4, 2, true>; + typedef enum { + start + ,stop + ,partial_stop + ,add + } index_t; + +}; + +/* +RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-enhancedRNTP CRITICALITY ignore EXTENSION EnhancedRNTP PRESENCE optional }, + ... +} +*/ + +struct RelativeNarrowbandTxPower_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(id_enhancedRNTP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_enhancedRNTP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_enhancedRNTP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EnhancedRNTP& select_id_enhancedRNTP() { return set(1); } + EnhancedRNTP const* get_id_enhancedRNTP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_enhancedRNTP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EnhancedRNTP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RelativeNarrowbandTxPower ::= SEQUENCE { + + rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), + rNTP-Threshold RNTP-Threshold, + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + p-B INTEGER (0..3,...), + pDCCH-InterferenceImpact INTEGER (0..4,...), + iE-Extensions ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "RelativeNarrowbandTxPower";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct rNTP_PerPRB_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rNTP_PerPRB_t";} + using parent_t = asn::bstring<>; + + }; + + rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;} + rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;} + struct rNTP_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;} + rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct p_B_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "p_B_t";} + using parent_t = asn::integer<>; + + }; + + p_B_t& ref_p_B() {return p_B;} + p_B_t const& ref_p_B() const {return p_B;} + struct pDCCH_InterferenceImpact_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";} + using parent_t = asn::integer<>; + + }; + + pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;} + pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + void clear() + { + rNTP_PerPRB.clear(); + rNTP_Threshold.clear(); + numberOfCellSpecificAntennaPorts.clear(); + p_B.clear(); + pDCCH_InterferenceImpact.clear(); + iE_Extensions.clear(); + + }; + private: + rNTP_PerPRB_t rNTP_PerPRB; + rNTP_Threshold_t rNTP_Threshold; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + p_B_t p_B; + pDCCH_InterferenceImpact_t pDCCH_InterferenceImpact; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportCharacteristics ::= BIT STRING (SIZE (32)) +*/ + +struct ReportCharacteristics : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReportCharacteristics";} + using parent_t = asn::bstring<>; + +}; + +/* +ReportingPeriodicityCSIR ::= ENUMERATED { + ms5, + ms10, + ms20, + ms40, + ms80, +... +} +*/ + +struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityCSIR";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms5 + ,ms10 + ,ms20 + ,ms40 + ,ms80 + } index_t; + +}; + +/* +ReportingPeriodicityRSRPMR ::= ENUMERATED { + one-hundred-20-ms, + two-hundred-40-ms, + four-hundred-80-ms, + six-hundred-40-ms, +... +} +*/ + +struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_hundred_20_ms + ,two_hundred_40_ms + ,four_hundred_80_ms + ,six_hundred_40_ms + } index_t; + +}; + +/* +ResumeID ::= CHOICE { + non-truncated BIT STRING(SIZE(40)), + truncated BIT STRING(SIZE(24)), + ... +} +*/ + +struct ResumeID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResumeID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResumeID() {clear();} + struct non_truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "non_truncated_t";} + using parent_t = asn::bstring<>; + + }; + + struct truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "truncated_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as();} return nullptr; } + truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(non_truncated_t)]; + char dummy2[sizeof(truncated_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct S1TNLLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +S1TNLLoadIndicator ::= SEQUENCE { + dLS1TNLLoadIndicator LoadIndicator, + uLS1TNLLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "S1TNLLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;} + dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;} + struct uLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;} + uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLS1TNLLoadIndicator.clear(); + uLS1TNLLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLS1TNLLoadIndicator_t dLS1TNLLoadIndicator; + uLS1TNLLoadIndicator_t uLS1TNLLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...} +*/ + +struct SCGChangeIndication : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SCGChangeIndication";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + pDCPCountWrapAround + ,pSCellChange + ,other + } index_t; + +}; + +/* +SCGConfigurationQuery ::= ENUMERATED {true,...} +*/ + +struct SCGConfigurationQuery : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SCGConfigurationQuery";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SGNB-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-eNB-HO, + intra-eNB-HO, + ... +} +*/ + +struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + sn_change + ,inter_eNB_HO + ,intra_eNB_HO + } index_t; + +}; + +/* +SIPTOBearerDeactivationIndication ::= ENUMERATED { + true, + ... +} +*/ + +struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SRBType ::= ENUMERATED {srb1, srb2, ...} +*/ + +struct SRBType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SRBType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + srb1 + ,srb2 + } index_t; + +}; + +/* +SRVCCOperationPossible ::= ENUMERATED { + possible, + ... +} +*/ + +struct SRVCCOperationPossible : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SRVCCOperationPossible";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + possible + } index_t; + +}; + +/* +ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ScheduledCommunicationTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ScheduledCommunicationTime";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct dayofWeek_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dayofWeek_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;} + dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;} + struct timeofDayStart_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayStart_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;} + timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;} + struct timeofDayEnd_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayEnd_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;} + timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + void clear() + { + dayofWeek.clear(); + timeofDayStart.clear(); + timeofDayEnd.clear(); + iE_Extensions.clear(); + + }; + private: + dayofWeek_t dayofWeek; + timeofDayStart_t timeofDayStart; + timeofDayEnd_t timeofDayEnd; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SeNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SeNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SeNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SeNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SeNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SecondaryRATUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReport-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + secondaryRATType ENUMERATED {nr, ...}, + e-RABUsageReportList E-RABUsageReportList, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SecondaryRATUsageReport-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct secondaryRATType_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "secondaryRATType_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nr + } index_t; + + }; + + secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;} + secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;} + struct e_RABUsageReportList_t : E_RABUsageReportList + { + static constexpr const char* name() {return "e_RABUsageReportList_t";} + using parent_t = E_RABUsageReportList; + + }; + e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;} + e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + secondaryRATType.clear(); + e_RABUsageReportList.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + secondaryRATType_t secondaryRATType; + e_RABUsageReportList_t e_RABUsageReportList; + iE_Extensions_t iE_Extensions; + +}; +/* +SecondaryRATUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-SecondaryRATUsageReport-Item CRITICALITY reject TYPE SecondaryRATUsageReport-Item PRESENCE mandatory}, + ... +} +*/ + +struct SecondaryRATUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SecondaryRATUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set(1); } + SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SecondaryRATUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}} +*/ + +struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct SecondaryRATUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCell_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional}| + { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional}| + { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional}| + { ID id-CSG-Id CRITICALITY ignore EXTENSION CSG-Id PRESENCE optional}| + { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION MBMS-Service-Area-Identity-List PRESENCE optional}| + { ID id-MultibandInfoList CRITICALITY ignore EXTENSION MultibandInfoList PRESENCE optional}| + { ID id-FreqBandIndicatorPriority CRITICALITY ignore EXTENSION FreqBandIndicatorPriority PRESENCE optional}| + { ID id-BandwidthReducedSI CRITICALITY ignore EXTENSION BandwidthReducedSI PRESENCE optional}| + { ID id-ProtectedEUTRAResourceIndication CRITICALITY ignore EXTENSION ProtectedEUTRAResourceIndication PRESENCE optional}, + ... +} +*/ + +struct ServedCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;} + void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;} + void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;} + void select_id_CSG_Id() { set(id_CSG_Id); type=4;} + void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;} + void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;} + void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;} + void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Number_of_Antennaports)) { type = 1; return true; } + else if(equal(id_PRACH_Configuration)) { type = 2; return true; } + else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; } + else if(equal(id_CSG_Id)) { type = 4; return true; } + else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; } + else if(equal(id_MultibandInfoList)) { type = 6; return true; } + else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; } + else if(equal(id_BandwidthReducedSI)) { type = 8; return true; } + else if(equal(id_ProtectedEUTRAResourceIndication)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Number_of_Antennaports);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(ignore); type=1;} + void select_id_PRACH_Configuration() { set(ignore); type=2;} + void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;} + void select_id_CSG_Id() { set(ignore); type=4;} + void select_id_MBMS_Service_Area_List() { set(ignore); type=5;} + void select_id_MultibandInfoList() { set(ignore); type=6;} + void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;} + void select_id_BandwidthReducedSI() { set(ignore); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Number_of_Antennaports& select_id_Number_of_Antennaports() { return set(1); } + Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get(1); } + PRACH_Configuration& select_id_PRACH_Configuration() { return set(2); } + PRACH_Configuration const* get_id_PRACH_Configuration() const { return get(2); } + MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set(3); } + MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get(3); } + CSG_Id& select_id_CSG_Id() { return set(4); } + CSG_Id const* get_id_CSG_Id() const { return get(4); } + MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set(5); } + MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get(5); } + MultibandInfoList& select_id_MultibandInfoList() { return set(6); } + MultibandInfoList const* get_id_MultibandInfoList() const { return get(6); } + FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set(7); } + FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get(7); } + BandwidthReducedSI& select_id_BandwidthReducedSI() { return set(8); } + BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get(8); } + ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set(9); } + ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Number_of_Antennaports()); return true; + case 2: v(select_id_PRACH_Configuration()); return true; + case 3: v(select_id_MBSFN_Subframe_Info()); return true; + case 4: v(select_id_CSG_Id()); return true; + case 5: v(select_id_MBMS_Service_Area_List()); return true; + case 6: v(select_id_MultibandInfoList()); return true; + case 7: v(select_id_FreqBandIndicatorPriority()); return true; + case 8: v(select_id_BandwidthReducedSI()); return true; + case 9: v(select_id_ProtectedEUTRAResourceIndication()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BandwidthReducedSI)]; + char dummy2[sizeof(CSG_Id)]; + char dummy3[sizeof(FreqBandIndicatorPriority)]; + char dummy4[sizeof(MBMS_Service_Area_Identity_List)]; + char dummy5[sizeof(MBSFN_Subframe_Infolist)]; + char dummy6[sizeof(MultibandInfoList)]; + char dummy7[sizeof(Number_of_Antennaports)]; + char dummy8[sizeof(PRACH_Configuration)]; + char dummy9[sizeof(ProtectedEUTRAResourceIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(optional); type=1;} + void select_id_PRACH_Configuration() { set(optional); type=2;} + void select_id_MBSFN_Subframe_Info() { set(optional); type=3;} + void select_id_CSG_Id() { set(optional); type=4;} + void select_id_MBMS_Service_Area_List() { set(optional); type=5;} + void select_id_MultibandInfoList() { set(optional); type=6;} + void select_id_FreqBandIndicatorPriority() { set(optional); type=7;} + void select_id_BandwidthReducedSI() { set(optional); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information ::= SEQUENCE { + pCI PCI, + cellId ECGI, + tAC TAC, + broadcastPLMNs BroadcastPLMNs-Item, + eUTRA-Mode-Info EUTRA-Mode-Info, + iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCell_Information : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCell-Information";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct cellId_t : ECGI + { + static constexpr const char* name() {return "cellId_t";} + using parent_t = ECGI; + + }; + cellId_t& ref_cellId() {return cellId;} + cellId_t const& ref_cellId() const {return cellId;} + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct eUTRA_Mode_Info_t : EUTRA_Mode_Info + { + static constexpr const char* name() {return "eUTRA_Mode_Info_t";} + using parent_t = EUTRA_Mode_Info; + + }; + eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;} + eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + void clear() + { + pCI.clear(); + cellId.clear(); + tAC.clear(); + broadcastPLMNs.clear(); + eUTRA_Mode_Info.clear(); + iE_Extensions.clear(); + + }; + private: + pCI_t pCI; + cellId_t cellId; + tAC_t tAC; + broadcastPLMNs_t broadcastPLMNs; + eUTRA_Mode_Info_t eUTRA_Mode_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCells_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCells_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +struct ServedCells : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCells";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServiceType ::= ENUMERATED{ + qMC-for-streaming-service, + qMC-for-MTSI-service, + ... +} +*/ + +struct ServiceType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ServiceType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + qMC_for_streaming_service + ,qMC_for_MTSI_service + } index_t; + +}; + +/* +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) +*/ + +struct SgNB_UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNB-UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +SgNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ECGI CRITICALITY ignore EXTENSION ECGI PRESENCE optional}| + { ID id-SgNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(id_ECGI); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ECGI)) { type = 1; return true; } + else if(equal(id_SgNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ECGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(ignore); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ECGI() { return set(1); } + ECGI const* get_id_ECGI() const { return get(1); } + SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set(2); } + SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ECGI()); return true; + case 2: v(select_id_SgNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(SgNBCoordinationAssistanceInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(optional); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBResourceCoordinationInformation ::= SEQUENCE { + nR-CGI NRCGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "SgNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nR_CGI_t : NRCGI + { + static constexpr const char* name() {return "nR_CGI_t";} + using parent_t = NRCGI; + + }; + nR_CGI_t& ref_nR_CGI() {return nR_CGI;} + nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + nR_CGI.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nR_CGI_t nR_CGI; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SgNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SgNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SgNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SgNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +ShortMAC-I ::= BIT STRING (SIZE(16)) +*/ + +struct ShortMAC_I : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ShortMAC-I";} + using parent_t = asn::bstring<>; + +}; + +/* +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) +*/ + +struct SpectrumSharingGroupID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SpectrumSharingGroupID";} + using parent_t = asn::integer<>; + +}; + +/* +SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SplitSRB_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SplitSRB ::= SEQUENCE { + rrcContainer RRCContainer OPTIONAL, + srbType SRBType, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SplitSRB : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "SplitSRB";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct rrcContainer_t : RRCContainer + { + static constexpr const char* name() {return "rrcContainer_t";} + using parent_t = RRCContainer; + static constexpr bool optional = true; + + }; + rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;} + rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;} + struct srbType_t : SRBType + { + static constexpr const char* name() {return "srbType_t";} + using parent_t = SRBType; + + }; + srbType_t& ref_srbType() {return srbType;} + srbType_t const& ref_srbType() const {return srbType;} + struct deliveryStatus_t : DeliveryStatus + { + static constexpr const char* name() {return "deliveryStatus_t";} + using parent_t = DeliveryStatus; + static constexpr bool optional = true; + + }; + deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;} + deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + void clear() + { + rrcContainer.clear(); + srbType.clear(); + deliveryStatus.clear(); + iE_Extensions.clear(); + + }; + private: + rrcContainer_t rrcContainer; + srbType_t srbType; + deliveryStatus_t deliveryStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...} +*/ + +struct SplitSRBs : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SplitSRBs";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + srb1 + ,srb2 + ,srb1and2 + } index_t; + +}; + +/* +SubscriberProfileIDforRFP ::= INTEGER (1..256) +*/ + +struct SubscriberProfileIDforRFP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SubscriberProfileIDforRFP";} + using parent_t = asn::integer<>; + +}; + +/* +Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ...} OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "periodicCommunicationIndicator_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + periodically + ,ondemand + } index_t; + + }; + + periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;} + periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;} + struct periodicTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "periodicTime_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;} + periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;} + struct scheduledCommunicationTime_t : ScheduledCommunicationTime + { + static constexpr const char* name() {return "scheduledCommunicationTime_t";} + using parent_t = ScheduledCommunicationTime; + static constexpr bool optional = true; + + }; + scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;} + scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;} + struct stationaryIndication_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "stationaryIndication_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + stationary + ,mobile + } index_t; + + }; + + stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;} + stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;} + struct trafficProfile_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "trafficProfile_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + single_packet + ,dual_packets + ,multiple_packets + } index_t; + + }; + + trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;} + trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;} + struct batteryIndication_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "batteryIndication_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + battery_powered + ,battery_powered_not_rechargeable_or_replaceable + ,not_battery_powered + } index_t; + + }; + + batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;} + batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + void clear() + { + periodicCommunicationIndicator.clear(); + periodicTime.clear(); + scheduledCommunicationTime.clear(); + stationaryIndication.clear(); + trafficProfile.clear(); + batteryIndication.clear(); + iE_Extensions.clear(); + + }; + private: + periodicCommunicationIndicator_t periodicCommunicationIndicator; + periodicTime_t periodicTime; + scheduledCommunicationTime_t scheduledCommunicationTime; + stationaryIndication_t stationaryIndication; + trafficProfile_t trafficProfile; + batteryIndication_t batteryIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] +*/ + +struct TargetCellInUTRAN : asn::ostring<> +{ + static constexpr const char* name() {return "TargetCellInUTRAN";} + using parent_t = asn::ostring<>; + +}; + +/* +TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING +*/ + +struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<> +{ + static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} +*/ + +struct TimeToWait : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TimeToWait";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + v1s + ,v2s + ,v5s + ,v10s + ,v20s + ,v60s + } index_t; + +}; + +/* +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} +*/ + +struct TraceDepth : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TraceDepth";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + minimum + ,medium + ,maximum + ,minimumWithoutVendorSpecificExtension + ,mediumWithoutVendorSpecificExtension + ,maximumWithoutVendorSpecificExtension + } index_t; + +}; + +/* +TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TraceCollectionEntityIPAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TraceCollectionEntityIPAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-serviceType CRITICALITY ignore EXTENSION ServiceType PRESENCE optional}, + ... +} +*/ + +struct UEAppLayerMeasConfig_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(id_serviceType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_serviceType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_serviceType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ServiceType& select_id_serviceType() { return set(1); } + ServiceType const* get_id_serviceType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_serviceType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServiceType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAppLayerMeasConfig ::= SEQUENCE { + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..1000)), + areaScopeOfQMC AreaScopeOfQMC, + iE-Extensions ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAppLayerMeasConfig";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct containerForAppLayerMeasConfig_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";} + using parent_t = asn::ostring<>; + + }; + + containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;} + containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;} + struct areaScopeOfQMC_t : AreaScopeOfQMC + { + static constexpr const char* name() {return "areaScopeOfQMC_t";} + using parent_t = AreaScopeOfQMC; + + }; + areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;} + areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + void clear() + { + containerForAppLayerMeasConfig.clear(); + areaScopeOfQMC.clear(); + iE_Extensions.clear(); + + }; + private: + containerForAppLayerMeasConfig_t containerForAppLayerMeasConfig; + areaScopeOfQMC_t areaScopeOfQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}| + { ID id-UEAppLayerMeasConfig CRITICALITY ignore EXTENSION UEAppLayerMeasConfig PRESENCE optional}, + ... +} +*/ + +struct TraceActivation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(id_MDTConfiguration); type=1;} + void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MDTConfiguration)) { type = 1; return true; } + else if(equal(id_UEAppLayerMeasConfig)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MDTConfiguration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(ignore); type=1;} + void select_id_UEAppLayerMeasConfig() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + MDT_Configuration& select_id_MDTConfiguration() { return set(1); } + MDT_Configuration const* get_id_MDTConfiguration() const { return get(1); } + UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set(2); } + UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MDTConfiguration()); return true; + case 2: v(select_id_UEAppLayerMeasConfig()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDT_Configuration)]; + char dummy2[sizeof(UEAppLayerMeasConfig)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(optional); type=1;} + void select_id_UEAppLayerMeasConfig() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TraceActivation ::= SEQUENCE { + eUTRANTraceID EUTRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TraceActivation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TraceActivation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eUTRANTraceID_t : EUTRANTraceID + { + static constexpr const char* name() {return "eUTRANTraceID_t";} + using parent_t = EUTRANTraceID; + + }; + eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;} + eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;} + struct interfacesToTrace_t : InterfacesToTrace + { + static constexpr const char* name() {return "interfacesToTrace_t";} + using parent_t = InterfacesToTrace; + + }; + interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;} + interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;} + struct traceDepth_t : TraceDepth + { + static constexpr const char* name() {return "traceDepth_t";} + using parent_t = TraceDepth; + + }; + traceDepth_t& ref_traceDepth() {return traceDepth;} + traceDepth_t const& ref_traceDepth() const {return traceDepth;} + struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress + { + static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";} + using parent_t = TraceCollectionEntityIPAddress; + + }; + traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;} + traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + void clear() + { + eUTRANTraceID.clear(); + interfacesToTrace.clear(); + traceDepth.clear(); + traceCollectionEntityIPAddress.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRANTraceID_t eUTRANTraceID; + interfacesToTrace_t interfacesToTrace; + traceDepth_t traceDepth; + traceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + iE_Extensions_t iE_Extensions; + +}; +/* +Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Tunnel_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TunnelInformation ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + uDP-Port-Number Port-Number OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TunnelInformation : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "TunnelInformation";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct uDP_Port_Number_t : Port_Number + { + static constexpr const char* name() {return "uDP_Port_Number_t";} + using parent_t = Port_Number; + static constexpr bool optional = true; + + }; + uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;} + uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + uDP_Port_Number.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + uDP_Port_Number_t uDP_Port_Number; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextKeptIndicator ::= ENUMERATED { + true, + ... +} +*/ + +struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "UE-ContextKeptIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item +*/ + +struct UE_HistoryInformation_elm : LastVisitedCell_Item +{ + static constexpr const char* name() {return "UE_HistoryInformation_elm";} + using parent_t = LastVisitedCell_Item; + +}; +struct UE_HistoryInformation : asn::sequenceof +{ + static constexpr const char* name() {return "UE-HistoryInformation";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UE-HistoryInformationFromTheUE ::= OCTET STRING +*/ + +struct UE_HistoryInformationFromTheUE : asn::ostring<> +{ + static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container::= OCTET STRING +*/ + +struct UE_RLF_Report_Container : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING +*/ + +struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-S1AP-ID ::= INTEGER (0.. 4294967295) +*/ + +struct UE_S1AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-S1AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-X2AP-ID ::= INTEGER (0..4095) +*/ + +struct UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...) +*/ + +struct UE_X2AP_ID_Extension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID-Extension";} + using parent_t = asn::integer<>; + +}; + +/* +UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-extended-uEaggregateMaximumBitRateDownlink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-uEaggregateMaximumBitRateUplink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct UEAggregate_MaximumBitrate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; } + else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateDownlink);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set(1); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get(1); } + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set(2); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_uEaggregateMaximumBitRateDownlink()); return true; + case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAggregateMaximumBitRate ::= SEQUENCE { + uEaggregateMaximumBitRateDownlink BitRate, + uEaggregateMaximumBitRateUplink BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAggregateMaximumBitRate";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEaggregateMaximumBitRateDownlink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;} + uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;} + struct uEaggregateMaximumBitRateUplink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;} + uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + void clear() + { + uEaggregateMaximumBitRateDownlink.clear(); + uEaggregateMaximumBitRateUplink.clear(); + iE_Extensions.clear(); + + }; + private: + uEaggregateMaximumBitRateDownlink_t uEaggregateMaximumBitRateDownlink; + uEaggregateMaximumBitRateUplink_t uEaggregateMaximumBitRateUplink; + iE_Extensions_t iE_Extensions; + +}; +/* +UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UENRMeasurement_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UENRMeasurement ::= SEQUENCE { + uENRMeasurements RRCContainer, + iE-Extensions ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UENRMeasurement : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UENRMeasurement";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uENRMeasurements_t : RRCContainer + { + static constexpr const char* name() {return "uENRMeasurements_t";} + using parent_t = RRCContainer; + + }; + uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;} + uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + void clear() + { + uENRMeasurements.clear(); + iE_Extensions.clear(); + + }; + private: + uENRMeasurements_t uENRMeasurements; + iE_Extensions_t iE_Extensions; + +}; +/* +UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UESecurityCapabilities ::= SEQUENCE { + encryptionAlgorithms EncryptionAlgorithms, + integrityProtectionAlgorithms IntegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct UESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct encryptionAlgorithms_t : EncryptionAlgorithms + { + static constexpr const char* name() {return "encryptionAlgorithms_t";} + using parent_t = EncryptionAlgorithms; + + }; + encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;} + encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;} + struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms + { + static constexpr const char* name() {return "integrityProtectionAlgorithms_t";} + using parent_t = IntegrityProtectionAlgorithms; + + }; + integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;} + integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + encryptionAlgorithms.clear(); + integrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + encryptionAlgorithms_t encryptionAlgorithms; + integrityProtectionAlgorithms_t integrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +UESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uESidelinkAggregateMaximumBitRate_t : BitRate + { + static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";} + using parent_t = BitRate; + + }; + uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;} + uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + void clear() + { + uESidelinkAggregateMaximumBitRate.clear(); + iE_Extensions.clear(); + + }; + private: + uESidelinkAggregateMaximumBitRate_t uESidelinkAggregateMaximumBitRate; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UEsToBeResetList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEsToBeResetList-Item::= SEQUENCE { + meNB-ID UE-X2AP-ID, + meNB-ID-ext UE-X2AP-ID-Extension OPTIONAL, + sgNB-ID SgNB-UE-X2AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "UEsToBeResetList-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct meNB_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "meNB_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + meNB_ID_t& ref_meNB_ID() {return meNB_ID;} + meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;} + struct meNB_ID_ext_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "meNB_ID_ext_t";} + using parent_t = UE_X2AP_ID_Extension; + static constexpr bool optional = true; + + }; + meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;} + meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;} + struct sgNB_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + static constexpr bool optional = true; + + }; + sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;} + sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + void clear() + { + meNB_ID.clear(); + meNB_ID_ext.clear(); + sgNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + meNB_ID_t meNB_ID; + meNB_ID_ext_t meNB_ID_ext; + sgNB_ID_t sgNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item +*/ + +struct UEsToBeResetList_elm : UEsToBeResetList_Item +{ + static constexpr const char* name() {return "UEsToBeResetList_elm";} + using parent_t = UEsToBeResetList_Item; + +}; +struct UEsToBeResetList : asn::sequenceof +{ + static constexpr const char* name() {return "UEsToBeResetList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) +*/ + +struct UL_HighInterferenceIndication : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-HighInterferenceIndication";} + using parent_t = asn::bstring<>; + +}; + +/* +UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { + target-Cell-ID ECGI, + ul-interferenceindication UL-HighInterferenceIndication, + iE-Extensions ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct target_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "target_Cell_ID_t";} + using parent_t = ECGI; + + }; + target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;} + target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;} + struct ul_interferenceindication_t : UL_HighInterferenceIndication + { + static constexpr const char* name() {return "ul_interferenceindication_t";} + using parent_t = UL_HighInterferenceIndication; + + }; + ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;} + ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + void clear() + { + target_Cell_ID.clear(); + ul_interferenceindication.clear(); + iE_Extensions.clear(); + + }; + private: + target_Cell_ID_t target_Cell_ID; + ul_interferenceindication_t ul_interferenceindication; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item +*/ + +struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item +{ + static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";} + using parent_t = UL_HighInterferenceIndicationInfo_Item; + +}; +struct UL_HighInterferenceIndicationInfo : asn::sequenceof +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... } +*/ + +struct UL_UE_Configuration : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-UE-Configuration";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + no_data + ,shared + ,only + } index_t; + +}; + +/* +ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULConfiguration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULConfiguration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uL_PDCP_t : UL_UE_Configuration + { + static constexpr const char* name() {return "uL_PDCP_t";} + using parent_t = UL_UE_Configuration; + + }; + uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;} + uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_PDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_PDCP); + v(iE_Extensions); + + }; + void clear() + { + uL_PDCP.clear(); + iE_Extensions.clear(); + + }; + private: + uL_PDCP_t uL_PDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct VehicleUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "VehicleUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct V2XServicesAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +V2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "V2XServicesAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct vehicleUE_t : VehicleUE + { + static constexpr const char* name() {return "vehicleUE_t";} + using parent_t = VehicleUE; + static constexpr bool optional = true; + + }; + vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;} + vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;} + struct pedestrianUE_t : PedestrianUE + { + static constexpr const char* name() {return "pedestrianUE_t";} + using parent_t = PedestrianUE; + static constexpr bool optional = true; + + }; + pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;} + pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + void clear() + { + vehicleUE.clear(); + pedestrianUE.clear(); + iE_Extensions.clear(); + + }; + private: + vehicleUE_t vehicleUE; + pedestrianUE_t pedestrianUE; + iE_Extensions_t iE_Extensions; + +}; +/* +WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3)) +*/ + +struct WT_UE_XwAP_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WT-UE-XwAP-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +WTID-Type1 ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + shortWTID BIT STRING (SIZE(24)), + ... +} +*/ + +struct WTID_Type1 : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "WTID-Type1";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct shortWTID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "shortWTID_t";} + using parent_t = asn::bstring<>; + + }; + + shortWTID_t& ref_shortWTID() {return shortWTID;} + shortWTID_t const& ref_shortWTID() const {return shortWTID;} + template void decode(V& v) + { + v(pLMN_Identity); + v(shortWTID); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(shortWTID); + + }; + void clear() + { + pLMN_Identity.clear(); + shortWTID.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + shortWTID_t shortWTID; + +}; +/* +WTID-Long-Type2 ::= BIT STRING (SIZE(48)) +*/ + +struct WTID_Long_Type2 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WTID-Long-Type2";} + using parent_t = asn::bstring<>; + +}; + +/* +WTID ::= CHOICE { + wTID-Type1 WTID-Type1, + wTID-Type2 WTID-Long-Type2, + ... +} +*/ + +struct WTID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WTID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WTID() {clear();} + struct wTID_Type1_t : WTID_Type1 + { + static constexpr const char* name() {return "wTID_Type1_t";} + using parent_t = WTID_Type1; + + }; + struct wTID_Type2_t : WTID_Long_Type2 + { + static constexpr const char* name() {return "wTID_Type2_t";} + using parent_t = WTID_Long_Type2; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as();} return nullptr; } + wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(wTID_Type1_t)]; + char dummy2[sizeof(wTID_Type2_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +X2BenefitValue ::= INTEGER (1..8, ...) +*/ + +struct X2BenefitValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "X2BenefitValue";} + using parent_t = asn::integer<>; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp new file mode 100644 index 0000000..dd85f97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Contents.hpp @@ -0,0 +1,68476 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" +#include "X2AP-Containers.hpp" +#include "X2AP-Constants.hpp" + +/* +ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedCellList-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item +*/ + +struct ActivatedCellList_elm : ActivatedCellList_Item +{ + static constexpr const char* name() {return "ActivatedCellList_elm";} + using parent_t = ActivatedCellList_Item; + +}; +struct ActivatedCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ActivatedNRCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedNRCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedNRCellList-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedNRCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedNRCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedNRCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedNRCellList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ActivatedNRCellList-Item +*/ + +struct ActivatedNRCellList_elm : ActivatedNRCellList_Item +{ + static constexpr const char* name() {return "ActivatedNRCellList_elm";} + using parent_t = ActivatedNRCellList_Item; + +}; +struct ActivatedNRCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedNRCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct CellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, + ... +} +*/ + +struct CellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToActivate-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item +*/ + +struct ServedCellsToActivate_elm : ServedCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedCellsToActivate_elm";} + using parent_t = ServedCellsToActivate_Item; + +}; +struct ServedCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}, + ... +} +*/ + +struct CellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(id_ServedCellsToActivate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToActivate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToActivate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCellsToActivate& select_id_ServedCellsToActivate() { return set(1); } + ServedCellsToActivate const* get_id_ServedCellsToActivate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToActivate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, + ... +} +*/ + +struct CellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct CellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(id_ActivatedCellList); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedCellList)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedCellList& select_id_ActivatedCellList() { return set(1); } + ActivatedCellList const* get_id_ActivatedCellList() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedCellList()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedCellList)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, + ... +} +*/ + +struct CellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +Limited-list-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Limited_list_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Limited-list ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {Limited-list-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Limited_list_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "Limited_list_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +struct Limited_list : asn::sequenceof +{ + static constexpr const char* name() {return "Limited-list";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellAssistanceInformation ::= CHOICE { + limited-list Limited-list, + full-list ENUMERATED {allServedNRcells, ...}, + ... +} +*/ + +struct CellAssistanceInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "CellAssistanceInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~CellAssistanceInformation() {clear();} + struct limited_list_t : Limited_list + { + static constexpr const char* name() {return "limited_list_t";} + using parent_t = Limited_list; + + }; + struct full_list_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "full_list_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allServedNRcells + } index_t; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + limited_list_t& select_limited_list() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + limited_list_t const* get_limited_list() const { if(get_index() == 1) { return &var.as();} return nullptr; } + full_list_t& select_full_list() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + full_list_t const* get_full_list() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(limited_list_t)]; + char dummy2[sizeof(full_list_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ABSInformation CRITICALITY ignore EXTENSION ABSInformation PRESENCE optional }| +{ ID id-InvokeIndication CRITICALITY ignore EXTENSION InvokeIndication PRESENCE optional }| +{ ID id-IntendedULDLConfiguration CRITICALITY ignore EXTENSION SubframeAssignment PRESENCE optional }| +{ ID id-ExtendedULInterferenceOverloadInfo CRITICALITY ignore EXTENSION ExtendedULInterferenceOverloadInfo PRESENCE optional }| +{ ID id-CoMPInformation CRITICALITY ignore EXTENSION CoMPInformation PRESENCE optional }| +{ ID id-DynamicDLTransmissionInformation CRITICALITY ignore EXTENSION DynamicDLTransmissionInformation PRESENCE optional }, + ... +} +*/ + +struct CellInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(id_ABSInformation); type=1;} + void select_id_InvokeIndication() { set(id_InvokeIndication); type=2;} + void select_id_IntendedULDLConfiguration() { set(id_IntendedULDLConfiguration); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(id_ExtendedULInterferenceOverloadInfo); type=4;} + void select_id_CoMPInformation() { set(id_CoMPInformation); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(id_DynamicDLTransmissionInformation); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ABSInformation)) { type = 1; return true; } + else if(equal(id_InvokeIndication)) { type = 2; return true; } + else if(equal(id_IntendedULDLConfiguration)) { type = 3; return true; } + else if(equal(id_ExtendedULInterferenceOverloadInfo)) { type = 4; return true; } + else if(equal(id_CoMPInformation)) { type = 5; return true; } + else if(equal(id_DynamicDLTransmissionInformation)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ABSInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_InvokeIndication);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_IntendedULDLConfiguration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ExtendedULInterferenceOverloadInfo);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CoMPInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DynamicDLTransmissionInformation);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(ignore); type=1;} + void select_id_InvokeIndication() { set(ignore); type=2;} + void select_id_IntendedULDLConfiguration() { set(ignore); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(ignore); type=4;} + void select_id_CoMPInformation() { set(ignore); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ABSInformation& select_id_ABSInformation() { return set(1); } + ABSInformation const* get_id_ABSInformation() const { return get(1); } + InvokeIndication& select_id_InvokeIndication() { return set(2); } + InvokeIndication const* get_id_InvokeIndication() const { return get(2); } + SubframeAssignment& select_id_IntendedULDLConfiguration() { return set(3); } + SubframeAssignment const* get_id_IntendedULDLConfiguration() const { return get(3); } + ExtendedULInterferenceOverloadInfo& select_id_ExtendedULInterferenceOverloadInfo() { return set(4); } + ExtendedULInterferenceOverloadInfo const* get_id_ExtendedULInterferenceOverloadInfo() const { return get(4); } + CoMPInformation& select_id_CoMPInformation() { return set(5); } + CoMPInformation const* get_id_CoMPInformation() const { return get(5); } + DynamicDLTransmissionInformation& select_id_DynamicDLTransmissionInformation() { return set(6); } + DynamicDLTransmissionInformation const* get_id_DynamicDLTransmissionInformation() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ABSInformation()); return true; + case 2: v(select_id_InvokeIndication()); return true; + case 3: v(select_id_IntendedULDLConfiguration()); return true; + case 4: v(select_id_ExtendedULInterferenceOverloadInfo()); return true; + case 5: v(select_id_CoMPInformation()); return true; + case 6: v(select_id_DynamicDLTransmissionInformation()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABSInformation)]; + char dummy2[sizeof(CoMPInformation)]; + char dummy3[sizeof(DynamicDLTransmissionInformation)]; + char dummy4[sizeof(ExtendedULInterferenceOverloadInfo)]; + char dummy5[sizeof(InvokeIndication)]; + char dummy6[sizeof(SubframeAssignment)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(optional); type=1;} + void select_id_InvokeIndication() { set(optional); type=2;} + void select_id_IntendedULDLConfiguration() { set(optional); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(optional); type=4;} + void select_id_CoMPInformation() { set(optional); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-Item ::= SEQUENCE { + cell-ID ECGI, + ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, + ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, + relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellInformation_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellInformation-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + static constexpr bool optional = true; + + }; + ul_InterferenceOverloadIndication_t& set_ul_InterferenceOverloadIndication() { ul_InterferenceOverloadIndication.setpresent(true); return ul_InterferenceOverloadIndication;} + ul_InterferenceOverloadIndication_t const* get_ul_InterferenceOverloadIndication() const {return ul_InterferenceOverloadIndication.is_valid() ? &ul_InterferenceOverloadIndication : nullptr;} + struct ul_HighInterferenceIndicationInfo_t : UL_HighInterferenceIndicationInfo + { + static constexpr const char* name() {return "ul_HighInterferenceIndicationInfo_t";} + using parent_t = UL_HighInterferenceIndicationInfo; + static constexpr bool optional = true; + + }; + ul_HighInterferenceIndicationInfo_t& set_ul_HighInterferenceIndicationInfo() { ul_HighInterferenceIndicationInfo.setpresent(true); return ul_HighInterferenceIndicationInfo;} + ul_HighInterferenceIndicationInfo_t const* get_ul_HighInterferenceIndicationInfo() const {return ul_HighInterferenceIndicationInfo.is_valid() ? &ul_HighInterferenceIndicationInfo : nullptr;} + struct relativeNarrowbandTxPower_t : RelativeNarrowbandTxPower + { + static constexpr const char* name() {return "relativeNarrowbandTxPower_t";} + using parent_t = RelativeNarrowbandTxPower; + static constexpr bool optional = true; + + }; + relativeNarrowbandTxPower_t& set_relativeNarrowbandTxPower() { relativeNarrowbandTxPower.setpresent(true); return relativeNarrowbandTxPower;} + relativeNarrowbandTxPower_t const* get_relativeNarrowbandTxPower() const {return relativeNarrowbandTxPower.is_valid() ? &relativeNarrowbandTxPower : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + ul_InterferenceOverloadIndication.clear(); + ul_HighInterferenceIndicationInfo.clear(); + relativeNarrowbandTxPower.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + ul_InterferenceOverloadIndication_t ul_InterferenceOverloadIndication; + ul_HighInterferenceIndicationInfo_t ul_HighInterferenceIndicationInfo; + relativeNarrowbandTxPower_t relativeNarrowbandTxPower; + iE_Extensions_t iE_Extensions; + +}; +/* +CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } +} +*/ + +struct CellInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(id_CellInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_Item& select_id_CellInformation_Item() { return set(1); } + CellInformation_Item const* get_id_CellInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } +*/ + +struct CellInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional}| + { ID id-ABS-Status CRITICALITY ignore EXTENSION ABS-Status PRESENCE optional}| + { ID id-RSRPMRList CRITICALITY ignore EXTENSION RSRPMRList PRESENCE optional}| + { ID id-CSIReportList CRITICALITY ignore EXTENSION CSIReportList PRESENCE optional}| + { ID id-CellReportingIndicator CRITICALITY ignore EXTENSION CellReportingIndicator PRESENCE optional}, + ... +} +*/ + +struct CellMeasurementResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(id_CompositeAvailableCapacityGroup); type=1;} + void select_id_ABS_Status() { set(id_ABS_Status); type=2;} + void select_id_RSRPMRList() { set(id_RSRPMRList); type=3;} + void select_id_CSIReportList() { set(id_CSIReportList); type=4;} + void select_id_CellReportingIndicator() { set(id_CellReportingIndicator); type=5;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompositeAvailableCapacityGroup)) { type = 1; return true; } + else if(equal(id_ABS_Status)) { type = 2; return true; } + else if(equal(id_RSRPMRList)) { type = 3; return true; } + else if(equal(id_CSIReportList)) { type = 4; return true; } + else if(equal(id_CellReportingIndicator)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompositeAvailableCapacityGroup);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ABS_Status);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RSRPMRList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSIReportList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellReportingIndicator);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(ignore); type=1;} + void select_id_ABS_Status() { set(ignore); type=2;} + void select_id_RSRPMRList() { set(ignore); type=3;} + void select_id_CSIReportList() { set(ignore); type=4;} + void select_id_CellReportingIndicator() { set(ignore); type=5;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + CompositeAvailableCapacityGroup& select_id_CompositeAvailableCapacityGroup() { return set(1); } + CompositeAvailableCapacityGroup const* get_id_CompositeAvailableCapacityGroup() const { return get(1); } + ABS_Status& select_id_ABS_Status() { return set(2); } + ABS_Status const* get_id_ABS_Status() const { return get(2); } + RSRPMRList& select_id_RSRPMRList() { return set(3); } + RSRPMRList const* get_id_RSRPMRList() const { return get(3); } + CSIReportList& select_id_CSIReportList() { return set(4); } + CSIReportList const* get_id_CSIReportList() const { return get(4); } + CellReportingIndicator& select_id_CellReportingIndicator() { return set(5); } + CellReportingIndicator const* get_id_CellReportingIndicator() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompositeAvailableCapacityGroup()); return true; + case 2: v(select_id_ABS_Status()); return true; + case 3: v(select_id_RSRPMRList()); return true; + case 4: v(select_id_CSIReportList()); return true; + case 5: v(select_id_CellReportingIndicator()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABS_Status)]; + char dummy2[sizeof(CSIReportList)]; + char dummy3[sizeof(CellReportingIndicator)]; + char dummy4[sizeof(CompositeAvailableCapacityGroup)]; + char dummy5[sizeof(RSRPMRList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(optional); type=1;} + void select_id_ABS_Status() { set(optional); type=2;} + void select_id_RSRPMRList() { set(optional); type=3;} + void select_id_CSIReportList() { set(optional); type=4;} + void select_id_CellReportingIndicator() { set(optional); type=5;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-Item ::= SEQUENCE { + cell-ID ECGI, + hWLoadIndicator HWLoadIndicator OPTIONAL, + s1TNLLoadIndicator S1TNLLoadIndicator OPTIONAL, + radioResourceStatus RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellMeasurementResult_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellMeasurementResult-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct hWLoadIndicator_t : HWLoadIndicator + { + static constexpr const char* name() {return "hWLoadIndicator_t";} + using parent_t = HWLoadIndicator; + static constexpr bool optional = true; + + }; + hWLoadIndicator_t& set_hWLoadIndicator() { hWLoadIndicator.setpresent(true); return hWLoadIndicator;} + hWLoadIndicator_t const* get_hWLoadIndicator() const {return hWLoadIndicator.is_valid() ? &hWLoadIndicator : nullptr;} + struct s1TNLLoadIndicator_t : S1TNLLoadIndicator + { + static constexpr const char* name() {return "s1TNLLoadIndicator_t";} + using parent_t = S1TNLLoadIndicator; + static constexpr bool optional = true; + + }; + s1TNLLoadIndicator_t& set_s1TNLLoadIndicator() { s1TNLLoadIndicator.setpresent(true); return s1TNLLoadIndicator;} + s1TNLLoadIndicator_t const* get_s1TNLLoadIndicator() const {return s1TNLLoadIndicator.is_valid() ? &s1TNLLoadIndicator : nullptr;} + struct radioResourceStatus_t : RadioResourceStatus + { + static constexpr const char* name() {return "radioResourceStatus_t";} + using parent_t = RadioResourceStatus; + static constexpr bool optional = true; + + }; + radioResourceStatus_t& set_radioResourceStatus() { radioResourceStatus.setpresent(true); return radioResourceStatus;} + radioResourceStatus_t const* get_radioResourceStatus() const {return radioResourceStatus.is_valid() ? &radioResourceStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + hWLoadIndicator.clear(); + s1TNLLoadIndicator.clear(); + radioResourceStatus.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + hWLoadIndicator_t hWLoadIndicator; + s1TNLLoadIndicator_t s1TNLLoadIndicator; + radioResourceStatus_t radioResourceStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory} +} +*/ + +struct CellMeasurementResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(id_CellMeasurementResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellMeasurementResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellMeasurementResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellMeasurementResult_Item& select_id_CellMeasurementResult_Item() { return set(1); } + CellMeasurementResult_Item const* get_id_CellMeasurementResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellMeasurementResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } +*/ + +struct CellMeasurementResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellMeasurementResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellMeasurementResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellMeasurementResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellToReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-Item ::= SEQUENCE { + cell-ID ECGI, + iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellToReport_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellToReport-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory} +} +*/ + +struct CellToReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(id_CellToReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellToReport_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellToReport_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellToReport_Item& select_id_CellToReport_Item() { return set(1); } + CellToReport_Item const* get_id_CellToReport_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellToReport_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } +*/ + +struct CellToReport_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellToReport_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellToReport_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellToReport-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementFailureCause_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-Item ::= SEQUENCE { + measurementFailedReportCharacteristics ReportCharacteristics, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementFailureCause_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "MeasurementFailureCause-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct measurementFailedReportCharacteristics_t : ReportCharacteristics + { + static constexpr const char* name() {return "measurementFailedReportCharacteristics_t";} + using parent_t = ReportCharacteristics; + + }; + measurementFailedReportCharacteristics_t& ref_measurementFailedReportCharacteristics() {return measurementFailedReportCharacteristics;} + measurementFailedReportCharacteristics_t const& ref_measurementFailedReportCharacteristics() const {return measurementFailedReportCharacteristics;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + measurementFailedReportCharacteristics.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + measurementFailedReportCharacteristics_t measurementFailedReportCharacteristics; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE MeasurementFailureCause-Item PRESENCE mandatory} +} +*/ + +struct MeasurementFailureCause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(id_MeasurementFailureCause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementFailureCause_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementFailureCause_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementFailureCause_Item& select_id_MeasurementFailureCause_Item() { return set(1); } + MeasurementFailureCause_Item const* get_id_MeasurementFailureCause_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementFailureCause_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementFailureCause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..maxFailedMeasObjects)) OF ProtocolIE-Single-Container { {MeasurementFailureCause-ItemIEs} } +*/ + +struct MeasurementFailureCause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementFailureCause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementFailureCause_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementFailureCause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompleteFailureCauseInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List, + iE-Extensions ProtocolExtensionContainer { {CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompleteFailureCauseInformation_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + + }; + measurementFailureCause_List_t& ref_measurementFailureCause_List() {return measurementFailureCause_List;} + measurementFailureCause_List_t const& ref_measurementFailureCause_List() const {return measurementFailureCause_List;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE CompleteFailureCauseInformation-Item PRESENCE mandatory} +} +*/ + +struct CompleteFailureCauseInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(id_CompleteFailureCauseInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompleteFailureCauseInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CompleteFailureCauseInformation_Item& select_id_CompleteFailureCauseInformation_Item() { return set(1); } + CompleteFailureCauseInformation_Item const* get_id_CompleteFailureCauseInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompleteFailureCauseInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CompleteFailureCauseInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CompleteFailureCauseInformation-ItemIEs} } +*/ + +struct CompleteFailureCauseInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CompleteFailureCauseInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-DataForwardingAddress-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dl-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-DataForwardingAddress-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dl_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dl_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + dl_GTPtunnelEndpoint_t& ref_dl_GTPtunnelEndpoint() {return dl_GTPtunnelEndpoint;} + dl_GTPtunnelEndpoint_t const& ref_dl_GTPtunnelEndpoint() const {return dl_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dl_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dl_GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-DataForwardingAddress-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-DataForwardingAddress-Item CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(id_E_RABs_DataForwardingAddress_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_DataForwardingAddress_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_DataForwardingAddress_Item& select_id_E_RABs_DataForwardingAddress_Item() { return set(1); } + E_RABs_DataForwardingAddress_Item const* get_id_E_RABs_DataForwardingAddress_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_DataForwardingAddress_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-DataForwardingAddress-ItemIEs} } +*/ + +struct E_RABs_DataForwardingAddress_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_DataForwardingAddress_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_DataForwardingAddress_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +DataForwardingAddressIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-DataForwardingAddress-List CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-List PRESENCE mandatory}, + ... +} +*/ + +struct DataForwardingAddressIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(id_E_RABs_DataForwardingAddress_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 1; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_E_RABs_DataForwardingAddress_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(1); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(1); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + E_RABs_DataForwardingAddress_List& select_id_E_RABs_DataForwardingAddress_List() { return set(4); } + E_RABs_DataForwardingAddress_List const* get_id_E_RABs_DataForwardingAddress_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 2: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_E_RABs_DataForwardingAddress_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataForwardingAddressIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{DataForwardingAddressIndication-IEs}}, + ... +} +*/ + +struct DataForwardingAddressIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "DataForwardingAddressIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTP_TunnelEndpoint_t& set_uL_GTP_TunnelEndpoint() { uL_GTP_TunnelEndpoint.setpresent(true); return uL_GTP_TunnelEndpoint;} + uL_GTP_TunnelEndpoint_t const* get_uL_GTP_TunnelEndpoint() const {return uL_GTP_TunnelEndpoint.is_valid() ? &uL_GTP_TunnelEndpoint : nullptr;} + struct dL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTP_TunnelEndpoint_t& set_dL_GTP_TunnelEndpoint() { dL_GTP_TunnelEndpoint.setpresent(true); return dL_GTP_TunnelEndpoint;} + dL_GTP_TunnelEndpoint_t const* get_dL_GTP_TunnelEndpoint() const {return dL_GTP_TunnelEndpoint.is_valid() ? &dL_GTP_TunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_GTP_TunnelEndpoint.clear(); + dL_GTP_TunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_GTP_TunnelEndpoint_t uL_GTP_TunnelEndpoint; + dL_GTP_TunnelEndpoint_t dL_GTP_TunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(id_E_RABs_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_Item& select_id_E_RABs_Admitted_Item() { return set(1); } + E_RABs_Admitted_Item const* get_id_E_RABs_Admitted_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } +*/ + +struct E_RABs_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(id_E_RABs_Admitted_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_Item& select_id_E_RABs_Admitted_ToBeAdded_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_Item const* get_id_E_RABs_Admitted_ToBeAdded_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(id_E_RABs_Admitted_ToBeAdded_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_ModAckItem& select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeAdded_ModAckItem const* get_id_E_RABs_Admitted_ToBeAdded_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + seNB_GTPtunnelEndpoint_t& set_seNB_GTPtunnelEndpoint() { seNB_GTPtunnelEndpoint.setpresent(true); return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const* get_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint.is_valid() ? &seNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeModified_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(id_E_RABs_Admitted_ToBeModified_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_ModAckItem& select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeModified_ModAckItem const* get_id_E_RABs_Admitted_ToBeModified_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-secondarysgNBDLGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}| + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(id_secondarysgNBDLGTPTEIDatPDCP); type=1;} + void select_id_RLC_Status() { set(id_RLC_Status); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_secondarysgNBDLGTPTEIDatPDCP)) { type = 1; return true; } + else if(equal(id_RLC_Status)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_secondarysgNBDLGTPTEIDatPDCP);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(ignore); type=1;} + void select_id_RLC_Status() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_secondarysgNBDLGTPTEIDatPDCP() { return set(1); } + GTPtunnelEndpoint const* get_id_secondarysgNBDLGTPTEIDatPDCP() const { return get(1); } + RLC_Status& select_id_RLC_Status() { return set(2); } + RLC_Status const* get_id_RLC_Status() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_secondarysgNBDLGTPTEIDatPDCP()); return true; + case 2: v(select_id_RLC_Status()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(optional); type=1;} + void select_id_RLC_Status() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeModified_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToReleased-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToReleased_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(id_E_RABs_Admitted_ToBeReleased_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_ModAckItem& select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { return set(1); } + E_RABs_Admitted_ToReleased_ModAckItem const* get_id_E_RABs_Admitted_ToBeReleased_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToReleased-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToReleased_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF + ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + void clear() + { + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + iE_Extensions.clear(); + + }; + private: + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs X2AP-PROTOCOL-IES ::= { +{ ID id-E-RABs-AdmittedToBeModified-SgNBModConf-Item CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConf-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_AdmittedToBeModified_SgNBModConf_Item& select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { return set(1); } + E_RABs_AdmittedToBeModified_SgNBModConf_Item const* get_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_AdmittedToBeModified_SgNBModConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConfList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container + { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs} } +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_AdmittedToBeModified_SgNBModConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_AdmittedToBeModified_SgNBModConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToCounterCheckItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheckItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToCounterCheckItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItem : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheckItem";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToCounterCheckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToCounterCheckItem CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheckItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(id_E_RABs_SubjectToCounterCheckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToCounterCheckItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheckItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToCounterCheckItem& select_id_E_RABs_SubjectToCounterCheckItem() { return set(1); } + E_RABs_SubjectToCounterCheckItem const* get_id_E_RABs_SubjectToCounterCheckItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToCounterCheckItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToCounterCheckItemIEs} } +*/ + +struct E_RABs_SubjectToCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToSgNBCounterCheck-Item CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(id_E_RABs_SubjectToSgNBCounterCheck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToSgNBCounterCheck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToSgNBCounterCheck_Item& select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { return set(1); } + E_RABs_SubjectToSgNBCounterCheck_Item const* get_id_E_RABs_SubjectToSgNBCounterCheck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToSgNBCounterCheck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToSgNBCounterCheck-ItemIEs} } +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToSgNBCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToSgNBCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| + { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}| + { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| + { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(id_ReceiveStatusOfULPDCPSDUsExtended); type=1;} + void select_id_ULCOUNTValueExtended() { set(id_ULCOUNTValueExtended); type=2;} + void select_id_DLCOUNTValueExtended() { set(id_DLCOUNTValueExtended); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(id_ULCOUNTValuePDCP_SNlength18); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(id_DLCOUNTValuePDCP_SNlength18); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ReceiveStatusOfULPDCPSDUsExtended)) { type = 1; return true; } + else if(equal(id_ULCOUNTValueExtended)) { type = 2; return true; } + else if(equal(id_DLCOUNTValueExtended)) { type = 3; return true; } + else if(equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)) { type = 4; return true; } + else if(equal(id_ULCOUNTValuePDCP_SNlength18)) { type = 5; return true; } + else if(equal(id_DLCOUNTValuePDCP_SNlength18)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsExtended);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ULCOUNTValueExtended);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_DLCOUNTValueExtended);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ULCOUNTValuePDCP_SNlength18);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DLCOUNTValuePDCP_SNlength18);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(ignore); type=1;} + void select_id_ULCOUNTValueExtended() { set(ignore); type=2;} + void select_id_DLCOUNTValueExtended() { set(ignore); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(ignore); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(ignore); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ReceiveStatusOfULPDCPSDUsExtended& select_id_ReceiveStatusOfULPDCPSDUsExtended() { return set(1); } + ReceiveStatusOfULPDCPSDUsExtended const* get_id_ReceiveStatusOfULPDCPSDUsExtended() const { return get(1); } + COUNTValueExtended& select_id_ULCOUNTValueExtended() { return set(2); } + COUNTValueExtended const* get_id_ULCOUNTValueExtended() const { return get(2); } + COUNTValueExtended& select_id_DLCOUNTValueExtended() { return set(3); } + COUNTValueExtended const* get_id_DLCOUNTValueExtended() const { return get(3); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18& select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { return set(4); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 const* get_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() const { return get(4); } + COUNTvaluePDCP_SNlength18& select_id_ULCOUNTValuePDCP_SNlength18() { return set(5); } + COUNTvaluePDCP_SNlength18 const* get_id_ULCOUNTValuePDCP_SNlength18() const { return get(5); } + COUNTvaluePDCP_SNlength18& select_id_DLCOUNTValuePDCP_SNlength18() { return set(6); } + COUNTvaluePDCP_SNlength18 const* get_id_DLCOUNTValuePDCP_SNlength18() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ReceiveStatusOfULPDCPSDUsExtended()); return true; + case 2: v(select_id_ULCOUNTValueExtended()); return true; + case 3: v(select_id_DLCOUNTValueExtended()); return true; + case 4: v(select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18()); return true; + case 5: v(select_id_ULCOUNTValuePDCP_SNlength18()); return true; + case 6: v(select_id_DLCOUNTValuePDCP_SNlength18()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(COUNTValueExtended)]; + char dummy2[sizeof(COUNTvaluePDCP_SNlength18)]; + char dummy3[sizeof(ReceiveStatusOfULPDCPSDUsExtended)]; + char dummy4[sizeof(ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(optional); type=1;} + void select_id_ULCOUNTValueExtended() { set(optional); type=2;} + void select_id_DLCOUNTValueExtended() { set(optional); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(optional); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(optional); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + + receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, + uL-COUNTvalue COUNTvalue, + dL-COUNTvalue COUNTvalue, + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct receiveStatusofULPDCPSDUs_t : ReceiveStatusofULPDCPSDUs + { + static constexpr const char* name() {return "receiveStatusofULPDCPSDUs_t";} + using parent_t = ReceiveStatusofULPDCPSDUs; + static constexpr bool optional = true; + + }; + receiveStatusofULPDCPSDUs_t& set_receiveStatusofULPDCPSDUs() { receiveStatusofULPDCPSDUs.setpresent(true); return receiveStatusofULPDCPSDUs;} + receiveStatusofULPDCPSDUs_t const* get_receiveStatusofULPDCPSDUs() const {return receiveStatusofULPDCPSDUs.is_valid() ? &receiveStatusofULPDCPSDUs : nullptr;} + struct uL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "uL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + uL_COUNTvalue_t& ref_uL_COUNTvalue() {return uL_COUNTvalue;} + uL_COUNTvalue_t const& ref_uL_COUNTvalue() const {return uL_COUNTvalue;} + struct dL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "dL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + dL_COUNTvalue_t& ref_dL_COUNTvalue() {return dL_COUNTvalue;} + dL_COUNTvalue_t const& ref_dL_COUNTvalue() const {return dL_COUNTvalue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + receiveStatusofULPDCPSDUs.clear(); + uL_COUNTvalue.clear(); + dL_COUNTvalue.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + receiveStatusofULPDCPSDUs_t receiveStatusofULPDCPSDUs; + uL_COUNTvalue_t uL_COUNTvalue; + dL_COUNTvalue_t dL_COUNTvalue; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(id_E_RABs_SubjectToStatusTransfer_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToStatusTransfer_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToStatusTransfer_Item& select_id_E_RABs_SubjectToStatusTransfer_Item() { return set(1); } + E_RABs_SubjectToStatusTransfer_Item const* get_id_E_RABs_SubjectToStatusTransfer_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToStatusTransfer_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToStatusTransfer-ItemIEs} } +*/ + +struct E_RABs_SubjectToStatusTransfer_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToStatusTransfer_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToStatusTransfer_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(id_E_RABs_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_Item& select_id_E_RABs_ToBeAdded_Item() { return set(1); } + E_RABs_ToBeAdded_Item const* get_id_E_RABs_ToBeAdded_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeAdded-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(id_E_RABs_ToBeAdded_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_ModReqItem& select_id_E_RABs_ToBeAdded_ModReqItem() { return set(1); } + E_RABs_ToBeAdded_ModReqItem const* get_id_E_RABs_ToBeAdded_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MCG-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MCG_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MCG_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t& set_max_MCG_admit_E_RAB_Level_QoS_Parameters() { max_MCG_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MCG_admit_E_RAB_Level_QoS_Parameters;} + max_MCG_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MCG_admit_E_RAB_Level_QoS_Parameters() const {return max_MCG_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MCG_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MCG_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t max_MCG_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBAddReq-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(id_E_RABs_ToBeAdded_SgNBAddReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBAddReq_Item& select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBAddReq_Item const* get_id_E_RABs_ToBeAdded_SgNBAddReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBAddReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBAddReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBAddReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBAddReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBAddReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeAdded-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(id_E_RABs_ToBeAdded_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBModReq_Item& select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBModReq_Item const* get_id_E_RABs_ToBeAdded_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_GTPtunnelEndpoint_t& set_meNB_GTPtunnelEndpoint() { meNB_GTPtunnelEndpoint.setpresent(true); return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const* get_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint.is_valid() ? &meNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeModified-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeModified-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeModified_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeModified_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeModified_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeModified-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeModified-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(id_E_RABs_ToBeModified_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_ModReqItem& select_id_E_RABs_ToBeModified_ModReqItem() { return set(1); } + E_RABs_ToBeModified_ModReqItem const* get_id_E_RABs_ToBeModified_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeModified_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + full_E_RAB_Level_QoS_Parameters_t& set_full_E_RAB_Level_QoS_Parameters() { full_E_RAB_Level_QoS_Parameters.setpresent(true); return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const* get_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters.is_valid() ? &full_E_RAB_Level_QoS_Parameters : nullptr;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-secondarymeNBULGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(id_secondarymeNBULGTPTEIDatPDCP); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_secondarymeNBULGTPTEIDatPDCP)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_secondarymeNBULGTPTEIDatPDCP);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + GTPtunnelEndpoint& select_id_secondarymeNBULGTPTEIDatPDCP() { return set(3); } + GTPtunnelEndpoint const* get_id_secondarymeNBULGTPTEIDatPDCP() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_secondarymeNBULGTPTEIDatPDCP()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& set_requested_SCG_E_RAB_Level_QoS_Parameters() { requested_SCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const* get_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_SCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_UL_GTP_TEIDatPDCP_t& set_meNB_UL_GTP_TEIDatPDCP() { meNB_UL_GTP_TEIDatPDCP.setpresent(true); return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const* get_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP.is_valid() ? &meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(id_E_RABs_ToBeModified_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReq_Item& select_id_E_RABs_ToBeModified_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReq_Item const* get_id_E_RABs_ToBeModified_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-new-drb-ID-req CRITICALITY ignore EXTENSION NewDRBIDrequest PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_new_drb_ID_req() { set(id_new_drb_ID_req); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_new_drb_ID_req)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_new_drb_ID_req);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_new_drb_ID_req() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + NewDRBIDrequest& select_id_new_drb_ID_req() { return set(3); } + NewDRBIDrequest const* get_id_new_drb_ID_req() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_new_drb_ID_req()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(NewDRBIDrequest)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_new_drb_ID_req() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent ::= SEQUENCE { + requested-MCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + s1-DL-GTP-TEIDatSgNB GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct requested_MCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_MCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_MCG_E_RAB_Level_QoS_Parameters_t& set_requested_MCG_E_RAB_Level_QoS_Parameters() { requested_MCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_MCG_E_RAB_Level_QoS_Parameters;} + requested_MCG_E_RAB_Level_QoS_Parameters_t const* get_requested_MCG_E_RAB_Level_QoS_Parameters() const {return requested_MCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_MCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct s1_DL_GTP_TEIDatSgNB_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTP_TEIDatSgNB_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTP_TEIDatSgNB_t& set_s1_DL_GTP_TEIDatSgNB() { s1_DL_GTP_TEIDatSgNB.setpresent(true); return s1_DL_GTP_TEIDatSgNB;} + s1_DL_GTP_TEIDatSgNB_t const* get_s1_DL_GTP_TEIDatSgNB() const {return s1_DL_GTP_TEIDatSgNB.is_valid() ? &s1_DL_GTP_TEIDatSgNB : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + void clear() + { + requested_MCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + s1_DL_GTP_TEIDatSgNB.clear(); + iE_Extensions.clear(); + + }; + private: + requested_MCG_E_RAB_Level_QoS_Parameters_t requested_MCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + s1_DL_GTP_TEIDatSgNB_t s1_DL_GTP_TEIDatSgNB; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional}| + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + void select_id_lCID() { set(id_lCID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else if(equal(id_lCID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + void select_id_lCID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + LCID& select_id_lCID() { return set(2); } + LCID const* get_id_lCID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: v(select_id_lCID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + void select_id_lCID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(id_E_RABs_ToBeModified_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReqd_Item& select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReqd_Item const* get_id_E_RABs_ToBeModified_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(id_E_RABs_ToBeReleased_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqItem& select_id_E_RABs_ToBeReleased_ModReqItem() { return set(1); } + E_RABs_ToBeReleased_ModReqItem const* get_id_E_RABs_ToBeReleased_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelConfItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelConfItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelConfItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelConfItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelConfItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelConfItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelConfItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelConfItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(id_E_RABs_ToBeReleased_RelConfItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelConfItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelConfItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelConfItem& select_id_E_RABs_ToBeReleased_RelConfItem() { return set(1); } + E_RABs_ToBeReleased_RelConfItem const* get_id_E_RABs_ToBeReleased_RelConfItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelConfItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelConfItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelConf ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelConfItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelConf_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelConf_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelConf : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelConf";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(id_E_RABs_ToBeReleased_RelReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelReqItem& select_id_E_RABs_ToBeReleased_RelReqItem() { return set(1); } + E_RABs_ToBeReleased_RelReqItem const* get_id_E_RABs_ToBeReleased_RelReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqdItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqdItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqdItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqdItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqdItem PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(id_E_RABs_ToBeReleased_ModReqdItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqdItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqdItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqdItem& select_id_E_RABs_ToBeReleased_ModReqdItem() { return set(1); } + E_RABs_ToBeReleased_ModReqdItem const* get_id_E_RABs_ToBeReleased_ModReqdItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqdItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqdItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqd ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqdItemIEs} } +*/ + +struct E_RABs_ToBeReleased_ModReqd_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_ModReqd_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_ModReqd : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBChaConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(id_E_RABs_ToBeReleased_SgNBChaConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBChaConf_Item& select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBChaConf_Item const* get_id_E_RABs_ToBeReleased_SgNBChaConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBChaConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBChaConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBChaConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBChaConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBChaConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBChaConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + dL_GTPtunnelEndpoint.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(id_E_RABs_ToBeReleased_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReq_Item& select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReq_Item const* get_id_E_RABs_ToBeReleased_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReqd_Item& select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(id_E_RABs_ToBeReleased_SgNBRelConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelConf_Item& select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelConf_Item const* get_id_E_RABs_ToBeReleased_SgNBRelConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReq_Item& select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReq_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqd-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReqd_Item& select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqdList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(id_BearerType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_BearerType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_BearerType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(reject); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + BearerType& select_id_BearerType() { return set(1); } + BearerType const* get_id_BearerType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_BearerType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BearerType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetup_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + uL_GTPtunnelEndpoint_t& ref_uL_GTPtunnelEndpoint() {return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const& ref_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(id_E_RABs_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetup_Item& select_id_E_RABs_ToBeSetup_Item() { return set(1); } + E_RABs_ToBeSetup_Item const* get_id_E_RABs_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uL-GTPtunnelEndpoint CRITICALITY reject EXTENSION GTPtunnelEndpoint PRESENCE mandatory}| + { ID id-dL-Forwarding CRITICALITY ignore EXTENSION DL-Forwarding PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(id_uL_GTPtunnelEndpoint); type=1;} + void select_id_dL_Forwarding() { set(id_dL_Forwarding); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uL_GTPtunnelEndpoint)) { type = 1; return true; } + else if(equal(id_dL_Forwarding)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uL_GTPtunnelEndpoint);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dL_Forwarding);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(reject); type=1;} + void select_id_dL_Forwarding() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_uL_GTPtunnelEndpoint() { return set(1); } + GTPtunnelEndpoint const* get_id_uL_GTPtunnelEndpoint() const { return get(1); } + DL_Forwarding& select_id_dL_Forwarding() { return set(2); } + DL_Forwarding const* get_id_dL_Forwarding() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uL_GTPtunnelEndpoint()); return true; + case 2: v(select_id_dL_Forwarding()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_Forwarding)]; + char dummy2[sizeof(GTPtunnelEndpoint)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(mandatory); type=1;} + void select_id_dL_Forwarding() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetupRetrieve-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + bearerType BearerType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetupRetrieve-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetupRetrieve-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct bearerType_t : BearerType + { + static constexpr const char* name() {return "bearerType_t";} + using parent_t = BearerType; + static constexpr bool optional = true; + + }; + bearerType_t& set_bearerType() { bearerType.setpresent(true); return bearerType;} + bearerType_t const* get_bearerType() const {return bearerType.is_valid() ? &bearerType : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + bearerType.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + bearerType_t bearerType; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetupRetrieve-Item CRITICALITY ignore TYPE E-RABs-ToBeSetupRetrieve-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(id_E_RABs_ToBeSetupRetrieve_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetupRetrieve_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetupRetrieve_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetupRetrieve_Item& select_id_E_RABs_ToBeSetupRetrieve_Item() { return set(1); } + E_RABs_ToBeSetupRetrieve_Item const* get_id_E_RABs_ToBeSetupRetrieve_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetupRetrieve_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetupRetrieve_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-ListRetrieve ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetupRetrieve-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_ListRetrieve_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_ListRetrieve_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_ListRetrieve : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-ListRetrieve";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + ... +} +*/ + +struct ENB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +NRNeighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRNeighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRNeighbour-Information ::= SEQUENCE (SIZE (1.. maxofNRNeighbours))OF SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + measurementTimingConfiguration OCTET STRING, + nRNeighbourModeInfo CHOICE { + fdd FDD-InfoNeighbourServedNRCell-Information, + tdd TDD-InfoNeighbourServedNRCell-Information, + ... + }, + iE-Extensions ProtocolExtensionContainer { {NRNeighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRNeighbour_Information_elm : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "NRNeighbour_Information_elm";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct nRNeighbourModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nRNeighbourModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nRNeighbourModeInfo_t() {clear();} + struct fdd_t : FDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoNeighbourServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoNeighbourServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nRNeighbourModeInfo_t& ref_nRNeighbourModeInfo() {return nRNeighbourModeInfo;} + nRNeighbourModeInfo_t const& ref_nRNeighbourModeInfo() const {return nRNeighbourModeInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + measurementTimingConfiguration.clear(); + nRNeighbourModeInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + measurementTimingConfiguration_t measurementTimingConfiguration; + nRNeighbourModeInfo_t nRNeighbourModeInfo; + iE_Extensions_t iE_Extensions; + +}; +struct NRNeighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "NRNeighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsENDCX2Management-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsENDCX2Management_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsENDCX2Management-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + old-ECGI ECGI, + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_elm : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd_elm";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ECGI_t : ECGI + { + static constexpr const char* name() {return "old_ECGI_t";} + using parent_t = ECGI; + + }; + old_ECGI_t& ref_old_ECGI() {return old_ECGI;} + old_ECGI_t const& ref_old_ECGI() const {return old_ECGI;} + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + old_ECGI.clear(); + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + old_ECGI_t old_ECGI; + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsToModifyListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToDeleteListENDCConfUpd ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ServedEUTRAcellsToDeleteListENDCConfUpd_elm : ECGI +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd_elm";} + using parent_t = ECGI; + +}; +struct ServedEUTRAcellsToDeleteListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellAssistanceInformation CRITICALITY reject TYPE CellAssistanceInformation PRESENCE optional }| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedEUTRAcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToModifyListENDCConfUpd PRESENCE optional }| + { ID id-ServedEUTRAcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToDeleteListENDCConfUpd PRESENCE optional }, + ... +} +*/ + +struct ENB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(id_CellAssistanceInformation); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(id_ServedEUTRAcellsToModifyListENDCConfUpd); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(id_ServedEUTRAcellsToDeleteListENDCConfUpd); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellAssistanceInformation)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else if(equal(id_ServedEUTRAcellsToModifyListENDCConfUpd)) { type = 3; return true; } + else if(equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellAssistanceInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToModifyListENDCConfUpd);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(reject); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellAssistanceInformation& select_id_CellAssistanceInformation() { return set(1); } + CellAssistanceInformation const* get_id_CellAssistanceInformation() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + ServedEUTRAcellsToModifyListENDCConfUpd& select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { return set(3); } + ServedEUTRAcellsToModifyListENDCConfUpd const* get_id_ServedEUTRAcellsToModifyListENDCConfUpd() const { return get(3); } + ServedEUTRAcellsToDeleteListENDCConfUpd& select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { return set(4); } + ServedEUTRAcellsToDeleteListENDCConfUpd const* get_id_ServedEUTRAcellsToDeleteListENDCConfUpd() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellAssistanceInformation()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: v(select_id_ServedEUTRAcellsToModifyListENDCConfUpd()); return true; + case 4: v(select_id_ServedEUTRAcellsToDeleteListENDCConfUpd()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellAssistanceInformation)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + char dummy3[sizeof(ServedEUTRAcellsToDeleteListENDCConfUpd)]; + char dummy4[sizeof(ServedEUTRAcellsToModifyListENDCConfUpd)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(optional); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(optional); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(optional); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationResp ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationResp_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationResp CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationResp PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(id_ListofEUTRACellsinEUTRACoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationResp& select_id_ListofEUTRACellsinEUTRACoordinationResp() { return set(3); } + ListofEUTRACellsinEUTRACoordinationResp const* get_id_ListofEUTRACellsinEUTRACoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationReq ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(id_ListofEUTRACellsinEUTRACoordinationReq); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationReq)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationReq);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationReq& select_id_ListofEUTRACellsinEUTRACoordinationReq() { return set(3); } + ListofEUTRACellsinEUTRACoordinationReq const* get_id_ListofEUTRACellsinEUTRACoordinationReq() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationReq()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationReq)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, + ... +} +*/ + +struct ServedCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(id_DeactivationIndication); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DeactivationIndication)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DeactivationIndication);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DeactivationIndication& select_id_DeactivationIndication() { return set(1); } + DeactivationIndication const* get_id_DeactivationIndication() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DeactivationIndication()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DeactivationIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item::= SEQUENCE { + old-ecgi ECGI, + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToModify_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCellsToModify-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ecgi_t : ECGI + { + static constexpr const char* name() {return "old_ecgi_t";} + using parent_t = ECGI; + + }; + old_ecgi_t& ref_old_ecgi() {return old_ecgi;} + old_ecgi_t const& ref_old_ecgi() const {return old_ecgi;} + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + old_ecgi.clear(); + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + old_ecgi_t old_ecgi; + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item +*/ + +struct ServedCellsToModify_elm : ServedCellsToModify_Item +{ + static constexpr const char* name() {return "ServedCellsToModify_elm";} + using parent_t = ServedCellsToModify_Item; + +}; +struct ServedCellsToModify : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToModify";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct Old_ECGIs_elm : ECGI +{ + static constexpr const char* name() {return "Old_ECGIs_elm";} + using parent_t = ECGI; + +}; +struct Old_ECGIs : asn::sequenceof +{ + static constexpr const char* name() {return "Old-ECGIs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional}| + { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional}| + { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional}| + { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CoverageModificationList CRITICALITY reject TYPE CoverageModificationList PRESENCE optional}, + ... +} +*/ + +struct ENBConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(id_ServedCellsToAdd); type=1;} + void select_id_ServedCellsToModify() { set(id_ServedCellsToModify); type=2;} + void select_id_ServedCellsToDelete() { set(id_ServedCellsToDelete); type=3;} + void select_id_GUGroupIDToAddList() { set(id_GUGroupIDToAddList); type=4;} + void select_id_GUGroupIDToDeleteList() { set(id_GUGroupIDToDeleteList); type=5;} + void select_id_CoverageModificationList() { set(id_CoverageModificationList); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToAdd)) { type = 1; return true; } + else if(equal(id_ServedCellsToModify)) { type = 2; return true; } + else if(equal(id_ServedCellsToDelete)) { type = 3; return true; } + else if(equal(id_GUGroupIDToAddList)) { type = 4; return true; } + else if(equal(id_GUGroupIDToDeleteList)) { type = 5; return true; } + else if(equal(id_CoverageModificationList)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToAdd);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCellsToModify);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedCellsToDelete);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUGroupIDToAddList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUGroupIDToDeleteList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CoverageModificationList);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(reject); type=1;} + void select_id_ServedCellsToModify() { set(reject); type=2;} + void select_id_ServedCellsToDelete() { set(reject); type=3;} + void select_id_GUGroupIDToAddList() { set(reject); type=4;} + void select_id_GUGroupIDToDeleteList() { set(reject); type=5;} + void select_id_CoverageModificationList() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCells& select_id_ServedCellsToAdd() { return set(1); } + ServedCells const* get_id_ServedCellsToAdd() const { return get(1); } + ServedCellsToModify& select_id_ServedCellsToModify() { return set(2); } + ServedCellsToModify const* get_id_ServedCellsToModify() const { return get(2); } + Old_ECGIs& select_id_ServedCellsToDelete() { return set(3); } + Old_ECGIs const* get_id_ServedCellsToDelete() const { return get(3); } + GUGroupIDList& select_id_GUGroupIDToAddList() { return set(4); } + GUGroupIDList const* get_id_GUGroupIDToAddList() const { return get(4); } + GUGroupIDList& select_id_GUGroupIDToDeleteList() { return set(5); } + GUGroupIDList const* get_id_GUGroupIDToDeleteList() const { return get(5); } + CoverageModificationList& select_id_CoverageModificationList() { return set(6); } + CoverageModificationList const* get_id_CoverageModificationList() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToAdd()); return true; + case 2: v(select_id_ServedCellsToModify()); return true; + case 3: v(select_id_ServedCellsToDelete()); return true; + case 4: v(select_id_GUGroupIDToAddList()); return true; + case 5: v(select_id_GUGroupIDToDeleteList()); return true; + case 6: v(select_id_CoverageModificationList()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CoverageModificationList)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(Old_ECGIs)]; + char dummy4[sizeof(ServedCells)]; + char dummy5[sizeof(ServedCellsToModify)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(optional); type=1;} + void select_id_ServedCellsToModify() { set(optional); type=2;} + void select_id_ServedCellsToDelete() { set(optional); type=3;} + void select_id_GUGroupIDToAddList() { set(optional); type=4;} + void select_id_GUGroupIDToDeleteList() { set(optional); type=5;} + void select_id_CoverageModificationList() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, +... +} +*/ + +struct ENBConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateFailure-IEs X2AP-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}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCCellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(id_ActivationID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivationID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivationID& select_id_ActivationID() { return set(1); } + ActivationID const* get_id_ActivationID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivationID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationFailure-IEs}}, + ... +} +*/ + +struct ENDCCellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedNRCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToActivate-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedNRCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCellsToActivate::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ServedNRCellsToActivate-Item +*/ + +struct ServedNRCellsToActivate_elm : ServedNRCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedNRCellsToActivate_elm";} + using parent_t = ServedNRCellsToActivate_Item; + +}; +struct ServedNRCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENDCCellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRCellsToActivate CRITICALITY reject TYPE ServedNRCellsToActivate PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}, + ... +} +*/ + +struct ENDCCellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(id_ServedNRCellsToActivate); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRCellsToActivate)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRCellsToActivate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(reject); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRCellsToActivate& select_id_ServedNRCellsToActivate() { return set(1); } + ServedNRCellsToActivate const* get_id_ServedNRCellsToActivate() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRCellsToActivate()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(ServedNRCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationRequest-IEs}}, + ... +} +*/ + +struct ENDCCellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedNRCellList CRITICALITY ignore TYPE ActivatedNRCellList PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct ENDCCellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(id_ActivatedNRCellList); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedNRCellList)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedNRCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(ignore); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedNRCellList& select_id_ActivatedNRCellList() { return set(1); } + ActivatedNRCellList const* get_id_ActivatedNRCellList() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedNRCellList()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedNRCellList)]; + char dummy2[sizeof(ActivationID)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationResponse-IEs}}, + ... +} +*/ + +struct ENDCCellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +FDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoServedNRCell_Information : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct ul_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "ul_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + ul_NR_TxBW_t& ref_ul_NR_TxBW() {return ul_NR_TxBW;} + ul_NR_TxBW_t const& ref_ul_NR_TxBW() const {return ul_NR_TxBW;} + struct dl_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "dl_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + dl_NR_TxBW_t& ref_dl_NR_TxBW() {return dl_NR_TxBW;} + dl_NR_TxBW_t const& ref_dl_NR_TxBW() const {return dl_NR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + ul_NR_TxBW.clear(); + dl_NR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + ul_NR_TxBW_t ul_NR_TxBW; + dl_NR_TxBW_t dl_NR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + nR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct nR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "nR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + nR_TxBW_t& ref_nR_TxBW() {return nR_TxBW;} + nR_TxBW_t const& ref_nR_TxBW() const {return nR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + nR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + nR_TxBW_t nR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCell_Information : asn::sequence<8, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCell-Information";} + using parent_t = asn::sequence<8, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct nrModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nrModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nrModeInfo_t() {clear();} + struct fdd_t : FDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nrModeInfo_t& ref_nrModeInfo() {return nrModeInfo;} + nrModeInfo_t const& ref_nrModeInfo() const {return nrModeInfo;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + broadcastPLMNs.clear(); + nrModeInfo.clear(); + measurementTimingConfiguration.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + broadcastPLMNs_t broadcastPLMNs; + nrModeInfo_t nrModeInfo; + measurementTimingConfiguration_t measurementTimingConfiguration; + iE_Extensions_t iE_Extensions; + +}; +/* +En-gNBServedCells-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct En_gNBServedCells_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF SEQUENCE { + servedNRCellInfo ServedNRCell-Information, + nRNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {En-gNBServedCells-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedNRCellInfo_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInfo_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInfo_t& ref_servedNRCellInfo() {return servedNRCellInfo;} + servedNRCellInfo_t const& ref_servedNRCellInfo() const {return servedNRCellInfo;} + struct nRNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nRNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nRNeighbourInfo_t& set_nRNeighbourInfo() { nRNeighbourInfo.setpresent(true); return nRNeighbourInfo;} + nRNeighbourInfo_t const* get_nRNeighbourInfo() const {return nRNeighbourInfo.is_valid() ? &nRNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedNRCellInfo.clear(); + nRNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedNRCellInfo_t servedNRCellInfo; + nRNeighbourInfo_t nRNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedNRcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToModify-Item::= SEQUENCE { + old-nrcgi NRCGI, + servedNRCellInformation ServedNRCell-Information, + nrNeighbourInformation NRNeighbour-Information OPTIONAL, + nrDeactivationIndication DeactivationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToModify_Item : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCellsToModify-Item";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct old_nrcgi_t : NRCGI + { + static constexpr const char* name() {return "old_nrcgi_t";} + using parent_t = NRCGI; + + }; + old_nrcgi_t& ref_old_nrcgi() {return old_nrcgi;} + old_nrcgi_t const& ref_old_nrcgi() const {return old_nrcgi;} + struct servedNRCellInformation_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInformation_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInformation_t& ref_servedNRCellInformation() {return servedNRCellInformation;} + servedNRCellInformation_t const& ref_servedNRCellInformation() const {return servedNRCellInformation;} + struct nrNeighbourInformation_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInformation_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInformation_t& set_nrNeighbourInformation() { nrNeighbourInformation.setpresent(true); return nrNeighbourInformation;} + nrNeighbourInformation_t const* get_nrNeighbourInformation() const {return nrNeighbourInformation.is_valid() ? &nrNeighbourInformation : nullptr;} + struct nrDeactivationIndication_t : DeactivationIndication + { + static constexpr const char* name() {return "nrDeactivationIndication_t";} + using parent_t = DeactivationIndication; + static constexpr bool optional = true; + + }; + nrDeactivationIndication_t& set_nrDeactivationIndication() { nrDeactivationIndication.setpresent(true); return nrDeactivationIndication;} + nrDeactivationIndication_t const* get_nrDeactivationIndication() const {return nrDeactivationIndication.is_valid() ? &nrDeactivationIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + void clear() + { + old_nrcgi.clear(); + servedNRCellInformation.clear(); + nrNeighbourInformation.clear(); + nrDeactivationIndication.clear(); + iE_Extensions.clear(); + + }; + private: + old_nrcgi_t old_nrcgi; + servedNRCellInformation_t servedNRCellInformation; + nrNeighbourInformation_t nrNeighbourInformation; + nrDeactivationIndication_t nrDeactivationIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRcellsToModifyENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF ServedNRCellsToModify-Item +*/ + +struct ServedNRcellsToModifyENDCConfUpdList_elm : ServedNRCellsToModify_Item +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList_elm";} + using parent_t = ServedNRCellsToModify_Item; + +}; +struct ServedNRcellsToModifyENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRcellsToDeleteENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF NRCGI +*/ + +struct ServedNRcellsToDeleteENDCConfUpdList_elm : NRCGI +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList_elm";} + using parent_t = NRCGI; + +}; +struct ServedNRcellsToDeleteENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedNRcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToModifyENDCConfUpdList PRESENCE optional }| + { ID id-ServedNRcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToDeleteENDCConfUpdList PRESENCE optional }, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(id_ServedNRcellsToModifyListENDCConfUpd); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(id_ServedNRcellsToDeleteListENDCConfUpd); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else if(equal(id_ServedNRcellsToModifyListENDCConfUpd)) { type = 2; return true; } + else if(equal(id_ServedNRcellsToDeleteListENDCConfUpd)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsToModifyListENDCConfUpd);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedNRcellsToDeleteListENDCConfUpd);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(reject); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + ServedNRcellsToModifyENDCConfUpdList& select_id_ServedNRcellsToModifyListENDCConfUpd() { return set(2); } + ServedNRcellsToModifyENDCConfUpdList const* get_id_ServedNRcellsToModifyListENDCConfUpd() const { return get(2); } + ServedNRcellsToDeleteENDCConfUpdList& select_id_ServedNRcellsToDeleteListENDCConfUpd() { return set(3); } + ServedNRcellsToDeleteENDCConfUpdList const* get_id_ServedNRcellsToDeleteListENDCConfUpd() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: v(select_id_ServedNRcellsToModifyListENDCConfUpd()); return true; + case 3: v(select_id_ServedNRcellsToDeleteListENDCConfUpd()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + char dummy2[sizeof(ServedNRcellsToDeleteENDCConfUpdList)]; + char dummy3[sizeof(ServedNRcellsToModifyENDCConfUpdList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(optional); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcConfigUpdate::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcConfigUpdate() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcConfigUpdate CRITICALITY reject TYPE InitiatingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(id_InitiatingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcConfigUpdate& select_id_InitiatingNodeType_EndcConfigUpdate() { return set(1); } + InitiatingNodeType_EndcConfigUpdate const* get_id_InitiatingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional}, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcConfigUpdate::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcConfigUpdate() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcConfigUpdate CRITICALITY reject TYPE RespondingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(id_RespondingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcConfigUpdate& select_id_RespondingNodeType_EndcConfigUpdate() { return set(1); } + RespondingNodeType_EndcConfigUpdate const* get_id_RespondingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-Admitted-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}, + ... +} +*/ + +struct ENDCPartialResetConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(id_UEs_Admitted_ToBeReset); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_Admitted_ToBeReset)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_Admitted_ToBeReset);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_Admitted_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_Admitted_ToBeReset() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_Admitted_ToBeReset()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetConfirm-IEs}}, + ... +} +*/ + +struct ENDCPartialResetConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} +*/ + +struct ENDCPartialResetRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(id_UEs_ToBeReset); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_ToBeReset)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_ToBeReset);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_ToBeReset() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_ToBeReset()); return true; + case 2: v(select_id_Cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetRequired-IEs}}, + ... +} +*/ + +struct ENDCPartialResetRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCX2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalFailure-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Removal ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Removal() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Removal CRITICALITY reject TYPE InitiatingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(id_InitiatingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Removal& select_id_InitiatingNodeType_EndcX2Removal() { return set(1); } + InitiatingNodeType_EndcX2Removal const* get_id_InitiatingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalRequest-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Removal ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Removal() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Removal CRITICALITY reject TYPE RespondingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(id_RespondingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Removal& select_id_RespondingNodeType_EndcX2Removal() { return set(1); } + RespondingNodeType_EndcX2Removal const* get_id_RespondingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalResponse-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } | + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCX2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupFailure-IEs}}, + ... +} +*/ + +struct ENDCX2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Setup ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Setup() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Setup CRITICALITY reject TYPE InitiatingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(id_InitiatingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Setup& select_id_InitiatingNodeType_EndcX2Setup() { return set(1); } + InitiatingNodeType_EndcX2Setup const* get_id_InitiatingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupRequest-IEs}}, + ... +} +*/ + +struct ENDCX2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Setup ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Setup() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Setup CRITICALITY reject TYPE RespondingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(id_RespondingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Setup& select_id_RespondingNodeType_EndcX2Setup() { return set(1); } + RespondingNodeType_EndcX2Setup const* get_id_RespondingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupResponse-IEs}}, + ... +} +*/ + +struct ENDCX2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofEUTRACellsinNRCoordinationReq ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinNRCoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ListofNRCellsinNRCoordinationReq ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationReq_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-ListofEUTRACellsinNRCoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinNRCoordinationReq PRESENCE mandatory }| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationReq CRITICALITY reject TYPE ListofNRCellsinNRCoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(id_ListofEUTRACellsinNRCoordinationReq); type=2;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(id_ListofNRCellsinNRCoordinationReq); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_ListofEUTRACellsinNRCoordinationReq)) { type = 2; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 3; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationReq)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinNRCoordinationReq);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationReq);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(reject); type=2;} + void select_id_SpectrumSharingGroupID() { set(reject); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + ListofEUTRACellsinNRCoordinationReq& select_id_ListofEUTRACellsinNRCoordinationReq() { return set(2); } + ListofEUTRACellsinNRCoordinationReq const* get_id_ListofEUTRACellsinNRCoordinationReq() const { return get(2); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(3); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(3); } + ListofNRCellsinNRCoordinationReq& select_id_ListofNRCellsinNRCoordinationReq() { return set(4); } + ListofNRCellsinNRCoordinationReq const* get_id_ListofNRCellsinNRCoordinationReq() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_ListofEUTRACellsinNRCoordinationReq()); return true; + case 3: v(select_id_SpectrumSharingGroupID()); return true; + case 4: v(select_id_ListofNRCellsinNRCoordinationReq()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinNRCoordinationReq)]; + char dummy3[sizeof(ListofNRCellsinNRCoordinationReq)]; + char dummy4[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(mandatory); type=2;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EutranrCellResourceCoordination ::= CHOICE { + initiate-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqIEs}}, + initiate-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EutranrCellResourceCoordination() {clear();} + struct initiate_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct initiate_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + initiate_eNB_t& select_initiate_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiate_eNB_t const* get_initiate_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + initiate_en_gNB_t& select_initiate_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + initiate_en_gNB_t const* get_initiate_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiate_eNB_t)]; + char dummy2[sizeof(initiate_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE InitiatingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(id_InitiatingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EutranrCellResourceCoordination& select_id_InitiatingNodeType_EutranrCellResourceCoordination() { return set(1); } + InitiatingNodeType_EutranrCellResourceCoordination const* get_id_InitiatingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationRequest-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofNRCellsinNRCoordinationResp ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationResp_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationResp CRITICALITY reject TYPE ListofNRCellsinNRCoordinationResp PRESENCE mandatory}, + + + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(id_ListofNRCellsinNRCoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofNRCellsinNRCoordinationResp& select_id_ListofNRCellsinNRCoordinationResp() { return set(3); } + ListofNRCellsinNRCoordinationResp const* get_id_ListofNRCellsinNRCoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofNRCellsinNRCoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofNRCellsinNRCoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EutranrCellResourceCoordination ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EutranrCellResourceCoordination() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE RespondingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(id_RespondingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EutranrCellResourceCoordination& select_id_RespondingNodeType_EutranrCellResourceCoordination() { return set(1); } + RespondingNodeType_EutranrCellResourceCoordination const* get_id_RespondingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationResponse-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct ErrorIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(id_Old_SgNB_UE_X2AP_ID); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_Old_SgNB_UE_X2AP_ID)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_Old_SgNB_UE_X2AP_ID);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(6); } + SgNB_UE_X2AP_ID& select_id_Old_SgNB_UE_X2AP_ID() { return set(7); } + SgNB_UE_X2AP_ID const* get_id_Old_SgNB_UE_X2AP_ID() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_Old_SgNB_UE_X2AP_ID()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(optional); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} +*/ + +struct ErrorIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ErrorIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +GNBStatusIndicationIEs X2AP-PROTOCOL-IES ::= { + { ID id-GNBOverloadInformation CRITICALITY ignore TYPE GNBOverloadInformation PRESENCE mandatory}, + ... +} +*/ + +struct GNBStatusIndicationIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(id_GNBOverloadInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GNBOverloadInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GNBOverloadInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GNBOverloadInformation& select_id_GNBOverloadInformation() { return set(1); } + GNBOverloadInformation const* get_id_GNBOverloadInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GNBOverloadInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GNBOverloadInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GNBStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBStatusIndicationIEs} }, + ... +} +*/ + +struct GNBStatusIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "GNBStatusIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct HandoverCancel_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, + ... +} +*/ + +struct HandoverCancel : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverCancel";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + + ... +} +*/ + +struct HandoverPreparationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, + ... +} +*/ + +struct HandoverPreparationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverPreparationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityInformation ::= BIT STRING (SIZE(32)) +*/ + +struct MobilityInformation : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MobilityInformation";} + using parent_t = asn::bstring<>; + +}; + +/* +HandoverReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- | + { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to "InterRAT ping-pong" --| + { ID id-SourceCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct HandoverReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(id_HandoverReportType); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_SourceCellECGI() { set(id_SourceCellECGI); type=3;} + void select_id_FailureCellECGI() { set(id_FailureCellECGI); type=4;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=5;} + void select_id_TargetCellInUTRAN() { set(id_TargetCellInUTRAN); type=6;} + void select_id_SourceCellCRNTI() { set(id_SourceCellCRNTI); type=7;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=8;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_HandoverReportType)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_SourceCellECGI)) { type = 3; return true; } + else if(equal(id_FailureCellECGI)) { type = 4; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 5; return true; } + else if(equal(id_TargetCellInUTRAN)) { type = 6; return true; } + else if(equal(id_SourceCellCRNTI)) { type = 7; return true; } + else if(equal(id_MobilityInformation)) { type = 8; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 9; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_HandoverReportType);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SourceCellECGI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_FailureCellECGI);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_TargetCellInUTRAN);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SourceCellCRNTI);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_SourceCellECGI() { set(ignore); type=3;} + void select_id_FailureCellECGI() { set(ignore); type=4;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=5;} + void select_id_TargetCellInUTRAN() { set(ignore); type=6;} + void select_id_SourceCellCRNTI() { set(ignore); type=7;} + void select_id_MobilityInformation() { set(ignore); type=8;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + HandoverReportType& select_id_HandoverReportType() { return set(1); } + HandoverReportType const* get_id_HandoverReportType() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_SourceCellECGI() { return set(3); } + ECGI const* get_id_SourceCellECGI() const { return get(3); } + ECGI& select_id_FailureCellECGI() { return set(4); } + ECGI const* get_id_FailureCellECGI() const { return get(4); } + ECGI& select_id_Re_establishmentCellECGI() { return set(5); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(5); } + TargetCellInUTRAN& select_id_TargetCellInUTRAN() { return set(6); } + TargetCellInUTRAN const* get_id_TargetCellInUTRAN() const { return get(6); } + CRNTI& select_id_SourceCellCRNTI() { return set(7); } + CRNTI const* get_id_SourceCellCRNTI() const { return get(7); } + MobilityInformation& select_id_MobilityInformation() { return set(8); } + MobilityInformation const* get_id_MobilityInformation() const { return get(8); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(9); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(9); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(10); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_HandoverReportType()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_SourceCellECGI()); return true; + case 4: v(select_id_FailureCellECGI()); return true; + case 5: v(select_id_Re_establishmentCellECGI()); return true; + case 6: v(select_id_TargetCellInUTRAN()); return true; + case 7: v(select_id_SourceCellCRNTI()); return true; + case 8: v(select_id_MobilityInformation()); return true; + case 9: v(select_id_UE_RLF_Report_Container()); return true; + case 10: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(HandoverReportType)]; + char dummy5[sizeof(MobilityInformation)]; + char dummy6[sizeof(TargetCellInUTRAN)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_SourceCellECGI() { set(mandatory); type=3;} + void select_id_FailureCellECGI() { set(mandatory); type=4;} + void select_id_Re_establishmentCellECGI() { set(conditional); type=5;} + void select_id_TargetCellInUTRAN() { set(conditional); type=6;} + void select_id_SourceCellCRNTI() { set(optional); type=7;} + void select_id_MobilityInformation() { set(optional); type=8;} + void select_id_UE_RLF_Report_Container() { set(optional); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(conditional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(conditional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, + ... +} +*/ + +struct HandoverReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION ManagementBasedMDTallowed PRESENCE optional }| +{ ID id-ManagementBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }| +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(id_ManagementBasedMDTallowed); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(id_ManagementBasedMDTPLMNList); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ManagementBasedMDTallowed)) { type = 1; return true; } + else if(equal(id_ManagementBasedMDTPLMNList)) { type = 2; return true; } + else if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ManagementBasedMDTallowed);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ManagementBasedMDTPLMNList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(ignore); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(ignore); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ManagementBasedMDTallowed& select_id_ManagementBasedMDTallowed() { return set(1); } + ManagementBasedMDTallowed const* get_id_ManagementBasedMDTallowed() const { return get(1); } + MDTPLMNList& select_id_ManagementBasedMDTPLMNList() { return set(2); } + MDTPLMNList const* get_id_ManagementBasedMDTPLMNList() const { return get(2); } + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(3); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ManagementBasedMDTallowed()); return true; + case 2: v(select_id_ManagementBasedMDTPLMNList()); return true; + case 3: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDTPLMNList)]; + char dummy2[sizeof(ManagementBasedMDTallowed)]; + char dummy3[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(optional); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(optional); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation : asn::sequence<10, 0, true, 4> +{ + static constexpr const char* name() {return "UE-ContextInformation";} + using parent_t = asn::sequence<10, 0, true, 4>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_List_t : E_RABs_ToBeSetup_List + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_List_t";} + using parent_t = E_RABs_ToBeSetup_List; + + }; + e_RABs_ToBeSetup_List_t& ref_e_RABs_ToBeSetup_List() {return e_RABs_ToBeSetup_List;} + e_RABs_ToBeSetup_List_t const& ref_e_RABs_ToBeSetup_List() const {return e_RABs_ToBeSetup_List;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_List.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSeNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSeNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSeNB ::= SEQUENCE { + source-GlobalSeNB-ID GlobalENB-ID, + seNB-UE-X2AP-ID UE-X2AP-ID, + seNB-UE-X2AP-ID-Extension UE-X2AP-ID-Extension, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSeNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSeNB : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSeNB";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct source_GlobalSeNB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalSeNB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalSeNB_ID_t& ref_source_GlobalSeNB_ID() {return source_GlobalSeNB_ID;} + source_GlobalSeNB_ID_t const& ref_source_GlobalSeNB_ID() const {return source_GlobalSeNB_ID;} + struct seNB_UE_X2AP_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + seNB_UE_X2AP_ID_t& ref_seNB_UE_X2AP_ID() {return seNB_UE_X2AP_ID;} + seNB_UE_X2AP_ID_t const& ref_seNB_UE_X2AP_ID() const {return seNB_UE_X2AP_ID;} + struct seNB_UE_X2AP_ID_Extension_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_Extension_t";} + using parent_t = UE_X2AP_ID_Extension; + + }; + seNB_UE_X2AP_ID_Extension_t& ref_seNB_UE_X2AP_ID_Extension() {return seNB_UE_X2AP_ID_Extension;} + seNB_UE_X2AP_ID_Extension_t const& ref_seNB_UE_X2AP_ID_Extension() const {return seNB_UE_X2AP_ID_Extension;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSeNB_ID.clear(); + seNB_UE_X2AP_ID.clear(); + seNB_UE_X2AP_ID_Extension.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSeNB_ID_t source_GlobalSeNB_ID; + seNB_UE_X2AP_ID_t seNB_UE_X2AP_ID; + seNB_UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtWT-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtWT_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtWT ::= SEQUENCE { + wTID WTID, + wT-UE-XwAP-ID WT-UE-XwAP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtWT-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtWT : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtWT";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct wTID_t : WTID + { + static constexpr const char* name() {return "wTID_t";} + using parent_t = WTID; + + }; + wTID_t& ref_wTID() {return wTID;} + wTID_t const& ref_wTID() const {return wTID;} + struct wT_UE_XwAP_ID_t : WT_UE_XwAP_ID + { + static constexpr const char* name() {return "wT_UE_XwAP_ID_t";} + using parent_t = WT_UE_XwAP_ID; + + }; + wT_UE_XwAP_ID_t& ref_wT_UE_XwAP_ID() {return wT_UE_XwAP_ID;} + wT_UE_XwAP_ID_t const& ref_wT_UE_XwAP_ID() const {return wT_UE_XwAP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + void clear() + { + wTID.clear(); + wT_UE_XwAP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + wTID_t wTID; + wT_UE_XwAP_ID_t wT_UE_XwAP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSgNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSgNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSgNB ::= SEQUENCE { + source-GlobalSgNB-ID GlobalGNB-ID, + sgNB-UE-X2AP-ID SgNB-UE-X2AP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSgNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSgNB : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSgNB";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct source_GlobalSgNB_ID_t : GlobalGNB_ID + { + static constexpr const char* name() {return "source_GlobalSgNB_ID_t";} + using parent_t = GlobalGNB_ID; + + }; + source_GlobalSgNB_ID_t& ref_source_GlobalSgNB_ID() {return source_GlobalSgNB_ID;} + source_GlobalSgNB_ID_t const& ref_source_GlobalSgNB_ID() const {return source_GlobalSgNB_ID;} + struct sgNB_UE_X2AP_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_UE_X2AP_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + + }; + sgNB_UE_X2AP_ID_t& ref_sgNB_UE_X2AP_ID() {return sgNB_UE_X2AP_ID;} + sgNB_UE_X2AP_ID_t const& ref_sgNB_UE_X2AP_ID() const {return sgNB_UE_X2AP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSgNB_ID.clear(); + sgNB_UE_X2AP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSgNB_ID_t source_GlobalSgNB_ID; + sgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory}| + { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-UE-HistoryInformationFromTheUE CRITICALITY ignore TYPE UE-HistoryInformationFromTheUE PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtSeNB CRITICALITY ignore TYPE UE-ContextReferenceAtSeNB PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtWT CRITICALITY ignore TYPE UE-ContextReferenceAtWT PRESENCE optional}| + { ID id-NRUESecurityCapabilities CRITICALITY ignore TYPE NRUESecurityCapabilities PRESENCE optional}| + { ID id-UE-ContextReferenceAtSgNB CRITICALITY ignore TYPE UE-ContextReferenceAtSgNB PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct HandoverRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_TargetCell_ID() { set(id_TargetCell_ID); type=3;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=4;} + void select_id_UE_ContextInformation() { set(id_UE_ContextInformation); type=5;} + void select_id_UE_HistoryInformation() { set(id_UE_HistoryInformation); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=9;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=10;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(id_UE_HistoryInformationFromTheUE); type=12;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=13;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(id_UE_ContextReferenceAtSeNB); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=16;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(id_UE_ContextReferenceAtWT); type=18;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(id_UE_ContextReferenceAtSgNB); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=22;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_TargetCell_ID)) { type = 3; return true; } + else if(equal(id_GUMMEI_ID)) { type = 4; return true; } + else if(equal(id_UE_ContextInformation)) { type = 5; return true; } + else if(equal(id_UE_HistoryInformation)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 9; return true; } + else if(equal(id_MobilityInformation)) { type = 10; return true; } + else if(equal(id_Masked_IMEISV)) { type = 11; return true; } + else if(equal(id_UE_HistoryInformationFromTheUE)) { type = 12; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 13; return true; } + else if(equal(id_ProSeAuthorized)) { type = 14; return true; } + else if(equal(id_UE_ContextReferenceAtSeNB)) { type = 15; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 16; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 17; return true; } + else if(equal(id_UE_ContextReferenceAtWT)) { type = 18; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 19; return true; } + else if(equal(id_UE_ContextReferenceAtSgNB)) { type = 20; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 21; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TargetCell_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_HistoryInformation);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_UE_HistoryInformationFromTheUE);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSeNB);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtWT);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSgNB);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_TargetCell_ID() { set(reject); type=3;} + void select_id_GUMMEI_ID() { set(reject); type=4;} + void select_id_UE_ContextInformation() { set(reject); type=5;} + void select_id_UE_HistoryInformation() { set(ignore); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_CSGMembershipStatus() { set(reject); type=9;} + void select_id_MobilityInformation() { set(ignore); type=10;} + void select_id_Masked_IMEISV() { set(ignore); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(ignore); type=12;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=13;} + void select_id_ProSeAuthorized() { set(ignore); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(ignore); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=16;} + void select_id_V2XServicesAuthorized() { set(ignore); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(ignore); type=18;} + void select_id_NRUESecurityCapabilities() { set(ignore); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(ignore); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=22;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(ignore)) { type = 18; return true; } + else if(equal(ignore)) { type = 19; return true; } + else if(equal(ignore)) { type = 20; return true; } + else if(equal(ignore)) { type = 21; return true; } + else if(equal(ignore)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(ignore);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(ignore);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(ignore);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(ignore);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(ignore);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_TargetCell_ID() { return set(3); } + ECGI const* get_id_TargetCell_ID() const { return get(3); } + GUMMEI& select_id_GUMMEI_ID() { return set(4); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(4); } + UE_ContextInformation& select_id_UE_ContextInformation() { return set(5); } + UE_ContextInformation const* get_id_UE_ContextInformation() const { return get(5); } + UE_HistoryInformation& select_id_UE_HistoryInformation() { return set(6); } + UE_HistoryInformation const* get_id_UE_HistoryInformation() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(9); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(9); } + MobilityInformation& select_id_MobilityInformation() { return set(10); } + MobilityInformation const* get_id_MobilityInformation() const { return get(10); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(11); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(11); } + UE_HistoryInformationFromTheUE& select_id_UE_HistoryInformationFromTheUE() { return set(12); } + UE_HistoryInformationFromTheUE const* get_id_UE_HistoryInformationFromTheUE() const { return get(12); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(13); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(13); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(14); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(14); } + UE_ContextReferenceAtSeNB& select_id_UE_ContextReferenceAtSeNB() { return set(15); } + UE_ContextReferenceAtSeNB const* get_id_UE_ContextReferenceAtSeNB() const { return get(15); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(16); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(16); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(17); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(17); } + UE_ContextReferenceAtWT& select_id_UE_ContextReferenceAtWT() { return set(18); } + UE_ContextReferenceAtWT const* get_id_UE_ContextReferenceAtWT() const { return get(18); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(19); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(19); } + UE_ContextReferenceAtSgNB& select_id_UE_ContextReferenceAtSgNB() { return set(20); } + UE_ContextReferenceAtSgNB const* get_id_UE_ContextReferenceAtSgNB() const { return get(20); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(21); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(21); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(22); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(22); } + bool is_unknown() const { return type == 23; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_TargetCell_ID()); return true; + case 4: v(select_id_GUMMEI_ID()); return true; + case 5: v(select_id_UE_ContextInformation()); return true; + case 6: v(select_id_UE_HistoryInformation()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_CSGMembershipStatus()); return true; + case 10: v(select_id_MobilityInformation()); return true; + case 11: v(select_id_Masked_IMEISV()); return true; + case 12: v(select_id_UE_HistoryInformationFromTheUE()); return true; + case 13: v(select_id_ExpectedUEBehaviour()); return true; + case 14: v(select_id_ProSeAuthorized()); return true; + case 15: v(select_id_UE_ContextReferenceAtSeNB()); return true; + case 16: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 17: v(select_id_V2XServicesAuthorized()); return true; + case 18: v(select_id_UE_ContextReferenceAtWT()); return true; + case 19: v(select_id_NRUESecurityCapabilities()); return true; + case 20: v(select_id_UE_ContextReferenceAtSgNB()); return true; + case 21: v(select_id_AerialUEsubscriptionInformation()); return true; + case 22: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 23: if(type != 23) {clear(); asn::base::set();} type = 23; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CSGMembershipStatus)]; + char dummy3[sizeof(Cause)]; + char dummy4[sizeof(ECGI)]; + char dummy5[sizeof(ExpectedUEBehaviour)]; + char dummy6[sizeof(GUMMEI)]; + char dummy7[sizeof(Masked_IMEISV)]; + char dummy8[sizeof(MobilityInformation)]; + char dummy9[sizeof(NRUESecurityCapabilities)]; + char dummy10[sizeof(ProSeAuthorized)]; + char dummy11[sizeof(SRVCCOperationPossible)]; + char dummy12[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy13[sizeof(TraceActivation)]; + char dummy14[sizeof(UE_ContextInformation)]; + char dummy15[sizeof(UE_ContextReferenceAtSeNB)]; + char dummy16[sizeof(UE_ContextReferenceAtSgNB)]; + char dummy17[sizeof(UE_ContextReferenceAtWT)]; + char dummy18[sizeof(UE_HistoryInformation)]; + char dummy19[sizeof(UE_HistoryInformationFromTheUE)]; + char dummy20[sizeof(UE_X2AP_ID)]; + char dummy21[sizeof(UE_X2AP_ID_Extension)]; + char dummy22[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_TargetCell_ID() { set(mandatory); type=3;} + void select_id_GUMMEI_ID() { set(mandatory); type=4;} + void select_id_UE_ContextInformation() { set(mandatory); type=5;} + void select_id_UE_HistoryInformation() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_CSGMembershipStatus() { set(optional); type=9;} + void select_id_MobilityInformation() { set(optional); type=10;} + void select_id_Masked_IMEISV() { set(optional); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(optional); type=12;} + void select_id_ExpectedUEBehaviour() { set(optional); type=13;} + void select_id_ProSeAuthorized() { set(optional); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(optional); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=16;} + void select_id_V2XServicesAuthorized() { set(optional); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(optional); type=18;} + void select_id_NRUESecurityCapabilities() { set(optional); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(optional); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=22;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(optional)) { type = 16; return true; } + else if(equal(optional)) { type = 17; return true; } + else if(equal(optional)) { type = 18; return true; } + else if(equal(optional)) { type = 19; return true; } + else if(equal(optional)) { type = 20; return true; } + else if(equal(optional)) { type = 21; return true; } + else if(equal(optional)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(optional);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(optional);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(optional);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(optional);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(optional);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(optional);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(optional);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, + ... +} +*/ + +struct HandoverRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-WT-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}, + ... +} +*/ + +struct HandoverRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_List() { set(id_E_RABs_Admitted_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(id_TargeteNBtoSource_eNBTransparentContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(id_WT_UE_ContextKeptIndicator); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_TargeteNBtoSource_eNBTransparentContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_WT_UE_ContextKeptIndicator)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_TargeteNBtoSource_eNBTransparentContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_WT_UE_ContextKeptIndicator);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(ignore); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_List& select_id_E_RABs_Admitted_List() { return set(3); } + E_RABs_Admitted_List const* get_id_E_RABs_Admitted_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + TargeteNBtoSource_eNBTransparentContainer& select_id_TargeteNBtoSource_eNBTransparentContainer() { return set(5); } + TargeteNBtoSource_eNBTransparentContainer const* get_id_TargeteNBtoSource_eNBTransparentContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(7); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(10); } + UE_ContextKeptIndicator& select_id_WT_UE_ContextKeptIndicator() { return set(11); } + UE_ContextKeptIndicator const* get_id_WT_UE_ContextKeptIndicator() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_TargeteNBtoSource_eNBTransparentContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_UE_ContextKeptIndicator()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_WT_UE_ContextKeptIndicator()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_List)]; + char dummy4[sizeof(TargeteNBtoSource_eNBTransparentContainer)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, + ... +} +*/ + +struct HandoverRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +LoadInformation-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , + ... +} +*/ + +struct LoadInformation_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(id_CellInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_List& select_id_CellInformation() { return set(1); } + CellInformation_List const* get_id_CellInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LoadInformation ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, + ... +} +*/ + +struct LoadInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "LoadInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementInitiationResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementInitiationResult_Item : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "MeasurementInitiationResult-Item";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + static constexpr bool optional = true; + + }; + measurementFailureCause_List_t& set_measurementFailureCause_List() { measurementFailureCause_List.setpresent(true); return measurementFailureCause_List;} + measurementFailureCause_List_t const* get_measurementFailureCause_List() const {return measurementFailureCause_List.is_valid() ? &measurementFailureCause_List : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE MeasurementInitiationResult-Item PRESENCE mandatory} +} +*/ + +struct MeasurementInitiationResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(id_MeasurementInitiationResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementInitiationResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementInitiationResult_Item& select_id_MeasurementInitiationResult_Item() { return set(1); } + MeasurementInitiationResult_Item const* get_id_MeasurementInitiationResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementInitiationResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementInitiationResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {MeasurementInitiationResult-ItemIEs} } +*/ + +struct MeasurementInitiationResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementInitiationResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementInitiationResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementInitiationResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(ECGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, + ... +} +*/ + +struct MobilityChangeAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(id_ENB2_Mobility_Parameters_Modification_Range); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_ENB2_Mobility_Parameters_Modification_Range)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Mobility_Parameters_Modification_Range);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(ignore); type=1;} + void select_id_ENB2_Cell_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MobilityParametersModificationRange& select_id_ENB2_Mobility_Parameters_Modification_Range() { return set(4); } + MobilityParametersModificationRange const* get_id_ENB2_Mobility_Parameters_Modification_Range() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_ENB2_Mobility_Parameters_Modification_Range()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(MobilityParametersModificationRange)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, + ... +} +*/ + +struct MobilityChangeFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory}| + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct MobilityChangeRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(id_ENB1_Mobility_Parameters); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(id_ENB2_Proposed_Mobility_Parameters); type=4;} + void select_id_Cause() { set(id_Cause); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_ENB1_Mobility_Parameters)) { type = 3; return true; } + else if(equal(id_ENB2_Proposed_Mobility_Parameters)) { type = 4; return true; } + else if(equal(id_Cause)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ENB1_Mobility_Parameters);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Proposed_Mobility_Parameters);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(ignore); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(reject); type=4;} + void select_id_Cause() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + MobilityParametersInformation& select_id_ENB1_Mobility_Parameters() { return set(3); } + MobilityParametersInformation const* get_id_ENB1_Mobility_Parameters() const { return get(3); } + MobilityParametersInformation& select_id_ENB2_Proposed_Mobility_Parameters() { return set(4); } + MobilityParametersInformation const* get_id_ENB2_Proposed_Mobility_Parameters() const { return get(4); } + Cause& select_id_Cause() { return set(5); } + Cause const* get_id_Cause() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_ENB1_Mobility_Parameters()); return true; + case 4: v(select_id_ENB2_Proposed_Mobility_Parameters()); return true; + case 5: v(select_id_Cause()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(MobilityParametersInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(optional); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(mandatory); type=4;} + void select_id_Cause() { set(mandatory); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, + ... +} +*/ + +struct MobilityChangeRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +PartialSuccessIndicator ::= ENUMERATED { + partial-success-allowed, +... +} +*/ + +struct PartialSuccessIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "PartialSuccessIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + partial_success_allowed + } index_t; + +}; + +/* +PrivateMessage-IEs X2AP-PRIVATE-IES ::= { + ... +} +*/ + +struct PrivateMessage_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} +*/ + +struct PrivateMessage : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "PrivateMessage";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct privateIEs_t : PrivateIE_Container + { + static constexpr const char* name() {return "privateIEs_t";} + using parent_t = PrivateIE_Container; + + }; + privateIEs_t& ref_privateIEs() {return privateIEs;} + privateIEs_t const& ref_privateIEs() const {return privateIEs;} + template void decode(V& v) + { + v(privateIEs); + + }; + template void encode(V& v) const + { + v(privateIEs); + + }; + void clear() + { + privateIEs.clear(); + + }; + private: + privateIEs_t privateIEs; + +}; +/* +RLFIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE RRCConnSetupIndicator PRESENCE optional}| + { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE RRCConnReestabIndicator PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct RLFIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=1;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=2;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=5;} + void select_id_RRCConnSetupIndicator() { set(id_RRCConnSetupIndicator); type=6;} + void select_id_RRCConnReestabIndicator() { set(id_RRCConnReestabIndicator); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_FailureCellPCI)) { type = 1; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 2; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 5; return true; } + else if(equal(id_RRCConnSetupIndicator)) { type = 6; return true; } + else if(equal(id_RRCConnReestabIndicator)) { type = 7; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RRCConnSetupIndicator);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RRCConnReestabIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(ignore); type=1;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=2;} + void select_id_FailureCellCRNTI() { set(ignore); type=3;} + void select_id_ShortMAC_I() { set(ignore); type=4;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=5;} + void select_id_RRCConnSetupIndicator() { set(reject); type=6;} + void select_id_RRCConnReestabIndicator() { set(ignore); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + PCI& select_id_FailureCellPCI() { return set(1); } + PCI const* get_id_FailureCellPCI() const { return get(1); } + ECGI& select_id_Re_establishmentCellECGI() { return set(2); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(2); } + CRNTI& select_id_FailureCellCRNTI() { return set(3); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(5); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(5); } + RRCConnSetupIndicator& select_id_RRCConnSetupIndicator() { return set(6); } + RRCConnSetupIndicator const* get_id_RRCConnSetupIndicator() const { return get(6); } + RRCConnReestabIndicator& select_id_RRCConnReestabIndicator() { return set(7); } + RRCConnReestabIndicator const* get_id_RRCConnReestabIndicator() const { return get(7); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(8); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_FailureCellPCI()); return true; + case 2: v(select_id_Re_establishmentCellECGI()); return true; + case 3: v(select_id_FailureCellCRNTI()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_UE_RLF_Report_Container()); return true; + case 6: v(select_id_RRCConnSetupIndicator()); return true; + case 7: v(select_id_RRCConnReestabIndicator()); return true; + case 8: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(RRCConnReestabIndicator)]; + char dummy5[sizeof(RRCConnSetupIndicator)]; + char dummy6[sizeof(ShortMAC_I)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(mandatory); type=1;} + void select_id_Re_establishmentCellECGI() { set(mandatory); type=2;} + void select_id_FailureCellCRNTI() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(optional); type=4;} + void select_id_UE_RLF_Report_Container() { set(optional); type=5;} + void select_id_RRCConnSetupIndicator() { set(optional); type=6;} + void select_id_RRCConnReestabIndicator() { set(optional); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLFIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, + ... +} +*/ + +struct RLFIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RLFIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RNL-Header-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RNL_Header_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RNL-Header ::= SEQUENCE { + source-GlobalENB-ID GlobalENB-ID, + target-GlobalENB-ID GlobalENB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RNL-Header-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RNL_Header : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "RNL-Header";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct source_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalENB_ID_t& ref_source_GlobalENB_ID() {return source_GlobalENB_ID;} + source_GlobalENB_ID_t const& ref_source_GlobalENB_ID() const {return source_GlobalENB_ID;} + struct target_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "target_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + static constexpr bool optional = true; + + }; + target_GlobalENB_ID_t& set_target_GlobalENB_ID() { target_GlobalENB_ID.setpresent(true); return target_GlobalENB_ID;} + target_GlobalENB_ID_t const* get_target_GlobalENB_ID() const {return target_GlobalENB_ID.is_valid() ? &target_GlobalENB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalENB_ID.clear(); + target_GlobalENB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalENB_ID_t source_GlobalENB_ID; + target_GlobalENB_ID_t target_GlobalENB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +RRCTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SplitSRB CRITICALITY reject TYPE SplitSRB PRESENCE optional}| + { ID id-UENRMeasurement CRITICALITY reject TYPE UENRMeasurement PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct RRCTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SplitSRB() { set(id_SplitSRB); type=3;} + void select_id_UENRMeasurement() { set(id_UENRMeasurement); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SplitSRB)) { type = 3; return true; } + else if(equal(id_UENRMeasurement)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SplitSRB);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_UENRMeasurement);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SplitSRB() { set(reject); type=3;} + void select_id_UENRMeasurement() { set(reject); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SplitSRB& select_id_SplitSRB() { return set(3); } + SplitSRB const* get_id_SplitSRB() const { return get(3); } + UENRMeasurement& select_id_UENRMeasurement() { return set(4); } + UENRMeasurement const* get_id_UENRMeasurement() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SplitSRB()); return true; + case 4: v(select_id_UENRMeasurement()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SgNB_UE_X2AP_ID)]; + char dummy2[sizeof(SplitSRB)]; + char dummy3[sizeof(UENRMeasurement)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SplitSRB() { set(optional); type=3;} + void select_id_UENRMeasurement() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RRCTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RRCTransfer-IEs}}, + ... +} +*/ + +struct RRCTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RRCTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ReportingPeriodicity ::= ENUMERATED { + one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} +*/ + +struct ReportingPeriodicity : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicity";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_thousand_ms + ,two_thousand_ms + ,five_thousand_ms + ,ten_thousand_ms + } index_t; + +}; + +/* +ResetRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct ResetRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, + ... +} +*/ + +struct ResetRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResetResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ResetResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, + ... +} +*/ + +struct ResetResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE CompleteFailureCauseInformation-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(id_CompleteFailureCauseInformation_List); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_CompleteFailureCauseInformation_List)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_List);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + CompleteFailureCauseInformation_List& select_id_CompleteFailureCauseInformation_List() { return set(5); } + CompleteFailureCauseInformation_List const* get_id_CompleteFailureCauseInformation_List() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_CompleteFailureCauseInformation_List()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CompleteFailureCauseInformation_List)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + char dummy4[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, + ... +} +*/ + +struct ResourceStatusFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”, “Partial stop” or to “Add”-- + { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory}| + { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional}| + { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory}| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}| + { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE PartialSuccessIndicator PRESENCE optional}| + { ID id-ReportingPeriodicityRSRPMR CRITICALITY ignore TYPE ReportingPeriodicityRSRPMR PRESENCE optional}| + { ID id-ReportingPeriodicityCSIR CRITICALITY ignore TYPE ReportingPeriodicityCSIR PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Registration_Request() { set(id_Registration_Request); type=3;} + void select_id_ReportCharacteristics() { set(id_ReportCharacteristics); type=4;} + void select_id_CellToReport() { set(id_CellToReport); type=5;} + void select_id_ReportingPeriodicity() { set(id_ReportingPeriodicity); type=6;} + void select_id_PartialSuccessIndicator() { set(id_PartialSuccessIndicator); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(id_ReportingPeriodicityRSRPMR); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(id_ReportingPeriodicityCSIR); type=9;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Registration_Request)) { type = 3; return true; } + else if(equal(id_ReportCharacteristics)) { type = 4; return true; } + else if(equal(id_CellToReport)) { type = 5; return true; } + else if(equal(id_ReportingPeriodicity)) { type = 6; return true; } + else if(equal(id_PartialSuccessIndicator)) { type = 7; return true; } + else if(equal(id_ReportingPeriodicityRSRPMR)) { type = 8; return true; } + else if(equal(id_ReportingPeriodicityCSIR)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Registration_Request);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReportCharacteristics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellToReport);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_ReportingPeriodicity);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_PartialSuccessIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_ReportingPeriodicityRSRPMR);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ReportingPeriodicityCSIR);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(ignore); type=2;} + void select_id_Registration_Request() { set(reject); type=3;} + void select_id_ReportCharacteristics() { set(reject); type=4;} + void select_id_CellToReport() { set(ignore); type=5;} + void select_id_ReportingPeriodicity() { set(ignore); type=6;} + void select_id_PartialSuccessIndicator() { set(ignore); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(ignore); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(ignore); type=9;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Registration_Request& select_id_Registration_Request() { return set(3); } + Registration_Request const* get_id_Registration_Request() const { return get(3); } + ReportCharacteristics& select_id_ReportCharacteristics() { return set(4); } + ReportCharacteristics const* get_id_ReportCharacteristics() const { return get(4); } + CellToReport_List& select_id_CellToReport() { return set(5); } + CellToReport_List const* get_id_CellToReport() const { return get(5); } + ReportingPeriodicity& select_id_ReportingPeriodicity() { return set(6); } + ReportingPeriodicity const* get_id_ReportingPeriodicity() const { return get(6); } + PartialSuccessIndicator& select_id_PartialSuccessIndicator() { return set(7); } + PartialSuccessIndicator const* get_id_PartialSuccessIndicator() const { return get(7); } + ReportingPeriodicityRSRPMR& select_id_ReportingPeriodicityRSRPMR() { return set(8); } + ReportingPeriodicityRSRPMR const* get_id_ReportingPeriodicityRSRPMR() const { return get(8); } + ReportingPeriodicityCSIR& select_id_ReportingPeriodicityCSIR() { return set(9); } + ReportingPeriodicityCSIR const* get_id_ReportingPeriodicityCSIR() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Registration_Request()); return true; + case 4: v(select_id_ReportCharacteristics()); return true; + case 5: v(select_id_CellToReport()); return true; + case 6: v(select_id_ReportingPeriodicity()); return true; + case 7: v(select_id_PartialSuccessIndicator()); return true; + case 8: v(select_id_ReportingPeriodicityRSRPMR()); return true; + case 9: v(select_id_ReportingPeriodicityCSIR()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_List)]; + char dummy2[sizeof(Measurement_ID)]; + char dummy3[sizeof(PartialSuccessIndicator)]; + char dummy4[sizeof(Registration_Request)]; + char dummy5[sizeof(ReportCharacteristics)]; + char dummy6[sizeof(ReportingPeriodicity)]; + char dummy7[sizeof(ReportingPeriodicityCSIR)]; + char dummy8[sizeof(ReportingPeriodicityRSRPMR)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(conditional); type=2;} + void select_id_Registration_Request() { set(mandatory); type=3;} + void select_id_ReportCharacteristics() { set(optional); type=4;} + void select_id_CellToReport() { set(mandatory); type=5;} + void select_id_ReportingPeriodicity() { set(optional); type=6;} + void select_id_PartialSuccessIndicator() { set(optional); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(optional); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(optional); type=9;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, + ... +} +*/ + +struct ResourceStatusRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE MeasurementInitiationResult-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeasurementInitiationResult_List() { set(id_MeasurementInitiationResult_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeasurementInitiationResult_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeasurementInitiationResult_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + MeasurementInitiationResult_List& select_id_MeasurementInitiationResult_List() { return set(4); } + MeasurementInitiationResult_List const* get_id_MeasurementInitiationResult_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeasurementInitiationResult_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeasurementInitiationResult_List)]; + char dummy3[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeasurementInitiationResult_List() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, + ... +} +*/ + +struct ResourceStatusResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, + ... +} +*/ + +struct ResourceStatusUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CellMeasurementResult() { set(id_CellMeasurementResult); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CellMeasurementResult)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CellMeasurementResult);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CellMeasurementResult() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CellMeasurementResult_List& select_id_CellMeasurementResult() { return set(3); } + CellMeasurementResult_List const* get_id_CellMeasurementResult() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CellMeasurementResult()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_List)]; + char dummy2[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CellMeasurementResult() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, + ... +} +*/ + +struct ResourceStatusUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItem : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp ::= CHOICE { + success ResponseInformationSeNBReconfComp-SuccessItem, + reject-by-MeNB ResponseInformationSeNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSeNBReconfComp() {clear();} + struct success_t : ResponseInformationSeNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_t";} + using parent_t = ResponseInformationSeNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_t : ResponseInformationSeNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_t";} + using parent_t = ResponseInformationSeNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_t& select_success() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_t const* get_success() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_t& select_reject_by_MeNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_t const* get_reject_by_MeNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_t)]; + char dummy2[sizeof(reject_by_MeNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ResponseInformationSgNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSgNBContainer MeNBtoSgNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSgNBContainer_t : MeNBtoSgNBContainer + { + static constexpr const char* name() {return "meNBtoSgNBContainer_t";} + using parent_t = MeNBtoSgNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSgNBContainer_t& set_meNBtoSgNBContainer() { meNBtoSgNBContainer.setpresent(true); return meNBtoSgNBContainer;} + meNBtoSgNBContainer_t const* get_meNBtoSgNBContainer() const {return meNBtoSgNBContainer.is_valid() ? &meNBtoSgNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSgNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSgNBContainer_t meNBtoSgNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp ::= CHOICE { + success-SgNBReconfComp ResponseInformationSgNBReconfComp-SuccessItem, + reject-by-MeNB-SgNBReconfComp ResponseInformationSgNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSgNBReconfComp() {clear();} + struct success_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_SgNBReconfComp_t& select_success_SgNBReconfComp() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_SgNBReconfComp_t const* get_success_SgNBReconfComp() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_SgNBReconfComp_t& select_reject_by_MeNB_SgNBReconfComp() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_SgNBReconfComp_t const* get_reject_by_MeNB_SgNBReconfComp() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_SgNBReconfComp_t)]; + char dummy2[sizeof(reject_by_MeNB_SgNBReconfComp_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RetrieveUEContextFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, + ... +} +*/ + +struct RetrieveUEContextFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RetrieveUEContextRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-resumeID CRITICALITY reject TYPE ResumeID PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY reject TYPE ShortMAC-I PRESENCE mandatory}| + { ID id-NewEUTRANCellIdentifier CRITICALITY reject TYPE EUTRANCellIdentifier PRESENCE mandatory}| + {ID id-FailureCellCRNTI CRITICALITY reject TYPE CRNTI PRESENCE optional}| + {ID id-FailureCellPCI CRITICALITY reject TYPE PCI PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=2;} + void select_id_resumeID() { set(id_resumeID); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(id_NewEUTRANCellIdentifier); type=5;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=6;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_resumeID)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_NewEUTRANCellIdentifier)) { type = 5; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 6; return true; } + else if(equal(id_FailureCellPCI)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_resumeID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NewEUTRANCellIdentifier);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=2;} + void select_id_resumeID() { set(reject); type=3;} + void select_id_ShortMAC_I() { set(reject); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(reject); type=5;} + void select_id_FailureCellCRNTI() { set(reject); type=6;} + void select_id_FailureCellPCI() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(2); } + ResumeID& select_id_resumeID() { return set(3); } + ResumeID const* get_id_resumeID() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + EUTRANCellIdentifier& select_id_NewEUTRANCellIdentifier() { return set(5); } + EUTRANCellIdentifier const* get_id_NewEUTRANCellIdentifier() const { return get(5); } + CRNTI& select_id_FailureCellCRNTI() { return set(6); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(6); } + PCI& select_id_FailureCellPCI() { return set(7); } + PCI const* get_id_FailureCellPCI() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_resumeID()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_NewEUTRANCellIdentifier()); return true; + case 6: v(select_id_FailureCellCRNTI()); return true; + case 7: v(select_id_FailureCellPCI()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(EUTRANCellIdentifier)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(ResumeID)]; + char dummy5[sizeof(ShortMAC_I)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_resumeID() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(mandatory); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(mandatory); type=5;} + void select_id_FailureCellCRNTI() { set(optional); type=6;} + void select_id_FailureCellPCI() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextRequest-IEs}}, + ... +} +*/ + +struct RetrieveUEContextRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationRetrieve-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationRetrieve_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(1); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationRetrieve ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-ListRetrieve E-RABs-ToBeSetup-ListRetrieve, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + managBasedMDTallowed ManagementBasedMDTallowed OPTIONAL, + managBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationRetrieve-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationRetrieve : asn::sequence<12, 0, true, 6> +{ + static constexpr const char* name() {return "UE-ContextInformationRetrieve";} + using parent_t = asn::sequence<12, 0, true, 6>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_ListRetrieve_t : E_RABs_ToBeSetup_ListRetrieve + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_ListRetrieve_t";} + using parent_t = E_RABs_ToBeSetup_ListRetrieve; + + }; + e_RABs_ToBeSetup_ListRetrieve_t& ref_e_RABs_ToBeSetup_ListRetrieve() {return e_RABs_ToBeSetup_ListRetrieve;} + e_RABs_ToBeSetup_ListRetrieve_t const& ref_e_RABs_ToBeSetup_ListRetrieve() const {return e_RABs_ToBeSetup_ListRetrieve;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct managBasedMDTallowed_t : ManagementBasedMDTallowed + { + static constexpr const char* name() {return "managBasedMDTallowed_t";} + using parent_t = ManagementBasedMDTallowed; + static constexpr bool optional = true; + + }; + managBasedMDTallowed_t& set_managBasedMDTallowed() { managBasedMDTallowed.setpresent(true); return managBasedMDTallowed;} + managBasedMDTallowed_t const* get_managBasedMDTallowed() const {return managBasedMDTallowed.is_valid() ? &managBasedMDTallowed : nullptr;} + struct managBasedMDTPLMNList_t : MDTPLMNList + { + static constexpr const char* name() {return "managBasedMDTPLMNList_t";} + using parent_t = MDTPLMNList; + static constexpr bool optional = true; + + }; + managBasedMDTPLMNList_t& set_managBasedMDTPLMNList() { managBasedMDTPLMNList.setpresent(true); return managBasedMDTPLMNList;} + managBasedMDTPLMNList_t const* get_managBasedMDTPLMNList() const {return managBasedMDTPLMNList.is_valid() ? &managBasedMDTPLMNList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_ListRetrieve.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + managBasedMDTallowed.clear(); + managBasedMDTPLMNList.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + managBasedMDTallowed_t managBasedMDTallowed; + managBasedMDTPLMNList_t managBasedMDTPLMNList; + iE_Extensions_t iE_Extensions; + +}; +/* +RetrieveUEContextResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformationRetrieve CRITICALITY reject TYPE UE-ContextInformationRetrieve PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(id_UE_ContextInformationRetrieve); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=11;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=12;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=15;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_GUMMEI_ID)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationRetrieve)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_Masked_IMEISV)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_ProSeAuthorized)) { type = 11; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 12; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 13; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 14; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationRetrieve);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_GUMMEI_ID() { set(reject); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(reject); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_Masked_IMEISV() { set(ignore); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_ProSeAuthorized() { set(ignore); type=11;} + void select_id_CriticalityDiagnostics() { set(ignore); type=12;} + void select_id_V2XServicesAuthorized() { set(ignore); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=15;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(3); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + GUMMEI& select_id_GUMMEI_ID() { return set(5); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(5); } + UE_ContextInformationRetrieve& select_id_UE_ContextInformationRetrieve() { return set(6); } + UE_ContextInformationRetrieve const* get_id_UE_ContextInformationRetrieve() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(9); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(11); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(11); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(12); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(12); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(13); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(13); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(14); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(14); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(15); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(15); } + bool is_unknown() const { return type == 16; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_GUMMEI_ID()); return true; + case 6: v(select_id_UE_ContextInformationRetrieve()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_Masked_IMEISV()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_ProSeAuthorized()); return true; + case 12: v(select_id_CriticalityDiagnostics()); return true; + case 13: v(select_id_V2XServicesAuthorized()); return true; + case 14: v(select_id_AerialUEsubscriptionInformation()); return true; + case 15: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 16: if(type != 16) {clear(); asn::base::set();} type = 16; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(GUMMEI)]; + char dummy5[sizeof(Masked_IMEISV)]; + char dummy6[sizeof(ProSeAuthorized)]; + char dummy7[sizeof(SRVCCOperationPossible)]; + char dummy8[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy9[sizeof(TraceActivation)]; + char dummy10[sizeof(UE_ContextInformationRetrieve)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + char dummy13[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_GUMMEI_ID() { set(mandatory); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_Masked_IMEISV() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_ProSeAuthorized() { set(optional); type=11;} + void select_id_CriticalityDiagnostics() { set(optional); type=12;} + void select_id_V2XServicesAuthorized() { set(optional); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=15;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, + ... +} +*/ + +struct RetrieveUEContextResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct SNStatusTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(id_E_RABs_SubjectToStatusTransfer_List); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToStatusTransfer_List)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToStatusTransfer_List& select_id_E_RABs_SubjectToStatusTransfer_List() { return set(3); } + E_RABs_SubjectToStatusTransfer_List const* get_id_E_RABs_SubjectToStatusTransfer_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToStatusTransfer_List()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SNStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, + ... +} +*/ + +struct SNStatusTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SNStatusTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-UE-SecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBSecurityKey CRITICALITY reject TYPE SeNBSecurityKey PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-List CRITICALITY reject TYPE E-RABs-ToBeAdded-List PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY reject TYPE MeNBtoSeNBContainer PRESENCE mandatory}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_UE_SecurityCapabilities() { set(id_UE_SecurityCapabilities); type=2;} + void select_id_SeNBSecurityKey() { set(id_SeNBSecurityKey); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(id_SeNBUEAggregateMaximumBitRate); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(id_E_RABs_ToBeAdded_List); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_UE_SecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SeNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SeNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_E_RABs_ToBeAdded_List)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 11; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UE_SecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SeNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SeNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_UE_SecurityCapabilities() { set(reject); type=2;} + void select_id_SeNBSecurityKey() { set(reject); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(reject); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UESecurityCapabilities& select_id_UE_SecurityCapabilities() { return set(2); } + UESecurityCapabilities const* get_id_UE_SecurityCapabilities() const { return get(2); } + SeNBSecurityKey& select_id_SeNBSecurityKey() { return set(3); } + SeNBSecurityKey const* get_id_SeNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SeNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SeNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + E_RABs_ToBeAdded_List& select_id_E_RABs_ToBeAdded_List() { return set(6); } + E_RABs_ToBeAdded_List const* get_id_E_RABs_ToBeAdded_List() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(9); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(11); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(11); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(12); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_UE_SecurityCapabilities()); return true; + case 3: v(select_id_SeNBSecurityKey()); return true; + case 4: v(select_id_SeNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_E_RABs_ToBeAdded_List()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_ExpectedUEBehaviour()); return true; + case 12: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(E_RABs_ToBeAdded_List)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(MeNBtoSeNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SeNBSecurityKey)]; + char dummy7[sizeof(UEAggregateMaximumBitRate)]; + char dummy8[sizeof(UESecurityCapabilities)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_UE_SecurityCapabilities() { set(conditional); type=2;} + void select_id_SeNBSecurityKey() { set(conditional); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(mandatory); type=6;} + void select_id_MeNBtoSeNBContainer() { set(mandatory); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_ExpectedUEBehaviour() { set(optional); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-List CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY reject TYPE SeNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(id_E_RABs_Admitted_ToBeAdded_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_GW_TransportLayerAddress() { set(id_GW_TransportLayerAddress); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(id_SIPTO_L_GW_TransportLayerAddress); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(id_Tunnel_Information_for_BBF); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_GW_TransportLayerAddress)) { type = 7; return true; } + else if(equal(id_SIPTO_L_GW_TransportLayerAddress)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_Tunnel_Information_for_BBF)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_GW_TransportLayerAddress);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SIPTO_L_GW_TransportLayerAddress);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Tunnel_Information_for_BBF);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SeNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_GW_TransportLayerAddress() { set(ignore); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_List& select_id_E_RABs_Admitted_ToBeAdded_List() { return set(3); } + E_RABs_Admitted_ToBeAdded_List const* get_id_E_RABs_Admitted_ToBeAdded_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(5); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + TransportLayerAddress& select_id_GW_TransportLayerAddress() { return set(7); } + TransportLayerAddress const* get_id_GW_TransportLayerAddress() const { return get(7); } + TransportLayerAddress& select_id_SIPTO_L_GW_TransportLayerAddress() { return set(8); } + TransportLayerAddress const* get_id_SIPTO_L_GW_TransportLayerAddress() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + TunnelInformation& select_id_Tunnel_Information_for_BBF() { return set(11); } + TunnelInformation const* get_id_Tunnel_Information_for_BBF() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SeNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_GW_TransportLayerAddress()); return true; + case 8: v(select_id_SIPTO_L_GW_TransportLayerAddress()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_Tunnel_Information_for_BBF()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_List)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(TransportLayerAddress)]; + char dummy6[sizeof(TunnelInformation)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SeNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_GW_TransportLayerAddress() { set(optional); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(id_E_RABs_SubjectToCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToCounterCheck_List& select_id_E_RABs_SubjectToCounterCheck_List() { return set(3); } + E_RABs_SubjectToCounterCheck_List const* get_id_E_RABs_SubjectToCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheck_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SeNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(3); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_MeNBtoSeNBContainer()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeNBtoSeNBContainer)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SeNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(4); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSeNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SeNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSeNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextInformationSeNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationSeNBModReq ::= SEQUENCE { + uE-SecurityCapabilities UESecurityCapabilities OPTIONAL, + seNB-SecurityKey SeNBSecurityKey OPTIONAL, + seNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-List-ModReq OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-List-ModReq OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-List-ModReq OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSeNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationSeNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformationSeNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct uE_SecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uE_SecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + static constexpr bool optional = true; + + }; + uE_SecurityCapabilities_t& set_uE_SecurityCapabilities() { uE_SecurityCapabilities.setpresent(true); return uE_SecurityCapabilities;} + uE_SecurityCapabilities_t const* get_uE_SecurityCapabilities() const {return uE_SecurityCapabilities.is_valid() ? &uE_SecurityCapabilities : nullptr;} + struct seNB_SecurityKey_t : SeNBSecurityKey + { + static constexpr const char* name() {return "seNB_SecurityKey_t";} + using parent_t = SeNBSecurityKey; + static constexpr bool optional = true; + + }; + seNB_SecurityKey_t& set_seNB_SecurityKey() { seNB_SecurityKey.setpresent(true); return seNB_SecurityKey;} + seNB_SecurityKey_t const* get_seNB_SecurityKey() const {return seNB_SecurityKey.is_valid() ? &seNB_SecurityKey : nullptr;} + struct seNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "seNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + seNBUEAggregateMaximumBitRate_t& set_seNBUEAggregateMaximumBitRate() { seNBUEAggregateMaximumBitRate.setpresent(true); return seNBUEAggregateMaximumBitRate;} + seNBUEAggregateMaximumBitRate_t const* get_seNBUEAggregateMaximumBitRate() const {return seNBUEAggregateMaximumBitRate.is_valid() ? &seNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + uE_SecurityCapabilities.clear(); + seNB_SecurityKey.clear(); + seNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + uE_SecurityCapabilities_t uE_SecurityCapabilities; + seNB_SecurityKey_t seNB_SecurityKey; + seNBUEAggregateMaximumBitRate_t seNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-UE-ContextInformationSeNBModReq CRITICALITY reject TYPE UE-ContextInformationSeNBModReq PRESENCE optional}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(id_UE_ContextInformationSeNBModReq); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationSeNBModReq)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationSeNBModReq);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + UE_ContextInformationSeNBModReq& select_id_UE_ContextInformationSeNBModReq() { return set(6); } + UE_ContextInformationSeNBModReq const* get_id_UE_ContextInformationSeNBModReq() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_UE_ContextInformationSeNBModReq()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(PLMN_Identity)]; + char dummy5[sizeof(SCGChangeIndication)]; + char dummy6[sizeof(UE_ContextInformationSeNBModReq)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(optional); type=6;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SeNBModificationRequest-IEs}}, + ... +} +*/ + +struct SeNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-ModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(id_E_RABs_Admitted_ToBeAdded_ModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(id_E_RABs_Admitted_ToBeModified_ModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(id_E_RABs_Admitted_ToBeReleased_ModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_ModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_ModAckList& select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_ModAckList const* get_id_E_RABs_Admitted_ToBeAdded_ModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_ModAckList& select_id_E_RABs_Admitted_ToBeModified_ModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_ModAckList const* get_id_E_RABs_Admitted_ToBeModified_ModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_ModAckList& select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_ModAckList const* get_id_E_RABs_Admitted_ToBeReleased_ModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(7); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_ModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SeNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_ModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_ModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_ModAckList)]; + char dummy6[sizeof(SeNBtoMeNBContainer)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-ModReqd CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqd PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(id_E_RABs_ToBeReleased_ModReqd); type=5;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_ModReqd)) { type = 5; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqd);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(ignore); type=5;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_ModReqd& select_id_E_RABs_ToBeReleased_ModReqd() { return set(5); } + E_RABs_ToBeReleased_ModReqd const* get_id_E_RABs_ToBeReleased_ModReqd() const { return get(5); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(6); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_ModReqd()); return true; + case 6: v(select_id_SeNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_ModReqd)]; + char dummy3[sizeof(SCGChangeIndication)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(optional); type=5;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequired-IEs}}, + ... +} +*/ + +struct SeNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSeNBReconfComp CRITICALITY ignore TYPE ResponseInformationSeNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(id_ResponseInformationSeNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSeNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSeNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSeNBReconfComp& select_id_ResponseInformationSeNBReconfComp() { return set(3); } + ResponseInformationSeNBReconfComp const* get_id_ResponseInformationSeNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSeNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSeNBReconfComp)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SeNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-List-RelConf CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelConf PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(id_E_RABs_ToBeReleased_List_RelConf); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelConf)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelConf);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_List_RelConf& select_id_E_RABs_ToBeReleased_List_RelConf() { return set(3); } + E_RABs_ToBeReleased_List_RelConf const* get_id_E_RABs_ToBeReleased_List_RelConf() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_List_RelConf()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelConf)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SeNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-List-RelReq CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelReq PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MakeBeforeBreakIndicator CRITICALITY ignore TYPE MakeBeforeBreakIndicator PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(id_E_RABs_ToBeReleased_List_RelReq); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(id_MakeBeforeBreakIndicator); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelReq)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_MakeBeforeBreakIndicator)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelReq);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MakeBeforeBreakIndicator);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_List_RelReq& select_id_E_RABs_ToBeReleased_List_RelReq() { return set(4); } + E_RABs_ToBeReleased_List_RelReq const* get_id_E_RABs_ToBeReleased_List_RelReq() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + MakeBeforeBreakIndicator& select_id_MakeBeforeBreakIndicator() { return set(8); } + MakeBeforeBreakIndicator const* get_id_MakeBeforeBreakIndicator() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_List_RelReq()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_MakeBeforeBreakIndicator()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelReq)]; + char dummy3[sizeof(MakeBeforeBreakIndicator)]; + char dummy4[sizeof(UE_ContextKeptIndicator)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SecondaryRATDataUsageReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SecondaryRATUsageReportList CRITICALITY reject TYPE SecondaryRATUsageReportList PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SecondaryRATDataUsageReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SecondaryRATUsageReportList() { set(id_SecondaryRATUsageReportList); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SecondaryRATUsageReportList)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReportList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SecondaryRATUsageReportList() { set(reject); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SecondaryRATUsageReportList& select_id_SecondaryRATUsageReportList() { return set(3); } + SecondaryRATUsageReportList const* get_id_SecondaryRATUsageReportList() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SecondaryRATUsageReportList()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReportList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SecondaryRATUsageReportList() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, + ... +} +*/ + +struct SecondaryRATDataUsageReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SecondaryRATDataUsageReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBActivityNotification-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-UEContextLevelUserPlaneActivity CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional}| + { ID id-ERABActivityNotifyItemList CRITICALITY ignore TYPE ERABActivityNotifyItemList PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBActivityNotification_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(id_UEContextLevelUserPlaneActivity); type=3;} + void select_id_ERABActivityNotifyItemList() { set(id_ERABActivityNotifyItemList); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_UEContextLevelUserPlaneActivity)) { type = 3; return true; } + else if(equal(id_ERABActivityNotifyItemList)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UEContextLevelUserPlaneActivity);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ERABActivityNotifyItemList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(ignore); type=3;} + void select_id_ERABActivityNotifyItemList() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + UserPlaneTrafficActivityReport& select_id_UEContextLevelUserPlaneActivity() { return set(3); } + UserPlaneTrafficActivityReport const* get_id_UEContextLevelUserPlaneActivity() const { return get(3); } + ERABActivityNotifyItemList& select_id_ERABActivityNotifyItemList() { return set(4); } + ERABActivityNotifyItemList const* get_id_ERABActivityNotifyItemList() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_UEContextLevelUserPlaneActivity()); return true; + case 4: v(select_id_ERABActivityNotifyItemList()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ERABActivityNotifyItemList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + char dummy5[sizeof(UserPlaneTrafficActivityReport)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(optional); type=3;} + void select_id_ERABActivityNotifyItemList() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBActivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBActivityNotification-IEs}}, + ... +} +*/ + +struct SgNBActivityNotification : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBActivityNotification";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-NRUESecurityCapabilities CRITICALITY reject TYPE NRUESecurityCapabilities PRESENCE mandatory}| + { ID id-SgNBSecurityKey CRITICALITY reject TYPE SgNBSecurityKey PRESENCE mandatory}| + { ID id-SgNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-SgNBAddReqList CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReqList PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-SGNB-Addition-Trigger-Ind CRITICALITY reject TYPE SGNB-Addition-Trigger-Ind PRESENCE optional}| + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| + { ID id-MeNBCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}, + ... +} +*/ + +struct SgNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=2;} + void select_id_SgNBSecurityKey() { set(id_SgNBSecurityKey); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(id_SgNBUEAggregateMaximumBitRate); type=4;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=5;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(id_E_RABs_ToBeAdded_SgNBAddReqList); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=11;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(id_SGNB_Addition_Trigger_Ind); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=15;} + void select_id_MeNBCell_ID() { set(id_MeNBCell_ID); type=16;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SgNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SgNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_SelectedPLMN)) { type = 5; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 6; return true; } + else if(equal(id_E_RABs_ToBeAdded_SgNBAddReqList)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 12; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 13; return true; } + else if(equal(id_SGNB_Addition_Trigger_Ind)) { type = 14; return true; } + else if(equal(id_SubscriberProfileIDforRFP)) { type = 15; return true; } + else if(equal(id_MeNBCell_ID)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SgNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SgNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReqList);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_SGNB_Addition_Trigger_Ind);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_MeNBCell_ID);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_NRUESecurityCapabilities() { set(reject); type=2;} + void select_id_SgNBSecurityKey() { set(reject); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_SelectedPLMN() { set(ignore); type=5;} + void select_id_HandoverRestrictionList() { set(ignore); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=11;} + void select_id_RequestedSplitSRBs() { set(reject); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(reject); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=15;} + void select_id_MeNBCell_ID() { set(reject); type=16;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(2); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(2); } + SgNBSecurityKey& select_id_SgNBSecurityKey() { return set(3); } + SgNBSecurityKey const* get_id_SgNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SgNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SgNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_SelectedPLMN() { return set(5); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(5); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(6); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(6); } + E_RABs_ToBeAdded_SgNBAddReqList& select_id_E_RABs_ToBeAdded_SgNBAddReqList() { return set(7); } + E_RABs_ToBeAdded_SgNBAddReqList const* get_id_E_RABs_ToBeAdded_SgNBAddReqList() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(9); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(11); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(12); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(13); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(13); } + SGNB_Addition_Trigger_Ind& select_id_SGNB_Addition_Trigger_Ind() { return set(14); } + SGNB_Addition_Trigger_Ind const* get_id_SGNB_Addition_Trigger_Ind() const { return get(14); } + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(15); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(15); } + ECGI& select_id_MeNBCell_ID() { return set(16); } + ECGI const* get_id_MeNBCell_ID() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_NRUESecurityCapabilities()); return true; + case 3: v(select_id_SgNBSecurityKey()); return true; + case 4: v(select_id_SgNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_SelectedPLMN()); return true; + case 6: v(select_id_HandoverRestrictionList()); return true; + case 7: v(select_id_E_RABs_ToBeAdded_SgNBAddReqList()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 12: v(select_id_RequestedSplitSRBs()); return true; + case 13: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 14: v(select_id_SGNB_Addition_Trigger_Ind()); return true; + case 15: v(select_id_SubscriberProfileIDforRFP()); return true; + case 16: v(select_id_MeNBCell_ID()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(E_RABs_ToBeAdded_SgNBAddReqList)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(HandoverRestrictionList)]; + char dummy5[sizeof(MeNBResourceCoordinationInformation)]; + char dummy6[sizeof(MeNBtoSgNBContainer)]; + char dummy7[sizeof(NRUESecurityCapabilities)]; + char dummy8[sizeof(PLMN_Identity)]; + char dummy9[sizeof(SGNB_Addition_Trigger_Ind)]; + char dummy10[sizeof(SgNBSecurityKey)]; + char dummy11[sizeof(SgNB_UE_X2AP_ID)]; + char dummy12[sizeof(SplitSRBs)]; + char dummy13[sizeof(SubscriberProfileIDforRFP)]; + char dummy14[sizeof(UEAggregateMaximumBitRate)]; + char dummy15[sizeof(UE_X2AP_ID)]; + char dummy16[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_NRUESecurityCapabilities() { set(mandatory); type=2;} + void select_id_SgNBSecurityKey() { set(mandatory); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_SelectedPLMN() { set(optional); type=5;} + void select_id_HandoverRestrictionList() { set(optional); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(mandatory); type=7;} + void select_id_MeNBtoSgNBContainer() { set(mandatory); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=11;} + void select_id_RequestedSplitSRBs() { set(optional); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(optional); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=15;} + void select_id_MeNBCell_ID() { set(mandatory); type=16;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(mandatory)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(mandatory)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(mandatory);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(mandatory);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_AdmittedSplitSRBs() { set(reject); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(8); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_AdmittedSplitSRBs()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)]; + char dummy4[sizeof(RRC_Config_Ind)]; + char dummy5[sizeof(SgNBResourceCoordinationInformation)]; + char dummy6[sizeof(SgNB_UE_X2AP_ID)]; + char dummy7[sizeof(SgNBtoMeNBContainer)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SgNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_AdmittedSplitSRBs() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBChaConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(id_E_RABs_ToBeReleased_SgNBChaConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBChaConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBChaConfList& select_id_E_RABs_ToBeReleased_SgNBChaConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBChaConfList const* get_id_E_RABs_ToBeReleased_SgNBChaConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBChaConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBChaConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeConfirm-IEs}}, + ... +} +*/ + +struct SgNBChangeConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRefuse-IEs}}, + ... +} +*/ + +struct SgNBChangeRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Target-SgNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Target_SgNB_ID() { set(id_Target_SgNB_ID); type=3;} + void select_id_Cause() { set(id_Cause); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Target_SgNB_ID)) { type = 3; return true; } + else if(equal(id_Cause)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Target_SgNB_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Target_SgNB_ID() { set(reject); type=3;} + void select_id_Cause() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + GlobalGNB_ID& select_id_Target_SgNB_ID() { return set(3); } + GlobalGNB_ID const* get_id_Target_SgNB_ID() const { return get(3); } + Cause& select_id_Cause() { return set(4); } + Cause const* get_id_Cause() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Target_SgNB_ID()); return true; + case 4: v(select_id_Cause()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(GlobalGNB_ID)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(SgNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Target_SgNB_ID() { set(mandatory); type=3;} + void select_id_Cause() { set(mandatory); type=4;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRequired-IEs}}, + ... +} +*/ + +struct SgNBChangeRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToSgNBCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(id_E_RABs_SubjectToSgNBCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToSgNBCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToSgNBCounterCheck_List& select_id_E_RABs_SubjectToSgNBCounterCheck_List() { return set(3); } + E_RABs_SubjectToSgNBCounterCheck_List const* get_id_E_RABs_SubjectToSgNBCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToSgNBCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SgNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-AdmittedToBeModified-SgNBModConfList CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConfList PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(id_E_RABs_AdmittedToBeModified_SgNBModConfList); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_AdmittedToBeModified_SgNBModConfList& select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { return set(3); } + E_RABs_AdmittedToBeModified_SgNBModConfList const* get_id_E_RABs_AdmittedToBeModified_SgNBModConfList() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(7); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConfList()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_AdmittedToBeModified_SgNBModConfList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(SgNB_UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(optional); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SgNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SgNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSgNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore EXTENSION SubscriberProfileIDforRFP PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationSgNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SubscriberProfileIDforRFP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(1); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SubscriberProfileIDforRFP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SubscriberProfileIDforRFP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation-SgNBModReq ::= SEQUENCE { + nRUE-SecurityCapabilities NRUESecurityCapabilities OPTIONAL, + sgNB-SecurityKey SgNBSecurityKey OPTIONAL, + sgNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-SgNBModReq-List OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-SgNBModReq-List OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-SgNBModReq-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSgNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation_SgNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformation-SgNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct nRUE_SecurityCapabilities_t : NRUESecurityCapabilities + { + static constexpr const char* name() {return "nRUE_SecurityCapabilities_t";} + using parent_t = NRUESecurityCapabilities; + static constexpr bool optional = true; + + }; + nRUE_SecurityCapabilities_t& set_nRUE_SecurityCapabilities() { nRUE_SecurityCapabilities.setpresent(true); return nRUE_SecurityCapabilities;} + nRUE_SecurityCapabilities_t const* get_nRUE_SecurityCapabilities() const {return nRUE_SecurityCapabilities.is_valid() ? &nRUE_SecurityCapabilities : nullptr;} + struct sgNB_SecurityKey_t : SgNBSecurityKey + { + static constexpr const char* name() {return "sgNB_SecurityKey_t";} + using parent_t = SgNBSecurityKey; + static constexpr bool optional = true; + + }; + sgNB_SecurityKey_t& set_sgNB_SecurityKey() { sgNB_SecurityKey.setpresent(true); return sgNB_SecurityKey;} + sgNB_SecurityKey_t const* get_sgNB_SecurityKey() const {return sgNB_SecurityKey.is_valid() ? &sgNB_SecurityKey : nullptr;} + struct sgNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "sgNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + sgNBUEAggregateMaximumBitRate_t& set_sgNBUEAggregateMaximumBitRate() { sgNBUEAggregateMaximumBitRate.setpresent(true); return sgNBUEAggregateMaximumBitRate;} + sgNBUEAggregateMaximumBitRate_t const* get_sgNBUEAggregateMaximumBitRate() const {return sgNBUEAggregateMaximumBitRate.is_valid() ? &sgNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + nRUE_SecurityCapabilities.clear(); + sgNB_SecurityKey.clear(); + sgNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + nRUE_SecurityCapabilities_t nRUE_SecurityCapabilities; + sgNB_SecurityKey_t sgNB_SecurityKey; + sgNBUEAggregateMaximumBitRate_t sgNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional}| + { ID id-UE-ContextInformation-SgNBModReq CRITICALITY reject TYPE UE-ContextInformation-SgNBModReq PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RequestedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=4;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=5;} + void select_id_SCGConfigurationQuery() { set(id_SCGConfigurationQuery); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(id_UE_ContextInformation_SgNBModReq); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=10;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(id_RequestedSplitSRBsrelease); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SelectedPLMN)) { type = 4; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 5; return true; } + else if(equal(id_SCGConfigurationQuery)) { type = 6; return true; } + else if(equal(id_UE_ContextInformation_SgNBModReq)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBsrelease)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SCGConfigurationQuery);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextInformation_SgNBModReq);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBsrelease);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SelectedPLMN() { set(ignore); type=4;} + void select_id_HandoverRestrictionList() { set(ignore); type=5;} + void select_id_SCGConfigurationQuery() { set(ignore); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_RequestedSplitSRBs() { set(ignore); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(ignore); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PLMN_Identity& select_id_SelectedPLMN() { return set(4); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(4); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(5); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(5); } + SCGConfigurationQuery& select_id_SCGConfigurationQuery() { return set(6); } + SCGConfigurationQuery const* get_id_SCGConfigurationQuery() const { return get(6); } + UE_ContextInformation_SgNBModReq& select_id_UE_ContextInformation_SgNBModReq() { return set(7); } + UE_ContextInformation_SgNBModReq const* get_id_UE_ContextInformation_SgNBModReq() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(10); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBsrelease() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SelectedPLMN()); return true; + case 5: v(select_id_HandoverRestrictionList()); return true; + case 6: v(select_id_SCGConfigurationQuery()); return true; + case 7: v(select_id_UE_ContextInformation_SgNBModReq()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 11: v(select_id_RequestedSplitSRBs()); return true; + case 12: v(select_id_RequestedSplitSRBsrelease()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(HandoverRestrictionList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SCGConfigurationQuery)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_ContextInformation_SgNBModReq)]; + char dummy10[sizeof(UE_X2AP_ID)]; + char dummy11[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SelectedPLMN() { set(optional); type=4;} + void select_id_HandoverRestrictionList() { set(optional); type=5;} + void select_id_SCGConfigurationQuery() { set(optional); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(optional); type=7;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_RequestedSplitSRBs() { set(optional); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SgNBModificationRequest-IEs}}, + ... +} +*/ + +struct SgNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-AdmittedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=10;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(id_AdmittedSplitSRBsrelease); type=12;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=13;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 11; return true; } + else if(equal(id_AdmittedSplitSRBsrelease)) { type = 12; return true; } + else if(equal(id_RRCConfigIndication)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBsrelease);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_AdmittedSplitSRBs() { set(ignore); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(ignore); type=12;} + void select_id_RRCConfigIndication() { set(reject); type=13;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_SgNBModAckList& select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(7); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(10); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_AdmittedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_AdmittedSplitSRBsrelease() const { return get(12); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(13); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(13); } + bool is_unknown() const { return type == 14; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SgNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 11: v(select_id_AdmittedSplitSRBs()); return true; + case 12: v(select_id_AdmittedSplitSRBsrelease()); return true; + case 13: v(select_id_RRCConfigIndication()); return true; + case 14: if(type != 14) {clear(); asn::base::set();} type = 14; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_SgNBModAckList)]; + char dummy6[sizeof(RRC_Config_Ind)]; + char dummy7[sizeof(SgNBResourceCoordinationInformation)]; + char dummy8[sizeof(SgNB_UE_X2AP_ID)]; + char dummy9[sizeof(SgNBtoMeNBContainer)]; + char dummy10[sizeof(SplitSRBs)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_AdmittedSplitSRBs() { set(optional); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(optional); type=12;} + void select_id_RRCConfigIndication() { set(optional); type=13;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-E-RABs-ToBeModified-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_PDCPChangeIndication() { set(id_PDCPChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(id_E_RABs_ToBeReleased_SgNBModReqdList); type=5;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(id_E_RABs_ToBeModified_SgNBModReqdList); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_PDCPChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBModReqdList)) { type = 5; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_E_RABs_ToBeModified_SgNBModReqdList)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_PDCPChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqdList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqdList);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_PDCPChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(ignore); type=5;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(ignore); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PDCPChangeIndication& select_id_PDCPChangeIndication() { return set(4); } + PDCPChangeIndication const* get_id_PDCPChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_SgNBModReqdList& select_id_E_RABs_ToBeReleased_SgNBModReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBModReqdList const* get_id_E_RABs_ToBeReleased_SgNBModReqdList() const { return get(5); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(6); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + E_RABs_ToBeModified_SgNBModReqdList& select_id_E_RABs_ToBeModified_SgNBModReqdList() { return set(8); } + E_RABs_ToBeModified_SgNBModReqdList const* get_id_E_RABs_ToBeModified_SgNBModReqdList() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_PDCPChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBModReqdList()); return true; + case 6: v(select_id_SgNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_E_RABs_ToBeModified_SgNBModReqdList()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeModified_SgNBModReqdList)]; + char dummy3[sizeof(E_RABs_ToBeReleased_SgNBModReqdList)]; + char dummy4[sizeof(PDCPChangeIndication)]; + char dummy5[sizeof(RRC_Config_Ind)]; + char dummy6[sizeof(SgNBResourceCoordinationInformation)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SgNBtoMeNBContainer)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_PDCPChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(optional); type=5;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequired-IEs}}, + ... +} +*/ + +struct SgNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSgNBReconfComp CRITICALITY ignore TYPE ResponseInformationSgNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(id_ResponseInformationSgNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSgNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSgNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSgNBReconfComp& select_id_ResponseInformationSgNBReconfComp() { return set(3); } + ResponseInformationSgNBReconfComp const* get_id_ResponseInformationSgNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSgNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSgNBReconfComp)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SgNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(id_E_RABs_ToBeReleased_SgNBRelConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBRelConfList& select_id_E_RABs_ToBeReleased_SgNBRelConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBRelConfList const* get_id_E_RABs_ToBeReleased_SgNBRelConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBRelConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SgNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelReqList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqList PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(id_E_RABs_ToBeReleased_SgNBRelReqList); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqList)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_SgNBRelReqList& select_id_E_RABs_ToBeReleased_SgNBRelReqList() { return set(4); } + E_RABs_ToBeReleased_SgNBRelReqList const* get_id_E_RABs_ToBeReleased_SgNBRelReqList() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(7); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_SgNBRelReqList()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBtoSgNBContainer()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqList)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestReject-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-ToBeReleased-SgNBRelReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqdList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(id_E_RABs_ToBeReleased_SgNBRelReqdList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqdList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqdList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_ToBeReleased_SgNBRelReqdList& select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBRelReqdList const* get_id_E_RABs_ToBeReleased_SgNBRelReqdList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBRelReqdList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqdList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SIPTO-BearerDeactivationIndication CRITICALITY ignore TYPE SIPTOBearerDeactivationIndication PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct UEContextRelease_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(id_SIPTO_BearerDeactivationIndication); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SIPTO_BearerDeactivationIndication)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SIPTO_BearerDeactivationIndication);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(ignore); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(4); } + SIPTOBearerDeactivationIndication& select_id_SIPTO_BearerDeactivationIndication() { return set(5); } + SIPTOBearerDeactivationIndication const* get_id_SIPTO_BearerDeactivationIndication() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SIPTO_BearerDeactivationIndication()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SIPTOBearerDeactivationIndication)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEContextRelease ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, + ... +} +*/ + +struct UEContextRelease : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "UEContextRelease";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2AP-Message ::= OCTET STRING +*/ + +struct X2AP_Message : asn::ostring<> +{ + static constexpr const char* name() {return "X2AP-Message";} + using parent_t = asn::ostring<>; + +}; + +/* +X2APMessageTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RNL-Header CRITICALITY reject TYPE RNL-Header PRESENCE mandatory}| + { ID id-x2APMessage CRITICALITY reject TYPE X2AP-Message PRESENCE optional}, + ... +} +*/ + +struct X2APMessageTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(id_RNL_Header); type=1;} + void select_id_x2APMessage() { set(id_x2APMessage); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RNL_Header)) { type = 1; return true; } + else if(equal(id_x2APMessage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RNL_Header);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_x2APMessage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(reject); type=1;} + void select_id_x2APMessage() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RNL_Header& select_id_RNL_Header() { return set(1); } + RNL_Header const* get_id_RNL_Header() const { return get(1); } + X2AP_Message& select_id_x2APMessage() { return set(2); } + X2AP_Message const* get_id_x2APMessage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RNL_Header()); return true; + case 2: v(select_id_x2APMessage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RNL_Header)]; + char dummy2[sizeof(X2AP_Message)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(mandatory); type=1;} + void select_id_x2APMessage() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2APMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2APMessageTransfer-IEs}}, + ... +} +*/ + +struct X2APMessageTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2APMessageTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2Release-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, +... +} +*/ + +struct X2Release_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2Release ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2Release-IEs}}, + ... +} +*/ + +struct X2Release : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2Release";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalFailure-IEs}}, + ... +} +*/ + +struct X2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-X2RemovalThreshold CRITICALITY reject TYPE X2BenefitValue PRESENCE optional}, +... +} +*/ + +struct X2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_X2RemovalThreshold() { set(id_X2RemovalThreshold); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_X2RemovalThreshold)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_X2RemovalThreshold);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_X2RemovalThreshold() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + X2BenefitValue& select_id_X2RemovalThreshold() { return set(2); } + X2BenefitValue const* get_id_X2RemovalThreshold() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_X2RemovalThreshold()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(X2BenefitValue)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_X2RemovalThreshold() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalRequest-IEs}}, + ... +} +*/ + +struct X2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalResponse-IEs}}, + ... +} +*/ + +struct X2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupFailure-IEs X2AP-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 }, + + ... +} +*/ + +struct X2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, + ... +} +*/ + +struct X2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, +... +} +*/ + +struct X2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_LHN_ID() { set(id_LHN_ID); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_LHN_ID)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_LHN_ID() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + LHN_ID& select_id_LHN_ID() { return set(4); } + LHN_ID const* get_id_LHN_ID() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_LHN_ID()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GUGroupIDList)]; + char dummy2[sizeof(GlobalENB_ID)]; + char dummy3[sizeof(LHN_ID)]; + char dummy4[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_LHN_ID() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, + ... +} +*/ + +struct X2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, + ... +} +*/ + +struct X2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_LHN_ID() { set(id_LHN_ID); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_LHN_ID)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_LHN_ID() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + LHN_ID& select_id_LHN_ID() { return set(5); } + LHN_ID const* get_id_LHN_ID() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_LHN_ID()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(GlobalENB_ID)]; + char dummy4[sizeof(LHN_ID)]; + char dummy5[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_LHN_ID() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, + ... +} +*/ + +struct X2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..5fbef04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp @@ -0,0 +1,1537 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" + +/* +X2AP-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] +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { + X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + HandoverRequest& select_id_handoverPreparation() { return set(1); } + HandoverRequest const* get_id_handoverPreparation() const { return get(1); } + ResetRequest& select_id_reset() { return set(2); } + ResetRequest const* get_id_reset() const { return get(2); } + X2SetupRequest& select_id_x2Setup() { return set(3); } + X2SetupRequest const* get_id_x2Setup() const { return get(3); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeRequest& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationRequest& select_id_cellActivation() { return set(7); } + CellActivationRequest const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalRequest& select_id_x2Removal() { return set(12); } + X2RemovalRequest const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextRequest& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeRequired& select_id_sgNBChange() { return set(19); } + SgNBChangeRequired const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationRequest& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetRequired& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalRequest& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get(25); } + SNStatusTransfer& select_id_snStatusTransfer() { return set(26); } + SNStatusTransfer const* get_id_snStatusTransfer() const { return get(26); } + UEContextRelease& select_id_uEContextRelease() { return set(27); } + UEContextRelease const* get_id_uEContextRelease() const { return get(27); } + HandoverCancel& select_id_handoverCancel() { return set(28); } + HandoverCancel const* get_id_handoverCancel() const { return get(28); } + ErrorIndication& select_id_errorIndication() { return set(29); } + ErrorIndication const* get_id_errorIndication() const { return get(29); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(30); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(30); } + LoadInformation& select_id_loadIndication() { return set(31); } + LoadInformation const* get_id_loadIndication() const { return get(31); } + PrivateMessage& select_id_privateMessage() { return set(32); } + PrivateMessage const* get_id_privateMessage() const { return get(32); } + RLFIndication& select_id_rLFIndication() { return set(33); } + RLFIndication const* get_id_rLFIndication() const { return get(33); } + HandoverReport& select_id_handoverReport() { return set(34); } + HandoverReport const* get_id_handoverReport() const { return get(34); } + X2Release& select_id_x2Release() { return set(35); } + X2Release const* get_id_x2Release() const { return get(35); } + X2APMessageTransfer& select_id_x2APMessageTransfer() { return set(36); } + X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get(36); } + SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set(37); } + SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get(37); } + SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set(38); } + SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get(38); } + SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set(39); } + SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get(39); } + SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set(40); } + SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get(40); } + SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set(41); } + SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get(41); } + RRCTransfer& select_id_rRCTransfer() { return set(42); } + RRCTransfer const* get_id_rRCTransfer() const { return get(42); } + SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set(43); } + SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get(43); } + SgNBActivityNotification& select_id_SgNBActivityNotification() { return set(44); } + SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get(44); } + DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set(45); } + DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get(45); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + case 26: var.destroy(); break; + case 27: var.destroy(); break; + case 28: var.destroy(); break; + case 29: var.destroy(); break; + case 30: var.destroy(); break; + case 31: var.destroy(); break; + case 32: var.destroy(); break; + case 33: var.destroy(); break; + case 34: var.destroy(); break; + case 35: var.destroy(); break; + case 36: var.destroy(); break; + case 37: var.destroy(); break; + case 38: var.destroy(); break; + case 39: var.destroy(); break; + case 40: var.destroy(); break; + case 41: var.destroy(); break; + case 42: var.destroy(); break; + case 43: var.destroy(); break; + case 44: var.destroy(); break; + case 45: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + v.template operator()(26); + v.template operator()(27); + v.template operator()(28); + v.template operator()(29); + v.template operator()(30); + v.template operator()(31); + v.template operator()(32); + v.template operator()(33); + v.template operator()(34); + v.template operator()(35); + v.template operator()(36); + v.template operator()(37); + v.template operator()(38); + v.template operator()(39); + v.template operator()(40); + v.template operator()(41); + v.template operator()(42); + v.template operator()(43); + v.template operator()(44); + v.template operator()(45); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 26: v(select_id_snStatusTransfer()); return true; + case 27: v(select_id_uEContextRelease()); return true; + case 28: v(select_id_handoverCancel()); return true; + case 29: v(select_id_errorIndication()); return true; + case 30: v(select_id_resourceStatusReporting()); return true; + case 31: v(select_id_loadIndication()); return true; + case 32: v(select_id_privateMessage()); return true; + case 33: v(select_id_rLFIndication()); return true; + case 34: v(select_id_handoverReport()); return true; + case 35: v(select_id_x2Release()); return true; + case 36: v(select_id_x2APMessageTransfer()); return true; + case 37: v(select_id_seNBReconfigurationCompletion()); return true; + case 38: v(select_id_meNBinitiatedSeNBRelease()); return true; + case 39: v(select_id_seNBCounterCheck()); return true; + case 40: v(select_id_sgNBReconfigurationCompletion()); return true; + case 41: v(select_id_sgNBCounterCheck()); return true; + case 42: v(select_id_rRCTransfer()); return true; + case 43: v(select_id_secondaryRATDataUsageReport()); return true; + case 44: v(select_id_SgNBActivityNotification()); return true; + case 45: v(select_id_dataForwardingAddressIndication()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + case 26: v(var.as()); return true; + case 27: v(var.as()); return true; + case 28: v(var.as()); return true; + case 29: v(var.as()); return true; + case 30: v(var.as()); return true; + case 31: v(var.as()); return true; + case 32: v(var.as()); return true; + case 33: v(var.as()); return true; + case 34: v(var.as()); return true; + case 35: v(var.as()); return true; + case 36: v(var.as()); return true; + case 37: v(var.as()); return true; + case 38: v(var.as()); return true; + case 39: v(var.as()); return true; + case 40: v(var.as()); return true; + case 41: v(var.as()); return true; + case 42: v(var.as()); return true; + case 43: v(var.as()); return true; + case 44: v(var.as()); return true; + case 45: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationRequest)]; + char dummy2[sizeof(DataForwardingAddressIndication)]; + char dummy3[sizeof(ENBConfigurationUpdate)]; + char dummy4[sizeof(ENDCCellActivationRequest)]; + char dummy5[sizeof(ENDCConfigurationUpdate)]; + char dummy6[sizeof(ENDCPartialResetRequired)]; + char dummy7[sizeof(ENDCX2RemovalRequest)]; + char dummy8[sizeof(ENDCX2SetupRequest)]; + char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)]; + char dummy10[sizeof(ErrorIndication)]; + char dummy11[sizeof(HandoverCancel)]; + char dummy12[sizeof(HandoverReport)]; + char dummy13[sizeof(HandoverRequest)]; + char dummy14[sizeof(LoadInformation)]; + char dummy15[sizeof(MobilityChangeRequest)]; + char dummy16[sizeof(PrivateMessage)]; + char dummy17[sizeof(RLFIndication)]; + char dummy18[sizeof(RRCTransfer)]; + char dummy19[sizeof(ResetRequest)]; + char dummy20[sizeof(ResourceStatusRequest)]; + char dummy21[sizeof(ResourceStatusUpdate)]; + char dummy22[sizeof(RetrieveUEContextRequest)]; + char dummy23[sizeof(SNStatusTransfer)]; + char dummy24[sizeof(SeNBAdditionRequest)]; + char dummy25[sizeof(SeNBCounterCheckRequest)]; + char dummy26[sizeof(SeNBModificationRequest)]; + char dummy27[sizeof(SeNBModificationRequired)]; + char dummy28[sizeof(SeNBReconfigurationComplete)]; + char dummy29[sizeof(SeNBReleaseRequest)]; + char dummy30[sizeof(SeNBReleaseRequired)]; + char dummy31[sizeof(SecondaryRATDataUsageReport)]; + char dummy32[sizeof(SgNBActivityNotification)]; + char dummy33[sizeof(SgNBAdditionRequest)]; + char dummy34[sizeof(SgNBChangeRequired)]; + char dummy35[sizeof(SgNBCounterCheckRequest)]; + char dummy36[sizeof(SgNBModificationRequest)]; + char dummy37[sizeof(SgNBModificationRequired)]; + char dummy38[sizeof(SgNBReconfigurationComplete)]; + char dummy39[sizeof(SgNBReleaseRequest)]; + char dummy40[sizeof(SgNBReleaseRequired)]; + char dummy41[sizeof(UEContextRelease)]; + char dummy42[sizeof(X2APMessageTransfer)]; + char dummy43[sizeof(X2Release)]; + char dummy44[sizeof(X2RemovalRequest)]; + char dummy45[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverRequestAcknowledge& select_id_handoverPreparation() { return set(1); } + HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get(1); } + ResetResponse& select_id_reset() { return set(2); } + ResetResponse const* get_id_reset() const { return get(2); } + X2SetupResponse& select_id_x2Setup() { return set(3); } + X2SetupResponse const* get_id_x2Setup() const { return get(3); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationResponse& select_id_cellActivation() { return set(7); } + CellActivationResponse const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalResponse& select_id_x2Removal() { return set(12); } + X2RemovalResponse const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextResponse& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeConfirm& select_id_sgNBChange() { return set(19); } + SgNBChangeConfirm const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationResponse& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetConfirm& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalResponse& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationResponse)]; + char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCCellActivationResponse)]; + char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy5[sizeof(ENDCPartialResetConfirm)]; + char dummy6[sizeof(ENDCX2RemovalResponse)]; + char dummy7[sizeof(ENDCX2SetupResponse)]; + char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)]; + char dummy9[sizeof(HandoverRequestAcknowledge)]; + char dummy10[sizeof(MobilityChangeAcknowledge)]; + char dummy11[sizeof(ResetResponse)]; + char dummy12[sizeof(ResourceStatusResponse)]; + char dummy13[sizeof(RetrieveUEContextResponse)]; + char dummy14[sizeof(SeNBAdditionRequestAcknowledge)]; + char dummy15[sizeof(SeNBModificationConfirm)]; + char dummy16[sizeof(SeNBModificationRequestAcknowledge)]; + char dummy17[sizeof(SeNBReleaseConfirm)]; + char dummy18[sizeof(SgNBAdditionRequestAcknowledge)]; + char dummy19[sizeof(SgNBChangeConfirm)]; + char dummy20[sizeof(SgNBModificationConfirm)]; + char dummy21[sizeof(SgNBModificationRequestAcknowledge)]; + char dummy22[sizeof(SgNBReleaseConfirm)]; + char dummy23[sizeof(SgNBReleaseRequestAcknowledge)]; + char dummy24[sizeof(X2RemovalResponse)]; + char dummy25[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverPreparationFailure& select_id_handoverPreparation() { return set(1); } + HandoverPreparationFailure const* get_id_handoverPreparation() const { return get(1); } + X2SetupFailure& select_id_x2Setup() { return set(3); } + X2SetupFailure const* get_id_x2Setup() const { return get(3); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeFailure& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationFailure& select_id_cellActivation() { return set(7); } + CellActivationFailure const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + X2RemovalFailure& select_id_x2Removal() { return set(12); } + X2RemovalFailure const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextFailure& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBChangeRefuse& select_id_sgNBChange() { return set(19); } + SgNBChangeRefuse const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationFailure& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get(22); } + ENDCX2RemovalFailure& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationFailure)]; + char dummy2[sizeof(ENBConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCCellActivationFailure)]; + char dummy4[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy5[sizeof(ENDCX2RemovalFailure)]; + char dummy6[sizeof(ENDCX2SetupFailure)]; + char dummy7[sizeof(HandoverPreparationFailure)]; + char dummy8[sizeof(MobilityChangeFailure)]; + char dummy9[sizeof(ResourceStatusFailure)]; + char dummy10[sizeof(RetrieveUEContextFailure)]; + char dummy11[sizeof(SeNBAdditionRequestReject)]; + char dummy12[sizeof(SeNBModificationRefuse)]; + char dummy13[sizeof(SeNBModificationRequestReject)]; + char dummy14[sizeof(SgNBAdditionRequestReject)]; + char dummy15[sizeof(SgNBChangeRefuse)]; + char dummy16[sizeof(SgNBModificationRefuse)]; + char dummy17[sizeof(SgNBModificationRequestReject)]; + char dummy18[sizeof(SgNBReleaseRequestReject)]; + char dummy19[sizeof(X2RemovalFailure)]; + char dummy20[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;} + void select_id_reset() { set(id_reset); type=2;} + void select_id_x2Setup() { set(id_x2Setup); type=3;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;} + void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;} + void select_id_cellActivation() { set(id_cellActivation); type=7;} + void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;} + void select_id_x2Removal() { set(id_x2Removal); type=12;} + void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;} + void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;} + void select_id_sgNBChange() { set(id_sgNBChange); type=19;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;} + void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;} + void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;} + void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;} + void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;} + void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;} + void select_id_handoverCancel() { set(id_handoverCancel); type=28;} + void select_id_errorIndication() { set(id_errorIndication); type=29;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;} + void select_id_loadIndication() { set(id_loadIndication); type=31;} + void select_id_privateMessage() { set(id_privateMessage); type=32;} + void select_id_rLFIndication() { set(id_rLFIndication); type=33;} + void select_id_handoverReport() { set(id_handoverReport); type=34;} + void select_id_x2Release() { set(id_x2Release); type=35;} + void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;} + void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;} + void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;} + void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;} + void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;} + void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;} + void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;} + void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;} + X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_handoverPreparation)) { type = 1; return true; } + else if(equal(id_reset)) { type = 2; return true; } + else if(equal(id_x2Setup)) { type = 3; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; } + else if(equal(id_mobilitySettingsChange)) { type = 6; return true; } + else if(equal(id_cellActivation)) { type = 7; return true; } + else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; } + else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; } + else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; } + else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; } + else if(equal(id_x2Removal)) { type = 12; return true; } + else if(equal(id_retrieveUEContext)) { type = 13; return true; } + else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; } + else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; } + else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; } + else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; } + else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; } + else if(equal(id_sgNBChange)) { type = 19; return true; } + else if(equal(id_endcX2Setup)) { type = 20; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; } + else if(equal(id_endcCellActivation)) { type = 22; return true; } + else if(equal(id_endcPartialReset)) { type = 23; return true; } + else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; } + else if(equal(id_endcX2Removal)) { type = 25; return true; } + else if(equal(id_snStatusTransfer)) { type = 26; return true; } + else if(equal(id_uEContextRelease)) { type = 27; return true; } + else if(equal(id_handoverCancel)) { type = 28; return true; } + else if(equal(id_errorIndication)) { type = 29; return true; } + else if(equal(id_resourceStatusReporting)) { type = 30; return true; } + else if(equal(id_loadIndication)) { type = 31; return true; } + else if(equal(id_privateMessage)) { type = 32; return true; } + else if(equal(id_rLFIndication)) { type = 33; return true; } + else if(equal(id_handoverReport)) { type = 34; return true; } + else if(equal(id_x2Release)) { type = 35; return true; } + else if(equal(id_x2APMessageTransfer)) { type = 36; return true; } + else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; } + else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; } + else if(equal(id_seNBCounterCheck)) { type = 39; return true; } + else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; } + else if(equal(id_sgNBCounterCheck)) { type = 41; return true; } + else if(equal(id_rRCTransfer)) { type = 42; return true; } + else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; } + else if(equal(id_SgNBActivityNotification)) { type = 44; return true; } + else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(reject); type=1;} + void select_id_reset() { set(reject); type=2;} + void select_id_x2Setup() { set(reject); type=3;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=4;} + void select_id_eNBConfigurationUpdate() { set(reject); type=5;} + void select_id_mobilitySettingsChange() { set(reject); type=6;} + void select_id_cellActivation() { set(reject); type=7;} + void select_id_seNBAdditionPreparation() { set(reject); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;} + void select_id_x2Removal() { set(reject); type=12;} + void select_id_retrieveUEContext() { set(reject); type=13;} + void select_id_sgNBAdditionPreparation() { set(reject); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;} + void select_id_sgNBChange() { set(reject); type=19;} + void select_id_endcX2Setup() { set(reject); type=20;} + void select_id_endcConfigurationUpdate() { set(reject); type=21;} + void select_id_endcCellActivation() { set(reject); type=22;} + void select_id_endcPartialReset() { set(reject); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;} + void select_id_endcX2Removal() { set(reject); type=25;} + void select_id_snStatusTransfer() { set(ignore); type=26;} + void select_id_uEContextRelease() { set(ignore); type=27;} + void select_id_handoverCancel() { set(ignore); type=28;} + void select_id_errorIndication() { set(ignore); type=29;} + void select_id_resourceStatusReporting() { set(ignore); type=30;} + void select_id_loadIndication() { set(ignore); type=31;} + void select_id_privateMessage() { set(ignore); type=32;} + void select_id_rLFIndication() { set(ignore); type=33;} + void select_id_handoverReport() { set(ignore); type=34;} + void select_id_x2Release() { set(reject); type=35;} + void select_id_x2APMessageTransfer() { set(reject); type=36;} + void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;} + void select_id_seNBCounterCheck() { set(reject); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;} + void select_id_sgNBCounterCheck() { set(reject); type=41;} + void select_id_rRCTransfer() { set(reject); type=42;} + void select_id_secondaryRATDataUsageReport() { set(reject); type=43;} + void select_id_SgNBActivityNotification() { set(reject); type=44;} + void select_id_dataForwardingAddressIndication() { set(ignore); type=45;} + X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(reject)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(reject)) { type = 18; return true; } + else if(equal(reject)) { type = 19; return true; } + else if(equal(reject)) { type = 20; return true; } + else if(equal(reject)) { type = 21; return true; } + else if(equal(reject)) { type = 22; return true; } + else if(equal(reject)) { type = 23; return true; } + else if(equal(reject)) { type = 24; return true; } + else if(equal(reject)) { type = 25; return true; } + else if(equal(ignore)) { type = 26; return true; } + else if(equal(ignore)) { type = 27; return true; } + else if(equal(ignore)) { type = 28; return true; } + else if(equal(ignore)) { type = 29; return true; } + else if(equal(ignore)) { type = 30; return true; } + else if(equal(ignore)) { type = 31; return true; } + else if(equal(ignore)) { type = 32; return true; } + else if(equal(ignore)) { type = 33; return true; } + else if(equal(ignore)) { type = 34; return true; } + else if(equal(reject)) { type = 35; return true; } + else if(equal(reject)) { type = 36; return true; } + else if(equal(ignore)) { type = 37; return true; } + else if(equal(ignore)) { type = 38; return true; } + else if(equal(reject)) { type = 39; return true; } + else if(equal(ignore)) { type = 40; return true; } + else if(equal(reject)) { type = 41; return true; } + else if(equal(reject)) { type = 42; return true; } + else if(equal(reject)) { type = 43; return true; } + else if(equal(reject)) { type = 44; return true; } + else if(equal(ignore)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingMessage ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +SuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +X2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct X2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "X2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~X2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp new file mode 100644 index 0000000..fa2fd88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.cpp @@ -0,0 +1,982 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "asn_e2ap.hpp" +#include "asn_e2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void) +{ + E2APpduWrapper* pduWrapper = new E2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int e2ap_get_index(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &gnb_cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupResponse::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-RespondingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup(); + + /* RespondingNodeType-EndcX2Setup = respond-en-gNB {En-gNB-ENDCX2SetupReqAckIEs} */ + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB(); + + using gNB_val_t = RespondingNodeType_EndcX2Setup::respond_en_gNB_t::value_type; + + ProtocolIE_Container* gNB_node = + &(ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB()); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-Globalen-gNB-ID */ + gNB_val_t* val_Globalen_gNB_ID = new gNB_val_t; + gNB_node->push_back(*val_Globalen_gNB_ID); + + val_Globalen_gNB_ID->ref_id().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_criticality().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID() + .ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID().ref_gNB_ID() + .select_gNB_ID().set_buffer(22, gnb_cfg.gNB_ID); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-ServedNRcellsENDCX2ManagementList */ + gNB_val_t* val_ServedNRCells = new gNB_val_t; + gNB_node->push_back(*val_ServedNRCells); + + val_ServedNRCells->ref_id().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_criticality().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList(); + + /* ServedNRcellsENDCX2ManagementList <-- servedNRCellInfo*/ + ServedNRcellsENDCX2ManagementList::value_type* elm = + new ServedNRcellsENDCX2ManagementList::value_type(); + + /* + ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + */ + ServedNRCell_Information* info = &(elm->ref_servedNRCellInfo()); + { + // nrpCI NRPCI, + info->ref_nrpCI().set(gnb_cfg.nrpCI); + + /* nrCellID NRCGI, + + NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... + } + */ + info->ref_nrCellID().ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + info->ref_nrCellID().ref_nRcellIdentifier().set_buffer(36, gnb_cfg.nRcellIdentifier); + + /* broadcastPLMNs BroadcastPLMNs-Item */ + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, gnb_cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + /* nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + + FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + + NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... + } + + */ + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.uL_nRARFCN); + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.dL_nRARFCN); + + /* + FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... + } + */ + //uplink + asn::sequenceof::value_type* ul_band_item = + new asn::sequenceof::value_type(); + { + ul_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* ul_supported_band_item = + new asn::sequenceof::value_type(); + + ul_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + ul_band_item->ref_supportedSULBandList().push_back(*ul_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo() + .ref_freqBandListNr().push_back(*ul_band_item); + + //downlink + asn::sequenceof::value_type* dl_band_item = + new asn::sequenceof::value_type(); + { + dl_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* dl_supported_band_item = + new asn::sequenceof::value_type(); + + dl_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + dl_band_item->ref_supportedSULBandList().push_back(*dl_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo() + .ref_freqBandListNr().push_back(*dl_band_item); + + /* + NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... + } + */ + { + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.uL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.uL_NRSCS) ); + + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.dL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.dL_NRSCS) ); + } + + /* + measurementTimingConfiguration OCTET STRING, + */ + info->ref_measurementTimingConfiguration().set(gnb_cfg.measurementTimingConfiguration); + } + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList().push_back(*elm); + + + + return true; +} + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu) +{ + + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupFailure::protocolIEs_t::value_type; + + /* ENDCX2SetupFailure-IEs := id-Cause*/ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//RICSubscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_criticality().select_id_ricSubscription(); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionRequest::protocolIEs_t::value_type; + + /* RICsubscriptionRequest-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionRequest-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + + /* + RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... + } + + RICeventTriggerDefinition ::= OCTET STRING + RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } + + RICaction-ToBeSetup-ItemIEs X2AP-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, + ... + } + + RICactionID ::= INTEGER (0..255) + + RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... + } + */ + + /* RICsubscriptionRequest-IEs : RICsubscription */ + IE_value_t* ie_RICsubscription = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICsubscription); + + ie_RICsubscription->ref_id().select_id_RICsubscription(); + ie_RICsubscription->ref_criticality().select_id_RICsubscription(); + + // RICeventTriggerDefinition + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricEventTriggerDefinition().set(params.event_trigger_def); + + //RICactions-ToBeSetup-List + for( auto const &action : params.actionList) + { + RICactions_ToBeSetup_List::value_type* item = + new RICactions_ToBeSetup_List::value_type(); + + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricAction_ToBeSetup_List().push_back(*item); + + item->ref_id().select_id_RICaction_ToBeSetup_Item(); + item->ref_criticality().select_id_RICaction_ToBeSetup_Item(); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionID().set(action.action_id); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionType().set(action.action_type); + + } + + return true; +} + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + + for(auto &e : container->ref_protocolIEs()) + { + /*See struct RICsubscriptionRequest_IEs*/ + size_t type = e.ref_value().get_index(); + + switch(type) + { + case 1: //RICrequestID + { + params.request_id = e.ref_value().select_id_RICrequestID().ref_ricRequestorID().get(); + params.seq_number = e.ref_value().select_id_RICrequestID().ref_ricRequestSequenceNumber().get(); + } + break; + + case 2: //RANfunctionID + params.ran_func_id = e.ref_value().select_id_RANfunctionID().get(); + break; + + case 3: //RICsubscription + { + auto event = e.ref_value().select_id_RICsubscription().ref_ricEventTriggerDefinition().get(); + (params.event_trigger_def).assign(std::string(event.data(), event.data() + event.size())); + + //ricAction_ToBeSetup_List + for (auto & f : e.ref_value().select_id_RICsubscription().ref_ricAction_ToBeSetup_List()) + { + RIC_action_t action; + action.action_id = f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionID().get(); + action.action_type = static_cast(f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionType().get()); + + params.actionList.push_back(action); + } + } + break; + + default: + printf("Unknown IE type = %d\n", (int)type); + return false; + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionResponse* container = &(pduWrapper->ref_pdu() + .select_successfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionResponse::protocolIEs_t::value_type; + + /* RICsubscriptionResponse-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionResponse-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionResponse-IEs : RICaction-Admitted-List */ + IE_value_t* ie_admittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_admittedList); + + ie_admittedList->ref_id().select_id_RICactions_Admitted(); + ie_admittedList->ref_criticality().select_id_RICactions_Admitted(); + + /* RICsubscriptionResponse-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + //add action to admitted and not-admitted list + for(auto const &a : params.actionList) + { + if(a.isAdmitted) + { + RICaction_Admitted_List::value_type* item = new RICaction_Admitted_List::value_type(); + + ie_admittedList->ref_value().select_id_RICactions_Admitted().push_back(*item); + + item->ref_id().select_id_RICaction_Admitted_Item(); + item->ref_criticality().select_id_RICaction_Admitted_Item(); + item->ref_value().select_id_RICaction_Admitted_Item().ref_ricActionID().set(a.action_id); + } + else + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionFailure* container = &(pduWrapper->ref_pdu() + .select_unsuccessfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionFailure::protocolIEs_t::value_type; + + /* RICsubscriptionFailure-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionFailure-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionFailure-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + for(auto const &a : params.actionList) + { + if(!a.isAdmitted) + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void) +{ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + // e2ap_init_X2SetupRequest(pdu); + eNB_config cfg; + e2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + e2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = e2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + int rc = e2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + e2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", e2ap_get_index(pdu2)); + printf("procedureCode = %d\n", e2ap_get_procedureCode(pdu2)); + + //Test X2SetupResponse + e2ap_pdu_t* pdu_resp = new_e2ap_pdu(); + e2ap_create_X2SetupResponse(pdu_resp, cfg); + e2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + e2ap_pdu_t* pdu_failure = new_e2ap_pdu(); + e2ap_create_X2SetupFailure(pdu_failure); + e2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp new file mode 100644 index 0000000..aa858b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_E2AP_HPP +#define ASN_E2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy01 e2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void); + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_get_index(e2ap_pdu_t* pdu); + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ + +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu); + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu); + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &cfg); + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu); + +//RIC Subscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp new file mode 100644 index 0000000..38704e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_e2ap_wrapper.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_E2AP_PDU_WRAPPER_HPP +#define ASN_E2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +// #include + +// #include +// #include +// #include +// #include +// #include + +#include +// #include +#include +#include +#include + +#define E2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct E2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + E2APpduWrapper(size_t allocation_buffer_size = E2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~E2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + E2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + E2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp new file mode 100644 index 0000000..dae9ca8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.cpp @@ -0,0 +1,428 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "asn_x2ap.hpp" +#include "asn_x2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +x2ap_pdu_t* new_x2ap_pdu(void) +{ + X2APpduWrapper* pduWrapper = new X2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int x2ap_get_index(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void) +{ + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + eNB_config cfg; + x2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = x2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test encode error + x2ap_pdu_t* pdu1 = new_x2ap_pdu(); + x2ap_init_X2SetupRequest(pdu1); + + int packed_len1 = x2ap_asn_per_encode(pdu1, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len1 != -1) { + printf("Encode successful, packed_len = %d\n", packed_len1); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + x2ap_pdu_t* pdu2 = new_x2ap_pdu(); + int rc = x2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + x2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", x2ap_get_index(pdu2)); + printf("procedureCode = %d\n", x2ap_get_procedureCode(pdu2)); + + + //Test decode error + x2ap_pdu_t* pdu3 = new_x2ap_pdu(); + int rc2 = x2ap_asn_per_decode(pdu3, packed_buf, 1, err_buf, sizeof(err_buf)); + if(rc2 == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + //Test X2SetupResponse + x2ap_pdu_t* pdu_resp = new_x2ap_pdu(); + x2ap_create_X2SetupResponse(pdu_resp, cfg); + x2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + x2ap_pdu_t* pdu_failure = new_x2ap_pdu(); + x2ap_create_X2SetupFailure(pdu_failure); + x2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp new file mode 100644 index 0000000..d0c02d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap.hpp @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_X2AP_HPP +#define ASN_X2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy00 x2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ + +x2ap_pdu_t* new_x2ap_pdu(void); + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_get_index(x2ap_pdu_t* pdu); + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu); + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu); + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp new file mode 100644 index 0000000..96ea81c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/asn_x2ap_wrapper.hpp @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_X2AP_PDU_WRAPPER_HPP +#define ASN_X2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define X2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct X2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + X2APpduWrapper(size_t allocation_buffer_size = X2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~X2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + X2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + X2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp new file mode 100644 index 0000000..9182ed1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/ASN1/lib/e2ap_config.hpp @@ -0,0 +1,160 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_CONFIG_HPP +#define E2AP_CONFIG_HPP + +#include +#include + +enum enum_Transmission_Bandwidth { + enum_bw6, + enum_bw15, + enum_bw25, + enum_bw50, + enum_bw75, + enum_bw100, + enum_bw1 +}; + +enum enum_NRNRB{ + enum_nrb11, enum_nrb18, enum_nrb24, enum_nrb25, enum_nrb31, enum_nrb32, + enum_nrb38, enum_nrb51, enum_nrb52, enum_nrb65, enum_nrb66, enum_nrb78, + enum_nrb79, enum_nrb93, enum_nrb106, enum_nrb107, enum_nrb121, + enum_nrb132, enum_nrb133, enum_nrb135, enum_nrb160, enum_nrb162, + enum_nrb189, enum_nrb216, enum_nrb217, enum_nrb245, enum_nrb264, + enum_nrb270, enum_nrb273 +}; + +enum enum_NRSCS { + enum_scs15, enum_scs30, enum_scs60, enum_scs120 +}; + +class eNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* macro_eNB_ID; + int64_t pCI; + uint8_t* tAC; + uint8_t* eUTRANcellIdentifier; + + int64_t uL_EARFCN; + int64_t dL_EARFCN; + + enum_Transmission_Bandwidth uL_Bandwidth; + enum_Transmission_Bandwidth dL_Bandwidth; + + /*Default Constructor*/ + eNB_config() { + pLMN_Identity = (uint8_t*)"abc"; + macro_eNB_ID = (uint8_t*)"5"; + pCI = 0; + tAC = (uint8_t*)"ab"; + eUTRANcellIdentifier = (uint8_t*)"def"; + uL_EARFCN = 21400; + dL_EARFCN = 3400; + uL_Bandwidth = enum_bw25; + dL_Bandwidth = enum_bw50; + } +}; + +class gNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* gNB_ID; + int64_t nrpCI; + uint8_t* tAC; + uint8_t* nRcellIdentifier; + + int64_t uL_nRARFCN; + int64_t dL_nRARFCN; + + enum enum_NRNRB uL_NRNRB; + enum enum_NRNRB dL_NRNRB; + + enum enum_NRSCS uL_NRSCS; + enum enum_NRSCS dL_NRSCS; + + uint8_t ul_freqBandIndicatorNr; + uint8_t dl_freqBandIndicatorNr; + + std::string measurementTimingConfiguration; + + /*Default Constructor*/ + gNB_config() { + pLMN_Identity = (uint8_t*)"xyz"; + gNB_ID = (uint8_t*)"3"; + nrpCI = 1; + tAC = (uint8_t*)"ab"; + nRcellIdentifier = (uint8_t*)"gnb_id_123"; + uL_nRARFCN = 21400; + dL_nRARFCN = 21500; + + uL_NRNRB = enum_nrb11; + dL_NRNRB = enum_nrb121; + + uL_NRSCS = enum_scs15; + dL_NRSCS = enum_scs120; + + ul_freqBandIndicatorNr = 11; + dl_freqBandIndicatorNr = 12; + + measurementTimingConfiguration = "dummy timing"; + } +}; + +enum enum_RICactionType { + RICactionType_report, + RICactionType_insert, + RICactionType_policy +}; + +enum enum_RICcause { + RICcause_radioNetwork = 1, + RICcause_transport, + RICcause_protocol, + RICcause_misc, + RICcause_ric +}; + +struct RIC_action_t { + unsigned char action_id; + enum_RICactionType action_type; + bool isAdmitted = false; //for response/failure only + enum_RICcause notAdmitted_cause; //for response/failure only + unsigned int notAdmitted_subCause; //for response/failure only + + RIC_action_t() {;} + + RIC_action_t(unsigned char id, enum_RICactionType type) + { + action_id = id; + action_type = type; + } +}; + +struct RICsubscription_params_t { + uint16_t request_id = 0; + uint16_t seq_number = 0; + uint16_t ran_func_id = 0; + std::string event_trigger_def = ""; + + std::vector actionList; +} ; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.cpp @@ -0,0 +1,125 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "e2sim_defs.h" +#include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} + +options_t read_input_options_old(int argc, char* argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + // Parse command line options + static struct option long_options[] = + { + {"ipv4", required_argument, 0, 'i'}, + {"ipv6", required_argument, 0, 'I'}, + {"port", required_argument, 0, 'p'}, + {"verbose", no_argument, 0, 'v'}, + }; + + while(1) + { + int option_index = 0; + + char c = getopt_long(argc, argv, "i:I:p:", long_options, &option_index); + + if(c == -1) + break; + + switch(c) + { + case 'i': + options.server_ip = optarg; + break; + case 'I': + break; + case 'p': + options.server_port = atoi(optarg); + if(options.server_port < 1 || options.server_port > 65535) + { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + break; + + default: + LOG_E("Error: unknown input option: %c\n", optopt); + exit(1); + } + } + + return options; +} + +options_t read_input_options(int argc, char *argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + if(argc == 3) //user provided IP and PORT + { + options.server_ip = argv[1]; + options.server_port = atoi(argv[2]); + if(options.server_port < 1 || options.server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + } + else if(argc == 2) //user provided only IP + { + options.server_ip = argv[1]; + } + else if(argc == 1) + { + options.server_ip = (char*)DEFAULT_SCTP_IP; + } + else + { + LOG_I("Unrecognized option.\n"); + LOG_I("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + exit(1); + } + + return options; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/DEF/e2sim_defs.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef E2SIM_DEFS_H +#define E2SIM_DEFS_H + +// #include +#include +#include + +#define VERSION "1.2.0" //May 2019 +#define DEFAULT_SCTP_IP "127.0.0.1" +#define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) +#define X2AP_SCTP_PORT 36421 +#define RIC_SCTP_SRC_PORT 36422 +#define MAX_SCTP_BUFFER 10000 +#define WORKDIR_ENV "E2SIM_DIR" //environment variable + +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + +#define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} + +typedef struct SCTP_DATA { + unsigned char *data; + int len; +} sctp_data_t; + +typedef struct { + unsigned char buffer[MAX_SCTP_BUFFER]; + int len; +} sctp_buffer_t; + +typedef struct { + char* server_ip; + int server_port; + //... extend as needed +} options_t; + +options_t read_input_options(int argc, char *argv[]); + +#define min(a, b) ((a) < (b)) ? (a) : (b) + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml new file mode 100644 index 0000000..43db78a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml @@ -0,0 +1 @@ +400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_PartSetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ new file mode 100644 index 0000000..b2343b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest.xml~ @@ -0,0 +1 @@ +1400 01 02 030000001010110000001100001010 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml new file mode 100644 index 0000000..6d8c654 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_SetupRequest2.xml @@ -0,0 +1,30 @@ + + + 1 + + + + + + 4 + + + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml new file mode 100644 index 0000000..dd21201 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/GlobalE2node-ID.xml @@ -0,0 +1,12 @@ + + + + 70 6C 6D 6E 33 + + + 01100111011011100110001000110001 + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c new file mode 100644 index 0000000..f76032d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp new file mode 100644 index 0000000..a174a2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.cpp @@ -0,0 +1,290 @@ + + +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include +#include "encode_e2apv1.hpp" +#include "kpm_callbacks.hpp" + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICsubscription: //RIC SUBSCRIPTION = 201 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + callback_kpm_subscription_request(pdu, socket_fd); + // e2ap_handle_RICSubscriptionRequest_securityDemo(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp new file mode 100644 index 0000000..1d5b4ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/E2AP/e2ap_message_handler.hpp @@ -0,0 +1,47 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + + +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.c @@ -0,0 +1,173 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.h" + +const int CLIENT_SEND_COUNT = 1; +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return -1; + } + + int server_fd; + if((server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + return -1; + } + + struct sockaddr_in server_addr; + memset(&server_addr, 0, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(server_port); + server_addr.sin_addr.s_addr = inet_addr(server_ip_str); + + if(bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + return -1; + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + return -1; + } + + assert(server_fd != 0); + + fprintf(stderr, "SCTP server started on %s:%d\n", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd; + + if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + return -1; + } + + struct sockaddr_in peer_addr; + memset(&peer_addr, 0, sizeof(struct sockaddr_in)); + peer_addr.sin_family = AF_INET; + peer_addr.sin_port = htons(server_port); + peer_addr.sin_addr.s_addr = inet_addr(server_ip_str); + // if(inet_pton(AF_INET, server_ip, &(peer_addr.sin_addr)) != 1) { + // printf("Error converting IP address (%s) to sockaddr_in structure\n", server_ip); + // return 0; + // } + + fprintf(stderr, "Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) == -1) { + perror("connect"); + return -1; + } + + assert(client_fd != 0); + + fprintf(stderr, "OK\n"); + + return client_fd; + +} + +//ssize_t sctp_send_to_socket(int sockfd, const void* buf, size_t len) +int sctp_send_to_socket(int sockfd, const void* buf, size_t len) +{ + int sent_len = 0; + + sent_len = send(sockfd, buf, len, 0); + + if(sent_len == -1) + { + perror("sctp_send_to_socket"); + return -1; + } + + return sent_len; +} + +// int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size) +// { +// //int len = 0; +// +// memset(buf, 0, buf_size); +// +// int len = recv(sockfd, &buf, buf_size, 0); +// if(len == -1) +// { +// perror("sctp_recv_from_socket"); +// return -1; +// } +// +// return len; +// } + + +//test only +void client_send_multiple_test_msg(int client_fd) +{ + char buf[1024]; + int SEND_COUNT = 4; + + for(int i = 0; i < SEND_COUNT; i++) + { + fprintf(stderr, "Sending message %d of %d \n", i+1, SEND_COUNT); + + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf)-1, "DATA %d", i+1); + + if(send(client_fd, &buf, strlen(buf), 0) == -1) { + perror("send"); + return; + } + + memset(buf, 0, sizeof(buf)); + + if(recv(client_fd, &buf, sizeof(buf), 0) == -1) { + perror("recv"); + return; + } + + fprintf(stderr, "Server reply: %s\n", buf); + + sleep(1); + } + + fprintf(stderr, "Closing...\n"); + if(close(client_fd) == -1) { + perror("close"); + return; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..55547b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.cpp @@ -0,0 +1,297 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.hpp" +// #include "e2sim_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + exit(1); + } + + int server_fd, af; + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + + server_addr = (struct sockaddr*)&server4_addr; + af = AF_INET; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + + server_addr = (struct sockaddr*)&server6_addr; + af = AF_INET6; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((server_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + exit(1); + } + + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + + if(bind(server_fd, server_addr, addr_len) == -1) { + perror("bind"); + exit(1); + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + exit(1); + } + + assert(server_fd != 0); + + LOG_I("[SCTP] Server started on %s:%d", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd, af; + + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + server_addr = (struct sockaddr*)&server4_addr; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + server_addr = (struct sockaddr*)&server6_addr; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + exit(1); + } + + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, server_addr, addr_len) == -1) { + perror("connect"); + exit(1); + } + assert(client_fd != 0); + + LOG_I("[SCTP] Connection established"); + + return client_fd; +} + +int sctp_accept_connection(const char *server_ip_str, const int server_fd) +{ + LOG_I("[SCTP] Waiting for new connection..."); + + struct sockaddr client_addr; + socklen_t client_addr_size; + int client_fd; + + //Blocking call + client_fd = accept(server_fd, &client_addr, &client_addr_size); + fprintf(stderr, "client fd is %d\n", client_fd); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + exit(1); + } + + //Retrieve client IP_ADDR + char client_ip6_addr[INET6_ADDRSTRLEN], client_ip4_addr[INET_ADDRSTRLEN]; + if(strchr(server_ip_str, ':') != NULL) //IPv6 + { + struct sockaddr_in6* client_ipv6 = (struct sockaddr_in6*)&client_addr; + inet_ntop(AF_INET6, &(client_ipv6->sin6_addr), client_ip6_addr, INET6_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip6_addr); + } + else { + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip4_addr, INET_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip4_addr); + } + + return client_fd; +} + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data) +{ + fprintf(stderr,"in sctp send data func\n"); + fprintf(stderr,"data.len is %d", data.len); + int sent_len = send(socket_fd, (void*)(&(data.buffer[0])), data.len, 0); + fprintf(stderr,"after getting sent_len\n"); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + + return sent_len; +} + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + +} + +/* +Receive data from SCTP socket +Outcome of recv() +-1: exit the program +0: close the connection ++: new data +*/ +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data) +{ + //clear out the data before receiving + fprintf(stderr, "receive data1\n"); + memset(data.buffer, 0, sizeof(data.buffer)); + fprintf(stderr, "receive data2\n"); + data.len = 0; + + //receive data from the socket + int recv_len = recv(socket_fd, &(data.buffer), sizeof(data.buffer), 0); + fprintf(stderr, "receive data3\n"); + + if(recv_len == -1) + { + perror("[SCTP] recv"); + exit(1); + } + else if (recv_len == 0) + { + LOG_I("[SCTP] Connection closed by remote peer"); + if(close(socket_fd) == -1) + { + perror("[SCTP] close"); + } + return -1; + } + + data.len = recv_len; + + return recv_len; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/*! \file e2sim_sctp.h + */ + +#ifndef E2SIM_SCTP_H +#define E2SIM_SCTP_H + +void *handle_connection(void *thread_data); + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_send_to_socket(int sockfd, const void *buf, size_t len); + +//int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size); + +//test only +void client_send_multiple_test_msg(int client_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/SCTP/e2sim_sctp.hpp @@ -0,0 +1,39 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_SCTP_HPP +#define E2SIM_SCTP_HPP + +#include "e2sim_defs.h" + +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_accept_connection(const char *server_ip_str, const int server_fd); + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data); + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data); + +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml new file mode 100644 index 0000000..f0b6262 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml new file mode 100644 index 0000000..5f94d2e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml new file mode 100644 index 0000000..587b578 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml @@ -0,0 +1,36 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 01001010100101010010101010101010 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml new file mode 100644 index 0000000..3b82969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml new file mode 100644 index 0000000..3589f28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000100000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100010000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml new file mode 100644 index 0000000..bab51d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml @@ -0,0 +1,69 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000110000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100011000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + 24 + + + + + 02 F8 39 + 00 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c new file mode 100644 index 0000000..959e7ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.c @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "x2ap_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +/* Encode X2AP PDU ASN1 buffer*/ +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + + assert(pdu != NULL); + assert(buffer != NULL); + assert(len != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, pdu, (void **)buffer); + + if (encoded < 0) + { + return -1; + } + + *len = encoded; + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, pdu); + return encoded; +} + +/* Decode XASN1 buffer to X2AP PDU*/ +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_X2AP_PDU, (void **)&pdu, buffer, + len, 0, 0); + + //xer_fprint(stdout, &asn_DEF_X2AP_PDU, pdu); + + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode pdu\n"); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp new file mode 100644 index 0000000..7f2e6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.cpp @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "x2ap_asn_codec.hpp" + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + encoded_size = x2ap_asn_per_encode(pdu, buf, buf_size, err_buf, sizeof(err_buf)); + + if(encoded_size != -1) + { + LOG_D("[X2AP] ASN Encode successful, encoded_size = %d", encoded_size); + } + else + { + LOG_E("[X2AP] Encode error: %s", err_buf); + exit(1); + } + +} + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + int rc = x2ap_asn_per_decode(pdu, buf, encoded_size, err_buf, sizeof(err_buf)); + if(rc == -1) { + LOG_E("[X2AP] Decode error: %s", err_buf); + } else { + LOG_D("[X2AP] ASN decode successful"); + } +} + +void x2ap_print_pdu(x2ap_pdu_t* pdu) +{ + char pdu_str[X2AP_PDU_PRINT_BUFFER]; + + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + + LOG_D("[X2AP] %s", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h new file mode 100644 index 0000000..bad3ae7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ASN_CODEC_H_ +#define X2AP_ASN_CODEC_H_ + +#include "X2AP-PDU.h" + +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +__attribute__ ((warn_unused_result)); + +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp new file mode 100644 index 0000000..a07f441 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_asn_codec.hpp @@ -0,0 +1,34 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_ASN_CODEC_HPP +#define X2AP_ASN_CODEC_HPP + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" + +#define X2AP_ERROR_MESSAGE_BUFFER 1024 +#define X2AP_PDU_PRINT_BUFFER 4096 + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size); + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size); + +void x2ap_print_pdu(x2ap_pdu_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c new file mode 100644 index 0000000..db12a3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.c @@ -0,0 +1,113 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "x2ap_generate_messages.h" +#include "x2ap_asn_codec.h" +#include "e2sim_defs.h" + +int asn1_xer_print = 0; +int MAX_XML_BUFFER = 10000; + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename) +{ + + uint8_t buf[MAX_XML_BUFFER]; + + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[200]; + char *work_dir = getenv(WORKDIR_ENV); + + strcpy(XML_path, work_dir); + strcat(XML_path, "/src/X2AP/MESSAGES/XML/"); + strcat(XML_path, filename); + + //printf("Generate X2AP PDU from XML file: %s\n", XML_path); + + f = fopen(XML_path, "r"); + assert(f); + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + fprintf(stderr, "%s: Too large input\n", XML_path); + exit(1); + } + + fclose(f); + + //printf("Decode the XER buffer\n"); + rval = xer_decode(NULL, &asn_DEF_X2AP_PDU, (void **)pdu, buf, size); + assert(rval.code == RC_OK); + +} + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_request.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_response.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h new file mode 100644 index 0000000..53998b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_generate_messages.h @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_GENERATE_MESSAGES_H_ +#define X2AP_ENB_GENERATE_MESSAGES_H_ + +#include "X2AP-PDU.h" + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename); + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer); + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c new file mode 100644 index 0000000..4fa635e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.c @@ -0,0 +1,139 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "x2ap_message_handler.h" + +typedef int (*x2ap_message_decoded_handler)(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t *response); + +/* Handlers matrix. Only eNB related procedure present here +/* rowID = procedureCode (start with 0) +*/ +x2ap_message_decoded_handler x2ap_messages_handler[][3] = { + { 0, 0, 0 }, /* handoverPreparation */ + { 0, 0, 0 }, /* handoverCancel */ + { 0, 0, 0 }, /* loadIndication */ + { 0, 0, 0 }, /* errorIndication */ + { 0, 0, 0 }, /* snStatusTransfer */ + { 0, 0, 0 }, /* uEContextRelease */ + { handle_x2_setup_request, handle_x2_setup_response, handle_x2_setup_failure }, /* x2Setup */ + { 0, 0, 0 }, /* reset */ + { 0, 0, 0 }, /* eNBConfigurationUpdate */ + { 0, 0, 0 }, /* resourceStatusReportingInitiation */ + { 0, 0, 0 }, /* resourceStatusReporting */ + { 0, 0, 0 }, /* privateMessage */ + { 0, 0, 0 }, /* mobilitySettingsChange */ + { 0, 0, 0 }, /* rLFIndication */ + { 0, 0, 0 }, /* handoverReport */ + { 0, 0, 0 }, /* cellActivation */ + { 0, 0, 0 }, /* x2Release */ + { 0, 0, 0 }, /* x2APMessageTransfer */ + { 0, 0, 0 }, /* x2Removal */ + { 0, 0, 0 }, /* seNBAdditionPreparation */ + { 0, 0, 0 }, /* seNBReconfigurationCompletion */ + { 0, 0, 0 }, /* meNBinitiatedSeNBModificationPreparation */ + { 0, 0, 0 }, /* seNBinitiatedSeNBModification */ + { 0, 0, 0 }, /* meNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBCounterCheck */ + { 0, 0, 0 } /* retrieveUEContext */ +}; + +char *x2ap_direction2String(int x2ap_dir) +{ + static char *x2ap_direction_String[] = { + "", /* Nothing */ + "Originating message", /* originating message */ + "Successfull outcome", /* successfull outcome */ + "UnSuccessfull outcome", /* successfull outcome */ + }; + return(x2ap_direction_String[x2ap_dir]); +} + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response) +{ + X2AP_PDU_t pdu; + int ret; + + memset(&pdu, 0, sizeof(pdu)); + + //printf("Decode the PDU \n"); + + if (X2AP_ASN_decode(&pdu, data, data_len) < 0){ + return -1; + } + + /* Checking procedure Code and direction of message */ + if (pdu.choice.initiatingMessage.procedureCode > sizeof(x2ap_messages_handler) + / (3 * sizeof(x2ap_message_decoded_handler)) + || (pdu.present > X2AP_PDU_PR_unsuccessfulOutcome)) { + + fprintf(stderr, "Either procedureCode %ld or direction %d exceed expected\n", + pdu.choice.initiatingMessage.procedureCode, pdu.present); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + if (x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1] == NULL) + { + fprintf(stderr, "No handler for procedureCode %ld in direction %s\n", + pdu.choice.initiatingMessage.procedureCode, + x2ap_direction2String(pdu.present - 1)); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + /*calling the appropriate handler */ + ret = (*x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1])(&pdu, response); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return ret; +} + +int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP REQUEST\n"); + + /* Todo: when to generate X2 Setup Failure??? + */ + + response->len = x2ap_generate_x2_setup_response(&response->data); + + return 0; +} + +int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP RESPONSE\n"); + return 0; +} + +int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP FAILURE\n"); + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp new file mode 100644 index 0000000..f818304 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "x2ap_message_handler.hpp" + + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) +{ + //decode the data into X2AP-PDU + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + x2ap_decode_pdu(pdu, data.buffer, data.len); + + x2ap_print_pdu(pdu); + + int index = x2ap_get_index(pdu); + int procedureCode = x2ap_get_procedureCode(pdu); + + switch(procedureCode) + { + case 6: //X2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received X2 SETUP REQUEST"); + x2ap_handle_X2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + case 36: //ENDCX2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received ENDC X2 SETUP REQUEST"); + x2ap_handle_ENDCX2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received ENDC X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received ENDC X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + default: + LOG_E("[X2AP] No available handler for procedureCode=%d", procedureCode); + break; + } +} + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back X2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + + x2ap_pdu_t* res_pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupResponse(res_pdu, cfg); + LOG_D("[X2AP] Created X2 SETUP RESPONSE") + + x2ap_print_pdu(res_pdu); + + //encode response pdu into buffer + sctp_buffer_t res_data; + x2ap_encode_pdu(res_pdu, res_data.buffer, sizeof(res_data.buffer), res_data.len); + + //send response data over sctp + if(sctp_send_data(socket_fd, res_data) > 0) { + LOG_D("[SCTP] Sent X2 SETUP RESPONSE"); + } else { + LOG_D("[SCTP] Unable to send X2 SETUP RESPONSE to peer"); + } +} + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd) +{ + ; +} + + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back ENDCX2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + ; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h new file mode 100644 index 0000000..9c9d6ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_HANDLER_H_ +#define X2AP_ENB_HANDLER_H_ + +#include "x2ap_asn_codec.h" +#include "X2AP-PDU.h" +#include "e2sim_defs.h" +#include "x2ap_generate_messages.h" + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp new file mode 100644 index 0000000..b3146c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/src/X2AP/x2ap_message_handler.hpp @@ -0,0 +1,35 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_MESSAGE_HANDLER_HPP +#define X2AP_MESSAGE_HANDLER_HPP + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "asn_x2ap.hpp" +#include "x2ap_asn_codec.hpp" + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data); + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt new file mode 100644 index 0000000..bf6c51c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/CMakeLists.txt @@ -0,0 +1,86 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(e2sim) + +set (HOME_DIR $ENV{HOME}) +#set (E2SIM_ROOT ../../../) + +include_directories("src") +include_directories("src/SCTP/") +include_directories("src/E2AP") +include_directories("src/E2AP/E2SM") +include_directories("ASN1c") + +find_library( SCTP_LIBRARY sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB E2AGENT_SOURCES + "src/e2agent.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(e2agent ${E2AGENT_SOURCES}) +target_link_libraries( e2agent ${SCTP_LIBRARY} ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + "src/ric_sim.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(ric_sim ${RICSIM_SOURCES}) +target_link_libraries( ric_sim ${SCTP_LIBRARY} ) + + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "src/x2term.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_LIBRARY} ) + + +#----------------------------------------------- +file(GLOB TEST + "src/test_asn1c.cpp" + "src/e2sim_defs.cpp" +# "src/SCTP/*.cpp" + "ASN1c/*.c" + "src/E2AP/*.c" + "src/E2AP/E2SM/*.c" + ) +add_executable(test_asn1c ${TEST}) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp new file mode 100644 index 0000000..690f767 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Misc/test_asn1c.cpp @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "e2sm.h" + +} + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("Test ASN1c"); + + test_eventTriggerDefinition(); + return 0; + + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ErrorIndication.xml"); + + e2ap_asn1c_print_pdu(pdu); + + /* Test encoding */ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + /* Test decoding */ + E2AP_PDU_t* pdu1 = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(pdu1, data.buffer, data.len); + + e2ap_asn1c_print_pdu(pdu1); + + int index = (int)pdu1->present; + + int pCode = e2ap_asn1c_get_procedureCode(pdu1); + + LOG_I("Index = %d, procedureCode = %d", index, pCode); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c new file mode 100644 index 0000000..9b44adf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.c @@ -0,0 +1,180 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Pendulum_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +#include "OCTET_STRING.h" + +static int ASN_DEBUG = 0; + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + assert(pend != NULL); + assert(buffer != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_Pendulum, 0, pend, (void **)buffer); + if(encoded < 0){ + perror("Failed to aper encode\n"); + exit(1); + } + + *len = encoded; + //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_Pendulum, pend); + return encoded; +} + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + // THIS IS IMPORTANT, otherwise: Segmentation fault + memset(pend, 0, sizeof(*pend)); + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_Pendulum, (void **)&pend, buffer, len, 0, 0); + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode asn1 message\n"); + return -1; + } + + if(ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + return 0; +} + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg) +{ + //Create Pendulum payload struct + Pendulum_t *pend; + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + //convert char* to PrintableString_t* + PrintableString_t *payload = calloc(1, sizeof(PrintableString_t)); + payload->buf = (uint8_t *)msg; + payload->size = strlen(msg); + + pend->strval = payload; + pend->sequence = &sequence; + pend->angle = ∠ + pend->torque = &torque; + + if (ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //Encode Pendulum payload struct to asn1 buffer + uint32_t len; + if(pendulum_asn_encode(pend, buffer, &len) < 0) + { + return -1; + } + //fprintf(stderr, "len = %d\n", len); + + return len; +} + +long pendulum_get_sequence(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.sequence); +} + +double pendulum_get_angle(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.angle); +} + +double pendulum_get_torque(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.torque); +} + +char* pendulum_get_strval(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + char* str; + + pendulum_asn_decode(&pend, buffer, len); + + str = (char*)pend.strval->buf; + + return str; +} + +void test_pendulum_msg(void) +{ + uint8_t *buffer = NULL; + uint32_t len = 0; + double angle = 1.9; + len = pendulum_create_asn_msg(&buffer, 0, angle, 0, NULL); + + double ex_angle = pendulum_get_angle(buffer, len); + fprintf(stderr, "Extracted angle = %f\n", ex_angle); +} + +void test_pendulum_asn1(void) +{ + fprintf(stderr, "test_pendulum_asn1\n"); + + Pendulum_t *pend; + + long sequence = 0; /* OPTIONAL */ + double angle = 1.5; /* OPTIONAL */ + //double torque = 0.7; /* OPTIONAL */ + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + pend->sequence = &sequence; + pend->angle = ∠ + //pend->torque = &torque; + + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //encode + uint8_t *buffer = NULL; + uint32_t len; + pendulum_asn_encode(pend, &buffer, &len); + fprintf(stderr, "len = %d\n", len); + + //decode + Pendulum_t dec_pend; + pendulum_asn_decode(&dec_pend, buffer, len); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h new file mode 100644 index 0000000..3928caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Pendulum_asn_codec.h @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef PENDULUM_ASN_CODEC_H_ +#define PENDULUM_ASN_CODEC_H_ + +#include "Pendulum.h" + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len); + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len); + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg); + +long pendulum_get_sequence(const uint8_t *const buffer, const int len); + +double pendulum_get_angle(const uint8_t *const buffer, const int len); + +double pendulum_get_torque(const uint8_t *const buffer, const int len); + +char* pendulum_get_strval(const uint8_t *const buffer, const int len); + +//For testing only + +void test_pendulum_msg(void); + +void test_pendulum_asn1(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c new file mode 100644 index 0000000..e67465c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "stdio.h" +#include +#include + +#include "adruino_serial.h" + +int start_serial_inferface(int baudrate, char *serial_port) +{ + int fd = -1; + + fd = serialport_init(serial_port, baudrate); + if(fd == -1) { + fprintf(stderr, "couldn't open serial port %s\n", serial_port); + return -1; + } else { + fprintf(stderr, "Openning serial port: %s ...\n", serial_port); + } + + serialport_flush(fd); // take 2 seconds + fprintf(stderr, "Serial port ready!\n"); + + return fd; + +} + +int serial_readline(int fd, char* buf, int buf_max) +{ + if( fd == -1 ){ + perror("serial port not opened"); + return -1; + } + + memset(buf, 0, buf_max); + + do { + serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + } while( buf[0] == '\n' ); + + // serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + + return 0; +} + +int serial_writeline(int fd, char* buf) +{ + if(buf[strlen(buf)-1] != SERIAL_EOL_CHAR){ + //append EOL to buf + int len = strlen(buf); + buf[len] = SERIAL_EOL_CHAR; + buf[len+1] = '\0'; + } + + serialport_write(fd, buf); + + return 0; +} + +//For testing only +void test_adruino_serial(void) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1){ + fprintf(stderr, "[E2 Agent]: "); + fgets(buf, MAX_SERIAL_BUFFER, stdin); + + // serialport_write(fd, "hello\n"); + //serialport_write(fd, buf); + serial_writeline(fd, buf); + + serial_readline(fd, buf, MAX_SERIAL_BUFFER); + fprintf(stderr, "[Adruino] %s", buf); + } + + return; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h new file mode 100644 index 0000000..c061f8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/adruino_serial.h @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ADRUINO_SERIAL_H +#define ADRUINO_SERIAL_H + +#include "arduino-serial-lib.h" + +#define MAX_SERIAL_BUFFER 256 +#define DEFAULT_SERIAL_PORT "/dev/ttyACM0" +#define DEFAULT_BAUDRATE 115200 +#define SERIAL_EOL_CHAR '\n' +#define SERIAL_TIMEOUT 5000 //ms + +int start_serial_inferface(int baudrate, char *serial_port); + +int serial_readline(int fd, char* buf, int buf_max); + +int serial_writeline(int fd, char* buf); + +//For testing only +void test_adruino_serial(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c new file mode 100644 index 0000000..73cac84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.c @@ -0,0 +1,170 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + +#include "arduino-serial-lib.h" + +#include // Standard input/output definitions +#include // UNIX standard function definitions +#include // File control definitions +#include // Error number definitions +#include // POSIX terminal control definitions +#include // String function definitions +#include + +// uncomment this to debug reads +//#define SERIALPORTDEBUG + +// takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1") +// and a baud rate (bps) and connects to that port at that speed and 8N1. +// opens the port in fully raw mode so you can send binary data. +// returns valid fd, or -1 on error +int serialport_init(const char* serialport, int baud) +{ + struct termios toptions; + int fd; + + //fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); + fd = open(serialport, O_RDWR | O_NONBLOCK ); + + if (fd == -1) { + perror("serialport_init: Unable to open port s"); + return -1; + } + + //int iflags = TIOCM_DTR; + //ioctl(fd, TIOCMBIS, &iflags); // turn on DTR + //ioctl(fd, TIOCMBIC, &iflags); // turn off DTR + + if (tcgetattr(fd, &toptions) < 0) { + perror("serialport_init: Couldn't get term attributes"); + return -1; + } + speed_t brate = baud; // let you override switch below if needed + switch(baud) + { + case 4800: brate=B4800; break; + case 9600: brate=B9600; break; + #ifdef B14400 + case 14400: brate=B14400; break; + #endif + case 19200: brate=B19200; break; + #ifdef B28800 + case 28800: brate=B28800; break; + #endif + case 38400: brate=B38400; break; + case 57600: brate=B57600; break; + case 115200: brate=B115200; break; + } + cfsetispeed(&toptions, brate); + cfsetospeed(&toptions, brate); + + // 8N1 + toptions.c_cflag &= ~PARENB; + toptions.c_cflag &= ~CSTOPB; + toptions.c_cflag &= ~CSIZE; + toptions.c_cflag |= CS8; + // no flow control + toptions.c_cflag &= ~CRTSCTS; + + //toptions.c_cflag &= ~HUPCL; // disable hang-up-on-close to avoid reset + + toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines + toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl + + toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw + toptions.c_oflag &= ~OPOST; // make raw + + // see: http://unixwiz.net/techtips/termios-vmin-vtime.html + toptions.c_cc[VMIN] = 0; + toptions.c_cc[VTIME] = 0; + //toptions.c_cc[VTIME] = 20; + + tcsetattr(fd, TCSANOW, &toptions); + if( tcsetattr(fd, TCSAFLUSH, &toptions) < 0) { + perror("init_serialport: Couldn't set term attributes"); + return -1; + } + + return fd; +} + +// +int serialport_close( int fd ) +{ + return close( fd ); +} + +// +int serialport_writebyte( int fd, uint8_t b) +{ + int n = write(fd,&b,1); + if( n!=1) + return -1; + return 0; +} + +// +int serialport_write(int fd, const char* str) +{ + int len = strlen(str); + int n = write(fd, str, len); + if( n!=len ) { + perror("serialport_write: couldn't write whole string\n"); + return -1; + } + return 0; +} + +// +int serialport_read_until(int fd, char* buf, char until, int buf_max, int timeout) +{ + char b[1]; // read expects an array, so we give it a 1-byte array + int i=0; + do { + int n = read(fd, b, 1); // read a char at a time + if( n==-1) return -1; // couldn't read + if( n==0 ) { + usleep( 1 * 1000 ); // wait 1 msec try again + timeout--; + if( timeout==0 ) return -2; + continue; + } +#ifdef SERIALPORTDEBUG + fprintf(stderr, "serialport_read_until: i=%d, n=%d b='%c'\n",i,n,b[0]); // debug +#endif + buf[i] = b[0]; + i++; + } while( b[0] != until && i < buf_max && timeout>0 ); + + buf[i] = 0; // null terminate the string + return 0; +} + +// +int serialport_flush(int fd) +{ + sleep(2); //required to make flush work, for some reason + return tcflush(fd, TCIOFLUSH); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h new file mode 100644 index 0000000..74fe592 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/Serial/arduino-serial-lib.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + + +#ifndef __ARDUINO_SERIAL_LIB_H__ +#define __ARDUINO_SERIAL_LIB_H__ + +#include // Standard types + +int serialport_init(const char* serialport, int baud); +int serialport_close(int fd); +int serialport_writebyte( int fd, uint8_t b); +int serialport_write(int fd, const char* str); +int serialport_read_until(int fd, char* buf, char until, int buf_max,int timeout); +int serialport_flush(int fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt new file mode 100644 index 0000000..727edbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/demo_setup.txt @@ -0,0 +1,14 @@ +# DEMO March 20, 2019 + ## E2 Agent Laptop with IP x.x.x.x + - Connect to adruino via USB + - Connect to E2 Termination Desktop via Ethernet + - Run E2 Agent: $E2SIM_DIR/build/e2sim x.x.x.x + + ## E2 Termination Desktop + - Run xApp + cd $E2SIM_DIR/rmr_interface/tests/pendulum_xapp + bash run_receiver + + - Run E2 Termination + cd $E2SIM_DIR + ./build_and_run_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c new file mode 100644 index 0000000..613ce57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_closedloop.c @@ -0,0 +1,263 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include +#include +#include +#include +#include +#include //for close() +#include //for inet_ntop() + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" +#include "adruino_serial.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +static void pendulum_control_E2_agent(int client_fd) +{ + fprintf(stderr, "--------------------------------------\n"); + fprintf(stderr, "E2 AGENT - START PENDULUM CONTROL\n"); + fprintf(stderr, "--------------------------------------\n"); + + uint8_t *buffer; + uint32_t len; + clock_t begin; + double rtt; //ms + + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len; + + double angle; + double torque; + long sqn; + int count = 0; + + //serial + // int serial_fd; + char serial_buffer[MAX_SERIAL_BUFFER]; + // serial_fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + // + // char *delay_str_prev = "$0#\n"; + // //char *delay_str_new; + // + // int MSG_NUM = 10; + // + // //Always start with 0 delay + // serialport_write(serial_fd, "$0#\n"); + + // for(int i = 0; i < MSG_NUM; i++) + while(1) + { + + fprintf(stderr, "----------------\n"); + count += 1; + buffer = NULL; + len = 0; + + // //1.Read from serial + // serial_readline(serial_fd, serial_buffer, MAX_SERIAL_BUFFER); + // if(serial_buffer[0] == '\n') + // { + // //fprintf(stderr, "RECEIVED EOL\n"); + // continue; + // } + // //fprintf(stderr, "[Adruino] %s", serial_buffer); + usleep(5*1000); + + snprintf(serial_buffer, sizeof(serial_buffer)-1, "E2 AGENT PING"); + + begin = clock(); + + //2. Encode pendulum angle to ASN1 message + + len = pendulum_create_asn_msg(&buffer, 0, 0, 0, serial_buffer); + + //3. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + fprintf(stderr, "Sent ASN1 message to E2 Termination\n"); + } + + // 4. Receive response from E2 Termination + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = 0; + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return; + } + + char *recv_str; + recv_str = pendulum_get_strval(recv_buf, recv_len); + fprintf(stderr, "Received response message #%d from xApp: %s\n", count, recv_str); + + // 5. TODO: Send response to serial + // Compare if delay has changed: + // if(strcmp(delay_str_prev, recv_str) != 0) { + // serial_writeline(serial_fd, recv_str); + // } + + //serial_writeline(serial_fd, recv_str); + + //Write to a file + FILE *f; + f = fopen("arduino_delay.txt", "w"); + fprintf(f, "%s", recv_str); + fclose(f); + + begin = clock() - begin; + rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + fprintf(stderr, "E2Agent-RIC-E2Agent RTT = %f ms\n", rtt); + + } + + close(client_fd); +} + +int main(int argc, char *argv[]) +{ + fprintf(stderr, "E2 AGENT - PENDULUM CONTROL. Version %s\n", VERSION); + + // char *recv_str = "9"; + // int delay; + // + // printf("delay = %d\n", atoi(recv_str)); + // + // long delay = 22.5; + // + // printf("delay = %d\n", (int)delay); + // return 0; + + // test_rmr(); return 0; + // test_adruino_serial(); return 0; + + char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + int server_fd; + int client_fd; + struct sockaddr client_addr; + socklen_t client_addr_size; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n" , server_port); + return -1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + fprintf(stderr, "Unrecognized option.\n"); + fprintf(stderr, "Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return -1; + } + + server_fd = sctp_start_server(server_ip, server_port); + + fprintf(stderr, "Waiting for connection...\n"); + client_fd = accept(server_fd, &client_addr, &client_addr_size); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + return -1; + } + + //Todo: retrieve client ip addr + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + char client_ip_addr[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip_addr, INET_ADDRSTRLEN); + + fprintf(stderr, "New client connected from %s\n", client_ip_addr); + + // while(1) //put while loop if want to receive from multiple clients + // { + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + memset(recv_buf, 0, sizeof(recv_buf)); + + fprintf(stderr, "------------------------\n"); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + else if(recv_len == 0) + { + fprintf(stderr, "\nConnection from %s closed by remote peer\n", client_ip_addr); + if(close(client_fd) == -1) + { + perror("close"); + } + return -1; + } + + //fprintf(stderr, "Received a message of size %d\n", recv_len); + + //TODO: check PPID here before calling x2ap handler + + sctp_data_t response = {NULL, 0}; + x2ap_eNB_handle_message(recv_buf, recv_len, &response); + + //======================================================================= + //reply to client + assert(response.data != NULL); + if(sctp_send_to_socket(client_fd, response.data, (size_t)response.len) > 0){ + fprintf(stderr, "Sent X2 SETUP RESPONSE \n"); + } else{ + perror("send to socket"); + return -1; + } + + fprintf(stderr, "X2 Setup Completed \n"); + + //========================================================================= + // Pendulum interaction + // Send pendulum state to E2 Termination and receive response + pendulum_control_E2_agent(client_fd); + // } //end while + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c new file mode 100644 index 0000000..33fa0ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_serial.c @@ -0,0 +1,56 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "e2sim_defs.h" +#include + +#include "adruino_serial.h" + +int main(int argc, char *argv[]) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1) + { + //usleep(5*1000); //sleep 5ms between read + sleep(1); + + FILE *f; + f = fopen("arduino_delay.txt", "r"); + assert(f); + + fread(buf, 1, sizeof(buf), f); + + printf("delay content = %s \n", buf); + + serial_writeline(fd, buf); + + fclose(f); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c new file mode 100644 index 0000000..c96a440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2sim_test_client.c @@ -0,0 +1,378 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +#include "x2ap_generate_messages.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +//time +#include + +//these are the metrics being sent to the a1 mediator +int ave_ric_rtt_last_epoch=0; +int ave_msg_rate_last_epoch=0; +int ave_pendulum_msg_rate_last_epoch=0; + +int total_rtt_current_epoch=0; +int total_messages_current_epoch=0; +int total_pendulum_messages_current_epoch=0; + +int total_rtt_entries_current_epoch=0; + +int epoch_duration = 1;//in seconds + +long rtt_epoch_start_time =0; + +long msg_rate_epoch_start_time =0; +long pendulum_msg_rate_epoch_start_time = 0; + +long current_timestamp_in_us(){ + struct timeval currentTime; + gettimeofday(¤tTime, NULL); + return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec; +} +void update_rtt_metrics(long rtt){//called every time there is a new rtt measurement + if(rtt_epoch_start_time == 0) + rtt_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + + total_rtt_current_epoch = total_rtt_current_epoch+rtt; + total_rtt_entries_current_epoch++; + + if((current_timestamp_in_us() - rtt_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_ric_rtt_last_epoch = total_rtt_current_epoch/total_rtt_entries_current_epoch; + total_rtt_current_epoch =0; + rtt_epoch_start_time = 0; + } +} + +void update_msg_rate_metrics(){ + if(msg_rate_epoch_start_time == 0) + msg_rate_epoch_start_time= current_timestamp_in_us(); //start of a new epoch + total_messages_current_epoch++; + if((current_timestamp_in_us() - msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_msg_rate_last_epoch = total_messages_current_epoch; + total_messages_current_epoch =0; + msg_rate_epoch_start_time =0; + } +} + +void update_pendulum_control_rate() +{ + if(pendulum_msg_rate_epoch_start_time == 0) + pendulum_msg_rate_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + total_pendulum_messages_current_epoch++; + + if((current_timestamp_in_us() - pendulum_msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_pendulum_msg_rate_last_epoch = total_pendulum_messages_current_epoch; + total_pendulum_messages_current_epoch = 0; + pendulum_msg_rate_epoch_start_time = 0; + } + +} + +void send_metrics_to_a1_med(struct rmr_context *rmr_c){ + int mtype=103; + char* metrics= malloc(1024); + int time_int = current_timestamp_in_us()/1000000; + //int ave_msg_rate_last_epoch=500; + snprintf(metrics, 1024, "{%s:%d, %s:%d, %s:%d, %s:%d}", \ + "\"latency\"", ave_ric_rtt_last_epoch/1000, \ + "\"ricload\"",ave_msg_rate_last_epoch, \ + "\"load\"",ave_pendulum_msg_rate_last_epoch, \ + "\"time\"",time_int); + rmr_send_wrapper(rmr_c, mtype, metrics); + printf("Sent message of type:%d to a1_med with content:%s\n",mtype,metrics); +} + +void forward_to_load_consumer(struct rmr_context *rmr_c){//the content does not matter + int mtype=105; + char* load_message="dummy load"; + rmr_send_wrapper(rmr_c, mtype, load_message); + printf("Sent message of type:%d to load consumer with content:%s\n",mtype,load_message); +} + +static void pendulum_control_E2_Termination(int client_fd) +{ + printf("--------------------------------------\n"); + printf("E2 TERMINATION - START PENDULUM CONTROL\n"); + printf("--------------------------------------\n"); + + uint8_t *send_buffer; + uint8_t recv_buffer[1024]; + uint32_t send_len; + uint32_t recv_len; + + clock_t begin = clock(); + double rtt; + double rtt_stats[100000]; + long recv_count = 0; + long fail_count = -1; //ignore the first message (see adruino code) + + long sqn; + int count = 0; + + //================================= + + //Setup context + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "E2TERM_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMR to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + + //================================== + long loop_start_time = 0; + while(1){ + printf("----------------\n"); + count += 1; + loop_start_time = current_timestamp_in_us(); + //0. Receiving ASN message from E2 Agent + memset(recv_buffer, 0, sizeof(recv_buffer)); + printf("Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + recv_len = 0; + + printf(" 1Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + //long time_of_message_from_e2agent = current_timestamp_in_us(); + + if((recv_len = recv(client_fd, &recv_buffer, sizeof(recv_buffer), 0)) == -1) { + perror("recv"); + return; + } + + long time_of_message_from_e2agent = current_timestamp_in_us(); + + printf(" 2Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + if(recv_len == 0) { + rmr_close_wrapper(rmr_c); + + printf("Connection from closed by remote peer.\n"); + if(close(client_fd) == -1) { + perror("close"); + } + return; + } + + printf(" 3Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // begin = clock() - begin; + // rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + //printf("E2Term-Adruino-E2Term = %f ms\n", rtt); + + //2. Decode ASN message and Extract pendulum angle + char *recv_str; + recv_str = pendulum_get_strval(recv_buffer, recv_len); + // if( (strcmp(recv_str, "-1") == 0) || (strcmp(recv_str, "") == 0) ) + + if(strcmp(recv_str, "\n") == 0) + { + printf("RECEIVED EOL\n"); + } + + printf(" 4Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // if(atof(recv_str) <= 0) + // { + // printf("FAILLLLLL\n"); + // fail_count += 1; + // } + // else { + // rtt_stats[recv_count] = atof(recv_str); + // recv_count++; + // } + + printf("Time to receive angle message from arduino after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + printf("Received message #%d from Adruino: %s\n", count, recv_str); + //printf("Last reported RTT (Adruino-RIC-Adruino): %f ms, fail_count = %ld\n", + // atof(recv_str)/1000, fail_count); + + // 3. [BHARATH] send_to_xApp(&pendulum_state, &response) + // while(1) { + // usleep( 10 ); + // char* message = "foo 111"; + char reply[1024]; + int got_pend_control=0; + rmr_send_wrapper(rmr_c, mtype, recv_str ); + printf("Sent message of type:%d to pendulum xApp with content:%s\n",mtype,recv_str); + long angle_receive_time =0; + while (got_pend_control == 0){ + if(rmr_poll_for_message(rmr_c) == 1) { + update_msg_rate_metrics(); + switch(rmr_c->rbuf->mtype) { + case 33 : + angle_receive_time = current_timestamp_in_us(); + got_pend_control=1; + update_pendulum_control_rate(); //add this + strcpy(reply,rmr_c->rbuf->payload); + printf("Received control message from pendulum xapp with message type: %d and content %s\n",rmr_c->rbuf->mtype, reply); + break; + case 102 : + printf("Received METRIC request from A1 mediator with message type: %d and content %s\n",rmr_c->rbuf->mtype,rmr_c->rbuf->payload); + send_metrics_to_a1_med(rmr_c); + break; + case 104 : + printf("***************************Received load from load generator****************************"); + forward_to_load_consumer(rmr_c); + break; + default : + continue; + } + } + + } + printf("Time to receive control message from xapp after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); +// snprintf(reply, 1024, "$%d#\n", (int)ave_ric_rtt_last_epoch/1000); + send_len = pendulum_create_asn_msg(&send_buffer, 0, 0, 0, reply); + printf("Time to create asn message after receiving angle: %ld microseconds\n",current_timestamp_in_us() - angle_receive_time); + begin = clock(); + + //6. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, send_buffer, (size_t)send_len) > 0){ + printf("Sent ASN1 response to E2 Agent\n"); + } + long time_of_reply_to_e2agent = current_timestamp_in_us(); + printf("Time to send asn message after receiving angle: %ld microseconds \n",current_timestamp_in_us() - angle_receive_time); + long rtt = (time_of_reply_to_e2agent - time_of_message_from_e2agent); + ave_ric_rtt_last_epoch = rtt; + printf("RIC RTT is %lf milliseconds\n", rtt/1000.0); + //update_rtt_metrics(rtt); + } + + rmr_close_wrapper(rmr_c); + +} + +int main(int argc, char* argv[]) +{ + // test_rmr(); return 0; + + const char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + printf("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return 1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + printf("Unrecognized option.\n"); + printf("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return 0; + } + + int client_fd; + client_fd = sctp_start_client(server_ip, server_port); + + uint8_t *buffer; + uint32_t len; + + //Note: put a while(1) loop here if want client to stay + // for(int i = 0; i < 3; i++) + // { + buffer = NULL; + len = 0; + + printf("------------------------\n"); + clock_t begin; + begin = clock(); + + //Create pdu for x2 message and send to socket + len = x2ap_generate_x2_setup_request(&buffer); + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + printf("Sent X2 SETUP REQUEST\n"); + } + + //======================================================================= + //printf("waiting for server response\n"); + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + //sctp_recv_from_socket(client_fd, recv_buf, sizeof(recv_buf)); + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + + //printf("Received a message of size %d\n", recv_len); + x2ap_eNB_handle_message(recv_buf, recv_len, NULL); + + begin = clock() - begin; + double time_taken = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + printf("Close-loop time: %f ms \n", time_taken); + printf("X2 Setup Completed \n"); + + // } //end iteration + + //========================================================================= + // Pendulum interaction + // Receive pendulum state from E2 Agent and send response + pendulum_control_E2_Termination(client_fd); + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp new file mode 100644 index 0000000..b65ac65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/e2termination_test.cpp @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "asn_e2ap.hpp" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "e2ap_asn_codec.hpp" + +using namespace std; + +void test_send_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_X2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + } + +void test_send_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_ENDCX2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_send_RICSubscriptionRequest(int &client_fd) +{ + LOG_I("Test RIC SUBSCRIPTION"); + + /* Create RIC SUBSCRITION REQUEST */ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + RICsubscription_params_t params; + params.request_id = 2; + params.seq_number = 200; + params.ran_func_id = 0; + params.event_trigger_def = "hello world"; + + RIC_action_t action1(1, RICactionType_report); + // RIC_action_t action2(3, RICactionType_insert); + // RIC_action_t action3(5, RICactionType_insert); + // RIC_action_t action4(7, RICactionType_insert); + params.actionList.push_back(action1); + // params.actionList.push_back(action2); + // params.actionList.push_back(action3); + // params.actionList.push_back(action4); + + e2ap_create_RICsubscriptionRequest(pdu, params); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + //wait to receive response and indication (if any) + sctp_buffer_t recv_buf; + LOG_I("[SCTP] Waiting for SCTP data"); + while(1) + { + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + else + break; + + } + + + return; + //========================================================================== + + //decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + + e2ap_decode_pdu(pdu2, data.buffer, data.len); + + RICsubscription_params_t params2; + e2ap_parse_RICsubscriptionRequest(pdu2, params2); + printf("request_id = %d\n", params2.request_id); + printf("seq_number = %d\n", params2.seq_number); + printf("ran_func_id = %d\n", params2.ran_func_id); + printf("event = %s\n", ¶ms2.event_trigger_def[0]); + + for( auto const &a : params.actionList) + { + printf("action id = %d, action type = %d\n", (int)a.action_id, (int)a.action_type); + } + + + LOG_I("================= RESPONSE ==========================="); + for(size_t i = 0; i < params2.actionList.size(); i++) + { + //example logic: admit every other action + if(i%2 == 0) { + params2.actionList[i].isAdmitted = true; + } else { + params2.actionList[i].isAdmitted = false; + params2.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params2.actionList[i].notAdmitted_subCause = 5; + } + } + + e2ap_pdu_t* res_pdu = new_e2ap_pdu(); + e2ap_create_RICsubscriptionResponse(res_pdu, params2); + + e2ap_print_pdu(res_pdu); + + //Encode into buffer + sctp_buffer_t data_resp; + e2ap_encode_pdu(res_pdu, data_resp.buffer, sizeof(data_resp.buffer), data_resp.len); + + LOG_I("================= FAILURE ==========================="); + e2ap_pdu_t* fail_pdu = new_e2ap_pdu(); + + RICsubscription_params_t params3; + e2ap_parse_RICsubscriptionRequest(pdu2, params3); + + for(size_t i = 0; i < params3.actionList.size(); i++) + { + params3.actionList[i].isAdmitted = false; + params3.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params3.actionList[i].notAdmitted_subCause = 5; + } + + e2ap_create_RICsubscriptionFailure(fail_pdu, params3); + e2ap_print_pdu(fail_pdu); + + //Encode into buffer + sctp_buffer_t data_fail; + e2ap_encode_pdu(fail_pdu, data_fail.buffer, sizeof(data_fail.buffer), data_fail.len); + +} + +int main(int argc, char* argv[]){ + + LOG_I("E2 Termination Test"); + + // test_send_RICSubscriptionRequest(); + // return 0; + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //--------------------------------------------------- + // test_send_X2Setup(client_fd); + test_send_ENDCX2Setup(client_fd); + test_send_RICSubscriptionRequest(client_fd); + + //--------------------------------------------------- + + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 new file mode 100644 index 0000000..d36a4de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/Pendulum/pendulum.asn1 @@ -0,0 +1,12 @@ +PendulumModule DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Pendulum ::= SEQUENCE { + sequence INTEGER OPTIONAL, + angle REAL OPTIONAL, + torque REAL OPTIONAL, + strval PrintableString OPTIONAL +} + +END diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt new file mode 100644 index 0000000..4faee6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/CMakeLists.txt @@ -0,0 +1,59 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB WLG_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_wlg.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_wlg ${WLG_SOURCES}) +target_link_libraries( ric_wlg ${SCTP_STD_LIB} ) + +#---------------------------------------------- +file(GLOB RICPERF_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_perf.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_perf ${RICPERF_SOURCES}) +target_link_libraries( ric_perf ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh new file mode 100644 index 0000000..2f81b56 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/build_wlg.sh @@ -0,0 +1,27 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +mkdir -p build +cd build +rm -rf CMakeCache.txt +cmake .. +make -j`nproc` diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp new file mode 100644 index 0000000..9403283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_perf.cpp @@ -0,0 +1,287 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +void set_seqnum(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + // xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + + // e2ap_asn1c_print_pdu(pdu); +} + +int subresponse_get_sequenceNum(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + return requestid->ricRequestSequenceNumber; + break; + } + } +} + +void subrequest_set_sequenceNum(E2AP_PDU_t* pdu, int seq) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + requestid->ricRequestSequenceNumber = seq; + break; + } + } + +} + +void subscription_response_get_field(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int requestID_val, sequenceNum; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + requestID_val = requestid->ricRequestorID; + sequenceNum = requestid->ricRequestSequenceNumber; + requestid->ricRequestSequenceNumber = 202; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + // case (ProtocolIE_ID_id_RICsubscription): + // ricsubscription = &memb_ptr->value.choice.RICsubscription; + // xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + // break; + } + } + + LOG_I("Request ID = %d, seq = %d", requestID_val, sequenceNum); +} + +void subscription_request_get_field(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICsubscription): + ricsubscription = &memb_ptr->value.choice.RICsubscription; + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + break; + } + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator - Performance Test"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + + //4. Receive RIC SUBSCRIPT RESPONSE + int count = 0; + + while(1) + { + usleep(1000); //sleep for one ms + + sctp_buffer_t recv_buf; + + int res_seq; + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + // e2ap_handle_sctp_data(client_fd, recv_buf); + + E2AP_PDU_t* res_pdu = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(res_pdu, recv_buf.buffer, recv_buf.len); + + int procedureCode = e2ap_asn1c_get_procedureCode(res_pdu); + int index = (int)res_pdu->present; + + if(index == E2AP_PDU_PR_successfulOutcome && \ + procedureCode == ProcedureCode_id_ricSubscription) + { + res_seq =subresponse_get_sequenceNum(res_pdu); + count++; + + LOG_I("Received RIC SUBSCRIPTION RESPONSE, seq = %d, totalCount = %d",\ + res_seq, count); + + //Put res_seq in new subscription request + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + subrequest_set_sequenceNum(req_pdu, res_seq); + // e2ap_asn1c_print_pdu(req_pdu); + + encode_and_send_sctp_data(req_pdu, client_fd); + LOG_I("Send new SUBSCRIPT REQUEST, seq = %d", res_seq); + } + + } + } + + + // E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // + // //Extract subscription response sequence number + // int res_seq = subresponse_get_sequenceNum(res_pdu); + // LOG_I("Subscription Response SeqNo = %d", res_seq); + // + // //Put responseSeq in new subscription request + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // + // subrequest_set_sequenceNum(req_pdu, res_seq); + + // e2ap_asn1c_print_pdu(req_pdu); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp new file mode 100644 index 0000000..309153d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/WLG/ric_wlg.cpp @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC WLG"); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt new file mode 100644 index 0000000..b257505 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/CMakeLists.txt @@ -0,0 +1,49 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(x2term) + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "${E2SIM_ROOT}/test/X2/x2term.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2agent.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2agent.cpp new file mode 100644 index 0000000..db279a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2agent.cpp @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("X2 Agent. Version %s", VERSION); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(server_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2term.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2term.cpp new file mode 100644 index 0000000..e325827 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2term.cpp @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + // sctp_send_data(client_fd, data); + sctp_send_data_X2AP(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //Send X2 Setup Request + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + + //wait to receive X2SetupResponse + while(1){ + wait_for_sctp_data(client_fd); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp new file mode 100644 index 0000000..1953ce6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/X2/x2termination_test.cpp @@ -0,0 +1,119 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" +#include "x2ap_message_handler.hpp" +#include "x2ap_asn_codec.hpp" + +using namespace std; + +void test_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //expect X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_ENDCX2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //expect ENDC X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect ENDC X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +int main(int argc, char* argv[]){ + + LOG_I("X2 Termination Test"); + + options_t ops = read_input_options(argc, argv); + + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + test_X2Setup(client_fd); + // test_ENDCX2Setup(client_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/README b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/README new file mode 100644 index 0000000..9e5a197 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/README @@ -0,0 +1,13 @@ +This is just a basic version of the README that the author of the E2 simulator can augment as he/she sees fit. + +Building rmr + +- Call the rmr_install.sh + + +# Running the sender and receiver + +- Create a route generate (.rt) file that is common to both the sender and receiver and place it in $HOME/global_rmr_files/global_rmr_routes.rt +- Build the receiver in the /tests/pendulum_xapp folder by invoking build_recvr.sh. Run it using bash run_receiver +- Build the sender in the /tests/sender folder by invoking build_sender.sh. Run it using bash run_sender. +- You can see packets being exchanged. diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh new file mode 100644 index 0000000..786a07e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/rmr_install.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +#git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr && (cd rmr && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.oran-osc.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg && git checkout 6735f136906ce2 ) + +cd rmr/ +mkdir $HOME/usr +mkdir .build +cd .build +cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh new file mode 100644 index 0000000..602046f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/build_and_run_recvr.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_rcvr.c -g -o rmr_rcvr -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export PENDULUM_XAPP_RMR_RCV_PORT=5560 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies + +export PRINT_FREQ=10000 #frequency at which test stats will be printed + +RMR_RCV_ACK=1 ./rmr_rcvr $PRINT_FREQ; # receiver that will ack every sender message diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c new file mode 100644 index 0000000..2d8e7fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/receiver/rmr_rcvr.c @@ -0,0 +1,163 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// :vim ts=4 sw=4 noet: +/* + Mnemonic: rmr_rcvr2.c + Abstract: Very simple test listener built on RMr libraries. It does nothing + but return the message it recevied back to the sender. + + Define these environment variables to have some control: + RMR_SEED_RT -- path to the static routing table + RMR_RTG_SVC -- host:port of the route table generator + + One command line parm is accepted: stats frequency. This is a number, n, + which causes stats to be generated after every n messages. If set to 0 + each message is written when received and no stats (msg rate) is generated. + + Date: 11 February 2018 + Author: E. Scott Daniels + + Mods: 18 Mar 2019 -- simplified for demo base. +*/ + +#include +#include +#include +#include +#include + +#include + +typedef struct { + int32_t mtype; // message type ("long" network integer) + int32_t plen; // payload length + unsigned char xid[RMR_MAX_XID]; // space for user transaction id or somesuch + unsigned char sid[RMR_MAX_SID]; // sender ID for return to sender needs + unsigned char src[RMR_MAX_SRC]; // name of the sender (source) + struct timespec ts; // timestamp ??? +} mhdr_t; + + +int main( int argc, char** argv ) { + void* mrc; // msg router context + rmr_mbuf_t* msg = NULL; // message received + int i; + char* listen_port; + char* tok; + int must_ack = 1; // flag -- if set we rts all messages + mhdr_t* hdr; + int last_seq = 0; // sequence number from last message + int this_seq; // sequence number on this message + int count = 0; // count of msg since last status + long long tcount = 0; // total count of messages + time_t ts; + time_t lts; + int stat_freq = 20000; // write stats after reciving this many messages + int first_seq = -1; // first sequence number we got to report total received + int max_rt = 1000; // max times we'll retry an ack + + if( (tok = getenv( "RMR_RCV_ACK" )) != NULL ) { + must_ack = atoi( tok ); + } + + if( (listen_port = getenv( "PENDULUM_XAPP_RMR_RCV_PORT" )) == NULL ) { + listen_port = "4560"; + } + + if( argc > 1 ) { + stat_freq = atoi( argv[1] ); + } + fprintf( stderr, " stats will be reported every %d messages\n", stat_freq ); + + mrc = rmr_init( listen_port, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // start your engines! + if( mrc == NULL ) { + fprintf( stderr, " ABORT: unable to initialise RMr\n" ); + exit( 1 ); + } + + while( ! rmr_ready( mrc ) ) { + fprintf( stderr, " waiting for RMr to show ready\n" ); + sleep( 1 ); + } + fprintf( stderr, " RMr now shows ready\n" ); + + lts = time( NULL ); + fprintf( stderr, " listening on %s acking %s\n", listen_port, must_ack != 0 ? "on" : "off" ); + + //rmr_set_stimeout( mrc, 50 ); + while( 1 ) { + sleep (2 ); + msg = rmr_rcv_msg( mrc, msg ); // block until one arrives + if( msg == NULL ) { + continue; // shouldn't happen, but don't crash if we get nothing + } + if( msg->mtype < 0 || msg->state != RMR_OK ) { + fprintf( stderr, "[WRN] bad msg: state=%d errno=%d\n", msg->state, errno ); + continue; // just loop to receive another + } + + if( stat_freq == 0 ) { // mechanism to dump all received messages for quick testing + fprintf( stdout, " msg received: type = %d len = %d (%s)\n", msg->mtype, msg->len, msg->payload ); // assume a nil term string in payload + } + + count++; // messages received for stats output + tcount++; + + //if( stat_freq >= 1000 ) { + if(1) { + //if( (count % stat_freq) == 0 ) { + if(1) { + ts = time( NULL ); + if( ts - lts ) { + + fprintf( stderr, " %7lld received %5lld msg/s over the last %3lld seconds mrt=%d, with content=%s\n", + (long long) last_seq - first_seq, (long long) (count / (ts-lts)), (long long) ts-lts, max_rt,msg->payload ); + lts = ts; + count = 0; + } + } + } + + if( must_ack ) { // send back a response + //fprintf( stdout, " msg: type = %d len = %d; acking\n", msg->mtype, msg->len ); + //msg->len = snprintf( msg->payload, 1024, "bar %lld", tcount ); // ack with bar and counter + msg->len = snprintf( msg->payload, 1024, "Reply hello back to Arduino!\n"); + // msg->len = snprintf( msg->payload, 1024, "OK\n"); + + + //msg->mtype = 999; //only to be used if rts is not possible + + //msg = rmr_send_msg (mrc, msg); //only to be used if rts is not possible + + msg = rmr_rts_msg( mrc, msg ); // this is a retur to sender; preferred + //if( (msg = rmr_send_msg( mrc, msg )) != NULL ) { // this is a routed send; not preferred, but possible + if( (msg = rmr_rts_msg( mrc, msg )) != NULL ) { + //----- checking too many times here has been problematic and causes what appears to be race condidtions in NNG threads; for now max_rt should be small + max_rt = 2; + while( max_rt > 0 && msg->state != RMR_OK && errno == EAGAIN ) { // NNG likes to refuse sends, just keep trying on eagain + max_rt--; + rmr_rts_msg( mrc, msg ); + //rmr_send_msg (mrc, msg); + } + } + } + + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh new file mode 100644 index 0000000..c4eb8fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/build_and_run_sender.sh @@ -0,0 +1,29 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_sender.c -g -o rmr_sender -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export DUMMY_SENDER_RMR_RCV_PORT=38086 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies +export DEMO_MAX_PAYLOAD_BYTES=240 # max_size of payload + +./rmr_sender; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c new file mode 100644 index 0000000..724b0d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_sender.c @@ -0,0 +1,96 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// :vim ts=4 sw=4 noet: + +/* + Mnemonic: rmr_sender2.c + Abstract: Very simple test sender that polls and deals with responses + in between sends (from a single process). + + Date: 18 February 2018 + Author: E. Scott Daniels + + Modified: 18 Mar 2019 - changes to support demo +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "rmr_wrapper.h" + + +void usage( char* argv0 ) { + fprintf( stderr, "usage: %s [mtype-max]\n", argv0 ); + fprintf( stderr, "Sender will send messages with rotating msg types from 0 through mtype-max (if supplied)\n" ); + fprintf( stderr, "if not supplied, only mtype 0 is sent\n" ); + fprintf( stderr, "The default listen port for return messages is 43086; this can be changed by setting DUMMY_SENDER_RMR_RCV_PORT in the environment.\n" ); + fprintf( stderr, "The sender will send forever unless DEMO_SENDER_MAX is set in the environment which causes termination after max messages.\n" ); + fprintf( stderr, "The sender will poll for received messages after each send. The amount of time waited is controlled with DEMO_SENDER_PTO (ms) in the env. Use 0 for non-blocking poll.\n" ); +} + +int main( int argc, char** argv ) { + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + long count = 0; + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "DUMMY_SENDER_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMr to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + while( 1 ) { + usleep( 10 ); // simulate some work being done + char* message = "foo 111"; + + if(rmr_send_wrapper (rmr_c, mtype, message ) == 1) { + //message successfully received in the receive buffer + char reply[1024]; + strcpy(reply,rmr_c->rbuf->payload); + fprintf( stderr, "Acknowledgment received with content:%s\n",rmr_c->rbuf->payload); + rcount++; + } + count++; + + if( (count % 5000) == 0 ) { + fprintf( stdout, "[INFO] total sent: %ld total received: %ld drops=%ld\n", count, rcount, count - rcount ); + } + + } + + fprintf( stderr, "[INFO] sender is terminating having sent %ld messages\n", count ); + rmr_close_wrapper(rmr_c); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h new file mode 100644 index 0000000..446d20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/test/rmr_interface/tests/sender/rmr_wrapper.h @@ -0,0 +1,142 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +int epoll_to = 1;// global default epoll timout -- 1ms +char* eparm; // generic env pointer + +struct rmr_context { + void* mrc; + int rcv_fd; // pollable fd + struct epoll_event epe; // event definition for event to listen to + struct epoll_event events[10]; // wait on 10 possible events + int ep_fd; + int max_payload_size; // ++SCOTT + rmr_mbuf_t* sbuf; // send buffer + rmr_mbuf_t* rbuf; // received buffer +}; + + +struct rmr_context * rmr_init_wrapper(char* lport){ + + struct rmr_context *rmr_c = malloc(sizeof (struct rmr_context)); + fprintf( stderr, "[INFO] glistening for replies on %s\n", lport ); + + + rmr_c->mrc = rmr_init(lport, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // setup RMr and get a context (rmr_c.mrc) + rmr_c->ep_fd=-1; + + //polling related initializations + rmr_c->rcv_fd = rmr_get_rcvfd( rmr_c->mrc );// get the fd to poll for messages received + if( rmr_c->rcv_fd < 0 ) { + fprintf( stderr, "[FAIL] unable to set up polling fd\n" ); + exit( 1 ); + } + + if( (rmr_c->ep_fd = epoll_create1( 0 )) < 0 ) { + fprintf( stderr, "[FAIL] unable to create epoll fd: %d\n", errno ); + exit( 1 ); + } + rmr_c->epe.events = EPOLLIN; + rmr_c->epe.data.fd = rmr_c->rcv_fd; + + if( epoll_ctl( rmr_c->ep_fd, EPOLL_CTL_ADD, rmr_c->rcv_fd, &rmr_c->epe ) != 0 ) { + fprintf( stderr, "[FAIL] epoll_ctl status not 0 : %s\n", strerror( errno ) ); + exit( 1 ); + } + //end of polling related initializations + + //++SCOTT------ next lines until !!SCOTT + rmr_c->max_payload_size = 240; //default + if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + rmr_c->max_payload_size = atoi(eparm); // override with env + } + //!!SCOTT + + //~~SCOTT next line + rmr_c->sbuf = rmr_alloc_msg( rmr_c->mrc, rmr_c->max_payload_size ); // allocate largest payload to send + rmr_c->rbuf = NULL; + + return rmr_c; +} + +void rmr_send_wrapper (struct rmr_context *rmr_c, int mtype, char* message) { + //--SCOTT int max_payload_size = 240; //default + //--SCOTT if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + //--SCOTT max_payload_size = atoi(eparm); + //--SCOTT } + + //~~SCOTT next line + snprintf( rmr_c->sbuf->payload, rmr_c->max_payload_size, "%s", message); // simple send message -- replace with real content + + rmr_c->sbuf->mtype = mtype; // fill in message meta data + rmr_c->sbuf->len = strlen( rmr_c->sbuf->payload ) + 1; // actual length of payload (count the nil end of string) + rmr_c->sbuf->state = 0; + + //retry send for a few times before giving up + long natter = 0; // natter on for errors only once in a while + if( (rmr_c->sbuf = rmr_send_msg( rmr_c->mrc, rmr_c->sbuf )) != NULL ) {// unlikely, but might get a null pointer back if NNG really is buggered + if( rmr_c->sbuf->state != RMR_OK ) { + if( errno == EAGAIN ) { + while( rmr_c->sbuf->state != RMR_OK && errno == EAGAIN ) {// NNG likes to refuse sends, just keep trying on eagain + rmr_send_msg( rmr_c->mrc, rmr_c->sbuf ); + } + } else {// most likely connection refused, don't natter on + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + } + } else { + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + +} + +int rmr_poll_for_message(struct rmr_context *rmr_c){ + int nready; + int i; + int return_type =0; + //start polling the channel to read the acknowledgment + //~~SCOTT next line + + nready = epoll_wait( rmr_c->ep_fd, rmr_c->events, 10, epoll_to ); // wait up to epoll_to ms for a response + for( i = 0; i < nready && i < 10; i++ ) { // loop through to find what is ready + if( rmr_c->events[i].data.fd == rmr_c->rcv_fd ) { // RMr has something + errno = 0; + rmr_c->rbuf = rmr_rcv_msg( rmr_c->mrc, rmr_c->rbuf ); // something ready; this should not block + if( rmr_c->rbuf ) { + // fprintf( stderr, " acknowledgment received:%s\n",rmr_c->rbuf->payload); + return_type = 1; //the message has been acknowledged + } + } + } + return return_type; +} + +void rmr_close_wrapper (struct rmr_context *rmr_c){ + + rmr_close( rmr_c->mrc ); + free(rmr_c); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes new file mode 100644 index 0000000..87ced95 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/asn_defs/generate_e2ap_e2sm_codes @@ -0,0 +1,39 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +E2AP_asn="e2ap-v031.asn" +E2SM_asn="e2sm-gNB-X2-release-1-v041.asn" +X2AP_asn="x2ap-no-desc-15-04.asn" + +GEN_DIR=../../src/ASN1c/ + +rm -f $GEN_DIR/*.c $GEN_DIR/*.h + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2AP_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2SM_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +echo "ASN1 C codes generated at $GEN_DIR" + +# asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER /tmp/e2ap-v031.asn /tmp/x2ap-no-desc-15-04.asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/build_helper.bash b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/build_helper.bash new file mode 100644 index 0000000..1759621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/build_helper.bash @@ -0,0 +1,93 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +####################################### +# Helper Func +###################################### + +black='\E[30m' +red='\E[31m' +green='\E[32m' +yellow='\E[33m' +blue='\E[34m' +magenta='\E[35m' +cyan='\E[36m' +white='\E[37m' +reset_color='\E[00m' + +cecho() # Color-echo. arg1 = message, arg2 = color +{ + local default_msg="No Message." + message=${1:-$default_msg} + color=${2:-$green} + echo -e -n "$color$message$reset_color" + echo + return +} + +echo_error() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $red +} + +echo_fatal() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + echo_error "$my_string" + exit -1 +} + +echo_warning() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $yellow +} + +echo_success() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $green +} + +echo_info() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $blue +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_asn1c new file mode 100644 index 0000000..7d1391f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_asn1c @@ -0,0 +1,31 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +echo "Will install asn1c" +sudo rm -rf asn1c +git clone https://gerrit.o-ran-sc.org/r/com/asn1c.git +cd asn1c/ +autoreconf -iv +./configure +cd examples +chmod u+x crfc2asn1.pl +cd .. +make +sudo make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_dependencies b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_dependencies new file mode 100644 index 0000000..c5b3d7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/tools/install_dependencies @@ -0,0 +1,38 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +sudo apt-get update \ + && sudo apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + && sudo apt-get clean diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ueMeasReport.txt b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ueMeasReport.txt new file mode 100644 index 0000000..32bf4d4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2apv1sim/ueMeasReport.txt @@ -0,0 +1,65 @@ +{ + "ueMeasReport": { + "du-id": 1000, + "ueMeasReportList": [ + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 0, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 1, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + }, + + { + "measTimeStampRf": "2020-04-09 14:33:33,559", + "nrCellIdentity": 1, + "servingCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + }, + "neighbourCellList": [ + { + "nbCellIdentity": 0, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + }, + { + "nbCellIdentity": 2, + "nbCellRfReport": { + "rsrp": 10, + "rsrq": 0, + "rssinr": 0 + } + } + ] + + } + ] + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/e2sim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/e2sim.cpp new file mode 100644 index 0000000..e60a13f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/e2sim.cpp @@ -0,0 +1,56 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +using namespace std; + +int main(int argc, char* argv[]){ + LOG_I("Start E2 Agent (E2 Simulator)"); + + options_t ops = read_input_options(argc, argv); + + //E2 Agent will automatically restart upon sctp disconnection + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/README.md b/ric_benchmarking/e2-interface/e2sim/previous/helm/README.md new file mode 100644 index 0000000..dfff99a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/README.md @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +# +# the test repo needs to be on the same parent path as the dep repo +# simply run e2sim_install.sh from this directory +# diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/Chart.yaml b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/Chart.yaml new file mode 100644 index 0000000..f3a950c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/Chart.yaml @@ -0,0 +1,22 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Kubernetes +name: e2sim +version: 0.1.0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/_helpers.tpl b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/_helpers.tpl new file mode 100644 index 0000000..ce3748d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/_helpers.tpl @@ -0,0 +1,49 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "e2sim.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "e2sim.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "e2sim.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl new file mode 100644 index 0000000..35e01c4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/bin/_e2sim-run.sh.tpl @@ -0,0 +1,54 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} +#!/bin/sh + +# Launch the e2 simulator on ${E2SIM_BIND_ADDR}:${E2SIM_BIND_PORT} +# If E2SIM_BIND_ADDR is not supplied, picks the address of the interface +# associated with the default route for E2SIM_BIND_AF (either +# "inet" [default] or "inet6"). + +if [ -z "${E2SIM_BIND_ADDR}" ]; then + if [ `echo "x${E2SIM_BIND_AF}x" | tr [A-Z] [a-z]` != "xinet6x" ]; then + AF='inet' + DEFROUTE='0/0' + LO='127.0.0.1' + else + AF='inet6' + DEFROUTE='::0/0' + LO='00:00:00:00:00:00' + fi + if [ -z "${E2SIM_BIND_IF}" ]; then + # bind on the address associated with the default route + E2SIM_BIND_IF=`ip -br -f ${AF} route show ${DEFROUTE}| sed 's/.*dev[\ ]*\([^\ ]*\).*/\1/'` + if [ -z ${E2SIM_BIND_IF} ]; then + # this is kinda bogus, but it's the only real fallback: take the first + # non-loopback interface. + E2SIM_BIND_IF=`ip -f ${AF} -o link list up | grep -v LOOPBACK | head -1 |awk -F: '{print $2}'` + fi + fi + E2SIM_BIND_ADDR=`ip -f ${AF} -o addr show ${E2SIM_BIND_IF:-eth0} scope global | sed -e 's/.*inet[6\ ]*\([^\ ]*\)\/.*/\1/'` +fi + +if [ -z $E2SIM_BIND_ADDR ]; then + # search failed. be nondestructively useless. + echo "No suitable address found, binding on loopback addess ${LO}" + E2SIM_BIND_ADDR=${LO} +else + echo "e2sim starting at ${E2SIM_BIND_ADDR}:${E2SIM_PORT:-36421}" +fi + +${E2SIM:-/home/e2sim/build/e2sim} ${E2SIM_BIND_ADDR} ${E2SIM_PORT:-36421} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml new file mode 100644 index 0000000..ec30488 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/configmap-e2sim-bin.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap-e2sim-bin + namespace: {{ .Release.Namespace }} +data: + e2sim-run.sh: | + {{- include "e2sim/templates/bin/_e2sim-run.sh.tpl" . | indent 4 }} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/deployment.yaml b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/deployment.yaml new file mode 100644 index 0000000..21475f1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/templates/deployment.yaml @@ -0,0 +1,79 @@ +{{/* + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/}} + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ include "e2sim.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "e2sim.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + spec: + hostNetwork: true + containers: + - name: {{ include "e2sim.name" . }} + image: "{{ .Values.image.repository }}/{{ .Values.image.name }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /e2sim-run.sh + ports: + - containerPort: {{ .Values.service.port }} + env: + - name: E2SIM_NETWORK_TYPE + value: {{ .Values.e2sim.network.type | default "host" }} + - name: E2SIM_PORT + value: {{ .Values.e2sim.network.port | default 36421 |quote}} + - name: E2SIM_BIND_ADDR + value: {{ .Values.e2sim.network.address }} + - name: E2SIM_BIND_IF + value: {{ .Values.e2sim.network.interface }} + - name: E2SIM_BIND_AF + value: {{ .Values.e2sim.network.addressFamily | default "inet" }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + - name: localtime + mountPath: /etc/localtime + readOnly: true + - name: e2sim-bin + subPath: e2sim-run.sh + mountPath: /e2sim-run.sh + resources: + volumes: + - name: dshm + emptyDir: + medium: Memory + - name: localtime + hostPath: + path: /etc/localtime + - name: e2sim-bin + configMap: + name: configmap-e2sim-bin + defaultMode: 0755 + imagePullSecrets: + - name: {{ .Values.image.repositoryCred }} + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/values.yaml b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/values.yaml new file mode 100644 index 0000000..5f5cbca --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim/values.yaml @@ -0,0 +1,48 @@ +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + +replicaCount: 1 + +image: + repository: snapshot.docker.ranco-dev-tools.eastus.cloudapp.azure.com:10001 + repositoryCred: docker-reg-cred + # for local testing + #repository: ric/testsuite + name: test/e2sim + tag: latest + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: "" + +e2sim: + network: + # network implementation type: hostnetworking or DANM + # type: ["host"]|"danm" + # where e2sim should listen for SCTP connections: + # o if "address" is supplied, listen on that IP (v4 or v6) address + # o if "address" is not supplied and "interface" is supplied, listen on the + # first globally-scoped address on that interface of family "addressFamily" + # (default "inet") + # o if neither "address" nor "interface" is supplied, listen on the first + # globally-scoped address of family "addressFamily" (default "inet") on + # the interface associated with the container's default route, if any; if + # the container does not have a default route, the first interface with + # a globally-scoped address will be used. + # address: addr + # interface: ifname + # addressFamily: ["inet"]|"inet6" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim_install.sh new file mode 100644 index 0000000..9b9a13c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/helm/e2sim_install.sh @@ -0,0 +1,78 @@ +#!/bin/bash +################################################################################ +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ + + +OVERRIDEYAML=$1 + + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +#/root/test/ric_robot_suite/helm +# extract the base to find root to dep + +BASE=${DIR%/test*} + +# /data/ORAN-OSC/it/dep/ric-platform/50-RIC-Platform/bin/install +BASEDIR05=$BASE/dep/ric-platform/50-RIC-Platform/ +BASEDIRCOMMON=$BASE/dep/ric-common/Common-Template/helm/ric-common + +echo "Using etc/ric.conf from $BASEDIR05" + + +source $BASEDIR05/etc/ric.conf + + +if [ -z "$RICPLT_RELEASE_NAME" ];then + RELEASE_NAME=$helm_release_name +else + RELEASE_NAME=$RICPLT_RELEASE_NAME +fi + +# Namespace configuration +if [ -z "$RICPLT_NAMESPACE" ];then + PLT_NAMESPACE=$plt_namespace +else + PLT_NAMESPACE=$RICPLT_NAMESPACE +fi + + + +RICPLT_COMPONENTS="e2sim" + +echo "Deploying RIC Platform components [$RICPLT_COMPONENTS]" +echo "Platform Namespace: $PLT_NAMESPACE" +echo "Helm Release Name: $RELEASE_NAME" + + +COMMON_CHART_VERSION=$(cat $BASEDIRCOMMON/Chart.yaml | grep version | awk '{print $2}') + +helm package -d /tmp $BASEDIRCOMMON + + +for component in $RICPLT_COMPONENTS; do + echo "Preparing chart for comonent $component" + mkdir -p $DIR/$component/charts/ + cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $DIR/$component/charts/ + if [ -z $OVERRIDEYAML ]; then + echo "helm install --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + else + echo "helm install -f $OVERRIDEYAML --namespace \"${PLT_NAMESPACE}\" --set \"Release.HelmReleaseName=${RELEASE_NAME}\" --name \"${RELEASE_NAME}-$component\" $DIR/../helm/$component" + helm install -f $OVERRIDEYAML --namespace "${PLT_NAMESPACE}" --set "Release.HelmReleaseName=${RELEASE_NAME}" --name "${RELEASE_NAME}-$component" $DIR/$component + fi +done diff --git a/ric_benchmarking/e2-interface/e2sim/previous/ricsim.cpp b/ric_benchmarking/e2-interface/e2sim/previous/ricsim.cpp new file mode 100644 index 0000000..6bdc5b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/ricsim.cpp @@ -0,0 +1,89 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + //4. Receive RICSubscriptionResponse + while(1){ + wait_for_sctp_data(client_fd); + } + + + //--------------------------------------- + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/asn.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/asn.hpp new file mode 100644 index 0000000..3affd81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/asn.hpp @@ -0,0 +1,27 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/version.hpp" +#include "asn/elements.hpp" +#include "asn/constraints.hpp" +#include "asn/variant.hpp" \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/codec.hpp new file mode 100644 index 0000000..3a42ad5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/codec.hpp @@ -0,0 +1,931 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/ber/common.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tag.hpp" +#include "asn/ber/length.hpp" +#include "asn/ber/visitor.hpp" +#include "asn/ber/opentype.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +pack (X.690) +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack (X.690) +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* ExplicitCodec: Codec for elements with EXPLICIT tag +***************************************************************************************/ +template +struct ExplicitCodec +{ + using tag_t = Tag; + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + Element::run(static_cast(ie), ctx); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + { + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("EX buffer: %s", static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + Element::run(static_cast(ie), ctx); + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + Element::run(static_cast(ie), ctx); + + buffer.set_end(end); + } + } + + } + } +}; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.690 8.2) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(1, ctx); + if(ie.get()) + Tools::put_bytes(0xFF, 1, ctx); + else + Tools::put_bytes(0, 1, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length != 1) + { + ctx.refErrorCtx().sizeRangeError(length, 1, 1); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t value; + Tools::get_bytes(value, 1, ctx); + ie.set(value > 0); + } + } + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.690 8.3) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.690 8.4) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = Length::get(ie.get()); + Length::encode(length, ctx); + Tools::put_bytes(ie.get(), length, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + ctx.refErrorCtx().sizeRangeError(length); + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + typename IE::value_type value; + Tools::get_bytes(value, length, ctx); + ie.set(value); + } + } + } +}; +/*************************************************************************************** +* REAL: Encoding the real type (X.690 8.5) +***************************************************************************************/ +//missing... +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.690 8.6) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + + uint8_t tail = ie.get_bitqty() % 8; + + size_t length = ie.get_buffer().size(); + Length::encode(length + 1, ctx); + + auto & buffer = ctx.refBuffer(); + buffer.putByte((8 - tail) & 0x7F); + + if (tail) + { + buffer.putBytes(ie.get_buffer().data(), length - 1); + u8 last_byte = *(ie.get_buffer().data() + length - 1); + + last_byte <<= 8 - tail; + buffer.putBytes(&last_byte, 1); + } + else + { + buffer.putBytes(ie.get_buffer().data(), length); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + size_t len_bytes = length - 1; + size_t bitqty = len_bytes << 3; + + if((data_in[0] & 0x80) || (bitqty < data_in[0])) + { + ctx.refErrorCtx().valueRangeError(data_in[0]); + } + else + { + bitqty = bitqty - data_in[0]; + uint8_t* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, &data_in[1], len_bytes); + const u8 shift = bitqty % 8; + if (shift) + { + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(bitqty, data_out); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.690 8.7) +* Restricted Character string types (X.690 8.23) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + using ctag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value() || tag == ctag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else if(ctag_t::value() == tag) + { + //todo: implement the segmented data + ctx.refErrorCtx().errorUnsupported(); + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.690 8.8) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + Length::encode(0, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + size_t length = Length::decode(ctx); + if(length) + ctx.refErrorCtx().sizeRangeError(length); + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + } + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.690 8.9) +* SET: Encoding the set type (X.690 8.11) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + VisitorEncoderSeq ve(ctx, ie); + ie.encode(ve); + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) //todo: support arbitrary order of IEs in SET + { + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + VisitorDecoderSeq vd(ctx, ie); + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + ie.decode(vd); + if(ctx) + { + if(invalid_tag != vd.get_unhandled_tag()) + { + tag_value_t _tag = vd.get_unhandled_tag(); + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else // it should be the end-of-contents octets (8.1.5) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + uint8_t const* data_in = ctx.refBuffer().getBytes(2); + if(data_in && (data_in[0] || data_in[1])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + ie.decode(vd); + tag_value_t _tag = vd.get_unhandled_tag(); + if(invalid_tag != _tag) + { + if(IE::constraint_t::extended) //skip the unknown extension now + { + tag_value_t const* tag_ptr = &_tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length, tag_ptr); + tag_ptr = nullptr; + + } while(ctx && buffer.getBytesLeft() > 0); + } + else + ctx.refErrorCtx().tagError(static_cast(tag)); // unexpected tag + } + buffer.set_end(end); + } + } + + } + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.690 8.10) +* SET OF: Encoding the set-of type (X.690 8.12) +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t tag) {return tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + tag_t::encode(ctx); + u8* len_ptr = buffer.advance(1); //reserve for the length + + for (auto& elem : ie) + { + Element::run(elem, ctx); + } + + size_t len = buffer.begin() - len_ptr - 1; + if(len > 127) + { + len_ptr[0] = 0x80; //undefinite length form per X.690 8.1.3.6 + uint8_t buff[2] = {0}; // end-of-contents octets (X.690 8.1.5) + buffer.putBytes(buff, sizeof(buff)); + } + else + len_ptr[0] = static_cast(len); //one byte form per X.690 8.1.3.4 + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + if(tag_t::value() != tag) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + auto & buffer = ctx.refBuffer(); + + size_t length = Length::decode(ctx); + + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + + if(length == indefinite_length) + { + tag_value_t elm_tag = get_tag(ctx); + + while(ctx && Element::is_matched(elm_tag)) + { + add_element(ie, ctx, &elm_tag); + elm_tag = get_tag(ctx); + } + + if(ctx) + { + uint8_t const* data_in = ctx.refBuffer().getBytes(1); + if(data_in && (elm_tag || data_in[0])) + { + ctx.refErrorCtx().errorWrongEndOfContent(); + } + } + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + + while(ctx && buffer.getBytesLeft() > 0) + add_element(ie, ctx); + + buffer.set_end(end); + } + } + } + } + +private: + static void inline add_element(IE& ie, DecoderCtx& ctx, tag_value_t const* elm_tag = nullptr) + { + uint8_t* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + Element::run(*v, ctx, elm_tag); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + } + } +}; + +/*************************************************************************************** +* CHOICE: Encoding the choice type +***************************************************************************************/ +struct ChoiceVisitorEncoder +{ + ChoiceVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator()(IE const& ie) + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + + EncoderCtx& m_ctx; +}; + +struct ChoiceVisitorDecoder +{ + ChoiceVisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag) {} + + template bool operator()(IE& ie) + { + Element::run(ie, m_ctx, &m_tag); + return static_cast(m_ctx); + } + + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(!m_valid && Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector {tag}; + IE::enumerate(selector); + return selector.is_valid(); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceVisitorEncoder ve(ctx); + + if(ctx && !ie.encode(ve)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + + Selector selector {tag}; + IE::enumerate(selector); + + if(!selector.is_valid()) + ctx.refErrorCtx().tagError(static_cast(tag)); + else + { + ChoiceVisitorDecoder vd {ctx, tag}; + if(ctx && !ie.decode(selector.get_idx(), vd)) + ctx.refErrorCtx().tagError(ie.get_index()); + } + } +}; + +template +struct ElementType > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + tag_t::encode(ctx); + size_t length = ie.get().size(); + Length::encode(length, ctx); + ctx.refBuffer().putBytes(ie.get().data(), length); + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ie.clear(); + if(tag_t::value() == tag) + { + size_t length = Length::decode(ctx); + if(!length || length == indefinite_length) + { + ctx.refErrorCtx().sizeRangeError(length); + } + else + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), static_cast(tag), length, ctx.refBuffer().toString()); + uint8_t const* data_in = ctx.refBuffer().getBytes(length); + if(data_in) + { + ie.set(length, data_in); + } + } + } + else + { + ctx.refErrorCtx().tagError(static_cast(tag)); + } + } +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct ElementType > +{ + using tag_t = Tag; + + static bool inline is_matched(tag_value_t _tag) {return _tag == tag_t::value();} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct ElementType > +{ + struct Selector + { + Selector(tag_value_t tag) : m_tag(tag) {} + + template void operator()(size_t idx) + { + if(Element::is_matched(m_tag)) + { + m_index = idx; + m_valid = true; + } + } + + size_t get_idx() const {return m_index;} + bool is_valid() const {return m_valid;} + + private: + tag_value_t m_tag; + size_t m_index {0}; + bool m_valid {false}; + }; + + static bool inline is_matched(tag_value_t tag) + { + Selector selector(tag); + IE::enumerate(selector); + + return selector.is_valid(); + } +}; + +/*************************************************************************************** +* Identifier +***************************************************************************************/ +template +struct Identifier +{ + static bool inline is_matched(tag_value_t _tag) + { + return ElementType::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ElementType::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ElementType::run(ie, ctx, tag); + } +}; + +template +struct Identifier > +{ + static bool inline is_matched(tag_value_t _tag) {return ExplicitCodec::is_matched(_tag);} + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ExplicitCodec::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t tag) + { + ExplicitCodec::run(ie, ctx, tag); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static bool inline is_matched(tag_value_t _tag) + { + return Identifier::is_matched(_tag); + } + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE::ie_type), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + Identifier::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, tag_value_t const* tag_ptr = nullptr) + { + if (ctx) + { + ctx.ie_name(IE::name()); + + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + if(ctx) + Identifier::run(ie, ctx, tag); + } + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/common.hpp new file mode 100644 index 0000000..edd830b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/common.hpp @@ -0,0 +1,51 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "asn/buffer.hpp" +#include "asn/ber/context.hpp" +#include "asn/ber/tools.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace ber { + +template struct Element; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/context.hpp new file mode 100644 index 0000000..4159f00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/context.hpp @@ -0,0 +1,118 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace ber { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + +private: + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/length.hpp new file mode 100644 index 0000000..51b387c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/length.hpp @@ -0,0 +1,103 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +constexpr size_t indefinite_length = std::numeric_limits::max(); + +/*************************************************************************************** +* Length +***************************************************************************************/ +struct Length +{ + static size_t inline get(int64_t value) + { + size_t length = 1; + + if(value != 0) + { + size_t extra_sign_bits = __builtin_clrsbll(value); + length = sizeof(value) - (extra_sign_bits >> 3) ; + } + + return length; + } + + static void inline encode(size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + if(length <= 0x7F) + { + buffer.putByte(static_cast(length)); + } + else + { + size_t lenlen = get(length); + if(lenlen > 0x7F) + { + ctx.refErrorCtx().sizeRangeError(length, 0, 0x7F); + } + else + { + uint8_t bt = static_cast(lenlen); + bt |= 0x80; + buffer.putByte(bt); + Tools::put_bytes(length, lenlen, ctx); + } + } + + } + + static size_t inline decode(DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + size_t length = 0; + + uint8_t const* data = buffer.getBytes(1); + + if(data) + { + if(!(data[0] & 0x80)) + { + length = data[0]; + } + else + { + size_t lenlen = data[0] & 0x7F; + + if(lenlen) + Tools::get_bytes(length, lenlen, ctx); + else + length = indefinite_length; + } + } + + return length; + } +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/opentype.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/opentype.hpp new file mode 100644 index 0000000..0ff9366 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/opentype.hpp @@ -0,0 +1,73 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* OpenType +***************************************************************************************/ +struct OpenType +{ + static tag_value_t decode(DecoderCtx& ctx, size_t& length, tag_value_t const* tag_ptr = nullptr) + { + auto & buffer = ctx.refBuffer(); + tag_value_t tag = tag_ptr ? *tag_ptr : get_tag(ctx); + length = Length::decode(ctx); + + if(!length) + { + //just return + } + else if(length == indefinite_length) + { + tag_value_t _tag; + size_t _length; + do + { + _tag = OpenType::decode(ctx, _length); + + } while(ctx && !(_tag == 0 && _length == 0)); + } + else + { + if (buffer.getBytesLeft() < length) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), length); + } + else + { + size_t _length; + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + length); + decode(ctx, _length); + buffer.set_end(end); + } + } + return tag; + } +}; + +} //namespace ber +} //namespace asn \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tag.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tag.hpp new file mode 100644 index 0000000..dba9733 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tag.hpp @@ -0,0 +1,163 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define IE_CLASS_SHIFT 6 +#define IE_PC_SHIFT 5 +#define IE_BIG_TAG_FST_OCTET 0b011111 + +namespace asn { +namespace ber { + +constexpr tag_value_t invalid_tag = std::numeric_limits::max(); + +/*************************************************************************************** +* Tag +***************************************************************************************/ +template +struct Tag; + +template +struct Tag > +{ + static constexpr tag_value_t value() + { + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= static_cast(IE::asn_identifier_t::tag_value); + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + ctx.refBuffer().putByte(static_cast(value())); + } +}; + + +template +struct Tag= 31) > > +{ + static constexpr tag_value_t value() + { + static_assert(IE::asn_identifier_t::tag_value > 0, "null tag value"); + + tag_value_t v = static_cast(IE::asn_identifier_t::class_type); + v <<= IE_CLASS_SHIFT; + v = constructed ? (v | (1u << IE_PC_SHIFT)) : v; + v |= IE_BIG_TAG_FST_OCTET; + + size_t leadbits = __builtin_clzll(IE::asn_identifier_t::tag_value); + tag_value_t tv = IE::asn_identifier_t::tag_value << leadbits; + size_t length = sizeof(tag_value_t)*CHAR_BIT - leadbits; + + size_t shift = sizeof(tag_value_t)*CHAR_BIT - 7; + + size_t lb = length % 7; + if(lb) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> (shift + 7 - lb)); + tv <<= lb; + length -= lb; + } + + while(length) + { + v <<= 8; + v |= 0x80; + v |= static_cast(tv >> shift); + tv <<= 7; + length -= 7; + } + v &= ((tag_value_t)-1) & ~((tag_value_t) 0x80); + + return v; + } + + static void inline encode(EncoderCtx& ctx) + { + size_t size = 0; + tag_value_t tv = data(size); + ctx.refBuffer().putBytes(reinterpret_cast(&tv), size); + } + +private: + + static constexpr tag_value_t data(size_t& size) + { + tag_value_t rv = 0; + tag_value_t tv = value(); + size = sizeof(tag_value_t) - (__builtin_clzll(tv) >> 3); + + uint8_t* ptr = reinterpret_cast(&rv); + + size_t shift = (size - 1) * 8; + for(size_t i = 0; i < size; ++i) + { + ptr[i] = static_cast(tv >> shift); + shift -= 8; + } + + return rv; + } +}; + +inline +tag_value_t get_tag(DecoderCtx& ctx) +{ + tag_value_t rv = 0; + auto & buffer = ctx.refBuffer(); + uint8_t const* data = buffer.getBytes(1); + + if (data) + { + rv = data[0]; + if((data[0] & 0x1F) == IE_BIG_TAG_FST_OCTET) + { + size_t limit = sizeof(tag_value_t) - 1; + while((data = buffer.getBytes(1))) + { + if(!limit) + { + ctx.refErrorCtx().sizeRangeError(0); + break; + } + + rv <<= 8; + rv |= data[0]; + --limit; + + if(!(data[0] & 0x80)) + break; + } + } + } + return rv; +} + +} //namespace ber +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tools.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tools.hpp new file mode 100644 index 0000000..9f9bc9b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/tools.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; + + + template + static void put_bytes(T value, size_t length, EncoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + size_t shift = (length - 1) << 3; + for(size_t i = 0; i < length; ++i) + { + buffer.putByte(static_cast(value >> shift)); + shift -= 8; + } + } + + template + static void get_bytes(T& value, size_t length, DecoderCtx& ctx) + { + auto & buffer = ctx.refBuffer(); + + value = 0; + uint8_t const* data = buffer.getBytes(length); + + if(data) + { + value = data[0]; + for(size_t i = 1; i < length; ++i) + { + value <<= 8; + value |= data[i]; + } + } + } + +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/visitor.hpp new file mode 100644 index 0000000..98c1f05 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/ber/visitor.hpp @@ -0,0 +1,177 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { +namespace ber { + +/*************************************************************************************** +* VisitorEncoder +***************************************************************************************/ +struct VisitorEncoder +{ + VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx){} + + template bool operator() (ELM const& elm) + { + if(m_ctx) + Element::run(elm, m_ctx); + return static_cast(m_ctx); + } +private: + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* VisitorDecoder +***************************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx, tag_value_t tag) : m_ctx(ctx), m_tag(tag){} + + template bool operator() (ELM& elm) + { + if(m_ctx) + Element::run(elm, m_ctx, &m_tag); + return static_cast(m_ctx); + } + +private: + DecoderCtx& m_ctx; + tag_value_t m_tag; +}; + +/*************************************************************************************** +* VisitorAdapter +***************************************************************************************/ +template +struct VisitorAdapter //default +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + Element::run(ie, ctx, &tag); + } +}; + +template +struct VisitorAdapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont, tag_value_t tag) + { + VisitorDecoder v(ctx, tag); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; + +/*************************************************************************************** +* VisitorEncoderSeq +***************************************************************************************/ +template +struct VisitorEncoderSeq +{ + VisitorEncoderSeq(EncoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM const& elm) + { + if(ELM::optional) + { + if(elm.is_valid()) + VisitorAdapter::run(elm, m_ctx, m_cont); + } + else + VisitorAdapter::run(elm, m_ctx, m_cont); + } + + EncoderCtx& m_ctx; + CONT const& m_cont; +}; + + +/*************************************************************************************** +* VisitorDecoderSeq +***************************************************************************************/ +template +struct VisitorDecoderSeq +{ + VisitorDecoderSeq(DecoderCtx& ctx, CONT const& cont) : m_ctx(ctx), m_cont(cont){} + + template void operator() (ELM& elm) + { + if(m_ctx) + { + tag_value_t tag; + + if(invalid_tag == m_tag && m_ctx.refBuffer().getBytesLeft()) + { + m_tag = get_tag(m_ctx); + } + tag = m_tag; + + if(m_ctx) + { + if (!Element::is_matched(tag)) + { + if(!ELM::optional) + { + m_ctx.refErrorCtx().tagError(static_cast(tag)); + } + } + else + { + m_tag = invalid_tag; + VisitorAdapter::run(elm, m_ctx, m_cont, tag); + elm.setpresent(true); + } + } + } + } + + tag_value_t get_unhandled_tag() const {return m_tag;} + + DecoderCtx& m_ctx; + tag_value_t m_tag {invalid_tag}; + CONT const& m_cont; +}; + +} //namespace ber +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/buffer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/buffer.hpp new file mode 100644 index 0000000..4022b48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/buffer.hpp @@ -0,0 +1,689 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/error_context.hpp" +#include "value_traits.hpp" + +//#define CODEC_BIT_TRACE_ENABLE +#ifdef CODEC_BIT_TRACE_ENABLE + #define CODEC_BIT_TRACE(FMT, args...) printf("%s[%u]:" FMT "\n", std::strrchr(__FILE__, '/') + 1, __LINE__, ##args) +#else + #define CODEC_BIT_TRACE(...) +#endif + +namespace asn { + +template +struct bit_accessor; + +template +struct bit_accessor_cross_byte; + +template +class buffer +{ +public: + typedef PTR pointer; + + explicit buffer(error_context& err) + : m_errCtx(err) + {} + + void reset(pointer data, u32 size) + { + m_start = data; + m_end = m_start + size; + m_current = m_start; + m_shift = 0; + } + + u32 getOffset() const { return begin() - m_start; } + + u32 getBytesLeft() const { return end() - begin(); } + u32 getBytesUsed() const { return getOffset() + (get_shift() ? 1 : 0); } + + u8 get_shift() const { return m_shift; } + void reset_shift() { m_shift = 0; } + void byte_align() { if (get_shift()) { m_shift = 0; ++m_current; } } + + pointer advance(u32 delta) { pointer p = begin(); m_current += delta; return p; } + + pointer begin() const { return m_current; } + + void set_begin(pointer ptr, u8 bit_shift) + { + if (m_start <= ptr && ptr <= end()) + { + m_current = ptr; + m_shift = bit_shift; + } + } + + pointer end() const { return m_end; } + void set_end(pointer v) { m_end = v; } + + bool checkAlignment(char const* name, u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + return false; + } + + bool checkBytesLeft(char const* name, u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(char const* name, u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(name, getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(char const* name, u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(name, get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(char const* name, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(char const* name, u32 max_requested, u32& num_bytes) + { + if (checkAlignment(name)) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(name, getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(char const* name, u8 byte) + { + if (checkBytesAndAlignment(name, 1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(char const* name, void const* in, u32 num_bytes) + { + if (checkBytesAndAlignment(name, num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + return true; + } + return false; + } + + bool checkAlignment(u8 const mask = 0xFF) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + return false; + } + + bool checkBytesLeft(u32 const num_bytes) + { + if (getBytesLeft() >= num_bytes) return true; + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + return false; + } + + bool checkBitsLeft(u32 const num_bits) + { + if (getBitsLeft() >= num_bits) return true; + m_errCtx.lengthErrorBits(getBitsLeft(), num_bits); + return false; + } + + bool checkBytesAndAlignment(u32 const num_bytes, u8 const mask = 0xFF) + { + if (getBytesLeft() >= num_bytes) + { + if (0 == (get_shift() & mask)) return true; + m_errCtx.alignmentError(get_shift()); + } + else + { + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return false; + } + + pointer getBytes(u32 num_bytes) + { + if (checkBytesAndAlignment(num_bytes)) + { + return advance(num_bytes); + } + return nullptr; + } + + //NOTE! num_bytes should be set to minimal number of bytes expected + pointer getBytes(u32 max_requested, u32& num_bytes) + { + if (checkAlignment()) + { + u32 const left = getBytesLeft(); + if (left >= num_bytes) + { + num_bytes = (left > max_requested) ? max_requested : left; + return advance(num_bytes); + } + + m_errCtx.lengthErrorBytes(getBytesLeft(), num_bytes); + } + return nullptr; + } + + bool putByte(u8 byte) + { + if (checkBytesAndAlignment(1)) + { + begin()[0] = byte; + ++m_current; + return true; + } + return false; + } + + bool putBytes(void const* in, u32 num_bytes) + { + if (num_bytes) + { + if(checkBytesAndAlignment(num_bytes)) + { + std::memcpy(begin(), in, num_bytes); + m_current += num_bytes; + } + else + return false; + } + return true; + } + + char const* toString() const + { + static char sz[64]; + u8 const* p = begin(); + snprintf(sz, sizeof(sz), "%02X %02X %02X %02X [%02X]=%p@%u..%p -%u bits: +%u bytes", p[-4], p[-3], p[-2], p[-1], p[0], p + , getOffset(), end(), get_shift(), getBytesLeft()); + return sz; + } + +private: + template + friend class bit_accessor; + + template + friend struct bit_accessor_cross_byte; + + template + void push_u8(U value) { *m_current++ = static_cast(value); } + template + void put_u8(U value) { m_current[0] = static_cast(value); } + +//khxm68: TODO: won't compile without it. WTF?! +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + u8 get_u8() const { return m_current[0]; } +#pragma GCC diagnostic pop + u8 extract_u8(u8 value, u8 mask, u8 shift) const + { return (get_u8() & ~(mask << shift)) | ((value & mask) << shift); } + + u16 get_u16() const { return (static_cast(m_current[0]) << 8) | m_current[1]; } + u16 extract_u16(u16 value, u16 mask, u16 shift) const + { return (get_u16() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u24() const { return (static_cast(m_current[0]) << 16) | (static_cast(m_current[1]) << 8) | m_current[2]; } + u32 extract_u24(u32 value, u32 mask, u32 shift) const + { return (get_u24() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 get_u32() const { return (static_cast(m_current[0]) << 24) | (static_cast(m_current[1]) << 16) | (static_cast(m_current[2]) << 8) | m_current[3]; } + u32 extract_u32(u32 value, u32 mask, u32 shift) const + { return (get_u32() & ~(mask << shift)) | ((value & mask) << shift); } + + u32 getBitsLeft() const { return begin() == end() ? 0 : (getBytesLeft()*8 - get_shift()); } + + void bit_advance(u8 num_bits) + { + m_shift += num_bits; + if (get_shift() > 7) + { + reset_shift(); + m_current++; + } + } + + pointer m_current; + pointer m_end; + pointer m_start; + u8 m_shift; + error_context& m_errCtx; +}; + +template //LSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = buf.get_shift(); + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //LSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = buf.extract_u16(value, mask, shift); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = buf.get_shift(); + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + +template //LSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //LSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = buf.get_shift(); + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + + +template //MSB 1..7 bits +struct bit_accessor +{ + static_assert(IE::length::value > 0 && IE::length::value < 8, "something wrong with traits!"); + + static void put(u8 value, buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%02X(%02X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + } + + static u8 get(buffer& buf) + { + u8 const mask = static_cast((1u << IE::length::value) - 1); + u8 const shift = 8 - buf.get_shift() - IE::length::value; + u8 const data = (buf.get_u8() >> shift) & mask; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%02X mask=%02X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value); + return data; + } +}; + +template //MSB 9..15 bits +struct bit_accessor +{ + static_assert(IE::length::value > 8 && IE::length::value < 16, "something wrong with traits!"); + + static void put(u16 value, buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = buf.extract_u16(value, mask, shift); + + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%04X(%04X) mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + } + + static u16 get(buffer& buf) + { + u16 const mask = static_cast((1u << IE::length::value) - 1); + u16 const shift = 16 - buf.get_shift() - IE::length::value; + u16 const data = (buf.get_u16() >> shift) & mask; + buf.m_current += 1; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%04X mask=%04X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 8); + return data; + } +}; + + +template //MSB 17..24 bits +struct bit_accessor +{ + static_assert(IE::length::value > 16 && IE::length::value <= 24, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u24(value, mask, shift); + + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%06X(%06X) mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 24 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u24() >> shift) & mask; + buf.m_current += 2; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%06X mask=%06X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 16); + return data; + } +}; + +template //MSB 25..31 bits +struct bit_accessor +{ + static_assert(IE::length::value > 24 && IE::length::value < 32, "something wrong with traits!"); + + static void put(u32 value, buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = buf.extract_u32(value, mask, shift); + + buf.push_u8(data >> 24); + buf.push_u8(data >> 16); + buf.push_u8(data >> 8); + buf.put_u8(data); + + CODEC_BIT_TRACE("put shift=%u(%u) data[%u]=%08X(%08X) mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, value, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + } + + static u32 get(buffer& buf) + { + u32 const mask = static_cast((1u << IE::length::value) - 1); + u32 const shift = 32 - buf.get_shift() - IE::length::value; + u32 const data = (buf.get_u32() >> shift) & mask; + buf.m_current += 3; + + CODEC_BIT_TRACE("get shift=%u(%u) data[%u]=%08X mask=%08X: %s", shift, buf.get_shift() + , IE::length::value, data, mask, buf.toString()); + + buf.bit_advance(IE::length::value - 24); + return data; + } +}; + +/******************************************************************************** +bit_accessor_cross_byte +*********************************************************************************/ +template<> +struct bit_accessor_cross_byte //MSB +{ + static bool put(u8 value, u8 length, buffer& buf) + { + u8 spare = 8 - buf.get_shift(); + + if (spare < length) + { + length -= spare; + u8 chunk = value >> length; + u8 const mask = static_cast((1u << spare) - 1); + u8 data = buf.extract_u8(chunk, mask, 0); + buf.put_u8(data); + + buf.bit_advance(spare); + } + if (buf.checkBytesLeft(1)) + { + u8 const mask = static_cast((1u << length) - 1); + u8 const shift = 8 - buf.get_shift() - length; + u8 data = buf.extract_u8(value, mask, shift); + buf.put_u8(data); + + buf.bit_advance(length); + + return true; + } + return false; + } + + static u8 get(u8 length, buffer& buf) + { + u8 rval {0}; + u8 const mask = static_cast((1u << length) - 1); + u8 const spare = 8 - buf.get_shift(); + if (spare < length) + { + length -= spare; + rval = buf.get_u8() << length; + buf.bit_advance(spare); + } + if (length && buf.checkBytesLeft(1)) + { + u8 val = buf.get_u8(); + val = val >> (8 - length - buf.get_shift()); + rval |= val; + rval &= mask; + buf.bit_advance(length); + } + return rval; + } + + static void padByte(buffer& buf) + { + if (buf.get_shift()) + { + u8 mask = static_cast((1u << buf.get_shift()) - 1); + mask = mask << (8 - buf.get_shift()); + buf.begin()[0] &= mask; + buf.bit_advance(8 - buf.get_shift()); + } + } + + static void padByte(buffer& buf) + { + if(buf.get_shift()) + buf.bit_advance(8 - buf.get_shift()); + } + + static bool put(const u8* in, size_t len, buffer& buf, u8 trail_bitsqty) + { + if (len) + { + if (trail_bitsqty) + { + buf.putBytes(in, len - 1); + u8 last_byte = in[len - 1]; + last_byte = last_byte >> (8 - trail_bitsqty); + return put(last_byte, trail_bitsqty, buf); + } + buf.putBytes(in, len); + } + return true; + } +}; + +} //end: namespace asn + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/chunked_allocator.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/chunked_allocator.hpp new file mode 100644 index 0000000..008be98 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/chunked_allocator.hpp @@ -0,0 +1,84 @@ +#pragma once + +/******************************************************************************* +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include //std::bad_alloc +#include +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +template +class chunked_allocator +{ +public: + using allocator_t = ALLOC; + + chunked_allocator() + { + put_chunk(new_chunk()); + } + + template + decltype(auto) emplace_back(TSEQ& v) + { + try + { + return v.emplace_back(m_allocator); + } + catch (std::bad_alloc const&) + { + put_chunk(new_chunk()); + return v.emplace_back(m_allocator); + } + } + + uint8_t* alloc_bytes(std::size_t sz) + { + //TODO: unify allocation: now it returns nullptr instead of throw! + auto* ret = m_allocator.alloc_bytes(sz); + if (!ret) + { + put_chunk(new_chunk()); + ret = m_allocator.alloc_bytes(sz); + } + return ret; + } + +private: + static constexpr std::size_t CHUNK_SIZE = 32*1024; + using chunk_t = std::array; + using chunks_t = std::list; + + chunk_t& new_chunk() { return m_chunks.emplace_back(); } + void put_chunk(chunk_t& c) { m_allocator.reset(c.data(), c.size()); } + + + allocator_t m_allocator; + chunks_t m_chunks; +}; + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/constraints.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/constraints.hpp new file mode 100644 index 0000000..e8e787d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/constraints.hpp @@ -0,0 +1,140 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +using bound_t = int64_t; + +enum class constraint_type : uint8_t +{ + UNCONSTRAINED, + CONSTRAINED, + SEMICONSTRAINED, + CONSTRAINED_EXTENDED, + SEMICONSTRAINED_EXTENDED +}; + +template +struct span +{ + static_assert(UB >= LB, "UPPER >= LOWER"); + static constexpr bound_t lower_bound = LB; + static constexpr bound_t upper_bound = UB; +}; + +template +struct pair +{ + T const lower_bound; + T const upper_bound; +}; + +template +struct one : span {}; + +struct max : one::max()> {}; +struct min : one::min()> {}; + +static constexpr bound_t MAX = std::numeric_limits::max(); +static constexpr bound_t MIN = std::numeric_limits::min(); + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = std::min({RANGE::lower_bound...}); + static constexpr bound_t upper_bound = std::max({RANGE::upper_bound...}); + + static constexpr constraint_type type = + (Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::CONSTRAINED : + (Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED : + (Extended && lower_bound == min::lower_bound && upper_bound < max::upper_bound) ? constraint_type::SEMICONSTRAINED_EXTENDED : + (!Extended && lower_bound > min::lower_bound && upper_bound == max::upper_bound) ? constraint_type::SEMICONSTRAINED : constraint_type::UNCONSTRAINED; + + static constexpr bool is_signed = lower_bound < 0; + + static constexpr bound_t num_spans = static_cast(sizeof...(RANGE)); + static constexpr pair bounds[] = {{RANGE::lower_bound, RANGE::upper_bound}...}; + + using boundary_type = bound_t; + + static constexpr bool is_extended(bound_t val) + { + for (bound_t i = 0; i < num_spans; ++i) + { + auto const& p = bounds[i]; + if (val <= p.upper_bound) + { + if(val < p.lower_bound) + return true; + return false; + } + } + return true; + } +}; + +template +constexpr pair constraints::bounds[]; + +template +struct constraints +{ + static constexpr bool extended = Extended; + static constexpr constraint_type type = constraint_type::UNCONSTRAINED; + static constexpr bound_t lower_bound = std::numeric_limits::min(); + static constexpr bound_t upper_bound = std::numeric_limits::max(); + + static constexpr bool is_extended(bound_t val) {return true;} +}; + +/*************************************************************************************** +* RANGE for sequences +***************************************************************************************/ +template +struct seq_range +{ + static_assert(Extended || TotalNumEntries > 0, "TotalNumEntries must be > 0"); + static_assert(NumExtEntries <= TotalNumEntries, "NumExtEntries must be <= TotalNumEntries"); + + static constexpr constraint_type type = Extended ? constraint_type::CONSTRAINED_EXTENDED : constraint_type::CONSTRAINED; + static constexpr bool extended = Extended; + static constexpr bound_t lower_bound = 0; + static constexpr bound_t upper_bound = TotalNumEntries - NumExtEntries - 1; + static constexpr bound_t default_value = lower_bound; + static constexpr bound_t total_num_entries = TotalNumEntries; + + using boundary_type = bound_t; + using value_type = uint32_t; +}; + +} // namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/elements.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/elements.hpp new file mode 100644 index 0000000..9cbcd42 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/elements.hpp @@ -0,0 +1,565 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/constraints.hpp" +#include "asn/identifier.hpp" + +namespace asn { + +enum class element_type : uint8_t +{ + T_BOOLEAN + ,T_INTEGER + ,T_ENUMERATED + ,T_REAL + ,T_BITSTRING + ,T_OCTETSTRING + ,T_NULL + ,T_SEQUENCE + ,T_SEQUENCE_OF + ,T_SET + ,T_SET_OF + ,T_CHOICE + ,T_OBJECTIDENTIFIER + ,T_OBJFIELD_FTV + ,T_OBJFIELD_TF +}; + +/*************************************************************************************** +* BASE +***************************************************************************************/ + +struct base +{ + static constexpr bool optional = false; + static constexpr bool extension = false; + + static constexpr char const* name() {return "";} + + void setpresent(bool p) {is_set = p;} + void clear() {is_set = false;} + + bool is_valid() const {return is_set;} + +protected: + base() {} + void set() {is_set = true;} +protected: + bool is_set {false}; + + base& operator=(const base&) = delete; + base (const base&) = delete; +}; + +/*************************************************************************************** +* IE_NULL +***************************************************************************************/ + +struct nulltype : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::NULL_TYPE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_NULL; + static constexpr const char* name() {return "NULL";} + + void clear() {} +}; + +/*************************************************************************************** +* T_BOOLEAN +***************************************************************************************/ + +struct boolean : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BOOLEAN), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BOOLEAN; + static constexpr const char* name() {return "BOOLEAN";} + + using value_type = bool; + + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = false; base::clear();} + +private: + value_type m_value {false}; +}; + +/*************************************************************************************** +* T_INTEGER +***************************************************************************************/ +template < class Constraint = constraints > +struct integer : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::INTEGER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_INTEGER; + static constexpr const char* name() {return "INTEGER";} + + using constraint_t = Constraint; + using value_type = int64_t; + + bool equal(value_type v) const {return m_value == v;} + + void set(value_type v) { m_value = v; base::set();} + value_type get() const { return m_value; } + + void clear() { m_value = 0; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_ENUMERATED +***************************************************************************************/ +template +struct enumerated : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::ENUMERATED), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_ENUMERATED; + static constexpr const char* name() {return "ENUMERATED";} + + using constraint_t = seq_range; + using value_type = typename constraint_t::value_type; + + bool equal(value_type v) const {return m_value == v;} + void set(value_type vl) { m_value = vl; base::set();} + value_type get() const { return m_value; } + void clear() { m_value = constraint_t::default_value; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_OCTETSTRING +***************************************************************************************/ +template< class Constraint = constraints > +struct ostring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::OCTET_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OCTETSTRING; + static constexpr const char* name() {return "OCTET STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data) : m_size(size), m_data(reinterpret_cast(data)) {} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + + using const_iterator = uint8_t const*; + const_iterator begin() const { return data(); } + const_iterator end() const { return begin() + size(); } + + void assign(void const* p, size_t sz) { m_data = static_cast(p); m_size = sz; } + + private: + const uint8_t* m_data{ 0 }; + size_t m_size{ 0 }; + }; + + value_type const& get() const { return m_value; } + + //Use std::string, std::vector or IE_OSTR::value_type + template value_type const& set(T const& tval) + { + set(tval.size(), tval.data()); + base::set(); + return m_value; + } + + void set(size_t size, void const* data) + { + m_value.assign(data, size); + base::set(); + } + + template + ostring& emplace(AT& allocator, size_t size, uint8_t const * data_in) + { + if(size) + { + base::clear(); + uint8_t* data_out = allocator.alloc_bytes(size); + if (data_out) + { + memcpy(data_out, data_in, size); + set(size, data_out); + } + } + else + base::set(); + return *this; + } + + template + ostring& emplace(AT& allocator, T const& tval) + { + return emplace(allocator, tval.size(), reinterpret_cast(tval.data())); + } + + void clear() { m_value = value_type{}; base::clear();} + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_BITSTRING +***************************************************************************************/ +template > +struct bstring : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::BIT_STRING), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_BITSTRING; + static constexpr const char* name() {return "BIT STING";} + using constraint_t = Constraint; + + struct value_type + { + value_type() {} + value_type(size_t size, const char* data, size_t bitqty) : m_size(size), m_data(reinterpret_cast(data)), m_bitqty(bitqty){} + + size_t size() const { return m_size; } + const uint8_t* data() const { return m_data; } + size_t bitqty() const { return m_bitqty; } + + void assign(void const* p, size_t sz, size_t bits) { m_data = static_cast(p); m_size = sz; m_bitqty = bits; } + + private: + const uint8_t* m_data{ nullptr }; + size_t m_size{ 0 }; + size_t m_bitqty{ 0 }; + }; + + value_type const& get_buffer() const { return m_value; } + + size_t get_bitqty() const { return m_value.bitqty(); } + + //Use std::string, std::vector or IE_BSTR::value_type + template value_type const& set_buffer(T& tval, size_t bitqty) + { + m_value.assign(tval.data(), tval.size(), bitqty); + base::set(); + return m_value; + } + + void set_buffer(size_t bitqty, const uint8_t* data) + { + m_value.assign(data, (bitqty +7) >> 3, bitqty); + base::set(); + } + + template + bstring& emplace_buffer(AT& allocator, size_t bitqty, uint8_t const * data_in) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + memcpy(data_out, data_in, size); + set_buffer(bitqty, data_out); + return *this; + } + + void clear() { m_value = value_type{}; base::clear();} + + uint64_t get_number() const + { + uint64_t retval{0}; + size_t i = 0; + for(; i < m_value.size() - 1; ++i) + { + retval <<= 8; + retval |= m_value.data()[i]; + } + + uint8_t shift = m_value.bitqty() % 8; + if (shift) + { + retval <<= shift; + } + else + { + retval <<= 8; + } + + retval |= m_value.data()[i]; + + return retval; + } + + template + void set_number(AT& allocator, size_t bitqty, uint64_t data) + { + size_t size = (bitqty +7) >> 3; + uint8_t* data_out = allocator.alloc_bytes(size); + if (!data_out) { + throw std::bad_alloc(); + } + + const uint8_t shift = bitqty % 8; + if (shift) + { + data_out[size-1] = data & (0xFF >> (8 - shift)); + data >>= shift; + } + else + { + data_out[size-1] = data & (0xFF); + data >>= 8; + } + + for (size_t i = 1; i <= size - 1; i++) + { + data_out[size-1-i] = data & (0xFF); + data >>= 8; + } + + m_value.assign(data_out, size, bitqty); + base::set(); + } + +private: + value_type m_value; +}; + +/*************************************************************************************** +* T_CHOICE +***************************************************************************************/ +template +struct choice : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::CHOICE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_CHOICE; + static constexpr const char* name() {return "CHOICE";} + + using constraint_t = seq_range; + using index_type = size_t; + using value_type = size_t; + + static constexpr index_type fst_index = 1; + static constexpr index_type ext_index = fst_index + TotalNumEntries; + + static index_type normalize(index_type idx) {return idx - fst_index;} + static index_type denormalize(index_type idx) {return idx + fst_index;} +}; + +/*************************************************************************************** +* T_SEQUENCE +***************************************************************************************/ +template +struct sequence : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE; + static constexpr const char* name() {return "SEQUENCE";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; + +}; + +/*************************************************************************************** +* T_SEQUENCE_OF +***************************************************************************************/ +template > +struct sequenceof : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SEQUENCE_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SEQUENCE_OF; + static constexpr const char* name() {return "SEQUENCE OF";} + + struct value_type : T, boost::intrusive::list_base_hook< boost::intrusive::link_mode > + { + value_type(){} + private: + value_type& operator=(const value_type&) = delete; + value_type (const value_type&) = delete; + }; + + using values_t = boost::intrusive::list>; + using constraint_t = Constraint; + using element_t = T; + + void clear() { m_list.clear(); base::clear();} + size_t size() const { return m_list.size(); } + template + void sort(Predicate const& p) { m_list.sort(p); } + + template + void set(V& v) {for(auto & e : v) {m_list.push_back(e);} base::set();} + + void push_back(value_type& v) { m_list.push_back(v); base::set();} + + template //Note: Allocator must return word alligned buffer! + T& emplace_back(AT& allocator) + { + uint8_t* data = allocator.alloc_bytes(sizeof(value_type)); + if(!data) + throw std::bad_alloc(); + value_type* v = new (data) value_type; + push_back(*v); + return *v; + }; + + using iterator = typename values_t::iterator; + iterator begin() { return m_list.begin(); } + iterator end() { return m_list.end(); } + + using const_iterator = typename values_t::const_iterator; + const_iterator begin() const { return m_list.begin(); } + const_iterator end() const { return m_list.end(); } + + sequenceof(){} + +private: + values_t m_list; +}; + +/*************************************************************************************** +* T_OBJFIELD_FTV +***************************************************************************************/ +template +struct fixedtypefield : T +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_FTV; + + T& ref_nested() {return *this;} + T const & ref_nested() const {return *this;} +}; + +/*************************************************************************************** +* T_OBJFIELD_TF +***************************************************************************************/ +template +struct typefield : base +{ + static constexpr element_type ie_type = element_type::T_OBJFIELD_TF; + static constexpr const char* name() {return "type-field";} + + typefield& ref_nested() {return *this;} + typefield const& ref_nested() const {return *this;} + + bool is_unknown() const {return false;} +}; + +/*************************************************************************************** +* T_OBJECTIDENTIFIER +***************************************************************************************/ +struct oid : ostring<> +{ + using asn_identifier_t = identifier(tag_rvalue_t::OBJECT_IDENTIFIER), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_OBJECTIDENTIFIER; + static constexpr const char* name() {return "OBJECT IDENTIFIER";} +}; + +/*************************************************************************************** +* T_PRINTABLESTRING +***************************************************************************************/ +template > +struct printable_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::PrintableString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "PrintableString";} +}; + +/*************************************************************************************** +* T_IA5_STRING +***************************************************************************************/ +template > +struct ia5_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::IA5String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_GRAPHIC_STRING +***************************************************************************************/ +template > +struct graphic_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::GraphicString), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "IA5String";} +}; + +/*************************************************************************************** +* T_UTF8_STRING +***************************************************************************************/ +template > +struct utf8_string : ostring +{ + using asn_identifier_t = identifier(tag_rvalue_t::UTF8String), tag_type_t::IMPLICIT>; + static constexpr const char* name() {return "UTF8String";} +}; + +/*************************************************************************************** +* T_SET +***************************************************************************************/ +template +struct set : base +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET; + static constexpr const char* name() {return "SET";} + + static constexpr bound_t num_total_entries = TotalNumEntries; + static constexpr bound_t num_opt_entries = NumOptEntries; + static constexpr bound_t num_ext_entries = NumExtEntries; + + using constraint_t = seq_range; +}; + +/*************************************************************************************** +* T_SET_OF +***************************************************************************************/ +template > +struct setof : sequenceof +{ + using asn_identifier_t = identifier(tag_rvalue_t::SET_OF), tag_type_t::IMPLICIT>; + + static constexpr element_type ie_type = element_type::T_SET_OF; + static constexpr const char* name() {return "SET OF";} +}; +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/error_context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/error_context.hpp new file mode 100644 index 0000000..8a7285a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/error_context.hpp @@ -0,0 +1,267 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + + +// Local Includes: Application specific classes, functions, and libraries +#include "type_defs.h" + +namespace asn { + +class error_context +{ +public: + enum error_e : u8 + { + SUCCESS = 0 + ,INCORRECT_LENGTH_BITS + ,INCORRECT_LENGTH_BYTES + ,ALIGNMENT + ,INCORRECT_VALUE + ,INCORRECT_CHOICE_TAG + ,INCORRECT_IE_TAG + ,VALUE_OUT_OF_RANGE + ,SIZE_OUT_OF_RANGE + ,ALLOC_NO_MEMORY + ,NO_OBJECT + ,NO_MANDATORY + ,WRONG_END_OF_CONTENT + ,UNSUPPORTED + ,UNSPECIFIED + }; + + explicit operator bool() const { return SUCCESS == m_error; } + + void reset() { m_error = SUCCESS; } + error_e getError() const { return m_error; } + + char const* toString() const; + + void alignmentError(u32 shift); + void lengthErrorBytes(u32 bytes_left, u32 requested); + void lengthErrorBits(u32 bits_left, u32 requested); + void valueError(u32 got, u32 expected, u32 ofs); + void tagError(u32 tag); + void valueRangeError(size_t value); + void sizeRangeError(size_t size, size_t low = 0, size_t high = 0); + void allocatorNoMem(size_t bytes_left, size_t bytes_required); + void errorUnsupported() {setError(UNSUPPORTED);} + void errorUnspecified() {setError(UNSPECIFIED);} + void errorNoObject(const char* container_name_); + void errorNoMandatory(); + void errorWrongEndOfContent() {setError(WRONG_END_OF_CONTENT);} + + //to inline in choice decoder: TODO: think of changing it! + void choiceError(char const* name, u32 id) + { + m_name = name; + m_param[0] = id; + setError(INCORRECT_CHOICE_TAG); + } + //Name of the being processed IE + void ie_name(const char* name) { m_ie_name = name; } + char const* ie_name() const { return m_ie_name; } + + void container_name(const char* name) { m_container_name = name; } + char const* container_name() const { return m_container_name; } + + +private: + void setError(error_e n) { m_error = n; } + + enum { MAX_PARAMS = 3 }; + error_e m_error; + char const* m_name; + char const* m_ie_name {""}; + char const* m_container_name {""}; + size_t m_param[MAX_PARAMS]; + +}; + +inline +void error_context::errorNoObject(const char* c_name) +{ + container_name(c_name); + m_name = m_ie_name; + setError(NO_OBJECT); +} + +inline +void error_context::errorNoMandatory() +{ + m_name = m_ie_name; + setError(NO_MANDATORY); +} + +inline +void error_context::alignmentError(u32 shift) +{ + m_name = m_ie_name; + m_param[0] = shift; + setError(ALIGNMENT); +} + +inline +void error_context::lengthErrorBytes(u32 bytes_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BYTES); +} + +inline +void error_context::lengthErrorBits(u32 bits_left, u32 requested) +{ + m_name = m_ie_name; + m_param[0] = bits_left; + m_param[1] = requested; + setError(INCORRECT_LENGTH_BITS); +} + +inline +void error_context::valueError(u32 got, u32 expected, u32 ofs) +{ + m_name = m_ie_name; + m_param[0] = got; + m_param[1] = expected; + m_param[2] = ofs; + setError(INCORRECT_VALUE); +} + +inline +void error_context::tagError(u32 tag) +{ + m_name = m_ie_name; + m_param[0] = tag; + setError(INCORRECT_IE_TAG); +} + +inline +void error_context::valueRangeError(size_t value) +{ + m_name = m_ie_name; + m_param[0] = value; + setError(VALUE_OUT_OF_RANGE); +} + +inline +void error_context::sizeRangeError(size_t size, size_t low, size_t high) +{ + m_name = m_ie_name; + m_param[0] = size; + m_param[1] = low; + m_param[2] = high; + setError(SIZE_OUT_OF_RANGE); +} + +inline +void error_context::allocatorNoMem(size_t bytes_left, size_t bytes_required) +{ + m_name = m_ie_name; + m_param[0] = bytes_left; + m_param[1] = bytes_required; + setError(ALLOC_NO_MEMORY); +} + +inline +char const* error_context::toString() const +{ + static char sz[256]; + + switch (m_error) + { + case SUCCESS: + return "OK"; + + case INCORRECT_LENGTH_BITS: + snprintf(sz, sizeof(sz)-1, "%zu bits left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + + case INCORRECT_LENGTH_BYTES: + snprintf(sz, sizeof(sz)-1, "%zu bytes left, '%s::%s' needs %zu", m_param[0], m_container_name, m_name, m_param[1]); + break; + case ALIGNMENT: + snprintf(sz, sizeof(sz)-1, "misaligned '%s::%s': shift %zu bits", m_container_name, m_name, m_param[0]); + break; + + case INCORRECT_VALUE: + snprintf(sz, sizeof(sz)-1, "Wrong value of '%s::%s' at %zu: 0x%zX expected=0x%zX", m_container_name, m_name, m_param[2], m_param[0], m_param[1]); + break; + + case INCORRECT_CHOICE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong choice tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case INCORRECT_IE_TAG: + snprintf(sz, sizeof(sz)-1, "Wrong tag of '%s::%s': %zu (0x%zX)", m_container_name, m_name, m_param[0], m_param[0]); + break; + + case VALUE_OUT_OF_RANGE: + snprintf(sz, sizeof(sz) - 1, "Value is out of the range '%s::%s': value: %zu", m_container_name, m_name, m_param[0]); + break; + + case SIZE_OUT_OF_RANGE: + if (m_param[2]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range [%zu, %zu] in '%s::%s'", m_param[0], m_param[1], m_param[2], m_container_name, m_name); + } + else + { + if (m_param[1]) + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is less than %zu in '%s::%s'", m_param[0], m_param[1], m_container_name, m_name); + } + else + { + snprintf(sz, sizeof(sz) - 1, "Size=%zu bytes is out of the range in '%s::%s'", m_param[0], m_container_name, m_name); + } + } + break; + + case ALLOC_NO_MEMORY: + snprintf(sz, sizeof(sz) - 1, "Allocator memory has ended '%s::%s': left bytes: %zu; required bytes: %zu", m_container_name, m_name, m_param[0], m_param[1]); + break; + case NO_OBJECT: + snprintf(sz, sizeof(sz) - 1, "Component relation constraint violated '%s::%s'", m_container_name, m_name); + break; + case NO_MANDATORY: + snprintf(sz, sizeof(sz) - 1, "no mandatory '%s::%s' is found", m_container_name, m_name); + break; + case UNSUPPORTED: + snprintf(sz, sizeof(sz) - 1, "unsupported object '%s::%s' is found", m_container_name, m_name); + return "unsupported"; + break; + case UNSPECIFIED: + snprintf(sz, sizeof(sz) - 1, "unspecified object '%s::%s' is found", m_container_name, m_name); + return "unspecified"; + break; + case WRONG_END_OF_CONTENT: + snprintf(sz, sizeof(sz) - 1, "wrong end of content in object '%s::%s'", m_container_name, m_name); + return "wrong end of content"; + break; + } + + return sz; +} + +} //end: namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/identifier.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/identifier.hpp new file mode 100644 index 0000000..9b603fb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/identifier.hpp @@ -0,0 +1,97 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn { + +enum class class_type_t : uint8_t +{ + UNIVERSAL + ,APPLICATION + ,CONTEXT + ,PRIVATE + ,UNSPECIFIED //reserved for internal use +}; + +enum class tag_type_t : uint8_t +{ + EXPLICIT + ,IMPLICIT + ,AUTOMATIC +}; + +using tag_value_t = uint64_t; + +template +struct identifier +{ + static constexpr class_type_t class_type = CT; + static constexpr tag_value_t tag_value = TAG; + static constexpr tag_type_t tag_type = TT; +}; + + +enum class tag_rvalue_t : tag_value_t +{ + BOOLEAN = 1 + ,INTEGER = 2 + ,BIT_STRING = 3 + ,OCTET_STRING = 4 + ,NULL_TYPE = 5 + ,OBJECT_IDENTIFIER = 6 + ,REAL = 9 + ,ENUMERATED = 10 + ,SEQUENCE = 16 + ,SEQUENCE_OF = 16 + ,UTF8String = 12 + ,NumericString = 18 + ,IA5String = 22 + ,VisibleString = 26 + ,DATE = 31 + ,TIME_OF_DAY = 32 + ,DATE_TIME = 33 + ,DURATION = 34 + ,ObjectDescriptor = 7 + ,EXTERNAL = 8 + ,EMBEDDED_PDV = 11 + ,OID_IRI = 35 + ,RELATIVE_OID_IRI = 36 + ,SET = 17 + ,SET_OF = 17 + ,UTCTime = 23 + ,GeneralizedTime = 24 + ,PrintableString = 19 + ,T61String = 20 + ,VideotexString = 21 + ,GraphicString = 25 + ,GeneralString = 27 + ,UniversalString = 28 + ,CHARACTER_STRING = 29 + ,BMPString = 30 + ,ISO646String = 26 + ,TeletexString = 20 + ,CHOICE = 99 // fake id for internal use +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/binary_integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/binary_integer.hpp new file mode 100644 index 0000000..6ba2f15 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/binary_integer.hpp @@ -0,0 +1,168 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/length.hpp" + +namespace asn { +namespace per { + +template +struct BinaryIntegerLength; + +/*************************************************************************************** +* Encoding of a non-negative-binary-integer (X.691 10.3) +***************************************************************************************/ +template +struct NonnegativeBinaryInteger +{ + static void inline run(u64 val, EncoderCtx& ctx) + { + if(val) + { + size_t const len = sizeof(val) - (__builtin_clzll(val) >> 3); + + BinaryIntegerLength< Range >::run(ctx, len); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 buff[len]; + size_t shift = (len - 1) << 3; + for(size_t i = 0; i < len; ++i) + { + buff[i] = static_cast(val >> shift); + shift -= 8; + } + + ctx.refBuffer().putBytes(buff, len); + } + else + { + BinaryIntegerLength< Range >::run(ctx, 1); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(0); + } + } + template + static void inline run(T& retval, DecoderCtx& ctx, bool extended_val) + { + retval = 0; + size_t len = (size_t)BinaryIntegerLength< Range >::run(ctx, extended_val); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(len); + + if (data) + { + for (size_t i = 0; i < len; ++i) + { + retval = retval << 8; + retval |= data[i]; + } + } + } +}; + +/*************************************************************************************** +* Encoding of a 2's-complement-binary-integer (X.691 10.4) +***************************************************************************************/ + +template +struct TwosComplementBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u64 val = ie.get(); + u64 tval = val; + u64 mask = static_cast(-128); + u8 len = 1; + u8 i = 7; + + u8 buf[8]; + + while (len < 8) + { + buf[i] = static_cast(tval); + if (!(val & mask) || (val & mask) == mask) + break; + mask = mask << 8; + tval = tval >> 8; + len++; + i--; + } + + ctx.refBuffer().putByte(len) && ctx.refBuffer().putBytes(&buf[i], len); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = nullptr; + typename IE::value_type val = 0; + + u8 const* len = ctx.refBuffer().getBytes(1); + + if (len && (*len) <= 8 && (data = ctx.refBuffer().getBytes(*len))) + { + for (u8 i = 0; i < *len; ++i) + { + val = val << 8; + val |= data[i]; + } + } + ie.set(val); + } +}; + +/*************************************************************************************** +* Encoding of a normally small non-negativebinary integer (X.691 10.6) +***************************************************************************************/ +template +struct NormallySmallNonnegativeBinaryInteger +{ + static void inline run(IE const& ie, EncoderCtx& ctx, typename IE::constraint_t::boundary_type val) + { + if (val <= 63) + { + Tools::bit_accessor::put(static_cast(val), 7, ctx.refBuffer()); //7 bits ('0' indicator + value) + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); //1 bit ('1' indicator) + NonnegativeBinaryInteger::run(val, ctx); + } + } + static TValue inline run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) { + TValue rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, true); + return rval; + } + return Tools::bit_accessor::get(6, ctx.refBuffer()); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/bstring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/bstring.hpp new file mode 100644 index 0000000..5d25599 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/bstring.hpp @@ -0,0 +1,279 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +//15.11 Default +template +struct BitstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +//15.8 Zero length +template +struct BitstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//15.9 Up to 6 bits, fixed length +template +struct BitstringNoExt 0)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[0])) & (0xFF >> (8 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(1); + if (data) + { + data[0] = Tools::bit_accessor::get(IE::constraint_t::upper_bound, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; +template +struct BitstringNoExt 8)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(ie.get_buffer().data()[0], 8, ctx.refBuffer()); + Tools::bit_accessor::put((static_cast(ie.get_buffer().data()[1])) & (0xFF >> (16 - IE::constraint_t::upper_bound)), + IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 * data = ctx.refAllocator().alloc_bytes(2); + if (data) + { + data[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data[1] = Tools::bit_accessor::get(IE::constraint_t::upper_bound - 8, ctx.refBuffer()); + ie.set_buffer(IE::constraint_t::upper_bound, data); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 2); + } +}; + +//15.10 More than 6 bits, up to 64K bits, fixed length +template +struct BitstringNoExt 16)) +>> +{ + constexpr static size_t len_bytes = (IE::constraint_t::upper_bound + 7) >> 3; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + if (ie.get_buffer().size() != len_bytes) + { + ctx.refErrorCtx().sizeRangeError(ie.get_buffer().size(), len_bytes, len_bytes); + } + else + { + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + last_byte <<= 8 - tail; + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = IE::constraint_t::upper_bound % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(IE::constraint_t::upper_bound, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } +}; + +/**************************************************/ + +template +struct Bitstring; + +//15.6 : Extension present +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + + if (ie.get_bitqty() <= IE::constraint_t::upper_bound && ie.get_bitqty() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + BitstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.get_bitqty()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + const u8 tail = ie.get_bitqty() % 8; + if (tail) + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size() - 1); + u8 last_byte = *(ie.get_buffer().data() + ie.get_buffer().size() - 1); + + last_byte <<= 8 - tail; + + ctx.refBuffer().putBytes(&last_byte, 1); + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, tail); + } + else + { + ctx.refBuffer().putBytes(ie.get_buffer().data(), ie.get_buffer().size()); + } + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = LengthDeterminant::run(ctx, true); + const size_t len_bytes = (len + 7) >> 3; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len_bytes); + if (data_in) + { + u8* data_out = ctx.refAllocator().alloc_bytes(len_bytes); + if (data_out) + { + memcpy(data_out, data_in, len_bytes); + const u8 shift = len % 8; + if (shift) + { + ctx.refBuffer().set_begin(ctx.refBuffer().begin() - 1, shift); + data_out[len_bytes - 1] >>= 8 - shift; + } + ie.set_buffer(len, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, len_bytes); + } + } + else + BitstringNoExt::run(ie, ctx); + } +}; + +//15.7 : No extension +template +struct Bitstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + BitstringNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/choice.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/choice.hpp new file mode 100644 index 0000000..f0d115c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/choice.hpp @@ -0,0 +1,136 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +Choice +*********************************************************************************/ + +/**************************************************/ +//22.6-7 Default +template +struct ChoiceNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ConstrainedWholeNumber::run(ctx, IE::normalize(ie.get_index())); + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::index_type idx = ConstrainedWholeNumber::run(ctx); + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } +}; + +//22.4 One alternative +template +struct ChoiceNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + VisitorEncoder ve{ ctx }; + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + VisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(0), ve); + } +}; + +/**************************************************/ + +template +struct Choice; + +//22.5 Extension present +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + auto idx = IE::normalize(ie.get_index()); + if (idx <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ChoiceNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, idx - IE::constraint_t::upper_bound - 1); + OpenTypeVisitorEncoder ve{ ctx }; + ie.encode(ve); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + typename IE::index_type idx = IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx); + if (idx >= IE::constraint_t::total_num_entries) + { + ie.set_unknown(); + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + else + { + OpenTypeVisitorDecoder ve{ ctx }; + ie.decode(IE::denormalize(idx), ve); + } + } + else + ChoiceNoExt::run(ie, ctx); + } +}; + +//22.6 No extension +template +struct Choice > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ChoiceNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/codec.hpp new file mode 100644 index 0000000..176792a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/codec.hpp @@ -0,0 +1,325 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/elements.hpp" +#include "asn/per/context.hpp" +#include "asn/per/length.hpp" +#include "asn/per/integer.hpp" +#include "asn/per/enumerated.hpp" +#include "asn/per/ostring.hpp" +#include "asn/per/bstring.hpp" +#include "asn/per/sequence_of.hpp" +#include "asn/per/sequence.hpp" +#include "asn/per/choice.hpp" +#include "asn/per/visitor.hpp" +#include "asn/per/oid.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +pack +*********************************************************************************/ +template +bool pack(IE const& ie, EncoderCtx& ctx) +{ + ctx.refErrorCtx().reset(); + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + return static_cast(ctx); +} +/******************************************************************************** +unpack +*********************************************************************************/ +template +bool unpack(IE& ie, DecoderCtx& ctx) +{ + Element::run(ie, ctx); + + if (ctx) + Tools::bit_accessor::padByte(ctx.refBuffer()); + + if(ctx && ctx.refBuffer().getBytesLeft()) + { + ctx.ie_name(IE::name()); + ctx.refErrorCtx().lengthErrorBytes(ctx.refBuffer().getBytesLeft(), 0); + } + + return static_cast(ctx); +} + +/*************************************************************************************** +* ElementType +***************************************************************************************/ +template +struct ElementType; + +/*************************************************************************************** +* BOOLEAN: Encoding the boolean type (X.691 11) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get()), 1, ctx.refBuffer()); + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(0 != Tools::bit_accessor::get(1, ctx.refBuffer())); + } +}; +/*************************************************************************************** +* INTEGER: Encoding the integer type (X.691 12) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Integer::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Integer::run(ie, ctx); + } +}; +/*************************************************************************************** +* ENUMERATED: Encoding the enumerated type (X.691 13) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Enumerated::run(ie, ctx); + } +}; +/*************************************************************************************** +* BIT STRING: Encoding the bitstring type (X.691 15) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Bitstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Bitstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* OCTET STRING: Encoding the octetstring type (X.691 16) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Octetstring::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Octetstring::run(ie, ctx); + } +}; +/*************************************************************************************** +* NULL: Encoding the null type (X.691 17) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) { /*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.setpresent(true); + } +}; +/*************************************************************************************** +* SEQUENCE: Encoding the sequence type (X.691 18) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + Seq::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ctx.m_container = &ie; + Seq::run(ie, ctx); + ctx.m_container = nullptr; + } +}; +/*************************************************************************************** +* SEQUENCE OF: Encoding the sequence-of type (X.691 19) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + ctx.container_name(IE::name()); + SequenceOf::run(ie, ctx); + + for (auto& elem : ie) + Element::run(elem, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + SequenceOf::run(ie, ctx); + + for (auto & elem : ie) + Element::run(elem, ctx); + } +}; +/*************************************************************************************** +* SET: Encoding the set type (X.691 20) +***************************************************************************************/ + + +/*************************************************************************************** +* SET OF: Encoding the set-of type (X.691 21) +***************************************************************************************/ + +/*************************************************************************************** +* CHOICE: Encoding the choice type (X.691 22) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(ie.is_valid()) + { + ctx.container_name(IE::name()); + Choice::run(ie, ctx); + } + else + ctx.refErrorCtx().tagError(ie.get_index()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + ctx.m_container = &ie; + Choice::run(ie, ctx); + ctx.m_container = nullptr; + } +}; + +/*************************************************************************************** +* IE_OBJECT_IDENTIFIER: Encoding the object identifier type (X.691 23) +***************************************************************************************/ +template +struct ElementType +{ +protected: + template friend struct Element; + + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Oid::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.clear(); + Oid::run(ie, ctx); + } +}; + +/*************************************************************************************** +* COMMON: Element +***************************************************************************************/ +template +struct Element +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ctx) + { + ASN_ENCODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + if (IE_TYPE != element_type::T_SEQUENCE && !ie.is_valid()) + { + ctx.refErrorCtx().errorNoMandatory(); + } + else + ElementType::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + if (ctx) + { + ASN_DECODER_TRACE("IE buffer: %s", static_cast(IE_TYPE), IE::name(), ctx.refBuffer().toString()); + ctx.ie_name(IE::name()); + ElementType::run(ie, ctx); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/common.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/common.hpp new file mode 100644 index 0000000..5b92100 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/common.hpp @@ -0,0 +1,58 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/asn.hpp" +#include "type_defs.h" + +#include "asn/buffer.hpp" +#include "context.hpp" + +//#define ASN_DECODER_TRACE_ENABLE +//#define ASN_ENCODER_TRACE_ENABLE + +#ifdef ASN_DECODER_TRACE_ENABLE +#define ASN_DECODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_DECODER_TRACE(...) +#endif + +#ifdef ASN_ENCODER_TRACE_ENABLE +#define ASN_ENCODER_TRACE(FMT, ...) printf(FMT "\n", __VA_ARGS__) +#else +#define ASN_ENCODER_TRACE(...) +#endif + +namespace asn { +namespace per { + +struct Tools +{ + typedef bit_accessor_cross_byte bit_accessor; +}; + +template +struct Element; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/context.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/context.hpp new file mode 100644 index 0000000..2a5d7e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/context.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/utility.hpp" +#include "asn/buffer.hpp" +#include "asn/error_context.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +EncoderCtx +*********************************************************************************/ +class EncoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + + EncoderCtx(u8* data, size_t size) + : m_buffer{ m_errCtx } + { + Reset(data, size); + } + + template + explicit EncoderCtx(u8(&buff)[SIZE]) + : EncoderCtx(buff, SIZE) + { + } + + explicit EncoderCtx() + : EncoderCtx(nullptr, 0) + { + } + + buf_type& refBuffer() { return m_buffer; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void Reset(void* data = nullptr, size_t size = 0) + { + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + } + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + template + friend struct Encode; + + error_context m_errCtx; + buf_type m_buffer; +}; + + +/******************************************************************************** +DecoderCtx +*********************************************************************************/ +class DecoderCtx : boost::noncopyable +{ +public: + typedef buffer buf_type; + typedef allocator alloc_type; + typedef u64 map_type; + + DecoderCtx(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + : m_buffer{ m_errCtx } + { + reset(data, size, alloc_buffer, alloc_buffer_size); + } + + buf_type& refBuffer() { return m_buffer; } + alloc_type& refAllocator() { return m_allocator; } + error_context& refErrorCtx() { return m_errCtx; } + explicit operator bool() const { return static_cast(m_errCtx); } + + void reset(const void* data = nullptr, size_t size = 0, void* alloc_buffer = nullptr, size_t alloc_buffer_size = 0) + { + m_allocator.reset(alloc_buffer, alloc_buffer_size); + m_buffer.reset(static_cast(data), size); + m_errCtx.reset(); + m_map = 0; + m_container = nullptr; + } + + bool map_elm() + { + //m_map = (m_map << 1) | (m_map >> (sizeof(m_map)*CHAR_BIT - 1)); + //return m_map & 1u; + + constexpr map_type mask = ((map_type)1) << (sizeof(map_type)*CHAR_BIT - 1); + + bool rv = m_map & mask; + m_map = m_map << 1; + + return rv; + } + + map_type set_map(map_type map) + { + map_type rval = m_map; + m_map = map; + return rval; + } + + map_type get_map() const {return m_map;} + + //Pointer to container (SEQ | CHO) + void* m_container{ nullptr }; + + //Name of the being processed IE + void ie_name(const char* name) { m_errCtx.ie_name(name); } + char const* ie_name() const { return m_errCtx.ie_name(); } + + void container_name(const char* name) { m_errCtx.container_name(name); } + char const* container_name() const { return m_errCtx.container_name(); } + +private: + //Optional or Extension elements' presence bitmap. Used in sequences + map_type m_map{ 0 }; + error_context m_errCtx; + buf_type m_buffer; + alloc_type m_allocator; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/enumerated.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/enumerated.hpp new file mode 100644 index 0000000..c2e8851 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/enumerated.hpp @@ -0,0 +1,79 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +template +struct Enumerated; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() > IE::constraint_t::upper_bound) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Enumerated > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.get() <= IE::constraint_t::upper_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + NormallySmallNonnegativeBinaryInteger::run(ie, ctx, ie.get() - IE::constraint_t::upper_bound - 1); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + ie.set(IE::constraint_t::upper_bound + 1 + NormallySmallNonnegativeBinaryInteger::run(ctx)); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/integer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/integer.hpp new file mode 100644 index 0000000..7bb93c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/integer.hpp @@ -0,0 +1,154 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +template +struct Integer; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + ConstrainedWholeNumber::run(ctx, ie.get()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +template +struct Integer > +{ + //X.691 12.1 + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + //X.691 12.2 + ConstrainedWholeNumber::run(ctx, ie.get()); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + //X.691 12.2.4, 12.2.6, 10.8s + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + ie.set(ConstrainedWholeNumber::run(ctx)); + } +}; + +// (X.691 10.7) +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if(IE::constraint_t::is_extended(ie.get())) + { + ctx.refErrorCtx().valueRangeError(static_cast(ie.get())); + return; + } + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(IE::constraint_t::lower_bound + val); + } +}; + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (!IE::constraint_t::is_extended(ie.get())) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + NonnegativeBinaryInteger::run(ie.get() - IE::constraint_t::lower_bound, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + TwosComplementBinaryInteger::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + + if (ext) + TwosComplementBinaryInteger::run(ie, ctx); + else + { + typename IE::value_type val = 0; + NonnegativeBinaryInteger::run(val, ctx, false); + ie.set(val + IE::constraint_t::lower_bound); + } + } +}; + +/*************************************************************************************** +* Encoding of an unconstrained whole number (X.691 10.8) +***************************************************************************************/ + +template +struct Integer > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + TwosComplementBinaryInteger::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/length.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/length.hpp new file mode 100644 index 0000000..488a830 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/length.hpp @@ -0,0 +1,238 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/whole_number.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +* Encoding of a length determinant (X.691 10.9) +*********************************************************************************/ + +template +struct LengthDeterminant; + +struct LengthDeterminantDefault //Unconstrained length +{ + static u8 bytes_needed(size_t len) + { + if (len <= 127) + return 1; + return 2; + } + + static void run(EncoderCtx& ctx, size_t len) + { + if (len <= 127) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(len)); + } + else if (len < 16384) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + len += 0x8000; + ctx.refBuffer().putByte(static_cast(len >> 8)); + ctx.refBuffer().putByte(static_cast(len)); + } + else + { + //todo: 10.9.3.8.1 for len >= 16K + } + } + static size_t run(DecoderCtx& ctx) + { + size_t rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + { + if (*data & 0x80) + { + rval = (*data & 0x7F) << 8; + data = ctx.refBuffer().getBytes(1); + if (data) + rval |= *data; + } + else + rval = *data; + } + return rval; + } +}; + +//10.9.3.3 +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return ConstrainedWholeNumber::run(ctx); + } +}; +template +struct LengthDeterminant> +{ + static void run(EncoderCtx& ctx, size_t len) + { + if (len > Range::upper_bound || len < Range::lower_bound) + LengthDeterminantDefault::run(ctx, len); + else + ConstrainedWholeNumber::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + if (extended_len) + return LengthDeterminantDefault::run(ctx); + + return ConstrainedWholeNumber::run(ctx); + } +}; + +template +struct LengthDeterminant= 65536) > > +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +//10.9.3.4 : for "normally small length". bitmaps, sequence types +template +struct NormallySmallLength; + +template +struct NormallySmallLength > +{ + static_assert(Length > 0, "NormallySmallLength must be > 0"); + + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put((u8)(Length - 1), 7, ctx.refBuffer()); + } + static size_t run(DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + return LengthDeterminantDefault::run(ctx); + return Tools::bit_accessor::get(6, ctx.refBuffer()) + 1; + } +}; + +template +struct NormallySmallLength 64)> > +{ + static void run(EncoderCtx& ctx) + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminantDefault::run(ctx, Length); + } +}; + +/* +* BinaryIntegerLength +*/ + +template +struct NBytes +{ + static constexpr bound_t value = std::log2( N ) / 8 + 1; +}; + +template +struct NBytes > +{ + static constexpr bound_t value = 1; +}; + +template +struct NRange +{ + static constexpr bound_t lower_bound = B1; + static constexpr bound_t upper_bound = B2; +}; + +template +struct NRange > +{ + static constexpr bound_t lower_bound = B2; + static constexpr bound_t upper_bound = B1; +}; + +template +struct BinaryIntegerLength +{ + typedef NRange< + NBytes::value, + NBytes::value + > nrange; + + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr bound_t lower_bound = nrange::lower_bound; + static constexpr bound_t upper_bound = nrange::upper_bound; + + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminant::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminant::run(ctx, extended_len); + } +}; + +template +struct BinaryIntegerLength> +{ + static void run(EncoderCtx& ctx, size_t len) + { + LengthDeterminantDefault::run(ctx, len); + } + static size_t inline run(DecoderCtx& ctx, bool extended_len) + { + return LengthDeterminantDefault::run(ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/oid.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/oid.hpp new file mode 100644 index 0000000..c4f222a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/oid.hpp @@ -0,0 +1,68 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct Oid +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + size_t len = ie.get().size(); + + if (len > 255) + { + ctx.refErrorCtx().valueError(len, 0, 0); + } + else + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(reinterpret_cast(&len), 1); + ctx.refBuffer().putBytes(ie.get().data(), len); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + + uint8_t const* data_in = ctx.refBuffer().getBytes(1); // length + + if(data_in) + { + size_t len = *data_in; + data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/ostring.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/ostring.hpp new file mode 100644 index 0000000..4d601bb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/ostring.hpp @@ -0,0 +1,209 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template < class IE, class Enable = void> +struct Octetstring; + +//16.8 Default +template +struct OctetstringNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + + if (data_in) + { + ie.set(len, data_in); + } + + } +}; + +//16.5 Zero length +template +struct OctetstringNoExt > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/* do nothing */ } + static void inline run(IE& ie, DecoderCtx& ctx) { ie.setpresent(true); } +}; + +//16.6 Up to two octets, fixed length +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(1); + if (data_out) { + data_out[0] = data_in; + ie.set(1, data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, 1); + } +}; + +template +struct OctetstringNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::put(static_cast(ie.get().data()[0]), 8, ctx.refBuffer()); + Tools::bit_accessor::put(static_cast(ie.get().data()[1]), 8, ctx.refBuffer()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 data_in[2]; + data_in[0] = Tools::bit_accessor::get(8, ctx.refBuffer()); + data_in[1] = Tools::bit_accessor::get(8, ctx.refBuffer()); + u8* data_out = ctx.refAllocator().alloc_bytes(sizeof(data_in)); + if (data_out) { + data_out[0] = data_in[0]; + data_out[1] = data_in[1]; + ie.set(sizeof(data_in), data_out); + } + else + ctx.refErrorCtx().allocatorNoMem(0, sizeof(data_in)); + } +}; + +//16.7 More than 2 octets, up to 64K, fixed length +template +struct OctetstringNoExt 2)) +>> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), ie.get().size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + const size_t len = (size_t)IE::constraint_t::upper_bound; + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } +}; + +/**************************************************/ + +//16.3 : Extension present +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + bound_t size = ie.get().size(); + if (size <= IE::constraint_t::upper_bound && size >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + OctetstringNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + Tools::bit_accessor::padByte(ctx.refBuffer()); + LengthDeterminant::run(ctx, size); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putBytes(ie.get().data(), size); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + size_t len = LengthDeterminant::run(ctx, true); + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data_in = ctx.refBuffer().getBytes(len); + if (data_in) + { + ie.set(len, data_in); + } + } + else + OctetstringNoExt::run(ie, ctx); + } +}; + +//16.4 : No extension +template +struct Octetstring > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + else + { + OctetstringNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + OctetstringNoExt::run(ie, ctx); + if ( ie.get().size() > size_t(IE::constraint_t::upper_bound) || + (IE::constraint_t::lower_bound >= 0 && ie.get().size() < size_t(IE::constraint_t::lower_bound))) + { + ctx.refErrorCtx().sizeRangeError(ie.get().size(), size_t(IE::constraint_t::lower_bound), + size_t(IE::constraint_t::upper_bound)); + } + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence.hpp new file mode 100644 index 0000000..e533e80 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence.hpp @@ -0,0 +1,568 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/visitor.hpp" + +namespace asn { +namespace per { + +/****************************************************************** + * Adapter + *****************************************************************/ +template +struct Adapter +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + Element::run(ie, ctx); + } +}; +template +struct Adapter> +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + VisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + VisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } +}; +template +struct Adapter > +{ + static void inline run(IE const& ie, EncoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorEncoder v(ctx); + bool rv = ie.encode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + } + + static void inline run(IE& ie, DecoderCtx& ctx, Container const& cont) + { + OpenTypeVisitorDecoder v(ctx); + bool rv = ie.decode(v, cont); + if(!rv && static_cast(ctx)) + { + ctx.refErrorCtx().errorNoObject(Container::name()); + } + if(ie.is_unknown()) //skip the unknown Open Type + { + size_t size = LengthDeterminantDefault::run(ctx); + DecoderCtx::buf_type& buffer = ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + else + buffer.advance(size); + } + } +}; + +/****************************************************************** + * RootEncoder + *****************************************************************/ +template +struct RootEncoder +{ + RootEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + { + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + Adapter::run(ie, m_ctx, m_cont); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * RootDecoder + *****************************************************************/ +template +struct RootDecoder +{ + RootDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + { + if(IE::optional) + { + if(m_ctx.map_elm()) + { + ie.setpresent(true); + Adapter::run(ie, m_ctx, m_cont); + } + else + ie.setpresent(false); + } + else + { + Adapter::run(ie, m_ctx, m_cont); + } + } + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtEncoder + *****************************************************************/ +template +struct ExtEncoder +{ + explicit ExtEncoder(EncoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE const& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if(IE::optional && !ie.is_valid()) + return static_cast(m_ctx); + + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Adapter::run(ie, m_ctx, m_cont); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + return false; + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * ExtDecoder + *****************************************************************/ +template +struct ExtDecoder +{ + explicit ExtDecoder(DecoderCtx& ctx, Container const& cont) : m_ctx(ctx), m_cont(cont) {} + + template + bool operator() (IE& ie) const + { + if(!IE::extension) + return static_cast(m_ctx); + + if (m_ctx.map_elm()) + { + ie.setpresent(true); + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Adapter::run(ie, m_ctx, m_cont); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + buffer.set_end(end); + } + else + { + ie.setpresent(false); + } + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; + Container const& m_cont; +}; + +/****************************************************************** + * SeqMap + *****************************************************************/ +template +struct SeqMap; + +/* +template +struct SeqMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + u8 k = IE::num_opt_entries / 8; // num of full bytes in a seq map mask + u8 fb_bits = IE::num_opt_entries % 8; // num of first byte bits (without padding) + + if (fb_bits) { + // Put a part of a first byte (without padding, only seq map own bits) + Tools::bit_accessor::put((u8)(val >> 8*k), fb_bits, ctx.refBuffer()); + } + + // Put other bytes (full bytes) + for (int i = (k-1); i >= 0; i--) { + Tools::bit_accessor::put((u8)(val >> 8*i), 8, ctx.refBuffer()); + } + } + + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + uint num_opts = IE::num_opt_entries; + u64 res = 0; + u8 k = 1; + u8 lb_bits = IE::num_opt_entries % 8; // num of last byte bits (without padding) + + while (num_opts >= 8) { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(8, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + + k++; + num_opts -= 8; + } + + if (lb_bits > 0) { + // (8 - lb_bits) - padding in a last byte + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - 8*k + 8 - lb_bits; + + DecoderCtx::map_type rval = Tools::bit_accessor::get(lb_bits, ctx.refBuffer()); + + rval = rval << shift; + res |= rval; + } + + return res; + } +} +; +*/ + +template +struct SeqMap > //todo: to add code for more than 8 optional elements +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + Tools::bit_accessor::put((u8)val, IE::num_opt_entries, ctx.refBuffer()); + } + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - IE::num_opt_entries; + DecoderCtx::map_type rval = Tools::bit_accessor::get(IE::num_opt_entries, ctx.refBuffer()); + rval = rval << shift; + return rval; + } +}; + +/****************************************************************** + * SeqExtMap + *****************************************************************/ +template +struct SeqExtMap +{ + static void inline run(EncoderCtx& ctx, size_t val) {} + static DecoderCtx::map_type inline run(DecoderCtx& ctx) + { + size_t len = NormallySmallLength<1>::run(ctx); + size_t shift = sizeof(DecoderCtx::map_type) * CHAR_BIT - len; + u8 tmp; + DecoderCtx::map_type rval{ 0 }; + u8 val; + + while (len) { + tmp = len > 8 ? 8 : (u8)len; + val = Tools::bit_accessor::get(tmp, ctx.refBuffer()); + rval = rval << tmp; + rval |= val; + len -= tmp; + } + rval = rval << shift; + return rval; + } +}; + +template +struct SeqExtMap 0)) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + Tools::bit_accessor::put((u8)val, NumExtEntries, ctx.refBuffer()); + } +}; + +template +struct SeqExtMap 8) > > +{ + static void inline run(EncoderCtx& ctx, size_t val) + { + NormallySmallLength::run(ctx); + + size_t len = NumExtEntries; + size_t tmp; + + while (len) { + tmp = len > 8 ? 8 : len; + Tools::bit_accessor::put((u8)val, tmp, ctx.refBuffer()); + val = val >> tmp; + len -= tmp; + } + } +}; + +/****************************************************************** + * SeqMapBuilder + *****************************************************************/ +struct SeqMapBuilder +{ + SeqMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(!IE::extension && IE::optional) + { + m_map = m_map << 1; + if(ie.is_valid()) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqExtMapBuilder + *****************************************************************/ +struct SeqExtMapBuilder +{ + SeqExtMapBuilder(uint64_t& map) : m_map(map) {} + + template + bool operator()(IE const& ie) + { + if(IE::extension) + { + m_map = m_map << 1; + if(!IE::optional || (IE::optional && ie.is_valid())) + m_map |= 1; + } + return true; + } + uint64_t& m_map; +}; + +/****************************************************************** + * SeqNoExtDefault + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExtDefault +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + RootEncoder ve(ctx, ie); + ie.encode(ve); + } + static void inline run(IE& ie, DecoderCtx& ctx, DecoderCtx::map_type map = 0) + { + RootDecoder ve(ctx, ie); + + DecoderCtx::map_type old_map = ctx.set_map(map); + ie.decode(ve); + ctx.set_map(old_map); + } +}; + +/****************************************************************** + * SeqNoExt + *****************************************************************/ +// Default (No OPT/DEF present within the extension root) +template +struct SeqNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx); + } +}; + +//18.2 OPT/DEF present within the extension root +template +struct SeqNoExt 0) > > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqMapBuilder mb(map); + ie.encode(mb); + SeqMap::run(ctx, map); + SeqNoExtDefault::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExtDefault::run(ie, ctx, SeqMap::run(ctx)); + } +}; + +/****************************************************************** + * Seq + *****************************************************************/ +template +struct Seq; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + uint64_t map = 0; + SeqExtMapBuilder emb(map); + ie.encode(emb); + + if (map) { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + SeqExtMap::run(ctx, map); + ExtEncoder ove(ctx, ie); + ie.encode(ove); + } + else { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SeqNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + SeqNoExt::run(ie, ctx); + + auto old_map = ctx.set_map(SeqExtMap::run(ctx)); // we do not know how many exts can be received + { + ExtDecoder ove(ctx, ie); + ie.decode(ove); + + auto& buffer = ctx.refBuffer(); + while(ctx.get_map()) + { + if(ctx.map_elm()) //skip unknown extensions + { + size_t size = LengthDeterminantDefault::run(ctx); + if (buffer.getBytesLeft() < size) + { + ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + break; + } + buffer.advance(size); + } + } + } + ctx.set_map(old_map); + } + else + SeqNoExt::run(ie, ctx); + } +}; + +template +struct Seq > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SeqNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence_of.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence_of.hpp new file mode 100644 index 0000000..d4e21a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/sequence_of.hpp @@ -0,0 +1,156 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +template +struct SequenceOf; + +//19.6 Default +template +struct SequenceOfNoExt +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + LengthDeterminant::run(ctx, ie.size()); + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + size_t len = LengthDeterminant::run(ctx, false); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +//16.6 +template +struct SequenceOfNoExt> +{ + static void inline run(IE const& ie, EncoderCtx& ctx) {/*do nothing*/ } + static void inline run(IE& ie, DecoderCtx& ctx) + { + for (size_t i = 0; i < IE::constraint_t::upper_bound; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } +}; + +/**************************************************/ + +//19.4 Extension present +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (ie.size() <= IE::constraint_t::upper_bound && ie.size() >= IE::constraint_t::lower_bound) + { + Tools::bit_accessor::put(0, 1, ctx.refBuffer()); + SequenceOfNoExt::run(ie, ctx); + } + else + { + Tools::bit_accessor::put(1, 1, ctx.refBuffer()); + LengthDeterminant::run(ctx, ie.size()); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + u8 ext = Tools::bit_accessor::get(1, ctx.refBuffer()); + if (ext) + { + size_t len = LengthDeterminant::run(ctx, true); + for (size_t i = 0; i < len; ++i) + { + u8* data = ctx.refAllocator().alloc_bytes(sizeof(typename IE::value_type)); + if (data) + { + typename IE::value_type * v = new (data) typename IE::value_type; + //v->clear(); + ie.push_back(*v); + } + else + { + ctx.refErrorCtx().allocatorNoMem(0, sizeof(typename IE::value_type)); + break; + } + } + } + else + SequenceOfNoExt::run(ie, ctx); + } +}; + +//19.5-6 No extension +template +struct SequenceOf > +{ + static void inline run(IE const& ie, EncoderCtx& ctx) + { + if (IE::constraint_t::lower_bound >= 0 && ie.size() < size_t(IE::constraint_t::lower_bound)) + { + ctx.refErrorCtx().sizeRangeError(ie.size(), size_t(IE::constraint_t::lower_bound)); + } + else + { + SequenceOfNoExt::run(ie, ctx); + } + } + static void inline run(IE& ie, DecoderCtx& ctx) + { + SequenceOfNoExt::run(ie, ctx); + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/visitor.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/visitor.hpp new file mode 100644 index 0000000..f379044 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/visitor.hpp @@ -0,0 +1,141 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" + +namespace asn { +namespace per { + +/******************************************************************************** +VisitorEncoder +*********************************************************************************/ +struct VisitorEncoder +{ + explicit VisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/******************************************************************************** +VisitorDecoder +*********************************************************************************/ +struct VisitorDecoder +{ + VisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + Element::run(ie, m_ctx); + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Encode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorEncoder +{ + explicit OpenTypeVisitorEncoder(EncoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE const& ie) const + { + size_t reserved_size = 1; //1 byte length is most likely + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + + if (m_ctx.refBuffer().getBytesLeft()) + { + EncoderCtx::buf_type::pointer p = m_ctx.refBuffer().advance(reserved_size); + EncoderCtx::buf_type::pointer start = p + reserved_size; + + Element::run(ie, m_ctx); + + if (m_ctx) + { + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + EncoderCtx::buf_type::pointer p_new = m_ctx.refBuffer().begin(); + size_t size = p_new - start; + size_t needed = LengthDeterminantDefault::bytes_needed(size) - reserved_size; + if (needed) //1 byte is not enough for the length determinant. it is hardly possible + { + if (m_ctx.refBuffer().getBytesLeft() < needed) { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), needed); + return false; + } + memmove(start + needed, start, size); + p_new += needed; + } + m_ctx.refBuffer().set_begin(p, 0); + LengthDeterminantDefault::run(m_ctx, size); + if (m_ctx) { + m_ctx.refBuffer().set_begin(p_new, 0); + Tools::bit_accessor::padByte(m_ctx.refBuffer()); + } + } + } + else + { + m_ctx.refErrorCtx().lengthErrorBytes(m_ctx.refBuffer().getBytesLeft(), reserved_size); + } + return static_cast(m_ctx); + } + EncoderCtx& m_ctx; +}; + +/*************************************************************************************** +* Open Type Visitor // Decode Open Type (10.2) +***************************************************************************************/ +struct OpenTypeVisitorDecoder +{ + explicit OpenTypeVisitorDecoder(DecoderCtx& ctx) : m_ctx(ctx) {} + + template + bool operator() (IE& ie) const + { + size_t size = LengthDeterminantDefault::run(m_ctx); + DecoderCtx::buf_type& buffer = m_ctx.refBuffer(); + if (buffer.getBytesLeft() < size) + { + m_ctx.refErrorCtx().lengthErrorBytes(buffer.getBytesLeft(), size); + return false; + } + DecoderCtx::buf_type::pointer end = buffer.end(); + buffer.set_end(buffer.begin() + size); + Element::run(ie, m_ctx); + buffer.set_end(end); + + return static_cast(m_ctx); + } + DecoderCtx& m_ctx; +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/whole_number.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/whole_number.hpp new file mode 100644 index 0000000..c614998 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/per/whole_number.hpp @@ -0,0 +1,147 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/per/common.hpp" +#include "asn/per/binary_integer.hpp" + +namespace asn { +namespace per { + +/*************************************************************************************** +* Encoding of a constrained whole number (X.691 10.5) +***************************************************************************************/ + +template +struct length_determinant; + +template +struct length_determinant > { static constexpr bound_t value = 0; }; + +template +struct length_determinant > { static constexpr bound_t value = 1; }; + +template +struct length_determinant 1) > > { static constexpr bound_t value = boost::static_log2<(R - 1)>::value + 1; }; + +/*************************************************************************************** +***************************************************************************************/ + +template +struct ConstrainedWholeNumber; + +//Bit-field case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::put(static_cast(val - Range::lower_bound), + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } + static V inline run(DecoderCtx& ctx) + { + return Range::lower_bound + Tools::bit_accessor::get( + length_determinant<(Range::upper_bound - Range::lower_bound + 1)>::value, + ctx.refBuffer()); + } +}; + +//One octet case +template +struct ConstrainedWholeNumber > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte(static_cast(val - Range::lower_bound)); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(1); + if (data) + rval = Range::lower_bound + data[0]; + return rval; + } +}; + +//Two octets case +template +struct ConstrainedWholeNumber (Range::lower_bound + 255)) && (Range::upper_bound <= (Range::lower_bound + 65535))> > +{ + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& v) + { + u64 val = static_cast(v - Range::lower_bound); + Tools::bit_accessor::padByte(ctx.refBuffer()); + ctx.refBuffer().putByte((u8)(val >> 8)); + ctx.refBuffer().putByte((u8)val); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + Tools::bit_accessor::padByte(ctx.refBuffer()); + u8 const* data = ctx.refBuffer().getBytes(2); + if (data) { + rval = data[0]; + rval = rval << 8; + rval |= data[1]; + rval += Range::lower_bound; + } + return rval; + } +}; + +//Indefinite case +template +struct ConstrainedWholeNumber Range::lower_bound + 65535) > > +{ + struct NormalizedValueRange + { + using boundary_type = typename Range::boundary_type; + static constexpr bool extended = Range::extended; + static constexpr boundary_type lower_bound = 0; + static constexpr boundary_type upper_bound = Range::upper_bound - Range::lower_bound; + }; + + //non-negative-binary-integer X.691 10.5 + static void inline run(EncoderCtx& ctx, const V& val) + { + NonnegativeBinaryInteger::run(val - Range::lower_bound, ctx); + } + static V inline run(DecoderCtx& ctx) + { + V rval = 0; + NonnegativeBinaryInteger::run(rval, ctx, false); + return rval + Range::lower_bound; + } +}; + +} //namespace per +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/printer.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/printer.hpp new file mode 100644 index 0000000..b21eaef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/printer.hpp @@ -0,0 +1,338 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries +#include "asn/elements.hpp" + +namespace asn{ + +/******************************************************************************** +Utility +**********************************S***********************************************/ +inline void skip_row(std::ostream* str, size_t row_shift) + //{*str << std::string(row_shift, ' ');} +{ + std::string s(row_shift, ' '); + str->write(s.data(), s.size()); +} + +inline void print_hex(std::ostream* str, size_t size, const uint8_t* data, size_t row_shift) +{ + *str << std::setfill('0') << std::hex << std::noshowbase; + for (size_t i = 0; i < size; ++i) + { + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)data[i] << " "; + if (0x0f == (i & 0x0f)) { *str << '\n'; } + } +} + +/******************************************************************************** + +Print + +*********************************************************************************/ + + +/******************************************************************************** +default implementation for IE +*********************************************************************************/ +template +struct Print; + +template +void print(IE const& ie, std::ostream& out, size_t row_shift) +{ + Print::run(ie, &out, row_shift); +} + +template +std::string get_printed(IE const& ie, size_t row_shift = 0) +{ + std::stringstream out; + print(ie, out, row_shift); + return out.str(); +} + + +/******************************************************************************** +VisitorPrinter +*********************************************************************************/ +struct VisitorPrinter +{ + VisitorPrinter(std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift) {} + + template + bool operator() (IE & ie) + { + Print::run(ie, m_pStream, m_RowShift); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; +}; + +/****************************************************************** + * PrinterAdapter + *****************************************************************/ +template +struct PrinterAdapter +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + Print::run(ie, str, row_shift); + } +}; +template +struct PrinterAdapter> +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; +template +struct PrinterAdapter > +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift, Container const& cont) + { + VisitorPrinter vp(str, row_shift); + ie.encode(vp, cont); + } +}; + +/******************************************************************************** +SeqVisitorPrinter +*********************************************************************************/ +template +struct SeqVisitorPrinter +{ + SeqVisitorPrinter(Container const& cont, std::ostream* str, size_t row_shift) : m_pStream(str), m_RowShift(row_shift), m_cont(cont) {} + + template + bool operator() (IE & ie) + { + if(!IE::optional || ie.is_valid()) + PrinterAdapter::run(ie, m_pStream, m_RowShift, m_cont); + return true; + } + + std::ostream* m_pStream; + size_t m_RowShift; + Container const& m_cont; +}; + + +/******************************************************************************** +T_NULL +*********************************************************************************/ + +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +/******************************************************************************** +T_BOOLEAN +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << (ie.get() ? "true" : "false")<< std::endl; + } +}; + +/******************************************************************************** +T_INTEGER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_ENUMERATED +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = " << std::hex << std::showbase << (size_t)ie.get() << std::endl; + } +}; + +/******************************************************************************** +T_BITSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + auto& val = ie.get_buffer(); + *str << IE::name() << " = "; + + print_hex(str, val.size() - 1, val.data(), row_shift + strlen(IE::name()) + 3); + + size_t i = val.size() - 1; + uint8_t c = val.data()[i]; + uint8_t b = val.bitqty() % 8; + if (b != 0) c = c << (8 - b); + + if (i && (0x00 == (i & 0x0f))) { skip_row(str, row_shift); } + *str << std::setw(2) << (int)c; + + *str << " (" << std::dec << val.bitqty() << " bits)" << std::endl; + + } +}; + +/******************************************************************************** +T_OCTETSTRING +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << " = "; + auto & val = ie.get(); + print_hex(str, val.size(), val.data(), row_shift + strlen(IE::name()) + 3); + *str << std::endl; + } +}; + +/******************************************************************************** +T_SEQUENCE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SET +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + SeqVisitorPrinter vp(ie, str, row_shift + 1); + ie.encode(vp); + } +}; + + +/******************************************************************************** +T_CHOICE +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + VisitorPrinter vp(str, row_shift+1); + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ie.encode(vp); + } +}; + +/******************************************************************************** +T_SEQUENCE_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_SET_OF +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); *str << IE::name() << ":\n"; + ++row_shift; + for (auto& elem : ie) + { + Print::run(elem, str, row_shift); + } + } +}; + +/******************************************************************************** +T_OBJECTIDENTIFIER +*********************************************************************************/ +template +struct Print +{ + static void inline run(IE const& ie, std::ostream* str, size_t row_shift) + { + skip_row(str, row_shift); + *str << IE::name() << std::endl; + } +}; + +} //namespace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/type_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/type_defs.h new file mode 100644 index 0000000..e7cc539 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/type_defs.h @@ -0,0 +1,36 @@ +#pragma once +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/utility.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/utility.hpp new file mode 100644 index 0000000..ae1ad74 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/utility.hpp @@ -0,0 +1,88 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + +// Local Includes: Application specific classes, functions, and libraries + +namespace asn +{ + +struct allocator +{ + allocator() = default; + + allocator(void* data, size_t size) { reset(data, size); } + + template + explicit allocator(T (&buf)[SZ]) : allocator(buf, SZ * sizeof(T)) { } + + void reset(void* data, size_t size) + { + std::size_t space = size; + m_begin = static_cast(std::align(alignment, size, data, space)); + m_end = m_begin ? m_begin + space : nullptr; + m_current = m_begin; + m_ref_counter = 0; + } + + uint8_t* alloc_bytes(std::size_t size) + { + std::size_t const esize = (size + alignment - 1) & -alignment; + if (m_current + esize > m_end) { return nullptr; } //throw std::bad_alloc(); + + uint8_t* const rval = m_current; + m_current += esize; + return rval; + } + + size_t add_ref() { return ++m_ref_counter; } + size_t release() + { + if (m_ref_counter) --m_ref_counter; + if (m_ref_counter == 0) reset(); + return m_ref_counter; + } + size_t ref_counter() const { return m_ref_counter; } +private: + //called by last release() when m_ref_counter becomes 0 + void reset() + { + m_current = m_begin; + } + + + enum : std::size_t + { + alignment = alignof(std::size_t) + }; + + uint8_t* m_begin { nullptr }; //set in reset() + uint8_t* m_current { nullptr }; //changed by alloc_bytes + uint8_t* m_end { nullptr }; + + size_t m_ref_counter {0}; +}; + +} //namespace asn + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/value_traits.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/value_traits.hpp new file mode 100644 index 0000000..4b67374 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/value_traits.hpp @@ -0,0 +1,187 @@ +#ifndef _STDEX_VALUE_TRAITS_HPP_INCLUDED_ +#define _STDEX_VALUE_TRAITS_HPP_INCLUDED_ + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "type_defs.h" + +namespace stdex { +namespace value { + +namespace mpl = boost::mpl; + +//NOTE! length is in bits +typedef mpl::int_<8> _8; +typedef mpl::int_<16> _16; +typedef mpl::int_<24> _24; +typedef mpl::int_<32> _32; +typedef mpl::int_<40> _40; +typedef mpl::int_<48> _48; +typedef mpl::int_<56> _56; +typedef mpl::int_<64> _64; + +template +struct bits_to_bytes : mpl::int_< (num_bits + 7) / 8 > {}; + +/****************************************************************************** +* Class: value::traits +* Description: select min integer type to fit LEN bits +* Notes: LEN is positive integer type (mpl::int_) = number of bits +******************************************************************************/ +template struct traits; + +template +struct traits + >::type +> +{ + typedef _8 value_length; + typedef u8 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _16 value_length; + typedef u16 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _24 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _32 value_length; + typedef u32 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _40 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _48 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _56 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits, mpl::less_equal > + >::type +> +{ + typedef _64 value_length; + typedef u64 value_type; + typedef value_type param_type; +}; + +template +struct traits + >::type +> +{ + typedef LEN value_length; + struct value_type {u8 value[bits_to_bytes::value];}; + typedef value_type const& param_type; +}; + + +//template +//struct traits +// >::type +//> +//{ +// typedef LEN value_length; +// struct value_type {unsigned char value[LEN::value/8];}; +// typedef value_type const& param_type; +// +//}; + +/****************************************************************************** +* Class: value::traits_c +* Description: select min integer type to fit BITS bits +* Notes: N is positive integer value = number of bits +******************************************************************************/ +template +struct traits_c : traits > +{ +}; + +} //end: namespace value + +} //end: namespace stdex + +#ifdef _MSC_VER +#pragma component( mintypeinfo, off ) +#endif + +#endif //_STDEX_VALUE_TRAITS_HPP_INCLUDED_ diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/variant.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/variant.hpp new file mode 100644 index 0000000..be205aa --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/variant.hpp @@ -0,0 +1,146 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries +#include +#include + + +// Local Includes: Application specific classes, functions, and libraries + + +namespace asn{ + +template +struct variant +{ + typedef variant self_type; + + template + static void check_size () {static_assert(sizeof (T) <= S, "wrong type");} + + variant () + : typeinfo (nullptr) + {} + + template + variant (const T& t) + : typeinfo (&typeid (T)) + { + check_size(); + new (as_()) T (t); + } + + ~variant () + { + assert(!typeinfo); + } + + template + T& build () + { + assert(!typeinfo); + typeinfo = & typeid (T); + return *new (as_()) T; + } + + template + T& build (const T& t) + { + assert(!typeinfo); + check_size(); + typeinfo = & typeid (T); + return *new (as_ ()) T (t); + } + + template + T& as() + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + const T& as() const + { + assert(*typeinfo == typeid (T)); + check_size(); + return *as_ (); + } + + template + void swap(self_type& other) + { + assert (typeinfo); + assert (*typeinfo == *other.typeinfo); + std::swap (as (), other.as ()); + } + + template + void move(self_type& other) + { + build (); + swap (other); + other.destroy (); + } + + template + void copy(const self_type& other) + { + build (other.as ()); + } + + template + void destroy() + { + as ().~T (); + typeinfo = nullptr; + } + +private: + self_type& operator=(const self_type&){} + variant (const self_type&){} + + template + T* as_() + { + void *p = buffer.raw; + return static_cast (p); + } + + template + const T* as_() const + { + const void *p = buffer.raw; + return static_cast (p); + } + + union + { + long double align_me; + char raw[S]; + } buffer; + + const std::type_info *typeinfo; +}; + +} //namspace asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/version.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/version.hpp new file mode 100644 index 0000000..50854f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/asn/version.hpp @@ -0,0 +1,27 @@ +#pragma once + +/****************************************************************************** +* +* Copyright (c) 2019 AT&T Intellectual Property. +* Copyright (c) 2018-2019 Nokia. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Local Includes: Application specific classes, functions, and libraries + +#define ASN_API_VERSION_MAJOR 5 +#define ASN_API_VERSION_MINOR 0 diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp new file mode 100644 index 0000000..2ed8200 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-Constants.hpp @@ -0,0 +1,244 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-RANfunction-Item ProtocolIE-ID ::= 60001 +*/ + +constexpr int64_t id_RANfunction_Item = 60001; +/* +id-RANfunctionDefinition ProtocolIE-ID ::= 60002 +*/ + +constexpr int64_t id_RANfunctionDefinition = 60002; +/* +id-RANfunctionID ProtocolIE-ID ::= 60003 +*/ + +constexpr int64_t id_RANfunctionID = 60003; +/* +id-RANfunctionID-Item ProtocolIE-ID ::= 60004 +*/ + +constexpr int64_t id_RANfunctionID_Item = 60004; +/* +id-RANfunctionIEcause-Item ProtocolIE-ID ::= 60005 +*/ + +constexpr int64_t id_RANfunctionIEcause_Item = 60005; +/* +id-RANfunctionsAccepted ProtocolIE-ID ::= 60006 +*/ + +constexpr int64_t id_RANfunctionsAccepted = 60006; +/* +id-RANfunctionsAdded ProtocolIE-ID ::= 60007 +*/ + +constexpr int64_t id_RANfunctionsAdded = 60007; +/* +id-RANfunctionsDeleted ProtocolIE-ID ::= 60008 +*/ + +constexpr int64_t id_RANfunctionsDeleted = 60008; +/* +id-RANfunctionsModified ProtocolIE-ID ::= 60009 +*/ + +constexpr int64_t id_RANfunctionsModified = 60009; +/* +id-RANfunctionsRejected ProtocolIE-ID ::= 60010 +*/ + +constexpr int64_t id_RANfunctionsRejected = 60010; +/* +id-RICaction-Admitted-Item ProtocolIE-ID ::= 60013 +*/ + +constexpr int64_t id_RICaction_Admitted_Item = 60013; +/* +id-RICaction-NotAdmitted-Item ProtocolIE-ID ::= 60015 +*/ + +constexpr int64_t id_RICaction_NotAdmitted_Item = 60015; +/* +id-RICaction-ToBeSetup-Item ProtocolIE-ID ::= 60011 +*/ + +constexpr int64_t id_RICaction_ToBeSetup_Item = 60011; +/* +id-RICactionDefinition ProtocolIE-ID ::= 60016 +*/ + +constexpr int64_t id_RICactionDefinition = 60016; +/* +id-RICactionID ProtocolIE-ID ::= 60017 +*/ + +constexpr int64_t id_RICactionID = 60017; +/* +id-RICactionType ProtocolIE-ID ::= 60018 +*/ + +constexpr int64_t id_RICactionType = 60018; +/* +id-RICactions-Admitted ProtocolIE-ID ::= 60012 +*/ + +constexpr int64_t id_RICactions_Admitted = 60012; +/* +id-RICactions-NotAdmitted ProtocolIE-ID ::= 60014 +*/ + +constexpr int64_t id_RICactions_NotAdmitted = 60014; +/* +id-RICcallProcessID ProtocolIE-ID ::= 60019 +*/ + +constexpr int64_t id_RICcallProcessID = 60019; +/* +id-RICcause ProtocolIE-ID ::= 60020 +*/ + +constexpr int64_t id_RICcause = 60020; +/* +id-RICcontrolAckRequest ProtocolIE-ID ::= 60021 +*/ + +constexpr int64_t id_RICcontrolAckRequest = 60021; +/* +id-RICcontrolHeader ProtocolIE-ID ::= 60022 +*/ + +constexpr int64_t id_RICcontrolHeader = 60022; +/* +id-RICcontrolMessage ProtocolIE-ID ::= 60023 +*/ + +constexpr int64_t id_RICcontrolMessage = 60023; +/* +id-RICcontrolStatus ProtocolIE-ID ::= 60024 +*/ + +constexpr int64_t id_RICcontrolStatus = 60024; +/* +id-RICeventTriggerDefinition ProtocolIE-ID ::= 60025 +*/ + +constexpr int64_t id_RICeventTriggerDefinition = 60025; +/* +id-RICindicationHeader ProtocolIE-ID ::= 60026 +*/ + +constexpr int64_t id_RICindicationHeader = 60026; +/* +id-RICindicationMessage ProtocolIE-ID ::= 60027 +*/ + +constexpr int64_t id_RICindicationMessage = 60027; +/* +id-RICindicationSN ProtocolIE-ID ::= 60028 +*/ + +constexpr int64_t id_RICindicationSN = 60028; +/* +id-RICindicationType ProtocolIE-ID ::= 60029 +*/ + +constexpr int64_t id_RICindicationType = 60029; +/* +id-RICrequestID ProtocolIE-ID ::= 60030 +*/ + +constexpr int64_t id_RICrequestID = 60030; +/* +id-RICrequestSequenceNumber ProtocolIE-ID ::= 60032 +*/ + +constexpr int64_t id_RICrequestSequenceNumber = 60032; +/* +id-RICrequestorID ProtocolIE-ID ::= 60031 +*/ + +constexpr int64_t id_RICrequestorID = 60031; +/* +id-RICsubscription ProtocolIE-ID ::= 60033 +*/ + +constexpr int64_t id_RICsubscription = 60033; +/* +id-RICsubsequentAction ProtocolIE-ID ::= 60034 +*/ + +constexpr int64_t id_RICsubsequentAction = 60034; +/* +id-RICsubsequentActionType ProtocolIE-ID ::= 60035 +*/ + +constexpr int64_t id_RICsubsequentActionType = 60035; +/* +id-RICtimeToWait ProtocolIE-ID ::= 60036 +*/ + +constexpr int64_t id_RICtimeToWait = 60036; +/* +id-ricControl ProcedureCode ::= 204 +*/ + +constexpr int64_t id_ricControl = 204; +/* +id-ricIndication ProcedureCode ::= 205 +*/ + +constexpr int64_t id_ricIndication = 205; +/* +id-ricServiceQuery ProcedureCode ::= 206 +*/ + +constexpr int64_t id_ricServiceQuery = 206; +/* +id-ricServiceUpdate ProcedureCode ::= 203 +*/ + +constexpr int64_t id_ricServiceUpdate = 203; +/* +id-ricSubscription ProcedureCode ::= 201 +*/ + +constexpr int64_t id_ricSubscription = 201; +/* +id-ricSubscriptionDelete ProcedureCode ::= 202 +*/ + +constexpr int64_t id_ricSubscriptionDelete = 202; +/* +maxofRANfunctionID INTEGER ::=256 +*/ + +constexpr int64_t maxofRANfunctionID = 256; +/* +maxofRICactionID INTEGER ::= 16 +*/ + +constexpr int64_t maxofRICactionID = 16; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp new file mode 100644 index 0000000..40f7bbb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-IEs.hpp @@ -0,0 +1,568 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" + +/* +CauseRIC ::= ENUMERATED { + 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, + function-not-required, + excessive-functions, + ric-resource-limit, + ... +} +*/ + +struct CauseRIC : asn::enumerated<13, 0, true> +{ + static constexpr const char* name() {return "CauseRIC";} + using parent_t = asn::enumerated<13, 0, true>; + typedef enum { + 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 + ,function_not_required + ,excessive_functions + ,ric_resource_limit + } index_t; + +}; + +/* +RANfunctionDefinition ::= OCTET STRING +*/ + +struct RANfunctionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RANfunctionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RANfunctionID ::= INTEGER (0..4095) +*/ + +struct RANfunctionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RANfunctionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionDefinition ::= OCTET STRING +*/ + +struct RICactionDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICactionDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICactionID ::= INTEGER (0..255) +*/ + +struct RICactionID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICactionID";} + using parent_t = asn::integer<>; + +}; + +/* +RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... +} +*/ + +struct RICactionType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICactionType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + report + ,insert + ,policy + } index_t; + +}; + +/* +RICcallProcessID ::= OCTET STRING +*/ + +struct RICcallProcessID : asn::ostring<> +{ + static constexpr const char* name() {return "RICcallProcessID";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ric CauseRIC, + ... +} +*/ + +struct RICcause : asn::choice<5, 0, true> +{ + static constexpr const char* name() {return "RICcause";} + using parent_t = asn::choice<5, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 6;} + void set_unknown() { set_index(6); } + ~RICcause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + struct ric_t : CauseRIC + { + static constexpr const char* name() {return "ric_t";} + using parent_t = CauseRIC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + case 5: set_index(5); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + case 5: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + ric_t& select_ric() { if(get_index() != 5) { clear(); set_index(5); return var.build();} return var.as();} + ric_t const* get_ric() const { if(get_index() == 5) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + char dummy5[sizeof(ric_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RICcontrolAckRequest ::= ENUMERATED{ + noAck, + ack, + nAck, + ... +} +*/ + +struct RICcontrolAckRequest : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolAckRequest";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + noAck + ,ack + ,nAck + } index_t; + +}; + +/* +RICcontrolHeader ::= OCTET STRING +*/ + +struct RICcontrolHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolMessage ::= OCTET STRING +*/ + +struct RICcontrolMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICcontrolMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICcontrolStatus ::= ENUMERATED{ + success, + rejected, + failed, + ... +} +*/ + +struct RICcontrolStatus : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RICcontrolStatus";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + success + ,rejected + ,failed + } index_t; + +}; + +/* +RICeventTriggerDefinition ::= OCTET STRING +*/ + +struct RICeventTriggerDefinition : asn::ostring<> +{ + static constexpr const char* name() {return "RICeventTriggerDefinition";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationHeader ::= OCTET STRING +*/ + +struct RICindicationHeader : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationHeader";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationMessage ::= OCTET STRING +*/ + +struct RICindicationMessage : asn::ostring<> +{ + static constexpr const char* name() {return "RICindicationMessage";} + using parent_t = asn::ostring<>; + +}; + +/* +RICindicationSN ::= INTEGER (0..65535) +*/ + +struct RICindicationSN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RICindicationSN";} + using parent_t = asn::integer<>; + +}; + +/* +RICindicationType ::= ENUMERATED{ + report, + insert, + ... +} +*/ + +struct RICindicationType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICindicationType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + report + ,insert + } index_t; + +}; + +/* +RICrequestID ::= SEQUENCE { + ricRequestorID INTEGER (0..65535), + ricRequestSequenceNumber INTEGER (0..65535), + ... +} +*/ + +struct RICrequestID : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICrequestID";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricRequestorID_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestorID_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestorID_t& ref_ricRequestorID() {return ricRequestorID;} + ricRequestorID_t const& ref_ricRequestorID() const {return ricRequestorID;} + struct ricRequestSequenceNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ricRequestSequenceNumber_t";} + using parent_t = asn::integer<>; + + }; + + ricRequestSequenceNumber_t& ref_ricRequestSequenceNumber() {return ricRequestSequenceNumber;} + ricRequestSequenceNumber_t const& ref_ricRequestSequenceNumber() const {return ricRequestSequenceNumber;} + template void decode(V& v) + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + template void encode(V& v) const + { + v(ricRequestorID); + v(ricRequestSequenceNumber); + + }; + void clear() + { + ricRequestorID.clear(); + ricRequestSequenceNumber.clear(); + + }; + private: + ricRequestorID_t ricRequestorID; + ricRequestSequenceNumber_t ricRequestSequenceNumber; + +}; +/* +RICsubsequentActionType ::= ENUMERATED{ + continue, + wait, + ... +} +*/ + +struct RICsubsequentActionType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RICsubsequentActionType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + Continue + ,wait + } index_t; + +}; + +/* +RICtimeToWait ::= ENUMERATED{ + zero, + w1ms, + w2ms, + w5ms, + w10ms, + w20ms, + w30ms, + w40ms, + w50ms, + w100ms, + w200ms, + w500ms, + w1s, + w2s, + w5s, + w10s, + w20s, + w60s, + ... +} +*/ + +struct RICtimeToWait : asn::enumerated<18, 0, true> +{ + static constexpr const char* name() {return "RICtimeToWait";} + using parent_t = asn::enumerated<18, 0, true>; + typedef enum { + zero + ,w1ms + ,w2ms + ,w5ms + ,w10ms + ,w20ms + ,w30ms + ,w40ms + ,w50ms + ,w100ms + ,w200ms + ,w500ms + ,w1s + ,w2s + ,w5s + ,w10s + ,w20s + ,w60s + } index_t; + +}; + +/* +RICsubsequentAction ::=SEQUENCE{ + ricSubsequentActionType RICsubsequentActionType, + ricTimeToWait RICtimeToWait, + ... +} +*/ + +struct RICsubsequentAction : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubsequentAction";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricSubsequentActionType_t : RICsubsequentActionType + { + static constexpr const char* name() {return "ricSubsequentActionType_t";} + using parent_t = RICsubsequentActionType; + + }; + ricSubsequentActionType_t& ref_ricSubsequentActionType() {return ricSubsequentActionType;} + ricSubsequentActionType_t const& ref_ricSubsequentActionType() const {return ricSubsequentActionType;} + struct ricTimeToWait_t : RICtimeToWait + { + static constexpr const char* name() {return "ricTimeToWait_t";} + using parent_t = RICtimeToWait; + + }; + ricTimeToWait_t& ref_ricTimeToWait() {return ricTimeToWait;} + ricTimeToWait_t const& ref_ricTimeToWait() const {return ricTimeToWait;} + template void decode(V& v) + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + template void encode(V& v) const + { + v(ricSubsequentActionType); + v(ricTimeToWait); + + }; + void clear() + { + ricSubsequentActionType.clear(); + ricTimeToWait.clear(); + + }; + private: + ricSubsequentActionType_t ricSubsequentActionType; + ricTimeToWait_t ricTimeToWait; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp new file mode 100644 index 0000000..e2073d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Contents.hpp @@ -0,0 +1,5512 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "E2AP-IEs.hpp" +#include "X2AP-IEs.hpp" +#include "X2AP-Constants.hpp" +#include "X2AP-Containers.hpp" +#include "E2AP-Constants.hpp" + +/* +RANfunction-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ranFunctionDefinition RANfunctionDefinition, + ... +} +*/ + +struct RANfunction_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunction-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ranFunctionDefinition_t : RANfunctionDefinition + { + static constexpr const char* name() {return "ranFunctionDefinition_t";} + using parent_t = RANfunctionDefinition; + + }; + ranFunctionDefinition_t& ref_ranFunctionDefinition() {return ranFunctionDefinition;} + ranFunctionDefinition_t const& ref_ranFunctionDefinition() const {return ranFunctionDefinition;} + template void decode(V& v) + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ranFunctionDefinition); + + }; + void clear() + { + ranFunctionID.clear(); + ranFunctionDefinition.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ranFunctionDefinition_t ranFunctionDefinition; + +}; +/* +RANfunction-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunction-Item CRITICALITY ignore TYPE RANfunction-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunction_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(id_RANfunction_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunction_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunction_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunction_Item& select_id_RANfunction_Item() { return set(1); } + RANfunction_Item const* get_id_RANfunction_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunction_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunction_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunction_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionID-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ... +} +*/ + +struct RANfunctionID_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionID-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + template void decode(V& v) + { + v(ranFunctionID); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + + }; + void clear() + { + ranFunctionID.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + +}; +/* +RANfunctionID-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionID-Item CRITICALITY ignore TYPE RANfunctionID-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionID_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(id_RANfunctionID_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionID_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionID_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionID_Item& select_id_RANfunctionID_Item() { return set(1); } + RANfunctionID_Item const* get_id_RANfunctionID_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionID_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionID_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctionIDcause-Item ::= SEQUENCE { + ranFunctionID RANfunctionID, + ricCause RICcause, + ... +} +*/ + +struct RANfunctionIDcause_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RANfunctionIDcause-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ranFunctionID_t : RANfunctionID + { + static constexpr const char* name() {return "ranFunctionID_t";} + using parent_t = RANfunctionID; + + }; + ranFunctionID_t& ref_ranFunctionID() {return ranFunctionID;} + ranFunctionID_t const& ref_ranFunctionID() const {return ranFunctionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ranFunctionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ranFunctionID); + v(ricCause); + + }; + void clear() + { + ranFunctionID.clear(); + ricCause.clear(); + + }; + private: + ranFunctionID_t ranFunctionID; + ricCause_t ricCause; + +}; +/* +RANfunctionIDcause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionIEcause-Item CRITICALITY ignore TYPE RANfunctionIDcause-Item PRESENCE mandatory }, + ... +} +*/ + +struct RANfunctionIDcause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(id_RANfunctionIEcause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionIEcause_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionIEcause_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionIDcause_Item& select_id_RANfunctionIEcause_Item() { return set(1); } + RANfunctionIDcause_Item const* get_id_RANfunctionIEcause_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionIEcause_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionIDcause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionIEcause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunction-ItemIEs} } +*/ + +struct RANfunctions_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctions_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctions_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctions-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsID-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container{{RANfunctionID-ItemIEs}} +*/ + +struct RANfunctionsID_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsID_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsID_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsID-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RANfunctionsIDcause-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-Single-Container { {RANfunctionIDcause-ItemIEs} } +*/ + +struct RANfunctionsIDcause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RANfunctionsIDcause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RANfunctionsIDcause_List : asn::sequenceof +{ + static constexpr const char* name() {return "RANfunctionsIDcause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-Admitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ... +} +*/ + +struct RICaction_Admitted_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-Admitted-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + template void decode(V& v) + { + v(ricActionID); + + }; + template void encode(V& v) const + { + v(ricActionID); + + }; + void clear() + { + ricActionID.clear(); + + }; + private: + ricActionID_t ricActionID; + +}; +/* +RICaction-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-Admitted-Item CRITICALITY ignore TYPE RICaction-Admitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(id_RICaction_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_Admitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_Admitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_Admitted_Item& select_id_RICaction_Admitted_Item() { return set(1); } + RICaction_Admitted_Item const* get_id_RICaction_Admitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_Admitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-Admitted-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container{{RICaction-Admitted-ItemIEs}} +*/ + +struct RICaction_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-NotAdmitted-Item ::= SEQUENCE { + ricActionID RICactionID, + ricCause RICcause, + ... +} +*/ + +struct RICaction_NotAdmitted_Item : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-Item";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricCause_t : RICcause + { + static constexpr const char* name() {return "ricCause_t";} + using parent_t = RICcause; + + }; + ricCause_t& ref_ricCause() {return ricCause;} + ricCause_t const& ref_ricCause() const {return ricCause;} + template void decode(V& v) + { + v(ricActionID); + v(ricCause); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricCause); + + }; + void clear() + { + ricActionID.clear(); + ricCause.clear(); + + }; + private: + ricActionID_t ricActionID; + ricCause_t ricCause; + +}; +/* +RICaction-NotAdmitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-NotAdmitted-Item CRITICALITY ignore TYPE RICaction-NotAdmitted-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_NotAdmitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(id_RICaction_NotAdmitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_NotAdmitted_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_NotAdmitted_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_NotAdmitted_Item& select_id_RICaction_NotAdmitted_Item() { return set(1); } + RICaction_NotAdmitted_Item const* get_id_RICaction_NotAdmitted_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_NotAdmitted_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_NotAdmitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_NotAdmitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICaction-NotAdmitted-List ::= SEQUENCE (SIZE(0..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-NotAdmitted-ItemIEs} } +*/ + +struct RICaction_NotAdmitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICaction_NotAdmitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICaction_NotAdmitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICaction-NotAdmitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICaction-ToBeSetup-Item ::= SEQUENCE { + ricActionID RICactionID, + ricActionType RICactionType, + ricActionDefinition RICactionDefinition OPTIONAL, + ricSubsequentAction RICsubsequentAction OPTIONAL, + ... +} +*/ + +struct RICaction_ToBeSetup_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "RICaction-ToBeSetup-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct ricActionID_t : RICactionID + { + static constexpr const char* name() {return "ricActionID_t";} + using parent_t = RICactionID; + + }; + ricActionID_t& ref_ricActionID() {return ricActionID;} + ricActionID_t const& ref_ricActionID() const {return ricActionID;} + struct ricActionType_t : RICactionType + { + static constexpr const char* name() {return "ricActionType_t";} + using parent_t = RICactionType; + + }; + ricActionType_t& ref_ricActionType() {return ricActionType;} + ricActionType_t const& ref_ricActionType() const {return ricActionType;} + struct ricActionDefinition_t : RICactionDefinition + { + static constexpr const char* name() {return "ricActionDefinition_t";} + using parent_t = RICactionDefinition; + static constexpr bool optional = true; + + }; + ricActionDefinition_t& set_ricActionDefinition() { ricActionDefinition.setpresent(true); return ricActionDefinition;} + ricActionDefinition_t const* get_ricActionDefinition() const {return ricActionDefinition.is_valid() ? &ricActionDefinition : nullptr;} + struct ricSubsequentAction_t : RICsubsequentAction + { + static constexpr const char* name() {return "ricSubsequentAction_t";} + using parent_t = RICsubsequentAction; + static constexpr bool optional = true; + + }; + ricSubsequentAction_t& set_ricSubsequentAction() { ricSubsequentAction.setpresent(true); return ricSubsequentAction;} + ricSubsequentAction_t const* get_ricSubsequentAction() const {return ricSubsequentAction.is_valid() ? &ricSubsequentAction : nullptr;} + template void decode(V& v) + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + template void encode(V& v) const + { + v(ricActionID); + v(ricActionType); + v(ricActionDefinition); + v(ricSubsequentAction); + + }; + void clear() + { + ricActionID.clear(); + ricActionType.clear(); + ricActionDefinition.clear(); + ricSubsequentAction.clear(); + + }; + private: + ricActionID_t ricActionID; + ricActionType_t ricActionType; + ricActionDefinition_t ricActionDefinition; + ricSubsequentAction_t ricSubsequentAction; + +}; +/* +RICaction-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-RICaction-ToBeSetup-Item CRITICALITY ignore TYPE RICaction-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct RICaction_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(id_RICaction_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICaction_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICaction_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICaction_ToBeSetup_Item& select_id_RICaction_ToBeSetup_Item() { return set(1); } + RICaction_ToBeSetup_Item const* get_id_RICaction_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICaction_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RICaction_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RICaction_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } +*/ + +struct RICactions_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "RICactions_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct RICactions_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "RICactions-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RICcontrolAcknowledge-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolStatus() { set(id_RICcontrolStatus); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolStatus)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolStatus);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolStatus() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolStatus& select_id_RICcontrolStatus() { return set(4); } + RICcontrolStatus const* get_id_RICcontrolStatus() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolStatus()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolStatus)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolStatus() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolAcknowledge-IEs}}, + ... +} +*/ + +struct RICcontrolAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolFailure-IEs X2AP-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-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}, + ... +} +*/ + +struct RICcontrolFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcause() { set(id_RICcause); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcause)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcause() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcause& select_id_RICcause() { return set(4); } + RICcause const* get_id_RICcause() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcause()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcause() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolFailure-IEs}}, + ... +} +*/ + +struct RICcontrolFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICcontrolRequest-IEs X2AP-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}, + ... +} +*/ + +struct RICcontrolRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=3;} + void select_id_RICcontrolHeader() { set(id_RICcontrolHeader); type=4;} + void select_id_RICcontrolMessage() { set(id_RICcontrolMessage); type=5;} + void select_id_RICcontrolAckRequest() { set(id_RICcontrolAckRequest); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcallProcessID)) { type = 3; return true; } + else if(equal(id_RICcontrolHeader)) { type = 4; return true; } + else if(equal(id_RICcontrolMessage)) { type = 5; return true; } + else if(equal(id_RICcontrolAckRequest)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICcontrolHeader);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICcontrolMessage);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICcontrolAckRequest);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcallProcessID() { set(reject); type=3;} + void select_id_RICcontrolHeader() { set(reject); type=4;} + void select_id_RICcontrolMessage() { set(reject); type=5;} + void select_id_RICcontrolAckRequest() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcallProcessID& select_id_RICcallProcessID() { return set(3); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(3); } + RICcontrolHeader& select_id_RICcontrolHeader() { return set(4); } + RICcontrolHeader const* get_id_RICcontrolHeader() const { return get(4); } + RICcontrolMessage& select_id_RICcontrolMessage() { return set(5); } + RICcontrolMessage const* get_id_RICcontrolMessage() const { return get(5); } + RICcontrolAckRequest& select_id_RICcontrolAckRequest() { return set(6); } + RICcontrolAckRequest const* get_id_RICcontrolAckRequest() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcallProcessID()); return true; + case 4: v(select_id_RICcontrolHeader()); return true; + case 5: v(select_id_RICcontrolMessage()); return true; + case 6: v(select_id_RICcontrolAckRequest()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICcallProcessID)]; + char dummy3[sizeof(RICcontrolAckRequest)]; + char dummy4[sizeof(RICcontrolHeader)]; + char dummy5[sizeof(RICcontrolMessage)]; + char dummy6[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcallProcessID() { set(optional); type=3;} + void select_id_RICcontrolHeader() { set(mandatory); type=4;} + void select_id_RICcontrolMessage() { set(mandatory); type=5;} + void select_id_RICcontrolAckRequest() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICcontrolRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICcontrolRequest-IEs}}, + ... +} +*/ + +struct RICcontrolRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICcontrolRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICindication-IEs X2AP-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 mandatory}| + { 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}, + ... +} +*/ + +struct RICindication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactionID() { set(id_RICactionID); type=3;} + void select_id_RICindicationSN() { set(id_RICindicationSN); type=4;} + void select_id_RICindicationType() { set(id_RICindicationType); type=5;} + void select_id_RICindicationHeader() { set(id_RICindicationHeader); type=6;} + void select_id_RICindicationMessage() { set(id_RICindicationMessage); type=7;} + void select_id_RICcallProcessID() { set(id_RICcallProcessID); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactionID)) { type = 3; return true; } + else if(equal(id_RICindicationSN)) { type = 4; return true; } + else if(equal(id_RICindicationType)) { type = 5; return true; } + else if(equal(id_RICindicationHeader)) { type = 6; return true; } + else if(equal(id_RICindicationMessage)) { type = 7; return true; } + else if(equal(id_RICcallProcessID)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactionID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICindicationSN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_RICindicationType);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RICindicationHeader);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RICindicationMessage);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_RICcallProcessID);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactionID() { set(reject); type=3;} + void select_id_RICindicationSN() { set(reject); type=4;} + void select_id_RICindicationType() { set(reject); type=5;} + void select_id_RICindicationHeader() { set(reject); type=6;} + void select_id_RICindicationMessage() { set(reject); type=7;} + void select_id_RICcallProcessID() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICactionID& select_id_RICactionID() { return set(3); } + RICactionID const* get_id_RICactionID() const { return get(3); } + RICindicationSN& select_id_RICindicationSN() { return set(4); } + RICindicationSN const* get_id_RICindicationSN() const { return get(4); } + RICindicationType& select_id_RICindicationType() { return set(5); } + RICindicationType const* get_id_RICindicationType() const { return get(5); } + RICindicationHeader& select_id_RICindicationHeader() { return set(6); } + RICindicationHeader const* get_id_RICindicationHeader() const { return get(6); } + RICindicationMessage& select_id_RICindicationMessage() { return set(7); } + RICindicationMessage const* get_id_RICindicationMessage() const { return get(7); } + RICcallProcessID& select_id_RICcallProcessID() { return set(8); } + RICcallProcessID const* get_id_RICcallProcessID() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactionID()); return true; + case 4: v(select_id_RICindicationSN()); return true; + case 5: v(select_id_RICindicationType()); return true; + case 6: v(select_id_RICindicationHeader()); return true; + case 7: v(select_id_RICindicationMessage()); return true; + case 8: v(select_id_RICcallProcessID()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICactionID)]; + char dummy3[sizeof(RICcallProcessID)]; + char dummy4[sizeof(RICindicationHeader)]; + char dummy5[sizeof(RICindicationMessage)]; + char dummy6[sizeof(RICindicationSN)]; + char dummy7[sizeof(RICindicationType)]; + char dummy8[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactionID() { set(mandatory); type=3;} + void select_id_RICindicationSN() { set(mandatory); type=4;} + void select_id_RICindicationType() { set(mandatory); type=5;} + void select_id_RICindicationHeader() { set(mandatory); type=6;} + void select_id_RICindicationMessage() { set(mandatory); type=7;} + void select_id_RICcallProcessID() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICindication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICindication-IEs}}, + ... +} +*/ + +struct RICindication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICindication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceQuery-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceQuery_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceQuery ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceQuery-IEs}}, + ... +} +*/ + +struct RICserviceQuery : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceQuery";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdate-IEs X2AP-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}, + ... +} +*/ + +struct RICserviceUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(id_RANfunctionsAdded); type=1;} + void select_id_RANfunctionsModified() { set(id_RANfunctionsModified); type=2;} + void select_id_RANfunctionsDeleted() { set(id_RANfunctionsDeleted); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAdded)) { type = 1; return true; } + else if(equal(id_RANfunctionsModified)) { type = 2; return true; } + else if(equal(id_RANfunctionsDeleted)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAdded);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsModified);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RANfunctionsDeleted);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(reject); type=1;} + void select_id_RANfunctionsModified() { set(reject); type=2;} + void select_id_RANfunctionsDeleted() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctions_List& select_id_RANfunctionsAdded() { return set(1); } + RANfunctions_List const* get_id_RANfunctionsAdded() const { return get(1); } + RANfunctions_List& select_id_RANfunctionsModified() { return set(2); } + RANfunctions_List const* get_id_RANfunctionsModified() const { return get(2); } + RANfunctionsID_List& select_id_RANfunctionsDeleted() { return set(3); } + RANfunctionsID_List const* get_id_RANfunctionsDeleted() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAdded()); return true; + case 2: v(select_id_RANfunctionsModified()); return true; + case 3: v(select_id_RANfunctionsDeleted()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctions_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsAdded() { set(optional); type=1;} + void select_id_RANfunctionsModified() { set(optional); type=2;} + void select_id_RANfunctionsDeleted() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdate-IEs}}, + ... +} +*/ + +struct RICserviceUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional}| + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(id_RANfunctionsAccepted); type=1;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsAccepted)) { type = 1; return true; } + else if(equal(id_RANfunctionsRejected)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsAccepted);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(reject); type=1;} + void select_id_RANfunctionsRejected() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsID_List& select_id_RANfunctionsAccepted() { return set(1); } + RANfunctionsID_List const* get_id_RANfunctionsAccepted() const { return get(1); } + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(2); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsAccepted()); return true; + case 2: v(select_id_RANfunctionsRejected()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionsID_List)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RANfunctionsAccepted() { set(optional); type=1;} + void select_id_RANfunctionsRejected() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct RICserviceUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICserviceUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICserviceUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(id_RANfunctionsRejected); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RANfunctionsRejected)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RANfunctionsRejected);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(reject); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RANfunctionsIDcause_List& select_id_RANfunctionsRejected() { return set(1); } + RANfunctionsIDcause_List const* get_id_RANfunctionsRejected() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RANfunctionsRejected()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionsIDcause_List)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RANfunctionsRejected() { set(optional); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICserviceUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICserviceUpdateFailure-IEs}}, + ... +} +*/ + +struct RICserviceUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICserviceUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... +} +*/ + +struct RICsubscription : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscription";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct ricEventTriggerDefinition_t : RICeventTriggerDefinition + { + static constexpr const char* name() {return "ricEventTriggerDefinition_t";} + using parent_t = RICeventTriggerDefinition; + + }; + ricEventTriggerDefinition_t& ref_ricEventTriggerDefinition() {return ricEventTriggerDefinition;} + ricEventTriggerDefinition_t const& ref_ricEventTriggerDefinition() const {return ricEventTriggerDefinition;} + struct ricAction_ToBeSetup_List_t : RICactions_ToBeSetup_List + { + static constexpr const char* name() {return "ricAction_ToBeSetup_List_t";} + using parent_t = RICactions_ToBeSetup_List; + + }; + ricAction_ToBeSetup_List_t& ref_ricAction_ToBeSetup_List() {return ricAction_ToBeSetup_List;} + ricAction_ToBeSetup_List_t const& ref_ricAction_ToBeSetup_List() const {return ricAction_ToBeSetup_List;} + template void decode(V& v) + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + template void encode(V& v) const + { + v(ricEventTriggerDefinition); + v(ricAction_ToBeSetup_List); + + }; + void clear() + { + ricEventTriggerDefinition.clear(); + ricAction_ToBeSetup_List.clear(); + + }; + private: + ricEventTriggerDefinition_t ricEventTriggerDefinition; + ricAction_ToBeSetup_List_t ricAction_ToBeSetup_List; + +}; +/* +RICsubscriptionDeleteFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICcause CRITICALITY reject TYPE RICcause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICcause() { set(id_RICcause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICcause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICcause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICcause() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICcause& select_id_RICcause() { return set(3); } + RICcause const* get_id_RICcause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICcause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICcause)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICcause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionDeleteResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionDeleteResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionDeleteResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionDeleteResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionFailure-IEs X2AP-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}, + ... +} +*/ + +struct RICsubscriptionFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_NotAdmitted() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(3); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_NotAdmitted()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(RANfunctionID)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_NotAdmitted() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionFailure-IEs}}, + ... +} +*/ + +struct RICsubscriptionFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| + { ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| + { ID id-RICsubscription CRITICALITY reject TYPE RICsubscription PRESENCE mandatory}, + ... +} +*/ + +struct RICsubscriptionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICsubscription() { set(id_RICsubscription); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICsubscription)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICsubscription);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICsubscription() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICsubscription& select_id_RICsubscription() { return set(3); } + RICsubscription const* get_id_RICsubscription() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICsubscription()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICrequestID)]; + char dummy3[sizeof(RICsubscription)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICsubscription() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RICsubscriptionRequest-IEs}}, + ... +} +*/ + +struct RICsubscriptionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RICsubscriptionResponse-IEs X2AP-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 }, + ... +} +*/ + +struct RICsubscriptionResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(id_RICrequestID); type=1;} + void select_id_RANfunctionID() { set(id_RANfunctionID); type=2;} + void select_id_RICactions_Admitted() { set(id_RICactions_Admitted); type=3;} + void select_id_RICactions_NotAdmitted() { set(id_RICactions_NotAdmitted); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RICrequestID)) { type = 1; return true; } + else if(equal(id_RANfunctionID)) { type = 2; return true; } + else if(equal(id_RICactions_Admitted)) { type = 3; return true; } + else if(equal(id_RICactions_NotAdmitted)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RICrequestID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RANfunctionID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RICactions_Admitted);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_RICactions_NotAdmitted);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(reject); type=1;} + void select_id_RANfunctionID() { set(reject); type=2;} + void select_id_RICactions_Admitted() { set(reject); type=3;} + void select_id_RICactions_NotAdmitted() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RICrequestID& select_id_RICrequestID() { return set(1); } + RICrequestID const* get_id_RICrequestID() const { return get(1); } + RANfunctionID& select_id_RANfunctionID() { return set(2); } + RANfunctionID const* get_id_RANfunctionID() const { return get(2); } + RICaction_Admitted_List& select_id_RICactions_Admitted() { return set(3); } + RICaction_Admitted_List const* get_id_RICactions_Admitted() const { return get(3); } + RICaction_NotAdmitted_List& select_id_RICactions_NotAdmitted() { return set(4); } + RICaction_NotAdmitted_List const* get_id_RICactions_NotAdmitted() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RICrequestID()); return true; + case 2: v(select_id_RANfunctionID()); return true; + case 3: v(select_id_RICactions_Admitted()); return true; + case 4: v(select_id_RICactions_NotAdmitted()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RANfunctionID)]; + char dummy2[sizeof(RICaction_Admitted_List)]; + char dummy3[sizeof(RICaction_NotAdmitted_List)]; + char dummy4[sizeof(RICrequestID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_RICrequestID() { set(mandatory); type=1;} + void select_id_RANfunctionID() { set(mandatory); type=2;} + void select_id_RICactions_Admitted() { set(mandatory); type=3;} + void select_id_RICactions_NotAdmitted() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RICsubscriptionResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container{{RICsubscriptionResponse-IEs}}, + ... +} +*/ + +struct RICsubscriptionResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RICsubscriptionResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..f426b97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/E2AP-PDU-Descriptions.hpp @@ -0,0 +1,980 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" +#include "E2AP-PDU-Contents.hpp" +#include "E2AP-Constants.hpp" + +/* +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] +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= { + E2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + E2AP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} +*/ + +struct E2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionRequest& select_id_ricSubscription() { return set(1); } + RICsubscriptionRequest const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteRequest& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteRequest const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdate& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdate const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolRequest& select_id_ricControl() { return set(4); } + RICcontrolRequest const* get_id_ricControl() const { return get(4); } + X2SetupRequest& select_id_x2Setup() { return set(5); } + X2SetupRequest const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetRequest& select_id_reset() { return set(10); } + ResetRequest const* get_id_reset() const { return get(10); } + RICindication& select_id_ricIndication() { return set(11); } + RICindication const* get_id_ricIndication() const { return get(11); } + RICserviceQuery& select_id_ricServiceQuery() { return set(12); } + RICserviceQuery const* get_id_ricServiceQuery() const { return get(12); } + LoadInformation& select_id_loadIndication() { return set(13); } + LoadInformation const* get_id_loadIndication() const { return get(13); } + GNBStatusIndication& select_id_gNBStatusIndication() { return set(14); } + GNBStatusIndication const* get_id_gNBStatusIndication() const { return get(14); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(15); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(15); } + ErrorIndication& select_id_errorIndication() { return set(16); } + ErrorIndication const* get_id_errorIndication() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 11: v(select_id_ricIndication()); return true; + case 12: v(select_id_ricServiceQuery()); return true; + case 13: v(select_id_loadIndication()); return true; + case 14: v(select_id_gNBStatusIndication()); return true; + case 15: v(select_id_resourceStatusReporting()); return true; + case 16: v(select_id_errorIndication()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdate)]; + char dummy2[sizeof(ENDCConfigurationUpdate)]; + char dummy3[sizeof(ENDCX2SetupRequest)]; + char dummy4[sizeof(ErrorIndication)]; + char dummy5[sizeof(GNBStatusIndication)]; + char dummy6[sizeof(LoadInformation)]; + char dummy7[sizeof(RICcontrolRequest)]; + char dummy8[sizeof(RICindication)]; + char dummy9[sizeof(RICserviceQuery)]; + char dummy10[sizeof(RICserviceUpdate)]; + char dummy11[sizeof(RICsubscriptionDeleteRequest)]; + char dummy12[sizeof(RICsubscriptionRequest)]; + char dummy13[sizeof(ResetRequest)]; + char dummy14[sizeof(ResourceStatusRequest)]; + char dummy15[sizeof(ResourceStatusUpdate)]; + char dummy16[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionResponse& select_id_ricSubscription() { return set(1); } + RICsubscriptionResponse const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteResponse& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteResponse const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateAcknowledge& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateAcknowledge const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolAcknowledge& select_id_ricControl() { return set(4); } + RICcontrolAcknowledge const* get_id_ricControl() const { return get(4); } + X2SetupResponse& select_id_x2Setup() { return set(5); } + X2SetupResponse const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(9); } + ResetResponse& select_id_reset() { return set(10); } + ResetResponse const* get_id_reset() const { return get(10); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 10: v(select_id_reset()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy2[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCX2SetupResponse)]; + char dummy4[sizeof(RICcontrolAcknowledge)]; + char dummy5[sizeof(RICserviceUpdateAcknowledge)]; + char dummy6[sizeof(RICsubscriptionDeleteResponse)]; + char dummy7[sizeof(RICsubscriptionResponse)]; + char dummy8[sizeof(ResetResponse)]; + char dummy9[sizeof(ResourceStatusResponse)]; + char dummy10[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + RICsubscriptionFailure& select_id_ricSubscription() { return set(1); } + RICsubscriptionFailure const* get_id_ricSubscription() const { return get(1); } + RICsubscriptionDeleteFailure& select_id_ricSubscriptionDelete() { return set(2); } + RICsubscriptionDeleteFailure const* get_id_ricSubscriptionDelete() const { return get(2); } + RICserviceUpdateFailure& select_id_ricServiceUpdate() { return set(3); } + RICserviceUpdateFailure const* get_id_ricServiceUpdate() const { return get(3); } + RICcontrolFailure& select_id_ricControl() { return set(4); } + RICcontrolFailure const* get_id_ricControl() const { return get(4); } + X2SetupFailure& select_id_x2Setup() { return set(5); } + X2SetupFailure const* get_id_x2Setup() const { return get(5); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(6); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(6); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(7); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(7); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(8); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(8); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(9); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(9); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ricSubscription()); return true; + case 2: v(select_id_ricSubscriptionDelete()); return true; + case 3: v(select_id_ricServiceUpdate()); return true; + case 4: v(select_id_ricControl()); return true; + case 5: v(select_id_x2Setup()); return true; + case 6: v(select_id_endcX2Setup()); return true; + case 7: v(select_id_resourceStatusReportingInitiation()); return true; + case 8: v(select_id_eNBConfigurationUpdate()); return true; + case 9: v(select_id_endcConfigurationUpdate()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ENBConfigurationUpdateFailure)]; + char dummy2[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCX2SetupFailure)]; + char dummy4[sizeof(RICcontrolFailure)]; + char dummy5[sizeof(RICserviceUpdateFailure)]; + char dummy6[sizeof(RICsubscriptionDeleteFailure)]; + char dummy7[sizeof(RICsubscriptionFailure)]; + char dummy8[sizeof(ResourceStatusFailure)]; + char dummy9[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(id_ricSubscription); type=1;} + void select_id_ricSubscriptionDelete() { set(id_ricSubscriptionDelete); type=2;} + void select_id_ricServiceUpdate() { set(id_ricServiceUpdate); type=3;} + void select_id_ricControl() { set(id_ricControl); type=4;} + void select_id_x2Setup() { set(id_x2Setup); type=5;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=6;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=7;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=8;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=9;} + void select_id_reset() { set(id_reset); type=10;} + void select_id_ricIndication() { set(id_ricIndication); type=11;} + void select_id_ricServiceQuery() { set(id_ricServiceQuery); type=12;} + void select_id_loadIndication() { set(id_loadIndication); type=13;} + void select_id_gNBStatusIndication() { set(id_gNBStatusIndication); type=14;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=15;} + void select_id_errorIndication() { set(id_errorIndication); type=16;} + E2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ricSubscription)) { type = 1; return true; } + else if(equal(id_ricSubscriptionDelete)) { type = 2; return true; } + else if(equal(id_ricServiceUpdate)) { type = 3; return true; } + else if(equal(id_ricControl)) { type = 4; return true; } + else if(equal(id_x2Setup)) { type = 5; return true; } + else if(equal(id_endcX2Setup)) { type = 6; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 7; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 8; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 9; return true; } + else if(equal(id_reset)) { type = 10; return true; } + else if(equal(id_ricIndication)) { type = 11; return true; } + else if(equal(id_ricServiceQuery)) { type = 12; return true; } + else if(equal(id_loadIndication)) { type = 13; return true; } + else if(equal(id_gNBStatusIndication)) { type = 14; return true; } + else if(equal(id_resourceStatusReporting)) { type = 15; return true; } + else if(equal(id_errorIndication)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ricSubscription);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ricSubscriptionDelete);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ricServiceUpdate);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ricControl);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_reset);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ricIndication);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_ricServiceQuery);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_gNBStatusIndication);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_ricSubscription() { set(reject); type=1;} + void select_id_ricSubscriptionDelete() { set(reject); type=2;} + void select_id_ricServiceUpdate() { set(reject); type=3;} + void select_id_ricControl() { set(reject); type=4;} + void select_id_x2Setup() { set(reject); type=5;} + void select_id_endcX2Setup() { set(reject); type=6;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=7;} + void select_id_eNBConfigurationUpdate() { set(reject); type=8;} + void select_id_endcConfigurationUpdate() { set(reject); type=9;} + void select_id_reset() { set(reject); type=10;} + void select_id_ricIndication() { set(ignore); type=11;} + void select_id_ricServiceQuery() { set(ignore); type=12;} + void select_id_loadIndication() { set(ignore); type=13;} + void select_id_gNBStatusIndication() { set(ignore); type=14;} + void select_id_resourceStatusReporting() { set(ignore); type=15;} + void select_id_errorIndication() { set(ignore); type=16;} + E2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(ignore)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(ignore);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +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}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +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}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +E2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct E2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "E2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~E2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp new file mode 100644 index 0000000..0e1bb53 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-CommonDataTypes.hpp @@ -0,0 +1,188 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + + +/* +Criticality ::= ENUMERATED { reject, ignore, notify } +*/ + +struct Criticality : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Criticality";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + reject + ,ignore + ,notify + } index_t; + +}; + +/* +Presence ::= ENUMERATED { optional, conditional, mandatory } +*/ + +struct Presence : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "Presence";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + optional + ,conditional + ,mandatory + } index_t; + +}; + +/* +maxPrivateIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxPrivateIEs = 65535; +/* +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} +*/ + +struct PrivateIE_ID : asn::choice<2, 0, false> +{ + static constexpr const char* name() {return "PrivateIE-ID";} + using parent_t = asn::choice<2, 0, false>; + index_type get_index() const {return index;} + ~PrivateIE_ID() {clear();} + struct local_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "local_t";} + using parent_t = asn::integer<>; + + }; + + struct global_t : asn::oid + { + static constexpr const char* name() {return "global_t";} + using parent_t = asn::oid; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + local_t& select_local() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + local_t const* get_local() const { if(get_index() == 1) { return &var.as();} return nullptr; } + global_t& select_global() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + global_t const* get_global() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(local_t)]; + char dummy2[sizeof(global_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ProcedureCode ::= INTEGER (0..255) +*/ + +struct ProcedureCode : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProcedureCode";} + using parent_t = asn::integer<>; + +}; + +/* +maxProtocolIEs INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolIEs = 65535; +/* +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) +*/ + +struct ProtocolIE_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ProtocolIE-ID";} + using parent_t = asn::integer<>; + +}; + +/* +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} +*/ + +struct TriggeringMessage : asn::enumerated<3, 0, false> +{ + static constexpr const char* name() {return "TriggeringMessage";} + using parent_t = asn::enumerated<3, 0, false>; + typedef enum { + initiating_message + ,successful_outcome + ,unsuccessful_outcome + } index_t; + +}; + +/* +maxProtocolExtensions INTEGER ::= 65535 +*/ + +constexpr int64_t maxProtocolExtensions = 65535; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp new file mode 100644 index 0000000..28be45d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Constants.hpp @@ -0,0 +1,2054 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +id-ABS-Status ProtocolIE-ID ::= 63 +*/ + +constexpr int64_t id_ABS_Status = 63; +/* +id-ABSInformation ProtocolIE-ID ::= 61 +*/ + +constexpr int64_t id_ABSInformation = 61; +/* +id-ActivatedCellList ProtocolIE-ID ::= 58 +*/ + +constexpr int64_t id_ActivatedCellList = 58; +/* +id-ActivatedNRCellList ProtocolIE-ID ::= 268 +*/ + +constexpr int64_t id_ActivatedNRCellList = 268; +/* +id-ActivationID ProtocolIE-ID ::= 256 +*/ + +constexpr int64_t id_ActivationID = 256; +/* +id-AdditionalSpecialSubframe-Info ProtocolIE-ID ::= 97 +*/ + +constexpr int64_t id_AdditionalSpecialSubframe_Info = 97; +/* +id-AdditionalSpecialSubframeExtension-Info ProtocolIE-ID ::= 179 +*/ + +constexpr int64_t id_AdditionalSpecialSubframeExtension_Info = 179; +/* +id-AdmittedSplitSRBs ProtocolIE-ID ::= 212 +*/ + +constexpr int64_t id_AdmittedSplitSRBs = 212; +/* +id-AdmittedSplitSRBsrelease ProtocolIE-ID ::= 281 +*/ + +constexpr int64_t id_AdmittedSplitSRBsrelease = 281; +/* +id-AerialUEsubscriptionInformation ProtocolIE-ID ::= 277 +*/ + +constexpr int64_t id_AerialUEsubscriptionInformation = 277; +/* +id-BandwidthReducedSI ProtocolIE-ID ::= 180 +*/ + +constexpr int64_t id_BandwidthReducedSI = 180; +/* +id-BearerType ProtocolIE-ID ::= 171 +*/ + +constexpr int64_t id_BearerType = 171; +/* +id-BluetoothMeasurementConfiguration ProtocolIE-ID ::= 303 +*/ + +constexpr int64_t id_BluetoothMeasurementConfiguration = 303; +/* +id-CNTypeRestrictions ProtocolIE-ID ::= 301 +*/ + +constexpr int64_t id_CNTypeRestrictions = 301; +/* +id-CSG-Id ProtocolIE-ID ::= 70 +*/ + +constexpr int64_t id_CSG_Id = 70; +/* +id-CSGMembershipStatus ProtocolIE-ID ::= 71 +*/ + +constexpr int64_t id_CSGMembershipStatus = 71; +/* +id-CSIReportList ProtocolIE-ID ::= 146 +*/ + +constexpr int64_t id_CSIReportList = 146; +/* +id-Cause ProtocolIE-ID ::= 5 +*/ + +constexpr int64_t id_Cause = 5; +/* +id-CellAssistanceInformation ProtocolIE-ID ::= 251 +*/ + +constexpr int64_t id_CellAssistanceInformation = 251; +/* +id-CellInformation ProtocolIE-ID ::= 6 +*/ + +constexpr int64_t id_CellInformation = 6; +/* +id-CellInformation-Item ProtocolIE-ID ::= 7 +*/ + +constexpr int64_t id_CellInformation_Item = 7; +/* +id-CellMeasurementResult ProtocolIE-ID ::= 32 +*/ + +constexpr int64_t id_CellMeasurementResult = 32; +/* +id-CellMeasurementResult-Item ProtocolIE-ID ::= 33 +*/ + +constexpr int64_t id_CellMeasurementResult_Item = 33; +/* +id-CellReportingIndicator ProtocolIE-ID ::= 170 +*/ + +constexpr int64_t id_CellReportingIndicator = 170; +/* +id-CellToReport ProtocolIE-ID ::= 29 +*/ + +constexpr int64_t id_CellToReport = 29; +/* +id-CellToReport-Item ProtocolIE-ID ::= 31 +*/ + +constexpr int64_t id_CellToReport_Item = 31; +/* +id-CoMPInformation ProtocolIE-ID ::= 108 +*/ + +constexpr int64_t id_CoMPInformation = 108; +/* +id-CompleteFailureCauseInformation-Item ProtocolIE-ID ::= 69 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_Item = 69; +/* +id-CompleteFailureCauseInformation-List ProtocolIE-ID ::= 68 +*/ + +constexpr int64_t id_CompleteFailureCauseInformation_List = 68; +/* +id-CompositeAvailableCapacityGroup ProtocolIE-ID ::= 42 +*/ + +constexpr int64_t id_CompositeAvailableCapacityGroup = 42; +/* +id-Correlation-ID ProtocolIE-ID ::= 166 +*/ + +constexpr int64_t id_Correlation_ID = 166; +/* +id-CoverageModificationList ProtocolIE-ID ::= 143 +*/ + +constexpr int64_t id_CoverageModificationList = 143; +/* +id-CriticalityDiagnostics ProtocolIE-ID ::= 17 +*/ + +constexpr int64_t id_CriticalityDiagnostics = 17; +/* +id-DL-EARFCNExtension ProtocolIE-ID ::= 96 +*/ + +constexpr int64_t id_DL_EARFCNExtension = 96; +/* +id-DL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 193 +*/ + +constexpr int64_t id_DL_scheduling_PDCCH_CCE_usage = 193; +/* +id-DLCOUNTValueExtended ProtocolIE-ID ::= 93 +*/ + +constexpr int64_t id_DLCOUNTValueExtended = 93; +/* +id-DLCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 152 +*/ + +constexpr int64_t id_DLCOUNTValuePDCP_SNlength18 = 152; +/* +id-DataTrafficResourceIndication ProtocolIE-ID ::= 287 +*/ + +constexpr int64_t id_DataTrafficResourceIndication = 287; +/* +id-DeactivationIndication ProtocolIE-ID ::= 59 +*/ + +constexpr int64_t id_DeactivationIndication = 59; +/* +id-DownlinkPacketLossRate ProtocolIE-ID ::= 273 +*/ + +constexpr int64_t id_DownlinkPacketLossRate = 273; +/* +id-DynamicDLTransmissionInformation ProtocolIE-ID ::= 106 +*/ + +constexpr int64_t id_DynamicDLTransmissionInformation = 106; +/* +id-E-RAB-Item ProtocolIE-ID ::= 2 +*/ + +constexpr int64_t id_E_RAB_Item = 2; +/* +id-E-RABUsageReport-Item ProtocolIE-ID ::= 263 +*/ + +constexpr int64_t id_E_RABUsageReport_Item = 263; +/* +id-E-RABs-Admitted-Item ProtocolIE-ID ::= 0 +*/ + +constexpr int64_t id_E_RABs_Admitted_Item = 0; +/* +id-E-RABs-Admitted-List ProtocolIE-ID ::= 1 +*/ + +constexpr int64_t id_E_RABs_Admitted_List = 1; +/* +id-E-RABs-Admitted-ToBeAdded-Item ProtocolIE-ID ::= 121 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_Item = 121; +/* +id-E-RABs-Admitted-ToBeAdded-List ProtocolIE-ID ::= 120 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_List = 120; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckItem ProtocolIE-ID ::= 131 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131; +/* +id-E-RABs-Admitted-ToBeAdded-ModAckList ProtocolIE-ID ::= 128 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_ModAckList = 128; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ProtocolIE-ID ::= 213 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ProtocolIE-ID ::= 210 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ProtocolIE-ID ::= 222 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222; +/* +id-E-RABs-Admitted-ToBeAdded-SgNBModAckList ProtocolIE-ID ::= 219 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219; +/* +id-E-RABs-Admitted-ToBeModified-ModAckItem ProtocolIE-ID ::= 132 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckItem = 132; +/* +id-E-RABs-Admitted-ToBeModified-ModAckList ProtocolIE-ID ::= 129 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_ModAckList = 129; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item ProtocolIE-ID ::= 223 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223; +/* +id-E-RABs-Admitted-ToBeModified-SgNBModAckList ProtocolIE-ID ::= 220 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckItem ProtocolIE-ID ::= 133 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133; +/* +id-E-RABs-Admitted-ToBeReleased-ModAckList ProtocolIE-ID ::= 130 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_ModAckList = 130; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item ProtocolIE-ID ::= 224 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBModAckList ProtocolIE-ID ::= 221 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ProtocolIE-ID ::= 319 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319; +/* +id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ProtocolIE-ID ::= 318 +*/ + +constexpr int64_t id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConf-Item ProtocolIE-ID ::= 295 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295; +/* +id-E-RABs-AdmittedToBeModified-SgNBModConfList ProtocolIE-ID ::= 294 +*/ + +constexpr int64_t id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294; +/* +id-E-RABs-DataForwardingAddress-Item ProtocolIE-ID ::= 308 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_Item = 308; +/* +id-E-RABs-DataForwardingAddress-List ProtocolIE-ID ::= 307 +*/ + +constexpr int64_t id_E_RABs_DataForwardingAddress_List = 307; +/* +id-E-RABs-NotAdmitted-List ProtocolIE-ID ::= 3 +*/ + +constexpr int64_t id_E_RABs_NotAdmitted_List = 3; +/* +id-E-RABs-SubjectToCounterCheck-List ProtocolIE-ID ::= 141 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheck_List = 141; +/* +id-E-RABs-SubjectToCounterCheckItem ProtocolIE-ID ::= 142 +*/ + +constexpr int64_t id_E_RABs_SubjectToCounterCheckItem = 142; +/* +id-E-RABs-SubjectToSgNBCounterCheck-Item ProtocolIE-ID ::= 236 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_Item = 236; +/* +id-E-RABs-SubjectToSgNBCounterCheck-List ProtocolIE-ID ::= 235 +*/ + +constexpr int64_t id_E_RABs_SubjectToSgNBCounterCheck_List = 235; +/* +id-E-RABs-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 19 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_Item = 19; +/* +id-E-RABs-SubjectToStatusTransfer-List ProtocolIE-ID ::= 18 +*/ + +constexpr int64_t id_E_RABs_SubjectToStatusTransfer_List = 18; +/* +id-E-RABs-ToBeAdded-Item ProtocolIE-ID ::= 118 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_Item = 118; +/* +id-E-RABs-ToBeAdded-List ProtocolIE-ID ::= 117 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_List = 117; +/* +id-E-RABs-ToBeAdded-ModReqItem ProtocolIE-ID ::= 125 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_ModReqItem = 125; +/* +id-E-RABs-ToBeAdded-SgNBAddReq-Item ProtocolIE-ID ::= 209 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209; +/* +id-E-RABs-ToBeAdded-SgNBAddReqList ProtocolIE-ID ::= 205 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBAddReqList = 205; +/* +id-E-RABs-ToBeAdded-SgNBModReq-Item ProtocolIE-ID ::= 216 +*/ + +constexpr int64_t id_E_RABs_ToBeAdded_SgNBModReq_Item = 216; +/* +id-E-RABs-ToBeModified-ModReqItem ProtocolIE-ID ::= 126 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_ModReqItem = 126; +/* +id-E-RABs-ToBeModified-SgNBModReq-Item ProtocolIE-ID ::= 217 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReq_Item = 217; +/* +id-E-RABs-ToBeModified-SgNBModReqd-Item ProtocolIE-ID ::= 228 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqd_Item = 228; +/* +id-E-RABs-ToBeModified-SgNBModReqdList ProtocolIE-ID ::= 226 +*/ + +constexpr int64_t id_E_RABs_ToBeModified_SgNBModReqdList = 226; +/* +id-E-RABs-ToBeReleased-List-RelConf ProtocolIE-ID ::= 139 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelConf = 139; +/* +id-E-RABs-ToBeReleased-List-RelReq ProtocolIE-ID ::= 137 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_List_RelReq = 137; +/* +id-E-RABs-ToBeReleased-ModReqItem ProtocolIE-ID ::= 127 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqItem = 127; +/* +id-E-RABs-ToBeReleased-ModReqd ProtocolIE-ID ::= 134 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqd = 134; +/* +id-E-RABs-ToBeReleased-ModReqdItem ProtocolIE-ID ::= 135 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_ModReqdItem = 135; +/* +id-E-RABs-ToBeReleased-RelConfItem ProtocolIE-ID ::= 140 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelConfItem = 140; +/* +id-E-RABs-ToBeReleased-RelReqItem ProtocolIE-ID ::= 138 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_RelReqItem = 138; +/* +id-E-RABs-ToBeReleased-SgNBChaConf-Item ProtocolIE-ID ::= 230 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230; +/* +id-E-RABs-ToBeReleased-SgNBChaConfList ProtocolIE-ID ::= 229 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBChaConfList = 229; +/* +id-E-RABs-ToBeReleased-SgNBModReq-Item ProtocolIE-ID ::= 218 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReq_Item = 218; +/* +id-E-RABs-ToBeReleased-SgNBModReqd-Item ProtocolIE-ID ::= 227 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227; +/* +id-E-RABs-ToBeReleased-SgNBModReqdList ProtocolIE-ID ::= 225 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBModReqdList = 225; +/* +id-E-RABs-ToBeReleased-SgNBRelConf-Item ProtocolIE-ID ::= 234 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234; +/* +id-E-RABs-ToBeReleased-SgNBRelConfList ProtocolIE-ID ::= 233 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelConfList = 233; +/* +id-E-RABs-ToBeReleased-SgNBRelReq-Item ProtocolIE-ID ::= 232 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232; +/* +id-E-RABs-ToBeReleased-SgNBRelReqList ProtocolIE-ID ::= 231 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqList = 231; +/* +id-E-RABs-ToBeReleased-SgNBRelReqd-Item ProtocolIE-ID ::= 321 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321; +/* +id-E-RABs-ToBeReleased-SgNBRelReqdList ProtocolIE-ID ::= 320 +*/ + +constexpr int64_t id_E_RABs_ToBeReleased_SgNBRelReqdList = 320; +/* +id-E-RABs-ToBeSetup-Item ProtocolIE-ID ::= 4 +*/ + +constexpr int64_t id_E_RABs_ToBeSetup_Item = 4; +/* +id-E-RABs-ToBeSetupRetrieve-Item ProtocolIE-ID ::= 174 +*/ + +constexpr int64_t id_E_RABs_ToBeSetupRetrieve_Item = 174; +/* +id-ECGI ProtocolIE-ID ::= 316 +*/ + +constexpr int64_t id_ECGI = 316; +/* +id-ENB1-Cell-ID ProtocolIE-ID ::= 43 +*/ + +constexpr int64_t id_ENB1_Cell_ID = 43; +/* +id-ENB1-Measurement-ID ProtocolIE-ID ::= 39 +*/ + +constexpr int64_t id_ENB1_Measurement_ID = 39; +/* +id-ENB1-Mobility-Parameters ProtocolIE-ID ::= 46 +*/ + +constexpr int64_t id_ENB1_Mobility_Parameters = 46; +/* +id-ENB2-Cell-ID ProtocolIE-ID ::= 44 +*/ + +constexpr int64_t id_ENB2_Cell_ID = 44; +/* +id-ENB2-Measurement-ID ProtocolIE-ID ::= 40 +*/ + +constexpr int64_t id_ENB2_Measurement_ID = 40; +/* +id-ENB2-Mobility-Parameters-Modification-Range ProtocolIE-ID ::= 47 +*/ + +constexpr int64_t id_ENB2_Mobility_Parameters_Modification_Range = 47; +/* +id-ENB2-Proposed-Mobility-Parameters ProtocolIE-ID ::= 45 +*/ + +constexpr int64_t id_ENB2_Proposed_Mobility_Parameters = 45; +/* +id-ERABActivityNotifyItemList ProtocolIE-ID ::= 297 +*/ + +constexpr int64_t id_ERABActivityNotifyItemList = 297; +/* +id-ExpectedUEBehaviour ProtocolIE-ID ::= 104 +*/ + +constexpr int64_t id_ExpectedUEBehaviour = 104; +/* +id-ExtendedULInterferenceOverloadInfo ProtocolIE-ID ::= 100 +*/ + +constexpr int64_t id_ExtendedULInterferenceOverloadInfo = 100; +/* +id-FailureCellCRNTI ProtocolIE-ID ::= 50 +*/ + +constexpr int64_t id_FailureCellCRNTI = 50; +/* +id-FailureCellECGI ProtocolIE-ID ::= 53 +*/ + +constexpr int64_t id_FailureCellECGI = 53; +/* +id-FailureCellPCI ProtocolIE-ID ::= 48 +*/ + +constexpr int64_t id_FailureCellPCI = 48; +/* +id-FreqBandIndicatorPriority ProtocolIE-ID ::= 160 +*/ + +constexpr int64_t id_FreqBandIndicatorPriority = 160; +/* +id-GNBOverloadInformation ProtocolIE-ID ::= 310 +*/ + +constexpr int64_t id_GNBOverloadInformation = 310; +/* +id-GUGroupIDList ProtocolIE-ID ::= 24 +*/ + +constexpr int64_t id_GUGroupIDList = 24; +/* +id-GUGroupIDToAddList ProtocolIE-ID ::= 34 +*/ + +constexpr int64_t id_GUGroupIDToAddList = 34; +/* +id-GUGroupIDToDeleteList ProtocolIE-ID ::= 35 +*/ + +constexpr int64_t id_GUGroupIDToDeleteList = 35; +/* +id-GUMMEI-ID ProtocolIE-ID ::= 23 +*/ + +constexpr int64_t id_GUMMEI_ID = 23; +/* +id-GW-TransportLayerAddress ProtocolIE-ID ::= 165 +*/ + +constexpr int64_t id_GW_TransportLayerAddress = 165; +/* +id-GlobalENB-ID ProtocolIE-ID ::= 21 +*/ + +constexpr int64_t id_GlobalENB_ID = 21; +/* +id-Globalen-gNB-ID ProtocolIE-ID ::= 252 +*/ + +constexpr int64_t id_Globalen_gNB_ID = 252; +/* +id-HO-cause ProtocolIE-ID ::= 80 +*/ + +constexpr int64_t id_HO_cause = 80; +/* +id-HandoverReportType ProtocolIE-ID ::= 54 +*/ + +constexpr int64_t id_HandoverReportType = 54; +/* +id-HandoverRestrictionList ProtocolIE-ID ::= 240 +*/ + +constexpr int64_t id_HandoverRestrictionList = 240; +/* +id-InitiatingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 245 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcConfigUpdate = 245; +/* +id-InitiatingNodeType-EndcX2Removal ProtocolIE-ID ::= 298 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Removal = 298; +/* +id-InitiatingNodeType-EndcX2Setup ProtocolIE-ID ::= 244 +*/ + +constexpr int64_t id_InitiatingNodeType_EndcX2Setup = 244; +/* +id-InitiatingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 285 +*/ + +constexpr int64_t id_InitiatingNodeType_EutranrCellResourceCoordination = 285; +/* +id-IntendedULDLConfiguration ProtocolIE-ID ::= 99 +*/ + +constexpr int64_t id_IntendedULDLConfiguration = 99; +/* +id-InvokeIndication ProtocolIE-ID ::= 62 +*/ + +constexpr int64_t id_InvokeIndication = 62; +/* +id-LHN-ID ProtocolIE-ID ::= 159 +*/ + +constexpr int64_t id_LHN_ID = 159; +/* +id-ListofEUTRACellsinEUTRACoordinationReq ProtocolIE-ID ::= 289 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationReq = 289; +/* +id-ListofEUTRACellsinEUTRACoordinationResp ProtocolIE-ID ::= 290 +*/ + +constexpr int64_t id_ListofEUTRACellsinEUTRACoordinationResp = 290; +/* +id-ListofEUTRACellsinNRCoordinationReq ProtocolIE-ID ::= 291 +*/ + +constexpr int64_t id_ListofEUTRACellsinNRCoordinationReq = 291; +/* +id-ListofNRCellsinNRCoordinationReq ProtocolIE-ID ::= 292 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationReq = 292; +/* +id-ListofNRCellsinNRCoordinationResp ProtocolIE-ID ::= 293 +*/ + +constexpr int64_t id_ListofNRCellsinNRCoordinationResp = 293; +/* +id-M3Configuration ProtocolIE-ID ::= 85 +*/ + +constexpr int64_t id_M3Configuration = 85; +/* +id-M4Configuration ProtocolIE-ID ::= 86 +*/ + +constexpr int64_t id_M4Configuration = 86; +/* +id-M5Configuration ProtocolIE-ID ::= 87 +*/ + +constexpr int64_t id_M5Configuration = 87; +/* +id-M6Configuration ProtocolIE-ID ::= 161 +*/ + +constexpr int64_t id_M6Configuration = 161; +/* +id-M7Configuration ProtocolIE-ID ::= 162 +*/ + +constexpr int64_t id_M7Configuration = 162; +/* +id-MBMS-Service-Area-List ProtocolIE-ID ::= 79 +*/ + +constexpr int64_t id_MBMS_Service_Area_List = 79; +/* +id-MBSFN-Subframe-Info ProtocolIE-ID ::= 56 +*/ + +constexpr int64_t id_MBSFN_Subframe_Info = 56; +/* +id-MDT-Location-Info ProtocolIE-ID ::= 88 +*/ + +constexpr int64_t id_MDT_Location_Info = 88; +/* +id-MDTConfiguration ProtocolIE-ID ::= 72 +*/ + +constexpr int64_t id_MDTConfiguration = 72; +/* +id-MakeBeforeBreakIndicator ProtocolIE-ID ::= 181 +*/ + +constexpr int64_t id_MakeBeforeBreakIndicator = 181; +/* +id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 89 +*/ + +constexpr int64_t id_ManagementBasedMDTPLMNList = 89; +/* +id-ManagementBasedMDTallowed ProtocolIE-ID ::= 74 +*/ + +constexpr int64_t id_ManagementBasedMDTallowed = 74; +/* +id-Masked-IMEISV ProtocolIE-ID ::= 98 +*/ + +constexpr int64_t id_Masked_IMEISV = 98; +/* +id-MeNB-UE-X2AP-ID ProtocolIE-ID ::= 111 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID = 111; +/* +id-MeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 157 +*/ + +constexpr int64_t id_MeNB_UE_X2AP_ID_Extension = 157; +/* +id-MeNBCell-ID ProtocolIE-ID ::= 279 +*/ + +constexpr int64_t id_MeNBCell_ID = 279; +/* +id-MeNBCoordinationAssistanceInformation ProtocolIE-ID ::= 323 +*/ + +constexpr int64_t id_MeNBCoordinationAssistanceInformation = 323; +/* +id-MeNBResourceCoordinationInformation ProtocolIE-ID ::= 257 +*/ + +constexpr int64_t id_MeNBResourceCoordinationInformation = 257; +/* +id-MeNBtoSeNBContainer ProtocolIE-ID ::= 119 +*/ + +constexpr int64_t id_MeNBtoSeNBContainer = 119; +/* +id-MeNBtoSgNBContainer ProtocolIE-ID ::= 206 +*/ + +constexpr int64_t id_MeNBtoSgNBContainer = 206; +/* +id-Measurement-ID ProtocolIE-ID ::= 37 +*/ + +constexpr int64_t id_Measurement_ID = 37; +/* +id-MeasurementFailureCause-Item ProtocolIE-ID ::= 67 +*/ + +constexpr int64_t id_MeasurementFailureCause_Item = 67; +/* +id-MeasurementInitiationResult-Item ProtocolIE-ID ::= 66 +*/ + +constexpr int64_t id_MeasurementInitiationResult_Item = 66; +/* +id-MeasurementInitiationResult-List ProtocolIE-ID ::= 65 +*/ + +constexpr int64_t id_MeasurementInitiationResult_List = 65; +/* +id-MobilityInformation ProtocolIE-ID ::= 82 +*/ + +constexpr int64_t id_MobilityInformation = 82; +/* +id-MultibandInfoList ProtocolIE-ID ::= 84 +*/ + +constexpr int64_t id_MultibandInfoList = 84; +/* +id-NRCGI ProtocolIE-ID ::= 322 +*/ + +constexpr int64_t id_NRCGI = 322; +/* +id-NRS-NSSS-PowerOffset ProtocolIE-ID ::= 282 +*/ + +constexpr int64_t id_NRS_NSSS_PowerOffset = 282; +/* +id-NRUESecurityCapabilities ProtocolIE-ID ::= 248 +*/ + +constexpr int64_t id_NRUESecurityCapabilities = 248; +/* +id-NRrestrictionin5GS ProtocolIE-ID ::= 305 +*/ + +constexpr int64_t id_NRrestrictionin5GS = 305; +/* +id-NRrestrictioninEPSasSecondaryRAT ProtocolIE-ID ::= 202 +*/ + +constexpr int64_t id_NRrestrictioninEPSasSecondaryRAT = 202; +/* +id-NSSS-NumOccasionDifferentPrecoder ProtocolIE-ID ::= 283 +*/ + +constexpr int64_t id_NSSS_NumOccasionDifferentPrecoder = 283; +/* +id-NeighbourTAC ProtocolIE-ID ::= 76 +*/ + +constexpr int64_t id_NeighbourTAC = 76; +/* +id-New-eNB-UE-X2AP-ID ProtocolIE-ID ::= 9 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID = 9; +/* +id-New-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 155 +*/ + +constexpr int64_t id_New_eNB_UE_X2AP_ID_Extension = 155; +/* +id-NewEUTRANCellIdentifier ProtocolIE-ID ::= 175 +*/ + +constexpr int64_t id_NewEUTRANCellIdentifier = 175; +/* +id-Number-of-Antennaports ProtocolIE-ID ::= 41 +*/ + +constexpr int64_t id_Number_of_Antennaports = 41; +/* +id-OffsetOfNbiotChannelNumberToDL-EARFCN ProtocolIE-ID ::= 177 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177; +/* +id-OffsetOfNbiotChannelNumberToUL-EARFCN ProtocolIE-ID ::= 178 +*/ + +constexpr int64_t id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178; +/* +id-Old-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 264 +*/ + +constexpr int64_t id_Old_SgNB_UE_X2AP_ID = 264; +/* +id-Old-eNB-UE-X2AP-ID ProtocolIE-ID ::= 10 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID = 10; +/* +id-Old-eNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 156 +*/ + +constexpr int64_t id_Old_eNB_UE_X2AP_ID_Extension = 156; +/* +id-PDCPChangeIndication ProtocolIE-ID ::= 249 +*/ + +constexpr int64_t id_PDCPChangeIndication = 249; +/* +id-PRACH-Configuration ProtocolIE-ID ::= 55 +*/ + +constexpr int64_t id_PRACH_Configuration = 55; +/* +id-PartialSuccessIndicator ProtocolIE-ID ::= 64 +*/ + +constexpr int64_t id_PartialSuccessIndicator = 64; +/* +id-ProSeAuthorized ProtocolIE-ID ::= 103 +*/ + +constexpr int64_t id_ProSeAuthorized = 103; +/* +id-ProSeUEtoNetworkRelaying ProtocolIE-ID ::= 149 +*/ + +constexpr int64_t id_ProSeUEtoNetworkRelaying = 149; +/* +id-ProtectedEUTRAResourceIndication ProtocolIE-ID ::= 284 +*/ + +constexpr int64_t id_ProtectedEUTRAResourceIndication = 284; +/* +id-RLC-Status ProtocolIE-ID ::= 300 +*/ + +constexpr int64_t id_RLC_Status = 300; +/* +id-RLCMode-transferred ProtocolIE-ID ::= 317 +*/ + +constexpr int64_t id_RLCMode_transferred = 317; +/* +id-RNL-Header ProtocolIE-ID ::= 101 +*/ + +constexpr int64_t id_RNL_Header = 101; +/* +id-RRCConfigIndication ProtocolIE-ID ::= 272 +*/ + +constexpr int64_t id_RRCConfigIndication = 272; +/* +id-RRCConnReestabIndicator ProtocolIE-ID ::= 78 +*/ + +constexpr int64_t id_RRCConnReestabIndicator = 78; +/* +id-RRCConnSetupIndicator ProtocolIE-ID ::= 75 +*/ + +constexpr int64_t id_RRCConnSetupIndicator = 75; +/* +id-RRCContainer ProtocolIE-ID ::= 237 +*/ + +constexpr int64_t id_RRCContainer = 237; +/* +id-RSRPMRList ProtocolIE-ID ::= 110 +*/ + +constexpr int64_t id_RSRPMRList = 110; +/* +id-Re-establishmentCellECGI ProtocolIE-ID ::= 49 +*/ + +constexpr int64_t id_Re_establishmentCellECGI = 49; +/* +id-ReceiveStatusOfULPDCPSDUsExtended ProtocolIE-ID ::= 91 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsExtended = 91; +/* +id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ProtocolIE-ID ::= 150 +*/ + +constexpr int64_t id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150; +/* +id-Registration-Request ProtocolIE-ID ::= 28 +*/ + +constexpr int64_t id_Registration_Request = 28; +/* +id-ReportCharacteristics ProtocolIE-ID ::= 38 +*/ + +constexpr int64_t id_ReportCharacteristics = 38; +/* +id-ReportingPeriodicity ProtocolIE-ID ::= 30 +*/ + +constexpr int64_t id_ReportingPeriodicity = 30; +/* +id-ReportingPeriodicityCSIR ProtocolIE-ID ::= 145 +*/ + +constexpr int64_t id_ReportingPeriodicityCSIR = 145; +/* +id-ReportingPeriodicityRSRPMR ProtocolIE-ID ::= 109 +*/ + +constexpr int64_t id_ReportingPeriodicityRSRPMR = 109; +/* +id-RequestedSplitSRBs ProtocolIE-ID ::= 208 +*/ + +constexpr int64_t id_RequestedSplitSRBs = 208; +/* +id-RequestedSplitSRBsrelease ProtocolIE-ID ::= 280 +*/ + +constexpr int64_t id_RequestedSplitSRBsrelease = 280; +/* +id-RespondingNodeType-EndcConfigUpdate ProtocolIE-ID ::= 247 +*/ + +constexpr int64_t id_RespondingNodeType_EndcConfigUpdate = 247; +/* +id-RespondingNodeType-EndcX2Removal ProtocolIE-ID ::= 299 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Removal = 299; +/* +id-RespondingNodeType-EndcX2Setup ProtocolIE-ID ::= 246 +*/ + +constexpr int64_t id_RespondingNodeType_EndcX2Setup = 246; +/* +id-RespondingNodeType-EutranrCellResourceCoordination ProtocolIE-ID ::= 286 +*/ + +constexpr int64_t id_RespondingNodeType_EutranrCellResourceCoordination = 286; +/* +id-ResponseInformationSeNBReconfComp ProtocolIE-ID ::= 123 +*/ + +constexpr int64_t id_ResponseInformationSeNBReconfComp = 123; +/* +id-ResponseInformationSgNBReconfComp ProtocolIE-ID ::= 214 +*/ + +constexpr int64_t id_ResponseInformationSgNBReconfComp = 214; +/* +id-SCGChangeIndication ProtocolIE-ID ::= 136 +*/ + +constexpr int64_t id_SCGChangeIndication = 136; +/* +id-SCGConfigurationQuery ProtocolIE-ID ::= 241 +*/ + +constexpr int64_t id_SCGConfigurationQuery = 241; +/* +id-SGNB-Addition-Trigger-Ind ProtocolIE-ID ::= 278 +*/ + +constexpr int64_t id_SGNB_Addition_Trigger_Ind = 278; +/* +id-SIPTO-BearerDeactivationIndication ProtocolIE-ID ::= 164 +*/ + +constexpr int64_t id_SIPTO_BearerDeactivationIndication = 164; +/* +id-SIPTO-Correlation-ID ProtocolIE-ID ::= 167 +*/ + +constexpr int64_t id_SIPTO_Correlation_ID = 167; +/* +id-SIPTO-L-GW-TransportLayerAddress ProtocolIE-ID ::= 168 +*/ + +constexpr int64_t id_SIPTO_L_GW_TransportLayerAddress = 168; +/* +id-SRBType ProtocolIE-ID ::= 238 +*/ + +constexpr int64_t id_SRBType = 238; +/* +id-SRVCCOperationPossible ProtocolIE-ID ::= 36 +*/ + +constexpr int64_t id_SRVCCOperationPossible = 36; +/* +id-SeNB-UE-X2AP-ID ProtocolIE-ID ::= 112 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID = 112; +/* +id-SeNB-UE-X2AP-ID-Extension ProtocolIE-ID ::= 158 +*/ + +constexpr int64_t id_SeNB_UE_X2AP_ID_Extension = 158; +/* +id-SeNBSecurityKey ProtocolIE-ID ::= 114 +*/ + +constexpr int64_t id_SeNBSecurityKey = 114; +/* +id-SeNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 115 +*/ + +constexpr int64_t id_SeNBUEAggregateMaximumBitRate = 115; +/* +id-SeNBtoMeNBContainer ProtocolIE-ID ::= 122 +*/ + +constexpr int64_t id_SeNBtoMeNBContainer = 122; +/* +id-SecondaryRATUsageReport ProtocolIE-ID ::= 255 +*/ + +constexpr int64_t id_SecondaryRATUsageReport = 255; +/* +id-SecondaryRATUsageReport-Item ProtocolIE-ID ::= 266 +*/ + +constexpr int64_t id_SecondaryRATUsageReport_Item = 266; +/* +id-SecondaryRATUsageReportList ProtocolIE-ID ::= 265 +*/ + +constexpr int64_t id_SecondaryRATUsageReportList = 265; +/* +id-SelectedPLMN ProtocolIE-ID ::= 269 +*/ + +constexpr int64_t id_SelectedPLMN = 269; +/* +id-ServedCells ProtocolIE-ID ::= 20 +*/ + +constexpr int64_t id_ServedCells = 20; +/* +id-ServedCellsToActivate ProtocolIE-ID ::= 57 +*/ + +constexpr int64_t id_ServedCellsToActivate = 57; +/* +id-ServedCellsToAdd ProtocolIE-ID ::= 25 +*/ + +constexpr int64_t id_ServedCellsToAdd = 25; +/* +id-ServedCellsToDelete ProtocolIE-ID ::= 27 +*/ + +constexpr int64_t id_ServedCellsToDelete = 27; +/* +id-ServedCellsToModify ProtocolIE-ID ::= 26 +*/ + +constexpr int64_t id_ServedCellsToModify = 26; +/* +id-ServedEUTRAcellsENDCX2ManagementList ProtocolIE-ID ::= 250 +*/ + +constexpr int64_t id_ServedEUTRAcellsENDCX2ManagementList = 250; +/* +id-ServedEUTRAcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 260 +*/ + +constexpr int64_t id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260; +/* +id-ServedEUTRAcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 259 +*/ + +constexpr int64_t id_ServedEUTRAcellsToModifyListENDCConfUpd = 259; +/* +id-ServedNRCellsToActivate ProtocolIE-ID ::= 267 +*/ + +constexpr int64_t id_ServedNRCellsToActivate = 267; +/* +id-ServedNRcellsENDCX2ManagementList ProtocolIE-ID ::= 253 +*/ + +constexpr int64_t id_ServedNRcellsENDCX2ManagementList = 253; +/* +id-ServedNRcellsToDeleteListENDCConfUpd ProtocolIE-ID ::= 262 +*/ + +constexpr int64_t id_ServedNRcellsToDeleteListENDCConfUpd = 262; +/* +id-ServedNRcellsToModifyListENDCConfUpd ProtocolIE-ID ::= 261 +*/ + +constexpr int64_t id_ServedNRcellsToModifyListENDCConfUpd = 261; +/* +id-ServingPLMN ProtocolIE-ID ::= 116 +*/ + +constexpr int64_t id_ServingPLMN = 116; +/* +id-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 207 +*/ + +constexpr int64_t id_SgNB_UE_X2AP_ID = 207; +/* +id-SgNBActivityNotification ProcedureCode ::= 42 +*/ + +constexpr int64_t id_SgNBActivityNotification = 42; +/* +id-SgNBCoordinationAssistanceInformation ProtocolIE-ID ::= 324 +*/ + +constexpr int64_t id_SgNBCoordinationAssistanceInformation = 324; +/* +id-SgNBResourceCoordinationInformation ProtocolIE-ID ::= 258 +*/ + +constexpr int64_t id_SgNBResourceCoordinationInformation = 258; +/* +id-SgNBSecurityKey ProtocolIE-ID ::= 203 +*/ + +constexpr int64_t id_SgNBSecurityKey = 203; +/* +id-SgNBUEAggregateMaximumBitRate ProtocolIE-ID ::= 204 +*/ + +constexpr int64_t id_SgNBUEAggregateMaximumBitRate = 204; +/* +id-SgNBtoMeNBContainer ProtocolIE-ID ::= 211 +*/ + +constexpr int64_t id_SgNBtoMeNBContainer = 211; +/* +id-ShortMAC-I ProtocolIE-ID ::= 51 +*/ + +constexpr int64_t id_ShortMAC_I = 51; +/* +id-SignallingBasedMDTPLMNList ProtocolIE-ID ::= 90 +*/ + +constexpr int64_t id_SignallingBasedMDTPLMNList = 90; +/* +id-SourceCellCRNTI ProtocolIE-ID ::= 83 +*/ + +constexpr int64_t id_SourceCellCRNTI = 83; +/* +id-SourceCellECGI ProtocolIE-ID ::= 52 +*/ + +constexpr int64_t id_SourceCellECGI = 52; +/* +id-SpectrumSharingGroupID ProtocolIE-ID ::= 288 +*/ + +constexpr int64_t id_SpectrumSharingGroupID = 288; +/* +id-SplitSRB ProtocolIE-ID ::= 242 +*/ + +constexpr int64_t id_SplitSRB = 242; +/* +id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 275 +*/ + +constexpr int64_t id_SubscriberProfileIDforRFP = 275; +/* +id-Subscription-Based-UE-DifferentiationInfo ProtocolIE-ID ::= 309 +*/ + +constexpr int64_t id_Subscription_Based_UE_DifferentiationInfo = 309; +/* +id-Target-SgNB-ID ProtocolIE-ID ::= 239 +*/ + +constexpr int64_t id_Target_SgNB_ID = 239; +/* +id-TargetCell-ID ProtocolIE-ID ::= 11 +*/ + +constexpr int64_t id_TargetCell_ID = 11; +/* +id-TargetCellInUTRAN ProtocolIE-ID ::= 81 +*/ + +constexpr int64_t id_TargetCellInUTRAN = 81; +/* +id-TargeteNBtoSource-eNBTransparentContainer ProtocolIE-ID ::= 12 +*/ + +constexpr int64_t id_TargeteNBtoSource_eNBTransparentContainer = 12; +/* +id-Time-UE-StayedInCell-EnhancedGranularity ProtocolIE-ID ::= 77 +*/ + +constexpr int64_t id_Time_UE_StayedInCell_EnhancedGranularity = 77; +/* +id-TimeToWait ProtocolIE-ID ::= 22 +*/ + +constexpr int64_t id_TimeToWait = 22; +/* +id-TraceActivation ProtocolIE-ID ::= 13 +*/ + +constexpr int64_t id_TraceActivation = 13; +/* +id-Tunnel-Information-for-BBF ProtocolIE-ID ::= 163 +*/ + +constexpr int64_t id_Tunnel_Information_for_BBF = 163; +/* +id-UE-ContextInformation ProtocolIE-ID ::= 14 +*/ + +constexpr int64_t id_UE_ContextInformation = 14; +/* +id-UE-ContextInformation-SgNBModReq ProtocolIE-ID ::= 215 +*/ + +constexpr int64_t id_UE_ContextInformation_SgNBModReq = 215; +/* +id-UE-ContextInformationRetrieve ProtocolIE-ID ::= 173 +*/ + +constexpr int64_t id_UE_ContextInformationRetrieve = 173; +/* +id-UE-ContextInformationSeNBModReq ProtocolIE-ID ::= 124 +*/ + +constexpr int64_t id_UE_ContextInformationSeNBModReq = 124; +/* +id-UE-ContextKeptIndicator ProtocolIE-ID ::= 154 +*/ + +constexpr int64_t id_UE_ContextKeptIndicator = 154; +/* +id-UE-ContextReferenceAtSeNB ProtocolIE-ID ::= 153 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSeNB = 153; +/* +id-UE-ContextReferenceAtSgNB ProtocolIE-ID ::= 254 +*/ + +constexpr int64_t id_UE_ContextReferenceAtSgNB = 254; +/* +id-UE-ContextReferenceAtWT ProtocolIE-ID ::= 182 +*/ + +constexpr int64_t id_UE_ContextReferenceAtWT = 182; +/* +id-UE-HistoryInformation ProtocolIE-ID ::= 15 +*/ + +constexpr int64_t id_UE_HistoryInformation = 15; +/* +id-UE-HistoryInformationFromTheUE ProtocolIE-ID ::= 105 +*/ + +constexpr int64_t id_UE_HistoryInformationFromTheUE = 105; +/* +id-UE-RLF-Report-Container ProtocolIE-ID ::= 60 +*/ + +constexpr int64_t id_UE_RLF_Report_Container = 60; +/* +id-UE-RLF-Report-Container-for-extended-bands ProtocolIE-ID ::= 107 +*/ + +constexpr int64_t id_UE_RLF_Report_Container_for_extended_bands = 107; +/* +id-UE-SecurityCapabilities ProtocolIE-ID ::= 113 +*/ + +constexpr int64_t id_UE_SecurityCapabilities = 113; +/* +id-UE-X2AP-ID ProtocolIE-ID ::= 16 +*/ + +constexpr int64_t id_UE_X2AP_ID = 16; +/* +id-UEAppLayerMeasConfig ProtocolIE-ID ::= 195 +*/ + +constexpr int64_t id_UEAppLayerMeasConfig = 195; +/* +id-UEContextLevelUserPlaneActivity ProtocolIE-ID ::= 296 +*/ + +constexpr int64_t id_UEContextLevelUserPlaneActivity = 296; +/* +id-UEID ProtocolIE-ID ::= 147 +*/ + +constexpr int64_t id_UEID = 147; +/* +id-UENRMeasurement ProtocolIE-ID ::= 243 +*/ + +constexpr int64_t id_UENRMeasurement = 243; +/* +id-UESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 184 +*/ + +constexpr int64_t id_UESidelinkAggregateMaximumBitRate = 184; +/* +id-UEs-Admitted-ToBeReset ProtocolIE-ID ::= 271 +*/ + +constexpr int64_t id_UEs_Admitted_ToBeReset = 271; +/* +id-UEs-ToBeReset ProtocolIE-ID ::= 270 +*/ + +constexpr int64_t id_UEs_ToBeReset = 270; +/* +id-UL-EARFCNExtension ProtocolIE-ID ::= 95 +*/ + +constexpr int64_t id_UL_EARFCNExtension = 95; +/* +id-UL-scheduling-PDCCH-CCE-usage ProtocolIE-ID ::= 194 +*/ + +constexpr int64_t id_UL_scheduling_PDCCH_CCE_usage = 194; +/* +id-ULCOUNTValueExtended ProtocolIE-ID ::= 92 +*/ + +constexpr int64_t id_ULCOUNTValueExtended = 92; +/* +id-ULCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 151 +*/ + +constexpr int64_t id_ULCOUNTValuePDCP_SNlength18 = 151; +/* +id-UplinkPacketLossRate ProtocolIE-ID ::= 274 +*/ + +constexpr int64_t id_UplinkPacketLossRate = 274; +/* +id-V2XServicesAuthorized ProtocolIE-ID ::= 176 +*/ + +constexpr int64_t id_V2XServicesAuthorized = 176; +/* +id-WLANMeasurementConfiguration ProtocolIE-ID ::= 304 +*/ + +constexpr int64_t id_WLANMeasurementConfiguration = 304; +/* +id-WT-UE-ContextKeptIndicator ProtocolIE-ID ::= 183 +*/ + +constexpr int64_t id_WT_UE_ContextKeptIndicator = 183; +/* +id-X2RemovalThreshold ProtocolIE-ID ::= 169 +*/ + +constexpr int64_t id_X2RemovalThreshold = 169; +/* +id-cellActivation ProcedureCode ::= 15 +*/ + +constexpr int64_t id_cellActivation = 15; +/* +id-dL-Forwarding ProtocolIE-ID ::= 306 +*/ + +constexpr int64_t id_dL_Forwarding = 306; +/* +id-dLPDCPSnLength ProtocolIE-ID ::= 311 +*/ + +constexpr int64_t id_dLPDCPSnLength = 311; +/* +id-dataForwardingAddressIndication ProcedureCode ::= 44 +*/ + +constexpr int64_t id_dataForwardingAddressIndication = 44; +/* +id-duplicationActivation ProtocolIE-ID ::= 315 +*/ + +constexpr int64_t id_duplicationActivation = 315; +/* +id-eARFCNExtension ProtocolIE-ID ::= 94 +*/ + +constexpr int64_t id_eARFCNExtension = 94; +/* +id-eNBConfigurationUpdate ProcedureCode ::= 8 +*/ + +constexpr int64_t id_eNBConfigurationUpdate = 8; +/* +id-eUTRANRCellResourceCoordination ProcedureCode ::= 41 +*/ + +constexpr int64_t id_eUTRANRCellResourceCoordination = 41; +/* +id-endcCellActivation ProcedureCode ::= 39 +*/ + +constexpr int64_t id_endcCellActivation = 39; +/* +id-endcConfigurationUpdate ProcedureCode ::= 37 +*/ + +constexpr int64_t id_endcConfigurationUpdate = 37; +/* +id-endcPartialReset ProcedureCode ::= 40 +*/ + +constexpr int64_t id_endcPartialReset = 40; +/* +id-endcX2Removal ProcedureCode ::= 43 +*/ + +constexpr int64_t id_endcX2Removal = 43; +/* +id-endcX2Setup ProcedureCode ::= 36 +*/ + +constexpr int64_t id_endcX2Setup = 36; +/* +id-enhancedRNTP ProtocolIE-ID ::= 148 +*/ + +constexpr int64_t id_enhancedRNTP = 148; +/* +id-errorIndication ProcedureCode ::= 3 +*/ + +constexpr int64_t id_errorIndication = 3; +/* +id-extended-e-RAB-GuaranteedBitrateDL ProtocolIE-ID ::= 198 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateDL = 198; +/* +id-extended-e-RAB-GuaranteedBitrateUL ProtocolIE-ID ::= 199 +*/ + +constexpr int64_t id_extended_e_RAB_GuaranteedBitrateUL = 199; +/* +id-extended-e-RAB-MaximumBitrateDL ProtocolIE-ID ::= 196 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateDL = 196; +/* +id-extended-e-RAB-MaximumBitrateUL ProtocolIE-ID ::= 197 +*/ + +constexpr int64_t id_extended_e_RAB_MaximumBitrateUL = 197; +/* +id-extended-uEaggregateMaximumBitRateDownlink ProtocolIE-ID ::= 200 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateDownlink = 200; +/* +id-extended-uEaggregateMaximumBitRateUplink ProtocolIE-ID ::= 201 +*/ + +constexpr int64_t id_extended_uEaggregateMaximumBitRateUplink = 201; +/* +id-gNBStatusIndication ProcedureCode ::= 45 +*/ + +constexpr int64_t id_gNBStatusIndication = 45; +/* +id-handoverCancel ProcedureCode ::= 1 +*/ + +constexpr int64_t id_handoverCancel = 1; +/* +id-handoverPreparation ProcedureCode ::= 0 +*/ + +constexpr int64_t id_handoverPreparation = 0; +/* +id-handoverReport ProcedureCode ::= 14 +*/ + +constexpr int64_t id_handoverReport = 14; +/* +id-lCID ProtocolIE-ID ::= 314 +*/ + +constexpr int64_t id_lCID = 314; +/* +id-loadIndication ProcedureCode ::= 2 +*/ + +constexpr int64_t id_loadIndication = 2; +/* +id-meNBinitiatedSeNBModificationPreparation ProcedureCode ::= 21 +*/ + +constexpr int64_t id_meNBinitiatedSeNBModificationPreparation = 21; +/* +id-meNBinitiatedSeNBRelease ProcedureCode ::= 23 +*/ + +constexpr int64_t id_meNBinitiatedSeNBRelease = 23; +/* +id-meNBinitiatedSgNBModificationPreparation ProcedureCode ::= 29 +*/ + +constexpr int64_t id_meNBinitiatedSgNBModificationPreparation = 29; +/* +id-meNBinitiatedSgNBRelease ProcedureCode ::= 31 +*/ + +constexpr int64_t id_meNBinitiatedSgNBRelease = 31; +/* +id-mobilitySettingsChange ProcedureCode ::= 12 +*/ + +constexpr int64_t id_mobilitySettingsChange = 12; +/* +id-new-drb-ID-req ProtocolIE-ID ::= 325 +*/ + +constexpr int64_t id_new_drb_ID_req = 325; +/* +id-privateMessage ProcedureCode ::= 11 +*/ + +constexpr int64_t id_privateMessage = 11; +/* +id-rLFIndication ProcedureCode ::= 13 +*/ + +constexpr int64_t id_rLFIndication = 13; +/* +id-rRCTransfer ProcedureCode ::= 35 +*/ + +constexpr int64_t id_rRCTransfer = 35; +/* +id-reset ProcedureCode ::= 7 +*/ + +constexpr int64_t id_reset = 7; +/* +id-resourceStatusReporting ProcedureCode ::= 10 +*/ + +constexpr int64_t id_resourceStatusReporting = 10; +/* +id-resourceStatusReportingInitiation ProcedureCode ::= 9 +*/ + +constexpr int64_t id_resourceStatusReportingInitiation = 9; +/* +id-resumeID ProtocolIE-ID ::= 172 +*/ + +constexpr int64_t id_resumeID = 172; +/* +id-retrieveUEContext ProcedureCode ::= 26 +*/ + +constexpr int64_t id_retrieveUEContext = 26; +/* +id-seNBAdditionPreparation ProcedureCode ::= 19 +*/ + +constexpr int64_t id_seNBAdditionPreparation = 19; +/* +id-seNBCounterCheck ProcedureCode ::= 25 +*/ + +constexpr int64_t id_seNBCounterCheck = 25; +/* +id-seNBReconfigurationCompletion ProcedureCode ::= 20 +*/ + +constexpr int64_t id_seNBReconfigurationCompletion = 20; +/* +id-seNBinitiatedSeNBModification ProcedureCode ::= 22 +*/ + +constexpr int64_t id_seNBinitiatedSeNBModification = 22; +/* +id-seNBinitiatedSeNBRelease ProcedureCode ::= 24 +*/ + +constexpr int64_t id_seNBinitiatedSeNBRelease = 24; +/* +id-secondaryRATDataUsageReport ProcedureCode ::= 38 +*/ + +constexpr int64_t id_secondaryRATDataUsageReport = 38; +/* +id-secondarymeNBULGTPTEIDatPDCP ProtocolIE-ID ::= 313 +*/ + +constexpr int64_t id_secondarymeNBULGTPTEIDatPDCP = 313; +/* +id-secondarysgNBDLGTPTEIDatPDCP ProtocolIE-ID ::= 312 +*/ + +constexpr int64_t id_secondarysgNBDLGTPTEIDatPDCP = 312; +/* +id-serviceType ProtocolIE-ID ::= 276 +*/ + +constexpr int64_t id_serviceType = 276; +/* +id-sgNBAdditionPreparation ProcedureCode ::= 27 +*/ + +constexpr int64_t id_sgNBAdditionPreparation = 27; +/* +id-sgNBChange ProcedureCode ::= 34 +*/ + +constexpr int64_t id_sgNBChange = 34; +/* +id-sgNBCounterCheck ProcedureCode ::= 33 +*/ + +constexpr int64_t id_sgNBCounterCheck = 33; +/* +id-sgNBReconfigurationCompletion ProcedureCode ::= 28 +*/ + +constexpr int64_t id_sgNBReconfigurationCompletion = 28; +/* +id-sgNBinitiatedSgNBModification ProcedureCode ::= 30 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBModification = 30; +/* +id-sgNBinitiatedSgNBRelease ProcedureCode ::= 32 +*/ + +constexpr int64_t id_sgNBinitiatedSgNBRelease = 32; +/* +id-snStatusTransfer ProcedureCode ::= 4 +*/ + +constexpr int64_t id_snStatusTransfer = 4; +/* +id-uEContextRelease ProcedureCode ::= 5 +*/ + +constexpr int64_t id_uEContextRelease = 5; +/* +id-uL-GTPtunnelEndpoint ProtocolIE-ID ::= 185 +*/ + +constexpr int64_t id_uL_GTPtunnelEndpoint = 185; +/* +id-uLpDCPSnLength ProtocolIE-ID ::= 302 +*/ + +constexpr int64_t id_uLpDCPSnLength = 302; +/* +id-x2APMessage ProtocolIE-ID ::= 102 +*/ + +constexpr int64_t id_x2APMessage = 102; +/* +id-x2APMessageTransfer ProcedureCode ::= 17 +*/ + +constexpr int64_t id_x2APMessageTransfer = 17; +/* +id-x2Release ProcedureCode ::= 16 +*/ + +constexpr int64_t id_x2Release = 16; +/* +id-x2Removal ProcedureCode ::= 18 +*/ + +constexpr int64_t id_x2Removal = 18; +/* +id-x2Setup ProcedureCode ::= 6 +*/ + +constexpr int64_t id_x2Setup = 6; +/* +maxCSIProcess INTEGER ::= 4 +*/ + +constexpr int64_t maxCSIProcess = 4; +/* +maxCSIReport INTEGER ::= 2 +*/ + +constexpr int64_t maxCSIReport = 2; +/* +maxCellReport INTEGER ::= 9 +*/ + +constexpr int64_t maxCellReport = 9; +/* +maxCellineNB INTEGER ::= 256 +*/ + +constexpr int64_t maxCellineNB = 256; +/* +maxCellinengNB INTEGER ::= 16384 +*/ + +constexpr int64_t maxCellinengNB = 16384; +/* +maxEARFCN INTEGER ::= 65535 +*/ + +constexpr int64_t maxEARFCN = 65535; +/* +maxEARFCNPlusOne INTEGER ::= 65536 +*/ + +constexpr int64_t maxEARFCNPlusOne = 65536; +/* +maxFailedMeasObjects INTEGER ::= 32 +*/ + +constexpr int64_t maxFailedMeasObjects = 32; +/* +maxInterfaces INTEGER ::= 16 +*/ + +constexpr int64_t maxInterfaces = 16; +/* +maxNrOfErrors INTEGER ::= 256 +*/ + +constexpr int64_t maxNrOfErrors = 256; +/* +maxPools INTEGER ::= 16 +*/ + +constexpr int64_t maxPools = 16; +/* +maxSubband INTEGER ::= 14 +*/ + +constexpr int64_t maxSubband = 14; +/* +maxUEReport INTEGER ::= 128 +*/ + +constexpr int64_t maxUEReport = 128; +/* +maxUEsinengNBDU INTEGER ::= 8192 +*/ + +constexpr int64_t maxUEsinengNBDU = 8192; +/* +maxnoNRcellsSpectrumSharingWithE-UTRA INTEGER ::= 64 +*/ + +constexpr int64_t maxnoNRcellsSpectrumSharingWithE_UTRA = 64; +/* +maxnoofBPLMNs INTEGER ::= 6 +*/ + +constexpr int64_t maxnoofBPLMNs = 6; +/* +maxnoofBands INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofBands = 16; +/* +maxnoofBearers INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofBearers = 256; +/* +maxnoofBluetoothName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofBluetoothName = 4; +/* +maxnoofCellIDforMDT INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforMDT = 32; +/* +maxnoofCellIDforQMC INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCellIDforQMC = 32; +/* +maxnoofCells INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofCells = 16; +/* +maxnoofCoMPCells INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofCoMPCells = 32; +/* +maxnoofCoMPHypothesisSet INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofCoMPHypothesisSet = 256; +/* +maxnoofEPLMNs INTEGER ::= 15 +*/ + +constexpr int64_t maxnoofEPLMNs = 15; +/* +maxnoofEPLMNsPlusOne INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofEPLMNsPlusOne = 16; +/* +maxnoofForbLACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbLACs = 4096; +/* +maxnoofForbTACs INTEGER ::= 4096 +*/ + +constexpr int64_t maxnoofForbTACs = 4096; +/* +maxnoofMBMSServiceAreaIdentities INTEGER ::= 256 +*/ + +constexpr int64_t maxnoofMBMSServiceAreaIdentities = 256; +/* +maxnoofMBSFN INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofMBSFN = 8; +/* +maxnoofMDTPLMNs INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofMDTPLMNs = 16; +/* +maxnoofNeighbours INTEGER ::= 512 +*/ + +constexpr int64_t maxnoofNeighbours = 512; +/* +maxnoofNrCellBands INTEGER ::= 32 +*/ + +constexpr int64_t maxnoofNrCellBands = 32; +/* +maxnoofPA INTEGER ::= 3 +*/ + +constexpr int64_t maxnoofPA = 3; +/* +maxnoofPDCP-SN INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPDCP_SN = 16; +/* +maxnoofPLMNforQMC INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofPLMNforQMC = 16; +/* +maxnoofPRBs INTEGER ::= 110 +*/ + +constexpr int64_t maxnoofPRBs = 110; +/* +maxnoofProtectedResourcePatterns INTEGER ::= 16 +*/ + +constexpr int64_t maxnoofProtectedResourcePatterns = 16; +/* +maxnoofTAforMDT INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforMDT = 8; +/* +maxnoofTAforQMC INTEGER ::= 8 +*/ + +constexpr int64_t maxnoofTAforQMC = 8; +/* +maxnoofWLANName INTEGER ::= 4 +*/ + +constexpr int64_t maxnoofWLANName = 4; +/* +maxnooftimeperiods INTEGER ::= 2 +*/ + +constexpr int64_t maxnooftimeperiods = 2; +/* +maxofNRNeighbours INTEGER ::= 1024 +*/ + +constexpr int64_t maxofNRNeighbours = 1024; +/* +newmaxEARFCN INTEGER ::= 262143 +*/ + +constexpr int64_t newmaxEARFCN = 262143; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp new file mode 100644 index 0000000..09545bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-Containers.hpp @@ -0,0 +1,700 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" + +/* +X2AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PRIVATE_IES +{ + struct id_t : PrivateIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = PrivateIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct PrivateIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "PrivateIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, PrivateIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, PrivateIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} +*/ + +template +struct PrivateIE_Container_elm : PrivateIE_Field +{ + static constexpr const char* name() {return "PrivateIE_Container_elm";} + using parent_t = PrivateIE_Field; + +}; +template +struct PrivateIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "PrivateIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_EXTENSION +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} +*/ + +template +struct ProtocolExtensionField : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolExtensionField";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : ExtensionSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename ExtensionSetParam::id_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : ExtensionSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename ExtensionSetParam::criticality_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct extensionValue_t : ExtensionSetParam::Extension_t + { + static constexpr const char* name() {return "extensionValue_t";} + using parent_t = typename ExtensionSetParam::Extension_t; + template bool decode(V& v, ProtocolExtensionField const& c) + { + return ExtensionSetParam::Extension_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolExtensionField const& c) const + { + return ExtensionSetParam::Extension_t::encode(c.id.get_index(), v); + }; + }; + extensionValue_t& ref_extensionValue() {return extensionValue;} + extensionValue_t const& ref_extensionValue() const {return extensionValue;} + template void decode(V& v) + { + v(id); + v(criticality); + v(extensionValue); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(extensionValue); + + }; + void clear() + { + id.clear(); + criticality.clear(); + extensionValue.clear(); + + }; + private: + id_t id; + criticality_t criticality; + extensionValue_t extensionValue; + +}; +/* +ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} +*/ + +template +struct ProtocolExtensionContainer_elm : ProtocolExtensionField +{ + static constexpr const char* name() {return "ProtocolExtensionContainer_elm";} + using parent_t = ProtocolExtensionField; + +}; +template +struct ProtocolExtensionContainer : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolExtensionContainer";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} +*/ + +struct X2AP_PROTOCOL_IES +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_Field : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-Field";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct criticality_t : IEsSetParam::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename IEsSetParam::criticality_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::criticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::criticality_t::encode(c.id.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : IEsSetParam::Value_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename IEsSetParam::Value_t; + template bool decode(V& v, ProtocolIE_Field const& c) + { + return IEsSetParam::Value_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_Field const& c) const + { + return IEsSetParam::Value_t::encode(c.id.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(id); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(id); + v(criticality); + v(value); + + }; + void clear() + { + id.clear(); + criticality.clear(); + value.clear(); + + }; + private: + id_t id; + criticality_t criticality; + value_t value; + +}; +/* +ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Container_elm : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE_Container_elm";} + using parent_t = ProtocolIE_Field; + +}; +template +struct ProtocolIE_Container : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-Container";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerList_elm : ProtocolIE_Container +{ + static constexpr const char* name() {return "ProtocolIE_ContainerList_elm";} + using parent_t = ProtocolIE_Container; + +}; +template +struct ProtocolIE_ContainerList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +X2AP-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 +} +*/ + +struct X2AP_PROTOCOL_IES_PAIR +{ + struct id_t : ProtocolIE_ID + { + static constexpr const char* name() {return "id_t";} + using parent_t = ProtocolIE_ID; + + }; + struct firstCriticality_t : Criticality + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = Criticality; + + }; + struct secondCriticality_t : Criticality + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = Criticality; + + }; + struct presence_t : Presence + { + static constexpr const char* name() {return "presence_t";} + using parent_t = Presence; + + }; + +}; +/* +ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} +*/ + +template +struct ProtocolIE_FieldPair : asn::sequence<5, 0, false, 0> +{ + static constexpr const char* name() {return "ProtocolIE-FieldPair";} + using parent_t = asn::sequence<5, 0, false, 0>; + struct id_t : IEsSetParam::id_t + { + static constexpr const char* name() {return "id_t";} + using parent_t = typename IEsSetParam::id_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::id_t::decode(v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::id_t::encode(v); + }; + }; + id_t& ref_id() {return id;} + id_t const& ref_id() const {return id;} + struct firstCriticality_t : IEsSetParam::firstCriticality_t + { + static constexpr const char* name() {return "firstCriticality_t";} + using parent_t = typename IEsSetParam::firstCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::firstCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::firstCriticality_t::encode(c.id.get_index(), v); + }; + }; + firstCriticality_t& ref_firstCriticality() {return firstCriticality;} + firstCriticality_t const& ref_firstCriticality() const {return firstCriticality;} + struct firstValue_t : IEsSetParam::FirstValue_t + { + static constexpr const char* name() {return "firstValue_t";} + using parent_t = typename IEsSetParam::FirstValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::FirstValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::FirstValue_t::encode(c.id.get_index(), v); + }; + }; + firstValue_t& ref_firstValue() {return firstValue;} + firstValue_t const& ref_firstValue() const {return firstValue;} + struct secondCriticality_t : IEsSetParam::secondCriticality_t + { + static constexpr const char* name() {return "secondCriticality_t";} + using parent_t = typename IEsSetParam::secondCriticality_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::secondCriticality_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::secondCriticality_t::encode(c.id.get_index(), v); + }; + }; + secondCriticality_t& ref_secondCriticality() {return secondCriticality;} + secondCriticality_t const& ref_secondCriticality() const {return secondCriticality;} + struct secondValue_t : IEsSetParam::SecondValue_t + { + static constexpr const char* name() {return "secondValue_t";} + using parent_t = typename IEsSetParam::SecondValue_t; + template bool decode(V& v, ProtocolIE_FieldPair const& c) + { + return IEsSetParam::SecondValue_t::decode(c.id.get_index(), v); + }; + template bool encode(V& v, ProtocolIE_FieldPair const& c) const + { + return IEsSetParam::SecondValue_t::encode(c.id.get_index(), v); + }; + }; + secondValue_t& ref_secondValue() {return secondValue;} + secondValue_t const& ref_secondValue() const {return secondValue;} + template void decode(V& v) + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + template void encode(V& v) const + { + v(id); + v(firstCriticality); + v(firstValue); + v(secondCriticality); + v(secondValue); + + }; + void clear() + { + id.clear(); + firstCriticality.clear(); + firstValue.clear(); + secondCriticality.clear(); + secondValue.clear(); + + }; + private: + id_t id; + firstCriticality_t firstCriticality; + firstValue_t firstValue; + secondCriticality_t secondCriticality; + secondValue_t secondValue; + +}; +/* +ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPair_elm : ProtocolIE_FieldPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPair_elm";} + using parent_t = ProtocolIE_FieldPair; + +}; +template +struct ProtocolIE_ContainerPair : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPair";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} +*/ + +template +struct ProtocolIE_ContainerPairList_elm : ProtocolIE_ContainerPair +{ + static constexpr const char* name() {return "ProtocolIE_ContainerPairList_elm";} + using parent_t = ProtocolIE_ContainerPair; + +}; +template +struct ProtocolIE_ContainerPairList : asn::sequenceof > +{ + static constexpr const char* name() {return "ProtocolIE-ContainerPairList";} + using parent_t = asn::sequenceof >; + using constraint_t = asn::constraints>; + +}; +/* +ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} +*/ + +template +struct ProtocolIE_Single_Container : ProtocolIE_Field +{ + static constexpr const char* name() {return "ProtocolIE-Single-Container";} + using parent_t = ProtocolIE_Field; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp new file mode 100644 index 0000000..f056563 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-IEs.hpp @@ -0,0 +1,35962 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-Constants.hpp" +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-Containers.hpp" + +/* +DL-ABS-status::= INTEGER (0..100) +*/ + +struct DL_ABS_status : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-ABS-status";} + using parent_t = asn::integer<>; + +}; + +/* +UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationFDD ::= SEQUENCE { + usable-abs-pattern-info BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationFDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;} + usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usable_abs_pattern_info_t usable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UsableABSInformationTDD ::= SEQUENCE { + usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationTDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usaable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usaable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;} + usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usaable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usaable_abs_pattern_info_t usaable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformation ::= CHOICE { + fdd UsableABSInformationFDD, + tdd UsableABSInformationTDD, + ... +} +*/ + +struct UsableABSInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "UsableABSInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~UsableABSInformation() {clear();} + struct fdd_t : UsableABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = UsableABSInformationFDD; + + }; + struct tdd_t : UsableABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = UsableABSInformationTDD; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABS_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABS-Status ::= SEQUENCE { + dL-ABS-status DL-ABS-status, + usableABSInformation UsableABSInformation, + iE-Extensions ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABS_Status : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ABS-Status";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_ABS_status_t : DL_ABS_status + { + static constexpr const char* name() {return "dL_ABS_status_t";} + using parent_t = DL_ABS_status; + + }; + dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;} + dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;} + struct usableABSInformation_t : UsableABSInformation + { + static constexpr const char* name() {return "usableABSInformation_t";} + using parent_t = UsableABSInformation; + + }; + usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;} + usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + void clear() + { + dL_ABS_status.clear(); + usableABSInformation.clear(); + iE_Extensions.clear(); + + }; + private: + dL_ABS_status_t dL_ABS_status; + usableABSInformation_t usableABSInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationFDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationFDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(40)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationFDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationFDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationTDD_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ABSInformationTDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(1..70, ...)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationTDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationTDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformation ::= CHOICE { + fdd ABSInformationFDD, + tdd ABSInformationTDD, + abs-inactive NULL, + ... +} +*/ + +struct ABSInformation : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "ABSInformation";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~ABSInformation() {clear();} + struct fdd_t : ABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = ABSInformationFDD; + + }; + struct tdd_t : ABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = ABSInformationTDD; + + }; + struct abs_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "abs_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + char dummy3[sizeof(abs_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Key-eNodeB-Star ::= BIT STRING (SIZE(256)) +*/ + +struct Key_eNodeB_Star : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Key-eNodeB-Star";} + using parent_t = asn::bstring<>; + +}; + +/* +NextHopChainingCount ::= INTEGER (0..7) +*/ + +struct NextHopChainingCount : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NextHopChainingCount";} + using parent_t = asn::integer<>; + +}; + +/* +AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AS_SecurityInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AS-SecurityInformation ::= SEQUENCE { + key-eNodeB-star Key-eNodeB-Star, + nextHopChainingCount NextHopChainingCount, + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AS_SecurityInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "AS-SecurityInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct key_eNodeB_star_t : Key_eNodeB_Star + { + static constexpr const char* name() {return "key_eNodeB_star_t";} + using parent_t = Key_eNodeB_Star; + + }; + key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;} + key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;} + struct nextHopChainingCount_t : NextHopChainingCount + { + static constexpr const char* name() {return "nextHopChainingCount_t";} + using parent_t = NextHopChainingCount; + + }; + nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;} + nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + void clear() + { + key_eNodeB_star.clear(); + nextHopChainingCount.clear(); + iE_Extensions.clear(); + + }; + private: + key_eNodeB_star_t key_eNodeB_star; + nextHopChainingCount_t nextHopChainingCount; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivationID ::= INTEGER (0..255) +*/ + +struct ActivationID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ActivationID";} + using parent_t = asn::integer<>; + +}; + +/* +AdditionalSpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ... +} +*/ + +struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";} + using parent_t = asn::enumerated<10, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + ,ssp9 + } index_t; + +}; + +/* +CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixDL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixDL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixUL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixUL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframe-Info ::= SEQUENCE { + additionalspecialSubframePatterns AdditionalSpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns + { + static constexpr const char* name() {return "additionalspecialSubframePatterns_t";} + using parent_t = AdditionalSpecialSubframePatterns; + + }; + additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;} + additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatterns_t additionalspecialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AdditionalSpecialSubframePatternsExtension ::= ENUMERATED { + ssp10, + ... +} +*/ + +struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ssp10 + } index_t; + +}; + +/* +AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AdditionalSpecialSubframeExtension-Info ::= SEQUENCE { + additionalspecialSubframePatternsExtension AdditionalSpecialSubframePatternsExtension, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension + { + static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";} + using parent_t = AdditionalSpecialSubframePatternsExtension; + + }; + additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;} + additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatternsExtension.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AerialUEsubscriptionInformation ::= ENUMERATED { + allowed, + not-allowed, + ... +} +*/ + +struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "AerialUEsubscriptionInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + allowed + ,not_allowed + } index_t; + +}; + +/* +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) +*/ + +struct PriorityLevel : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PriorityLevel";} + using parent_t = asn::integer<>; + enum {spare = 0, highest = 1, lowest = 14, no_priority = 15}; + +}; + +/* +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} +*/ + +struct Pre_emptionCapability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionCapability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + shall_not_trigger_pre_emption + ,may_trigger_pre_emption + } index_t; + +}; + +/* +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} +*/ + +struct Pre_emptionVulnerability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionVulnerability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + not_pre_emptable + ,pre_emptable + } index_t; + +}; + +/* +AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AllocationAndRetentionPriority_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AllocationAndRetentionPriority";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct priorityLevel_t : PriorityLevel + { + static constexpr const char* name() {return "priorityLevel_t";} + using parent_t = PriorityLevel; + + }; + priorityLevel_t& ref_priorityLevel() {return priorityLevel;} + priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;} + struct pre_emptionCapability_t : Pre_emptionCapability + { + static constexpr const char* name() {return "pre_emptionCapability_t";} + using parent_t = Pre_emptionCapability; + + }; + pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;} + pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;} + struct pre_emptionVulnerability_t : Pre_emptionVulnerability + { + static constexpr const char* name() {return "pre_emptionVulnerability_t";} + using parent_t = Pre_emptionVulnerability; + + }; + pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;} + pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + void clear() + { + priorityLevel.clear(); + pre_emptionCapability.clear(); + pre_emptionVulnerability.clear(); + iE_Extensions.clear(); + + }; + private: + priorityLevel_t priorityLevel; + pre_emptionCapability_t pre_emptionCapability; + pre_emptionVulnerability_t pre_emptionVulnerability; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMN-Identity ::= OCTET STRING (SIZE(3)) +*/ + +struct PLMN_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PLMN-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) +*/ + +struct EUTRANCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ECGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ECGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ECGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eUTRANcellIdentifier_t : EUTRANCellIdentifier + { + static constexpr const char* name() {return "eUTRANcellIdentifier_t";} + using parent_t = EUTRANCellIdentifier; + + }; + eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;} + eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eUTRANcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eUTRANcellIdentifier_t eUTRANcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI +*/ + +struct CellIdListforMDT_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforMDT_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedMDT::= SEQUENCE { + cellIdListforMDT CellIdListforMDT, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforMDT_t : CellIdListforMDT + { + static constexpr const char* name() {return "cellIdListforMDT_t";} + using parent_t = CellIdListforMDT; + + }; + cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;} + cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforMDT_t cellIdListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAC ::= OCTET STRING (SIZE (2)) +*/ + +struct TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC +*/ + +struct TAListforMDT_elm : TAC +{ + static constexpr const char* name() {return "TAListforMDT_elm";} + using parent_t = TAC; + +}; +struct TAListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedMDT::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforMDT_t : TAListforMDT + { + static constexpr const char* name() {return "tAListforMDT_t";} + using parent_t = TAListforMDT; + + }; + tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;} + tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforMDT_t tAListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAI_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAI-Item ::= SEQUENCE { + tAC TAC, + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAI_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TAI-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + void clear() + { + tAC.clear(); + pLMN_Identity.clear(); + iE_Extensions.clear(); + + }; + private: + tAC_t tAC; + pLMN_Identity_t pLMN_Identity; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item +*/ + +struct TAIListforMDT_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforMDT_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedMDT_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforMDT_t : TAIListforMDT + { + static constexpr const char* name() {return "tAIListforMDT_t";} + using parent_t = TAIListforMDT; + + }; + tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;} + tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAIListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforMDT_t tAIListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfMDT ::= CHOICE { + cellBased CellBasedMDT, + tABased TABasedMDT, + pLMNWide NULL, + ..., + tAIBased TAIBasedMDT +} +*/ + +struct AreaScopeOfMDT : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "AreaScopeOfMDT";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfMDT() {clear();} + struct cellBased_t : CellBasedMDT + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedMDT; + + }; + struct tABased_t : TABasedMDT + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedMDT; + + }; + struct pLMNWide_t : asn::nulltype + { + static constexpr const char* name() {return "pLMNWide_t";} + using parent_t = asn::nulltype; + + }; + struct tAIBased_t : TAIBasedMDT + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedMDT; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(pLMNWide_t)]; + char dummy4[sizeof(tAIBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI +*/ + +struct CellIdListforQMC_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforQMC_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellBasedQMC::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforQMC_t : CellIdListforQMC + { + static constexpr const char* name() {return "cellIdListforQMC_t";} + using parent_t = CellIdListforQMC; + + }; + cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;} + cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforQMC_t cellIdListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC +*/ + +struct TAListforQMC_elm : TAC +{ + static constexpr const char* name() {return "TAListforQMC_elm";} + using parent_t = TAC; + +}; +struct TAListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforQMC_t : TAListforQMC + { + static constexpr const char* name() {return "tAListforQMC_t";} + using parent_t = TAListforQMC; + + }; + tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;} + tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforQMC_t tAListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item +*/ + +struct TAIListforQMC_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforQMC_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforQMC_t : TAIListforQMC + { + static constexpr const char* name() {return "tAIListforQMC_t";} + using parent_t = TAIListforQMC; + + }; + tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;} + tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAIListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforQMC_t tAIListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity +*/ + +struct PLMNListforQMC_elm : PLMN_Identity +{ + static constexpr const char* name() {return "PLMNListforQMC_elm";} + using parent_t = PLMN_Identity; + +}; +struct PLMNListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "PLMNListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PLMNAreaBasedQMC_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "PLMNAreaBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct plmnListforQMC_t : PLMNListforQMC + { + static constexpr const char* name() {return "plmnListforQMC_t";} + using parent_t = PLMNListforQMC; + + }; + plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;} + plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + void clear() + { + plmnListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + plmnListforQMC_t plmnListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + ... +} +*/ + +struct AreaScopeOfQMC : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "AreaScopeOfQMC";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfQMC() {clear();} + struct cellBased_t : CellBasedQMC + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedQMC; + + }; + struct tABased_t : TABasedQMC + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedQMC; + + }; + struct tAIBased_t : TAIBasedQMC + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedQMC; + + }; + struct pLMNAreaBased_t : PLMNAreaBasedQMC + { + static constexpr const char* name() {return "pLMNAreaBased_t";} + using parent_t = PLMNAreaBasedQMC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as();} return nullptr; } + pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(tAIBased_t)]; + char dummy4[sizeof(pLMNAreaBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +FreqBandIndicator ::= INTEGER (1..256, ...) +*/ + +struct FreqBandIndicator : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FreqBandIndicator";} + using parent_t = asn::integer<>; + +}; + +/* +BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BandInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BandInfo ::= SEQUENCE { + freqBandIndicator FreqBandIndicator, + iE-Extensions ProtocolExtensionContainer { {BandInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BandInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "BandInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicator_t : FreqBandIndicator + { + static constexpr const char* name() {return "freqBandIndicator_t";} + using parent_t = FreqBandIndicator; + + }; + freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;} + freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicator_t freqBandIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +BandwidthReducedSI::= ENUMERATED { + scheduled, + ... +} +*/ + +struct BandwidthReducedSI : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BandwidthReducedSI";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + scheduled + } index_t; + +}; + +/* +BearerType ::= ENUMERATED { + non-IP, + ... +} +*/ + +struct BearerType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BearerType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + non_IP + } index_t; + +}; + +/* +BenefitMetric ::= INTEGER (-101..100, ...) +*/ + +struct BenefitMetric : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BenefitMetric";} + using parent_t = asn::integer<>; + +}; + +/* +BitRate ::= INTEGER (0..10000000000) +*/ + +struct BitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BitRate";} + using parent_t = asn::integer<>; + +}; + +/* +BluetoothMeasConfig::= ENUMERATED {setup,...} +*/ + +struct BluetoothMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BluetoothMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +BluetoothName ::= OCTET STRING (SIZE (1..248)) +*/ + +struct BluetoothName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BluetoothName";} + using parent_t = asn::ostring<>; + +}; + +/* +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName +*/ + +struct BluetoothMeasConfigNameList_elm : BluetoothName +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";} + using parent_t = BluetoothName; + +}; +struct BluetoothMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BluetoothMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "BluetoothMeasurementConfiguration";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct bluetoothMeasConfig_t : BluetoothMeasConfig + { + static constexpr const char* name() {return "bluetoothMeasConfig_t";} + using parent_t = BluetoothMeasConfig; + + }; + bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;} + bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;} + struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList + { + static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";} + using parent_t = BluetoothMeasConfigNameList; + static constexpr bool optional = true; + + }; + bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;} + bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;} + struct bt_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "bt_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;} + bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + void clear() + { + bluetoothMeasConfig.clear(); + bluetoothMeasConfigNameList.clear(); + bt_rssi.clear(); + iE_Extensions.clear(); + + }; + private: + bluetoothMeasConfig_t bluetoothMeasConfig; + bluetoothMeasConfigNameList_t bluetoothMeasConfigNameList; + bt_rssi_t bt_rssi; + iE_Extensions_t iE_Extensions; + +}; +/* +BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity +*/ + +struct BroadcastPLMNs_Item_elm : PLMN_Identity +{ + static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";} + using parent_t = PLMN_Identity; + +}; +struct BroadcastPLMNs_Item : asn::sequenceof +{ + static constexpr const char* name() {return "BroadcastPLMNs-Item";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CNTypeRestrictionsItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CNTypeRestrictionsItem ::= SEQUENCE { + plmn-Id PLMN-Identity, + cn-type ENUMERATED {fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CNTypeRestrictionsItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct plmn_Id_t : PLMN_Identity + { + static constexpr const char* name() {return "plmn_Id_t";} + using parent_t = PLMN_Identity; + + }; + plmn_Id_t& ref_plmn_Id() {return plmn_Id;} + plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;} + struct cn_type_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "cn_type_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + fiveGC_forbidden + } index_t; + + }; + + cn_type_t& ref_cn_type() {return cn_type;} + cn_type_t const& ref_cn_type() const {return cn_type;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + void clear() + { + plmn_Id.clear(); + cn_type.clear(); + iE_Extensions.clear(); + + }; + private: + plmn_Id_t plmn_Id; + cn_type_t cn_type; + iE_Extensions_t iE_Extensions; + +}; +/* +CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem +*/ + +struct CNTypeRestrictions_elm : CNTypeRestrictionsItem +{ + static constexpr const char* name() {return "CNTypeRestrictions_elm";} + using parent_t = CNTypeRestrictionsItem; + +}; +struct CNTypeRestrictions : asn::sequenceof +{ + static constexpr const char* name() {return "CNTypeRestrictions";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PDCP-SNExtended ::= INTEGER (0..32767) +*/ + +struct PDCP_SNExtended : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNExtended";} + using parent_t = asn::integer<>; + +}; + +/* +HFNModified ::= INTEGER (0..131071) +*/ + +struct HFNModified : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNModified";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTValueExtended_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTValueExtended ::= SEQUENCE { + pDCP-SNExtended PDCP-SNExtended, + hFNModified HFNModified, + iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTValueExtended : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTValueExtended";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNExtended_t : PDCP_SNExtended + { + static constexpr const char* name() {return "pDCP_SNExtended_t";} + using parent_t = PDCP_SNExtended; + + }; + pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;} + pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;} + struct hFNModified_t : HFNModified + { + static constexpr const char* name() {return "hFNModified_t";} + using parent_t = HFNModified; + + }; + hFNModified_t& ref_hFNModified() {return hFNModified;} + hFNModified_t const& ref_hFNModified() const {return hFNModified;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNExtended.clear(); + hFNModified.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNExtended_t pDCP_SNExtended; + hFNModified_t hFNModified; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SN ::= INTEGER (0..4095) +*/ + +struct PDCP_SN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SN";} + using parent_t = asn::integer<>; + +}; + +/* +HFN ::= INTEGER (0..1048575) +*/ + +struct HFN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFN";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvalue_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvalue ::= SEQUENCE { + pDCP-SN PDCP-SN, + hFN HFN, + iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvalue : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvalue";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SN_t : PDCP_SN + { + static constexpr const char* name() {return "pDCP_SN_t";} + using parent_t = PDCP_SN; + + }; + pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;} + pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;} + struct hFN_t : HFN + { + static constexpr const char* name() {return "hFN_t";} + using parent_t = HFN; + + }; + hFN_t& ref_hFN() {return hFN;} + hFN_t const& ref_hFN() const {return hFN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SN.clear(); + hFN.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SN_t pDCP_SN; + hFN_t hFN; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SNlength18 ::= INTEGER (0..262143) +*/ + +struct PDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +HFNforPDCP-SNlength18 ::= INTEGER (0..16383) +*/ + +struct HFNforPDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNforPDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +COUNTvaluePDCP-SNlength18 ::= SEQUENCE { + pDCP-SNlength18 PDCP-SNlength18, + hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, + iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNlength18_t : PDCP_SNlength18 + { + static constexpr const char* name() {return "pDCP_SNlength18_t";} + using parent_t = PDCP_SNlength18; + + }; + pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;} + pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;} + struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18 + { + static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";} + using parent_t = HFNforPDCP_SNlength18; + + }; + hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;} + hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNlength18.clear(); + hFNforPDCP_SNlength18.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNlength18_t pDCP_SNlength18; + hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + iE_Extensions_t iE_Extensions; + +}; +/* +CRNTI ::= BIT STRING (SIZE (16)) +*/ + +struct CRNTI : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CRNTI";} + using parent_t = asn::bstring<>; + +}; + +/* +CSG-Id ::= BIT STRING (SIZE (27)) +*/ + +struct CSG_Id : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CSG-Id";} + using parent_t = asn::bstring<>; + +}; + +/* +CSGMembershipStatus ::= ENUMERATED { + member, + not-member +} +*/ + +struct CSGMembershipStatus : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "CSGMembershipStatus";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + member + ,not_member + } index_t; + +}; + +/* +UEID ::= BIT STRING (SIZE (16)) +*/ + +struct UEID : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UEID";} + using parent_t = asn::bstring<>; + +}; + +/* +WidebandCQICodeword1::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + ... +} +*/ + +struct WidebandCQICodeword1 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WidebandCQICodeword1";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WidebandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WidebandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WidebandCQI ::= SEQUENCE { + widebandCQICodeword0 INTEGER (0..15, ...), + widebandCQICodeword1 WidebandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WidebandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "WidebandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct widebandCQICodeword0_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "widebandCQICodeword0_t";} + using parent_t = asn::integer<>; + + }; + + widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;} + widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;} + struct widebandCQICodeword1_t : WidebandCQICodeword1 + { + static constexpr const char* name() {return "widebandCQICodeword1_t";} + using parent_t = WidebandCQICodeword1; + static constexpr bool optional = true; + + }; + widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;} + widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + widebandCQICodeword0.clear(); + widebandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + widebandCQICodeword0_t widebandCQICodeword0; + widebandCQICodeword1_t widebandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandSize ::= ENUMERATED { + size2, + size3, + size4, + size6, + size8, + ... +} +*/ + +struct SubbandSize : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "SubbandSize";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + size2 + ,size3 + ,size4 + ,size6 + ,size8 + } index_t; + +}; + +/* +SubbandCQICodeword0 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword0 : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword0";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~SubbandCQICodeword0() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy3[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQICodeword1 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword1 : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword1";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~SubbandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy4[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQI ::= SEQUENCE { + subbandCQICodeword0 SubbandCQICodeword0, + subbandCQICodeword1 SubbandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "SubbandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct subbandCQICodeword0_t : SubbandCQICodeword0 + { + static constexpr const char* name() {return "subbandCQICodeword0_t";} + using parent_t = SubbandCQICodeword0; + + }; + subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;} + subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;} + struct subbandCQICodeword1_t : SubbandCQICodeword1 + { + static constexpr const char* name() {return "subbandCQICodeword1_t";} + using parent_t = SubbandCQICodeword1; + static constexpr bool optional = true; + + }; + subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;} + subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + subbandCQICodeword0.clear(); + subbandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQICodeword0_t subbandCQICodeword0; + subbandCQICodeword1_t subbandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQIItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SubbandCQIItem ::= SEQUENCE { + subbandCQI SubbandCQI, + subbandIndex INTEGER (0..27,...), + iE-Extensions ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQIItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SubbandCQIItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct subbandCQI_t : SubbandCQI + { + static constexpr const char* name() {return "subbandCQI_t";} + using parent_t = SubbandCQI; + + }; + subbandCQI_t& ref_subbandCQI() {return subbandCQI;} + subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;} + struct subbandIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "subbandIndex_t";} + using parent_t = asn::integer<>; + + }; + + subbandIndex_t& ref_subbandIndex() {return subbandIndex;} + subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + void clear() + { + subbandCQI.clear(); + subbandIndex.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQI_t subbandCQI; + subbandIndex_t subbandIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem +*/ + +struct SubbandCQIList_elm : SubbandCQIItem +{ + static constexpr const char* name() {return "SubbandCQIList_elm";} + using parent_t = SubbandCQIItem; + +}; +struct SubbandCQIList : asn::sequenceof +{ + static constexpr const char* name() {return "SubbandCQIList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcessItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF + SEQUENCE { + rI INTEGER (1..8, ...), + widebandCQI WidebandCQI, + subbandSize SubbandSize, + subbandCQIList SubbandCQIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct rI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rI_t";} + using parent_t = asn::integer<>; + + }; + + rI_t& ref_rI() {return rI;} + rI_t const& ref_rI() const {return rI;} + struct widebandCQI_t : WidebandCQI + { + static constexpr const char* name() {return "widebandCQI_t";} + using parent_t = WidebandCQI; + + }; + widebandCQI_t& ref_widebandCQI() {return widebandCQI;} + widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;} + struct subbandSize_t : SubbandSize + { + static constexpr const char* name() {return "subbandSize_t";} + using parent_t = SubbandSize; + + }; + subbandSize_t& ref_subbandSize() {return subbandSize;} + subbandSize_t const& ref_subbandSize() const {return subbandSize;} + struct subbandCQIList_t : SubbandCQIList + { + static constexpr const char* name() {return "subbandCQIList_t";} + using parent_t = SubbandCQIList; + static constexpr bool optional = true; + + }; + subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;} + subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + void clear() + { + rI.clear(); + widebandCQI.clear(); + subbandSize.clear(); + subbandCQIList.clear(); + iE_Extensions.clear(); + + }; + private: + rI_t rI; + widebandCQI_t widebandCQI; + subbandSize_t subbandSize; + subbandCQIList_t subbandCQIList; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcessItem : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcess_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF + SEQUENCE { + cSIProcessConfigurationIndex INTEGER (1..7, ...), + cSIReportPerCSIProcessItem CSIReportPerCSIProcessItem, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cSIProcessConfigurationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";} + using parent_t = asn::integer<>; + + }; + + cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;} + cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;} + struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem + { + static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";} + using parent_t = CSIReportPerCSIProcessItem; + + }; + cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;} + cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + void clear() + { + cSIProcessConfigurationIndex.clear(); + cSIReportPerCSIProcessItem.clear(); + iE_Extensions.clear(); + + }; + private: + cSIProcessConfigurationIndex_t cSIProcessConfigurationIndex; + cSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcess : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + uEID UEID, + cSIReportPerCSIProcess CSIReportPerCSIProcess, + iE-Extensions ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportList_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportList_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEID_t : UEID + { + static constexpr const char* name() {return "uEID_t";} + using parent_t = UEID; + + }; + uEID_t& ref_uEID() {return uEID;} + uEID_t const& ref_uEID() const {return uEID;} + struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess + { + static constexpr const char* name() {return "cSIReportPerCSIProcess_t";} + using parent_t = CSIReportPerCSIProcess; + + }; + cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;} + cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + void clear() + { + uEID.clear(); + cSIReportPerCSIProcess.clear(); + iE_Extensions.clear(); + + }; + private: + uEID_t uEID; + cSIReportPerCSIProcess_t cSIReportPerCSIProcess; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportList : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CapacityValue ::= INTEGER (0..100) +*/ + +struct CapacityValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CapacityValue";} + using parent_t = asn::integer<>; + +}; + +/* +CauseRadioNetwork ::= ENUMERATED { + handover-desirable-for-radio-reasons, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + partial-handover, + unknown-new-eNB-UE-X2AP-ID, + unknown-old-eNB-UE-X2AP-ID, + unknown-pair-of-UE-X2AP-ID, + ho-target-not-allowed, + tx2relocoverall-expiry, + trelocprep-expiry, + cell-not-available, + no-radio-resources-available-in-target-cell, + invalid-MME-GroupID, + unknown-MME-Code, + encryption-and-or-integrity-protection-algorithms-not-supported, + reportCharacteristicsEmpty, + noReportPeriodicity, + existingMeasurementID, + unknown-eNB-Measurement-ID, + measurement-temporarily-not-available, + unspecified, + ..., + load-balancing, + handover-optimisation, + value-out-of-allowed-range, + multiple-E-RAB-ID-instances, + switch-off-ongoing, + not-supported-QCI-value, + measurement-not-supported-for-the-object, + tDCoverall-expiry, + tDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-aupported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + mCG-Mobility, + sCG-Mobility, + count-reaches-max-value, + unknown-old-en-gNB-UE-X2AP-ID, + pDCP-Overload + +} +*/ + +struct CauseRadioNetwork : asn::enumerated<51, 29, true> +{ + static constexpr const char* name() {return "CauseRadioNetwork";} + using parent_t = asn::enumerated<51, 29, true>; + typedef enum { + handover_desirable_for_radio_reasons + ,time_critical_handover + ,resource_optimisation_handover + ,reduce_load_in_serving_cell + ,partial_handover + ,unknown_new_eNB_UE_X2AP_ID + ,unknown_old_eNB_UE_X2AP_ID + ,unknown_pair_of_UE_X2AP_ID + ,ho_target_not_allowed + ,tx2relocoverall_expiry + ,trelocprep_expiry + ,cell_not_available + ,no_radio_resources_available_in_target_cell + ,invalid_MME_GroupID + ,unknown_MME_Code + ,encryption_and_or_integrity_protection_algorithms_not_supported + ,reportCharacteristicsEmpty + ,noReportPeriodicity + ,existingMeasurementID + ,unknown_eNB_Measurement_ID + ,measurement_temporarily_not_available + ,unspecified + ,load_balancing + ,handover_optimisation + ,value_out_of_allowed_range + ,multiple_E_RAB_ID_instances + ,switch_off_ongoing + ,not_supported_QCI_value + ,measurement_not_supported_for_the_object + ,tDCoverall_expiry + ,tDCprep_expiry + ,action_desirable_for_radio_reasons + ,reduce_load + ,resource_optimisation + ,time_critical_action + ,target_not_allowed + ,no_radio_resources_available + ,invalid_QoS_combination + ,encryption_algorithms_not_aupported + ,procedure_cancelled + ,rRM_purpose + ,improve_user_bit_rate + ,user_inactivity + ,radio_connection_with_UE_lost + ,failure_in_the_radio_interface_procedure + ,bearer_option_not_supported + ,mCG_Mobility + ,sCG_Mobility + ,count_reaches_max_value + ,unknown_old_en_gNB_UE_X2AP_ID + ,pDCP_Overload + } index_t; + +}; + +/* +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} +*/ + +struct CauseTransport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CauseTransport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + transport_resource_unavailable + ,unspecified + } index_t; + +}; + +/* +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + unspecified, + abstract-syntax-error-falsely-constructed-message, + ... +} +*/ + +struct CauseProtocol : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "CauseProtocol";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + transfer_syntax_error + ,abstract_syntax_error_reject + ,abstract_syntax_error_ignore_and_notify + ,message_not_compatible_with_receiver_state + ,semantic_error + ,unspecified + ,abstract_syntax_error_falsely_constructed_message + } index_t; + +}; + +/* +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + om-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} +*/ + +struct CauseMisc : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "CauseMisc";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + control_processing_overload + ,hardware_failure + ,om_intervention + ,not_enough_user_plane_processing_resources + ,unspecified + } index_t; + +}; + +/* +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ... +} +*/ + +struct Cause : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "Cause";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~Cause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } +*/ + +struct Cell_Size : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "Cell-Size";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + verysmall + ,small + ,medium + ,large + } index_t; + +}; + +/* +CellCapacityClassValue ::= INTEGER (1..100, ...) +*/ + +struct CellCapacityClassValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CellCapacityClassValue";} + using parent_t = asn::integer<>; + +}; + +/* +CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...} +*/ + +struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellDeploymentStatusIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + pre_change_notification + } index_t; + +}; + +/* +ReplacingCellsList-Item ::= SEQUENCE { + eCGI ECGI, + ... +} +*/ + +struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ReplacingCellsList-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + template void decode(V& v) + { + v(eCGI); + + }; + template void encode(V& v) const + { + v(eCGI); + + }; + void clear() + { + eCGI.clear(); + + }; + private: + eCGI_t eCGI; + +}; +/* +ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item +*/ + +struct ReplacingCellsList_elm : ReplacingCellsList_Item +{ + static constexpr const char* name() {return "ReplacingCellsList_elm";} + using parent_t = ReplacingCellsList_Item; + +}; +struct ReplacingCellsList : asn::sequenceof +{ + static constexpr const char* name() {return "ReplacingCellsList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellReplacingInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellReplacingInfo ::= SEQUENCE { + replacingCellsList ReplacingCellsList, + iE-Extensions ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellReplacingInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellReplacingInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct replacingCellsList_t : ReplacingCellsList + { + static constexpr const char* name() {return "replacingCellsList_t";} + using parent_t = ReplacingCellsList; + + }; + replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;} + replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(replacingCellsList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(replacingCellsList); + v(iE_Extensions); + + }; + void clear() + { + replacingCellsList.clear(); + iE_Extensions.clear(); + + }; + private: + replacingCellsList_t replacingCellsList; + iE_Extensions_t iE_Extensions; + +}; +/* +CellReportingIndicator ::= ENUMERATED {stop-request, ... } +*/ + +struct CellReportingIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellReportingIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + stop_request + } index_t; + +}; + +/* +CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellType_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellType ::= SEQUENCE { + cell-Size Cell-Size, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellType : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellType";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_Size_t : Cell_Size + { + static constexpr const char* name() {return "cell_Size_t";} + using parent_t = Cell_Size; + + }; + cell_Size_t& ref_cell_Size() {return cell_Size;} + cell_Size_t const& ref_cell_Size() const {return cell_Size;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_Size); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_Size); + v(iE_Extensions); + + }; + void clear() + { + cell_Size.clear(); + iE_Extensions.clear(); + + }; + private: + cell_Size_t cell_Size; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPHypothesisSetItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPHypothesisSetItem ::= SEQUENCE { + coMPCellID ECGI, + coMPHypothesis BIT STRING (SIZE(6..4400, ...)), + iE-Extensions ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPHypothesisSetItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPCellID_t : ECGI + { + static constexpr const char* name() {return "coMPCellID_t";} + using parent_t = ECGI; + + }; + coMPCellID_t& ref_coMPCellID() {return coMPCellID;} + coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;} + struct coMPHypothesis_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coMPHypothesis_t";} + using parent_t = asn::bstring<>; + + }; + + coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;} + coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + void clear() + { + coMPCellID.clear(); + coMPHypothesis.clear(); + iE_Extensions.clear(); + + }; + private: + coMPCellID_t coMPCellID; + coMPHypothesis_t coMPHypothesis; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem +*/ + +struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem +{ + static constexpr const char* name() {return "CoMPHypothesisSet_elm";} + using parent_t = CoMPHypothesisSetItem; + +}; +struct CoMPHypothesisSet : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPHypothesisSet";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF + SEQUENCE { + coMPHypothesisSet CoMPHypothesisSet, + benefitMetric BenefitMetric, + iE-Extensions ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationItem_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPHypothesisSet_t : CoMPHypothesisSet + { + static constexpr const char* name() {return "coMPHypothesisSet_t";} + using parent_t = CoMPHypothesisSet; + + }; + coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;} + coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;} + struct benefitMetric_t : BenefitMetric + { + static constexpr const char* name() {return "benefitMetric_t";} + using parent_t = BenefitMetric; + + }; + benefitMetric_t& ref_benefitMetric() {return benefitMetric;} + benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + void clear() + { + coMPHypothesisSet.clear(); + benefitMetric.clear(); + iE_Extensions.clear(); + + }; + private: + coMPHypothesisSet_t coMPHypothesisSet; + benefitMetric_t benefitMetric; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationItem : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF + SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationStartTime_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationStartTime : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationStartTime";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CoMPInformation ::= SEQUENCE { + coMPInformationItem CoMPInformationItem, + coMPInformationStartTime CoMPInformationStartTime, + iE-Extensions ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPInformationItem_t : CoMPInformationItem + { + static constexpr const char* name() {return "coMPInformationItem_t";} + using parent_t = CoMPInformationItem; + + }; + coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;} + coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;} + struct coMPInformationStartTime_t : CoMPInformationStartTime + { + static constexpr const char* name() {return "coMPInformationStartTime_t";} + using parent_t = CoMPInformationStartTime; + + }; + coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;} + coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + void clear() + { + coMPInformationItem.clear(); + coMPInformationStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + coMPInformationItem_t coMPInformationItem; + coMPInformationStartTime_t coMPInformationStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacity_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "CompositeAvailableCapacity";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cellCapacityClassValue_t : CellCapacityClassValue + { + static constexpr const char* name() {return "cellCapacityClassValue_t";} + using parent_t = CellCapacityClassValue; + static constexpr bool optional = true; + + }; + cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;} + cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;} + struct capacityValue_t : CapacityValue + { + static constexpr const char* name() {return "capacityValue_t";} + using parent_t = CapacityValue; + + }; + capacityValue_t& ref_capacityValue() {return capacityValue;} + capacityValue_t const& ref_capacityValue() const {return capacityValue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + void clear() + { + cellCapacityClassValue.clear(); + capacityValue.clear(); + iE_Extensions.clear(); + + }; + private: + cellCapacityClassValue_t cellCapacityClassValue; + capacityValue_t capacityValue; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacityGroup_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompositeAvailableCapacityGroup";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;} + dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;} + struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;} + uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + void clear() + { + dL_CompositeAvailableCapacity.clear(); + uL_CompositeAvailableCapacity.clear(); + iE_Extensions.clear(); + + }; + private: + dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + iE_Extensions_t iE_Extensions; + +}; +/* +Correlation-ID ::= OCTET STRING (SIZE (4)) +*/ + +struct Correlation_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Correlation-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +CoverageModification-Item ::= SEQUENCE { + eCGI ECGI, + coverageState INTEGER (0..15, ...), + cellDeploymentStatusIndicator CellDeploymentStatusIndicator OPTIONAL, + cellReplacingInfo CellReplacingInfo OPTIONAL, +-- Included in case the Cell Deployment Status Indicator IE is present + ... +} +*/ + +struct CoverageModification_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "CoverageModification-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct coverageState_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coverageState_t";} + using parent_t = asn::integer<>; + + }; + + coverageState_t& ref_coverageState() {return coverageState;} + coverageState_t const& ref_coverageState() const {return coverageState;} + struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator + { + static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";} + using parent_t = CellDeploymentStatusIndicator; + static constexpr bool optional = true; + + }; + cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;} + cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;} + struct cellReplacingInfo_t : CellReplacingInfo + { + static constexpr const char* name() {return "cellReplacingInfo_t";} + using parent_t = CellReplacingInfo; + static constexpr bool optional = true; + + }; + cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;} + cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + template void encode(V& v) const + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + void clear() + { + eCGI.clear(); + coverageState.clear(); + cellDeploymentStatusIndicator.clear(); + cellReplacingInfo.clear(); + + }; + private: + eCGI_t eCGI; + coverageState_t coverageState; + cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator; + cellReplacingInfo_t cellReplacingInfo; + +}; +/* +CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item +*/ + +struct CoverageModificationList_elm : CoverageModification_Item +{ + static constexpr const char* name() {return "CoverageModificationList_elm";} + using parent_t = CoverageModification_Item; + +}; +struct CoverageModificationList : asn::sequenceof +{ + static constexpr const char* name() {return "CoverageModificationList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +*/ + +struct TypeOfError : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "TypeOfError";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_understood + ,missing + } index_t; + +}; + +/* +CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct iECriticality_t : Criticality + { + static constexpr const char* name() {return "iECriticality_t";} + using parent_t = Criticality; + + }; + iECriticality_t& ref_iECriticality() {return iECriticality;} + iECriticality_t const& ref_iECriticality() const {return iECriticality;} + struct iE_ID_t : ProtocolIE_ID + { + static constexpr const char* name() {return "iE_ID_t";} + using parent_t = ProtocolIE_ID; + + }; + iE_ID_t& ref_iE_ID() {return iE_ID;} + iE_ID_t const& ref_iE_ID() const {return iE_ID;} + struct typeOfError_t : TypeOfError + { + static constexpr const char* name() {return "typeOfError_t";} + using parent_t = TypeOfError; + + }; + typeOfError_t& ref_typeOfError() {return typeOfError;} + typeOfError_t const& ref_typeOfError() const {return typeOfError;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + void clear() + { + iECriticality.clear(); + iE_ID.clear(); + typeOfError.clear(); + iE_Extensions.clear(); + + }; + private: + iECriticality_t iECriticality; + iE_ID_t iE_ID; + typeOfError_t typeOfError; + iE_Extensions_t iE_Extensions; + +}; +struct CriticalityDiagnostics_IE_List : asn::sequenceof +{ + static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "CriticalityDiagnostics";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + static constexpr bool optional = true; + + }; + procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;} + procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;} + struct triggeringMessage_t : TriggeringMessage + { + static constexpr const char* name() {return "triggeringMessage_t";} + using parent_t = TriggeringMessage; + static constexpr bool optional = true; + + }; + triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;} + triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;} + struct procedureCriticality_t : Criticality + { + static constexpr const char* name() {return "procedureCriticality_t";} + using parent_t = Criticality; + static constexpr bool optional = true; + + }; + procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;} + procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;} + struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List + { + static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";} + using parent_t = CriticalityDiagnostics_IE_List; + static constexpr bool optional = true; + + }; + iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;} + iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + void clear() + { + procedureCode.clear(); + triggeringMessage.clear(); + procedureCriticality.clear(); + iEsCriticalityDiagnostics.clear(); + iE_Extensions.clear(); + + }; + private: + procedureCode_t procedureCode; + triggeringMessage_t triggeringMessage; + procedureCriticality_t procedureCriticality; + iEsCriticalityDiagnostics_t iEsCriticalityDiagnostics; + iE_Extensions_t iE_Extensions; + +}; +/* +DL-Forwarding ::= ENUMERATED { + dL-forwardingProposed, + ... +} +*/ + +struct DL_Forwarding : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DL-Forwarding";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + dL_forwardingProposed + } index_t; + +}; + +/* +DL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct DL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) +*/ + +struct DataTrafficResources : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DataTrafficResources";} + using parent_t = asn::bstring<>; + +}; + +/* +DLResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct DLResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +DLResourcesULandDLSharing ::= CHOICE { +unchanged NULL, + changed DLResourceBitmapULandDLSharing, + ... +} +*/ + +struct DLResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DLResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DLResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : DLResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = DLResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +DRB-ID ::= INTEGER (1..32) +*/ + +struct DRB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DRB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULOnlySharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULOnlySharing ::= SEQUENCE{ + uLResourceBitmapULOnlySharing DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULOnlySharing : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULOnlySharing";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uLResourceBitmapULOnlySharing_t : DataTrafficResources + { + static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";} + using parent_t = DataTrafficResources; + + }; + uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;} + uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourceBitmapULOnlySharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing; + iE_Extensions_t iE_Extensions; + +}; +/* +ULResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct ULResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +ULResourcesULandDLSharing ::= CHOICE { + unchanged NULL, + changed ULResourceBitmapULandDLSharing, + ... +} +*/ + +struct ULResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ULResourcesULandDLSharing";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ULResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : ULResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = ULResourceBitmapULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULandDLSharing_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULandDLSharing ::= SEQUENCE{ + uLResourcesULandDLSharing ULResourcesULandDLSharing, + dLResourcesULandDLSharing DLResourcesULandDLSharing, + iE-Extensions ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULandDLSharing : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ULandDLSharing";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing + { + static constexpr const char* name() {return "uLResourcesULandDLSharing_t";} + using parent_t = ULResourcesULandDLSharing; + + }; + uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;} + uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;} + struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing + { + static constexpr const char* name() {return "dLResourcesULandDLSharing_t";} + using parent_t = DLResourcesULandDLSharing; + + }; + dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;} + dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourcesULandDLSharing.clear(); + dLResourcesULandDLSharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourcesULandDLSharing_t uLResourcesULandDLSharing; + dLResourcesULandDLSharing_t dLResourcesULandDLSharing; + iE_Extensions_t iE_Extensions; + +}; +/* +SharedResourceType ::= CHOICE{ + uLOnlySharing ULOnlySharing, + uLandDLSharing ULandDLSharing, + ... +} +*/ + +struct SharedResourceType : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SharedResourceType";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SharedResourceType() {clear();} + struct uLOnlySharing_t : ULOnlySharing + { + static constexpr const char* name() {return "uLOnlySharing_t";} + using parent_t = ULOnlySharing; + + }; + struct uLandDLSharing_t : ULandDLSharing + { + static constexpr const char* name() {return "uLandDLSharing_t";} + using parent_t = ULandDLSharing; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(uLOnlySharing_t)]; + char dummy2[sizeof(uLandDLSharing_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...} +*/ + +struct SubframeType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SubframeType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + mbsfn + ,nonmbsfn + } index_t; + +}; + +/* +ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ReservedSubframePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ReservedSubframePattern ::= SEQUENCE{ + subframeType SubframeType, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mBSFNControlRegionLength INTEGER (0..3), + iE-Extensions ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ReservedSubframePattern : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ReservedSubframePattern";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct subframeType_t : SubframeType + { + static constexpr const char* name() {return "subframeType_t";} + using parent_t = SubframeType; + + }; + subframeType_t& ref_subframeType() {return subframeType;} + subframeType_t const& ref_subframeType() const {return subframeType;} + struct reservedSubframePattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = asn::bstring<>; + + }; + + reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;} + reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + + }; + + mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + void clear() + { + subframeType.clear(); + reservedSubframePattern.clear(); + mBSFNControlRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + subframeType_t subframeType; + reservedSubframePattern_t reservedSubframePattern; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DataTrafficResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN INTEGER (0..1023), + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, +... +} +*/ + +struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "DataTrafficResourceIndication";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct sharedResourceType_t : SharedResourceType + { + static constexpr const char* name() {return "sharedResourceType_t";} + using parent_t = SharedResourceType; + + }; + sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;} + sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;} + struct reservedSubframePattern_t : ReservedSubframePattern + { + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = ReservedSubframePattern; + static constexpr bool optional = true; + + }; + reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;} + reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + sharedResourceType.clear(); + reservedSubframePattern.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + sharedResourceType_t sharedResourceType; + reservedSubframePattern_t reservedSubframePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +DeactivationIndication::= ENUMERATED { + deactivated, + ... +} +*/ + +struct DeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + deactivated + } index_t; + +}; + +/* +DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DeliveryStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DeliveryStatus ::= SEQUENCE { + highestSuccessDeliveredPDCPSN INTEGER (0..4095), + iE-Extensions ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DeliveryStatus : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "DeliveryStatus";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct highestSuccessDeliveredPDCPSN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";} + using parent_t = asn::integer<>; + + }; + + highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;} + highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + void clear() + { + highestSuccessDeliveredPDCPSN.clear(); + iE_Extensions.clear(); + + }; + private: + highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN; + iE_Extensions_t iE_Extensions; + +}; +/* +DuplicationActivation::= ENUMERATED {active, inactive, ...} +*/ + +struct DuplicationActivation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "DuplicationActivation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + active + ,inactive + } index_t; + +}; + +/* +PA-Values ::= ENUMERATED { + dB-6, + dB-4dot77, + dB-3, + dB-1dot77, + dB0, + dB1, + dB2, + dB3, + ... +} +*/ + +struct PA_Values : asn::enumerated<8, 0, true> +{ + static constexpr const char* name() {return "PA-Values";} + using parent_t = asn::enumerated<8, 0, true>; + typedef enum { + dB_6 + ,dB_4dot77 + ,dB_3 + ,dB_1dot77 + ,dB0 + ,dB1 + ,dB2 + ,dB3 + } index_t; + +}; + +/* +DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DynamicNAICSInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DynamicNAICSInformation ::= SEQUENCE { + transmissionModes BIT STRING (SIZE(8)) OPTIONAL, + pB-information INTEGER(0..3) OPTIONAL, + pA-list SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values, + iE-Extensions ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "DynamicNAICSInformation";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct transmissionModes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "transmissionModes_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;} + transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;} + struct pB_information_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pB_information_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;} + pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;} + struct pA_list_t_elm : PA_Values + { + static constexpr const char* name() {return "pA_list_t_elm";} + using parent_t = PA_Values; + + }; + struct pA_list_t : asn::sequenceof + { + static constexpr const char* name() {return "pA_list_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + pA_list_t& ref_pA_list() {return pA_list;} + pA_list_t const& ref_pA_list() const {return pA_list;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + void clear() + { + transmissionModes.clear(); + pB_information.clear(); + pA_list.clear(); + iE_Extensions.clear(); + + }; + private: + transmissionModes_t transmissionModes; + pB_information_t pB_information; + pA_list_t pA_list; + iE_Extensions_t iE_Extensions; + +}; +/* +DynamicDLTransmissionInformation ::= CHOICE { + naics-active DynamicNAICSInformation, + naics-inactive NULL, + ... +} +*/ + +struct DynamicDLTransmissionInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DynamicDLTransmissionInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~DynamicDLTransmissionInformation() {clear();} + struct naics_active_t : DynamicNAICSInformation + { + static constexpr const char* name() {return "naics_active_t";} + using parent_t = DynamicNAICSInformation; + + }; + struct naics_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "naics_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as();} return nullptr; } + naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(naics_active_t)]; + char dummy2[sizeof(naics_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RAB-ID ::= INTEGER (0..15, ...) +*/ + +struct E_RAB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "E-RAB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RAB_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RAB-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RAB_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(id_E_RAB_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RAB_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RAB_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RAB_Item& select_id_E_RAB_Item() { return set(1); } + E_RAB_Item const* get_id_E_RAB_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RAB_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RAB_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RAB_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +QCI ::= INTEGER (0..255) +*/ + +struct QCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "QCI";} + using parent_t = asn::integer<>; + +}; + +/* +ExtendedBitRate ::= INTEGER (10000000001..4000000000000,...) +*/ + +struct ExtendedBitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ExtendedBitRate";} + using parent_t = asn::integer<>; + +}; + +/* +GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for maximum bitrate > 10Gbps -- + { ID id-extended-e-RAB-MaximumBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-MaximumBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct GBR_QosInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; } + else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateDL);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set(1); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get(1); } + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set(2); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get(2); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set(3); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get(3); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set(4); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_e_RAB_MaximumBitrateDL()); return true; + case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true; + case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true; + case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GBR_QosInformation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "GBR-QosInformation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_MaximumBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;} + e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;} + struct e_RAB_MaximumBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;} + e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;} + struct e_RAB_GuaranteedBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;} + e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;} + struct e_RAB_GuaranteedBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;} + e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_MaximumBitrateDL.clear(); + e_RAB_MaximumBitrateUL.clear(); + e_RAB_GuaranteedBitrateDL.clear(); + e_RAB_GuaranteedBitrateUL.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_MaximumBitrateDL_t e_RAB_MaximumBitrateDL; + e_RAB_MaximumBitrateUL_t e_RAB_MaximumBitrateUL; + e_RAB_GuaranteedBitrateDL_t e_RAB_GuaranteedBitrateDL; + e_RAB_GuaranteedBitrateUL_t e_RAB_GuaranteedBitrateUL; + iE_Extensions_t iE_Extensions; + +}; +/* +Packet-LossRate ::= INTEGER(0..1000) +*/ + +struct Packet_LossRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Packet-LossRate";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance – + { ID id-DownlinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}| + { ID id-UplinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;} + void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DownlinkPacketLossRate)) { type = 1; return true; } + else if(equal(id_UplinkPacketLossRate)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DownlinkPacketLossRate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(ignore); type=1;} + void select_id_UplinkPacketLossRate() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Packet_LossRate& select_id_DownlinkPacketLossRate() { return set(1); } + Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get(1); } + Packet_LossRate& select_id_UplinkPacketLossRate() { return set(2); } + Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DownlinkPacketLossRate()); return true; + case 2: v(select_id_UplinkPacketLossRate()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Packet_LossRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DownlinkPacketLossRate() { set(optional); type=1;} + void select_id_UplinkPacketLossRate() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RAB-Level-QoS-Parameters ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct qCI_t : QCI + { + static constexpr const char* name() {return "qCI_t";} + using parent_t = QCI; + + }; + qCI_t& ref_qCI() {return qCI;} + qCI_t const& ref_qCI() const {return qCI;} + struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority + { + static constexpr const char* name() {return "allocationAndRetentionPriority_t";} + using parent_t = AllocationAndRetentionPriority; + + }; + allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;} + allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;} + struct gbrQosInformation_t : GBR_QosInformation + { + static constexpr const char* name() {return "gbrQosInformation_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;} + gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + void clear() + { + qCI.clear(); + allocationAndRetentionPriority.clear(); + gbrQosInformation.clear(); + iE_Extensions.clear(); + + }; + private: + qCI_t qCI; + allocationAndRetentionPriority_t allocationAndRetentionPriority; + gbrQosInformation_t gbrQosInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } +*/ + +struct E_RAB_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RAB_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RAB_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RAB-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..4294967295), + usageCountDL INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABUsageReport-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct startTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;} + startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;} + struct endTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "endTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;} + endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;} + struct usageCountUL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountUL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountUL_t& ref_usageCountUL() {return usageCountUL;} + usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;} + struct usageCountDL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountDL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountDL_t& ref_usageCountDL() {return usageCountDL;} + usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + void clear() + { + startTimeStamp.clear(); + endTimeStamp.clear(); + usageCountUL.clear(); + usageCountDL.clear(); + iE_Extensions.clear(); + + }; + private: + startTimeStamp_t startTimeStamp; + endTimeStamp_t endTimeStamp; + usageCountUL_t usageCountUL; + usageCountDL_t usageCountDL; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABUsageReport-Item CRITICALITY ignore TYPE E-RABUsageReport-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(id_E_RABUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set(1); } + E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} } +*/ + +struct E_RABUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +EARFCN ::= INTEGER (0..maxEARFCN) +*/ + +struct EARFCN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCN";} + using parent_t = asn::integer<>; + +}; + +/* +EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...) +*/ + +struct EARFCNExtension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCNExtension";} + using parent_t = asn::integer<>; + +}; + +/* +EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EN_DC_ResourceConfigurationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EN-DC-ResourceConfiguration ::= SEQUENCE { + pDCPatSgNB ENUMERATED {present, not-present, ...}, + mCGresources ENUMERATED {present, not-present, ...}, + sCGresources ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} } OPTIONAL, + ... +} +*/ + +struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "EN-DC-ResourceConfiguration";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct pDCPatSgNB_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "pDCPatSgNB_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;} + pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;} + struct mCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "mCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + mCGresources_t& ref_mCGresources() {return mCGresources;} + mCGresources_t const& ref_mCGresources() const {return mCGresources;} + struct sCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "sCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + sCGresources_t& ref_sCGresources() {return sCGresources;} + sCGresources_t const& ref_sCGresources() const {return sCGresources;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + void clear() + { + pDCPatSgNB.clear(); + mCGresources.clear(); + sCGresources.clear(); + iE_Extensions.clear(); + + }; + private: + pDCPatSgNB_t pDCPatSgNB; + mCGresources_t mCGresources; + sCGresources_t sCGresources; + iE_Extensions_t iE_Extensions; + +}; +/* +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)) +} +*/ + +struct ENB_ID : asn::choice<4, 2, true> +{ + static constexpr const char* name() {return "ENB-ID";} + using parent_t = asn::choice<4, 2, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~ENB_ID() {clear();} + struct macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct home_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "home_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct short_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "short_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct long_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "long_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as();} return nullptr; } + short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as();} return nullptr; } + long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(macro_eNB_ID_t)]; + char dummy2[sizeof(home_eNB_ID_t)]; + char dummy3[sizeof(short_Macro_eNB_ID_t)]; + char dummy4[sizeof(long_Macro_eNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity +*/ + +struct EPLMNs_elm : PLMN_Identity +{ + static constexpr const char* name() {return "EPLMNs_elm";} + using parent_t = PLMN_Identity; + +}; +struct EPLMNs : asn::sequenceof +{ + static constexpr const char* name() {return "EPLMNs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} +*/ + +struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "UserPlaneTrafficActivityReport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + inactive + ,re_activated + } index_t; + +}; + +/* +ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ERABActivityNotifyItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ERABActivityNotifyItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + activityReport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ERABActivityNotifyItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct activityReport_t : UserPlaneTrafficActivityReport + { + static constexpr const char* name() {return "activityReport_t";} + using parent_t = UserPlaneTrafficActivityReport; + + }; + activityReport_t& ref_activityReport() {return activityReport;} + activityReport_t const& ref_activityReport() const {return activityReport;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + activityReport.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + activityReport_t activityReport; + iE_Extensions_t iE_Extensions; + +}; +/* +ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem +*/ + +struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";} + using parent_t = ERABActivityNotifyItem; + +}; +struct ERABActivityNotifyItemList : asn::sequenceof +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ..., + bw1 +} +*/ + +struct Transmission_Bandwidth : asn::enumerated<7, 1, true> +{ + static constexpr const char* name() {return "Transmission-Bandwidth";} + using parent_t = asn::enumerated<7, 1, true>; + typedef enum { + bw6 + ,bw15 + ,bw25 + ,bw50 + ,bw75 + ,bw100 + ,bw1 + } index_t; + +}; + +/* +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ... +} +*/ + +struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true> +{ + static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";} + using parent_t = asn::enumerated<21, 0, true>; + typedef enum { + minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,minusZeroDotFive + ,zero + ,one + ,two + ,three + ,four + ,five + ,six + ,seven + ,eight + ,nine + } index_t; + +}; + +/* +NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...} +*/ + +struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NRS-NSSS-PowerOffset";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + minusThree + ,zero + ,three + } index_t; + +}; + +/* +NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...} +*/ + +struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + two + ,four + ,eight + } index_t; + +}; + +/* +FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| + { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, + ... +} +*/ + +struct FDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;} + void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UL_EARFCNExtension)) { type = 1; return true; } + else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; } + else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; } + else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UL_EARFCNExtension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(reject); type=1;} + void select_id_DL_EARFCNExtension() { set(reject); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EARFCNExtension& select_id_UL_EARFCNExtension() { return set(1); } + EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get(1); } + EARFCNExtension& select_id_DL_EARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get(2); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set(3); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get(3); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set(4); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get(4); } + NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set(5); } + NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get(5); } + NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set(6); } + NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UL_EARFCNExtension()); return true; + case 2: v(select_id_DL_EARFCNExtension()); return true; + case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true; + case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true; + case 5: v(select_id_NRS_NSSS_PowerOffset()); return true; + case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(NRS_NSSS_PowerOffset)]; + char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)]; + char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_UL_EARFCNExtension() { set(optional); type=1;} + void select_id_DL_EARFCNExtension() { set(optional); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-Info ::= SEQUENCE { + uL-EARFCN EARFCN, + dL-EARFCN EARFCN, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct uL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "uL_EARFCN_t";} + using parent_t = EARFCN; + + }; + uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;} + uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;} + struct dL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "dL_EARFCN_t";} + using parent_t = EARFCN; + + }; + dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;} + dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;} + struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;} + uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;} + struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;} + dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + void clear() + { + uL_EARFCN.clear(); + dL_EARFCN.clear(); + uL_Transmission_Bandwidth.clear(); + dL_Transmission_Bandwidth.clear(); + iE_Extensions.clear(); + + }; + private: + uL_EARFCN_t uL_EARFCN; + dL_EARFCN_t dL_EARFCN; + uL_Transmission_Bandwidth_t uL_Transmission_Bandwidth; + dL_Transmission_Bandwidth_t dL_Transmission_Bandwidth; + iE_Extensions_t iE_Extensions; + +}; +/* +SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} +*/ + +struct SubframeAssignment : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "SubframeAssignment";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sa0 + ,sa1 + ,sa2 + ,sa3 + ,sa4 + ,sa5 + ,sa6 + } index_t; + +}; + +/* +SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ... +} +*/ + +struct SpecialSubframePatterns : asn::enumerated<9, 0, true> +{ + static constexpr const char* name() {return "SpecialSubframePatterns";} + using parent_t = asn::enumerated<9, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + } index_t; + +}; + +/* +SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SpecialSubframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns SpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct specialSubframePatterns_t : SpecialSubframePatterns + { + static constexpr const char* name() {return "specialSubframePatterns_t";} + using parent_t = SpecialSubframePatterns; + + }; + specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;} + specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + specialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + specialSubframePatterns_t specialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}, + ... +} +*/ + +struct TDD_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_AdditionalSpecialSubframe_Info)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframe_Info);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set(1); } + AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set(3); } + AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_AdditionalSpecialSubframe_Info()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)]; + char dummy2[sizeof(AdditionalSpecialSubframe_Info)]; + char dummy3[sizeof(EARFCNExtension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_AdditionalSpecialSubframe_Info() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-Info ::= SEQUENCE { + eARFCN EARFCN, + transmission-Bandwidth Transmission-Bandwidth, + subframeAssignment SubframeAssignment, + specialSubframe-Info SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;} + transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;} + struct subframeAssignment_t : SubframeAssignment + { + static constexpr const char* name() {return "subframeAssignment_t";} + using parent_t = SubframeAssignment; + + }; + subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;} + subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;} + struct specialSubframe_Info_t : SpecialSubframe_Info + { + static constexpr const char* name() {return "specialSubframe_Info_t";} + using parent_t = SpecialSubframe_Info; + + }; + specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;} + specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + void clear() + { + eARFCN.clear(); + transmission_Bandwidth.clear(); + subframeAssignment.clear(); + specialSubframe_Info.clear(); + iE_Extensions.clear(); + + }; + private: + eARFCN_t eARFCN; + transmission_Bandwidth_t transmission_Bandwidth; + subframeAssignment_t subframeAssignment; + specialSubframe_Info_t specialSubframe_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +EUTRA-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + ... +} +*/ + +struct EUTRA_Mode_Info : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "EUTRA-Mode-Info";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~EUTRA_Mode_Info() {clear();} + struct fDD_t : FDD_Info + { + static constexpr const char* name() {return "fDD_t";} + using parent_t = FDD_Info; + + }; + struct tDD_t : TDD_Info + { + static constexpr const char* name() {return "tDD_t";} + using parent_t = TDD_Info; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fDD_t)]; + char dummy2[sizeof(tDD_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANTraceID ::= OCTET STRING (SIZE (8)) +*/ + +struct EUTRANTraceID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANTraceID";} + using parent_t = asn::ostring<>; + +}; + +/* +EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct EncryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EncryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +RNTP-Threshold ::= ENUMERATED { + minusInfinity, + minusEleven, + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + zero, + one, + two, + three, + ... +} +*/ + +struct RNTP_Threshold : asn::enumerated<16, 0, true> +{ + static constexpr const char* name() {return "RNTP-Threshold";} + using parent_t = asn::enumerated<16, 0, true>; + typedef enum { + minusInfinity + ,minusEleven + ,minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,zero + ,one + ,two + ,three + } index_t; + +}; + +/* +EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTPStartTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTPStartTime ::= SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "EnhancedRNTPStartTime";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +/* +EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTP_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EnhancedRNTP ::= SEQUENCE { + enhancedRNTPBitmap BIT STRING (SIZE(12..8800, ...)), + rNTP-High-Power-Threshold RNTP-Threshold, + enhancedRNTPStartTime EnhancedRNTPStartTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct EnhancedRNTP : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "EnhancedRNTP";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct enhancedRNTPBitmap_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "enhancedRNTPBitmap_t";} + using parent_t = asn::bstring<>; + + }; + + enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;} + enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;} + struct rNTP_High_Power_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;} + rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;} + struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime + { + static constexpr const char* name() {return "enhancedRNTPStartTime_t";} + using parent_t = EnhancedRNTPStartTime; + static constexpr bool optional = true; + + }; + enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;} + enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + void clear() + { + enhancedRNTPBitmap.clear(); + rNTP_High_Power_Threshold.clear(); + enhancedRNTPStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + enhancedRNTPBitmap_t enhancedRNTPBitmap; + rNTP_High_Power_Threshold_t rNTP_High_Power_Threshold; + enhancedRNTPStartTime_t enhancedRNTPStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +EventType ::= ENUMERATED{ + change-of-serving-cell, + ... +} +*/ + +struct EventType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "EventType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + change_of_serving_cell + } index_t; + +}; + +/* +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedActivityPeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedActivityPeriod";} + using parent_t = asn::integer<>; + +}; + +/* +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} +*/ + +struct ExpectedHOInterval : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "ExpectedHOInterval";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sec15 + ,sec30 + ,sec60 + ,sec90 + ,sec120 + ,sec180 + ,long_time + } index_t; + +}; + +/* +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedIdlePeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedIdlePeriod";} + using parent_t = asn::integer<>; + +}; + +/* +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} +*/ + +struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + subscription_information + ,statistics + } index_t; + +}; + +/* +ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEActivityBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ExpectedUEActivityBehaviour";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct expectedActivityPeriod_t : ExpectedActivityPeriod + { + static constexpr const char* name() {return "expectedActivityPeriod_t";} + using parent_t = ExpectedActivityPeriod; + static constexpr bool optional = true; + + }; + expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;} + expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;} + struct expectedIdlePeriod_t : ExpectedIdlePeriod + { + static constexpr const char* name() {return "expectedIdlePeriod_t";} + using parent_t = ExpectedIdlePeriod; + static constexpr bool optional = true; + + }; + expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;} + expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;} + struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation + { + static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";} + using parent_t = SourceOfUEActivityBehaviourInformation; + static constexpr bool optional = true; + + }; + sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;} + sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + void clear() + { + expectedActivityPeriod.clear(); + expectedIdlePeriod.clear(); + sourceofUEActivityBehaviourInformation.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivityPeriod_t expectedActivityPeriod; + expectedIdlePeriod_t expectedIdlePeriod; + sourceofUEActivityBehaviourInformation_t sourceofUEActivityBehaviourInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEBehaviour_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExpectedUEBehaviour ::= SEQUENCE { + expectedActivity ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ExpectedUEBehaviour";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct expectedActivity_t : ExpectedUEActivityBehaviour + { + static constexpr const char* name() {return "expectedActivity_t";} + using parent_t = ExpectedUEActivityBehaviour; + static constexpr bool optional = true; + + }; + expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;} + expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;} + struct expectedHOInterval_t : ExpectedHOInterval + { + static constexpr const char* name() {return "expectedHOInterval_t";} + using parent_t = ExpectedHOInterval; + static constexpr bool optional = true; + + }; + expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;} + expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + void clear() + { + expectedActivity.clear(); + expectedHOInterval.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivity_t expectedActivity; + expectedHOInterval_t expectedHOInterval; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-InterferenceOverloadIndication-Item ::= ENUMERATED { + high-interference, + medium-interference, + low-interference, + ... +} +*/ + +struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + high_interference + ,medium_interference + ,low_interference + } index_t; + +}; + +/* +UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item +*/ + +struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item +{ + static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";} + using parent_t = UL_InterferenceOverloadIndication_Item; + +}; +struct UL_InterferenceOverloadIndication : asn::sequenceof +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ExtendedULInterferenceOverloadInfo ::= SEQUENCE { + associatedSubframes BIT STRING (SIZE (5)), + extended-ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication, + iE-Extensions ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct associatedSubframes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "associatedSubframes_t";} + using parent_t = asn::bstring<>; + + }; + + associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;} + associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;} + struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + + }; + extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;} + extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + void clear() + { + associatedSubframes.clear(); + extended_ul_InterferenceOverloadIndication.clear(); + iE_Extensions.clear(); + + }; + private: + associatedSubframes_t associatedSubframes; + extended_ul_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +FiveGS-TAC ::= OCTET STRING (SIZE (3)) +*/ + +struct FiveGS_TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FiveGS-TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenInterRATs ::= ENUMERATED { + all, + geran, + utran, + cdma2000, + ..., + geranandutran, + cdma2000andutran + +} +*/ + +struct ForbiddenInterRATs : asn::enumerated<6, 2, true> +{ + static constexpr const char* name() {return "ForbiddenInterRATs";} + using parent_t = asn::enumerated<6, 2, true>; + typedef enum { + all + ,geran + ,utran + ,cdma2000 + ,geranandutran + ,cdma2000andutran + } index_t; + +}; + +/* +LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) +*/ + +struct LAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC +*/ + +struct ForbiddenLACs_elm : LAC +{ + static constexpr const char* name() {return "ForbiddenLACs_elm";} + using parent_t = LAC; + +}; +struct ForbiddenLACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenLAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenLAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenLACs ForbiddenLACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenLAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenLACs_t : ForbiddenLACs + { + static constexpr const char* name() {return "forbiddenLACs_t";} + using parent_t = ForbiddenLACs; + + }; + forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;} + forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenLACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenLACs_t forbiddenLACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item +*/ + +struct ForbiddenLAs_elm : ForbiddenLAs_Item +{ + static constexpr const char* name() {return "ForbiddenLAs_elm";} + using parent_t = ForbiddenLAs_Item; + +}; +struct ForbiddenLAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC +*/ + +struct ForbiddenTACs_elm : TAC +{ + static constexpr const char* name() {return "ForbiddenTACs_elm";} + using parent_t = TAC; + +}; +struct ForbiddenTACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenTAs_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ForbiddenTAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenTAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenTACs_t : ForbiddenTACs + { + static constexpr const char* name() {return "forbiddenTACs_t";} + using parent_t = ForbiddenTACs; + + }; + forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;} + forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenTACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenTACs_t forbiddenTACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item +*/ + +struct ForbiddenTAs_elm : ForbiddenTAs_Item +{ + static constexpr const char* name() {return "ForbiddenTAs_elm";} + using parent_t = ForbiddenTAs_Item; + +}; +struct ForbiddenTAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Fourframes ::= BIT STRING (SIZE (24)) +*/ + +struct Fourframes : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Fourframes";} + using parent_t = asn::bstring<>; + +}; + +/* +FreqBandIndicatorPriority ::= ENUMERATED { + not-broadcasted, + broadcasted, + ... +} +*/ + +struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "FreqBandIndicatorPriority";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_broadcasted + ,broadcasted + } index_t; + +}; + +/* +SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SupportedSULFreqBandItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "SupportedSULFreqBandItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + iE_Extensions_t iE_Extensions; + +}; +/* +FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FreqBandNrItem_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FreqBandNrItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FreqBandNrItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct supportedSULBandList_t_elm : SupportedSULFreqBandItem + { + static constexpr const char* name() {return "supportedSULBandList_t_elm";} + using parent_t = SupportedSULFreqBandItem; + + }; + struct supportedSULBandList_t : asn::sequenceof + { + static constexpr const char* name() {return "supportedSULBandList_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;} + supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + supportedSULBandList.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + supportedSULBandList_t supportedSULBandList; + iE_Extensions_t iE_Extensions; + +}; +/* +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE (22..32)), + ... +} +*/ + +struct GNB_ID : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "GNB-ID";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~GNB_ID() {clear();} + struct gNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(gNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...} +*/ + +struct GNBOverloadInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "GNBOverloadInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + overloaded + ,not_overloaded + } index_t; + +}; + +/* +GTP-TEI ::= OCTET STRING (SIZE (4)) +*/ + +struct GTP_TEI : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "GTP-TEI";} + using parent_t = asn::ostring<>; + +}; + +/* +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TransportLayerAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TransportLayerAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GTPtunnelEndpoint_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GTPtunnelEndpoint ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEI, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GTPtunnelEndpoint";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct gTP_TEID_t : GTP_TEI + { + static constexpr const char* name() {return "gTP_TEID_t";} + using parent_t = GTP_TEI; + + }; + gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;} + gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + gTP_TEID.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + gTP_TEID_t gTP_TEID; + iE_Extensions_t iE_Extensions; + +}; +/* +MME-Group-ID ::= OCTET STRING (SIZE (2)) +*/ + +struct MME_Group_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Group-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GU_Group_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GU-Group-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mME-Group-ID MME-Group-ID, + iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GU_Group_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GU-Group-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct mME_Group_ID_t : MME_Group_ID + { + static constexpr const char* name() {return "mME_Group_ID_t";} + using parent_t = MME_Group_ID; + + }; + mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;} + mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + mME_Group_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + mME_Group_ID_t mME_Group_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID +*/ + +struct GUGroupIDList_elm : GU_Group_ID +{ + static constexpr const char* name() {return "GUGroupIDList_elm";} + using parent_t = GU_Group_ID; + +}; +struct GUGroupIDList : asn::sequenceof +{ + static constexpr const char* name() {return "GUGroupIDList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MME-Code ::= OCTET STRING (SIZE (1)) +*/ + +struct MME_Code : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Code";} + using parent_t = asn::ostring<>; + +}; + +/* +GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GUMMEI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GUMMEI ::= SEQUENCE { + + gU-Group-ID GU-Group-ID, + mME-Code MME-Code, + iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GUMMEI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GUMMEI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct gU_Group_ID_t : GU_Group_ID + { + static constexpr const char* name() {return "gU_Group_ID_t";} + using parent_t = GU_Group_ID; + + }; + gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;} + gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;} + struct mME_Code_t : MME_Code + { + static constexpr const char* name() {return "mME_Code_t";} + using parent_t = MME_Code; + + }; + mME_Code_t& ref_mME_Code() {return mME_Code;} + mME_Code_t const& ref_mME_Code() const {return mME_Code;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + void clear() + { + gU_Group_ID.clear(); + mME_Code.clear(); + iE_Extensions.clear(); + + }; + private: + gU_Group_ID_t gU_Group_ID; + mME_Code_t mME_Code; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalENB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalENB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalENB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalENB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eNB_ID_t : ENB_ID + { + static constexpr const char* name() {return "eNB_ID_t";} + using parent_t = ENB_ID; + + }; + eNB_ID_t& ref_eNB_ID() {return eNB_ID;} + eNB_ID_t const& ref_eNB_ID() const {return eNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eNB_ID_t eNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalGNB_ID_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GlobalGNB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalGNB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalGNB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct gNB_ID_t : GNB_ID + { + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = GNB_ID; + + }; + gNB_ID_t& ref_gNB_ID() {return gNB_ID;} + gNB_ID_t const& ref_gNB_ID() const {return gNB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + gNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + gNB_ID_t gNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +LoadIndicator ::= ENUMERATED { + lowLoad, + mediumLoad, + highLoad, + overLoad, + ... +} +*/ + +struct LoadIndicator : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "LoadIndicator";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + lowLoad + ,mediumLoad + ,highLoad + ,overLoad + } index_t; + +}; + +/* +HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct HWLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HWLoadIndicator ::= SEQUENCE { + dLHWLoadIndicator LoadIndicator, + uLHWLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HWLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "HWLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;} + dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;} + struct uLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;} + uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLHWLoadIndicator.clear(); + uLHWLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLHWLoadIndicator_t dLHWLoadIndicator; + uLHWLoadIndicator_t uLHWLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + ..., + interRATpingpong +} +*/ + +struct HandoverReportType : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "HandoverReportType";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + hoTooEarly + ,hoToWrongCell + ,interRATpingpong + } index_t; + +}; + +/* +NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED { + nRrestrictedinEPSasSecondaryRAT, + ... +} +*/ + +struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedinEPSasSecondaryRAT + } index_t; + +}; + +/* +NRrestrictionin5GS ::= ENUMERATED { + nRrestrictedin5GS, + ... +} +*/ + +struct NRrestrictionin5GS : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictionin5GS";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedin5GS + } index_t; + +}; + +/* +HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRrestrictioninEPSasSecondaryRAT CRITICALITY ignore EXTENSION NRrestrictioninEPSasSecondaryRAT PRESENCE optional}| + { ID id-CNTypeRestrictions CRITICALITY ignore EXTENSION CNTypeRestrictions PRESENCE optional}| + { ID id-NRrestrictionin5GS CRITICALITY ignore EXTENSION NRrestrictionin5GS PRESENCE optional}, + ... +} +*/ + +struct HandoverRestrictionList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;} + void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;} + void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; } + else if(equal(id_CNTypeRestrictions)) { type = 2; return true; } + else if(equal(id_NRrestrictionin5GS)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRrestrictioninEPSasSecondaryRAT);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;} + void select_id_CNTypeRestrictions() { set(ignore); type=2;} + void select_id_NRrestrictionin5GS() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set(1); } + NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get(1); } + CNTypeRestrictions& select_id_CNTypeRestrictions() { return set(2); } + CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get(2); } + NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set(3); } + NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRrestrictioninEPSasSecondaryRAT()); return true; + case 2: v(select_id_CNTypeRestrictions()); return true; + case 3: v(select_id_NRrestrictionin5GS()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CNTypeRestrictions)]; + char dummy2[sizeof(NRrestrictionin5GS)]; + char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;} + void select_id_CNTypeRestrictions() { set(optional); type=2;} + void select_id_NRrestrictionin5GS() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRestrictionList ::= SEQUENCE { + servingPLMN PLMN-Identity, + equivalentPLMNs EPLMNs OPTIONAL, + forbiddenTAs ForbiddenTAs OPTIONAL, + forbiddenLAs ForbiddenLAs OPTIONAL, + forbiddenInterRATs ForbiddenInterRATs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HandoverRestrictionList : asn::sequence<6, 0, true, 5> +{ + static constexpr const char* name() {return "HandoverRestrictionList";} + using parent_t = asn::sequence<6, 0, true, 5>; + struct servingPLMN_t : PLMN_Identity + { + static constexpr const char* name() {return "servingPLMN_t";} + using parent_t = PLMN_Identity; + + }; + servingPLMN_t& ref_servingPLMN() {return servingPLMN;} + servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;} + struct equivalentPLMNs_t : EPLMNs + { + static constexpr const char* name() {return "equivalentPLMNs_t";} + using parent_t = EPLMNs; + static constexpr bool optional = true; + + }; + equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;} + equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;} + struct forbiddenTAs_t : ForbiddenTAs + { + static constexpr const char* name() {return "forbiddenTAs_t";} + using parent_t = ForbiddenTAs; + static constexpr bool optional = true; + + }; + forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;} + forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;} + struct forbiddenLAs_t : ForbiddenLAs + { + static constexpr const char* name() {return "forbiddenLAs_t";} + using parent_t = ForbiddenLAs; + static constexpr bool optional = true; + + }; + forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;} + forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;} + struct forbiddenInterRATs_t : ForbiddenInterRATs + { + static constexpr const char* name() {return "forbiddenInterRATs_t";} + using parent_t = ForbiddenInterRATs; + static constexpr bool optional = true; + + }; + forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;} + forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + void clear() + { + servingPLMN.clear(); + equivalentPLMNs.clear(); + forbiddenTAs.clear(); + forbiddenLAs.clear(); + forbiddenInterRATs.clear(); + iE_Extensions.clear(); + + }; + private: + servingPLMN_t servingPLMN; + equivalentPLMNs_t equivalentPLMNs; + forbiddenTAs_t forbiddenTAs; + forbiddenLAs_t forbiddenLAs; + forbiddenInterRATs_t forbiddenInterRATs; + iE_Extensions_t iE_Extensions; + +}; +/* +IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct IntegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "IntegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +InterfacesToTrace ::= BIT STRING (SIZE (8)) +*/ + +struct InterfacesToTrace : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "InterfacesToTrace";} + using parent_t = asn::bstring<>; + +}; + +/* +InvokeIndication ::= ENUMERATED{ + abs-information, + ..., + naics-information-start, + naics-information-stop +} +*/ + +struct InvokeIndication : asn::enumerated<3, 2, true> +{ + static constexpr const char* name() {return "InvokeIndication";} + using parent_t = asn::enumerated<3, 2, true>; + typedef enum { + abs_information + ,naics_information_start + ,naics_information_stop + } index_t; + +}; + +/* +LCID ::= INTEGER(1..32, ...) +*/ + +struct LCID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LCID";} + using parent_t = asn::integer<>; + +}; + +/* +LHN-ID ::= OCTET STRING(SIZE (32..256)) +*/ + +struct LHN_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LHN-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +Time-UE-StayedInCell ::= INTEGER (0..4095) +*/ + +struct Time_UE_StayedInCell : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell";} + using parent_t = asn::integer<>; + +}; + +/* +Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) +*/ + +struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";} + using parent_t = asn::integer<>; + +}; + +/* +LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- + { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| + { ID id-HO-cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;} + void select_id_HO_cause() { set(id_HO_cause); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; } + else if(equal(id_HO_cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Time_UE_StayedInCell_EnhancedGranularity);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;} + void select_id_HO_cause() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set(1); } + Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get(1); } + Cause& select_id_HO_cause() { return set(2); } + Cause const* get_id_HO_cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Time_UE_StayedInCell_EnhancedGranularity()); return true; + case 2: v(select_id_HO_cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;} + void select_id_HO_cause() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LastVisitedEUTRANCellInformation ::= SEQUENCE { + global-Cell-ID ECGI, + cellType CellType, + time-UE-StayedInCell Time-UE-StayedInCell, + iE-Extensions ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct global_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "global_Cell_ID_t";} + using parent_t = ECGI; + + }; + global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;} + global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;} + struct cellType_t : CellType + { + static constexpr const char* name() {return "cellType_t";} + using parent_t = CellType; + + }; + cellType_t& ref_cellType() {return cellType;} + cellType_t const& ref_cellType() const {return cellType;} + struct time_UE_StayedInCell_t : Time_UE_StayedInCell + { + static constexpr const char* name() {return "time_UE_StayedInCell_t";} + using parent_t = Time_UE_StayedInCell; + + }; + time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;} + time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + void clear() + { + global_Cell_ID.clear(); + cellType.clear(); + time_UE_StayedInCell.clear(); + iE_Extensions.clear(); + + }; + private: + global_Cell_ID_t global_Cell_ID; + cellType_t cellType; + time_UE_StayedInCell_t time_UE_StayedInCell; + iE_Extensions_t iE_Extensions; + +}; +/* +LastVisitedUTRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedUTRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedUTRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedGERANCellInformation ::= CHOICE { + undefined NULL, + ... +} +*/ + +struct LastVisitedGERANCellInformation : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "LastVisitedGERANCellInformation";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~LastVisitedGERANCellInformation() {clear();} + struct undefined_t : asn::nulltype + { + static constexpr const char* name() {return "undefined_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(undefined_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +LastVisitedNGRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedNGRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedNGRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedCell-Item ::= CHOICE { + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + ..., + nG-RAN-Cell LastVisitedNGRANCellInformation +} +*/ + +struct LastVisitedCell_Item : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "LastVisitedCell-Item";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~LastVisitedCell_Item() {clear();} + struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation + { + static constexpr const char* name() {return "e_UTRAN_Cell_t";} + using parent_t = LastVisitedEUTRANCellInformation; + + }; + struct uTRAN_Cell_t : LastVisitedUTRANCellInformation + { + static constexpr const char* name() {return "uTRAN_Cell_t";} + using parent_t = LastVisitedUTRANCellInformation; + + }; + struct gERAN_Cell_t : LastVisitedGERANCellInformation + { + static constexpr const char* name() {return "gERAN_Cell_t";} + using parent_t = LastVisitedGERANCellInformation; + + }; + struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation + { + static constexpr const char* name() {return "nG_RAN_Cell_t";} + using parent_t = LastVisitedNGRANCellInformation; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as();} return nullptr; } + gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as();} return nullptr; } + nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(e_UTRAN_Cell_t)]; + char dummy2[sizeof(uTRAN_Cell_t)]; + char dummy3[sizeof(gERAN_Cell_t)]; + char dummy4[sizeof(nG_RAN_Cell_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} +*/ + +struct Links_to_log : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Links-to-log";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + uplink + ,downlink + ,both_uplink_and_downlink + } index_t; + +}; + +/* +ReportArea ::= ENUMERATED{ + ecgi, + ... +} +*/ + +struct ReportArea : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ReportArea";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ecgi + } index_t; + +}; + +/* +LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ + ... +} +*/ + +struct LocationReportingInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LocationReportingInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "LocationReportingInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct eventType_t : EventType + { + static constexpr const char* name() {return "eventType_t";} + using parent_t = EventType; + + }; + eventType_t& ref_eventType() {return eventType;} + eventType_t const& ref_eventType() const {return eventType;} + struct reportArea_t : ReportArea + { + static constexpr const char* name() {return "reportArea_t";} + using parent_t = ReportArea; + + }; + reportArea_t& ref_reportArea() {return reportArea;} + reportArea_t const& ref_reportArea() const {return reportArea;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + void clear() + { + eventType.clear(); + reportArea.clear(); + iE_Extensions.clear(); + + }; + private: + eventType_t eventType; + reportArea_t reportArea; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} +*/ + +struct ReportIntervalMDT : asn::enumerated<13, 0, false> +{ + static constexpr const char* name() {return "ReportIntervalMDT";} + using parent_t = asn::enumerated<13, 0, false>; + typedef enum { + ms120 + ,ms240 + ,ms480 + ,ms640 + ,ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + ,min6 + ,min12 + ,min30 + ,min60 + } index_t; + +}; + +/* +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} +*/ + +struct ReportAmountMDT : asn::enumerated<8, 0, false> +{ + static constexpr const char* name() {return "ReportAmountMDT";} + using parent_t = asn::enumerated<8, 0, false>; + typedef enum { + r1 + ,r2 + ,r4 + ,r8 + ,r16 + ,r32 + ,r64 + ,rinfinity + } index_t; + +}; + +/* +M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1PeriodicReporting_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1PeriodicReporting : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M1PeriodicReporting";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct reportInterval_t : ReportIntervalMDT + { + static constexpr const char* name() {return "reportInterval_t";} + using parent_t = ReportIntervalMDT; + + }; + reportInterval_t& ref_reportInterval() {return reportInterval;} + reportInterval_t const& ref_reportInterval() const {return reportInterval;} + struct reportAmount_t : ReportAmountMDT + { + static constexpr const char* name() {return "reportAmount_t";} + using parent_t = ReportAmountMDT; + + }; + reportAmount_t& ref_reportAmount() {return reportAmount;} + reportAmount_t const& ref_reportAmount() const {return reportAmount;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + void clear() + { + reportInterval.clear(); + reportAmount.clear(); + iE_Extensions.clear(); + + }; + private: + reportInterval_t reportInterval; + reportAmount_t reportAmount; + iE_Extensions_t iE_Extensions; + +}; +/* +M1ReportingTrigger::= ENUMERATED{ + periodic, + a2eventtriggered, + ..., + a2eventtriggered-periodic +} +*/ + +struct M1ReportingTrigger : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "M1ReportingTrigger";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + periodic + ,a2eventtriggered + ,a2eventtriggered_periodic + } index_t; + +}; + +/* +Threshold-RSRP ::= INTEGER(0..97) +*/ + +struct Threshold_RSRP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRP";} + using parent_t = asn::integer<>; + +}; + +/* +Threshold-RSRQ ::= INTEGER(0..34) +*/ + +struct Threshold_RSRQ : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRQ";} + using parent_t = asn::integer<>; + +}; + +/* +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} +*/ + +struct MeasurementThresholdA2 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "MeasurementThresholdA2";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~MeasurementThresholdA2() {clear();} + struct threshold_RSRP_t : Threshold_RSRP + { + static constexpr const char* name() {return "threshold_RSRP_t";} + using parent_t = Threshold_RSRP; + + }; + struct threshold_RSRQ_t : Threshold_RSRQ + { + static constexpr const char* name() {return "threshold_RSRQ_t";} + using parent_t = Threshold_RSRQ; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as();} return nullptr; } + threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(threshold_RSRP_t)]; + char dummy2[sizeof(threshold_RSRQ_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1ThresholdEventA2_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M1ThresholdEventA2";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct measurementThreshold_t : MeasurementThresholdA2 + { + static constexpr const char* name() {return "measurementThreshold_t";} + using parent_t = MeasurementThresholdA2; + + }; + measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;} + measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementThreshold); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementThreshold); + v(iE_Extensions); + + }; + void clear() + { + measurementThreshold.clear(); + iE_Extensions.clear(); + + }; + private: + measurementThreshold_t measurementThreshold; + iE_Extensions_t iE_Extensions; + +}; +/* +M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } +*/ + +struct M3period : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "M3period";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + ms100 + ,ms1000 + ,ms10000 + } index_t; + +}; + +/* +M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M3Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M3Configuration ::= SEQUENCE { + m3period M3period, + iE-Extensions ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M3Configuration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M3Configuration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct m3period_t : M3period + { + static constexpr const char* name() {return "m3period_t";} + using parent_t = M3period; + + }; + m3period_t& ref_m3period() {return m3period;} + m3period_t const& ref_m3period() const {return m3period;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m3period); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m3period); + v(iE_Extensions); + + }; + void clear() + { + m3period.clear(); + iE_Extensions.clear(); + + }; + private: + m3period_t m3period; + iE_Extensions_t iE_Extensions; + +}; +/* +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M4period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M4period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M4Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M4Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M4Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m4period_t : M4period + { + static constexpr const char* name() {return "m4period_t";} + using parent_t = M4period; + + }; + m4period_t& ref_m4period() {return m4period;} + m4period_t const& ref_m4period() const {return m4period;} + struct m4_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m4_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;} + m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m4period.clear(); + m4_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m4period_t m4period; + m4_links_to_log_t m4_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M5period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M5period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M5Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M5Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M5Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m5period_t : M5period + { + static constexpr const char* name() {return "m5period_t";} + using parent_t = M5period; + + }; + m5period_t& ref_m5period() {return m5period;} + m5period_t const& ref_m5period() const {return m5period;} + struct m5_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m5_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;} + m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m5period.clear(); + m5_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m5period_t m5period; + m5_links_to_log_t m5_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } +*/ + +struct M6report_interval : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "M6report-interval";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + } index_t; + +}; + +/* +M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } +*/ + +struct M6delay_threshold : asn::enumerated<12, 0, true> +{ + static constexpr const char* name() {return "M6delay-threshold";} + using parent_t = asn::enumerated<12, 0, true>; + typedef enum { + ms30 + ,ms40 + ,ms50 + ,ms60 + ,ms70 + ,ms80 + ,ms90 + ,ms100 + ,ms150 + ,ms300 + ,ms500 + ,ms750 + } index_t; + +}; + +/* +M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M6Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M6Configuration ::= SEQUENCE { + m6report-interval M6report-interval, + m6delay-threshold M6delay-threshold OPTIONAL, +-- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” -- + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M6Configuration : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "M6Configuration";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct m6report_interval_t : M6report_interval + { + static constexpr const char* name() {return "m6report_interval_t";} + using parent_t = M6report_interval; + + }; + m6report_interval_t& ref_m6report_interval() {return m6report_interval;} + m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;} + struct m6delay_threshold_t : M6delay_threshold + { + static constexpr const char* name() {return "m6delay_threshold_t";} + using parent_t = M6delay_threshold; + static constexpr bool optional = true; + + }; + m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;} + m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;} + struct m6_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m6_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;} + m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m6report_interval.clear(); + m6delay_threshold.clear(); + m6_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m6report_interval_t m6report_interval; + m6delay_threshold_t m6delay_threshold; + m6_links_to_log_t m6_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M7period ::= INTEGER(1..60, ...) +*/ + +struct M7period : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "M7period";} + using parent_t = asn::integer<>; + +}; + +/* +M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M7Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M7Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M7Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m7period_t : M7period + { + static constexpr const char* name() {return "m7period_t";} + using parent_t = M7period; + + }; + m7period_t& ref_m7period() {return m7period;} + m7period_t const& ref_m7period() const {return m7period;} + struct m7_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m7_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;} + m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m7period.clear(); + m7_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m7period_t m7period; + m7_links_to_log_t m7_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) +*/ + +struct MBMS_Service_Area_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MBMS-Service-Area-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity +*/ + +struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity +{ + static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";} + using parent_t = MBMS_Service_Area_Identity; + +}; +struct MBMS_Service_Area_Identity_List : asn::sequenceof +{ + static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RadioframeAllocationPeriod ::= ENUMERATED{ + n1, + n2, + n4, + n8, + n16, + n32, + ... +} +*/ + +struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "RadioframeAllocationPeriod";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + n1 + ,n2 + ,n4 + ,n8 + ,n16 + ,n32 + } index_t; + +}; + +/* +RadioframeAllocationOffset ::= INTEGER (0..7, ...) +*/ + +struct RadioframeAllocationOffset : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RadioframeAllocationOffset";} + using parent_t = asn::integer<>; + +}; + +/* +Oneframe ::= BIT STRING (SIZE (6)) +*/ + +struct Oneframe : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Oneframe";} + using parent_t = asn::bstring<>; + +}; + +/* +SubframeAllocation ::= CHOICE { + oneframe Oneframe, + fourframes Fourframes, + ... +} +*/ + +struct SubframeAllocation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SubframeAllocation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~SubframeAllocation() {clear();} + struct oneframe_t : Oneframe + { + static constexpr const char* name() {return "oneframe_t";} + using parent_t = Oneframe; + + }; + struct fourframes_t : Fourframes + { + static constexpr const char* name() {return "fourframes_t";} + using parent_t = Fourframes; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as();} return nullptr; } + fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(oneframe_t)]; + char dummy2[sizeof(fourframes_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MBSFN_Subframe_Info_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MBSFN-Subframe-Info ::= SEQUENCE { + radioframeAllocationPeriod RadioframeAllocationPeriod, + radioframeAllocationOffset RadioframeAllocationOffset, + subframeAllocation SubframeAllocation, + iE-Extensions ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "MBSFN-Subframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod + { + static constexpr const char* name() {return "radioframeAllocationPeriod_t";} + using parent_t = RadioframeAllocationPeriod; + + }; + radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;} + radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;} + struct radioframeAllocationOffset_t : RadioframeAllocationOffset + { + static constexpr const char* name() {return "radioframeAllocationOffset_t";} + using parent_t = RadioframeAllocationOffset; + + }; + radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;} + radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;} + struct subframeAllocation_t : SubframeAllocation + { + static constexpr const char* name() {return "subframeAllocation_t";} + using parent_t = SubframeAllocation; + + }; + subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;} + subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + void clear() + { + radioframeAllocationPeriod.clear(); + radioframeAllocationOffset.clear(); + subframeAllocation.clear(); + iE_Extensions.clear(); + + }; + private: + radioframeAllocationPeriod_t radioframeAllocationPeriod; + radioframeAllocationOffset_t radioframeAllocationOffset; + subframeAllocation_t subframeAllocation; + iE_Extensions_t iE_Extensions; + +}; +/* +MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info +*/ + +struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info +{ + static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";} + using parent_t = MBSFN_Subframe_Info; + +}; +struct MBSFN_Subframe_Infolist : asn::sequenceof +{ + static constexpr const char* name() {return "MBSFN-Subframe-Infolist";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} +*/ + +struct MDT_Activation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "MDT-Activation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + immediate_MDT_only + ,immediate_MDT_and_Trace + } index_t; + +}; + +/* +MeasurementsToActivate::= BIT STRING (SIZE (8)) +*/ + +struct MeasurementsToActivate : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MeasurementsToActivate";} + using parent_t = asn::bstring<>; + +}; + +/* +MDT-Location-Info ::= BIT STRING (SIZE (8)) +*/ + +struct MDT_Location_Info : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MDT-Location-Info";} + using parent_t = asn::bstring<>; + +}; + +/* +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity +*/ + +struct MDTPLMNList_elm : PLMN_Identity +{ + static constexpr const char* name() {return "MDTPLMNList_elm";} + using parent_t = PLMN_Identity; + +}; +struct MDTPLMNList : asn::sequenceof +{ + static constexpr const char* name() {return "MDTPLMNList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasConfig::= ENUMERATED {setup,...} +*/ + +struct WLANMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "WLANMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +WLANName ::= OCTET STRING (SIZE (1..32)) +*/ + +struct WLANName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WLANName";} + using parent_t = asn::ostring<>; + +}; + +/* +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName +*/ + +struct WLANMeasConfigNameList_elm : WLANName +{ + static constexpr const char* name() {return "WLANMeasConfigNameList_elm";} + using parent_t = WLANName; + +}; +struct WLANMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "WLANMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WLANMeasurementConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "WLANMeasurementConfiguration";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct wlanMeasConfig_t : WLANMeasConfig + { + static constexpr const char* name() {return "wlanMeasConfig_t";} + using parent_t = WLANMeasConfig; + + }; + wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;} + wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;} + struct wlanMeasConfigNameList_t : WLANMeasConfigNameList + { + static constexpr const char* name() {return "wlanMeasConfigNameList_t";} + using parent_t = WLANMeasConfigNameList; + static constexpr bool optional = true; + + }; + wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;} + wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;} + struct wlan_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;} + wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;} + struct wlan_rtt_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rtt_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;} + wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + void clear() + { + wlanMeasConfig.clear(); + wlanMeasConfigNameList.clear(); + wlan_rssi.clear(); + wlan_rtt.clear(); + iE_Extensions.clear(); + + }; + private: + wlanMeasConfig_t wlanMeasConfig; + wlanMeasConfigNameList_t wlanMeasConfigNameList; + wlan_rssi_t wlan_rssi; + wlan_rtt_t wlan_rtt; + iE_Extensions_t iE_Extensions; + +}; +/* +MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| + {ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| + {ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| + {ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| + {ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional}| + {ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| + {ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}| + { ID id-BluetoothMeasurementConfiguration CRITICALITY ignore EXTENSION BluetoothMeasurementConfiguration PRESENCE optional}| + { ID id-WLANMeasurementConfiguration CRITICALITY ignore EXTENSION WLANMeasurementConfiguration PRESENCE optional}, + ... +} +*/ + +struct MDT_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(id_M3Configuration); type=1;} + void select_id_M4Configuration() { set(id_M4Configuration); type=2;} + void select_id_M5Configuration() { set(id_M5Configuration); type=3;} + void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;} + void select_id_M6Configuration() { set(id_M6Configuration); type=6;} + void select_id_M7Configuration() { set(id_M7Configuration); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;} + void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_M3Configuration)) { type = 1; return true; } + else if(equal(id_M4Configuration)) { type = 2; return true; } + else if(equal(id_M5Configuration)) { type = 3; return true; } + else if(equal(id_MDT_Location_Info)) { type = 4; return true; } + else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; } + else if(equal(id_M6Configuration)) { type = 6; return true; } + else if(equal(id_M7Configuration)) { type = 7; return true; } + else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; } + else if(equal(id_WLANMeasurementConfiguration)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_M3Configuration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(ignore); type=1;} + void select_id_M4Configuration() { set(ignore); type=2;} + void select_id_M5Configuration() { set(ignore); type=3;} + void select_id_MDT_Location_Info() { set(ignore); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;} + void select_id_M6Configuration() { set(ignore); type=6;} + void select_id_M7Configuration() { set(ignore); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;} + void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + M3Configuration& select_id_M3Configuration() { return set(1); } + M3Configuration const* get_id_M3Configuration() const { return get(1); } + M4Configuration& select_id_M4Configuration() { return set(2); } + M4Configuration const* get_id_M4Configuration() const { return get(2); } + M5Configuration& select_id_M5Configuration() { return set(3); } + M5Configuration const* get_id_M5Configuration() const { return get(3); } + MDT_Location_Info& select_id_MDT_Location_Info() { return set(4); } + MDT_Location_Info const* get_id_MDT_Location_Info() const { return get(4); } + MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set(5); } + MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get(5); } + M6Configuration& select_id_M6Configuration() { return set(6); } + M6Configuration const* get_id_M6Configuration() const { return get(6); } + M7Configuration& select_id_M7Configuration() { return set(7); } + M7Configuration const* get_id_M7Configuration() const { return get(7); } + BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set(8); } + BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get(8); } + WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set(9); } + WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_M3Configuration()); return true; + case 2: v(select_id_M4Configuration()); return true; + case 3: v(select_id_M5Configuration()); return true; + case 4: v(select_id_MDT_Location_Info()); return true; + case 5: v(select_id_SignallingBasedMDTPLMNList()); return true; + case 6: v(select_id_M6Configuration()); return true; + case 7: v(select_id_M7Configuration()); return true; + case 8: v(select_id_BluetoothMeasurementConfiguration()); return true; + case 9: v(select_id_WLANMeasurementConfiguration()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BluetoothMeasurementConfiguration)]; + char dummy2[sizeof(M3Configuration)]; + char dummy3[sizeof(M4Configuration)]; + char dummy4[sizeof(M5Configuration)]; + char dummy5[sizeof(M6Configuration)]; + char dummy6[sizeof(M7Configuration)]; + char dummy7[sizeof(MDTPLMNList)]; + char dummy8[sizeof(MDT_Location_Info)]; + char dummy9[sizeof(WLANMeasurementConfiguration)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_M3Configuration() { set(conditional); type=1;} + void select_id_M4Configuration() { set(conditional); type=2;} + void select_id_M5Configuration() { set(conditional); type=3;} + void select_id_MDT_Location_Info() { set(optional); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;} + void select_id_M6Configuration() { set(conditional); type=6;} + void select_id_M7Configuration() { set(conditional); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;} + void select_id_WLANMeasurementConfiguration() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(conditional)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(conditional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(conditional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MDT-Configuration ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT, + measurementsToActivate MeasurementsToActivate, + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic, or event-triggered periodic reporting for measurement M1 + iE-Extensions ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MDT_Configuration : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "MDT-Configuration";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct mdt_Activation_t : MDT_Activation + { + static constexpr const char* name() {return "mdt_Activation_t";} + using parent_t = MDT_Activation; + + }; + mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;} + mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;} + struct areaScopeOfMDT_t : AreaScopeOfMDT + { + static constexpr const char* name() {return "areaScopeOfMDT_t";} + using parent_t = AreaScopeOfMDT; + + }; + areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;} + areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;} + struct measurementsToActivate_t : MeasurementsToActivate + { + static constexpr const char* name() {return "measurementsToActivate_t";} + using parent_t = MeasurementsToActivate; + + }; + measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;} + measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;} + struct m1reportingTrigger_t : M1ReportingTrigger + { + static constexpr const char* name() {return "m1reportingTrigger_t";} + using parent_t = M1ReportingTrigger; + + }; + m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;} + m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;} + struct m1thresholdeventA2_t : M1ThresholdEventA2 + { + static constexpr const char* name() {return "m1thresholdeventA2_t";} + using parent_t = M1ThresholdEventA2; + static constexpr bool optional = true; + + }; + m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;} + m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;} + struct m1periodicReporting_t : M1PeriodicReporting + { + static constexpr const char* name() {return "m1periodicReporting_t";} + using parent_t = M1PeriodicReporting; + static constexpr bool optional = true; + + }; + m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;} + m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + void clear() + { + mdt_Activation.clear(); + areaScopeOfMDT.clear(); + measurementsToActivate.clear(); + m1reportingTrigger.clear(); + m1thresholdeventA2.clear(); + m1periodicReporting.clear(); + iE_Extensions.clear(); + + }; + private: + mdt_Activation_t mdt_Activation; + areaScopeOfMDT_t areaScopeOfMDT; + measurementsToActivate_t measurementsToActivate; + m1reportingTrigger_t m1reportingTrigger; + m1thresholdeventA2_t m1thresholdeventA2; + m1periodicReporting_t m1periodicReporting; + iE_Extensions_t iE_Extensions; + +}; +/* +MakeBeforeBreakIndicator::= ENUMERATED {true, ...} +*/ + +struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MakeBeforeBreakIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} +*/ + +struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ManagementBasedMDTallowed";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allowed + } index_t; + +}; + +/* +Masked-IMEISV ::= BIT STRING (SIZE (64)) +*/ + +struct Masked_IMEISV : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Masked-IMEISV";} + using parent_t = asn::bstring<>; + +}; + +/* +MeNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +NRCellIdentifier ::= BIT STRING (SIZE (36)) +*/ + +struct NRCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRCGI_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRCGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRCGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct nRcellIdentifier_t : NRCellIdentifier + { + static constexpr const char* name() {return "nRcellIdentifier_t";} + using parent_t = NRCellIdentifier; + + }; + nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;} + nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + nRcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + nRcellIdentifier_t nRcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional}| + { ID id-MeNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct MeNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(id_NRCGI); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NRCGI)) { type = 1; return true; } + else if(equal(id_MeNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NRCGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(ignore); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRCGI& select_id_NRCGI() { return set(1); } + NRCGI const* get_id_NRCGI() const { return get(1); } + MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set(2); } + MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NRCGI()); return true; + case 2: v(select_id_MeNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeNBCoordinationAssistanceInformation)]; + char dummy2[sizeof(NRCGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NRCGI() { set(optional); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeNBResourceCoordinationInformation ::= SEQUENCE { + eUTRA-Cell-ID ECGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "MeNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eUTRA_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "eUTRA_Cell_ID_t";} + using parent_t = ECGI; + + }; + eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;} + eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + eUTRA_Cell_ID.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRA_Cell_ID_t eUTRA_Cell_ID; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBtoSeNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +MeNBtoSgNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSgNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSgNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +Measurement-ID ::= INTEGER (1..4095, ...) +*/ + +struct Measurement_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Measurement-ID";} + using parent_t = asn::integer<>; + +}; + +/* +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct handoverTriggerChange_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChange_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;} + handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;} + template void decode(V& v) + { + v(handoverTriggerChange); + + }; + template void encode(V& v) const + { + v(handoverTriggerChange); + + }; + void clear() + { + handoverTriggerChange.clear(); + + }; + private: + handoverTriggerChange_t handoverTriggerChange; + +}; +/* +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersModificationRange";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct handoverTriggerChangeLowerLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;} + handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;} + struct handoverTriggerChangeUpperLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;} + handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;} + template void decode(V& v) + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + template void encode(V& v) const + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + void clear() + { + handoverTriggerChangeLowerLimit.clear(); + handoverTriggerChangeUpperLimit.clear(); + + }; + private: + handoverTriggerChangeLowerLimit_t handoverTriggerChangeLowerLimit; + handoverTriggerChangeUpperLimit_t handoverTriggerChangeUpperLimit; + +}; +/* +MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo +*/ + +struct MultibandInfoList_elm : BandInfo +{ + static constexpr const char* name() {return "MultibandInfoList_elm";} + using parent_t = BandInfo; + +}; +struct MultibandInfoList : asn::sequenceof +{ + static constexpr const char* name() {return "MultibandInfoList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} +*/ + +struct NRSCS : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "NRSCS";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + scs15 + ,scs30 + ,scs60 + ,scs120 + } index_t; + +}; + +/* +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} +*/ + +struct NRNRB : asn::enumerated<29, 0, true> +{ + static constexpr const char* name() {return "NRNRB";} + using parent_t = asn::enumerated<29, 0, true>; + typedef enum { + nrb11 + ,nrb18 + ,nrb24 + ,nrb25 + ,nrb31 + ,nrb32 + ,nrb38 + ,nrb51 + ,nrb52 + ,nrb65 + ,nrb66 + ,nrb78 + ,nrb79 + ,nrb93 + ,nrb106 + ,nrb107 + ,nrb121 + ,nrb132 + ,nrb133 + ,nrb135 + ,nrb160 + ,nrb162 + ,nrb189 + ,nrb216 + ,nrb217 + ,nrb245 + ,nrb264 + ,nrb270 + ,nrb273 + } index_t; + +}; + +/* +NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NR_TxBW_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NR_TxBW : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NR-TxBW";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRSCS_t : NRSCS + { + static constexpr const char* name() {return "nRSCS_t";} + using parent_t = NRSCS; + + }; + nRSCS_t& ref_nRSCS() {return nRSCS;} + nRSCS_t const& ref_nRSCS() const {return nRSCS;} + struct nRNRB_t : NRNRB + { + static constexpr const char* name() {return "nRNRB_t";} + using parent_t = NRNRB; + + }; + nRNRB_t& ref_nRNRB() {return nRNRB;} + nRNRB_t const& ref_nRNRB() const {return nRNRB;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + void clear() + { + nRSCS.clear(); + nRNRB.clear(); + iE_Extensions.clear(); + + }; + private: + nRSCS_t nRSCS; + nRNRB_t nRNRB; + iE_Extensions_t iE_Extensions; + +}; +/* +SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SULInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SULInformation ::= SEQUENCE { + sUL-ARFCN INTEGER (0.. 3279165), + sUL-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {SULInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SULInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SULInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct sUL_ARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "sUL_ARFCN_t";} + using parent_t = asn::integer<>; + + }; + + sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;} + sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;} + struct sUL_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "sUL_TxBW_t";} + using parent_t = NR_TxBW; + + }; + sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;} + sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + void clear() + { + sUL_ARFCN.clear(); + sUL_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + sUL_ARFCN_t sUL_ARFCN; + sUL_TxBW_t sUL_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRFreqInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... +} +*/ + +struct NRFreqInfo : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "NRFreqInfo";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nRARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "nRARFCN_t";} + using parent_t = asn::integer<>; + + }; + + nRARFCN_t& ref_nRARFCN() {return nRARFCN;} + nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;} + struct freqBandListNr_t_elm : FreqBandNrItem + { + static constexpr const char* name() {return "freqBandListNr_t_elm";} + using parent_t = FreqBandNrItem; + + }; + struct freqBandListNr_t : asn::sequenceof + { + static constexpr const char* name() {return "freqBandListNr_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;} + freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;} + struct sULInformation_t : SULInformation + { + static constexpr const char* name() {return "sULInformation_t";} + using parent_t = SULInformation; + static constexpr bool optional = true; + + }; + sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;} + sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + void clear() + { + nRARFCN.clear(); + freqBandListNr.clear(); + sULInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nRARFCN_t nRARFCN; + freqBandListNr_t freqBandListNr; + sULInformation_t sULInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +NRPCI ::= INTEGER (0..1007) +*/ + +struct NRPCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRPCI";} + using parent_t = asn::integer<>; + +}; + +/* +NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRencryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRencryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRintegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRUESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRUESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRUESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRencryptionAlgorithms_t : NRencryptionAlgorithms + { + static constexpr const char* name() {return "nRencryptionAlgorithms_t";} + using parent_t = NRencryptionAlgorithms; + + }; + nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;} + nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;} + struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms + { + static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";} + using parent_t = NRintegrityProtectionAlgorithms; + + }; + nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;} + nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + nRencryptionAlgorithms.clear(); + nRintegrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + nRencryptionAlgorithms_t nRencryptionAlgorithms; + nRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +PCI ::= INTEGER (0..503, ...) +*/ + +struct PCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PCI";} + using parent_t = asn::integer<>; + +}; + +/* +Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}, + ... +} +*/ + +struct Neighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(id_NeighbourTAC); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_NeighbourTAC)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_NeighbourTAC);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + TAC& select_id_NeighbourTAC() { return set(1); } + TAC const* get_id_NeighbourTAC() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_NeighbourTAC()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EARFCNExtension)]; + char dummy2[sizeof(TAC)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_NeighbourTAC() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE { + eCGI ECGI, + pCI PCI, + eARFCN EARFCN, + iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "Neighbour_Information_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct eCGI_t : ECGI + { + static constexpr const char* name() {return "eCGI_t";} + using parent_t = ECGI; + + }; + eCGI_t& ref_eCGI() {return eCGI;} + eCGI_t const& ref_eCGI() const {return eCGI;} + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + void clear() + { + eCGI.clear(); + pCI.clear(); + eARFCN.clear(); + iE_Extensions.clear(); + + }; + private: + eCGI_t eCGI; + pCI_t pCI; + eARFCN_t eARFCN; + iE_Extensions_t iE_Extensions; + +}; +struct Neighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "Neighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NewDRBIDrequest::= ENUMERATED {true, ...} +*/ + +struct NewDRBIDrequest : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NewDRBIDrequest";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +Number-of-Antennaports ::= ENUMERATED { + an1, + an2, + an4, + ... +} +*/ + +struct Number_of_Antennaports : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Number-of-Antennaports";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + an1 + ,an2 + ,an4 + } index_t; + +}; + +/* +PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...} +*/ + +struct PDCPChangeIndication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPChangeIndication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + s_KgNB_update_required + ,pDCP_data_recovery_required + } index_t; + +}; + +/* +PDCPSnLength ::= ENUMERATED {twelve-bits,eighteen-bits,...} +*/ + +struct PDCPSnLength : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPSnLength";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + twelve_bits + ,eighteen_bits + } index_t; + +}; + +/* +PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PRACH_Configuration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- + iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PRACH_Configuration : asn::sequence<6, 0, true, 2> +{ + static constexpr const char* name() {return "PRACH-Configuration";} + using parent_t = asn::sequence<6, 0, true, 2>; + struct rootSequenceIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rootSequenceIndex_t";} + using parent_t = asn::integer<>; + + }; + + rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;} + rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;} + struct zeroCorrelationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "zeroCorrelationIndex_t";} + using parent_t = asn::integer<>; + + }; + + zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;} + zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;} + struct highSpeedFlag_t : asn::boolean + { + static constexpr const char* name() {return "highSpeedFlag_t";} + using parent_t = asn::boolean; + + }; + highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;} + highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;} + struct prach_FreqOffset_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_FreqOffset_t";} + using parent_t = asn::integer<>; + + }; + + prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;} + prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;} + struct prach_ConfigIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_ConfigIndex_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;} + prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + void clear() + { + rootSequenceIndex.clear(); + zeroCorrelationIndex.clear(); + highSpeedFlag.clear(); + prach_FreqOffset.clear(); + prach_ConfigIndex.clear(); + iE_Extensions.clear(); + + }; + private: + rootSequenceIndex_t rootSequenceIndex; + zeroCorrelationIndex_t zeroCorrelationIndex; + highSpeedFlag_t highSpeedFlag; + prach_FreqOffset_t prach_FreqOffset; + prach_ConfigIndex_t prach_ConfigIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct PedestrianUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PedestrianUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +Port-Number ::= OCTET STRING (SIZE (2)) +*/ + +struct Port_Number : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Port-Number";} + using parent_t = asn::ostring<>; + +}; + +/* +ProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectDiscovery : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectDiscovery";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectCommunication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectCommunication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeUEtoNetworkRelaying ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, + ... +} +*/ + +struct ProSeAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ProSeUEtoNetworkRelaying)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ProSeUEtoNetworkRelaying);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set(1); } + ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ProSeUEtoNetworkRelaying()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ProSeUEtoNetworkRelaying)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ProSeUEtoNetworkRelaying() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProSeAuthorized ::= SEQUENCE { + proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, + proSeDirectCommunication ProSeDirectCommunication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProSeAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ProSeAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct proSeDirectDiscovery_t : ProSeDirectDiscovery + { + static constexpr const char* name() {return "proSeDirectDiscovery_t";} + using parent_t = ProSeDirectDiscovery; + static constexpr bool optional = true; + + }; + proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;} + proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;} + struct proSeDirectCommunication_t : ProSeDirectCommunication + { + static constexpr const char* name() {return "proSeDirectCommunication_t";} + using parent_t = ProSeDirectCommunication; + static constexpr bool optional = true; + + }; + proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;} + proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + void clear() + { + proSeDirectDiscovery.clear(); + proSeDirectCommunication.clear(); + iE_Extensions.clear(); + + }; + private: + proSeDirectDiscovery_t proSeDirectDiscovery; + proSeDirectCommunication_t proSeDirectCommunication; + iE_Extensions_t iE_Extensions; + +}; +/* +ResourceType ::= ENUMERATED { + downlinknonCRS, + cRS, + uplink, + ... +} +*/ + +struct ResourceType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "ResourceType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + downlinknonCRS + ,cRS + ,uplink + } index_t; + +}; + +/* +ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedFootprintTimePattern_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimePeriodicity INTEGER (1..320, ...), + protectedFootprintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedFootprintTimePattern";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct protectedFootprintTimePeriodicity_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;} + protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;} + struct protectedFootprintStartTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintStartTime_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;} + protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + void clear() + { + protectedFootprintTimePeriodicity.clear(); + protectedFootprintStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + protectedFootprintTimePeriodicity_t protectedFootprintTimePeriodicity; + protectedFootprintStartTime_t protectedFootprintStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedResourceList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedResourceList-Item ::= SEQUENCE { + resourceType ResourceType, + intraPRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedResourceList-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct resourceType_t : ResourceType + { + static constexpr const char* name() {return "resourceType_t";} + using parent_t = ResourceType; + + }; + resourceType_t& ref_resourceType() {return resourceType;} + resourceType_t const& ref_resourceType() const {return resourceType;} + struct intraPRBProtectedResourceFootprint_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";} + using parent_t = asn::bstring<>; + + }; + + intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;} + intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;} + struct protectedFootprintFrequencyPattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";} + using parent_t = asn::bstring<>; + + }; + + protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;} + protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;} + struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern + { + static constexpr const char* name() {return "protectedFootprintTimePattern_t";} + using parent_t = ProtectedFootprintTimePattern; + + }; + protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;} + protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + void clear() + { + resourceType.clear(); + intraPRBProtectedResourceFootprint.clear(); + protectedFootprintFrequencyPattern.clear(); + protectedFootprintTimePattern.clear(); + iE_Extensions.clear(); + + }; + private: + resourceType_t resourceType; + intraPRBProtectedResourceFootprint_t intraPRBProtectedResourceFootprint; + protectedFootprintFrequencyPattern_t protectedFootprintFrequencyPattern; + protectedFootprintTimePattern_t protectedFootprintTimePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item +*/ + +struct ProtectedResourceList_elm : ProtectedResourceList_Item +{ + static constexpr const char* name() {return "ProtectedResourceList_elm";} + using parent_t = ProtectedResourceList_Item; + +}; +struct ProtectedResourceList : asn::sequenceof +{ + static constexpr const char* name() {return "ProtectedResourceList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} -- Rapporteur: missing extension -- +*/ + +struct ProtectedEUTRAResourceIndication_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ProtectedEUTRAResourceIndication::= SEQUENCE { + activationSFN INTEGER (0..1023), + protectedResourceList ProtectedResourceList, + mBSFNControlRegionLength INTEGER (0..3) OPTIONAL, + pDCCHRegionLength INTEGER (1..3) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct protectedResourceList_t : ProtectedResourceList + { + static constexpr const char* name() {return "protectedResourceList_t";} + using parent_t = ProtectedResourceList; + + }; + protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;} + protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;} + struct pDCCHRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCHRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;} + pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + protectedResourceList.clear(); + mBSFNControlRegionLength.clear(); + pDCCHRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + protectedResourceList_t protectedResourceList; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + pDCCHRegionLength_t pDCCHRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} +*/ + +struct Reestablishment_Indication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "Reestablishment-Indication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + reestablished + } index_t; + +}; + +/* +RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RLC_Status_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RLC_Status : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RLC-Status";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct reestablishment_Indication_t : Reestablishment_Indication + { + static constexpr const char* name() {return "reestablishment_Indication_t";} + using parent_t = Reestablishment_Indication; + + }; + reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;} + reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + void clear() + { + reestablishment_Indication.clear(); + iE_Extensions.clear(); + + }; + private: + reestablishment_Indication_t reestablishment_Indication; + iE_Extensions_t iE_Extensions; + +}; +/* +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} +*/ + +struct RLCMode : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "RLCMode";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + rlc_am + ,rlc_um_bidirectional + ,rlc_um_unidirectional_ul + ,rlc_um_unidirectional_dl + } index_t; + +}; + +/* +RRC-Config-Ind ::= ENUMERATED { + full-config, + delta-config, + ... +} +*/ + +struct RRC_Config_Ind : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RRC-Config-Ind";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + full_config + ,delta_config + } index_t; + +}; + +/* +RRC-Context ::= OCTET STRING +*/ + +struct RRC_Context : asn::ostring<> +{ + static constexpr const char* name() {return "RRC-Context";} + using parent_t = asn::ostring<>; + +}; + +/* +RRCConnReestabIndicator ::= ENUMERATED { + reconfigurationFailure, handoverFailure, otherFailure, ... +} +*/ + +struct RRCConnReestabIndicator : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RRCConnReestabIndicator";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + reconfigurationFailure + ,handoverFailure + ,otherFailure + } index_t; + +}; + +/* +RRCConnSetupIndicator::= ENUMERATED { + rrcConnSetup, + ... +} +*/ + +struct RRCConnSetupIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "RRCConnSetupIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + rrcConnSetup + } index_t; + +}; + +/* +RRCContainer ::= OCTET STRING +*/ + +struct RRCContainer : asn::ostring<> +{ + static constexpr const char* name() {return "RRCContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RSRPMeasurementResult_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF + SEQUENCE { + rSRPCellID ECGI, + rSRPMeasured INTEGER (0..97, ...), + iE-Extensions ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMeasurementResult_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct rSRPCellID_t : ECGI + { + static constexpr const char* name() {return "rSRPCellID_t";} + using parent_t = ECGI; + + }; + rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;} + rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;} + struct rSRPMeasured_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rSRPMeasured_t";} + using parent_t = asn::integer<>; + + }; + + rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;} + rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + void clear() + { + rSRPCellID.clear(); + rSRPMeasured.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPCellID_t rSRPCellID; + rSRPMeasured_t rSRPMeasured; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMeasurementResult : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMeasurementResult";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional}, + ... +} +*/ + +struct RSRPMRList_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(id_UEID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UEID& select_id_UEID() { return set(1); } + UEID const* get_id_UEID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + rSRPMeasurementResult RSRPMeasurementResult, + iE-Extensions ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMRList_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMRList_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct rSRPMeasurementResult_t : RSRPMeasurementResult + { + static constexpr const char* name() {return "rSRPMeasurementResult_t";} + using parent_t = RSRPMeasurementResult; + + }; + rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;} + rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + void clear() + { + rSRPMeasurementResult.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPMeasurementResult_t rSRPMeasurementResult; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMRList : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMRList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct UL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-DL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION DL-scheduling-PDCCH-CCE-usage PRESENCE optional}| + + {ID id-UL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION UL-scheduling-PDCCH-CCE-usage PRESENCE optional}, + ... +} +*/ + +struct RadioResourceStatus_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; } + else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DL_scheduling_PDCCH_CCE_usage);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set(1); } + DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get(1); } + UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set(2); } + UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DL_scheduling_PDCCH_CCE_usage()); return true; + case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)]; + char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RadioResourceStatus : asn::sequence<7, 0, true, 1> +{ + static constexpr const char* name() {return "RadioResourceStatus";} + using parent_t = asn::sequence<7, 0, true, 1>; + struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_GBR_PRB_usage_t";} + using parent_t = DL_GBR_PRB_usage; + + }; + dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;} + dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;} + struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_GBR_PRB_usage_t";} + using parent_t = UL_GBR_PRB_usage; + + }; + uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;} + uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;} + struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";} + using parent_t = DL_non_GBR_PRB_usage; + + }; + dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;} + dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;} + struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";} + using parent_t = UL_non_GBR_PRB_usage; + + }; + uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;} + uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;} + struct dL_Total_PRB_usage_t : DL_Total_PRB_usage + { + static constexpr const char* name() {return "dL_Total_PRB_usage_t";} + using parent_t = DL_Total_PRB_usage; + + }; + dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;} + dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;} + struct uL_Total_PRB_usage_t : UL_Total_PRB_usage + { + static constexpr const char* name() {return "uL_Total_PRB_usage_t";} + using parent_t = UL_Total_PRB_usage; + + }; + uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;} + uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + void clear() + { + dL_GBR_PRB_usage.clear(); + uL_GBR_PRB_usage.clear(); + dL_non_GBR_PRB_usage.clear(); + uL_non_GBR_PRB_usage.clear(); + dL_Total_PRB_usage.clear(); + uL_Total_PRB_usage.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GBR_PRB_usage_t dL_GBR_PRB_usage; + uL_GBR_PRB_usage_t uL_GBR_PRB_usage; + dL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + uL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + dL_Total_PRB_usage_t dL_Total_PRB_usage; + uL_Total_PRB_usage_t uL_Total_PRB_usage; + iE_Extensions_t iE_Extensions; + +}; +/* +ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) +*/ + +struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) +*/ + +struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) +*/ + +struct ReceiveStatusofULPDCPSDUs : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";} + using parent_t = asn::bstring<>; + +}; + +/* +Registration-Request ::= ENUMERATED { + start, + stop, + ..., + partial-stop, + add +} +*/ + +struct Registration_Request : asn::enumerated<4, 2, true> +{ + static constexpr const char* name() {return "Registration-Request";} + using parent_t = asn::enumerated<4, 2, true>; + typedef enum { + start + ,stop + ,partial_stop + ,add + } index_t; + +}; + +/* +RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-enhancedRNTP CRITICALITY ignore EXTENSION EnhancedRNTP PRESENCE optional }, + ... +} +*/ + +struct RelativeNarrowbandTxPower_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(id_enhancedRNTP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_enhancedRNTP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_enhancedRNTP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EnhancedRNTP& select_id_enhancedRNTP() { return set(1); } + EnhancedRNTP const* get_id_enhancedRNTP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_enhancedRNTP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(EnhancedRNTP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_enhancedRNTP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RelativeNarrowbandTxPower ::= SEQUENCE { + + rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), + rNTP-Threshold RNTP-Threshold, + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + p-B INTEGER (0..3,...), + pDCCH-InterferenceImpact INTEGER (0..4,...), + iE-Extensions ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "RelativeNarrowbandTxPower";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct rNTP_PerPRB_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rNTP_PerPRB_t";} + using parent_t = asn::bstring<>; + + }; + + rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;} + rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;} + struct rNTP_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;} + rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct p_B_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "p_B_t";} + using parent_t = asn::integer<>; + + }; + + p_B_t& ref_p_B() {return p_B;} + p_B_t const& ref_p_B() const {return p_B;} + struct pDCCH_InterferenceImpact_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";} + using parent_t = asn::integer<>; + + }; + + pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;} + pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + void clear() + { + rNTP_PerPRB.clear(); + rNTP_Threshold.clear(); + numberOfCellSpecificAntennaPorts.clear(); + p_B.clear(); + pDCCH_InterferenceImpact.clear(); + iE_Extensions.clear(); + + }; + private: + rNTP_PerPRB_t rNTP_PerPRB; + rNTP_Threshold_t rNTP_Threshold; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + p_B_t p_B; + pDCCH_InterferenceImpact_t pDCCH_InterferenceImpact; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportCharacteristics ::= BIT STRING (SIZE (32)) +*/ + +struct ReportCharacteristics : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReportCharacteristics";} + using parent_t = asn::bstring<>; + +}; + +/* +ReportingPeriodicityCSIR ::= ENUMERATED { + ms5, + ms10, + ms20, + ms40, + ms80, +... +} +*/ + +struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityCSIR";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms5 + ,ms10 + ,ms20 + ,ms40 + ,ms80 + } index_t; + +}; + +/* +ReportingPeriodicityRSRPMR ::= ENUMERATED { + one-hundred-20-ms, + two-hundred-40-ms, + four-hundred-80-ms, + six-hundred-40-ms, +... +} +*/ + +struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_hundred_20_ms + ,two_hundred_40_ms + ,four_hundred_80_ms + ,six_hundred_40_ms + } index_t; + +}; + +/* +ResumeID ::= CHOICE { + non-truncated BIT STRING(SIZE(40)), + truncated BIT STRING(SIZE(24)), + ... +} +*/ + +struct ResumeID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResumeID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResumeID() {clear();} + struct non_truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "non_truncated_t";} + using parent_t = asn::bstring<>; + + }; + + struct truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "truncated_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as();} return nullptr; } + truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(non_truncated_t)]; + char dummy2[sizeof(truncated_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct S1TNLLoadIndicator_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +S1TNLLoadIndicator ::= SEQUENCE { + dLS1TNLLoadIndicator LoadIndicator, + uLS1TNLLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "S1TNLLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;} + dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;} + struct uLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;} + uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLS1TNLLoadIndicator.clear(); + uLS1TNLLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLS1TNLLoadIndicator_t dLS1TNLLoadIndicator; + uLS1TNLLoadIndicator_t uLS1TNLLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...} +*/ + +struct SCGChangeIndication : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SCGChangeIndication";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + pDCPCountWrapAround + ,pSCellChange + ,other + } index_t; + +}; + +/* +SCGConfigurationQuery ::= ENUMERATED {true,...} +*/ + +struct SCGConfigurationQuery : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SCGConfigurationQuery";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SGNB-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-eNB-HO, + intra-eNB-HO, + ... +} +*/ + +struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + sn_change + ,inter_eNB_HO + ,intra_eNB_HO + } index_t; + +}; + +/* +SIPTOBearerDeactivationIndication ::= ENUMERATED { + true, + ... +} +*/ + +struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SRBType ::= ENUMERATED {srb1, srb2, ...} +*/ + +struct SRBType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SRBType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + srb1 + ,srb2 + } index_t; + +}; + +/* +SRVCCOperationPossible ::= ENUMERATED { + possible, + ... +} +*/ + +struct SRVCCOperationPossible : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SRVCCOperationPossible";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + possible + } index_t; + +}; + +/* +ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ScheduledCommunicationTime_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ScheduledCommunicationTime";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct dayofWeek_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dayofWeek_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;} + dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;} + struct timeofDayStart_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayStart_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;} + timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;} + struct timeofDayEnd_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayEnd_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;} + timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + void clear() + { + dayofWeek.clear(); + timeofDayStart.clear(); + timeofDayEnd.clear(); + iE_Extensions.clear(); + + }; + private: + dayofWeek_t dayofWeek; + timeofDayStart_t timeofDayStart; + timeofDayEnd_t timeofDayEnd; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SeNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SeNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SeNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SeNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SeNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SecondaryRATUsageReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReport-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + secondaryRATType ENUMERATED {nr, ...}, + e-RABUsageReportList E-RABUsageReportList, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SecondaryRATUsageReport-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct secondaryRATType_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "secondaryRATType_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nr + } index_t; + + }; + + secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;} + secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;} + struct e_RABUsageReportList_t : E_RABUsageReportList + { + static constexpr const char* name() {return "e_RABUsageReportList_t";} + using parent_t = E_RABUsageReportList; + + }; + e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;} + e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + secondaryRATType.clear(); + e_RABUsageReportList.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + secondaryRATType_t secondaryRATType; + e_RABUsageReportList_t e_RABUsageReportList; + iE_Extensions_t iE_Extensions; + +}; +/* +SecondaryRATUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-SecondaryRATUsageReport-Item CRITICALITY reject TYPE SecondaryRATUsageReport-Item PRESENCE mandatory}, + ... +} +*/ + +struct SecondaryRATUsageReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SecondaryRATUsageReport_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReport_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set(1); } + SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SecondaryRATUsageReport_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SecondaryRATUsageReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}} +*/ + +struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct SecondaryRATUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCell_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional}| + { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional}| + { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional}| + { ID id-CSG-Id CRITICALITY ignore EXTENSION CSG-Id PRESENCE optional}| + { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION MBMS-Service-Area-Identity-List PRESENCE optional}| + { ID id-MultibandInfoList CRITICALITY ignore EXTENSION MultibandInfoList PRESENCE optional}| + { ID id-FreqBandIndicatorPriority CRITICALITY ignore EXTENSION FreqBandIndicatorPriority PRESENCE optional}| + { ID id-BandwidthReducedSI CRITICALITY ignore EXTENSION BandwidthReducedSI PRESENCE optional}| + { ID id-ProtectedEUTRAResourceIndication CRITICALITY ignore EXTENSION ProtectedEUTRAResourceIndication PRESENCE optional}, + ... +} +*/ + +struct ServedCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;} + void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;} + void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;} + void select_id_CSG_Id() { set(id_CSG_Id); type=4;} + void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;} + void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;} + void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;} + void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Number_of_Antennaports)) { type = 1; return true; } + else if(equal(id_PRACH_Configuration)) { type = 2; return true; } + else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; } + else if(equal(id_CSG_Id)) { type = 4; return true; } + else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; } + else if(equal(id_MultibandInfoList)) { type = 6; return true; } + else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; } + else if(equal(id_BandwidthReducedSI)) { type = 8; return true; } + else if(equal(id_ProtectedEUTRAResourceIndication)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Number_of_Antennaports);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(ignore); type=1;} + void select_id_PRACH_Configuration() { set(ignore); type=2;} + void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;} + void select_id_CSG_Id() { set(ignore); type=4;} + void select_id_MBMS_Service_Area_List() { set(ignore); type=5;} + void select_id_MultibandInfoList() { set(ignore); type=6;} + void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;} + void select_id_BandwidthReducedSI() { set(ignore); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Number_of_Antennaports& select_id_Number_of_Antennaports() { return set(1); } + Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get(1); } + PRACH_Configuration& select_id_PRACH_Configuration() { return set(2); } + PRACH_Configuration const* get_id_PRACH_Configuration() const { return get(2); } + MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set(3); } + MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get(3); } + CSG_Id& select_id_CSG_Id() { return set(4); } + CSG_Id const* get_id_CSG_Id() const { return get(4); } + MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set(5); } + MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get(5); } + MultibandInfoList& select_id_MultibandInfoList() { return set(6); } + MultibandInfoList const* get_id_MultibandInfoList() const { return get(6); } + FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set(7); } + FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get(7); } + BandwidthReducedSI& select_id_BandwidthReducedSI() { return set(8); } + BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get(8); } + ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set(9); } + ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Number_of_Antennaports()); return true; + case 2: v(select_id_PRACH_Configuration()); return true; + case 3: v(select_id_MBSFN_Subframe_Info()); return true; + case 4: v(select_id_CSG_Id()); return true; + case 5: v(select_id_MBMS_Service_Area_List()); return true; + case 6: v(select_id_MultibandInfoList()); return true; + case 7: v(select_id_FreqBandIndicatorPriority()); return true; + case 8: v(select_id_BandwidthReducedSI()); return true; + case 9: v(select_id_ProtectedEUTRAResourceIndication()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BandwidthReducedSI)]; + char dummy2[sizeof(CSG_Id)]; + char dummy3[sizeof(FreqBandIndicatorPriority)]; + char dummy4[sizeof(MBMS_Service_Area_Identity_List)]; + char dummy5[sizeof(MBSFN_Subframe_Infolist)]; + char dummy6[sizeof(MultibandInfoList)]; + char dummy7[sizeof(Number_of_Antennaports)]; + char dummy8[sizeof(PRACH_Configuration)]; + char dummy9[sizeof(ProtectedEUTRAResourceIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_Number_of_Antennaports() { set(optional); type=1;} + void select_id_PRACH_Configuration() { set(optional); type=2;} + void select_id_MBSFN_Subframe_Info() { set(optional); type=3;} + void select_id_CSG_Id() { set(optional); type=4;} + void select_id_MBMS_Service_Area_List() { set(optional); type=5;} + void select_id_MultibandInfoList() { set(optional); type=6;} + void select_id_FreqBandIndicatorPriority() { set(optional); type=7;} + void select_id_BandwidthReducedSI() { set(optional); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCell-Information ::= SEQUENCE { + pCI PCI, + cellId ECGI, + tAC TAC, + broadcastPLMNs BroadcastPLMNs-Item, + eUTRA-Mode-Info EUTRA-Mode-Info, + iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCell_Information : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCell-Information";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct cellId_t : ECGI + { + static constexpr const char* name() {return "cellId_t";} + using parent_t = ECGI; + + }; + cellId_t& ref_cellId() {return cellId;} + cellId_t const& ref_cellId() const {return cellId;} + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct eUTRA_Mode_Info_t : EUTRA_Mode_Info + { + static constexpr const char* name() {return "eUTRA_Mode_Info_t";} + using parent_t = EUTRA_Mode_Info; + + }; + eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;} + eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + void clear() + { + pCI.clear(); + cellId.clear(); + tAC.clear(); + broadcastPLMNs.clear(); + eUTRA_Mode_Info.clear(); + iE_Extensions.clear(); + + }; + private: + pCI_t pCI; + cellId_t cellId; + tAC_t tAC; + broadcastPLMNs_t broadcastPLMNs; + eUTRA_Mode_Info_t eUTRA_Mode_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCells_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCells_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +struct ServedCells : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCells";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServiceType ::= ENUMERATED{ + qMC-for-streaming-service, + qMC-for-MTSI-service, + ... +} +*/ + +struct ServiceType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ServiceType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + qMC_for_streaming_service + ,qMC_for_MTSI_service + } index_t; + +}; + +/* +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) +*/ + +struct SgNB_UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNB-UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +SgNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ECGI CRITICALITY ignore EXTENSION ECGI PRESENCE optional}| + { ID id-SgNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBResourceCoordinationInformationExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(id_ECGI); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ECGI)) { type = 1; return true; } + else if(equal(id_SgNBCoordinationAssistanceInformation)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ECGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(ignore); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(reject); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ECGI() { return set(1); } + ECGI const* get_id_ECGI() const { return get(1); } + SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set(2); } + SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ECGI()); return true; + case 2: v(select_id_SgNBCoordinationAssistanceInformation()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(SgNBCoordinationAssistanceInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ECGI() { set(optional); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBResourceCoordinationInformation ::= SEQUENCE { + nR-CGI NRCGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "SgNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nR_CGI_t : NRCGI + { + static constexpr const char* name() {return "nR_CGI_t";} + using parent_t = NRCGI; + + }; + nR_CGI_t& ref_nR_CGI() {return nR_CGI;} + nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + nR_CGI.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nR_CGI_t nR_CGI; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SgNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SgNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SgNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SgNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +ShortMAC-I ::= BIT STRING (SIZE(16)) +*/ + +struct ShortMAC_I : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ShortMAC-I";} + using parent_t = asn::bstring<>; + +}; + +/* +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) +*/ + +struct SpectrumSharingGroupID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SpectrumSharingGroupID";} + using parent_t = asn::integer<>; + +}; + +/* +SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SplitSRB_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SplitSRB ::= SEQUENCE { + rrcContainer RRCContainer OPTIONAL, + srbType SRBType, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SplitSRB : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "SplitSRB";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct rrcContainer_t : RRCContainer + { + static constexpr const char* name() {return "rrcContainer_t";} + using parent_t = RRCContainer; + static constexpr bool optional = true; + + }; + rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;} + rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;} + struct srbType_t : SRBType + { + static constexpr const char* name() {return "srbType_t";} + using parent_t = SRBType; + + }; + srbType_t& ref_srbType() {return srbType;} + srbType_t const& ref_srbType() const {return srbType;} + struct deliveryStatus_t : DeliveryStatus + { + static constexpr const char* name() {return "deliveryStatus_t";} + using parent_t = DeliveryStatus; + static constexpr bool optional = true; + + }; + deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;} + deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + void clear() + { + rrcContainer.clear(); + srbType.clear(); + deliveryStatus.clear(); + iE_Extensions.clear(); + + }; + private: + rrcContainer_t rrcContainer; + srbType_t srbType; + deliveryStatus_t deliveryStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...} +*/ + +struct SplitSRBs : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SplitSRBs";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + srb1 + ,srb2 + ,srb1and2 + } index_t; + +}; + +/* +SubscriberProfileIDforRFP ::= INTEGER (1..256) +*/ + +struct SubscriberProfileIDforRFP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SubscriberProfileIDforRFP";} + using parent_t = asn::integer<>; + +}; + +/* +Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ...} OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "periodicCommunicationIndicator_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + periodically + ,ondemand + } index_t; + + }; + + periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;} + periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;} + struct periodicTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "periodicTime_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;} + periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;} + struct scheduledCommunicationTime_t : ScheduledCommunicationTime + { + static constexpr const char* name() {return "scheduledCommunicationTime_t";} + using parent_t = ScheduledCommunicationTime; + static constexpr bool optional = true; + + }; + scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;} + scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;} + struct stationaryIndication_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "stationaryIndication_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + stationary + ,mobile + } index_t; + + }; + + stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;} + stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;} + struct trafficProfile_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "trafficProfile_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + single_packet + ,dual_packets + ,multiple_packets + } index_t; + + }; + + trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;} + trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;} + struct batteryIndication_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "batteryIndication_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + battery_powered + ,battery_powered_not_rechargeable_or_replaceable + ,not_battery_powered + } index_t; + + }; + + batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;} + batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + void clear() + { + periodicCommunicationIndicator.clear(); + periodicTime.clear(); + scheduledCommunicationTime.clear(); + stationaryIndication.clear(); + trafficProfile.clear(); + batteryIndication.clear(); + iE_Extensions.clear(); + + }; + private: + periodicCommunicationIndicator_t periodicCommunicationIndicator; + periodicTime_t periodicTime; + scheduledCommunicationTime_t scheduledCommunicationTime; + stationaryIndication_t stationaryIndication; + trafficProfile_t trafficProfile; + batteryIndication_t batteryIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] +*/ + +struct TargetCellInUTRAN : asn::ostring<> +{ + static constexpr const char* name() {return "TargetCellInUTRAN";} + using parent_t = asn::ostring<>; + +}; + +/* +TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING +*/ + +struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<> +{ + static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} +*/ + +struct TimeToWait : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TimeToWait";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + v1s + ,v2s + ,v5s + ,v10s + ,v20s + ,v60s + } index_t; + +}; + +/* +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} +*/ + +struct TraceDepth : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TraceDepth";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + minimum + ,medium + ,maximum + ,minimumWithoutVendorSpecificExtension + ,mediumWithoutVendorSpecificExtension + ,maximumWithoutVendorSpecificExtension + } index_t; + +}; + +/* +TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TraceCollectionEntityIPAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TraceCollectionEntityIPAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-serviceType CRITICALITY ignore EXTENSION ServiceType PRESENCE optional}, + ... +} +*/ + +struct UEAppLayerMeasConfig_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(id_serviceType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_serviceType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_serviceType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ServiceType& select_id_serviceType() { return set(1); } + ServiceType const* get_id_serviceType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_serviceType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServiceType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_serviceType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAppLayerMeasConfig ::= SEQUENCE { + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..1000)), + areaScopeOfQMC AreaScopeOfQMC, + iE-Extensions ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAppLayerMeasConfig";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct containerForAppLayerMeasConfig_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";} + using parent_t = asn::ostring<>; + + }; + + containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;} + containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;} + struct areaScopeOfQMC_t : AreaScopeOfQMC + { + static constexpr const char* name() {return "areaScopeOfQMC_t";} + using parent_t = AreaScopeOfQMC; + + }; + areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;} + areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + void clear() + { + containerForAppLayerMeasConfig.clear(); + areaScopeOfQMC.clear(); + iE_Extensions.clear(); + + }; + private: + containerForAppLayerMeasConfig_t containerForAppLayerMeasConfig; + areaScopeOfQMC_t areaScopeOfQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}| + { ID id-UEAppLayerMeasConfig CRITICALITY ignore EXTENSION UEAppLayerMeasConfig PRESENCE optional}, + ... +} +*/ + +struct TraceActivation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(id_MDTConfiguration); type=1;} + void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MDTConfiguration)) { type = 1; return true; } + else if(equal(id_UEAppLayerMeasConfig)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MDTConfiguration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(ignore); type=1;} + void select_id_UEAppLayerMeasConfig() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + MDT_Configuration& select_id_MDTConfiguration() { return set(1); } + MDT_Configuration const* get_id_MDTConfiguration() const { return get(1); } + UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set(2); } + UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MDTConfiguration()); return true; + case 2: v(select_id_UEAppLayerMeasConfig()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDT_Configuration)]; + char dummy2[sizeof(UEAppLayerMeasConfig)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_MDTConfiguration() { set(optional); type=1;} + void select_id_UEAppLayerMeasConfig() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TraceActivation ::= SEQUENCE { + eUTRANTraceID EUTRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TraceActivation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TraceActivation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eUTRANTraceID_t : EUTRANTraceID + { + static constexpr const char* name() {return "eUTRANTraceID_t";} + using parent_t = EUTRANTraceID; + + }; + eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;} + eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;} + struct interfacesToTrace_t : InterfacesToTrace + { + static constexpr const char* name() {return "interfacesToTrace_t";} + using parent_t = InterfacesToTrace; + + }; + interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;} + interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;} + struct traceDepth_t : TraceDepth + { + static constexpr const char* name() {return "traceDepth_t";} + using parent_t = TraceDepth; + + }; + traceDepth_t& ref_traceDepth() {return traceDepth;} + traceDepth_t const& ref_traceDepth() const {return traceDepth;} + struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress + { + static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";} + using parent_t = TraceCollectionEntityIPAddress; + + }; + traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;} + traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + void clear() + { + eUTRANTraceID.clear(); + interfacesToTrace.clear(); + traceDepth.clear(); + traceCollectionEntityIPAddress.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRANTraceID_t eUTRANTraceID; + interfacesToTrace_t interfacesToTrace; + traceDepth_t traceDepth; + traceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + iE_Extensions_t iE_Extensions; + +}; +/* +Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Tunnel_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TunnelInformation ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + uDP-Port-Number Port-Number OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TunnelInformation : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "TunnelInformation";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct uDP_Port_Number_t : Port_Number + { + static constexpr const char* name() {return "uDP_Port_Number_t";} + using parent_t = Port_Number; + static constexpr bool optional = true; + + }; + uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;} + uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + uDP_Port_Number.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + uDP_Port_Number_t uDP_Port_Number; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextKeptIndicator ::= ENUMERATED { + true, + ... +} +*/ + +struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "UE-ContextKeptIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item +*/ + +struct UE_HistoryInformation_elm : LastVisitedCell_Item +{ + static constexpr const char* name() {return "UE_HistoryInformation_elm";} + using parent_t = LastVisitedCell_Item; + +}; +struct UE_HistoryInformation : asn::sequenceof +{ + static constexpr const char* name() {return "UE-HistoryInformation";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UE-HistoryInformationFromTheUE ::= OCTET STRING +*/ + +struct UE_HistoryInformationFromTheUE : asn::ostring<> +{ + static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container::= OCTET STRING +*/ + +struct UE_RLF_Report_Container : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING +*/ + +struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-S1AP-ID ::= INTEGER (0.. 4294967295) +*/ + +struct UE_S1AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-S1AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-X2AP-ID ::= INTEGER (0..4095) +*/ + +struct UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...) +*/ + +struct UE_X2AP_ID_Extension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID-Extension";} + using parent_t = asn::integer<>; + +}; + +/* +UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-extended-uEaggregateMaximumBitRateDownlink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-uEaggregateMaximumBitRateUplink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct UEAggregate_MaximumBitrate_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; } + else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateDownlink);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set(1); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get(1); } + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set(2); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_extended_uEaggregateMaximumBitRateDownlink()); return true; + case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ExtendedBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEAggregateMaximumBitRate ::= SEQUENCE { + uEaggregateMaximumBitRateDownlink BitRate, + uEaggregateMaximumBitRateUplink BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAggregateMaximumBitRate";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEaggregateMaximumBitRateDownlink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;} + uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;} + struct uEaggregateMaximumBitRateUplink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;} + uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + void clear() + { + uEaggregateMaximumBitRateDownlink.clear(); + uEaggregateMaximumBitRateUplink.clear(); + iE_Extensions.clear(); + + }; + private: + uEaggregateMaximumBitRateDownlink_t uEaggregateMaximumBitRateDownlink; + uEaggregateMaximumBitRateUplink_t uEaggregateMaximumBitRateUplink; + iE_Extensions_t iE_Extensions; + +}; +/* +UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UENRMeasurement_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UENRMeasurement ::= SEQUENCE { + uENRMeasurements RRCContainer, + iE-Extensions ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UENRMeasurement : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UENRMeasurement";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uENRMeasurements_t : RRCContainer + { + static constexpr const char* name() {return "uENRMeasurements_t";} + using parent_t = RRCContainer; + + }; + uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;} + uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + void clear() + { + uENRMeasurements.clear(); + iE_Extensions.clear(); + + }; + private: + uENRMeasurements_t uENRMeasurements; + iE_Extensions_t iE_Extensions; + +}; +/* +UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UESecurityCapabilities_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UESecurityCapabilities ::= SEQUENCE { + encryptionAlgorithms EncryptionAlgorithms, + integrityProtectionAlgorithms IntegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct UESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct encryptionAlgorithms_t : EncryptionAlgorithms + { + static constexpr const char* name() {return "encryptionAlgorithms_t";} + using parent_t = EncryptionAlgorithms; + + }; + encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;} + encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;} + struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms + { + static constexpr const char* name() {return "integrityProtectionAlgorithms_t";} + using parent_t = IntegrityProtectionAlgorithms; + + }; + integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;} + integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + encryptionAlgorithms.clear(); + integrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + encryptionAlgorithms_t encryptionAlgorithms; + integrityProtectionAlgorithms_t integrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +UESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uESidelinkAggregateMaximumBitRate_t : BitRate + { + static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";} + using parent_t = BitRate; + + }; + uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;} + uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + void clear() + { + uESidelinkAggregateMaximumBitRate.clear(); + iE_Extensions.clear(); + + }; + private: + uESidelinkAggregateMaximumBitRate_t uESidelinkAggregateMaximumBitRate; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UEsToBeResetList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEsToBeResetList-Item::= SEQUENCE { + meNB-ID UE-X2AP-ID, + meNB-ID-ext UE-X2AP-ID-Extension OPTIONAL, + sgNB-ID SgNB-UE-X2AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "UEsToBeResetList-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct meNB_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "meNB_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + meNB_ID_t& ref_meNB_ID() {return meNB_ID;} + meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;} + struct meNB_ID_ext_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "meNB_ID_ext_t";} + using parent_t = UE_X2AP_ID_Extension; + static constexpr bool optional = true; + + }; + meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;} + meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;} + struct sgNB_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + static constexpr bool optional = true; + + }; + sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;} + sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + void clear() + { + meNB_ID.clear(); + meNB_ID_ext.clear(); + sgNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + meNB_ID_t meNB_ID; + meNB_ID_ext_t meNB_ID_ext; + sgNB_ID_t sgNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item +*/ + +struct UEsToBeResetList_elm : UEsToBeResetList_Item +{ + static constexpr const char* name() {return "UEsToBeResetList_elm";} + using parent_t = UEsToBeResetList_Item; + +}; +struct UEsToBeResetList : asn::sequenceof +{ + static constexpr const char* name() {return "UEsToBeResetList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) +*/ + +struct UL_HighInterferenceIndication : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-HighInterferenceIndication";} + using parent_t = asn::bstring<>; + +}; + +/* +UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { + target-Cell-ID ECGI, + ul-interferenceindication UL-HighInterferenceIndication, + iE-Extensions ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct target_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "target_Cell_ID_t";} + using parent_t = ECGI; + + }; + target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;} + target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;} + struct ul_interferenceindication_t : UL_HighInterferenceIndication + { + static constexpr const char* name() {return "ul_interferenceindication_t";} + using parent_t = UL_HighInterferenceIndication; + + }; + ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;} + ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + void clear() + { + target_Cell_ID.clear(); + ul_interferenceindication.clear(); + iE_Extensions.clear(); + + }; + private: + target_Cell_ID_t target_Cell_ID; + ul_interferenceindication_t ul_interferenceindication; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item +*/ + +struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item +{ + static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";} + using parent_t = UL_HighInterferenceIndicationInfo_Item; + +}; +struct UL_HighInterferenceIndicationInfo : asn::sequenceof +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... } +*/ + +struct UL_UE_Configuration : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-UE-Configuration";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + no_data + ,shared + ,only + } index_t; + +}; + +/* +ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULConfiguration_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULConfiguration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULConfiguration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uL_PDCP_t : UL_UE_Configuration + { + static constexpr const char* name() {return "uL_PDCP_t";} + using parent_t = UL_UE_Configuration; + + }; + uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;} + uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_PDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_PDCP); + v(iE_Extensions); + + }; + void clear() + { + uL_PDCP.clear(); + iE_Extensions.clear(); + + }; + private: + uL_PDCP_t uL_PDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct VehicleUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "VehicleUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct V2XServicesAuthorized_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +V2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "V2XServicesAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct vehicleUE_t : VehicleUE + { + static constexpr const char* name() {return "vehicleUE_t";} + using parent_t = VehicleUE; + static constexpr bool optional = true; + + }; + vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;} + vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;} + struct pedestrianUE_t : PedestrianUE + { + static constexpr const char* name() {return "pedestrianUE_t";} + using parent_t = PedestrianUE; + static constexpr bool optional = true; + + }; + pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;} + pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + void clear() + { + vehicleUE.clear(); + pedestrianUE.clear(); + iE_Extensions.clear(); + + }; + private: + vehicleUE_t vehicleUE; + pedestrianUE_t pedestrianUE; + iE_Extensions_t iE_Extensions; + +}; +/* +WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3)) +*/ + +struct WT_UE_XwAP_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WT-UE-XwAP-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +WTID-Type1 ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + shortWTID BIT STRING (SIZE(24)), + ... +} +*/ + +struct WTID_Type1 : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "WTID-Type1";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct shortWTID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "shortWTID_t";} + using parent_t = asn::bstring<>; + + }; + + shortWTID_t& ref_shortWTID() {return shortWTID;} + shortWTID_t const& ref_shortWTID() const {return shortWTID;} + template void decode(V& v) + { + v(pLMN_Identity); + v(shortWTID); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(shortWTID); + + }; + void clear() + { + pLMN_Identity.clear(); + shortWTID.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + shortWTID_t shortWTID; + +}; +/* +WTID-Long-Type2 ::= BIT STRING (SIZE(48)) +*/ + +struct WTID_Long_Type2 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WTID-Long-Type2";} + using parent_t = asn::bstring<>; + +}; + +/* +WTID ::= CHOICE { + wTID-Type1 WTID-Type1, + wTID-Type2 WTID-Long-Type2, + ... +} +*/ + +struct WTID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WTID";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~WTID() {clear();} + struct wTID_Type1_t : WTID_Type1 + { + static constexpr const char* name() {return "wTID_Type1_t";} + using parent_t = WTID_Type1; + + }; + struct wTID_Type2_t : WTID_Long_Type2 + { + static constexpr const char* name() {return "wTID_Type2_t";} + using parent_t = WTID_Long_Type2; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as();} return nullptr; } + wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(wTID_Type1_t)]; + char dummy2[sizeof(wTID_Type2_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +X2BenefitValue ::= INTEGER (1..8, ...) +*/ + +struct X2BenefitValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "X2BenefitValue";} + using parent_t = asn::integer<>; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp new file mode 100644 index 0000000..dd85f97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Contents.hpp @@ -0,0 +1,68476 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-IEs.hpp" +#include "X2AP-Containers.hpp" +#include "X2AP-Constants.hpp" + +/* +ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedCellList-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item +*/ + +struct ActivatedCellList_elm : ActivatedCellList_Item +{ + static constexpr const char* name() {return "ActivatedCellList_elm";} + using parent_t = ActivatedCellList_Item; + +}; +struct ActivatedCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ActivatedNRCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ActivatedNRCellList_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ActivatedNRCellList-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ActivatedNRCellList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ActivatedNRCellList_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ActivatedNRCellList-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivatedNRCellList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ActivatedNRCellList-Item +*/ + +struct ActivatedNRCellList_elm : ActivatedNRCellList_Item +{ + static constexpr const char* name() {return "ActivatedNRCellList_elm";} + using parent_t = ActivatedNRCellList_Item; + +}; +struct ActivatedNRCellList : asn::sequenceof +{ + static constexpr const char* name() {return "ActivatedNRCellList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct CellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, + ... +} +*/ + +struct CellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToActivate-Item::= SEQUENCE { + ecgi ECGI, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct ecgi_t : ECGI + { + static constexpr const char* name() {return "ecgi_t";} + using parent_t = ECGI; + + }; + ecgi_t& ref_ecgi() {return ecgi;} + ecgi_t const& ref_ecgi() const {return ecgi;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ecgi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ecgi); + v(iE_Extensions); + + }; + void clear() + { + ecgi.clear(); + iE_Extensions.clear(); + + }; + private: + ecgi_t ecgi; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item +*/ + +struct ServedCellsToActivate_elm : ServedCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedCellsToActivate_elm";} + using parent_t = ServedCellsToActivate_Item; + +}; +struct ServedCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}, + ... +} +*/ + +struct CellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(id_ServedCellsToActivate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToActivate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToActivate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCellsToActivate& select_id_ServedCellsToActivate() { return set(1); } + ServedCellsToActivate const* get_id_ServedCellsToActivate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToActivate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedCellsToActivate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, + ... +} +*/ + +struct CellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct CellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(id_ActivatedCellList); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedCellList)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedCellList& select_id_ActivatedCellList() { return set(1); } + ActivatedCellList const* get_id_ActivatedCellList() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedCellList()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedCellList)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ActivatedCellList() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, + ... +} +*/ + +struct CellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "CellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +Limited-list-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Limited_list_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +Limited-list ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {Limited-list-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Limited_list_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "Limited_list_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +struct Limited_list : asn::sequenceof +{ + static constexpr const char* name() {return "Limited-list";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellAssistanceInformation ::= CHOICE { + limited-list Limited-list, + full-list ENUMERATED {allServedNRcells, ...}, + ... +} +*/ + +struct CellAssistanceInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "CellAssistanceInformation";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~CellAssistanceInformation() {clear();} + struct limited_list_t : Limited_list + { + static constexpr const char* name() {return "limited_list_t";} + using parent_t = Limited_list; + + }; + struct full_list_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "full_list_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allServedNRcells + } index_t; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + limited_list_t& select_limited_list() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + limited_list_t const* get_limited_list() const { if(get_index() == 1) { return &var.as();} return nullptr; } + full_list_t& select_full_list() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + full_list_t const* get_full_list() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(limited_list_t)]; + char dummy2[sizeof(full_list_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ABSInformation CRITICALITY ignore EXTENSION ABSInformation PRESENCE optional }| +{ ID id-InvokeIndication CRITICALITY ignore EXTENSION InvokeIndication PRESENCE optional }| +{ ID id-IntendedULDLConfiguration CRITICALITY ignore EXTENSION SubframeAssignment PRESENCE optional }| +{ ID id-ExtendedULInterferenceOverloadInfo CRITICALITY ignore EXTENSION ExtendedULInterferenceOverloadInfo PRESENCE optional }| +{ ID id-CoMPInformation CRITICALITY ignore EXTENSION CoMPInformation PRESENCE optional }| +{ ID id-DynamicDLTransmissionInformation CRITICALITY ignore EXTENSION DynamicDLTransmissionInformation PRESENCE optional }, + ... +} +*/ + +struct CellInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(id_ABSInformation); type=1;} + void select_id_InvokeIndication() { set(id_InvokeIndication); type=2;} + void select_id_IntendedULDLConfiguration() { set(id_IntendedULDLConfiguration); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(id_ExtendedULInterferenceOverloadInfo); type=4;} + void select_id_CoMPInformation() { set(id_CoMPInformation); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(id_DynamicDLTransmissionInformation); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ABSInformation)) { type = 1; return true; } + else if(equal(id_InvokeIndication)) { type = 2; return true; } + else if(equal(id_IntendedULDLConfiguration)) { type = 3; return true; } + else if(equal(id_ExtendedULInterferenceOverloadInfo)) { type = 4; return true; } + else if(equal(id_CoMPInformation)) { type = 5; return true; } + else if(equal(id_DynamicDLTransmissionInformation)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ABSInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_InvokeIndication);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_IntendedULDLConfiguration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ExtendedULInterferenceOverloadInfo);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CoMPInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DynamicDLTransmissionInformation);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(ignore); type=1;} + void select_id_InvokeIndication() { set(ignore); type=2;} + void select_id_IntendedULDLConfiguration() { set(ignore); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(ignore); type=4;} + void select_id_CoMPInformation() { set(ignore); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ABSInformation& select_id_ABSInformation() { return set(1); } + ABSInformation const* get_id_ABSInformation() const { return get(1); } + InvokeIndication& select_id_InvokeIndication() { return set(2); } + InvokeIndication const* get_id_InvokeIndication() const { return get(2); } + SubframeAssignment& select_id_IntendedULDLConfiguration() { return set(3); } + SubframeAssignment const* get_id_IntendedULDLConfiguration() const { return get(3); } + ExtendedULInterferenceOverloadInfo& select_id_ExtendedULInterferenceOverloadInfo() { return set(4); } + ExtendedULInterferenceOverloadInfo const* get_id_ExtendedULInterferenceOverloadInfo() const { return get(4); } + CoMPInformation& select_id_CoMPInformation() { return set(5); } + CoMPInformation const* get_id_CoMPInformation() const { return get(5); } + DynamicDLTransmissionInformation& select_id_DynamicDLTransmissionInformation() { return set(6); } + DynamicDLTransmissionInformation const* get_id_DynamicDLTransmissionInformation() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ABSInformation()); return true; + case 2: v(select_id_InvokeIndication()); return true; + case 3: v(select_id_IntendedULDLConfiguration()); return true; + case 4: v(select_id_ExtendedULInterferenceOverloadInfo()); return true; + case 5: v(select_id_CoMPInformation()); return true; + case 6: v(select_id_DynamicDLTransmissionInformation()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABSInformation)]; + char dummy2[sizeof(CoMPInformation)]; + char dummy3[sizeof(DynamicDLTransmissionInformation)]; + char dummy4[sizeof(ExtendedULInterferenceOverloadInfo)]; + char dummy5[sizeof(InvokeIndication)]; + char dummy6[sizeof(SubframeAssignment)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ABSInformation() { set(optional); type=1;} + void select_id_InvokeIndication() { set(optional); type=2;} + void select_id_IntendedULDLConfiguration() { set(optional); type=3;} + void select_id_ExtendedULInterferenceOverloadInfo() { set(optional); type=4;} + void select_id_CoMPInformation() { set(optional); type=5;} + void select_id_DynamicDLTransmissionInformation() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-Item ::= SEQUENCE { + cell-ID ECGI, + ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, + ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, + relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellInformation_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellInformation-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + static constexpr bool optional = true; + + }; + ul_InterferenceOverloadIndication_t& set_ul_InterferenceOverloadIndication() { ul_InterferenceOverloadIndication.setpresent(true); return ul_InterferenceOverloadIndication;} + ul_InterferenceOverloadIndication_t const* get_ul_InterferenceOverloadIndication() const {return ul_InterferenceOverloadIndication.is_valid() ? &ul_InterferenceOverloadIndication : nullptr;} + struct ul_HighInterferenceIndicationInfo_t : UL_HighInterferenceIndicationInfo + { + static constexpr const char* name() {return "ul_HighInterferenceIndicationInfo_t";} + using parent_t = UL_HighInterferenceIndicationInfo; + static constexpr bool optional = true; + + }; + ul_HighInterferenceIndicationInfo_t& set_ul_HighInterferenceIndicationInfo() { ul_HighInterferenceIndicationInfo.setpresent(true); return ul_HighInterferenceIndicationInfo;} + ul_HighInterferenceIndicationInfo_t const* get_ul_HighInterferenceIndicationInfo() const {return ul_HighInterferenceIndicationInfo.is_valid() ? &ul_HighInterferenceIndicationInfo : nullptr;} + struct relativeNarrowbandTxPower_t : RelativeNarrowbandTxPower + { + static constexpr const char* name() {return "relativeNarrowbandTxPower_t";} + using parent_t = RelativeNarrowbandTxPower; + static constexpr bool optional = true; + + }; + relativeNarrowbandTxPower_t& set_relativeNarrowbandTxPower() { relativeNarrowbandTxPower.setpresent(true); return relativeNarrowbandTxPower;} + relativeNarrowbandTxPower_t const* get_relativeNarrowbandTxPower() const {return relativeNarrowbandTxPower.is_valid() ? &relativeNarrowbandTxPower : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(ul_InterferenceOverloadIndication); + v(ul_HighInterferenceIndicationInfo); + v(relativeNarrowbandTxPower); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + ul_InterferenceOverloadIndication.clear(); + ul_HighInterferenceIndicationInfo.clear(); + relativeNarrowbandTxPower.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + ul_InterferenceOverloadIndication_t ul_InterferenceOverloadIndication; + ul_HighInterferenceIndicationInfo_t ul_HighInterferenceIndicationInfo; + relativeNarrowbandTxPower_t relativeNarrowbandTxPower; + iE_Extensions_t iE_Extensions; + +}; +/* +CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } +} +*/ + +struct CellInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(id_CellInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_Item& select_id_CellInformation_Item() { return set(1); } + CellInformation_Item const* get_id_CellInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } +*/ + +struct CellInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional}| + { ID id-ABS-Status CRITICALITY ignore EXTENSION ABS-Status PRESENCE optional}| + { ID id-RSRPMRList CRITICALITY ignore EXTENSION RSRPMRList PRESENCE optional}| + { ID id-CSIReportList CRITICALITY ignore EXTENSION CSIReportList PRESENCE optional}| + { ID id-CellReportingIndicator CRITICALITY ignore EXTENSION CellReportingIndicator PRESENCE optional}, + ... +} +*/ + +struct CellMeasurementResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(id_CompositeAvailableCapacityGroup); type=1;} + void select_id_ABS_Status() { set(id_ABS_Status); type=2;} + void select_id_RSRPMRList() { set(id_RSRPMRList); type=3;} + void select_id_CSIReportList() { set(id_CSIReportList); type=4;} + void select_id_CellReportingIndicator() { set(id_CellReportingIndicator); type=5;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompositeAvailableCapacityGroup)) { type = 1; return true; } + else if(equal(id_ABS_Status)) { type = 2; return true; } + else if(equal(id_RSRPMRList)) { type = 3; return true; } + else if(equal(id_CSIReportList)) { type = 4; return true; } + else if(equal(id_CellReportingIndicator)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompositeAvailableCapacityGroup);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ABS_Status);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_RSRPMRList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSIReportList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellReportingIndicator);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(ignore); type=1;} + void select_id_ABS_Status() { set(ignore); type=2;} + void select_id_RSRPMRList() { set(ignore); type=3;} + void select_id_CSIReportList() { set(ignore); type=4;} + void select_id_CellReportingIndicator() { set(ignore); type=5;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + CompositeAvailableCapacityGroup& select_id_CompositeAvailableCapacityGroup() { return set(1); } + CompositeAvailableCapacityGroup const* get_id_CompositeAvailableCapacityGroup() const { return get(1); } + ABS_Status& select_id_ABS_Status() { return set(2); } + ABS_Status const* get_id_ABS_Status() const { return get(2); } + RSRPMRList& select_id_RSRPMRList() { return set(3); } + RSRPMRList const* get_id_RSRPMRList() const { return get(3); } + CSIReportList& select_id_CSIReportList() { return set(4); } + CSIReportList const* get_id_CSIReportList() const { return get(4); } + CellReportingIndicator& select_id_CellReportingIndicator() { return set(5); } + CellReportingIndicator const* get_id_CellReportingIndicator() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompositeAvailableCapacityGroup()); return true; + case 2: v(select_id_ABS_Status()); return true; + case 3: v(select_id_RSRPMRList()); return true; + case 4: v(select_id_CSIReportList()); return true; + case 5: v(select_id_CellReportingIndicator()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ABS_Status)]; + char dummy2[sizeof(CSIReportList)]; + char dummy3[sizeof(CellReportingIndicator)]; + char dummy4[sizeof(CompositeAvailableCapacityGroup)]; + char dummy5[sizeof(RSRPMRList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_CompositeAvailableCapacityGroup() { set(optional); type=1;} + void select_id_ABS_Status() { set(optional); type=2;} + void select_id_RSRPMRList() { set(optional); type=3;} + void select_id_CSIReportList() { set(optional); type=4;} + void select_id_CellReportingIndicator() { set(optional); type=5;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-Item ::= SEQUENCE { + cell-ID ECGI, + hWLoadIndicator HWLoadIndicator OPTIONAL, + s1TNLLoadIndicator S1TNLLoadIndicator OPTIONAL, + radioResourceStatus RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellMeasurementResult_Item : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "CellMeasurementResult-Item";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct hWLoadIndicator_t : HWLoadIndicator + { + static constexpr const char* name() {return "hWLoadIndicator_t";} + using parent_t = HWLoadIndicator; + static constexpr bool optional = true; + + }; + hWLoadIndicator_t& set_hWLoadIndicator() { hWLoadIndicator.setpresent(true); return hWLoadIndicator;} + hWLoadIndicator_t const* get_hWLoadIndicator() const {return hWLoadIndicator.is_valid() ? &hWLoadIndicator : nullptr;} + struct s1TNLLoadIndicator_t : S1TNLLoadIndicator + { + static constexpr const char* name() {return "s1TNLLoadIndicator_t";} + using parent_t = S1TNLLoadIndicator; + static constexpr bool optional = true; + + }; + s1TNLLoadIndicator_t& set_s1TNLLoadIndicator() { s1TNLLoadIndicator.setpresent(true); return s1TNLLoadIndicator;} + s1TNLLoadIndicator_t const* get_s1TNLLoadIndicator() const {return s1TNLLoadIndicator.is_valid() ? &s1TNLLoadIndicator : nullptr;} + struct radioResourceStatus_t : RadioResourceStatus + { + static constexpr const char* name() {return "radioResourceStatus_t";} + using parent_t = RadioResourceStatus; + static constexpr bool optional = true; + + }; + radioResourceStatus_t& set_radioResourceStatus() { radioResourceStatus.setpresent(true); return radioResourceStatus;} + radioResourceStatus_t const* get_radioResourceStatus() const {return radioResourceStatus.is_valid() ? &radioResourceStatus : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(hWLoadIndicator); + v(s1TNLLoadIndicator); + v(radioResourceStatus); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + hWLoadIndicator.clear(); + s1TNLLoadIndicator.clear(); + radioResourceStatus.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + hWLoadIndicator_t hWLoadIndicator; + s1TNLLoadIndicator_t s1TNLLoadIndicator; + radioResourceStatus_t radioResourceStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory} +} +*/ + +struct CellMeasurementResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(id_CellMeasurementResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellMeasurementResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellMeasurementResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellMeasurementResult_Item& select_id_CellMeasurementResult_Item() { return set(1); } + CellMeasurementResult_Item const* get_id_CellMeasurementResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellMeasurementResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellMeasurementResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } +*/ + +struct CellMeasurementResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellMeasurementResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellMeasurementResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellMeasurementResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellToReport_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-Item ::= SEQUENCE { + cell-ID ECGI, + iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellToReport_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellToReport-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory} +} +*/ + +struct CellToReport_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(id_CellToReport_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellToReport_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellToReport_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellToReport_Item& select_id_CellToReport_Item() { return set(1); } + CellToReport_Item const* get_id_CellToReport_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellToReport_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CellToReport_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } +*/ + +struct CellToReport_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CellToReport_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CellToReport_List : asn::sequenceof +{ + static constexpr const char* name() {return "CellToReport-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementFailureCause_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-Item ::= SEQUENCE { + measurementFailedReportCharacteristics ReportCharacteristics, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementFailureCause_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "MeasurementFailureCause-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct measurementFailedReportCharacteristics_t : ReportCharacteristics + { + static constexpr const char* name() {return "measurementFailedReportCharacteristics_t";} + using parent_t = ReportCharacteristics; + + }; + measurementFailedReportCharacteristics_t& ref_measurementFailedReportCharacteristics() {return measurementFailedReportCharacteristics;} + measurementFailedReportCharacteristics_t const& ref_measurementFailedReportCharacteristics() const {return measurementFailedReportCharacteristics;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementFailedReportCharacteristics); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + measurementFailedReportCharacteristics.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + measurementFailedReportCharacteristics_t measurementFailedReportCharacteristics; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE MeasurementFailureCause-Item PRESENCE mandatory} +} +*/ + +struct MeasurementFailureCause_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(id_MeasurementFailureCause_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementFailureCause_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementFailureCause_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementFailureCause_Item& select_id_MeasurementFailureCause_Item() { return set(1); } + MeasurementFailureCause_Item const* get_id_MeasurementFailureCause_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementFailureCause_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementFailureCause_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementFailureCause_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..maxFailedMeasObjects)) OF ProtocolIE-Single-Container { {MeasurementFailureCause-ItemIEs} } +*/ + +struct MeasurementFailureCause_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementFailureCause_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementFailureCause_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementFailureCause-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompleteFailureCauseInformation_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List, + iE-Extensions ProtocolExtensionContainer { {CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompleteFailureCauseInformation_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + + }; + measurementFailureCause_List_t& ref_measurementFailureCause_List() {return measurementFailureCause_List;} + measurementFailureCause_List_t const& ref_measurementFailureCause_List() const {return measurementFailureCause_List;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE CompleteFailureCauseInformation-Item PRESENCE mandatory} +} +*/ + +struct CompleteFailureCauseInformation_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(id_CompleteFailureCauseInformation_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CompleteFailureCauseInformation_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CompleteFailureCauseInformation_Item& select_id_CompleteFailureCauseInformation_Item() { return set(1); } + CompleteFailureCauseInformation_Item const* get_id_CompleteFailureCauseInformation_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CompleteFailureCauseInformation_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CompleteFailureCauseInformation_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_CompleteFailureCauseInformation_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CompleteFailureCauseInformation-ItemIEs} } +*/ + +struct CompleteFailureCauseInformation_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct CompleteFailureCauseInformation_List : asn::sequenceof +{ + static constexpr const char* name() {return "CompleteFailureCauseInformation-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-DataForwardingAddress-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dl-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-DataForwardingAddress-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dl_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dl_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + dl_GTPtunnelEndpoint_t& ref_dl_GTPtunnelEndpoint() {return dl_GTPtunnelEndpoint;} + dl_GTPtunnelEndpoint_t const& ref_dl_GTPtunnelEndpoint() const {return dl_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dl_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dl_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dl_GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-DataForwardingAddress-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-DataForwardingAddress-Item CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_DataForwardingAddress_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(id_E_RABs_DataForwardingAddress_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_DataForwardingAddress_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_DataForwardingAddress_Item& select_id_E_RABs_DataForwardingAddress_Item() { return set(1); } + E_RABs_DataForwardingAddress_Item const* get_id_E_RABs_DataForwardingAddress_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_DataForwardingAddress_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_DataForwardingAddress_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-DataForwardingAddress-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-DataForwardingAddress-ItemIEs} } +*/ + +struct E_RABs_DataForwardingAddress_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_DataForwardingAddress_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_DataForwardingAddress_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-DataForwardingAddress-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +DataForwardingAddressIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-DataForwardingAddress-List CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-List PRESENCE mandatory}, + ... +} +*/ + +struct DataForwardingAddressIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(id_E_RABs_DataForwardingAddress_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 1; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_E_RABs_DataForwardingAddress_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(1); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(1); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + E_RABs_DataForwardingAddress_List& select_id_E_RABs_DataForwardingAddress_List() { return set(4); } + E_RABs_DataForwardingAddress_List const* get_id_E_RABs_DataForwardingAddress_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 2: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_E_RABs_DataForwardingAddress_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_DataForwardingAddress_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=1;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_E_RABs_DataForwardingAddress_List() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +DataForwardingAddressIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{DataForwardingAddressIndication-IEs}}, + ... +} +*/ + +struct DataForwardingAddressIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "DataForwardingAddressIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTP_TunnelEndpoint_t& set_uL_GTP_TunnelEndpoint() { uL_GTP_TunnelEndpoint.setpresent(true); return uL_GTP_TunnelEndpoint;} + uL_GTP_TunnelEndpoint_t const* get_uL_GTP_TunnelEndpoint() const {return uL_GTP_TunnelEndpoint.is_valid() ? &uL_GTP_TunnelEndpoint : nullptr;} + struct dL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTP_TunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTP_TunnelEndpoint_t& set_dL_GTP_TunnelEndpoint() { dL_GTP_TunnelEndpoint.setpresent(true); return dL_GTP_TunnelEndpoint;} + dL_GTP_TunnelEndpoint_t const* get_dL_GTP_TunnelEndpoint() const {return dL_GTP_TunnelEndpoint.is_valid() ? &dL_GTP_TunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_GTP_TunnelEndpoint); + v(dL_GTP_TunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_GTP_TunnelEndpoint.clear(); + dL_GTP_TunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_GTP_TunnelEndpoint_t uL_GTP_TunnelEndpoint; + dL_GTP_TunnelEndpoint_t dL_GTP_TunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_Admitted_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(id_E_RABs_Admitted_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_Item& select_id_E_RABs_Admitted_Item() { return set(1); } + E_RABs_Admitted_Item const* get_id_E_RABs_Admitted_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } +*/ + +struct E_RABs_Admitted_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(id_E_RABs_Admitted_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_Item& select_id_E_RABs_Admitted_ToBeAdded_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_Item const* get_id_E_RABs_Admitted_ToBeAdded_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeAdded_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(id_E_RABs_Admitted_ToBeAdded_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_ModAckItem& select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeAdded_ModAckItem const* get_id_E_RABs_Admitted_ToBeAdded_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + rlc-Mode RLCMode OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, +-- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<8, 0, true, 7>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + static constexpr bool optional = true; + + }; + rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} + rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(id_lCID); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_lCID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + LCID& select_id_lCID() { return set(1); } + LCID const* get_id_lCID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_lCID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_lCID() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + + }; + sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeAdded_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeAdded-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeAdded_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(s1_DL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + s1_DL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + seNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + seNB_GTPtunnelEndpoint_t& set_seNB_GTPtunnelEndpoint() { seNB_GTPtunnelEndpoint.setpresent(true); return seNB_GTPtunnelEndpoint;} + seNB_GTPtunnelEndpoint_t const* get_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint.is_valid() ? &seNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(seNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + seNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToBeModified_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeModified-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(id_E_RABs_Admitted_ToBeModified_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_ModAckItem& select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { return set(1); } + E_RABs_Admitted_ToBeModified_ModAckItem const* get_id_E_RABs_Admitted_ToBeModified_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} + s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} + mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(s1_DL_GTPtunnelEndpoint); + v(sgNB_UL_GTP_TEIDatPDCP); + v(mCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + s1_DL_GTPtunnelEndpoint.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + mCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-secondarysgNBDLGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}| + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(id_secondarysgNBDLGTPTEIDatPDCP); type=1;} + void select_id_RLC_Status() { set(id_RLC_Status); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_secondarysgNBDLGTPTEIDatPDCP)) { type = 1; return true; } + else if(equal(id_RLC_Status)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_secondarysgNBDLGTPTEIDatPDCP);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(ignore); type=1;} + void select_id_RLC_Status() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_secondarysgNBDLGTPTEIDatPDCP() { return set(1); } + GTPtunnelEndpoint const* get_id_secondarysgNBDLGTPTEIDatPDCP() const { return get(1); } + RLC_Status& select_id_RLC_Status() { return set(2); } + RLC_Status const* get_id_RLC_Status() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_secondarysgNBDLGTPTEIDatPDCP()); return true; + case 2: v(select_id_RLC_Status()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(optional); type=1;} + void select_id_RLC_Status() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeModified_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToBeModified_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeModified-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeModified_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeModified_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToReleased-ModAckItem ::= CHOICE { + sCG-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer, + split-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_ModAckItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-ModAckItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_Admitted_ToReleased_ModAckItem() {clear();} + struct sCG_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-ModAckItem PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(id_E_RABs_Admitted_ToBeReleased_ModAckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_ModAckItem& select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { return set(1); } + E_RABs_Admitted_ToReleased_ModAckItem const* get_id_E_RABs_Admitted_ToBeReleased_ModAckItem() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckItem()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_ModAckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-ModAckItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_ModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_ModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_ModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToReleased-SgNBModAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToReleased_SgNBModAck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-SgNBModAck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-SgNBModAck-Item PRESENCE mandatory} +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToReleased_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { return set(1); } + E_RABs_Admitted_ToReleased_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToReleased_SgNBModAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBModAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { return set(1); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF + ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs} } +*/ + +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(iE_Extensions); + + }; + void clear() + { + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + iE_Extensions.clear(); + + }; + private: + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs X2AP-PROTOCOL-IES ::= { +{ ID id-E-RABs-AdmittedToBeModified-SgNBModConf-Item CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConf-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_AdmittedToBeModified_SgNBModConf_Item& select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { return set(1); } + E_RABs_AdmittedToBeModified_SgNBModConf_Item const* get_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_AdmittedToBeModified_SgNBModConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-AdmittedToBeModified-SgNBModConfList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container + { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs} } +*/ + +struct E_RABs_AdmittedToBeModified_SgNBModConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_AdmittedToBeModified_SgNBModConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_AdmittedToBeModified_SgNBModConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToCounterCheckItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheckItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToCounterCheckItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItem : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheckItem";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToCounterCheckItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToCounterCheckItem CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheckItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToCounterCheckItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(id_E_RABs_SubjectToCounterCheckItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToCounterCheckItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheckItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToCounterCheckItem& select_id_E_RABs_SubjectToCounterCheckItem() { return set(1); } + E_RABs_SubjectToCounterCheckItem const* get_id_E_RABs_SubjectToCounterCheckItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToCounterCheckItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheckItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToCounterCheckItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToCounterCheckItemIEs} } +*/ + +struct E_RABs_SubjectToCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Count INTEGER (0..4294967295), + dL-Count INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uL_Count_t";} + using parent_t = asn::integer<>; + + }; + + uL_Count_t& ref_uL_Count() {return uL_Count;} + uL_Count_t const& ref_uL_Count() const {return uL_Count;} + struct dL_Count_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dL_Count_t";} + using parent_t = asn::integer<>; + + }; + + dL_Count_t& ref_dL_Count() {return dL_Count;} + dL_Count_t const& ref_dL_Count() const {return dL_Count;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Count); + v(dL_Count); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Count.clear(); + dL_Count.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Count_t uL_Count; + dL_Count_t dL_Count; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToSgNBCounterCheck-Item CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(id_E_RABs_SubjectToSgNBCounterCheck_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToSgNBCounterCheck_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToSgNBCounterCheck_Item& select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { return set(1); } + E_RABs_SubjectToSgNBCounterCheck_Item const* get_id_E_RABs_SubjectToSgNBCounterCheck_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToSgNBCounterCheck_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToSgNBCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToSgNBCounterCheck-ItemIEs} } +*/ + +struct E_RABs_SubjectToSgNBCounterCheck_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToSgNBCounterCheck_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToSgNBCounterCheck_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| + { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| + { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}| + { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| + { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(id_ReceiveStatusOfULPDCPSDUsExtended); type=1;} + void select_id_ULCOUNTValueExtended() { set(id_ULCOUNTValueExtended); type=2;} + void select_id_DLCOUNTValueExtended() { set(id_DLCOUNTValueExtended); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(id_ULCOUNTValuePDCP_SNlength18); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(id_DLCOUNTValuePDCP_SNlength18); type=6;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ReceiveStatusOfULPDCPSDUsExtended)) { type = 1; return true; } + else if(equal(id_ULCOUNTValueExtended)) { type = 2; return true; } + else if(equal(id_DLCOUNTValueExtended)) { type = 3; return true; } + else if(equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)) { type = 4; return true; } + else if(equal(id_ULCOUNTValuePDCP_SNlength18)) { type = 5; return true; } + else if(equal(id_DLCOUNTValuePDCP_SNlength18)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsExtended);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ULCOUNTValueExtended);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_DLCOUNTValueExtended);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ULCOUNTValuePDCP_SNlength18);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_DLCOUNTValuePDCP_SNlength18);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(ignore); type=1;} + void select_id_ULCOUNTValueExtended() { set(ignore); type=2;} + void select_id_DLCOUNTValueExtended() { set(ignore); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(ignore); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(ignore); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(ignore); type=6;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ReceiveStatusOfULPDCPSDUsExtended& select_id_ReceiveStatusOfULPDCPSDUsExtended() { return set(1); } + ReceiveStatusOfULPDCPSDUsExtended const* get_id_ReceiveStatusOfULPDCPSDUsExtended() const { return get(1); } + COUNTValueExtended& select_id_ULCOUNTValueExtended() { return set(2); } + COUNTValueExtended const* get_id_ULCOUNTValueExtended() const { return get(2); } + COUNTValueExtended& select_id_DLCOUNTValueExtended() { return set(3); } + COUNTValueExtended const* get_id_DLCOUNTValueExtended() const { return get(3); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18& select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { return set(4); } + ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 const* get_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() const { return get(4); } + COUNTvaluePDCP_SNlength18& select_id_ULCOUNTValuePDCP_SNlength18() { return set(5); } + COUNTvaluePDCP_SNlength18 const* get_id_ULCOUNTValuePDCP_SNlength18() const { return get(5); } + COUNTvaluePDCP_SNlength18& select_id_DLCOUNTValuePDCP_SNlength18() { return set(6); } + COUNTvaluePDCP_SNlength18 const* get_id_DLCOUNTValuePDCP_SNlength18() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ReceiveStatusOfULPDCPSDUsExtended()); return true; + case 2: v(select_id_ULCOUNTValueExtended()); return true; + case 3: v(select_id_DLCOUNTValueExtended()); return true; + case 4: v(select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18()); return true; + case 5: v(select_id_ULCOUNTValuePDCP_SNlength18()); return true; + case 6: v(select_id_DLCOUNTValuePDCP_SNlength18()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(COUNTValueExtended)]; + char dummy2[sizeof(COUNTvaluePDCP_SNlength18)]; + char dummy3[sizeof(ReceiveStatusOfULPDCPSDUsExtended)]; + char dummy4[sizeof(ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(optional); type=1;} + void select_id_ULCOUNTValueExtended() { set(optional); type=2;} + void select_id_DLCOUNTValueExtended() { set(optional); type=3;} + void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(optional); type=4;} + void select_id_ULCOUNTValuePDCP_SNlength18() { set(optional); type=5;} + void select_id_DLCOUNTValuePDCP_SNlength18() { set(optional); type=6;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + + receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, + uL-COUNTvalue COUNTvalue, + dL-COUNTvalue COUNTvalue, + iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_SubjectToStatusTransfer_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct receiveStatusofULPDCPSDUs_t : ReceiveStatusofULPDCPSDUs + { + static constexpr const char* name() {return "receiveStatusofULPDCPSDUs_t";} + using parent_t = ReceiveStatusofULPDCPSDUs; + static constexpr bool optional = true; + + }; + receiveStatusofULPDCPSDUs_t& set_receiveStatusofULPDCPSDUs() { receiveStatusofULPDCPSDUs.setpresent(true); return receiveStatusofULPDCPSDUs;} + receiveStatusofULPDCPSDUs_t const* get_receiveStatusofULPDCPSDUs() const {return receiveStatusofULPDCPSDUs.is_valid() ? &receiveStatusofULPDCPSDUs : nullptr;} + struct uL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "uL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + uL_COUNTvalue_t& ref_uL_COUNTvalue() {return uL_COUNTvalue;} + uL_COUNTvalue_t const& ref_uL_COUNTvalue() const {return uL_COUNTvalue;} + struct dL_COUNTvalue_t : COUNTvalue + { + static constexpr const char* name() {return "dL_COUNTvalue_t";} + using parent_t = COUNTvalue; + + }; + dL_COUNTvalue_t& ref_dL_COUNTvalue() {return dL_COUNTvalue;} + dL_COUNTvalue_t const& ref_dL_COUNTvalue() const {return dL_COUNTvalue;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(receiveStatusofULPDCPSDUs); + v(uL_COUNTvalue); + v(dL_COUNTvalue); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + receiveStatusofULPDCPSDUs.clear(); + uL_COUNTvalue.clear(); + dL_COUNTvalue.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + receiveStatusofULPDCPSDUs_t receiveStatusofULPDCPSDUs; + uL_COUNTvalue_t uL_COUNTvalue; + dL_COUNTvalue_t dL_COUNTvalue; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } +} +*/ + +struct E_RABs_SubjectToStatusTransfer_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(id_E_RABs_SubjectToStatusTransfer_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_SubjectToStatusTransfer_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_SubjectToStatusTransfer_Item& select_id_E_RABs_SubjectToStatusTransfer_Item() { return set(1); } + E_RABs_SubjectToStatusTransfer_Item const* get_id_E_RABs_SubjectToStatusTransfer_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_SubjectToStatusTransfer_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToStatusTransfer-ItemIEs} } +*/ + +struct E_RABs_SubjectToStatusTransfer_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_SubjectToStatusTransfer_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_SubjectToStatusTransfer_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-Item ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-Item-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-Item-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_Item : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-Item";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_Item() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_Item_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_Item_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_Item_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(id_E_RABs_ToBeAdded_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_Item& select_id_E_RABs_ToBeAdded_Item() { return set(1); } + E_RABs_ToBeAdded_Item const* get_id_E_RABs_ToBeAdded_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| + { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} + void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Correlation_ID)) { type = 1; return true; } + else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(ignore); type=1;} + void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + Correlation_ID& select_id_Correlation_ID() { return set(1); } + Correlation_ID const* get_id_Correlation_ID() const { return get(1); } + Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } + Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Correlation_ID()); return true; + case 2: v(select_id_SIPTO_Correlation_ID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Correlation_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Correlation_ID() { set(optional); type=1;} + void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeAdded-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeAdded-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeAdded_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeAdded_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeAdded_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeAdded_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeAdded-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeAdded-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(id_E_RABs_ToBeAdded_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_ModReqItem& select_id_E_RABs_ToBeAdded_ModReqItem() { return set(1); } + E_RABs_ToBeAdded_ModReqItem const* get_id_E_RABs_ToBeAdded_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeAdded_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MCG-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MCG_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MCG_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t& set_max_MCG_admit_E_RAB_Level_QoS_Parameters() { max_MCG_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MCG_admit_E_RAB_Level_QoS_Parameters;} + max_MCG_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MCG_admit_E_RAB_Level_QoS_Parameters() const {return max_MCG_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MCG_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MCG_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MCG_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MCG_admit_E_RAB_Level_QoS_Parameters_t max_MCG_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBAddReq-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(id_E_RABs_ToBeAdded_SgNBAddReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBAddReq_Item& select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBAddReq_Item const* get_id_E_RABs_ToBeAdded_SgNBAddReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBAddReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBAddReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBAddReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBAddReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBAddReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBAddReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBAddReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- + dL-Forwarding DL-Forwarding OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, +-- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<6, 0, true, 4>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_duplicationActivation)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_duplicationActivation() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + DuplicationActivation& select_id_duplicationActivation() { return set(3); } + DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_duplicationActivation()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DuplicationActivation)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_duplicationActivation() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, + secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + rlc-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, +-- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<6, 0, true, 3>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + + }; + meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} + struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} + secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct rlc_Mode_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} + rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(secondary_meNB_UL_GTP_TEIDatPDCP); + v(rlc_Mode); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + secondary_meNB_UL_GTP_TEIDatPDCP.clear(); + rlc_Mode.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; + rlc_Mode_t rlc_Mode; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + drb-ID DRB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct drb_ID_t : DRB_ID + { + static constexpr const char* name() {return "drb_ID_t";} + using parent_t = DRB_ID; + + }; + drb_ID_t& ref_drb_ID() {return drb_ID;} + drb_ID_t const& ref_drb_ID() const {return drb_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(drb_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + drb_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + drb_ID_t drb_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeAdded-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeAdded-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(id_E_RABs_ToBeAdded_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeAdded_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeAdded_SgNBModReq_Item& select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeAdded_SgNBModReq_Item const* get_id_E_RABs_ToBeAdded_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeAdded_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeAdded_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeAdded-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeAdded_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeAdded_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_GTPtunnelEndpoint_t& set_meNB_GTPtunnelEndpoint() { meNB_GTPtunnelEndpoint.setpresent(true); return meNB_GTPtunnelEndpoint;} + meNB_GTPtunnelEndpoint_t const* get_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint.is_valid() ? &meNB_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(meNB_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + meNB_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeModified-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeModified-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeModified_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeModified_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeModified_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeModified_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeModified-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeModified-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(id_E_RABs_ToBeModified_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_ModReqItem& select_id_E_RABs_ToBeModified_ModReqItem() { return set(1); } + E_RABs_ToBeModified_ModReqItem const* get_id_E_RABs_ToBeModified_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeModified_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, + meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, + s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + full_E_RAB_Level_QoS_Parameters_t& set_full_E_RAB_Level_QoS_Parameters() { full_E_RAB_Level_QoS_Parameters.setpresent(true); return full_E_RAB_Level_QoS_Parameters;} + full_E_RAB_Level_QoS_Parameters_t const* get_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters.is_valid() ? &full_E_RAB_Level_QoS_Parameters : nullptr;} + struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation + { + static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} + max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} + meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} + struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} + s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(full_E_RAB_Level_QoS_Parameters); + v(max_MN_admit_E_RAB_Level_QoS_Parameters); + v(meNB_DL_GTP_TEIDatMCG); + v(s1_UL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + full_E_RAB_Level_QoS_Parameters.clear(); + max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); + meNB_DL_GTP_TEIDatMCG.clear(); + s1_UL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; + max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; + meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; + s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-secondarymeNBULGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(id_secondarymeNBULGTPTEIDatPDCP); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_secondarymeNBULGTPTEIDatPDCP)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_secondarymeNBULGTPTEIDatPDCP);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + GTPtunnelEndpoint& select_id_secondarymeNBULGTPTEIDatPDCP() { return set(3); } + GTPtunnelEndpoint const* get_id_secondarymeNBULGTPTEIDatPDCP() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_secondarymeNBULGTPTEIDatPDCP()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GTPtunnelEndpoint)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_secondarymeNBULGTPTEIDatPDCP() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_SCG_E_RAB_Level_QoS_Parameters_t& set_requested_SCG_E_RAB_Level_QoS_Parameters() { requested_SCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_SCG_E_RAB_Level_QoS_Parameters;} + requested_SCG_E_RAB_Level_QoS_Parameters_t const* get_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_SCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + meNB_UL_GTP_TEIDatPDCP_t& set_meNB_UL_GTP_TEIDatPDCP() { meNB_UL_GTP_TEIDatPDCP.setpresent(true); return meNB_UL_GTP_TEIDatPDCP;} + meNB_UL_GTP_TEIDatPDCP_t const* get_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP.is_valid() ? &meNB_UL_GTP_TEIDatPDCP : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_SCG_E_RAB_Level_QoS_Parameters); + v(meNB_UL_GTP_TEIDatPDCP); + v(uL_Configuration); + v(iE_Extensions); + + }; + void clear() + { + requested_SCG_E_RAB_Level_QoS_Parameters.clear(); + meNB_UL_GTP_TEIDatPDCP.clear(); + uL_Configuration.clear(); + iE_Extensions.clear(); + + }; + private: + requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; + meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; + uL_Configuration_t uL_Configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(id_E_RABs_ToBeModified_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReq_Item& select_id_E_RABs_ToBeModified_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReq_Item const* get_id_E_RABs_ToBeModified_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| + { ID id-new-drb-ID-req CRITICALITY ignore EXTENSION NewDRBIDrequest PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} + void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} + void select_id_new_drb_ID_req() { set(id_new_drb_ID_req); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uLpDCPSnLength)) { type = 1; return true; } + else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } + else if(equal(id_new_drb_ID_req)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_new_drb_ID_req);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(ignore); type=1;} + void select_id_dLPDCPSnLength() { set(ignore); type=2;} + void select_id_new_drb_ID_req() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } + PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } + PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } + PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } + NewDRBIDrequest& select_id_new_drb_ID_req() { return set(3); } + NewDRBIDrequest const* get_id_new_drb_ID_req() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uLpDCPSnLength()); return true; + case 2: v(select_id_dLPDCPSnLength()); return true; + case 3: v(select_id_new_drb_ID_req()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(NewDRBIDrequest)]; + char dummy2[sizeof(PDCPSnLength)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_uLpDCPSnLength() { set(optional); type=1;} + void select_id_dLPDCPSnLength() { set(optional); type=2;} + void select_id_new_drb_ID_req() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent ::= SEQUENCE { + requested-MCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, + s1-DL-GTP-TEIDatSgNB GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct requested_MCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "requested_MCG_E_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + static constexpr bool optional = true; + + }; + requested_MCG_E_RAB_Level_QoS_Parameters_t& set_requested_MCG_E_RAB_Level_QoS_Parameters() { requested_MCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_MCG_E_RAB_Level_QoS_Parameters;} + requested_MCG_E_RAB_Level_QoS_Parameters_t const* get_requested_MCG_E_RAB_Level_QoS_Parameters() const {return requested_MCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_MCG_E_RAB_Level_QoS_Parameters : nullptr;} + struct uL_Configuration_t : ULConfiguration + { + static constexpr const char* name() {return "uL_Configuration_t";} + using parent_t = ULConfiguration; + static constexpr bool optional = true; + + }; + uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} + uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} + struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} + sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} + struct s1_DL_GTP_TEIDatSgNB_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "s1_DL_GTP_TEIDatSgNB_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + s1_DL_GTP_TEIDatSgNB_t& set_s1_DL_GTP_TEIDatSgNB() { s1_DL_GTP_TEIDatSgNB.setpresent(true); return s1_DL_GTP_TEIDatSgNB;} + s1_DL_GTP_TEIDatSgNB_t const* get_s1_DL_GTP_TEIDatSgNB() const {return s1_DL_GTP_TEIDatSgNB.is_valid() ? &s1_DL_GTP_TEIDatSgNB : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(requested_MCG_E_RAB_Level_QoS_Parameters); + v(uL_Configuration); + v(sgNB_UL_GTP_TEIDatPDCP); + v(s1_DL_GTP_TEIDatSgNB); + v(iE_Extensions); + + }; + void clear() + { + requested_MCG_E_RAB_Level_QoS_Parameters.clear(); + uL_Configuration.clear(); + sgNB_UL_GTP_TEIDatPDCP.clear(); + s1_DL_GTP_TEIDatSgNB.clear(); + iE_Extensions.clear(); + + }; + private: + requested_MCG_E_RAB_Level_QoS_Parameters_t requested_MCG_E_RAB_Level_QoS_Parameters; + uL_Configuration_t uL_Configuration; + sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; + s1_DL_GTP_TEIDatSgNB_t s1_DL_GTP_TEIDatSgNB; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional}| + { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(id_RLC_Status); type=1;} + void select_id_lCID() { set(id_lCID); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLC_Status)) { type = 1; return true; } + else if(equal(id_lCID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_lCID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(ignore); type=1;} + void select_id_lCID() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLC_Status& select_id_RLC_Status() { return set(1); } + RLC_Status const* get_id_RLC_Status() const { return get(1); } + LCID& select_id_lCID() { return set(2); } + LCID const* get_id_lCID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLC_Status()); return true; + case 2: v(select_id_lCID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(LCID)]; + char dummy2[sizeof(RLC_Status)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RLC_Status() { set(optional); type=1;} + void select_id_lCID() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent ::= SEQUENCE { + sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} + sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} + secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sgNB_DL_GTP_TEIDatSCG); + v(secondary_sgNB_DL_GTP_TEIDatSCG); + v(iE_Extensions); + + }; + void clear() + { + sgNB_DL_GTP_TEIDatSCG.clear(); + secondary_sgNB_DL_GTP_TEIDatSCG.clear(); + iE_Extensions.clear(); + + }; + private: + sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; + secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeModified-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeModified-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(id_E_RABs_ToBeModified_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeModified_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeModified_SgNBModReqd_Item& select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeModified_SgNBModReqd_Item const* get_id_E_RABs_ToBeModified_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeModified_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeModified-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeModified_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeModified_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(uL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-ModReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-ModReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_ModReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_ModReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_ModReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_ModReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-ModReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(id_E_RABs_ToBeReleased_ModReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqItem& select_id_E_RABs_ToBeReleased_ModReqItem() { return set(1); } + E_RABs_ToBeReleased_ModReqItem const* get_id_E_RABs_ToBeReleased_ModReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_ModReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_ModReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_ModReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-ModReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelConfItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelConfItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelConfItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelConfItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelConfItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelConfItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelConfItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelConfItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelConfItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelConfItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelConfItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelConfItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(id_E_RABs_ToBeReleased_RelConfItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelConfItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelConfItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelConfItem& select_id_E_RABs_ToBeReleased_RelConfItem() { return set(1); } + E_RABs_ToBeReleased_RelConfItem const* get_id_E_RABs_ToBeReleased_RelConfItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelConfItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelConfItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelConfItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelConf ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelConfItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelConf_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelConf_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelConf : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelConf";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-SCG-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} + uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(uL_Forwarding_GTPtunnelEndpoint); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + uL_Forwarding_GTPtunnelEndpoint.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-RelReqItem-Split-Bearer ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-Split-Bearer";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} + dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(dL_Forwarding_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + dL_Forwarding_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-RelReqItem ::= CHOICE { + sCG-Bearer E-RABs-ToBeReleased-RelReqItem-SCG-Bearer, + split-Bearer E-RABs-ToBeReleased-RelReqItem-Split-Bearer, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItem : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~E_RABs_ToBeReleased_RelReqItem() {clear();} + struct sCG_Bearer_t : E_RABs_ToBeReleased_RelReqItem_SCG_Bearer + { + static constexpr const char* name() {return "sCG_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; + + }; + struct split_Bearer_t : E_RABs_ToBeReleased_RelReqItem_Split_Bearer + { + static constexpr const char* name() {return "split_Bearer_t";} + using parent_t = E_RABs_ToBeReleased_RelReqItem_Split_Bearer; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } + split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sCG_Bearer_t)]; + char dummy2[sizeof(split_Bearer_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RABs-ToBeReleased-RelReqItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-RelReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelReqItem PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_RelReqItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(id_E_RABs_ToBeReleased_RelReqItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_RelReqItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelReqItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_RelReqItem& select_id_E_RABs_ToBeReleased_RelReqItem() { return set(1); } + E_RABs_ToBeReleased_RelReqItem const* get_id_E_RABs_ToBeReleased_RelReqItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_RelReqItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_RelReqItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_RelReqItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-List-RelReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelReqItemIEs} } +*/ + +struct E_RABs_ToBeReleased_List_RelReq_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelReq_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_List_RelReq : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqdItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqdItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqdItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-ModReqdItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-ModReqdItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqdItem PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_ModReqdItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(id_E_RABs_ToBeReleased_ModReqdItem); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_ModReqdItem)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqdItem);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_ModReqdItem& select_id_E_RABs_ToBeReleased_ModReqdItem() { return set(1); } + E_RABs_ToBeReleased_ModReqdItem const* get_id_E_RABs_ToBeReleased_ModReqdItem() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_ModReqdItem()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_ModReqdItem)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-ModReqd ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqdItemIEs} } +*/ + +struct E_RABs_ToBeReleased_ModReqd_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_ModReqd_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_ModReqd : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBChaConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(id_E_RABs_ToBeReleased_SgNBChaConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBChaConf_Item& select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBChaConf_Item const* get_id_E_RABs_ToBeReleased_SgNBChaConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBChaConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBChaConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBChaConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBChaConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBChaConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBChaConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBChaConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GTPtunnelEndpoint); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + dL_GTPtunnelEndpoint.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(id_E_RABs_ToBeReleased_SgNBModReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReq_Item& select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReq_Item const* get_id_E_RABs_ToBeReleased_SgNBModReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReq_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReq_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReq_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RLCMode_transferred)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + RLCMode& select_id_RLCMode_transferred() { return set(1); } + RLCMode const* get_id_RLCMode_transferred() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RLCMode_transferred()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RLCMode)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RLCMode_transferred() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(cause); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + cause.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqd-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBModReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBModReqd_Item& select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBModReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBModReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBModReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBModReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConf-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConf-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(id_E_RABs_ToBeReleased_SgNBRelConf_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelConf_Item& select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelConf_Item const* get_id_E_RABs_ToBeReleased_SgNBRelConf_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelConf_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelConf_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelConf-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelConfList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelConfList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelConfList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConfList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent ::= SEQUENCE { + uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} + struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + static constexpr bool optional = true; + + }; + dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} + dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_GTPtunnelEndpoint); + v(dL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + uL_GTPtunnelEndpoint.clear(); + dL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent";} + using parent_t = asn::sequence<1, 0, true, 1>; + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iE_Extensions); + + }; + void clear() + { + iE_Extensions.clear(); + + }; + private: + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, + resource-configuration CHOICE { + sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent, + sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent, + ... + }, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration + { + static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} + using parent_t = EN_DC_ResourceConfiguration; + + }; + en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} + en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} + struct resource_configuration_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "resource_configuration_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~resource_configuration_t() {clear();} + struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent + { + static constexpr const char* name() {return "sgNBPDCPpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; + + }; + struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent + { + static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} + using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } + sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(sgNBPDCPpresent_t)]; + char dummy2[sizeof(sgNBPDCPnotpresent_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + resource_configuration_t& ref_resource_configuration() {return resource_configuration;} + resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(en_DC_ResourceConfiguration); + v(resource_configuration); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + en_DC_ResourceConfiguration.clear(); + resource_configuration.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; + resource_configuration_t resource_configuration; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReq-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReq-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReq_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReq_Item& select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReq_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReq_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReq_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReq_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReq-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + rlc-Mode-transferred RLCMode, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqd-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct rlc_Mode_transferred_t : RLCMode + { + static constexpr const char* name() {return "rlc_Mode_transferred_t";} + using parent_t = RLCMode; + + }; + rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} + rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(rlc_Mode_transferred); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + rlc_Mode_transferred.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + rlc_Mode_transferred_t rlc_Mode_transferred; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeReleased-SgNBRelReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqd-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReqd_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeReleased_SgNBRelReqd_Item& select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { return set(1); } + E_RABs_ToBeReleased_SgNBRelReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReqd_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeReleased-SgNBRelReqdList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs} } +*/ + +struct E_RABs_ToBeReleased_SgNBRelReqdList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqdList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeReleased_SgNBRelReqdList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(id_BearerType); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_BearerType)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_BearerType);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(reject); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + BearerType& select_id_BearerType() { return set(1); } + BearerType const* get_id_BearerType() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_BearerType()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(BearerType)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_BearerType() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + dL-Forwarding DL-Forwarding OPTIONAL, + uL-GTPtunnelEndpoint GTPtunnelEndpoint, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetup_Item : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-Item";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct dL_Forwarding_t : DL_Forwarding + { + static constexpr const char* name() {return "dL_Forwarding_t";} + using parent_t = DL_Forwarding; + static constexpr bool optional = true; + + }; + dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} + dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} + struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint + { + static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} + using parent_t = GTPtunnelEndpoint; + + }; + uL_GTPtunnelEndpoint_t& ref_uL_GTPtunnelEndpoint() {return uL_GTPtunnelEndpoint;} + uL_GTPtunnelEndpoint_t const& ref_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(dL_Forwarding); + v(uL_GTPtunnelEndpoint); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + dL_Forwarding.clear(); + uL_GTPtunnelEndpoint.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + dL_Forwarding_t dL_Forwarding; + uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABs_ToBeSetup_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(id_E_RABs_ToBeSetup_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetup_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetup_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetup_Item& select_id_E_RABs_ToBeSetup_Item() { return set(1); } + E_RABs_ToBeSetup_Item const* get_id_E_RABs_ToBeSetup_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetup_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetup_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetup_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-uL-GTPtunnelEndpoint CRITICALITY reject EXTENSION GTPtunnelEndpoint PRESENCE mandatory}| + { ID id-dL-Forwarding CRITICALITY ignore EXTENSION DL-Forwarding PRESENCE optional }, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(id_uL_GTPtunnelEndpoint); type=1;} + void select_id_dL_Forwarding() { set(id_dL_Forwarding); type=2;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_uL_GTPtunnelEndpoint)) { type = 1; return true; } + else if(equal(id_dL_Forwarding)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_uL_GTPtunnelEndpoint);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_dL_Forwarding);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(reject); type=1;} + void select_id_dL_Forwarding() { set(ignore); type=2;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + GTPtunnelEndpoint& select_id_uL_GTPtunnelEndpoint() { return set(1); } + GTPtunnelEndpoint const* get_id_uL_GTPtunnelEndpoint() const { return get(1); } + DL_Forwarding& select_id_dL_Forwarding() { return set(2); } + DL_Forwarding const* get_id_dL_Forwarding() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_uL_GTPtunnelEndpoint()); return true; + case 2: v(select_id_dL_Forwarding()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DL_Forwarding)]; + char dummy2[sizeof(GTPtunnelEndpoint)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_uL_GTPtunnelEndpoint() { set(mandatory); type=1;} + void select_id_dL_Forwarding() { set(optional); type=2;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetupRetrieve-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, + bearerType BearerType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetupRetrieve-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RABs-ToBeSetupRetrieve-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct e_RAB_ID_t : E_RAB_ID + { + static constexpr const char* name() {return "e_RAB_ID_t";} + using parent_t = E_RAB_ID; + + }; + e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} + e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} + struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters + { + static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} + using parent_t = E_RAB_Level_QoS_Parameters; + + }; + e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} + e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} + struct bearerType_t : BearerType + { + static constexpr const char* name() {return "bearerType_t";} + using parent_t = BearerType; + static constexpr bool optional = true; + + }; + bearerType_t& set_bearerType() { bearerType.setpresent(true); return bearerType;} + bearerType_t const* get_bearerType() const {return bearerType.is_valid() ? &bearerType : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(e_RAB_Level_QoS_Parameters); + v(bearerType); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + e_RAB_Level_QoS_Parameters.clear(); + bearerType.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; + bearerType_t bearerType; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABs-ToBeSetupRetrieve-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABs-ToBeSetupRetrieve-Item CRITICALITY ignore TYPE E-RABs-ToBeSetupRetrieve-Item PRESENCE mandatory}, + ... +} +*/ + +struct E_RABs_ToBeSetupRetrieve_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(id_E_RABs_ToBeSetupRetrieve_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_E_RABs_ToBeSetupRetrieve_Item)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetupRetrieve_Item);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + E_RABs_ToBeSetupRetrieve_Item& select_id_E_RABs_ToBeSetupRetrieve_Item() { return set(1); } + E_RABs_ToBeSetupRetrieve_Item const* get_id_E_RABs_ToBeSetupRetrieve_Item() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_E_RABs_ToBeSetupRetrieve_Item()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_ToBeSetupRetrieve_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +E-RABs-ToBeSetup-ListRetrieve ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetupRetrieve-ItemIEs} } +*/ + +struct E_RABs_ToBeSetup_ListRetrieve_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABs_ToBeSetup_ListRetrieve_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABs_ToBeSetup_ListRetrieve : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABs-ToBeSetup-ListRetrieve";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + ... +} +*/ + +struct ENB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoNeighbourServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoNeighbourServedNRCell_Information : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoNeighbourServedNRCell-Information";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + iE_Extensions_t iE_Extensions; + +}; +/* +NRNeighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRNeighbour_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +NRNeighbour-Information ::= SEQUENCE (SIZE (1.. maxofNRNeighbours))OF SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + measurementTimingConfiguration OCTET STRING, + nRNeighbourModeInfo CHOICE { + fdd FDD-InfoNeighbourServedNRCell-Information, + tdd TDD-InfoNeighbourServedNRCell-Information, + ... + }, + iE-Extensions ProtocolExtensionContainer { {NRNeighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRNeighbour_Information_elm : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "NRNeighbour_Information_elm";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct nRNeighbourModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nRNeighbourModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nRNeighbourModeInfo_t() {clear();} + struct fdd_t : FDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoNeighbourServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoNeighbourServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoNeighbourServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nRNeighbourModeInfo_t& ref_nRNeighbourModeInfo() {return nRNeighbourModeInfo;} + nRNeighbourModeInfo_t const& ref_nRNeighbourModeInfo() const {return nRNeighbourModeInfo;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(measurementTimingConfiguration); + v(nRNeighbourModeInfo); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + measurementTimingConfiguration.clear(); + nRNeighbourModeInfo.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + measurementTimingConfiguration_t measurementTimingConfiguration; + nRNeighbourModeInfo_t nRNeighbourModeInfo; + iE_Extensions_t iE_Extensions; + +}; +struct NRNeighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "NRNeighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsENDCX2Management-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsENDCX2Management_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsENDCX2Management-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedEUTRAcellsToModifyListENDCConfUpd ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + old-ECGI ECGI, + servedEUTRACellInfo ServedCell-Information, + nrNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedEUTRAcellsToModifyListENDCConfUpd_elm : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd_elm";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ECGI_t : ECGI + { + static constexpr const char* name() {return "old_ECGI_t";} + using parent_t = ECGI; + + }; + old_ECGI_t& ref_old_ECGI() {return old_ECGI;} + old_ECGI_t const& ref_old_ECGI() const {return old_ECGI;} + struct servedEUTRACellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedEUTRACellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} + servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} + struct nrNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} + nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ECGI); + v(servedEUTRACellInfo); + v(nrNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + old_ECGI.clear(); + servedEUTRACellInfo.clear(); + nrNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + old_ECGI_t old_ECGI; + servedEUTRACellInfo_t servedEUTRACellInfo; + nrNeighbourInfo_t nrNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedEUTRAcellsToModifyListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedEUTRAcellsToDeleteListENDCConfUpd ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ServedEUTRAcellsToDeleteListENDCConfUpd_elm : ECGI +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd_elm";} + using parent_t = ECGI; + +}; +struct ServedEUTRAcellsToDeleteListENDCConfUpd : asn::sequenceof +{ + static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-CellAssistanceInformation CRITICALITY reject TYPE CellAssistanceInformation PRESENCE optional }| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedEUTRAcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToModifyListENDCConfUpd PRESENCE optional }| + { ID id-ServedEUTRAcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToDeleteListENDCConfUpd PRESENCE optional }, + ... +} +*/ + +struct ENB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(id_CellAssistanceInformation); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(id_ServedEUTRAcellsToModifyListENDCConfUpd); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(id_ServedEUTRAcellsToDeleteListENDCConfUpd); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellAssistanceInformation)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else if(equal(id_ServedEUTRAcellsToModifyListENDCConfUpd)) { type = 3; return true; } + else if(equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellAssistanceInformation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToModifyListENDCConfUpd);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(reject); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellAssistanceInformation& select_id_CellAssistanceInformation() { return set(1); } + CellAssistanceInformation const* get_id_CellAssistanceInformation() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + ServedEUTRAcellsToModifyListENDCConfUpd& select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { return set(3); } + ServedEUTRAcellsToModifyListENDCConfUpd const* get_id_ServedEUTRAcellsToModifyListENDCConfUpd() const { return get(3); } + ServedEUTRAcellsToDeleteListENDCConfUpd& select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { return set(4); } + ServedEUTRAcellsToDeleteListENDCConfUpd const* get_id_ServedEUTRAcellsToDeleteListENDCConfUpd() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellAssistanceInformation()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: v(select_id_ServedEUTRAcellsToModifyListENDCConfUpd()); return true; + case 4: v(select_id_ServedEUTRAcellsToDeleteListENDCConfUpd()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellAssistanceInformation)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + char dummy3[sizeof(ServedEUTRAcellsToDeleteListENDCConfUpd)]; + char dummy4[sizeof(ServedEUTRAcellsToModifyListENDCConfUpd)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_CellAssistanceInformation() { set(optional); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(optional); type=2;} + void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(optional); type=3;} + void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct ENB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } + ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationResp ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationResp_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationResp CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationResp PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(id_ListofEUTRACellsinEUTRACoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationResp& select_id_ListofEUTRACellsinEUTRACoordinationResp() { return set(3); } + ListofEUTRACellsinEUTRACoordinationResp const* get_id_ListofEUTRACellsinEUTRACoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ListofEUTRACellsinEUTRACoordinationReq ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinEUTRACoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinEUTRACoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofEUTRACellsinEUTRACoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct ENB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(id_ListofEUTRACellsinEUTRACoordinationReq); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofEUTRACellsinEUTRACoordinationReq)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationReq);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofEUTRACellsinEUTRACoordinationReq& select_id_ListofEUTRACellsinEUTRACoordinationReq() { return set(3); } + ListofEUTRACellsinEUTRACoordinationReq const* get_id_ListofEUTRACellsinEUTRACoordinationReq() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationReq()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationReq)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, + ... +} +*/ + +struct ServedCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(id_DeactivationIndication); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DeactivationIndication)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DeactivationIndication);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + DeactivationIndication& select_id_DeactivationIndication() { return set(1); } + DeactivationIndication const* get_id_DeactivationIndication() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DeactivationIndication()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DeactivationIndication)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_DeactivationIndication() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedCellsToModify-Item::= SEQUENCE { + old-ecgi ECGI, + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCellsToModify_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCellsToModify-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct old_ecgi_t : ECGI + { + static constexpr const char* name() {return "old_ecgi_t";} + using parent_t = ECGI; + + }; + old_ecgi_t& ref_old_ecgi() {return old_ecgi;} + old_ecgi_t const& ref_old_ecgi() const {return old_ecgi;} + struct servedCellInfo_t : ServedCell_Information + { + static constexpr const char* name() {return "servedCellInfo_t";} + using parent_t = ServedCell_Information; + + }; + servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} + servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} + struct neighbour_Info_t : Neighbour_Information + { + static constexpr const char* name() {return "neighbour_Info_t";} + using parent_t = Neighbour_Information; + static constexpr bool optional = true; + + }; + neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} + neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_ecgi); + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + old_ecgi.clear(); + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + old_ecgi_t old_ecgi; + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item +*/ + +struct ServedCellsToModify_elm : ServedCellsToModify_Item +{ + static constexpr const char* name() {return "ServedCellsToModify_elm";} + using parent_t = ServedCellsToModify_Item; + +}; +struct ServedCellsToModify : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCellsToModify";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct Old_ECGIs_elm : ECGI +{ + static constexpr const char* name() {return "Old_ECGIs_elm";} + using parent_t = ECGI; + +}; +struct Old_ECGIs : asn::sequenceof +{ + static constexpr const char* name() {return "Old-ECGIs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional}| + { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional}| + { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional}| + { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CoverageModificationList CRITICALITY reject TYPE CoverageModificationList PRESENCE optional}, + ... +} +*/ + +struct ENBConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(id_ServedCellsToAdd); type=1;} + void select_id_ServedCellsToModify() { set(id_ServedCellsToModify); type=2;} + void select_id_ServedCellsToDelete() { set(id_ServedCellsToDelete); type=3;} + void select_id_GUGroupIDToAddList() { set(id_GUGroupIDToAddList); type=4;} + void select_id_GUGroupIDToDeleteList() { set(id_GUGroupIDToDeleteList); type=5;} + void select_id_CoverageModificationList() { set(id_CoverageModificationList); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedCellsToAdd)) { type = 1; return true; } + else if(equal(id_ServedCellsToModify)) { type = 2; return true; } + else if(equal(id_ServedCellsToDelete)) { type = 3; return true; } + else if(equal(id_GUGroupIDToAddList)) { type = 4; return true; } + else if(equal(id_GUGroupIDToDeleteList)) { type = 5; return true; } + else if(equal(id_CoverageModificationList)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToAdd);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCellsToModify);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedCellsToDelete);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUGroupIDToAddList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUGroupIDToDeleteList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CoverageModificationList);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(reject); type=1;} + void select_id_ServedCellsToModify() { set(reject); type=2;} + void select_id_ServedCellsToDelete() { set(reject); type=3;} + void select_id_GUGroupIDToAddList() { set(reject); type=4;} + void select_id_GUGroupIDToDeleteList() { set(reject); type=5;} + void select_id_CoverageModificationList() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedCells& select_id_ServedCellsToAdd() { return set(1); } + ServedCells const* get_id_ServedCellsToAdd() const { return get(1); } + ServedCellsToModify& select_id_ServedCellsToModify() { return set(2); } + ServedCellsToModify const* get_id_ServedCellsToModify() const { return get(2); } + Old_ECGIs& select_id_ServedCellsToDelete() { return set(3); } + Old_ECGIs const* get_id_ServedCellsToDelete() const { return get(3); } + GUGroupIDList& select_id_GUGroupIDToAddList() { return set(4); } + GUGroupIDList const* get_id_GUGroupIDToAddList() const { return get(4); } + GUGroupIDList& select_id_GUGroupIDToDeleteList() { return set(5); } + GUGroupIDList const* get_id_GUGroupIDToDeleteList() const { return get(5); } + CoverageModificationList& select_id_CoverageModificationList() { return set(6); } + CoverageModificationList const* get_id_CoverageModificationList() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedCellsToAdd()); return true; + case 2: v(select_id_ServedCellsToModify()); return true; + case 3: v(select_id_ServedCellsToDelete()); return true; + case 4: v(select_id_GUGroupIDToAddList()); return true; + case 5: v(select_id_GUGroupIDToDeleteList()); return true; + case 6: v(select_id_CoverageModificationList()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CoverageModificationList)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(Old_ECGIs)]; + char dummy4[sizeof(ServedCells)]; + char dummy5[sizeof(ServedCellsToModify)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_ServedCellsToAdd() { set(optional); type=1;} + void select_id_ServedCellsToModify() { set(optional); type=2;} + void select_id_ServedCellsToDelete() { set(optional); type=3;} + void select_id_GUGroupIDToAddList() { set(optional); type=4;} + void select_id_GUGroupIDToDeleteList() { set(optional); type=5;} + void select_id_CoverageModificationList() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, +... +} +*/ + +struct ENBConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENBConfigurationUpdateFailure-IEs X2AP-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}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENBConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENBConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENBConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCCellActivationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(id_ActivationID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivationID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivationID& select_id_ActivationID() { return set(1); } + ActivationID const* get_id_ActivationID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivationID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivationID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationFailure-IEs}}, + ... +} +*/ + +struct ENDCCellActivationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ServedNRCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToActivate_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToActivate-Item::= SEQUENCE { + nrCellID NRCGI, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToActivate-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToActivate_Item : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ServedNRCellsToActivate-Item";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrCellID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrCellID); + v(iE_Extensions); + + }; + void clear() + { + nrCellID.clear(); + iE_Extensions.clear(); + + }; + private: + nrCellID_t nrCellID; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCellsToActivate::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ServedNRCellsToActivate-Item +*/ + +struct ServedNRCellsToActivate_elm : ServedNRCellsToActivate_Item +{ + static constexpr const char* name() {return "ServedNRCellsToActivate_elm";} + using parent_t = ServedNRCellsToActivate_Item; + +}; +struct ServedNRCellsToActivate : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRCellsToActivate";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ENDCCellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRCellsToActivate CRITICALITY reject TYPE ServedNRCellsToActivate PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}, + ... +} +*/ + +struct ENDCCellActivationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(id_ServedNRCellsToActivate); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRCellsToActivate)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRCellsToActivate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(reject); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRCellsToActivate& select_id_ServedNRCellsToActivate() { return set(1); } + ServedNRCellsToActivate const* get_id_ServedNRCellsToActivate() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRCellsToActivate()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivationID)]; + char dummy2[sizeof(ServedNRCellsToActivate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_ServedNRCellsToActivate() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationRequest-IEs}}, + ... +} +*/ + +struct ENDCCellActivationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCCellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ActivatedNRCellList CRITICALITY ignore TYPE ActivatedNRCellList PRESENCE mandatory}| + { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct ENDCCellActivationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(id_ActivatedNRCellList); type=1;} + void select_id_ActivationID() { set(id_ActivationID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ActivatedNRCellList)) { type = 1; return true; } + else if(equal(id_ActivationID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedNRCellList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(ignore); type=1;} + void select_id_ActivationID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ActivatedNRCellList& select_id_ActivatedNRCellList() { return set(1); } + ActivatedNRCellList const* get_id_ActivatedNRCellList() const { return get(1); } + ActivationID& select_id_ActivationID() { return set(2); } + ActivationID const* get_id_ActivationID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ActivatedNRCellList()); return true; + case 2: v(select_id_ActivationID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ActivatedNRCellList)]; + char dummy2[sizeof(ActivationID)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ActivatedNRCellList() { set(mandatory); type=1;} + void select_id_ActivationID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCCellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCCellActivationResponse-IEs}}, + ... +} +*/ + +struct ENDCCellActivationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCCellActivationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +FDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_InfoServedNRCell_Information : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct ul_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "ul_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} + ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} + struct dl_NRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "dl_NRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} + dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} + struct ul_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "ul_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + ul_NR_TxBW_t& ref_ul_NR_TxBW() {return ul_NR_TxBW;} + ul_NR_TxBW_t const& ref_ul_NR_TxBW() const {return ul_NR_TxBW;} + struct dl_NR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "dl_NR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + dl_NR_TxBW_t& ref_dl_NR_TxBW() {return dl_NR_TxBW;} + dl_NR_TxBW_t const& ref_dl_NR_TxBW() const {return dl_NR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(ul_NRFreqInfo); + v(dl_NRFreqInfo); + v(ul_NR_TxBW); + v(dl_NR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + ul_NRFreqInfo.clear(); + dl_NRFreqInfo.clear(); + ul_NR_TxBW.clear(); + dl_NR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + ul_NRFreqInfo_t ul_NRFreqInfo; + dl_NRFreqInfo_t dl_NRFreqInfo; + ul_NR_TxBW_t ul_NR_TxBW; + dl_NR_TxBW_t dl_NR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TDD_InfoServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +TDD-InfoServedNRCell-Information ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + nR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {TDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_InfoServedNRCell_Information : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-InfoServedNRCell-Information";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRFreqInfo_t : NRFreqInfo + { + static constexpr const char* name() {return "nRFreqInfo_t";} + using parent_t = NRFreqInfo; + + }; + nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} + nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} + struct nR_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "nR_TxBW_t";} + using parent_t = NR_TxBW; + + }; + nR_TxBW_t& ref_nR_TxBW() {return nR_TxBW;} + nR_TxBW_t const& ref_nR_TxBW() const {return nR_TxBW;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRFreqInfo); + v(nR_TxBW); + v(iE_Extensions); + + }; + void clear() + { + nRFreqInfo.clear(); + nR_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + nRFreqInfo_t nRFreqInfo; + nR_TxBW_t nR_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCell_Information_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCell_Information : asn::sequence<8, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCell-Information";} + using parent_t = asn::sequence<8, 0, true, 3>; + struct nrpCI_t : NRPCI + { + static constexpr const char* name() {return "nrpCI_t";} + using parent_t = NRPCI; + + }; + nrpCI_t& ref_nrpCI() {return nrpCI;} + nrpCI_t const& ref_nrpCI() const {return nrpCI;} + struct nrCellID_t : NRCGI + { + static constexpr const char* name() {return "nrCellID_t";} + using parent_t = NRCGI; + + }; + nrCellID_t& ref_nrCellID() {return nrCellID;} + nrCellID_t const& ref_nrCellID() const {return nrCellID;} + struct fiveGS_TAC_t : FiveGS_TAC + { + static constexpr const char* name() {return "fiveGS_TAC_t";} + using parent_t = FiveGS_TAC; + static constexpr bool optional = true; + + }; + fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} + fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} + struct configured_TAC_t : TAC + { + static constexpr const char* name() {return "configured_TAC_t";} + using parent_t = TAC; + static constexpr bool optional = true; + + }; + configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} + configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} + struct broadcastPLMNs_t : BroadcastPLMNs_Item + { + static constexpr const char* name() {return "broadcastPLMNs_t";} + using parent_t = BroadcastPLMNs_Item; + + }; + broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} + broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} + struct nrModeInfo_t : asn::choice<2, 0, true> + { + static constexpr const char* name() {return "nrModeInfo_t";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~nrModeInfo_t() {clear();} + struct fdd_t : FDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = FDD_InfoServedNRCell_Information; + + }; + struct tdd_t : TDD_InfoServedNRCell_Information + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = TDD_InfoServedNRCell_Information; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(fdd_t)]; + char dummy2[sizeof(tdd_t)]; + + }; + asn::variant var; + index_type index {0}; + }; + nrModeInfo_t& ref_nrModeInfo() {return nrModeInfo;} + nrModeInfo_t const& ref_nrModeInfo() const {return nrModeInfo;} + struct measurementTimingConfiguration_t : asn::ostring<> + { + static constexpr const char* name() {return "measurementTimingConfiguration_t";} + using parent_t = asn::ostring<>; + + }; + + measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} + measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nrpCI); + v(nrCellID); + v(fiveGS_TAC); + v(configured_TAC); + v(broadcastPLMNs); + v(nrModeInfo); + v(measurementTimingConfiguration); + v(iE_Extensions); + + }; + void clear() + { + nrpCI.clear(); + nrCellID.clear(); + fiveGS_TAC.clear(); + configured_TAC.clear(); + broadcastPLMNs.clear(); + nrModeInfo.clear(); + measurementTimingConfiguration.clear(); + iE_Extensions.clear(); + + }; + private: + nrpCI_t nrpCI; + nrCellID_t nrCellID; + fiveGS_TAC_t fiveGS_TAC; + configured_TAC_t configured_TAC; + broadcastPLMNs_t broadcastPLMNs; + nrModeInfo_t nrModeInfo; + measurementTimingConfiguration_t measurementTimingConfiguration; + iE_Extensions_t iE_Extensions; + +}; +/* +En-gNBServedCells-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct En_gNBServedCells_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF SEQUENCE { + servedNRCellInfo ServedNRCell-Information, + nRNeighbourInfo NRNeighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {En-gNBServedCells-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct servedNRCellInfo_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInfo_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInfo_t& ref_servedNRCellInfo() {return servedNRCellInfo;} + servedNRCellInfo_t const& ref_servedNRCellInfo() const {return servedNRCellInfo;} + struct nRNeighbourInfo_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nRNeighbourInfo_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nRNeighbourInfo_t& set_nRNeighbourInfo() { nRNeighbourInfo.setpresent(true); return nRNeighbourInfo;} + nRNeighbourInfo_t const* get_nRNeighbourInfo() const {return nRNeighbourInfo.is_valid() ? &nRNeighbourInfo : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedNRCellInfo); + v(nRNeighbourInfo); + v(iE_Extensions); + + }; + void clear() + { + servedNRCellInfo.clear(); + nRNeighbourInfo.clear(); + iE_Extensions.clear(); + + }; + private: + servedNRCellInfo_t servedNRCellInfo; + nRNeighbourInfo_t nRNeighbourInfo; + iE_Extensions_t iE_Extensions; + +}; +struct ServedNRcellsENDCX2ManagementList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedNRCellsToModify_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ServedNRCellsToModify-Item::= SEQUENCE { + old-nrcgi NRCGI, + servedNRCellInformation ServedNRCell-Information, + nrNeighbourInformation NRNeighbour-Information OPTIONAL, + nrDeactivationIndication DeactivationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToModify-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedNRCellsToModify_Item : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ServedNRCellsToModify-Item";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct old_nrcgi_t : NRCGI + { + static constexpr const char* name() {return "old_nrcgi_t";} + using parent_t = NRCGI; + + }; + old_nrcgi_t& ref_old_nrcgi() {return old_nrcgi;} + old_nrcgi_t const& ref_old_nrcgi() const {return old_nrcgi;} + struct servedNRCellInformation_t : ServedNRCell_Information + { + static constexpr const char* name() {return "servedNRCellInformation_t";} + using parent_t = ServedNRCell_Information; + + }; + servedNRCellInformation_t& ref_servedNRCellInformation() {return servedNRCellInformation;} + servedNRCellInformation_t const& ref_servedNRCellInformation() const {return servedNRCellInformation;} + struct nrNeighbourInformation_t : NRNeighbour_Information + { + static constexpr const char* name() {return "nrNeighbourInformation_t";} + using parent_t = NRNeighbour_Information; + static constexpr bool optional = true; + + }; + nrNeighbourInformation_t& set_nrNeighbourInformation() { nrNeighbourInformation.setpresent(true); return nrNeighbourInformation;} + nrNeighbourInformation_t const* get_nrNeighbourInformation() const {return nrNeighbourInformation.is_valid() ? &nrNeighbourInformation : nullptr;} + struct nrDeactivationIndication_t : DeactivationIndication + { + static constexpr const char* name() {return "nrDeactivationIndication_t";} + using parent_t = DeactivationIndication; + static constexpr bool optional = true; + + }; + nrDeactivationIndication_t& set_nrDeactivationIndication() { nrDeactivationIndication.setpresent(true); return nrDeactivationIndication;} + nrDeactivationIndication_t const* get_nrDeactivationIndication() const {return nrDeactivationIndication.is_valid() ? &nrDeactivationIndication : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(old_nrcgi); + v(servedNRCellInformation); + v(nrNeighbourInformation); + v(nrDeactivationIndication); + v(iE_Extensions); + + }; + void clear() + { + old_nrcgi.clear(); + servedNRCellInformation.clear(); + nrNeighbourInformation.clear(); + nrDeactivationIndication.clear(); + iE_Extensions.clear(); + + }; + private: + old_nrcgi_t old_nrcgi; + servedNRCellInformation_t servedNRCellInformation; + nrNeighbourInformation_t nrNeighbourInformation; + nrDeactivationIndication_t nrDeactivationIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedNRcellsToModifyENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF ServedNRCellsToModify-Item +*/ + +struct ServedNRcellsToModifyENDCConfUpdList_elm : ServedNRCellsToModify_Item +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList_elm";} + using parent_t = ServedNRCellsToModify_Item; + +}; +struct ServedNRcellsToModifyENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedNRcellsToDeleteENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF NRCGI +*/ + +struct ServedNRcellsToDeleteENDCConfUpdList_elm : NRCGI +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList_elm";} + using parent_t = NRCGI; + +}; +struct ServedNRcellsToDeleteENDCConfUpdList : asn::sequenceof +{ + static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional }| + { ID id-ServedNRcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToModifyENDCConfUpdList PRESENCE optional }| + { ID id-ServedNRcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToDeleteENDCConfUpdList PRESENCE optional }, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(id_ServedNRcellsToModifyListENDCConfUpd); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(id_ServedNRcellsToDeleteListENDCConfUpd); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else if(equal(id_ServedNRcellsToModifyListENDCConfUpd)) { type = 2; return true; } + else if(equal(id_ServedNRcellsToDeleteListENDCConfUpd)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsToModifyListENDCConfUpd);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedNRcellsToDeleteListENDCConfUpd);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(reject); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + ServedNRcellsToModifyENDCConfUpdList& select_id_ServedNRcellsToModifyListENDCConfUpd() { return set(2); } + ServedNRcellsToModifyENDCConfUpdList const* get_id_ServedNRcellsToModifyListENDCConfUpd() const { return get(2); } + ServedNRcellsToDeleteENDCConfUpdList& select_id_ServedNRcellsToDeleteListENDCConfUpd() { return set(3); } + ServedNRcellsToDeleteENDCConfUpdList const* get_id_ServedNRcellsToDeleteListENDCConfUpd() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: v(select_id_ServedNRcellsToModifyListENDCConfUpd()); return true; + case 3: v(select_id_ServedNRcellsToDeleteListENDCConfUpd()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + char dummy2[sizeof(ServedNRcellsToDeleteENDCConfUpdList)]; + char dummy3[sizeof(ServedNRcellsToModifyENDCConfUpdList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(optional); type=2;} + void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcConfigUpdate::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcConfigUpdate() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcConfigUpdate CRITICALITY reject TYPE InitiatingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(id_InitiatingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcConfigUpdate& select_id_InitiatingNodeType_EndcConfigUpdate() { return set(1); } + InitiatingNodeType_EndcConfigUpdate const* get_id_InitiatingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdate-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional}, + ... +} +*/ + +struct En_gNB_ENDCConfigUpdateAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcConfigUpdate::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcConfigUpdate";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcConfigUpdate() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcConfigUpdate CRITICALITY reject TYPE RespondingNodeType-EndcConfigUpdate PRESENCE mandatory}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(id_RespondingNodeType_EndcConfigUpdate); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcConfigUpdate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcConfigUpdate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcConfigUpdate& select_id_RespondingNodeType_EndcConfigUpdate() { return set(1); } + RespondingNodeType_EndcConfigUpdate const* get_id_RespondingNodeType_EndcConfigUpdate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcConfigUpdate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcConfigUpdate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateAcknowledge-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateFailure-IEs}}, + ... +} +*/ + +struct ENDCConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCConfigurationUpdateFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-Admitted-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}, + ... +} +*/ + +struct ENDCPartialResetConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(id_UEs_Admitted_ToBeReset); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_Admitted_ToBeReset)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_Admitted_ToBeReset);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_Admitted_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_Admitted_ToBeReset() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_Admitted_ToBeReset()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UEs_Admitted_ToBeReset() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetConfirm-IEs}}, + ... +} +*/ + +struct ENDCPartialResetConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCPartialResetRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-UEs-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} +*/ + +struct ENDCPartialResetRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(id_UEs_ToBeReset); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UEs_ToBeReset)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_ToBeReset);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UEsToBeResetList& select_id_UEs_ToBeReset() { return set(1); } + UEsToBeResetList const* get_id_UEs_ToBeReset() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UEs_ToBeReset()); return true; + case 2: v(select_id_Cause()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UEsToBeResetList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_UEs_ToBeReset() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCPartialResetRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCPartialResetRequired-IEs}}, + ... +} +*/ + +struct ENDCPartialResetRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCPartialResetRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ENDCX2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalFailure-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Removal ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Removal() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Removal CRITICALITY reject TYPE InitiatingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(id_InitiatingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Removal& select_id_InitiatingNodeType_EndcX2Removal() { return set(1); } + InitiatingNodeType_EndcX2Removal const* get_id_InitiatingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalRequest-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2RemovalReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Removal ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Removal : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Removal";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Removal() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Removal CRITICALITY reject TYPE RespondingNodeType-EndcX2Removal PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(id_RespondingNodeType_EndcX2Removal); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Removal)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Removal);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Removal& select_id_RespondingNodeType_EndcX2Removal() { return set(1); } + RespondingNodeType_EndcX2Removal const* get_id_RespondingNodeType_EndcX2Removal() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Removal()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Removal)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Removal() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2RemovalResponse-IEs}}, + ... +} +*/ + +struct ENDCX2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ENDCX2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } | + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, + ... +} +*/ + +struct ENDCX2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + void select_id_TimeToWait() { set(id_TimeToWait); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else if(equal(id_TimeToWait)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + void select_id_TimeToWait() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + TimeToWait& select_id_TimeToWait() { return set(3); } + TimeToWait const* get_id_TimeToWait() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: v(select_id_TimeToWait()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + void select_id_TimeToWait() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupFailure-IEs}}, + ... +} +*/ + +struct ENDCX2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EndcX2Setup ::= CHOICE { + init-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqIEs}}, + init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EndcX2Setup() {clear();} + struct init_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct init_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "init_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(init_eNB_t)]; + char dummy2[sizeof(init_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EndcX2Setup CRITICALITY reject TYPE InitiatingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(id_InitiatingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EndcX2Setup& select_id_InitiatingNodeType_EndcX2Setup() { return set(1); } + InitiatingNodeType_EndcX2Setup const* get_id_InitiatingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupRequest-IEs}}, + ... +} +*/ + +struct ENDCX2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +En-gNB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_ENDCX2SetupReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } + else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(reject); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } + GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } + ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } + ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Globalen_gNB_ID()); return true; + case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalGNB_ID)]; + char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} + void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EndcX2Setup ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EndcX2Setup : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EndcX2Setup";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EndcX2Setup() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ENDCX2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EndcX2Setup CRITICALITY reject TYPE RespondingNodeType-EndcX2Setup PRESENCE mandatory}, + ... +} +*/ + +struct ENDCX2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(id_RespondingNodeType_EndcX2Setup); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EndcX2Setup)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Setup);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EndcX2Setup& select_id_RespondingNodeType_EndcX2Setup() { return set(1); } + RespondingNodeType_EndcX2Setup const* get_id_RespondingNodeType_EndcX2Setup() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EndcX2Setup()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EndcX2Setup)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EndcX2Setup() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ENDCX2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ENDCX2SetupResponse-IEs}}, + ... +} +*/ + +struct ENDCX2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ENDCX2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofEUTRACellsinNRCoordinationReq ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI +*/ + +struct ListofEUTRACellsinNRCoordinationReq_elm : ECGI +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq_elm";} + using parent_t = ECGI; + +}; +struct ListofEUTRACellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ListofNRCellsinNRCoordinationReq ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationReq_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationReq : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-ListofEUTRACellsinNRCoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinNRCoordinationReq PRESENCE mandatory }| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationReq CRITICALITY reject TYPE ListofNRCellsinNRCoordinationReq PRESENCE mandatory}, + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(id_ListofEUTRACellsinNRCoordinationReq); type=2;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(id_ListofNRCellsinNRCoordinationReq); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_ListofEUTRACellsinNRCoordinationReq)) { type = 2; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 3; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationReq)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinNRCoordinationReq);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationReq);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(reject); type=2;} + void select_id_SpectrumSharingGroupID() { set(reject); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + ListofEUTRACellsinNRCoordinationReq& select_id_ListofEUTRACellsinNRCoordinationReq() { return set(2); } + ListofEUTRACellsinNRCoordinationReq const* get_id_ListofEUTRACellsinNRCoordinationReq() const { return get(2); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(3); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(3); } + ListofNRCellsinNRCoordinationReq& select_id_ListofNRCellsinNRCoordinationReq() { return set(4); } + ListofNRCellsinNRCoordinationReq const* get_id_ListofNRCellsinNRCoordinationReq() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_ListofEUTRACellsinNRCoordinationReq()); return true; + case 3: v(select_id_SpectrumSharingGroupID()); return true; + case 4: v(select_id_ListofNRCellsinNRCoordinationReq()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofEUTRACellsinNRCoordinationReq)]; + char dummy3[sizeof(ListofNRCellsinNRCoordinationReq)]; + char dummy4[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_ListofEUTRACellsinNRCoordinationReq() { set(mandatory); type=2;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=3;} + void select_id_ListofNRCellsinNRCoordinationReq() { set(mandatory); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingNodeType-EutranrCellResourceCoordination ::= CHOICE { + initiate-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqIEs}}, + initiate-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqIEs}}, + ... +} +*/ + +struct InitiatingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "InitiatingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~InitiatingNodeType_EutranrCellResourceCoordination() {clear();} + struct initiate_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct initiate_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "initiate_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + initiate_eNB_t& select_initiate_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiate_eNB_t const* get_initiate_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + initiate_en_gNB_t& select_initiate_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + initiate_en_gNB_t const* get_initiate_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiate_eNB_t)]; + char dummy2[sizeof(initiate_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-InitiatingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE InitiatingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(id_InitiatingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_InitiatingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + InitiatingNodeType_EutranrCellResourceCoordination& select_id_InitiatingNodeType_EutranrCellResourceCoordination() { return set(1); } + InitiatingNodeType_EutranrCellResourceCoordination const* get_id_InitiatingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_InitiatingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(InitiatingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationRequest-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ListofNRCellsinNRCoordinationResp ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI +*/ + +struct ListofNRCellsinNRCoordinationResp_elm : NRCGI +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp_elm";} + using parent_t = NRCGI; + +}; +struct ListofNRCellsinNRCoordinationResp : asn::sequenceof +{ + static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { + { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| + { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| + { ID id-ListofNRCellsinNRCoordinationResp CRITICALITY reject TYPE ListofNRCellsinNRCoordinationResp PRESENCE mandatory}, + + + ... +} +*/ + +struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} + void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(id_ListofNRCellsinNRCoordinationResp); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } + else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } + else if(equal(id_ListofNRCellsinNRCoordinationResp)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationResp);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(reject); type=1;} + void select_id_SpectrumSharingGroupID() { set(reject); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(reject); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } + DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } + SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } + SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } + ListofNRCellsinNRCoordinationResp& select_id_ListofNRCellsinNRCoordinationResp() { return set(3); } + ListofNRCellsinNRCoordinationResp const* get_id_ListofNRCellsinNRCoordinationResp() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_DataTrafficResourceIndication()); return true; + case 2: v(select_id_SpectrumSharingGroupID()); return true; + case 3: v(select_id_ListofNRCellsinNRCoordinationResp()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(DataTrafficResourceIndication)]; + char dummy2[sizeof(ListofNRCellsinNRCoordinationResp)]; + char dummy3[sizeof(SpectrumSharingGroupID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} + void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} + void select_id_ListofNRCellsinNRCoordinationResp() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RespondingNodeType-EutranrCellResourceCoordination ::= CHOICE { + respond-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + respond-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, + ... +} +*/ + +struct RespondingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "RespondingNodeType-EutranrCellResourceCoordination";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~RespondingNodeType_EutranrCellResourceCoordination() {clear();} + struct respond_eNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_eNB_t";} + using parent_t = ProtocolIE_Container; + + }; + struct respond_en_gNB_t : ProtocolIE_Container + { + static constexpr const char* name() {return "respond_en_gNB_t";} + using parent_t = ProtocolIE_Container; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } + respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(respond_eNB_t)]; + char dummy2[sizeof(respond_en_gNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EUTRANRCellResourceCoordinationResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RespondingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE RespondingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(id_RespondingNodeType_EutranrCellResourceCoordination); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RespondingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EutranrCellResourceCoordination);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RespondingNodeType_EutranrCellResourceCoordination& select_id_RespondingNodeType_EutranrCellResourceCoordination() { return set(1); } + RespondingNodeType_EutranrCellResourceCoordination const* get_id_RespondingNodeType_EutranrCellResourceCoordination() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RespondingNodeType_EutranrCellResourceCoordination()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RespondingNodeType_EutranrCellResourceCoordination)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +EUTRANRCellResourceCoordinationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationResponse-IEs}}, + ... +} +*/ + +struct EUTRANRCellResourceCoordinationResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "EUTRANRCellResourceCoordinationResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct ErrorIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(id_Old_SgNB_UE_X2AP_ID); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_Old_SgNB_UE_X2AP_ID)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_Old_SgNB_UE_X2AP_ID);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(6); } + SgNB_UE_X2AP_ID& select_id_Old_SgNB_UE_X2AP_ID() { return set(7); } + SgNB_UE_X2AP_ID const* get_id_Old_SgNB_UE_X2AP_ID() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_Old_SgNB_UE_X2AP_ID()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(optional); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_Old_SgNB_UE_X2AP_ID() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} +*/ + +struct ErrorIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ErrorIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +GNBStatusIndicationIEs X2AP-PROTOCOL-IES ::= { + { ID id-GNBOverloadInformation CRITICALITY ignore TYPE GNBOverloadInformation PRESENCE mandatory}, + ... +} +*/ + +struct GNBStatusIndicationIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(id_GNBOverloadInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GNBOverloadInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GNBOverloadInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GNBOverloadInformation& select_id_GNBOverloadInformation() { return set(1); } + GNBOverloadInformation const* get_id_GNBOverloadInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GNBOverloadInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GNBOverloadInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GNBOverloadInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +GNBStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBStatusIndicationIEs} }, + ... +} +*/ + +struct GNBStatusIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "GNBStatusIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct HandoverCancel_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, + ... +} +*/ + +struct HandoverCancel : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverCancel";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + + ... +} +*/ + +struct HandoverPreparationFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, + ... +} +*/ + +struct HandoverPreparationFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverPreparationFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityInformation ::= BIT STRING (SIZE(32)) +*/ + +struct MobilityInformation : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MobilityInformation";} + using parent_t = asn::bstring<>; + +}; + +/* +HandoverReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- | + { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to "InterRAT ping-pong" --| + { ID id-SourceCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct HandoverReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(id_HandoverReportType); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_SourceCellECGI() { set(id_SourceCellECGI); type=3;} + void select_id_FailureCellECGI() { set(id_FailureCellECGI); type=4;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=5;} + void select_id_TargetCellInUTRAN() { set(id_TargetCellInUTRAN); type=6;} + void select_id_SourceCellCRNTI() { set(id_SourceCellCRNTI); type=7;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=8;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_HandoverReportType)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_SourceCellECGI)) { type = 3; return true; } + else if(equal(id_FailureCellECGI)) { type = 4; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 5; return true; } + else if(equal(id_TargetCellInUTRAN)) { type = 6; return true; } + else if(equal(id_SourceCellCRNTI)) { type = 7; return true; } + else if(equal(id_MobilityInformation)) { type = 8; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 9; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_HandoverReportType);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SourceCellECGI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_FailureCellECGI);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_TargetCellInUTRAN);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SourceCellCRNTI);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(ignore); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_SourceCellECGI() { set(ignore); type=3;} + void select_id_FailureCellECGI() { set(ignore); type=4;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=5;} + void select_id_TargetCellInUTRAN() { set(ignore); type=6;} + void select_id_SourceCellCRNTI() { set(ignore); type=7;} + void select_id_MobilityInformation() { set(ignore); type=8;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + HandoverReportType& select_id_HandoverReportType() { return set(1); } + HandoverReportType const* get_id_HandoverReportType() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_SourceCellECGI() { return set(3); } + ECGI const* get_id_SourceCellECGI() const { return get(3); } + ECGI& select_id_FailureCellECGI() { return set(4); } + ECGI const* get_id_FailureCellECGI() const { return get(4); } + ECGI& select_id_Re_establishmentCellECGI() { return set(5); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(5); } + TargetCellInUTRAN& select_id_TargetCellInUTRAN() { return set(6); } + TargetCellInUTRAN const* get_id_TargetCellInUTRAN() const { return get(6); } + CRNTI& select_id_SourceCellCRNTI() { return set(7); } + CRNTI const* get_id_SourceCellCRNTI() const { return get(7); } + MobilityInformation& select_id_MobilityInformation() { return set(8); } + MobilityInformation const* get_id_MobilityInformation() const { return get(8); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(9); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(9); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(10); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_HandoverReportType()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_SourceCellECGI()); return true; + case 4: v(select_id_FailureCellECGI()); return true; + case 5: v(select_id_Re_establishmentCellECGI()); return true; + case 6: v(select_id_TargetCellInUTRAN()); return true; + case 7: v(select_id_SourceCellCRNTI()); return true; + case 8: v(select_id_MobilityInformation()); return true; + case 9: v(select_id_UE_RLF_Report_Container()); return true; + case 10: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(HandoverReportType)]; + char dummy5[sizeof(MobilityInformation)]; + char dummy6[sizeof(TargetCellInUTRAN)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_HandoverReportType() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_SourceCellECGI() { set(mandatory); type=3;} + void select_id_FailureCellECGI() { set(mandatory); type=4;} + void select_id_Re_establishmentCellECGI() { set(conditional); type=5;} + void select_id_TargetCellInUTRAN() { set(conditional); type=6;} + void select_id_SourceCellCRNTI() { set(optional); type=7;} + void select_id_MobilityInformation() { set(optional); type=8;} + void select_id_UE_RLF_Report_Container() { set(optional); type=9;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(conditional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(conditional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, + ... +} +*/ + +struct HandoverReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION ManagementBasedMDTallowed PRESENCE optional }| +{ ID id-ManagementBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }| +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformation_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(id_ManagementBasedMDTallowed); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(id_ManagementBasedMDTPLMNList); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=3;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ManagementBasedMDTallowed)) { type = 1; return true; } + else if(equal(id_ManagementBasedMDTPLMNList)) { type = 2; return true; } + else if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ManagementBasedMDTallowed);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ManagementBasedMDTPLMNList);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(ignore); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(ignore); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=3;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ManagementBasedMDTallowed& select_id_ManagementBasedMDTallowed() { return set(1); } + ManagementBasedMDTallowed const* get_id_ManagementBasedMDTallowed() const { return get(1); } + MDTPLMNList& select_id_ManagementBasedMDTPLMNList() { return set(2); } + MDTPLMNList const* get_id_ManagementBasedMDTPLMNList() const { return get(2); } + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(3); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ManagementBasedMDTallowed()); return true; + case 2: v(select_id_ManagementBasedMDTPLMNList()); return true; + case 3: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MDTPLMNList)]; + char dummy2[sizeof(ManagementBasedMDTallowed)]; + char dummy3[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ManagementBasedMDTallowed() { set(optional); type=1;} + void select_id_ManagementBasedMDTPLMNList() { set(optional); type=2;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=3;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation : asn::sequence<10, 0, true, 4> +{ + static constexpr const char* name() {return "UE-ContextInformation";} + using parent_t = asn::sequence<10, 0, true, 4>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_List_t : E_RABs_ToBeSetup_List + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_List_t";} + using parent_t = E_RABs_ToBeSetup_List; + + }; + e_RABs_ToBeSetup_List_t& ref_e_RABs_ToBeSetup_List() {return e_RABs_ToBeSetup_List;} + e_RABs_ToBeSetup_List_t const& ref_e_RABs_ToBeSetup_List() const {return e_RABs_ToBeSetup_List;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_List); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_List.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSeNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSeNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSeNB ::= SEQUENCE { + source-GlobalSeNB-ID GlobalENB-ID, + seNB-UE-X2AP-ID UE-X2AP-ID, + seNB-UE-X2AP-ID-Extension UE-X2AP-ID-Extension, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSeNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSeNB : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSeNB";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct source_GlobalSeNB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalSeNB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalSeNB_ID_t& ref_source_GlobalSeNB_ID() {return source_GlobalSeNB_ID;} + source_GlobalSeNB_ID_t const& ref_source_GlobalSeNB_ID() const {return source_GlobalSeNB_ID;} + struct seNB_UE_X2AP_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + seNB_UE_X2AP_ID_t& ref_seNB_UE_X2AP_ID() {return seNB_UE_X2AP_ID;} + seNB_UE_X2AP_ID_t const& ref_seNB_UE_X2AP_ID() const {return seNB_UE_X2AP_ID;} + struct seNB_UE_X2AP_ID_Extension_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "seNB_UE_X2AP_ID_Extension_t";} + using parent_t = UE_X2AP_ID_Extension; + + }; + seNB_UE_X2AP_ID_Extension_t& ref_seNB_UE_X2AP_ID_Extension() {return seNB_UE_X2AP_ID_Extension;} + seNB_UE_X2AP_ID_Extension_t const& ref_seNB_UE_X2AP_ID_Extension() const {return seNB_UE_X2AP_ID_Extension;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSeNB_ID); + v(seNB_UE_X2AP_ID); + v(seNB_UE_X2AP_ID_Extension); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSeNB_ID.clear(); + seNB_UE_X2AP_ID.clear(); + seNB_UE_X2AP_ID_Extension.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSeNB_ID_t source_GlobalSeNB_ID; + seNB_UE_X2AP_ID_t seNB_UE_X2AP_ID; + seNB_UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtWT-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtWT_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtWT ::= SEQUENCE { + wTID WTID, + wT-UE-XwAP-ID WT-UE-XwAP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtWT-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtWT : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtWT";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct wTID_t : WTID + { + static constexpr const char* name() {return "wTID_t";} + using parent_t = WTID; + + }; + wTID_t& ref_wTID() {return wTID;} + wTID_t const& ref_wTID() const {return wTID;} + struct wT_UE_XwAP_ID_t : WT_UE_XwAP_ID + { + static constexpr const char* name() {return "wT_UE_XwAP_ID_t";} + using parent_t = WT_UE_XwAP_ID; + + }; + wT_UE_XwAP_ID_t& ref_wT_UE_XwAP_ID() {return wT_UE_XwAP_ID;} + wT_UE_XwAP_ID_t const& ref_wT_UE_XwAP_ID() const {return wT_UE_XwAP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wTID); + v(wT_UE_XwAP_ID); + v(iE_Extensions); + + }; + void clear() + { + wTID.clear(); + wT_UE_XwAP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + wTID_t wTID; + wT_UE_XwAP_ID_t wT_UE_XwAP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextReferenceAtSgNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextReferenceAtSgNB_ItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextReferenceAtSgNB ::= SEQUENCE { + source-GlobalSgNB-ID GlobalGNB-ID, + sgNB-UE-X2AP-ID SgNB-UE-X2AP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSgNB-ItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextReferenceAtSgNB : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UE-ContextReferenceAtSgNB";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct source_GlobalSgNB_ID_t : GlobalGNB_ID + { + static constexpr const char* name() {return "source_GlobalSgNB_ID_t";} + using parent_t = GlobalGNB_ID; + + }; + source_GlobalSgNB_ID_t& ref_source_GlobalSgNB_ID() {return source_GlobalSgNB_ID;} + source_GlobalSgNB_ID_t const& ref_source_GlobalSgNB_ID() const {return source_GlobalSgNB_ID;} + struct sgNB_UE_X2AP_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_UE_X2AP_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + + }; + sgNB_UE_X2AP_ID_t& ref_sgNB_UE_X2AP_ID() {return sgNB_UE_X2AP_ID;} + sgNB_UE_X2AP_ID_t const& ref_sgNB_UE_X2AP_ID() const {return sgNB_UE_X2AP_ID;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalSgNB_ID); + v(sgNB_UE_X2AP_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalSgNB_ID.clear(); + sgNB_UE_X2AP_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalSgNB_ID_t source_GlobalSgNB_ID; + sgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory}| + { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-UE-HistoryInformationFromTheUE CRITICALITY ignore TYPE UE-HistoryInformationFromTheUE PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtSeNB CRITICALITY ignore TYPE UE-ContextReferenceAtSeNB PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-UE-ContextReferenceAtWT CRITICALITY ignore TYPE UE-ContextReferenceAtWT PRESENCE optional}| + { ID id-NRUESecurityCapabilities CRITICALITY ignore TYPE NRUESecurityCapabilities PRESENCE optional}| + { ID id-UE-ContextReferenceAtSgNB CRITICALITY ignore TYPE UE-ContextReferenceAtSgNB PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct HandoverRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_Cause() { set(id_Cause); type=2;} + void select_id_TargetCell_ID() { set(id_TargetCell_ID); type=3;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=4;} + void select_id_UE_ContextInformation() { set(id_UE_ContextInformation); type=5;} + void select_id_UE_HistoryInformation() { set(id_UE_HistoryInformation); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=9;} + void select_id_MobilityInformation() { set(id_MobilityInformation); type=10;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(id_UE_HistoryInformationFromTheUE); type=12;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=13;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(id_UE_ContextReferenceAtSeNB); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=16;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(id_UE_ContextReferenceAtWT); type=18;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(id_UE_ContextReferenceAtSgNB); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=22;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_Cause)) { type = 2; return true; } + else if(equal(id_TargetCell_ID)) { type = 3; return true; } + else if(equal(id_GUMMEI_ID)) { type = 4; return true; } + else if(equal(id_UE_ContextInformation)) { type = 5; return true; } + else if(equal(id_UE_HistoryInformation)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 9; return true; } + else if(equal(id_MobilityInformation)) { type = 10; return true; } + else if(equal(id_Masked_IMEISV)) { type = 11; return true; } + else if(equal(id_UE_HistoryInformationFromTheUE)) { type = 12; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 13; return true; } + else if(equal(id_ProSeAuthorized)) { type = 14; return true; } + else if(equal(id_UE_ContextReferenceAtSeNB)) { type = 15; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 16; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 17; return true; } + else if(equal(id_UE_ContextReferenceAtWT)) { type = 18; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 19; return true; } + else if(equal(id_UE_ContextReferenceAtSgNB)) { type = 20; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 21; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_TargetCell_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextInformation);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_HistoryInformation);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_UE_HistoryInformationFromTheUE);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSeNB);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtWT);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSgNB);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_Cause() { set(ignore); type=2;} + void select_id_TargetCell_ID() { set(reject); type=3;} + void select_id_GUMMEI_ID() { set(reject); type=4;} + void select_id_UE_ContextInformation() { set(reject); type=5;} + void select_id_UE_HistoryInformation() { set(ignore); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_CSGMembershipStatus() { set(reject); type=9;} + void select_id_MobilityInformation() { set(ignore); type=10;} + void select_id_Masked_IMEISV() { set(ignore); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(ignore); type=12;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=13;} + void select_id_ProSeAuthorized() { set(ignore); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(ignore); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=16;} + void select_id_V2XServicesAuthorized() { set(ignore); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(ignore); type=18;} + void select_id_NRUESecurityCapabilities() { set(ignore); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(ignore); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=22;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(ignore)) { type = 18; return true; } + else if(equal(ignore)) { type = 19; return true; } + else if(equal(ignore)) { type = 20; return true; } + else if(equal(ignore)) { type = 21; return true; } + else if(equal(ignore)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(ignore);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(ignore);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(ignore);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(ignore);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(ignore);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + Cause& select_id_Cause() { return set(2); } + Cause const* get_id_Cause() const { return get(2); } + ECGI& select_id_TargetCell_ID() { return set(3); } + ECGI const* get_id_TargetCell_ID() const { return get(3); } + GUMMEI& select_id_GUMMEI_ID() { return set(4); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(4); } + UE_ContextInformation& select_id_UE_ContextInformation() { return set(5); } + UE_ContextInformation const* get_id_UE_ContextInformation() const { return get(5); } + UE_HistoryInformation& select_id_UE_HistoryInformation() { return set(6); } + UE_HistoryInformation const* get_id_UE_HistoryInformation() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(9); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(9); } + MobilityInformation& select_id_MobilityInformation() { return set(10); } + MobilityInformation const* get_id_MobilityInformation() const { return get(10); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(11); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(11); } + UE_HistoryInformationFromTheUE& select_id_UE_HistoryInformationFromTheUE() { return set(12); } + UE_HistoryInformationFromTheUE const* get_id_UE_HistoryInformationFromTheUE() const { return get(12); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(13); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(13); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(14); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(14); } + UE_ContextReferenceAtSeNB& select_id_UE_ContextReferenceAtSeNB() { return set(15); } + UE_ContextReferenceAtSeNB const* get_id_UE_ContextReferenceAtSeNB() const { return get(15); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(16); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(16); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(17); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(17); } + UE_ContextReferenceAtWT& select_id_UE_ContextReferenceAtWT() { return set(18); } + UE_ContextReferenceAtWT const* get_id_UE_ContextReferenceAtWT() const { return get(18); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(19); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(19); } + UE_ContextReferenceAtSgNB& select_id_UE_ContextReferenceAtSgNB() { return set(20); } + UE_ContextReferenceAtSgNB const* get_id_UE_ContextReferenceAtSgNB() const { return get(20); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(21); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(21); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(22); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(22); } + bool is_unknown() const { return type == 23; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_Cause()); return true; + case 3: v(select_id_TargetCell_ID()); return true; + case 4: v(select_id_GUMMEI_ID()); return true; + case 5: v(select_id_UE_ContextInformation()); return true; + case 6: v(select_id_UE_HistoryInformation()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_CSGMembershipStatus()); return true; + case 10: v(select_id_MobilityInformation()); return true; + case 11: v(select_id_Masked_IMEISV()); return true; + case 12: v(select_id_UE_HistoryInformationFromTheUE()); return true; + case 13: v(select_id_ExpectedUEBehaviour()); return true; + case 14: v(select_id_ProSeAuthorized()); return true; + case 15: v(select_id_UE_ContextReferenceAtSeNB()); return true; + case 16: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 17: v(select_id_V2XServicesAuthorized()); return true; + case 18: v(select_id_UE_ContextReferenceAtWT()); return true; + case 19: v(select_id_NRUESecurityCapabilities()); return true; + case 20: v(select_id_UE_ContextReferenceAtSgNB()); return true; + case 21: v(select_id_AerialUEsubscriptionInformation()); return true; + case 22: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 23: if(type != 23) {clear(); asn::base::set();} type = 23; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CSGMembershipStatus)]; + char dummy3[sizeof(Cause)]; + char dummy4[sizeof(ECGI)]; + char dummy5[sizeof(ExpectedUEBehaviour)]; + char dummy6[sizeof(GUMMEI)]; + char dummy7[sizeof(Masked_IMEISV)]; + char dummy8[sizeof(MobilityInformation)]; + char dummy9[sizeof(NRUESecurityCapabilities)]; + char dummy10[sizeof(ProSeAuthorized)]; + char dummy11[sizeof(SRVCCOperationPossible)]; + char dummy12[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy13[sizeof(TraceActivation)]; + char dummy14[sizeof(UE_ContextInformation)]; + char dummy15[sizeof(UE_ContextReferenceAtSeNB)]; + char dummy16[sizeof(UE_ContextReferenceAtSgNB)]; + char dummy17[sizeof(UE_ContextReferenceAtWT)]; + char dummy18[sizeof(UE_HistoryInformation)]; + char dummy19[sizeof(UE_HistoryInformationFromTheUE)]; + char dummy20[sizeof(UE_X2AP_ID)]; + char dummy21[sizeof(UE_X2AP_ID_Extension)]; + char dummy22[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 23; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_Cause() { set(mandatory); type=2;} + void select_id_TargetCell_ID() { set(mandatory); type=3;} + void select_id_GUMMEI_ID() { set(mandatory); type=4;} + void select_id_UE_ContextInformation() { set(mandatory); type=5;} + void select_id_UE_HistoryInformation() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_CSGMembershipStatus() { set(optional); type=9;} + void select_id_MobilityInformation() { set(optional); type=10;} + void select_id_Masked_IMEISV() { set(optional); type=11;} + void select_id_UE_HistoryInformationFromTheUE() { set(optional); type=12;} + void select_id_ExpectedUEBehaviour() { set(optional); type=13;} + void select_id_ProSeAuthorized() { set(optional); type=14;} + void select_id_UE_ContextReferenceAtSeNB() { set(optional); type=15;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=16;} + void select_id_V2XServicesAuthorized() { set(optional); type=17;} + void select_id_UE_ContextReferenceAtWT() { set(optional); type=18;} + void select_id_NRUESecurityCapabilities() { set(optional); type=19;} + void select_id_UE_ContextReferenceAtSgNB() { set(optional); type=20;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=21;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=22;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(optional)) { type = 16; return true; } + else if(equal(optional)) { type = 17; return true; } + else if(equal(optional)) { type = 18; return true; } + else if(equal(optional)) { type = 19; return true; } + else if(equal(optional)) { type = 20; return true; } + else if(equal(optional)) { type = 21; return true; } + else if(equal(optional)) { type = 22; return true; } + else { type = 23; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(optional);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(optional);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(optional);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(optional);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(optional);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(optional);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(optional);} return false; + case 23: type = 23; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, + ... +} +*/ + +struct HandoverRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-WT-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}, + ... +} +*/ + +struct HandoverRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_List() { set(id_E_RABs_Admitted_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(id_TargeteNBtoSource_eNBTransparentContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(id_WT_UE_ContextKeptIndicator); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_TargeteNBtoSource_eNBTransparentContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_WT_UE_ContextKeptIndicator)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_TargeteNBtoSource_eNBTransparentContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_WT_UE_ContextKeptIndicator);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(ignore); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_List& select_id_E_RABs_Admitted_List() { return set(3); } + E_RABs_Admitted_List const* get_id_E_RABs_Admitted_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + TargeteNBtoSource_eNBTransparentContainer& select_id_TargeteNBtoSource_eNBTransparentContainer() { return set(5); } + TargeteNBtoSource_eNBTransparentContainer const* get_id_TargeteNBtoSource_eNBTransparentContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(7); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(10); } + UE_ContextKeptIndicator& select_id_WT_UE_ContextKeptIndicator() { return set(11); } + UE_ContextKeptIndicator const* get_id_WT_UE_ContextKeptIndicator() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_TargeteNBtoSource_eNBTransparentContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_UE_ContextKeptIndicator()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_WT_UE_ContextKeptIndicator()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_List)]; + char dummy4[sizeof(TargeteNBtoSource_eNBTransparentContainer)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_WT_UE_ContextKeptIndicator() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, + ... +} +*/ + +struct HandoverRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "HandoverRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +LoadInformation-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , + ... +} +*/ + +struct LoadInformation_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(id_CellInformation); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CellInformation)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CellInformation_List& select_id_CellInformation() { return set(1); } + CellInformation_List const* get_id_CellInformation() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CellInformation()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellInformation_List)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CellInformation() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +LoadInformation ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, + ... +} +*/ + +struct LoadInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "LoadInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MeasurementInitiationResult_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-Item ::= SEQUENCE { + cell-ID ECGI, + measurementFailureCause-List MeasurementFailureCause-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeasurementInitiationResult_Item : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "MeasurementInitiationResult-Item";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cell_ID_t : ECGI + { + static constexpr const char* name() {return "cell_ID_t";} + using parent_t = ECGI; + + }; + cell_ID_t& ref_cell_ID() {return cell_ID;} + cell_ID_t const& ref_cell_ID() const {return cell_ID;} + struct measurementFailureCause_List_t : MeasurementFailureCause_List + { + static constexpr const char* name() {return "measurementFailureCause_List_t";} + using parent_t = MeasurementFailureCause_List; + static constexpr bool optional = true; + + }; + measurementFailureCause_List_t& set_measurementFailureCause_List() { measurementFailureCause_List.setpresent(true); return measurementFailureCause_List;} + measurementFailureCause_List_t const* get_measurementFailureCause_List() const {return measurementFailureCause_List.is_valid() ? &measurementFailureCause_List : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_ID); + v(measurementFailureCause_List); + v(iE_Extensions); + + }; + void clear() + { + cell_ID.clear(); + measurementFailureCause_List.clear(); + iE_Extensions.clear(); + + }; + private: + cell_ID_t cell_ID; + measurementFailureCause_List_t measurementFailureCause_List; + iE_Extensions_t iE_Extensions; + +}; +/* +MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE MeasurementInitiationResult-Item PRESENCE mandatory} +} +*/ + +struct MeasurementInitiationResult_ItemIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(id_MeasurementInitiationResult_Item); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeasurementInitiationResult_Item)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_Item);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + MeasurementInitiationResult_Item& select_id_MeasurementInitiationResult_Item() { return set(1); } + MeasurementInitiationResult_Item const* get_id_MeasurementInitiationResult_Item() const { return get(1); } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeasurementInitiationResult_Item()); return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(MeasurementInitiationResult_Item)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + void clear() {type = 0;} + void select_id_MeasurementInitiationResult_Item() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {MeasurementInitiationResult-ItemIEs} } +*/ + +struct MeasurementInitiationResult_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "MeasurementInitiationResult_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct MeasurementInitiationResult_List : asn::sequenceof +{ + static constexpr const char* name() {return "MeasurementInitiationResult-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(ECGI)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, + ... +} +*/ + +struct MobilityChangeAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct MobilityChangeFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(id_ENB2_Mobility_Parameters_Modification_Range); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_ENB2_Mobility_Parameters_Modification_Range)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Mobility_Parameters_Modification_Range);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(ignore); type=1;} + void select_id_ENB2_Cell_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MobilityParametersModificationRange& select_id_ENB2_Mobility_Parameters_Modification_Range() { return set(4); } + MobilityParametersModificationRange const* get_id_ENB2_Mobility_Parameters_Modification_Range() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_ENB2_Mobility_Parameters_Modification_Range()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ECGI)]; + char dummy4[sizeof(MobilityParametersModificationRange)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, + ... +} +*/ + +struct MobilityChangeFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| + { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory}| + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct MobilityChangeRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} + void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(id_ENB1_Mobility_Parameters); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(id_ENB2_Proposed_Mobility_Parameters); type=4;} + void select_id_Cause() { set(id_Cause); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } + else if(equal(id_ENB1_Mobility_Parameters)) { type = 3; return true; } + else if(equal(id_ENB2_Proposed_Mobility_Parameters)) { type = 4; return true; } + else if(equal(id_Cause)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ENB1_Mobility_Parameters);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Proposed_Mobility_Parameters);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(reject); type=1;} + void select_id_ENB2_Cell_ID() { set(reject); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(ignore); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(reject); type=4;} + void select_id_Cause() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ENB1_Cell_ID() { return set(1); } + ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } + ECGI& select_id_ENB2_Cell_ID() { return set(2); } + ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } + MobilityParametersInformation& select_id_ENB1_Mobility_Parameters() { return set(3); } + MobilityParametersInformation const* get_id_ENB1_Mobility_Parameters() const { return get(3); } + MobilityParametersInformation& select_id_ENB2_Proposed_Mobility_Parameters() { return set(4); } + MobilityParametersInformation const* get_id_ENB2_Proposed_Mobility_Parameters() const { return get(4); } + Cause& select_id_Cause() { return set(5); } + Cause const* get_id_Cause() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Cell_ID()); return true; + case 2: v(select_id_ENB2_Cell_ID()); return true; + case 3: v(select_id_ENB1_Mobility_Parameters()); return true; + case 4: v(select_id_ENB2_Proposed_Mobility_Parameters()); return true; + case 5: v(select_id_Cause()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(MobilityParametersInformation)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} + void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} + void select_id_ENB1_Mobility_Parameters() { set(optional); type=3;} + void select_id_ENB2_Proposed_Mobility_Parameters() { set(mandatory); type=4;} + void select_id_Cause() { set(mandatory); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +MobilityChangeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, + ... +} +*/ + +struct MobilityChangeRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityChangeRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +PartialSuccessIndicator ::= ENUMERATED { + partial-success-allowed, +... +} +*/ + +struct PartialSuccessIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "PartialSuccessIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + partial_success_allowed + } index_t; + +}; + +/* +PrivateMessage-IEs X2AP-PRIVATE-IES ::= { + ... +} +*/ + +struct PrivateMessage_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PRIVATE_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} +*/ + +struct PrivateMessage : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "PrivateMessage";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct privateIEs_t : PrivateIE_Container + { + static constexpr const char* name() {return "privateIEs_t";} + using parent_t = PrivateIE_Container; + + }; + privateIEs_t& ref_privateIEs() {return privateIEs;} + privateIEs_t const& ref_privateIEs() const {return privateIEs;} + template void decode(V& v) + { + v(privateIEs); + + }; + template void encode(V& v) const + { + v(privateIEs); + + }; + void clear() + { + privateIEs.clear(); + + }; + private: + privateIEs_t privateIEs; + +}; +/* +RLFIndication-IEs X2AP-PROTOCOL-IES ::= { + { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| + { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| + { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| + { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| + { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE RRCConnSetupIndicator PRESENCE optional}| + { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE RRCConnReestabIndicator PRESENCE optional}| + { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, + ... +} +*/ + +struct RLFIndication_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=1;} + void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=2;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=5;} + void select_id_RRCConnSetupIndicator() { set(id_RRCConnSetupIndicator); type=6;} + void select_id_RRCConnReestabIndicator() { set(id_RRCConnReestabIndicator); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_FailureCellPCI)) { type = 1; return true; } + else if(equal(id_Re_establishmentCellECGI)) { type = 2; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_UE_RLF_Report_Container)) { type = 5; return true; } + else if(equal(id_RRCConnSetupIndicator)) { type = 6; return true; } + else if(equal(id_RRCConnReestabIndicator)) { type = 7; return true; } + else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_RRCConnSetupIndicator);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_RRCConnReestabIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(ignore); type=1;} + void select_id_Re_establishmentCellECGI() { set(ignore); type=2;} + void select_id_FailureCellCRNTI() { set(ignore); type=3;} + void select_id_ShortMAC_I() { set(ignore); type=4;} + void select_id_UE_RLF_Report_Container() { set(ignore); type=5;} + void select_id_RRCConnSetupIndicator() { set(reject); type=6;} + void select_id_RRCConnReestabIndicator() { set(ignore); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + PCI& select_id_FailureCellPCI() { return set(1); } + PCI const* get_id_FailureCellPCI() const { return get(1); } + ECGI& select_id_Re_establishmentCellECGI() { return set(2); } + ECGI const* get_id_Re_establishmentCellECGI() const { return get(2); } + CRNTI& select_id_FailureCellCRNTI() { return set(3); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(5); } + UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(5); } + RRCConnSetupIndicator& select_id_RRCConnSetupIndicator() { return set(6); } + RRCConnSetupIndicator const* get_id_RRCConnSetupIndicator() const { return get(6); } + RRCConnReestabIndicator& select_id_RRCConnReestabIndicator() { return set(7); } + RRCConnReestabIndicator const* get_id_RRCConnReestabIndicator() const { return get(7); } + UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(8); } + UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_FailureCellPCI()); return true; + case 2: v(select_id_Re_establishmentCellECGI()); return true; + case 3: v(select_id_FailureCellCRNTI()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_UE_RLF_Report_Container()); return true; + case 6: v(select_id_RRCConnSetupIndicator()); return true; + case 7: v(select_id_RRCConnReestabIndicator()); return true; + case 8: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(ECGI)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(RRCConnReestabIndicator)]; + char dummy5[sizeof(RRCConnSetupIndicator)]; + char dummy6[sizeof(ShortMAC_I)]; + char dummy7[sizeof(UE_RLF_Report_Container)]; + char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_FailureCellPCI() { set(mandatory); type=1;} + void select_id_Re_establishmentCellECGI() { set(mandatory); type=2;} + void select_id_FailureCellCRNTI() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(optional); type=4;} + void select_id_UE_RLF_Report_Container() { set(optional); type=5;} + void select_id_RRCConnSetupIndicator() { set(optional); type=6;} + void select_id_RRCConnReestabIndicator() { set(optional); type=7;} + void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RLFIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, + ... +} +*/ + +struct RLFIndication : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RLFIndication";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RNL-Header-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RNL_Header_Item_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RNL-Header ::= SEQUENCE { + source-GlobalENB-ID GlobalENB-ID, + target-GlobalENB-ID GlobalENB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RNL-Header-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RNL_Header : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "RNL-Header";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct source_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "source_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + + }; + source_GlobalENB_ID_t& ref_source_GlobalENB_ID() {return source_GlobalENB_ID;} + source_GlobalENB_ID_t const& ref_source_GlobalENB_ID() const {return source_GlobalENB_ID;} + struct target_GlobalENB_ID_t : GlobalENB_ID + { + static constexpr const char* name() {return "target_GlobalENB_ID_t";} + using parent_t = GlobalENB_ID; + static constexpr bool optional = true; + + }; + target_GlobalENB_ID_t& set_target_GlobalENB_ID() { target_GlobalENB_ID.setpresent(true); return target_GlobalENB_ID;} + target_GlobalENB_ID_t const* get_target_GlobalENB_ID() const {return target_GlobalENB_ID.is_valid() ? &target_GlobalENB_ID : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(source_GlobalENB_ID); + v(target_GlobalENB_ID); + v(iE_Extensions); + + }; + void clear() + { + source_GlobalENB_ID.clear(); + target_GlobalENB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + source_GlobalENB_ID_t source_GlobalENB_ID; + target_GlobalENB_ID_t target_GlobalENB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +RRCTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SplitSRB CRITICALITY reject TYPE SplitSRB PRESENCE optional}| + { ID id-UENRMeasurement CRITICALITY reject TYPE UENRMeasurement PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct RRCTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SplitSRB() { set(id_SplitSRB); type=3;} + void select_id_UENRMeasurement() { set(id_UENRMeasurement); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SplitSRB)) { type = 3; return true; } + else if(equal(id_UENRMeasurement)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SplitSRB);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_UENRMeasurement);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SplitSRB() { set(reject); type=3;} + void select_id_UENRMeasurement() { set(reject); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SplitSRB& select_id_SplitSRB() { return set(3); } + SplitSRB const* get_id_SplitSRB() const { return get(3); } + UENRMeasurement& select_id_UENRMeasurement() { return set(4); } + UENRMeasurement const* get_id_UENRMeasurement() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SplitSRB()); return true; + case 4: v(select_id_UENRMeasurement()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SgNB_UE_X2AP_ID)]; + char dummy2[sizeof(SplitSRB)]; + char dummy3[sizeof(UENRMeasurement)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SplitSRB() { set(optional); type=3;} + void select_id_UENRMeasurement() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RRCTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RRCTransfer-IEs}}, + ... +} +*/ + +struct RRCTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RRCTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ReportingPeriodicity ::= ENUMERATED { + one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} +*/ + +struct ReportingPeriodicity : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicity";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_thousand_ms + ,two_thousand_ms + ,five_thousand_ms + ,ten_thousand_ms + } index_t; + +}; + +/* +ResetRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} +*/ + +struct ResetRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, + ... +} +*/ + +struct ResetRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResetResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +*/ + +struct ResetResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(ignore); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_CriticalityDiagnostics()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_CriticalityDiagnostics() { set(optional); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResetResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, + ... +} +*/ + +struct ResetResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResetResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE CompleteFailureCauseInformation-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(id_CompleteFailureCauseInformation_List); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_CompleteFailureCauseInformation_List)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_List);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + CompleteFailureCauseInformation_List& select_id_CompleteFailureCauseInformation_List() { return set(5); } + CompleteFailureCauseInformation_List const* get_id_CompleteFailureCauseInformation_List() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_CompleteFailureCauseInformation_List()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CompleteFailureCauseInformation_List)]; + char dummy3[sizeof(CriticalityDiagnostics)]; + char dummy4[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_CompleteFailureCauseInformation_List() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, + ... +} +*/ + +struct ResourceStatusFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”, “Partial stop” or to “Add”-- + { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory}| + { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional}| + { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory}| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}| + { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE PartialSuccessIndicator PRESENCE optional}| + { ID id-ReportingPeriodicityRSRPMR CRITICALITY ignore TYPE ReportingPeriodicityRSRPMR PRESENCE optional}| + { ID id-ReportingPeriodicityCSIR CRITICALITY ignore TYPE ReportingPeriodicityCSIR PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_Registration_Request() { set(id_Registration_Request); type=3;} + void select_id_ReportCharacteristics() { set(id_ReportCharacteristics); type=4;} + void select_id_CellToReport() { set(id_CellToReport); type=5;} + void select_id_ReportingPeriodicity() { set(id_ReportingPeriodicity); type=6;} + void select_id_PartialSuccessIndicator() { set(id_PartialSuccessIndicator); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(id_ReportingPeriodicityRSRPMR); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(id_ReportingPeriodicityCSIR); type=9;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_Registration_Request)) { type = 3; return true; } + else if(equal(id_ReportCharacteristics)) { type = 4; return true; } + else if(equal(id_CellToReport)) { type = 5; return true; } + else if(equal(id_ReportingPeriodicity)) { type = 6; return true; } + else if(equal(id_PartialSuccessIndicator)) { type = 7; return true; } + else if(equal(id_ReportingPeriodicityRSRPMR)) { type = 8; return true; } + else if(equal(id_ReportingPeriodicityCSIR)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Registration_Request);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ReportCharacteristics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CellToReport);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_ReportingPeriodicity);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_PartialSuccessIndicator);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_ReportingPeriodicityRSRPMR);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ReportingPeriodicityCSIR);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(ignore); type=2;} + void select_id_Registration_Request() { set(reject); type=3;} + void select_id_ReportCharacteristics() { set(reject); type=4;} + void select_id_CellToReport() { set(ignore); type=5;} + void select_id_ReportingPeriodicity() { set(ignore); type=6;} + void select_id_PartialSuccessIndicator() { set(ignore); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(ignore); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(ignore); type=9;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + Registration_Request& select_id_Registration_Request() { return set(3); } + Registration_Request const* get_id_Registration_Request() const { return get(3); } + ReportCharacteristics& select_id_ReportCharacteristics() { return set(4); } + ReportCharacteristics const* get_id_ReportCharacteristics() const { return get(4); } + CellToReport_List& select_id_CellToReport() { return set(5); } + CellToReport_List const* get_id_CellToReport() const { return get(5); } + ReportingPeriodicity& select_id_ReportingPeriodicity() { return set(6); } + ReportingPeriodicity const* get_id_ReportingPeriodicity() const { return get(6); } + PartialSuccessIndicator& select_id_PartialSuccessIndicator() { return set(7); } + PartialSuccessIndicator const* get_id_PartialSuccessIndicator() const { return get(7); } + ReportingPeriodicityRSRPMR& select_id_ReportingPeriodicityRSRPMR() { return set(8); } + ReportingPeriodicityRSRPMR const* get_id_ReportingPeriodicityRSRPMR() const { return get(8); } + ReportingPeriodicityCSIR& select_id_ReportingPeriodicityCSIR() { return set(9); } + ReportingPeriodicityCSIR const* get_id_ReportingPeriodicityCSIR() const { return get(9); } + bool is_unknown() const { return type == 10; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_Registration_Request()); return true; + case 4: v(select_id_ReportCharacteristics()); return true; + case 5: v(select_id_CellToReport()); return true; + case 6: v(select_id_ReportingPeriodicity()); return true; + case 7: v(select_id_PartialSuccessIndicator()); return true; + case 8: v(select_id_ReportingPeriodicityRSRPMR()); return true; + case 9: v(select_id_ReportingPeriodicityCSIR()); return true; + case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellToReport_List)]; + char dummy2[sizeof(Measurement_ID)]; + char dummy3[sizeof(PartialSuccessIndicator)]; + char dummy4[sizeof(Registration_Request)]; + char dummy5[sizeof(ReportCharacteristics)]; + char dummy6[sizeof(ReportingPeriodicity)]; + char dummy7[sizeof(ReportingPeriodicityCSIR)]; + char dummy8[sizeof(ReportingPeriodicityRSRPMR)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 10; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(conditional); type=2;} + void select_id_Registration_Request() { set(mandatory); type=3;} + void select_id_ReportCharacteristics() { set(optional); type=4;} + void select_id_CellToReport() { set(mandatory); type=5;} + void select_id_ReportingPeriodicity() { set(optional); type=6;} + void select_id_PartialSuccessIndicator() { set(optional); type=7;} + void select_id_ReportingPeriodicityRSRPMR() { set(optional); type=8;} + void select_id_ReportingPeriodicityCSIR() { set(optional); type=9;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else { type = 10; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, + ... +} +*/ + +struct ResourceStatusRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE MeasurementInitiationResult-List PRESENCE optional}, + ... +} +*/ + +struct ResourceStatusResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeasurementInitiationResult_List() { set(id_MeasurementInitiationResult_List); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeasurementInitiationResult_List)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_List);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeasurementInitiationResult_List() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + MeasurementInitiationResult_List& select_id_MeasurementInitiationResult_List() { return set(4); } + MeasurementInitiationResult_List const* get_id_MeasurementInitiationResult_List() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeasurementInitiationResult_List()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeasurementInitiationResult_List)]; + char dummy3[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeasurementInitiationResult_List() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, + ... +} +*/ + +struct ResourceStatusResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { + { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, + ... +} +*/ + +struct ResourceStatusUpdate_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} + void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} + void select_id_CellMeasurementResult() { set(id_CellMeasurementResult); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } + else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } + else if(equal(id_CellMeasurementResult)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CellMeasurementResult);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(reject); type=1;} + void select_id_ENB2_Measurement_ID() { set(reject); type=2;} + void select_id_CellMeasurementResult() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } + Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } + Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } + Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } + CellMeasurementResult_List& select_id_CellMeasurementResult() { return set(3); } + CellMeasurementResult_List const* get_id_CellMeasurementResult() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_ENB1_Measurement_ID()); return true; + case 2: v(select_id_ENB2_Measurement_ID()); return true; + case 3: v(select_id_CellMeasurementResult()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellMeasurementResult_List)]; + char dummy2[sizeof(Measurement_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} + void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} + void select_id_CellMeasurementResult() { set(mandatory); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, + ... +} +*/ + +struct ResourceStatusUpdate : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ResourceStatusUpdate";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSeNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp_RejectByMeNBItem : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer + { + static constexpr const char* name() {return "meNBtoSeNBContainer_t";} + using parent_t = MeNBtoSeNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} + meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(meNBtoSeNBContainer); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + meNBtoSeNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + meNBtoSeNBContainer_t meNBtoSeNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSeNBReconfComp ::= CHOICE { + success ResponseInformationSeNBReconfComp-SuccessItem, + reject-by-MeNB ResponseInformationSeNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSeNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSeNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSeNBReconfComp() {clear();} + struct success_t : ResponseInformationSeNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_t";} + using parent_t = ResponseInformationSeNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_t : ResponseInformationSeNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_t";} + using parent_t = ResponseInformationSeNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_t& select_success() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_t const* get_success() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_t& select_reject_by_MeNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_t const* get_reject_by_MeNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_t)]; + char dummy2[sizeof(reject_by_MeNB_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ResponseInformationSgNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-SuccessItem ::= SEQUENCE { + meNBtoSgNBContainer MeNBtoSgNBContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-SuccessItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-SuccessItem";} + using parent_t = asn::sequence<2, 0, true, 2>; + struct meNBtoSgNBContainer_t : MeNBtoSgNBContainer + { + static constexpr const char* name() {return "meNBtoSgNBContainer_t";} + using parent_t = MeNBtoSgNBContainer; + static constexpr bool optional = true; + + }; + meNBtoSgNBContainer_t& set_meNBtoSgNBContainer() { meNBtoSgNBContainer.setpresent(true); return meNBtoSgNBContainer;} + meNBtoSgNBContainer_t const* get_meNBtoSgNBContainer() const {return meNBtoSgNBContainer.is_valid() ? &meNBtoSgNBContainer : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNBtoSgNBContainer); + v(iE_Extensions); + + }; + void clear() + { + meNBtoSgNBContainer.clear(); + iE_Extensions.clear(); + + }; + private: + meNBtoSgNBContainer_t meNBtoSgNBContainer; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +ResponseInformationSgNBReconfComp-RejectByMeNBItem ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp_RejectByMeNBItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-RejectByMeNBItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cause_t : Cause + { + static constexpr const char* name() {return "cause_t";} + using parent_t = Cause; + + }; + cause_t& ref_cause() {return cause;} + cause_t const& ref_cause() const {return cause;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(cause); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cause); + v(iE_Extensions); + + }; + void clear() + { + cause.clear(); + iE_Extensions.clear(); + + }; + private: + cause_t cause; + iE_Extensions_t iE_Extensions; + +}; +/* +ResponseInformationSgNBReconfComp ::= CHOICE { + success-SgNBReconfComp ResponseInformationSgNBReconfComp-SuccessItem, + reject-by-MeNB-SgNBReconfComp ResponseInformationSgNBReconfComp-RejectByMeNBItem, + ... +} +*/ + +struct ResponseInformationSgNBReconfComp : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResponseInformationSgNBReconfComp";} + using parent_t = asn::choice<2, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 3;} + void set_unknown() { set_index(3); } + ~ResponseInformationSgNBReconfComp() {clear();} + struct success_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_SuccessItem + { + static constexpr const char* name() {return "success_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_SuccessItem; + + }; + struct reject_by_MeNB_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_RejectByMeNBItem + { + static constexpr const char* name() {return "reject_by_MeNB_SgNBReconfComp_t";} + using parent_t = ResponseInformationSgNBReconfComp_RejectByMeNBItem; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + success_SgNBReconfComp_t& select_success_SgNBReconfComp() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + success_SgNBReconfComp_t const* get_success_SgNBReconfComp() const { if(get_index() == 1) { return &var.as();} return nullptr; } + reject_by_MeNB_SgNBReconfComp_t& select_reject_by_MeNB_SgNBReconfComp() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + reject_by_MeNB_SgNBReconfComp_t const* get_reject_by_MeNB_SgNBReconfComp() const { if(get_index() == 2) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(success_SgNBReconfComp_t)]; + char dummy2[sizeof(reject_by_MeNB_SgNBReconfComp_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +RetrieveUEContextFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, + ... +} +*/ + +struct RetrieveUEContextFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +RetrieveUEContextRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-resumeID CRITICALITY reject TYPE ResumeID PRESENCE mandatory}| + { ID id-ShortMAC-I CRITICALITY reject TYPE ShortMAC-I PRESENCE mandatory}| + { ID id-NewEUTRANCellIdentifier CRITICALITY reject TYPE EUTRANCellIdentifier PRESENCE mandatory}| + {ID id-FailureCellCRNTI CRITICALITY reject TYPE CRNTI PRESENCE optional}| + {ID id-FailureCellPCI CRITICALITY reject TYPE PCI PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=2;} + void select_id_resumeID() { set(id_resumeID); type=3;} + void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(id_NewEUTRANCellIdentifier); type=5;} + void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=6;} + void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_resumeID)) { type = 3; return true; } + else if(equal(id_ShortMAC_I)) { type = 4; return true; } + else if(equal(id_NewEUTRANCellIdentifier)) { type = 5; return true; } + else if(equal(id_FailureCellCRNTI)) { type = 6; return true; } + else if(equal(id_FailureCellPCI)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_resumeID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NewEUTRANCellIdentifier);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=2;} + void select_id_resumeID() { set(reject); type=3;} + void select_id_ShortMAC_I() { set(reject); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(reject); type=5;} + void select_id_FailureCellCRNTI() { set(reject); type=6;} + void select_id_FailureCellPCI() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(2); } + ResumeID& select_id_resumeID() { return set(3); } + ResumeID const* get_id_resumeID() const { return get(3); } + ShortMAC_I& select_id_ShortMAC_I() { return set(4); } + ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } + EUTRANCellIdentifier& select_id_NewEUTRANCellIdentifier() { return set(5); } + EUTRANCellIdentifier const* get_id_NewEUTRANCellIdentifier() const { return get(5); } + CRNTI& select_id_FailureCellCRNTI() { return set(6); } + CRNTI const* get_id_FailureCellCRNTI() const { return get(6); } + PCI& select_id_FailureCellPCI() { return set(7); } + PCI const* get_id_FailureCellPCI() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_resumeID()); return true; + case 4: v(select_id_ShortMAC_I()); return true; + case 5: v(select_id_NewEUTRANCellIdentifier()); return true; + case 6: v(select_id_FailureCellCRNTI()); return true; + case 7: v(select_id_FailureCellPCI()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CRNTI)]; + char dummy2[sizeof(EUTRANCellIdentifier)]; + char dummy3[sizeof(PCI)]; + char dummy4[sizeof(ResumeID)]; + char dummy5[sizeof(ShortMAC_I)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_resumeID() { set(mandatory); type=3;} + void select_id_ShortMAC_I() { set(mandatory); type=4;} + void select_id_NewEUTRANCellIdentifier() { set(mandatory); type=5;} + void select_id_FailureCellCRNTI() { set(optional); type=6;} + void select_id_FailureCellPCI() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextRequest-IEs}}, + ... +} +*/ + +struct RetrieveUEContextRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationRetrieve-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +{ ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationRetrieve_ExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(1); } + UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(UESidelinkAggregateMaximumBitRate)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationRetrieve ::= SEQUENCE { + mME-UE-S1AP-ID UE-S1AP-ID, + uESecurityCapabilities UESecurityCapabilities, + aS-SecurityInformation AS-SecurityInformation, + uEaggregateMaximumBitRate UEAggregateMaximumBitRate, + subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-ListRetrieve E-RABs-ToBeSetup-ListRetrieve, + rRC-Context RRC-Context, + handoverRestrictionList HandoverRestrictionList OPTIONAL, + locationReportingInformation LocationReportingInformation OPTIONAL, + managBasedMDTallowed ManagementBasedMDTallowed OPTIONAL, + managBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationRetrieve-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationRetrieve : asn::sequence<12, 0, true, 6> +{ + static constexpr const char* name() {return "UE-ContextInformationRetrieve";} + using parent_t = asn::sequence<12, 0, true, 6>; + struct mME_UE_S1AP_ID_t : UE_S1AP_ID + { + static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} + using parent_t = UE_S1AP_ID; + + }; + mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} + mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} + struct uESecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uESecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + + }; + uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} + uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} + struct aS_SecurityInformation_t : AS_SecurityInformation + { + static constexpr const char* name() {return "aS_SecurityInformation_t";} + using parent_t = AS_SecurityInformation; + + }; + aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} + aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} + struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + + }; + uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} + uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} + struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP + { + static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} + using parent_t = SubscriberProfileIDforRFP; + static constexpr bool optional = true; + + }; + subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} + subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} + struct e_RABs_ToBeSetup_ListRetrieve_t : E_RABs_ToBeSetup_ListRetrieve + { + static constexpr const char* name() {return "e_RABs_ToBeSetup_ListRetrieve_t";} + using parent_t = E_RABs_ToBeSetup_ListRetrieve; + + }; + e_RABs_ToBeSetup_ListRetrieve_t& ref_e_RABs_ToBeSetup_ListRetrieve() {return e_RABs_ToBeSetup_ListRetrieve;} + e_RABs_ToBeSetup_ListRetrieve_t const& ref_e_RABs_ToBeSetup_ListRetrieve() const {return e_RABs_ToBeSetup_ListRetrieve;} + struct rRC_Context_t : RRC_Context + { + static constexpr const char* name() {return "rRC_Context_t";} + using parent_t = RRC_Context; + + }; + rRC_Context_t& ref_rRC_Context() {return rRC_Context;} + rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} + struct handoverRestrictionList_t : HandoverRestrictionList + { + static constexpr const char* name() {return "handoverRestrictionList_t";} + using parent_t = HandoverRestrictionList; + static constexpr bool optional = true; + + }; + handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} + handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} + struct locationReportingInformation_t : LocationReportingInformation + { + static constexpr const char* name() {return "locationReportingInformation_t";} + using parent_t = LocationReportingInformation; + static constexpr bool optional = true; + + }; + locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} + locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} + struct managBasedMDTallowed_t : ManagementBasedMDTallowed + { + static constexpr const char* name() {return "managBasedMDTallowed_t";} + using parent_t = ManagementBasedMDTallowed; + static constexpr bool optional = true; + + }; + managBasedMDTallowed_t& set_managBasedMDTallowed() { managBasedMDTallowed.setpresent(true); return managBasedMDTallowed;} + managBasedMDTallowed_t const* get_managBasedMDTallowed() const {return managBasedMDTallowed.is_valid() ? &managBasedMDTallowed : nullptr;} + struct managBasedMDTPLMNList_t : MDTPLMNList + { + static constexpr const char* name() {return "managBasedMDTPLMNList_t";} + using parent_t = MDTPLMNList; + static constexpr bool optional = true; + + }; + managBasedMDTPLMNList_t& set_managBasedMDTPLMNList() { managBasedMDTPLMNList.setpresent(true); return managBasedMDTPLMNList;} + managBasedMDTPLMNList_t const* get_managBasedMDTPLMNList() const {return managBasedMDTPLMNList.is_valid() ? &managBasedMDTPLMNList : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mME_UE_S1AP_ID); + v(uESecurityCapabilities); + v(aS_SecurityInformation); + v(uEaggregateMaximumBitRate); + v(subscriberProfileIDforRFP); + v(e_RABs_ToBeSetup_ListRetrieve); + v(rRC_Context); + v(handoverRestrictionList); + v(locationReportingInformation); + v(managBasedMDTallowed); + v(managBasedMDTPLMNList); + v(iE_Extensions); + + }; + void clear() + { + mME_UE_S1AP_ID.clear(); + uESecurityCapabilities.clear(); + aS_SecurityInformation.clear(); + uEaggregateMaximumBitRate.clear(); + subscriberProfileIDforRFP.clear(); + e_RABs_ToBeSetup_ListRetrieve.clear(); + rRC_Context.clear(); + handoverRestrictionList.clear(); + locationReportingInformation.clear(); + managBasedMDTallowed.clear(); + managBasedMDTPLMNList.clear(); + iE_Extensions.clear(); + + }; + private: + mME_UE_S1AP_ID_t mME_UE_S1AP_ID; + uESecurityCapabilities_t uESecurityCapabilities; + aS_SecurityInformation_t aS_SecurityInformation; + uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; + subscriberProfileIDforRFP_t subscriberProfileIDforRFP; + e_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; + rRC_Context_t rRC_Context; + handoverRestrictionList_t handoverRestrictionList; + locationReportingInformation_t locationReportingInformation; + managBasedMDTallowed_t managBasedMDTallowed; + managBasedMDTPLMNList_t managBasedMDTPLMNList; + iE_Extensions_t iE_Extensions; + +}; +/* +RetrieveUEContextResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| + { ID id-UE-ContextInformationRetrieve CRITICALITY reject TYPE UE-ContextInformationRetrieve PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| + { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| + { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| + { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, + ... +} +*/ + +struct RetrieveUEContextResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(id_UE_ContextInformationRetrieve); type=6;} + void select_id_TraceActivation() { set(id_TraceActivation); type=7;} + void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} + void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=11;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=12;} + void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=15;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_GUMMEI_ID)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationRetrieve)) { type = 6; return true; } + else if(equal(id_TraceActivation)) { type = 7; return true; } + else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } + else if(equal(id_Masked_IMEISV)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_ProSeAuthorized)) { type = 11; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 12; return true; } + else if(equal(id_V2XServicesAuthorized)) { type = 13; return true; } + else if(equal(id_AerialUEsubscriptionInformation)) { type = 14; return true; } + else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationRetrieve);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_GUMMEI_ID() { set(reject); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(reject); type=6;} + void select_id_TraceActivation() { set(ignore); type=7;} + void select_id_SRVCCOperationPossible() { set(ignore); type=8;} + void select_id_Masked_IMEISV() { set(ignore); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_ProSeAuthorized() { set(ignore); type=11;} + void select_id_CriticalityDiagnostics() { set(ignore); type=12;} + void select_id_V2XServicesAuthorized() { set(ignore); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(ignore); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=15;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(ignore)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(3); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + GUMMEI& select_id_GUMMEI_ID() { return set(5); } + GUMMEI const* get_id_GUMMEI_ID() const { return get(5); } + UE_ContextInformationRetrieve& select_id_UE_ContextInformationRetrieve() { return set(6); } + UE_ContextInformationRetrieve const* get_id_UE_ContextInformationRetrieve() const { return get(6); } + TraceActivation& select_id_TraceActivation() { return set(7); } + TraceActivation const* get_id_TraceActivation() const { return get(7); } + SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } + SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } + Masked_IMEISV& select_id_Masked_IMEISV() { return set(9); } + Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + ProSeAuthorized& select_id_ProSeAuthorized() { return set(11); } + ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(11); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(12); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(12); } + V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(13); } + V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(13); } + AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(14); } + AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(14); } + Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(15); } + Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(15); } + bool is_unknown() const { return type == 16; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_GUMMEI_ID()); return true; + case 6: v(select_id_UE_ContextInformationRetrieve()); return true; + case 7: v(select_id_TraceActivation()); return true; + case 8: v(select_id_SRVCCOperationPossible()); return true; + case 9: v(select_id_Masked_IMEISV()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_ProSeAuthorized()); return true; + case 12: v(select_id_CriticalityDiagnostics()); return true; + case 13: v(select_id_V2XServicesAuthorized()); return true; + case 14: v(select_id_AerialUEsubscriptionInformation()); return true; + case 15: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; + case 16: if(type != 16) {clear(); asn::base::set();} type = 16; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(AerialUEsubscriptionInformation)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(GUMMEI)]; + char dummy5[sizeof(Masked_IMEISV)]; + char dummy6[sizeof(ProSeAuthorized)]; + char dummy7[sizeof(SRVCCOperationPossible)]; + char dummy8[sizeof(Subscription_Based_UE_DifferentiationInfo)]; + char dummy9[sizeof(TraceActivation)]; + char dummy10[sizeof(UE_ContextInformationRetrieve)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + char dummy13[sizeof(V2XServicesAuthorized)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 16; } + void clear() {type = 0;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_GUMMEI_ID() { set(mandatory); type=5;} + void select_id_UE_ContextInformationRetrieve() { set(mandatory); type=6;} + void select_id_TraceActivation() { set(optional); type=7;} + void select_id_SRVCCOperationPossible() { set(optional); type=8;} + void select_id_Masked_IMEISV() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_ProSeAuthorized() { set(optional); type=11;} + void select_id_CriticalityDiagnostics() { set(optional); type=12;} + void select_id_V2XServicesAuthorized() { set(optional); type=13;} + void select_id_AerialUEsubscriptionInformation() { set(optional); type=14;} + void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=15;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else { type = 16; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +RetrieveUEContextResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, + ... +} +*/ + +struct RetrieveUEContextResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "RetrieveUEContextResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct SNStatusTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(id_E_RABs_SubjectToStatusTransfer_List); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToStatusTransfer_List)) { type = 3; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(ignore); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToStatusTransfer_List& select_id_E_RABs_SubjectToStatusTransfer_List() { return set(3); } + E_RABs_SubjectToStatusTransfer_List const* get_id_E_RABs_SubjectToStatusTransfer_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToStatusTransfer_List()); return true; + case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToStatusTransfer_List() { set(mandatory); type=3;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SNStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, + ... +} +*/ + +struct SNStatusTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SNStatusTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-UE-SecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBSecurityKey CRITICALITY reject TYPE SeNBSecurityKey PRESENCE conditional}| + -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- + { ID id-SeNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-List CRITICALITY reject TYPE E-RABs-ToBeAdded-List PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY reject TYPE MeNBtoSeNBContainer PRESENCE mandatory}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_UE_SecurityCapabilities() { set(id_UE_SecurityCapabilities); type=2;} + void select_id_SeNBSecurityKey() { set(id_SeNBSecurityKey); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(id_SeNBUEAggregateMaximumBitRate); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(id_E_RABs_ToBeAdded_List); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_UE_SecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SeNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SeNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_E_RABs_ToBeAdded_List)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 11; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UE_SecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SeNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SeNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_UE_SecurityCapabilities() { set(reject); type=2;} + void select_id_SeNBSecurityKey() { set(reject); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(reject); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UESecurityCapabilities& select_id_UE_SecurityCapabilities() { return set(2); } + UESecurityCapabilities const* get_id_UE_SecurityCapabilities() const { return get(2); } + SeNBSecurityKey& select_id_SeNBSecurityKey() { return set(3); } + SeNBSecurityKey const* get_id_SeNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SeNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SeNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + E_RABs_ToBeAdded_List& select_id_E_RABs_ToBeAdded_List() { return set(6); } + E_RABs_ToBeAdded_List const* get_id_E_RABs_ToBeAdded_List() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(9); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(11); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(11); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(12); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_UE_SecurityCapabilities()); return true; + case 3: v(select_id_SeNBSecurityKey()); return true; + case 4: v(select_id_SeNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_E_RABs_ToBeAdded_List()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_ExpectedUEBehaviour()); return true; + case 12: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(E_RABs_ToBeAdded_List)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(MeNBtoSeNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SeNBSecurityKey)]; + char dummy7[sizeof(UEAggregateMaximumBitRate)]; + char dummy8[sizeof(UESecurityCapabilities)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_UE_SecurityCapabilities() { set(conditional); type=2;} + void select_id_SeNBSecurityKey() { set(conditional); type=3;} + void select_id_SeNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_E_RABs_ToBeAdded_List() { set(mandatory); type=6;} + void select_id_MeNBtoSeNBContainer() { set(mandatory); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_ExpectedUEBehaviour() { set(optional); type=11;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(mandatory)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-List CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-List PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY reject TYPE SeNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(id_E_RABs_Admitted_ToBeAdded_List); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_GW_TransportLayerAddress() { set(id_GW_TransportLayerAddress); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(id_SIPTO_L_GW_TransportLayerAddress); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(id_Tunnel_Information_for_BBF); type=11;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_List)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_GW_TransportLayerAddress)) { type = 7; return true; } + else if(equal(id_SIPTO_L_GW_TransportLayerAddress)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else if(equal(id_Tunnel_Information_for_BBF)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_GW_TransportLayerAddress);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SIPTO_L_GW_TransportLayerAddress);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_Tunnel_Information_for_BBF);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SeNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_GW_TransportLayerAddress() { set(ignore); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(ignore); type=11;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_List& select_id_E_RABs_Admitted_ToBeAdded_List() { return set(3); } + E_RABs_Admitted_ToBeAdded_List const* get_id_E_RABs_Admitted_ToBeAdded_List() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(5); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + TransportLayerAddress& select_id_GW_TransportLayerAddress() { return set(7); } + TransportLayerAddress const* get_id_GW_TransportLayerAddress() const { return get(7); } + TransportLayerAddress& select_id_SIPTO_L_GW_TransportLayerAddress() { return set(8); } + TransportLayerAddress const* get_id_SIPTO_L_GW_TransportLayerAddress() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + TunnelInformation& select_id_Tunnel_Information_for_BBF() { return set(11); } + TunnelInformation const* get_id_Tunnel_Information_for_BBF() const { return get(11); } + bool is_unknown() const { return type == 12; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_List()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SeNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_GW_TransportLayerAddress()); return true; + case 8: v(select_id_SIPTO_L_GW_TransportLayerAddress()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: v(select_id_Tunnel_Information_for_BBF()); return true; + case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_List)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(TransportLayerAddress)]; + char dummy6[sizeof(TunnelInformation)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 12; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_List() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SeNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_GW_TransportLayerAddress() { set(optional); type=7;} + void select_id_SIPTO_L_GW_TransportLayerAddress() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + void select_id_Tunnel_Information_for_BBF() { set(optional); type=11;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else { type = 12; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SeNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(id_E_RABs_SubjectToCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToCounterCheck_List& select_id_E_RABs_SubjectToCounterCheck_List() { return set(3); } + E_RABs_SubjectToCounterCheck_List const* get_id_E_RABs_SubjectToCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToCounterCheck_List)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SeNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(3); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_MeNBtoSeNBContainer()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(MeNBtoSeNBContainer)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SeNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(4); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSeNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SeNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSeNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_ContextInformationSeNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() + { + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + return false; + + } + private: + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 1; } + void clear() {type = 0;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + { type = 1; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformationSeNBModReq ::= SEQUENCE { + uE-SecurityCapabilities UESecurityCapabilities OPTIONAL, + seNB-SecurityKey SeNBSecurityKey OPTIONAL, + seNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-List-ModReq OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-List-ModReq OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-List-ModReq OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSeNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformationSeNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformationSeNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct uE_SecurityCapabilities_t : UESecurityCapabilities + { + static constexpr const char* name() {return "uE_SecurityCapabilities_t";} + using parent_t = UESecurityCapabilities; + static constexpr bool optional = true; + + }; + uE_SecurityCapabilities_t& set_uE_SecurityCapabilities() { uE_SecurityCapabilities.setpresent(true); return uE_SecurityCapabilities;} + uE_SecurityCapabilities_t const* get_uE_SecurityCapabilities() const {return uE_SecurityCapabilities.is_valid() ? &uE_SecurityCapabilities : nullptr;} + struct seNB_SecurityKey_t : SeNBSecurityKey + { + static constexpr const char* name() {return "seNB_SecurityKey_t";} + using parent_t = SeNBSecurityKey; + static constexpr bool optional = true; + + }; + seNB_SecurityKey_t& set_seNB_SecurityKey() { seNB_SecurityKey.setpresent(true); return seNB_SecurityKey;} + seNB_SecurityKey_t const* get_seNB_SecurityKey() const {return seNB_SecurityKey.is_valid() ? &seNB_SecurityKey : nullptr;} + struct seNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "seNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + seNBUEAggregateMaximumBitRate_t& set_seNBUEAggregateMaximumBitRate() { seNBUEAggregateMaximumBitRate.setpresent(true); return seNBUEAggregateMaximumBitRate;} + seNBUEAggregateMaximumBitRate_t const* get_seNBUEAggregateMaximumBitRate() const {return seNBUEAggregateMaximumBitRate.is_valid() ? &seNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_List_ModReq + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_List_ModReq; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uE_SecurityCapabilities); + v(seNB_SecurityKey); + v(seNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + uE_SecurityCapabilities.clear(); + seNB_SecurityKey.clear(); + seNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + uE_SecurityCapabilities_t uE_SecurityCapabilities; + seNB_SecurityKey_t seNB_SecurityKey; + seNBUEAggregateMaximumBitRate_t seNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-UE-ContextInformationSeNBModReq CRITICALITY reject TYPE UE-ContextInformationSeNBModReq PRESENCE optional}| + { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(id_UE_ContextInformationSeNBModReq); type=6;} + void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} + void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_ServingPLMN)) { type = 5; return true; } + else if(equal(id_UE_ContextInformationSeNBModReq)) { type = 6; return true; } + else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } + else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationSeNBModReq);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_ServingPLMN() { set(ignore); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(reject); type=6;} + void select_id_MeNBtoSeNBContainer() { set(ignore); type=7;} + void select_id_CSGMembershipStatus() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + PLMN_Identity& select_id_ServingPLMN() { return set(5); } + PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } + UE_ContextInformationSeNBModReq& select_id_UE_ContextInformationSeNBModReq() { return set(6); } + UE_ContextInformationSeNBModReq const* get_id_UE_ContextInformationSeNBModReq() const { return get(6); } + MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } + MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } + CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } + CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_ServingPLMN()); return true; + case 6: v(select_id_UE_ContextInformationSeNBModReq()); return true; + case 7: v(select_id_MeNBtoSeNBContainer()); return true; + case 8: v(select_id_CSGMembershipStatus()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CSGMembershipStatus)]; + char dummy2[sizeof(Cause)]; + char dummy3[sizeof(MeNBtoSeNBContainer)]; + char dummy4[sizeof(PLMN_Identity)]; + char dummy5[sizeof(SCGChangeIndication)]; + char dummy6[sizeof(UE_ContextInformationSeNBModReq)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_ServingPLMN() { set(optional); type=5;} + void select_id_UE_ContextInformationSeNBModReq() { set(optional); type=6;} + void select_id_MeNBtoSeNBContainer() { set(optional); type=7;} + void select_id_CSGMembershipStatus() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SeNBModificationRequest-IEs}}, + ... +} +*/ + +struct SeNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-ModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(id_E_RABs_Admitted_ToBeAdded_ModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(id_E_RABs_Admitted_ToBeModified_ModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(id_E_RABs_Admitted_ToBeReleased_ModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_ModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_ModAckList& select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_ModAckList const* get_id_E_RABs_Admitted_ToBeAdded_ModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_ModAckList& select_id_E_RABs_Admitted_ToBeModified_ModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_ModAckList const* get_id_E_RABs_Admitted_ToBeModified_ModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_ModAckList& select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_ModAckList const* get_id_E_RABs_Admitted_ToBeReleased_ModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(7); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_ModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SeNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_ModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_ModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_ModAckList)]; + char dummy6[sizeof(SeNBtoMeNBContainer)]; + char dummy7[sizeof(UE_X2AP_ID)]; + char dummy8[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SeNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-ModReqd CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqd PRESENCE optional}| + { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(id_E_RABs_ToBeReleased_ModReqd); type=5;} + void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SCGChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_ModReqd)) { type = 5; return true; } + else if(equal(id_SeNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqd);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SCGChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(ignore); type=5;} + void select_id_SeNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } + SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_ModReqd& select_id_E_RABs_ToBeReleased_ModReqd() { return set(5); } + E_RABs_ToBeReleased_ModReqd const* get_id_E_RABs_ToBeReleased_ModReqd() const { return get(5); } + SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(6); } + SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SCGChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_ModReqd()); return true; + case 6: v(select_id_SeNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_ModReqd)]; + char dummy3[sizeof(SCGChangeIndication)]; + char dummy4[sizeof(SeNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SCGChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_ModReqd() { set(optional); type=5;} + void select_id_SeNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBModificationRequired-IEs}}, + ... +} +*/ + +struct SeNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSeNBReconfComp CRITICALITY ignore TYPE ResponseInformationSeNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(id_ResponseInformationSeNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSeNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSeNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSeNBReconfComp& select_id_ResponseInformationSeNBReconfComp() { return set(3); } + ResponseInformationSeNBReconfComp const* get_id_ResponseInformationSeNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSeNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSeNBReconfComp)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSeNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SeNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-List-RelConf CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelConf PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(id_E_RABs_ToBeReleased_List_RelConf); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelConf)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelConf);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_List_RelConf& select_id_E_RABs_ToBeReleased_List_RelConf() { return set(3); } + E_RABs_ToBeReleased_List_RelConf const* get_id_E_RABs_ToBeReleased_List_RelConf() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_List_RelConf()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelConf)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_List_RelConf() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SeNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-List-RelReq CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelReq PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MakeBeforeBreakIndicator CRITICALITY ignore TYPE MakeBeforeBreakIndicator PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(id_E_RABs_ToBeReleased_List_RelReq); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(id_MakeBeforeBreakIndicator); type=8;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_List_RelReq)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_MakeBeforeBreakIndicator)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelReq);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MakeBeforeBreakIndicator);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(ignore); type=8;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_List_RelReq& select_id_E_RABs_ToBeReleased_List_RelReq() { return set(4); } + E_RABs_ToBeReleased_List_RelReq const* get_id_E_RABs_ToBeReleased_List_RelReq() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } + MakeBeforeBreakIndicator& select_id_MakeBeforeBreakIndicator() { return set(8); } + MakeBeforeBreakIndicator const* get_id_MakeBeforeBreakIndicator() const { return get(8); } + bool is_unknown() const { return type == 9; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_List_RelReq()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_MakeBeforeBreakIndicator()); return true; + case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_List_RelReq)]; + char dummy3[sizeof(MakeBeforeBreakIndicator)]; + char dummy4[sizeof(UE_ContextKeptIndicator)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 9; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(optional); type=3;} + void select_id_E_RABs_ToBeReleased_List_RelReq() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_MakeBeforeBreakIndicator() { set(optional); type=8;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else { type = 9; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SeNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SeNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SeNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SeNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SeNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SeNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SecondaryRATDataUsageReport-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-SecondaryRATUsageReportList CRITICALITY reject TYPE SecondaryRATUsageReportList PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SecondaryRATDataUsageReport_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_SecondaryRATUsageReportList() { set(id_SecondaryRATUsageReportList); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_SecondaryRATUsageReportList)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReportList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_SecondaryRATUsageReportList() { set(reject); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + SecondaryRATUsageReportList& select_id_SecondaryRATUsageReportList() { return set(3); } + SecondaryRATUsageReportList const* get_id_SecondaryRATUsageReportList() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_SecondaryRATUsageReportList()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SecondaryRATUsageReportList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_SecondaryRATUsageReportList() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, + ... +} +*/ + +struct SecondaryRATDataUsageReport : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SecondaryRATDataUsageReport";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBActivityNotification-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-UEContextLevelUserPlaneActivity CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional}| + { ID id-ERABActivityNotifyItemList CRITICALITY ignore TYPE ERABActivityNotifyItemList PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBActivityNotification_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(id_UEContextLevelUserPlaneActivity); type=3;} + void select_id_ERABActivityNotifyItemList() { set(id_ERABActivityNotifyItemList); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_UEContextLevelUserPlaneActivity)) { type = 3; return true; } + else if(equal(id_ERABActivityNotifyItemList)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_UEContextLevelUserPlaneActivity);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_ERABActivityNotifyItemList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(ignore); type=3;} + void select_id_ERABActivityNotifyItemList() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + UserPlaneTrafficActivityReport& select_id_UEContextLevelUserPlaneActivity() { return set(3); } + UserPlaneTrafficActivityReport const* get_id_UEContextLevelUserPlaneActivity() const { return get(3); } + ERABActivityNotifyItemList& select_id_ERABActivityNotifyItemList() { return set(4); } + ERABActivityNotifyItemList const* get_id_ERABActivityNotifyItemList() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_UEContextLevelUserPlaneActivity()); return true; + case 4: v(select_id_ERABActivityNotifyItemList()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ERABActivityNotifyItemList)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + char dummy5[sizeof(UserPlaneTrafficActivityReport)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_UEContextLevelUserPlaneActivity() { set(optional); type=3;} + void select_id_ERABActivityNotifyItemList() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBActivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBActivityNotification-IEs}}, + ... +} +*/ + +struct SgNBActivityNotification : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBActivityNotification";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-NRUESecurityCapabilities CRITICALITY reject TYPE NRUESecurityCapabilities PRESENCE mandatory}| + { ID id-SgNBSecurityKey CRITICALITY reject TYPE SgNBSecurityKey PRESENCE mandatory}| + { ID id-SgNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-E-RABs-ToBeAdded-SgNBAddReqList CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReqList PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-SGNB-Addition-Trigger-Ind CRITICALITY reject TYPE SGNB-Addition-Trigger-Ind PRESENCE optional}| + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| + { ID id-MeNBCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}, + ... +} +*/ + +struct SgNBAdditionRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=2;} + void select_id_SgNBSecurityKey() { set(id_SgNBSecurityKey); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(id_SgNBUEAggregateMaximumBitRate); type=4;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=5;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(id_E_RABs_ToBeAdded_SgNBAddReqList); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=9;} + void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=11;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(id_SGNB_Addition_Trigger_Ind); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=15;} + void select_id_MeNBCell_ID() { set(id_MeNBCell_ID); type=16;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_NRUESecurityCapabilities)) { type = 2; return true; } + else if(equal(id_SgNBSecurityKey)) { type = 3; return true; } + else if(equal(id_SgNBUEAggregateMaximumBitRate)) { type = 4; return true; } + else if(equal(id_SelectedPLMN)) { type = 5; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 6; return true; } + else if(equal(id_E_RABs_ToBeAdded_SgNBAddReqList)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 9; return true; } + else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 12; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 13; return true; } + else if(equal(id_SGNB_Addition_Trigger_Ind)) { type = 14; return true; } + else if(equal(id_SubscriberProfileIDforRFP)) { type = 15; return true; } + else if(equal(id_MeNBCell_ID)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_SgNBSecurityKey);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SgNBUEAggregateMaximumBitRate);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReqList);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_SGNB_Addition_Trigger_Ind);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_MeNBCell_ID);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_NRUESecurityCapabilities() { set(reject); type=2;} + void select_id_SgNBSecurityKey() { set(reject); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(reject); type=4;} + void select_id_SelectedPLMN() { set(ignore); type=5;} + void select_id_HandoverRestrictionList() { set(ignore); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=9;} + void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=11;} + void select_id_RequestedSplitSRBs() { set(reject); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(reject); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=15;} + void select_id_MeNBCell_ID() { set(reject); type=16;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(ignore)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(ignore)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(2); } + NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(2); } + SgNBSecurityKey& select_id_SgNBSecurityKey() { return set(3); } + SgNBSecurityKey const* get_id_SgNBSecurityKey() const { return get(3); } + UEAggregateMaximumBitRate& select_id_SgNBUEAggregateMaximumBitRate() { return set(4); } + UEAggregateMaximumBitRate const* get_id_SgNBUEAggregateMaximumBitRate() const { return get(4); } + PLMN_Identity& select_id_SelectedPLMN() { return set(5); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(5); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(6); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(6); } + E_RABs_ToBeAdded_SgNBAddReqList& select_id_E_RABs_ToBeAdded_SgNBAddReqList() { return set(7); } + E_RABs_ToBeAdded_SgNBAddReqList const* get_id_E_RABs_ToBeAdded_SgNBAddReqList() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(9); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(9); } + ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } + ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(11); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(12); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(13); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(13); } + SGNB_Addition_Trigger_Ind& select_id_SGNB_Addition_Trigger_Ind() { return set(14); } + SGNB_Addition_Trigger_Ind const* get_id_SGNB_Addition_Trigger_Ind() const { return get(14); } + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(15); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(15); } + ECGI& select_id_MeNBCell_ID() { return set(16); } + ECGI const* get_id_MeNBCell_ID() const { return get(16); } + bool is_unknown() const { return type == 17; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_NRUESecurityCapabilities()); return true; + case 3: v(select_id_SgNBSecurityKey()); return true; + case 4: v(select_id_SgNBUEAggregateMaximumBitRate()); return true; + case 5: v(select_id_SelectedPLMN()); return true; + case 6: v(select_id_HandoverRestrictionList()); return true; + case 7: v(select_id_E_RABs_ToBeAdded_SgNBAddReqList()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 10: v(select_id_ExpectedUEBehaviour()); return true; + case 11: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 12: v(select_id_RequestedSplitSRBs()); return true; + case 13: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 14: v(select_id_SGNB_Addition_Trigger_Ind()); return true; + case 15: v(select_id_SubscriberProfileIDforRFP()); return true; + case 16: v(select_id_MeNBCell_ID()); return true; + case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ECGI)]; + char dummy2[sizeof(E_RABs_ToBeAdded_SgNBAddReqList)]; + char dummy3[sizeof(ExpectedUEBehaviour)]; + char dummy4[sizeof(HandoverRestrictionList)]; + char dummy5[sizeof(MeNBResourceCoordinationInformation)]; + char dummy6[sizeof(MeNBtoSgNBContainer)]; + char dummy7[sizeof(NRUESecurityCapabilities)]; + char dummy8[sizeof(PLMN_Identity)]; + char dummy9[sizeof(SGNB_Addition_Trigger_Ind)]; + char dummy10[sizeof(SgNBSecurityKey)]; + char dummy11[sizeof(SgNB_UE_X2AP_ID)]; + char dummy12[sizeof(SplitSRBs)]; + char dummy13[sizeof(SubscriberProfileIDforRFP)]; + char dummy14[sizeof(UEAggregateMaximumBitRate)]; + char dummy15[sizeof(UE_X2AP_ID)]; + char dummy16[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 17; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_NRUESecurityCapabilities() { set(mandatory); type=2;} + void select_id_SgNBSecurityKey() { set(mandatory); type=3;} + void select_id_SgNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} + void select_id_SelectedPLMN() { set(optional); type=5;} + void select_id_HandoverRestrictionList() { set(optional); type=6;} + void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(mandatory); type=7;} + void select_id_MeNBtoSgNBContainer() { set(mandatory); type=8;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=9;} + void select_id_ExpectedUEBehaviour() { set(optional); type=10;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=11;} + void select_id_RequestedSplitSRBs() { set(optional); type=12;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=13;} + void select_id_SGNB_Addition_Trigger_Ind() { set(optional); type=14;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=15;} + void select_id_MeNBCell_ID() { set(mandatory); type=16;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(mandatory)) { type = 7; return true; } + else if(equal(mandatory)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else if(equal(optional)) { type = 14; return true; } + else if(equal(optional)) { type = 15; return true; } + else if(equal(mandatory)) { type = 16; return true; } + else { type = 17; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(mandatory);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(mandatory);} return false; + case 17: type = 17; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequest-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList PRESENCE mandatory}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(ignore); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_CriticalityDiagnostics() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_AdmittedSplitSRBs() { set(reject); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() const { return get(3); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(8); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList()); return true; + case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_CriticalityDiagnostics()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_AdmittedSplitSRBs()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)]; + char dummy4[sizeof(RRC_Config_Ind)]; + char dummy5[sizeof(SgNBResourceCoordinationInformation)]; + char dummy6[sizeof(SgNB_UE_X2AP_ID)]; + char dummy7[sizeof(SgNBtoMeNBContainer)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(mandatory); type=3;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} + void select_id_SgNBtoMeNBContainer() { set(mandatory); type=5;} + void select_id_CriticalityDiagnostics() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_AdmittedSplitSRBs() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(mandatory)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBAdditionRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBAdditionRequestReject-IEs}}, + ... +} +*/ + +struct SgNBAdditionRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBAdditionRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBChaConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(id_E_RABs_ToBeReleased_SgNBChaConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBChaConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBChaConfList& select_id_E_RABs_ToBeReleased_SgNBChaConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBChaConfList const* get_id_E_RABs_ToBeReleased_SgNBChaConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBChaConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBChaConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeConfirm-IEs}}, + ... +} +*/ + +struct SgNBChangeConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRefuse-IEs}}, + ... +} +*/ + +struct SgNBChangeRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBChangeRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Target-SgNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBChangeRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Target_SgNB_ID() { set(id_Target_SgNB_ID); type=3;} + void select_id_Cause() { set(id_Cause); type=4;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Target_SgNB_ID)) { type = 3; return true; } + else if(equal(id_Cause)) { type = 4; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Target_SgNB_ID);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Target_SgNB_ID() { set(reject); type=3;} + void select_id_Cause() { set(ignore); type=4;} + void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + GlobalGNB_ID& select_id_Target_SgNB_ID() { return set(3); } + GlobalGNB_ID const* get_id_Target_SgNB_ID() const { return get(3); } + Cause& select_id_Cause() { return set(4); } + Cause const* get_id_Cause() const { return get(4); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Target_SgNB_ID()); return true; + case 4: v(select_id_Cause()); return true; + case 5: v(select_id_SgNBtoMeNBContainer()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(GlobalGNB_ID)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(SgNBtoMeNBContainer)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Target_SgNB_ID() { set(mandatory); type=3;} + void select_id_Cause() { set(mandatory); type=4;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(mandatory)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBChangeRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBChangeRequired-IEs}}, + ... +} +*/ + +struct SgNBChangeRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBChangeRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-SubjectToSgNBCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-List PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBCounterCheckRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(id_E_RABs_SubjectToSgNBCounterCheck_List); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_SubjectToSgNBCounterCheck_List)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_List);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_SubjectToSgNBCounterCheck_List& select_id_E_RABs_SubjectToSgNBCounterCheck_List() { return set(3); } + E_RABs_SubjectToSgNBCounterCheck_List const* get_id_E_RABs_SubjectToSgNBCounterCheck_List() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_SubjectToSgNBCounterCheck_List()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_List)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBCounterCheckRequest-IEs}}, + ... +} +*/ + +struct SgNBCounterCheckRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBCounterCheckRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-AdmittedToBeModified-SgNBModConfList CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConfList PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(id_E_RABs_AdmittedToBeModified_SgNBModConfList); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_AdmittedToBeModified_SgNBModConfList& select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { return set(3); } + E_RABs_AdmittedToBeModified_SgNBModConfList const* get_id_E_RABs_AdmittedToBeModified_SgNBModConfList() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(7); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConfList()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_AdmittedToBeModified_SgNBModConfList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(SgNB_UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(optional); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationConfirm-IEs}}, + ... +} +*/ + +struct SgNBModificationConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRefuse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} + void select_id_CriticalityDiagnostics() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNBtoSgNBContainer()); return true; + case 5: v(select_id_CriticalityDiagnostics()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID)]; + char dummy6[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} + void select_id_CriticalityDiagnostics() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRefuse-IEs}}, + ... +} +*/ + +struct SgNBModificationRefuse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRefuse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UE-ContextInformationSgNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-SubscriberProfileIDforRFP CRITICALITY ignore EXTENSION SubscriberProfileIDforRFP PRESENCE optional}, + ... +} +*/ + +struct UE_ContextInformationSgNBModReqExtIEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=1;} + X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_SubscriberProfileIDforRFP)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(ignore); type=1;} + X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(1); } + SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_SubscriberProfileIDforRFP()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SubscriberProfileIDforRFP)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_SubscriberProfileIDforRFP() { set(optional); type=1;} + X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(optional)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UE-ContextInformation-SgNBModReq ::= SEQUENCE { + nRUE-SecurityCapabilities NRUESecurityCapabilities OPTIONAL, + sgNB-SecurityKey SgNBSecurityKey OPTIONAL, + sgNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, + e-RABs-ToBeAdded E-RABs-ToBeAdded-SgNBModReq-List OPTIONAL, + e-RABs-ToBeModified E-RABs-ToBeModified-SgNBModReq-List OPTIONAL, + e-RABs-ToBeReleased E-RABs-ToBeReleased-SgNBModReq-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSgNBModReqExtIEs} } OPTIONAL, + ... +} +*/ + +struct UE_ContextInformation_SgNBModReq : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "UE-ContextInformation-SgNBModReq";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct nRUE_SecurityCapabilities_t : NRUESecurityCapabilities + { + static constexpr const char* name() {return "nRUE_SecurityCapabilities_t";} + using parent_t = NRUESecurityCapabilities; + static constexpr bool optional = true; + + }; + nRUE_SecurityCapabilities_t& set_nRUE_SecurityCapabilities() { nRUE_SecurityCapabilities.setpresent(true); return nRUE_SecurityCapabilities;} + nRUE_SecurityCapabilities_t const* get_nRUE_SecurityCapabilities() const {return nRUE_SecurityCapabilities.is_valid() ? &nRUE_SecurityCapabilities : nullptr;} + struct sgNB_SecurityKey_t : SgNBSecurityKey + { + static constexpr const char* name() {return "sgNB_SecurityKey_t";} + using parent_t = SgNBSecurityKey; + static constexpr bool optional = true; + + }; + sgNB_SecurityKey_t& set_sgNB_SecurityKey() { sgNB_SecurityKey.setpresent(true); return sgNB_SecurityKey;} + sgNB_SecurityKey_t const* get_sgNB_SecurityKey() const {return sgNB_SecurityKey.is_valid() ? &sgNB_SecurityKey : nullptr;} + struct sgNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate + { + static constexpr const char* name() {return "sgNBUEAggregateMaximumBitRate_t";} + using parent_t = UEAggregateMaximumBitRate; + static constexpr bool optional = true; + + }; + sgNBUEAggregateMaximumBitRate_t& set_sgNBUEAggregateMaximumBitRate() { sgNBUEAggregateMaximumBitRate.setpresent(true); return sgNBUEAggregateMaximumBitRate;} + sgNBUEAggregateMaximumBitRate_t const* get_sgNBUEAggregateMaximumBitRate() const {return sgNBUEAggregateMaximumBitRate.is_valid() ? &sgNBUEAggregateMaximumBitRate : nullptr;} + struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} + using parent_t = E_RABs_ToBeAdded_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} + e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} + struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeModified_t";} + using parent_t = E_RABs_ToBeModified_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} + e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} + struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_SgNBModReq_List + { + static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} + using parent_t = E_RABs_ToBeReleased_SgNBModReq_List; + static constexpr bool optional = true; + + }; + e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} + e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} + struct iE_Extensions_t : ProtocolExtensionContainer + { + static constexpr const char* name() {return "iE_Extensions_t";} + using parent_t = ProtocolExtensionContainer; + static constexpr bool optional = true; + + }; + iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} + iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} + template void decode(V& v) + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRUE_SecurityCapabilities); + v(sgNB_SecurityKey); + v(sgNBUEAggregateMaximumBitRate); + v(e_RABs_ToBeAdded); + v(e_RABs_ToBeModified); + v(e_RABs_ToBeReleased); + v(iE_Extensions); + + }; + void clear() + { + nRUE_SecurityCapabilities.clear(); + sgNB_SecurityKey.clear(); + sgNBUEAggregateMaximumBitRate.clear(); + e_RABs_ToBeAdded.clear(); + e_RABs_ToBeModified.clear(); + e_RABs_ToBeReleased.clear(); + iE_Extensions.clear(); + + }; + private: + nRUE_SecurityCapabilities_t nRUE_SecurityCapabilities; + sgNB_SecurityKey_t sgNB_SecurityKey; + sgNBUEAggregateMaximumBitRate_t sgNBUEAggregateMaximumBitRate; + e_RABs_ToBeAdded_t e_RABs_ToBeAdded; + e_RABs_ToBeModified_t e_RABs_ToBeModified; + e_RABs_ToBeReleased_t e_RABs_ToBeReleased; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| + { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| + { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional}| + { ID id-UE-ContextInformation-SgNBModReq CRITICALITY reject TYPE UE-ContextInformation-SgNBModReq PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RequestedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RequestedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=4;} + void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=5;} + void select_id_SCGConfigurationQuery() { set(id_SCGConfigurationQuery); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(id_UE_ContextInformation_SgNBModReq); type=7;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=10;} + void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(id_RequestedSplitSRBsrelease); type=12;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_SelectedPLMN)) { type = 4; return true; } + else if(equal(id_HandoverRestrictionList)) { type = 5; return true; } + else if(equal(id_SCGConfigurationQuery)) { type = 6; return true; } + else if(equal(id_UE_ContextInformation_SgNBModReq)) { type = 7; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_MeNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_RequestedSplitSRBs)) { type = 11; return true; } + else if(equal(id_RequestedSplitSRBsrelease)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SCGConfigurationQuery);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextInformation_SgNBModReq);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBsrelease);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_SelectedPLMN() { set(ignore); type=4;} + void select_id_HandoverRestrictionList() { set(ignore); type=5;} + void select_id_SCGConfigurationQuery() { set(ignore); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(reject); type=7;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_RequestedSplitSRBs() { set(ignore); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(ignore); type=12;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PLMN_Identity& select_id_SelectedPLMN() { return set(4); } + PLMN_Identity const* get_id_SelectedPLMN() const { return get(4); } + HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(5); } + HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(5); } + SCGConfigurationQuery& select_id_SCGConfigurationQuery() { return set(6); } + SCGConfigurationQuery const* get_id_SCGConfigurationQuery() const { return get(6); } + UE_ContextInformation_SgNBModReq& select_id_UE_ContextInformation_SgNBModReq() { return set(7); } + UE_ContextInformation_SgNBModReq const* get_id_UE_ContextInformation_SgNBModReq() const { return get(7); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(10); } + MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_RequestedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_RequestedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_RequestedSplitSRBsrelease() const { return get(12); } + bool is_unknown() const { return type == 13; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_SelectedPLMN()); return true; + case 5: v(select_id_HandoverRestrictionList()); return true; + case 6: v(select_id_SCGConfigurationQuery()); return true; + case 7: v(select_id_UE_ContextInformation_SgNBModReq()); return true; + case 8: v(select_id_MeNBtoSgNBContainer()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_MeNBResourceCoordinationInformation()); return true; + case 11: v(select_id_RequestedSplitSRBs()); return true; + case 12: v(select_id_RequestedSplitSRBsrelease()); return true; + case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(HandoverRestrictionList)]; + char dummy3[sizeof(MeNBResourceCoordinationInformation)]; + char dummy4[sizeof(MeNBtoSgNBContainer)]; + char dummy5[sizeof(PLMN_Identity)]; + char dummy6[sizeof(SCGConfigurationQuery)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SplitSRBs)]; + char dummy9[sizeof(UE_ContextInformation_SgNBModReq)]; + char dummy10[sizeof(UE_X2AP_ID)]; + char dummy11[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 13; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_SelectedPLMN() { set(optional); type=4;} + void select_id_HandoverRestrictionList() { set(optional); type=5;} + void select_id_SCGConfigurationQuery() { set(optional); type=6;} + void select_id_UE_ContextInformation_SgNBModReq() { set(optional); type=7;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_MeNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_RequestedSplitSRBs() { set(optional); type=11;} + void select_id_RequestedSplitSRBsrelease() { set(optional); type=12;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else { type = 13; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SgNBModificationRequest-IEs}}, + ... +} +*/ + +struct SgNBModificationRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeModified-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBModAckList PRESENCE optional}| + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-AdmittedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-AdmittedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAckList); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=7;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=10;} + void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(id_AdmittedSplitSRBsrelease); type=12;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=13;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList)) { type = 3; return true; } + else if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList)) { type = 5; return true; } + else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 7; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 10; return true; } + else if(equal(id_AdmittedSplitSRBs)) { type = 11; return true; } + else if(equal(id_AdmittedSplitSRBsrelease)) { type = 12; return true; } + else if(equal(id_RRCConfigIndication)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBsrelease);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(ignore); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(ignore); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(ignore); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=7;} + void select_id_CriticalityDiagnostics() { set(ignore); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=10;} + void select_id_AdmittedSplitSRBs() { set(ignore); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(ignore); type=12;} + void select_id_RRCConfigIndication() { set(reject); type=13;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(ignore)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(ignore)) { type = 10; return true; } + else if(equal(ignore)) { type = 11; return true; } + else if(equal(ignore)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { return set(3); } + E_RABs_Admitted_ToBeAdded_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() const { return get(3); } + E_RABs_Admitted_ToBeModified_SgNBModAckList& select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { return set(4); } + E_RABs_Admitted_ToBeModified_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() const { return get(5); } + E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } + E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(7); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(7); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(10); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(10); } + SplitSRBs& select_id_AdmittedSplitSRBs() { return set(11); } + SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(11); } + SplitSRBs& select_id_AdmittedSplitSRBsrelease() { return set(12); } + SplitSRBs const* get_id_AdmittedSplitSRBsrelease() const { return get(12); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(13); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(13); } + bool is_unknown() const { return type == 14; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList()); return true; + case 4: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList()); return true; + case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; + case 7: v(select_id_SgNBtoMeNBContainer()); return true; + case 8: v(select_id_CriticalityDiagnostics()); return true; + case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 10: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 11: v(select_id_AdmittedSplitSRBs()); return true; + case 12: v(select_id_AdmittedSplitSRBsrelease()); return true; + case 13: v(select_id_RRCConfigIndication()); return true; + case 14: if(type != 14) {clear(); asn::base::set();} type = 14; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RAB_List)]; + char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAckList)]; + char dummy4[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAckList)]; + char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_SgNBModAckList)]; + char dummy6[sizeof(RRC_Config_Ind)]; + char dummy7[sizeof(SgNBResourceCoordinationInformation)]; + char dummy8[sizeof(SgNB_UE_X2AP_ID)]; + char dummy9[sizeof(SgNBtoMeNBContainer)]; + char dummy10[sizeof(SplitSRBs)]; + char dummy11[sizeof(UE_X2AP_ID)]; + char dummy12[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 14; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(optional); type=3;} + void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(optional); type=5;} + void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=7;} + void select_id_CriticalityDiagnostics() { set(optional); type=8;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=10;} + void select_id_AdmittedSplitSRBs() { set(optional); type=11;} + void select_id_AdmittedSplitSRBsrelease() { set(optional); type=12;} + void select_id_RRCConfigIndication() { set(optional); type=13;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else if(equal(optional)) { type = 11; return true; } + else if(equal(optional)) { type = 12; return true; } + else if(equal(optional)) { type = 13; return true; } + else { type = 14; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; + case 14: type = 14; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequestReject-IEs}}, + ... +} +*/ + +struct SgNBModificationRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional}| + { ID id-E-RABs-ToBeReleased-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-E-RABs-ToBeModified-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqdList PRESENCE optional}| + { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, + ... +} +*/ + +struct SgNBModificationRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_PDCPChangeIndication() { set(id_PDCPChangeIndication); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(id_E_RABs_ToBeReleased_SgNBModReqdList); type=5;} + void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(id_E_RABs_ToBeModified_SgNBModReqdList); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} + void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_PDCPChangeIndication)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBModReqdList)) { type = 5; return true; } + else if(equal(id_SgNBtoMeNBContainer)) { type = 6; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } + else if(equal(id_E_RABs_ToBeModified_SgNBModReqdList)) { type = 8; return true; } + else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } + else if(equal(id_RRCConfigIndication)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_PDCPChangeIndication);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqdList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqdList);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_PDCPChangeIndication() { set(ignore); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(ignore); type=5;} + void select_id_SgNBtoMeNBContainer() { set(ignore); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(ignore); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} + void select_id_RRCConfigIndication() { set(reject); type=10;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(ignore)) { type = 8; return true; } + else if(equal(ignore)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + PDCPChangeIndication& select_id_PDCPChangeIndication() { return set(4); } + PDCPChangeIndication const* get_id_PDCPChangeIndication() const { return get(4); } + E_RABs_ToBeReleased_SgNBModReqdList& select_id_E_RABs_ToBeReleased_SgNBModReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBModReqdList const* get_id_E_RABs_ToBeReleased_SgNBModReqdList() const { return get(5); } + SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(6); } + SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(6); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } + E_RABs_ToBeModified_SgNBModReqdList& select_id_E_RABs_ToBeModified_SgNBModReqdList() { return set(8); } + E_RABs_ToBeModified_SgNBModReqdList const* get_id_E_RABs_ToBeModified_SgNBModReqdList() const { return get(8); } + SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } + SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } + RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } + RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } + bool is_unknown() const { return type == 11; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_PDCPChangeIndication()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBModReqdList()); return true; + case 6: v(select_id_SgNBtoMeNBContainer()); return true; + case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 8: v(select_id_E_RABs_ToBeModified_SgNBModReqdList()); return true; + case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; + case 10: v(select_id_RRCConfigIndication()); return true; + case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeModified_SgNBModReqdList)]; + char dummy3[sizeof(E_RABs_ToBeReleased_SgNBModReqdList)]; + char dummy4[sizeof(PDCPChangeIndication)]; + char dummy5[sizeof(RRC_Config_Ind)]; + char dummy6[sizeof(SgNBResourceCoordinationInformation)]; + char dummy7[sizeof(SgNB_UE_X2AP_ID)]; + char dummy8[sizeof(SgNBtoMeNBContainer)]; + char dummy9[sizeof(UE_X2AP_ID)]; + char dummy10[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 11; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_PDCPChangeIndication() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(optional); type=5;} + void select_id_SgNBtoMeNBContainer() { set(optional); type=6;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} + void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(optional); type=8;} + void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} + void select_id_RRCConfigIndication() { set(optional); type=10;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else if(equal(optional)) { type = 8; return true; } + else if(equal(optional)) { type = 9; return true; } + else if(equal(optional)) { type = 10; return true; } + else { type = 11; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; + case 11: type = 11; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBModificationRequired-IEs}}, + ... +} +*/ + +struct SgNBModificationRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBModificationRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-ResponseInformationSgNBReconfComp CRITICALITY ignore TYPE ResponseInformationSgNBReconfComp PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReconfigurationComplete_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(id_ResponseInformationSgNBReconfComp); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_ResponseInformationSgNBReconfComp)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSgNBReconfComp);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + ResponseInformationSgNBReconfComp& select_id_ResponseInformationSgNBReconfComp() { return set(3); } + ResponseInformationSgNBReconfComp const* get_id_ResponseInformationSgNBReconfComp() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_ResponseInformationSgNBReconfComp()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(ResponseInformationSgNBReconfComp)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_ResponseInformationSgNBReconfComp() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReconfigurationComplete-IEs}}, + ... +} +*/ + +struct SgNBReconfigurationComplete : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReconfigurationComplete";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConfList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseConfirm_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(id_E_RABs_ToBeReleased_SgNBRelConfList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelConfList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConfList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + E_RABs_ToBeReleased_SgNBRelConfList& select_id_E_RABs_ToBeReleased_SgNBRelConfList() { return set(3); } + E_RABs_ToBeReleased_SgNBRelConfList const* get_id_E_RABs_ToBeReleased_SgNBRelConfList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_E_RABs_ToBeReleased_SgNBRelConfList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelConfList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseConfirm-IEs}}, + ... +} +*/ + +struct SgNBReleaseConfirm : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseConfirm";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-E-RABs-ToBeReleased-SgNBRelReqList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqList PRESENCE optional}| + { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(id_E_RABs_ToBeReleased_SgNBRelReqList); type=4;} + void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} + void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=7;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqList)) { type = 4; return true; } + else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } + else if(equal(id_MeNBtoSgNBContainer)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqList);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(ignore); type=4;} + void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} + void select_id_MeNBtoSgNBContainer() { set(reject); type=7;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + E_RABs_ToBeReleased_SgNBRelReqList& select_id_E_RABs_ToBeReleased_SgNBRelReqList() { return set(4); } + E_RABs_ToBeReleased_SgNBRelReqList const* get_id_E_RABs_ToBeReleased_SgNBRelReqList() const { return get(4); } + UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } + UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } + MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(7); } + MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(7); } + bool is_unknown() const { return type == 8; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_E_RABs_ToBeReleased_SgNBRelReqList()); return true; + case 5: v(select_id_UE_ContextKeptIndicator()); return true; + case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 7: v(select_id_MeNBtoSgNBContainer()); return true; + case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqList)]; + char dummy3[sizeof(MeNBtoSgNBContainer)]; + char dummy4[sizeof(SgNB_UE_X2AP_ID)]; + char dummy5[sizeof(UE_ContextKeptIndicator)]; + char dummy6[sizeof(UE_X2AP_ID)]; + char dummy7[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 8; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(optional); type=4;} + void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} + void select_id_MeNBtoSgNBContainer() { set(optional); type=7;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else if(equal(optional)) { type = 7; return true; } + else { type = 8; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; + case 8: type = 8; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequest-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { return set(5); } + E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestAcknowledge-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestAcknowledge : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestAcknowledge";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequestReject-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, + ... +} +*/ + +struct SgNBReleaseRequestReject_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequestReject-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequestReject : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequestReject";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +SgNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { + { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| + { ID id-E-RABs-ToBeReleased-SgNBRelReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqdList PRESENCE optional }, + ... +} +*/ + +struct SgNBReleaseRequired_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} + void select_id_Cause() { set(id_Cause); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(id_E_RABs_ToBeReleased_SgNBRelReqdList); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Cause)) { type = 3; return true; } + else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqdList)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqdList);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Cause() { set(ignore); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } + Cause& select_id_Cause() { return set(3); } + Cause const* get_id_Cause() const { return get(3); } + UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } + E_RABs_ToBeReleased_SgNBRelReqdList& select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { return set(5); } + E_RABs_ToBeReleased_SgNBRelReqdList const* get_id_E_RABs_ToBeReleased_SgNBRelReqdList() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; + case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Cause()); return true; + case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_E_RABs_ToBeReleased_SgNBRelReqdList()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqdList)]; + char dummy3[sizeof(SgNB_UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID)]; + char dummy5[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Cause() { set(mandatory); type=3;} + void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(mandatory)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +SgNBReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SgNBReleaseRequired-IEs}}, + ... +} +*/ + +struct SgNBReleaseRequired : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "SgNBReleaseRequired";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| + { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| + { ID id-SIPTO-BearerDeactivationIndication CRITICALITY ignore TYPE SIPTOBearerDeactivationIndication PRESENCE optional}| + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, + ... +} +*/ + +struct UEContextRelease_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(id_SIPTO_BearerDeactivationIndication); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } + else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } + else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } + else if(equal(id_SIPTO_BearerDeactivationIndication)) { type = 5; return true; } + else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SIPTO_BearerDeactivationIndication);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(ignore); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else if(equal(ignore)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } + UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } + UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } + UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } + UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } + UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } + UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(4); } + UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(4); } + SIPTOBearerDeactivationIndication& select_id_SIPTO_BearerDeactivationIndication() { return set(5); } + SIPTOBearerDeactivationIndication const* get_id_SIPTO_BearerDeactivationIndication() const { return get(5); } + SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } + SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } + bool is_unknown() const { return type == 7; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; + case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; + case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; + case 4: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; + case 5: v(select_id_SIPTO_BearerDeactivationIndication()); return true; + case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; + case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(SIPTOBearerDeactivationIndication)]; + char dummy2[sizeof(SgNB_UE_X2AP_ID)]; + char dummy3[sizeof(UE_X2AP_ID)]; + char dummy4[sizeof(UE_X2AP_ID_Extension)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 7; } + void clear() {type = 0;} + void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} + void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} + void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} + void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} + void select_id_SIPTO_BearerDeactivationIndication() { set(optional); type=5;} + void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(optional)) { type = 6; return true; } + else { type = 7; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; + case 7: type = 7; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +UEContextRelease ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, + ... +} +*/ + +struct UEContextRelease : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "UEContextRelease";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2AP-Message ::= OCTET STRING +*/ + +struct X2AP_Message : asn::ostring<> +{ + static constexpr const char* name() {return "X2AP-Message";} + using parent_t = asn::ostring<>; + +}; + +/* +X2APMessageTransfer-IEs X2AP-PROTOCOL-IES ::= { + { ID id-RNL-Header CRITICALITY reject TYPE RNL-Header PRESENCE mandatory}| + { ID id-x2APMessage CRITICALITY reject TYPE X2AP-Message PRESENCE optional}, + ... +} +*/ + +struct X2APMessageTransfer_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(id_RNL_Header); type=1;} + void select_id_x2APMessage() { set(id_x2APMessage); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_RNL_Header)) { type = 1; return true; } + else if(equal(id_x2APMessage)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_RNL_Header);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_x2APMessage);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(reject); type=1;} + void select_id_x2APMessage() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + RNL_Header& select_id_RNL_Header() { return set(1); } + RNL_Header const* get_id_RNL_Header() const { return get(1); } + X2AP_Message& select_id_x2APMessage() { return set(2); } + X2AP_Message const* get_id_x2APMessage() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_RNL_Header()); return true; + case 2: v(select_id_x2APMessage()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(RNL_Header)]; + char dummy2[sizeof(X2AP_Message)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_RNL_Header() { set(mandatory); type=1;} + void select_id_x2APMessage() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2APMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2APMessageTransfer-IEs}}, + ... +} +*/ + +struct X2APMessageTransfer : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2APMessageTransfer";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2Release-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, +... +} +*/ + +struct X2Release_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + bool is_unknown() const { return type == 2; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 2; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else { type = 2; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2Release ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2Release-IEs}}, + ... +} +*/ + +struct X2Release : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2Release";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalFailure-IEs}}, + ... +} +*/ + +struct X2RemovalFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-X2RemovalThreshold CRITICALITY reject TYPE X2BenefitValue PRESENCE optional}, +... +} +*/ + +struct X2RemovalRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_X2RemovalThreshold() { set(id_X2RemovalThreshold); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_X2RemovalThreshold)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_X2RemovalThreshold);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_X2RemovalThreshold() { set(reject); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + X2BenefitValue& select_id_X2RemovalThreshold() { return set(2); } + X2BenefitValue const* get_id_X2RemovalThreshold() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_X2RemovalThreshold()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GlobalENB_ID)]; + char dummy2[sizeof(X2BenefitValue)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_X2RemovalThreshold() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalRequest-IEs}}, + ... +} +*/ + +struct X2RemovalRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} +*/ + +struct X2RemovalResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_CriticalityDiagnostics() { set(ignore); type=2;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } + bool is_unknown() const { return type == 3; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_CriticalityDiagnostics()); return true; + case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GlobalENB_ID)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 3; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_CriticalityDiagnostics() { set(optional); type=2;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else { type = 3; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2RemovalResponse-IEs}}, + ... +} +*/ + +struct X2RemovalResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2RemovalResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupFailure-IEs X2AP-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 }, + + ... +} +*/ + +struct X2SetupFailure_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(id_Cause); type=1;} + void select_id_TimeToWait() { set(id_TimeToWait); type=2;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_Cause)) { type = 1; return true; } + else if(equal(id_TimeToWait)) { type = 2; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(ignore); type=1;} + void select_id_TimeToWait() { set(ignore); type=2;} + void select_id_CriticalityDiagnostics() { set(ignore); type=3;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(ignore)) { type = 1; return true; } + else if(equal(ignore)) { type = 2; return true; } + else if(equal(ignore)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + Cause& select_id_Cause() { return set(1); } + Cause const* get_id_Cause() const { return get(1); } + TimeToWait& select_id_TimeToWait() { return set(2); } + TimeToWait const* get_id_TimeToWait() const { return get(2); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } + bool is_unknown() const { return type == 4; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_Cause()); return true; + case 2: v(select_id_TimeToWait()); return true; + case 3: v(select_id_CriticalityDiagnostics()); return true; + case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(Cause)]; + char dummy2[sizeof(CriticalityDiagnostics)]; + char dummy3[sizeof(TimeToWait)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 4; } + void clear() {type = 0;} + void select_id_Cause() { set(mandatory); type=1;} + void select_id_TimeToWait() { set(optional); type=2;} + void select_id_CriticalityDiagnostics() { set(optional); type=3;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(optional)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else { type = 4; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, + ... +} +*/ + +struct X2SetupFailure : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupFailure";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, +... +} +*/ + +struct X2SetupRequest_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_LHN_ID() { set(id_LHN_ID); type=4;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_LHN_ID)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_LHN_ID() { set(ignore); type=4;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + LHN_ID& select_id_LHN_ID() { return set(4); } + LHN_ID const* get_id_LHN_ID() const { return get(4); } + bool is_unknown() const { return type == 5; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_LHN_ID()); return true; + case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(GUGroupIDList)]; + char dummy2[sizeof(GlobalENB_ID)]; + char dummy3[sizeof(LHN_ID)]; + char dummy4[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 5; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_LHN_ID() { set(optional); type=4;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else { type = 5; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, + ... +} +*/ + +struct X2SetupRequest : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupRequest";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; +/* +X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { + { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| + { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| + { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| + { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, + ... +} +*/ + +struct X2SetupResponse_IEs +{ + struct id_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} + void select_id_ServedCells() { set(id_ServedCells); type=2;} + void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} + void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} + void select_id_LHN_ID() { set(id_LHN_ID); type=5;} + X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_GlobalENB_ID)) { type = 1; return true; } + else if(equal(id_ServedCells)) { type = 2; return true; } + else if(equal(id_GUGroupIDList)) { type = 3; return true; } + else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } + else if(equal(id_LHN_ID)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(reject); type=1;} + void select_id_ServedCells() { set(reject); type=2;} + void select_id_GUGroupIDList() { set(reject); type=3;} + void select_id_CriticalityDiagnostics() { set(ignore); type=4;} + void select_id_LHN_ID() { set(ignore); type=5;} + X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(ignore)) { type = 4; return true; } + else if(equal(ignore)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct Value_t : asn::typefield + { + ~Value_t() {clear();} + size_t get_index() const {return type;} + GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } + GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } + ServedCells& select_id_ServedCells() { return set(2); } + ServedCells const* get_id_ServedCells() const { return get(2); } + GUGroupIDList& select_id_GUGroupIDList() { return set(3); } + GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } + CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } + CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } + LHN_ID& select_id_LHN_ID() { return set(5); } + LHN_ID const* get_id_LHN_ID() const { return get(5); } + bool is_unknown() const { return type == 6; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_GlobalENB_ID()); return true; + case 2: v(select_id_ServedCells()); return true; + case 3: v(select_id_GUGroupIDList()); return true; + case 4: v(select_id_CriticalityDiagnostics()); return true; + case 5: v(select_id_LHN_ID()); return true; + case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CriticalityDiagnostics)]; + char dummy2[sizeof(GUGroupIDList)]; + char dummy3[sizeof(GlobalENB_ID)]; + char dummy4[sizeof(LHN_ID)]; + char dummy5[sizeof(ServedCells)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct presence_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 6; } + void clear() {type = 0;} + void select_id_GlobalENB_ID() { set(mandatory); type=1;} + void select_id_ServedCells() { set(mandatory); type=2;} + void select_id_GUGroupIDList() { set(optional); type=3;} + void select_id_CriticalityDiagnostics() { set(optional); type=4;} + void select_id_LHN_ID() { set(optional); type=5;} + X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(mandatory)) { type = 1; return true; } + else if(equal(mandatory)) { type = 2; return true; } + else if(equal(optional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else { type = 6; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; + case 6: type = 6; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +X2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, + ... +} +*/ + +struct X2SetupResponse : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "X2SetupResponse";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct protocolIEs_t : ProtocolIE_Container + { + static constexpr const char* name() {return "protocolIEs_t";} + using parent_t = ProtocolIE_Container; + + }; + protocolIEs_t& ref_protocolIEs() {return protocolIEs;} + protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} + template void decode(V& v) + { + v(protocolIEs); + + }; + template void encode(V& v) const + { + v(protocolIEs); + + }; + void clear() + { + protocolIEs.clear(); + + }; + private: + protocolIEs_t protocolIEs; + +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..5fbef04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/generated/X2AP-PDU-Descriptions.hpp @@ -0,0 +1,1537 @@ +/***************************************************************************** +# Copyright 2019 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#pragma once + +#include "asn/asn.hpp" +static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); + +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-PDU-Contents.hpp" +#include "X2AP-Constants.hpp" + +/* +X2AP-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] +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURE +{ + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + + }; + struct criticality_t : Criticality + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = Criticality; + + }; + +}; +/* +X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { + X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | + X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} +*/ + +struct X2AP_ELEMENTARY_PROCEDURES +{ + struct InitiatingMessage_t : asn::typefield + { + ~InitiatingMessage_t() {clear();} + size_t get_index() const {return type;} + HandoverRequest& select_id_handoverPreparation() { return set(1); } + HandoverRequest const* get_id_handoverPreparation() const { return get(1); } + ResetRequest& select_id_reset() { return set(2); } + ResetRequest const* get_id_reset() const { return get(2); } + X2SetupRequest& select_id_x2Setup() { return set(3); } + X2SetupRequest const* get_id_x2Setup() const { return get(3); } + ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeRequest& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationRequest& select_id_cellActivation() { return set(7); } + CellActivationRequest const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalRequest& select_id_x2Removal() { return set(12); } + X2RemovalRequest const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextRequest& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeRequired& select_id_sgNBChange() { return set(19); } + SgNBChangeRequired const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupRequest& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationRequest& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetRequired& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalRequest& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get(25); } + SNStatusTransfer& select_id_snStatusTransfer() { return set(26); } + SNStatusTransfer const* get_id_snStatusTransfer() const { return get(26); } + UEContextRelease& select_id_uEContextRelease() { return set(27); } + UEContextRelease const* get_id_uEContextRelease() const { return get(27); } + HandoverCancel& select_id_handoverCancel() { return set(28); } + HandoverCancel const* get_id_handoverCancel() const { return get(28); } + ErrorIndication& select_id_errorIndication() { return set(29); } + ErrorIndication const* get_id_errorIndication() const { return get(29); } + ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(30); } + ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(30); } + LoadInformation& select_id_loadIndication() { return set(31); } + LoadInformation const* get_id_loadIndication() const { return get(31); } + PrivateMessage& select_id_privateMessage() { return set(32); } + PrivateMessage const* get_id_privateMessage() const { return get(32); } + RLFIndication& select_id_rLFIndication() { return set(33); } + RLFIndication const* get_id_rLFIndication() const { return get(33); } + HandoverReport& select_id_handoverReport() { return set(34); } + HandoverReport const* get_id_handoverReport() const { return get(34); } + X2Release& select_id_x2Release() { return set(35); } + X2Release const* get_id_x2Release() const { return get(35); } + X2APMessageTransfer& select_id_x2APMessageTransfer() { return set(36); } + X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get(36); } + SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set(37); } + SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get(37); } + SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set(38); } + SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get(38); } + SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set(39); } + SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get(39); } + SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set(40); } + SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get(40); } + SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set(41); } + SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get(41); } + RRCTransfer& select_id_rRCTransfer() { return set(42); } + RRCTransfer const* get_id_rRCTransfer() const { return get(42); } + SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set(43); } + SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get(43); } + SgNBActivityNotification& select_id_SgNBActivityNotification() { return set(44); } + SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get(44); } + DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set(45); } + DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get(45); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + case 26: var.destroy(); break; + case 27: var.destroy(); break; + case 28: var.destroy(); break; + case 29: var.destroy(); break; + case 30: var.destroy(); break; + case 31: var.destroy(); break; + case 32: var.destroy(); break; + case 33: var.destroy(); break; + case 34: var.destroy(); break; + case 35: var.destroy(); break; + case 36: var.destroy(); break; + case 37: var.destroy(); break; + case 38: var.destroy(); break; + case 39: var.destroy(); break; + case 40: var.destroy(); break; + case 41: var.destroy(); break; + case 42: var.destroy(); break; + case 43: var.destroy(); break; + case 44: var.destroy(); break; + case 45: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + v.template operator()(26); + v.template operator()(27); + v.template operator()(28); + v.template operator()(29); + v.template operator()(30); + v.template operator()(31); + v.template operator()(32); + v.template operator()(33); + v.template operator()(34); + v.template operator()(35); + v.template operator()(36); + v.template operator()(37); + v.template operator()(38); + v.template operator()(39); + v.template operator()(40); + v.template operator()(41); + v.template operator()(42); + v.template operator()(43); + v.template operator()(44); + v.template operator()(45); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 26: v(select_id_snStatusTransfer()); return true; + case 27: v(select_id_uEContextRelease()); return true; + case 28: v(select_id_handoverCancel()); return true; + case 29: v(select_id_errorIndication()); return true; + case 30: v(select_id_resourceStatusReporting()); return true; + case 31: v(select_id_loadIndication()); return true; + case 32: v(select_id_privateMessage()); return true; + case 33: v(select_id_rLFIndication()); return true; + case 34: v(select_id_handoverReport()); return true; + case 35: v(select_id_x2Release()); return true; + case 36: v(select_id_x2APMessageTransfer()); return true; + case 37: v(select_id_seNBReconfigurationCompletion()); return true; + case 38: v(select_id_meNBinitiatedSeNBRelease()); return true; + case 39: v(select_id_seNBCounterCheck()); return true; + case 40: v(select_id_sgNBReconfigurationCompletion()); return true; + case 41: v(select_id_sgNBCounterCheck()); return true; + case 42: v(select_id_rRCTransfer()); return true; + case 43: v(select_id_secondaryRATDataUsageReport()); return true; + case 44: v(select_id_SgNBActivityNotification()); return true; + case 45: v(select_id_dataForwardingAddressIndication()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + case 26: v(var.as()); return true; + case 27: v(var.as()); return true; + case 28: v(var.as()); return true; + case 29: v(var.as()); return true; + case 30: v(var.as()); return true; + case 31: v(var.as()); return true; + case 32: v(var.as()); return true; + case 33: v(var.as()); return true; + case 34: v(var.as()); return true; + case 35: v(var.as()); return true; + case 36: v(var.as()); return true; + case 37: v(var.as()); return true; + case 38: v(var.as()); return true; + case 39: v(var.as()); return true; + case 40: v(var.as()); return true; + case 41: v(var.as()); return true; + case 42: v(var.as()); return true; + case 43: v(var.as()); return true; + case 44: v(var.as()); return true; + case 45: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationRequest)]; + char dummy2[sizeof(DataForwardingAddressIndication)]; + char dummy3[sizeof(ENBConfigurationUpdate)]; + char dummy4[sizeof(ENDCCellActivationRequest)]; + char dummy5[sizeof(ENDCConfigurationUpdate)]; + char dummy6[sizeof(ENDCPartialResetRequired)]; + char dummy7[sizeof(ENDCX2RemovalRequest)]; + char dummy8[sizeof(ENDCX2SetupRequest)]; + char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)]; + char dummy10[sizeof(ErrorIndication)]; + char dummy11[sizeof(HandoverCancel)]; + char dummy12[sizeof(HandoverReport)]; + char dummy13[sizeof(HandoverRequest)]; + char dummy14[sizeof(LoadInformation)]; + char dummy15[sizeof(MobilityChangeRequest)]; + char dummy16[sizeof(PrivateMessage)]; + char dummy17[sizeof(RLFIndication)]; + char dummy18[sizeof(RRCTransfer)]; + char dummy19[sizeof(ResetRequest)]; + char dummy20[sizeof(ResourceStatusRequest)]; + char dummy21[sizeof(ResourceStatusUpdate)]; + char dummy22[sizeof(RetrieveUEContextRequest)]; + char dummy23[sizeof(SNStatusTransfer)]; + char dummy24[sizeof(SeNBAdditionRequest)]; + char dummy25[sizeof(SeNBCounterCheckRequest)]; + char dummy26[sizeof(SeNBModificationRequest)]; + char dummy27[sizeof(SeNBModificationRequired)]; + char dummy28[sizeof(SeNBReconfigurationComplete)]; + char dummy29[sizeof(SeNBReleaseRequest)]; + char dummy30[sizeof(SeNBReleaseRequired)]; + char dummy31[sizeof(SecondaryRATDataUsageReport)]; + char dummy32[sizeof(SgNBActivityNotification)]; + char dummy33[sizeof(SgNBAdditionRequest)]; + char dummy34[sizeof(SgNBChangeRequired)]; + char dummy35[sizeof(SgNBCounterCheckRequest)]; + char dummy36[sizeof(SgNBModificationRequest)]; + char dummy37[sizeof(SgNBModificationRequired)]; + char dummy38[sizeof(SgNBReconfigurationComplete)]; + char dummy39[sizeof(SgNBReleaseRequest)]; + char dummy40[sizeof(SgNBReleaseRequired)]; + char dummy41[sizeof(UEContextRelease)]; + char dummy42[sizeof(X2APMessageTransfer)]; + char dummy43[sizeof(X2Release)]; + char dummy44[sizeof(X2RemovalRequest)]; + char dummy45[sizeof(X2SetupRequest)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct SuccessfulOutcome_t : asn::typefield + { + ~SuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverRequestAcknowledge& select_id_handoverPreparation() { return set(1); } + HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get(1); } + ResetResponse& select_id_reset() { return set(2); } + ResetResponse const* get_id_reset() const { return get(2); } + X2SetupResponse& select_id_x2Setup() { return set(3); } + X2SetupResponse const* get_id_x2Setup() const { return get(3); } + ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationResponse& select_id_cellActivation() { return set(7); } + CellActivationResponse const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set(11); } + SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } + X2RemovalResponse& select_id_x2Removal() { return set(12); } + X2RemovalResponse const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextResponse& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set(18); } + SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } + SgNBChangeConfirm& select_id_sgNBChange() { return set(19); } + SgNBChangeConfirm const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupResponse& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationResponse& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get(22); } + ENDCPartialResetConfirm& select_id_endcPartialReset() { return set(23); } + ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get(23); } + EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set(24); } + EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } + ENDCX2RemovalResponse& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 11: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 18: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 23: var.destroy(); break; + case 24: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(11); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(18); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(23); + v.template operator()(24); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 2: v(select_id_reset()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 23: v(select_id_endcPartialReset()); return true; + case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 2: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 11: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 18: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 23: v(var.as()); return true; + case 24: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationResponse)]; + char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)]; + char dummy3[sizeof(ENDCCellActivationResponse)]; + char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)]; + char dummy5[sizeof(ENDCPartialResetConfirm)]; + char dummy6[sizeof(ENDCX2RemovalResponse)]; + char dummy7[sizeof(ENDCX2SetupResponse)]; + char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)]; + char dummy9[sizeof(HandoverRequestAcknowledge)]; + char dummy10[sizeof(MobilityChangeAcknowledge)]; + char dummy11[sizeof(ResetResponse)]; + char dummy12[sizeof(ResourceStatusResponse)]; + char dummy13[sizeof(RetrieveUEContextResponse)]; + char dummy14[sizeof(SeNBAdditionRequestAcknowledge)]; + char dummy15[sizeof(SeNBModificationConfirm)]; + char dummy16[sizeof(SeNBModificationRequestAcknowledge)]; + char dummy17[sizeof(SeNBReleaseConfirm)]; + char dummy18[sizeof(SgNBAdditionRequestAcknowledge)]; + char dummy19[sizeof(SgNBChangeConfirm)]; + char dummy20[sizeof(SgNBModificationConfirm)]; + char dummy21[sizeof(SgNBModificationRequestAcknowledge)]; + char dummy22[sizeof(SgNBReleaseConfirm)]; + char dummy23[sizeof(SgNBReleaseRequestAcknowledge)]; + char dummy24[sizeof(X2RemovalResponse)]; + char dummy25[sizeof(X2SetupResponse)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct UnsuccessfulOutcome_t : asn::typefield + { + ~UnsuccessfulOutcome_t() {clear();} + size_t get_index() const {return type;} + HandoverPreparationFailure& select_id_handoverPreparation() { return set(1); } + HandoverPreparationFailure const* get_id_handoverPreparation() const { return get(1); } + X2SetupFailure& select_id_x2Setup() { return set(3); } + X2SetupFailure const* get_id_x2Setup() const { return get(3); } + ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(4); } + ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(4); } + ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(5); } + ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(5); } + MobilityChangeFailure& select_id_mobilitySettingsChange() { return set(6); } + MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get(6); } + CellActivationFailure& select_id_cellActivation() { return set(7); } + CellActivationFailure const* get_id_cellActivation() const { return get(7); } + SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set(8); } + SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get(8); } + SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } + SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } + SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set(10); } + SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get(10); } + X2RemovalFailure& select_id_x2Removal() { return set(12); } + X2RemovalFailure const* get_id_x2Removal() const { return get(12); } + RetrieveUEContextFailure& select_id_retrieveUEContext() { return set(13); } + RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get(13); } + SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set(14); } + SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get(14); } + SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } + SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } + SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set(16); } + SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } + SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set(17); } + SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } + SgNBChangeRefuse& select_id_sgNBChange() { return set(19); } + SgNBChangeRefuse const* get_id_sgNBChange() const { return get(19); } + ENDCX2SetupFailure& select_id_endcX2Setup() { return set(20); } + ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(20); } + ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(21); } + ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(21); } + ENDCCellActivationFailure& select_id_endcCellActivation() { return set(22); } + ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get(22); } + ENDCX2RemovalFailure& select_id_endcX2Removal() { return set(25); } + ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get(25); } + bool is_unknown() const { return type == 46; } + void clear() + { + switch(type) + { + case 1: var.destroy(); break; + case 3: var.destroy(); break; + case 4: var.destroy(); break; + case 5: var.destroy(); break; + case 6: var.destroy(); break; + case 7: var.destroy(); break; + case 8: var.destroy(); break; + case 9: var.destroy(); break; + case 10: var.destroy(); break; + case 12: var.destroy(); break; + case 13: var.destroy(); break; + case 14: var.destroy(); break; + case 15: var.destroy(); break; + case 16: var.destroy(); break; + case 17: var.destroy(); break; + case 19: var.destroy(); break; + case 20: var.destroy(); break; + case 21: var.destroy(); break; + case 22: var.destroy(); break; + case 25: var.destroy(); break; + } + type = 0; ref_nested().clear(); + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(3); + v.template operator()(4); + v.template operator()(5); + v.template operator()(6); + v.template operator()(7); + v.template operator()(8); + v.template operator()(9); + v.template operator()(10); + v.template operator()(12); + v.template operator()(13); + v.template operator()(14); + v.template operator()(15); + v.template operator()(16); + v.template operator()(17); + v.template operator()(19); + v.template operator()(20); + v.template operator()(21); + v.template operator()(22); + v.template operator()(25); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: v(select_id_handoverPreparation()); return true; + case 3: v(select_id_x2Setup()); return true; + case 4: v(select_id_resourceStatusReportingInitiation()); return true; + case 5: v(select_id_eNBConfigurationUpdate()); return true; + case 6: v(select_id_mobilitySettingsChange()); return true; + case 7: v(select_id_cellActivation()); return true; + case 8: v(select_id_seNBAdditionPreparation()); return true; + case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; + case 10: v(select_id_seNBinitiatedSeNBModification()); return true; + case 12: v(select_id_x2Removal()); return true; + case 13: v(select_id_retrieveUEContext()); return true; + case 14: v(select_id_sgNBAdditionPreparation()); return true; + case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; + case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; + case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; + case 19: v(select_id_sgNBChange()); return true; + case 20: v(select_id_endcX2Setup()); return true; + case 21: v(select_id_endcConfigurationUpdate()); return true; + case 22: v(select_id_endcCellActivation()); return true; + case 25: v(select_id_endcX2Removal()); return true; + case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) return false; + switch(type) + { + case 1: v(var.as()); return true; + case 3: v(var.as()); return true; + case 4: v(var.as()); return true; + case 5: v(var.as()); return true; + case 6: v(var.as()); return true; + case 7: v(var.as()); return true; + case 8: v(var.as()); return true; + case 9: v(var.as()); return true; + case 10: v(var.as()); return true; + case 12: v(var.as()); return true; + case 13: v(var.as()); return true; + case 14: v(var.as()); return true; + case 15: v(var.as()); return true; + case 16: v(var.as()); return true; + case 17: v(var.as()); return true; + case 19: v(var.as()); return true; + case 20: v(var.as()); return true; + case 21: v(var.as()); return true; + case 22: v(var.as()); return true; + case 25: v(var.as()); return true; + } + return false; + + } + private: + template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} + template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} + union union_type + { + char dummy1[sizeof(CellActivationFailure)]; + char dummy2[sizeof(ENBConfigurationUpdateFailure)]; + char dummy3[sizeof(ENDCCellActivationFailure)]; + char dummy4[sizeof(ENDCConfigurationUpdateFailure)]; + char dummy5[sizeof(ENDCX2RemovalFailure)]; + char dummy6[sizeof(ENDCX2SetupFailure)]; + char dummy7[sizeof(HandoverPreparationFailure)]; + char dummy8[sizeof(MobilityChangeFailure)]; + char dummy9[sizeof(ResourceStatusFailure)]; + char dummy10[sizeof(RetrieveUEContextFailure)]; + char dummy11[sizeof(SeNBAdditionRequestReject)]; + char dummy12[sizeof(SeNBModificationRefuse)]; + char dummy13[sizeof(SeNBModificationRequestReject)]; + char dummy14[sizeof(SgNBAdditionRequestReject)]; + char dummy15[sizeof(SgNBChangeRefuse)]; + char dummy16[sizeof(SgNBModificationRefuse)]; + char dummy17[sizeof(SgNBModificationRequestReject)]; + char dummy18[sizeof(SgNBReleaseRequestReject)]; + char dummy19[sizeof(X2RemovalFailure)]; + char dummy20[sizeof(X2SetupFailure)]; + + }; + asn::variant var; + size_t type {0}; + + }; + struct procedureCode_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;} + void select_id_reset() { set(id_reset); type=2;} + void select_id_x2Setup() { set(id_x2Setup); type=3;} + void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;} + void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;} + void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;} + void select_id_cellActivation() { set(id_cellActivation); type=7;} + void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;} + void select_id_x2Removal() { set(id_x2Removal); type=12;} + void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;} + void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;} + void select_id_sgNBChange() { set(id_sgNBChange); type=19;} + void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;} + void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;} + void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;} + void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;} + void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;} + void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;} + void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;} + void select_id_handoverCancel() { set(id_handoverCancel); type=28;} + void select_id_errorIndication() { set(id_errorIndication); type=29;} + void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;} + void select_id_loadIndication() { set(id_loadIndication); type=31;} + void select_id_privateMessage() { set(id_privateMessage); type=32;} + void select_id_rLFIndication() { set(id_rLFIndication); type=33;} + void select_id_handoverReport() { set(id_handoverReport); type=34;} + void select_id_x2Release() { set(id_x2Release); type=35;} + void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;} + void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;} + void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;} + void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;} + void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;} + void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;} + void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;} + void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;} + X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(id_handoverPreparation)) { type = 1; return true; } + else if(equal(id_reset)) { type = 2; return true; } + else if(equal(id_x2Setup)) { type = 3; return true; } + else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; } + else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; } + else if(equal(id_mobilitySettingsChange)) { type = 6; return true; } + else if(equal(id_cellActivation)) { type = 7; return true; } + else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; } + else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; } + else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; } + else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; } + else if(equal(id_x2Removal)) { type = 12; return true; } + else if(equal(id_retrieveUEContext)) { type = 13; return true; } + else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; } + else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; } + else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; } + else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; } + else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; } + else if(equal(id_sgNBChange)) { type = 19; return true; } + else if(equal(id_endcX2Setup)) { type = 20; return true; } + else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; } + else if(equal(id_endcCellActivation)) { type = 22; return true; } + else if(equal(id_endcPartialReset)) { type = 23; return true; } + else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; } + else if(equal(id_endcX2Removal)) { type = 25; return true; } + else if(equal(id_snStatusTransfer)) { type = 26; return true; } + else if(equal(id_uEContextRelease)) { type = 27; return true; } + else if(equal(id_handoverCancel)) { type = 28; return true; } + else if(equal(id_errorIndication)) { type = 29; return true; } + else if(equal(id_resourceStatusReporting)) { type = 30; return true; } + else if(equal(id_loadIndication)) { type = 31; return true; } + else if(equal(id_privateMessage)) { type = 32; return true; } + else if(equal(id_rLFIndication)) { type = 33; return true; } + else if(equal(id_handoverReport)) { type = 34; return true; } + else if(equal(id_x2Release)) { type = 35; return true; } + else if(equal(id_x2APMessageTransfer)) { type = 36; return true; } + else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; } + else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; } + else if(equal(id_seNBCounterCheck)) { type = 39; return true; } + else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; } + else if(equal(id_sgNBCounterCheck)) { type = 41; return true; } + else if(equal(id_rRCTransfer)) { type = 42; return true; } + else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; } + else if(equal(id_SgNBActivityNotification)) { type = 44; return true; } + else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + struct criticality_t : asn::fixedtypefield + { + size_t get_index() const {return type;} + bool is_unknown() const { return type == 46; } + void clear() {type = 0;} + void select_id_handoverPreparation() { set(reject); type=1;} + void select_id_reset() { set(reject); type=2;} + void select_id_x2Setup() { set(reject); type=3;} + void select_id_resourceStatusReportingInitiation() { set(reject); type=4;} + void select_id_eNBConfigurationUpdate() { set(reject); type=5;} + void select_id_mobilitySettingsChange() { set(reject); type=6;} + void select_id_cellActivation() { set(reject); type=7;} + void select_id_seNBAdditionPreparation() { set(reject); type=8;} + void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;} + void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;} + void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;} + void select_id_x2Removal() { set(reject); type=12;} + void select_id_retrieveUEContext() { set(reject); type=13;} + void select_id_sgNBAdditionPreparation() { set(reject); type=14;} + void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;} + void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;} + void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;} + void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;} + void select_id_sgNBChange() { set(reject); type=19;} + void select_id_endcX2Setup() { set(reject); type=20;} + void select_id_endcConfigurationUpdate() { set(reject); type=21;} + void select_id_endcCellActivation() { set(reject); type=22;} + void select_id_endcPartialReset() { set(reject); type=23;} + void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;} + void select_id_endcX2Removal() { set(reject); type=25;} + void select_id_snStatusTransfer() { set(ignore); type=26;} + void select_id_uEContextRelease() { set(ignore); type=27;} + void select_id_handoverCancel() { set(ignore); type=28;} + void select_id_errorIndication() { set(ignore); type=29;} + void select_id_resourceStatusReporting() { set(ignore); type=30;} + void select_id_loadIndication() { set(ignore); type=31;} + void select_id_privateMessage() { set(ignore); type=32;} + void select_id_rLFIndication() { set(ignore); type=33;} + void select_id_handoverReport() { set(ignore); type=34;} + void select_id_x2Release() { set(reject); type=35;} + void select_id_x2APMessageTransfer() { set(reject); type=36;} + void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;} + void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;} + void select_id_seNBCounterCheck() { set(reject); type=39;} + void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;} + void select_id_sgNBCounterCheck() { set(reject); type=41;} + void select_id_rRCTransfer() { set(reject); type=42;} + void select_id_secondaryRATDataUsageReport() { set(reject); type=43;} + void select_id_SgNBActivityNotification() { set(reject); type=44;} + void select_id_dataForwardingAddressIndication() { set(ignore); type=45;} + X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} + template bool decode(V& v) + { + clear(); + if(!v(ref_nested())) return false; + if(equal(reject)) { type = 1; return true; } + else if(equal(reject)) { type = 2; return true; } + else if(equal(reject)) { type = 3; return true; } + else if(equal(reject)) { type = 4; return true; } + else if(equal(reject)) { type = 5; return true; } + else if(equal(reject)) { type = 6; return true; } + else if(equal(reject)) { type = 7; return true; } + else if(equal(reject)) { type = 8; return true; } + else if(equal(reject)) { type = 9; return true; } + else if(equal(reject)) { type = 10; return true; } + else if(equal(reject)) { type = 11; return true; } + else if(equal(reject)) { type = 12; return true; } + else if(equal(reject)) { type = 13; return true; } + else if(equal(reject)) { type = 14; return true; } + else if(equal(reject)) { type = 15; return true; } + else if(equal(reject)) { type = 16; return true; } + else if(equal(ignore)) { type = 17; return true; } + else if(equal(reject)) { type = 18; return true; } + else if(equal(reject)) { type = 19; return true; } + else if(equal(reject)) { type = 20; return true; } + else if(equal(reject)) { type = 21; return true; } + else if(equal(reject)) { type = 22; return true; } + else if(equal(reject)) { type = 23; return true; } + else if(equal(reject)) { type = 24; return true; } + else if(equal(reject)) { type = 25; return true; } + else if(equal(ignore)) { type = 26; return true; } + else if(equal(ignore)) { type = 27; return true; } + else if(equal(ignore)) { type = 28; return true; } + else if(equal(ignore)) { type = 29; return true; } + else if(equal(ignore)) { type = 30; return true; } + else if(equal(ignore)) { type = 31; return true; } + else if(equal(ignore)) { type = 32; return true; } + else if(equal(ignore)) { type = 33; return true; } + else if(equal(ignore)) { type = 34; return true; } + else if(equal(reject)) { type = 35; return true; } + else if(equal(reject)) { type = 36; return true; } + else if(equal(ignore)) { type = 37; return true; } + else if(equal(ignore)) { type = 38; return true; } + else if(equal(reject)) { type = 39; return true; } + else if(equal(ignore)) { type = 40; return true; } + else if(equal(reject)) { type = 41; return true; } + else if(equal(reject)) { type = 42; return true; } + else if(equal(reject)) { type = 43; return true; } + else if(equal(reject)) { type = 44; return true; } + else if(equal(ignore)) { type = 45; return true; } + else { type = 46; return true;} + return false; + + } + template bool encode(V& v) const + { + return v(ref_nested()); + + } + protected: + template bool decode(size_t index, V& v) + { + clear(); + switch(index) + { + case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; + case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; + case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; + case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; + case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; + case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; + case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false; + case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; + case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; + case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false; + case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false; + case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false; + case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false; + case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false; + case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false; + case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false; + case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false; + case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false; + case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false; + case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false; + case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false; + case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false; + case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false; + case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false; + case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false; + case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false; + case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false; + case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false; + case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false; + case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false; + case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false; + case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false; + case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false; + case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false; + case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false; + case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false; + case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false; + case 46: type = 46; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + template bool encode(size_t index, V& v) const + { + if(index != type) {return false;} return v(ref_nested()); + + } + private: + size_t type {0}; + + }; + +}; +/* +InitiatingMessage ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct InitiatingMessage : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "InitiatingMessage";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; + template bool decode(V& v, InitiatingMessage const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, InitiatingMessage const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +SuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "SuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; + template bool decode(V& v, SuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, SuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), + criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} +*/ + +struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> +{ + static constexpr const char* name() {return "UnsuccessfulOutcome";} + using parent_t = asn::sequence<3, 0, false, 0>; + struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); + }; + }; + procedureCode_t& ref_procedureCode() {return procedureCode;} + procedureCode_t const& ref_procedureCode() const {return procedureCode;} + struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t + { + static constexpr const char* name() {return "criticality_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); + }; + }; + criticality_t& ref_criticality() {return criticality;} + criticality_t const& ref_criticality() const {return criticality;} + struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t + { + static constexpr const char* name() {return "value_t";} + using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; + template bool decode(V& v, UnsuccessfulOutcome const& c) + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); + }; + template bool encode(V& v, UnsuccessfulOutcome const& c) const + { + return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); + }; + }; + value_t& ref_value() {return value;} + value_t const& ref_value() const {return value;} + template void decode(V& v) + { + v(procedureCode); + v(criticality); + v(value); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(criticality); + v(value); + + }; + void clear() + { + procedureCode.clear(); + criticality.clear(); + value.clear(); + + }; + private: + procedureCode_t procedureCode; + criticality_t criticality; + value_t value; + +}; +/* +X2AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} +*/ + +struct X2AP_PDU : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "X2AP-PDU";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~X2AP_PDU() {clear();} + struct initiatingMessage_t : InitiatingMessage + { + static constexpr const char* name() {return "initiatingMessage_t";} + using parent_t = InitiatingMessage; + + }; + struct successfulOutcome_t : SuccessfulOutcome + { + static constexpr const char* name() {return "successfulOutcome_t";} + using parent_t = SuccessfulOutcome; + + }; + struct unsuccessfulOutcome_t : UnsuccessfulOutcome + { + static constexpr const char* name() {return "unsuccessfulOutcome_t";} + using parent_t = UnsuccessfulOutcome; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + } + index = 0; + base::clear(); + } + template bool decode(size_t idx, V& v) + { + clear(); + switch(idx) + { + case 1: set_index(1); return v(var.build()); + case 2: set_index(2); return v(var.build()); + case 3: set_index(3); return v(var.build()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + case 2: return v(var.as()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } + successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } + unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(initiatingMessage_t)]; + char dummy2[sizeof(successfulOutcome_t)]; + char dummy3[sizeof(unsuccessfulOutcome_t)]; + + }; + asn::variant var; + index_type index {0}; +}; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.cpp new file mode 100644 index 0000000..fa2fd88 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.cpp @@ -0,0 +1,982 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "asn_e2ap.hpp" +#include "asn_e2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void) +{ + E2APpduWrapper* pduWrapper = new E2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + //strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int e2ap_get_index(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &gnb_cfg) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupResponse::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-RespondingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_RespondingNodeType_EndcX2Setup(); + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup(); + + /* RespondingNodeType-EndcX2Setup = respond-en-gNB {En-gNB-ENDCX2SetupReqAckIEs} */ + ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB(); + + using gNB_val_t = RespondingNodeType_EndcX2Setup::respond_en_gNB_t::value_type; + + ProtocolIE_Container* gNB_node = + &(ie->ref_value().select_id_RespondingNodeType_EndcX2Setup().select_respond_en_gNB()); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-Globalen-gNB-ID */ + gNB_val_t* val_Globalen_gNB_ID = new gNB_val_t; + gNB_node->push_back(*val_Globalen_gNB_ID); + + val_Globalen_gNB_ID->ref_id().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_criticality().select_id_Globalen_gNB_ID(); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID() + .ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + val_Globalen_gNB_ID->ref_value().select_id_Globalen_gNB_ID().ref_gNB_ID() + .select_gNB_ID().set_buffer(22, gnb_cfg.gNB_ID); + + /* En-gNB-ENDCX2SetupReqAckIEs << id-ServedNRcellsENDCX2ManagementList */ + gNB_val_t* val_ServedNRCells = new gNB_val_t; + gNB_node->push_back(*val_ServedNRCells); + + val_ServedNRCells->ref_id().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_criticality().select_id_ServedNRcellsENDCX2ManagementList(); + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList(); + + /* ServedNRcellsENDCX2ManagementList <-- servedNRCellInfo*/ + ServedNRcellsENDCX2ManagementList::value_type* elm = + new ServedNRcellsENDCX2ManagementList::value_type(); + + /* + ServedNRCell-Information ::= SEQUENCE { + nrpCI NRPCI, + nrCellID NRCGI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-TAC TAC OPTIONAL, + broadcastPLMNs BroadcastPLMNs-Item, + nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + */ + ServedNRCell_Information* info = &(elm->ref_servedNRCellInfo()); + { + // nrpCI NRPCI, + info->ref_nrpCI().set(gnb_cfg.nrpCI); + + /* nrCellID NRCGI, + + NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... + } + */ + info->ref_nrCellID().ref_pLMN_Identity().set(3, gnb_cfg.pLMN_Identity); + info->ref_nrCellID().ref_nRcellIdentifier().set_buffer(36, gnb_cfg.nRcellIdentifier); + + /* broadcastPLMNs BroadcastPLMNs-Item */ + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, gnb_cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + /* nrModeInfo CHOICE { + fdd FDD-InfoServedNRCell-Information, + tdd TDD-InfoServedNRCell-Information, + ... + }, + + FDD-InfoServedNRCell-Information ::= SEQUENCE { + ul-NRFreqInfo NRFreqInfo, + dl-NRFreqInfo NRFreqInfo, + ul-NR-TxBW NR-TxBW, + dl-NR-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, + ... + } + + NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... + } + + */ + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.uL_nRARFCN); + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo().ref_nRARFCN().set(gnb_cfg.dL_nRARFCN); + + /* + FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... + } + */ + //uplink + asn::sequenceof::value_type* ul_band_item = + new asn::sequenceof::value_type(); + { + ul_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* ul_supported_band_item = + new asn::sequenceof::value_type(); + + ul_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.ul_freqBandIndicatorNr); + + ul_band_item->ref_supportedSULBandList().push_back(*ul_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_ul_NRFreqInfo() + .ref_freqBandListNr().push_back(*ul_band_item); + + //downlink + asn::sequenceof::value_type* dl_band_item = + new asn::sequenceof::value_type(); + { + dl_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + /* + SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... + } + */ + + asn::sequenceof::value_type* dl_supported_band_item = + new asn::sequenceof::value_type(); + + dl_supported_band_item->ref_freqBandIndicatorNr().set(gnb_cfg.dl_freqBandIndicatorNr); + + dl_band_item->ref_supportedSULBandList().push_back(*dl_supported_band_item); + } + info->ref_nrModeInfo().select_fdd().ref_dl_NRFreqInfo() + .ref_freqBandListNr().push_back(*dl_band_item); + + /* + NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... + } + */ + { + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.uL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_ul_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.uL_NRSCS) ); + + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRNRB() + .set( static_cast(gnb_cfg.dL_NRNRB) ); + info->ref_nrModeInfo().select_fdd().ref_dl_NR_TxBW().ref_nRSCS() + .set( static_cast(gnb_cfg.dL_NRSCS) ); + } + + /* + measurementTimingConfiguration OCTET STRING, + */ + info->ref_measurementTimingConfiguration().set(gnb_cfg.measurementTimingConfiguration); + } + val_ServedNRCells->ref_value().select_id_ServedNRcellsENDCX2ManagementList().push_back(*elm); + + + + return true; +} + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu) +{ + + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupFailure::protocolIEs_t::value_type; + + /* ENDCX2SetupFailure-IEs := id-Cause*/ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//RICSubscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_initiatingMessage() + .ref_criticality().select_id_ricSubscription(); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionRequest::protocolIEs_t::value_type; + + /* RICsubscriptionRequest-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionRequest-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + + /* + RICsubscription ::= SEQUENCE { + ricEventTriggerDefinition RICeventTriggerDefinition, + ricAction-ToBeSetup-List RICactions-ToBeSetup-List, + ... + } + + RICeventTriggerDefinition ::= OCTET STRING + RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-Single-Container { {RICaction-ToBeSetup-ItemIEs} } + + RICaction-ToBeSetup-ItemIEs X2AP-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, + ... + } + + RICactionID ::= INTEGER (0..255) + + RICactionType ::= ENUMERATED{ + report, + insert, + policy, + ... + } + */ + + /* RICsubscriptionRequest-IEs : RICsubscription */ + IE_value_t* ie_RICsubscription = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICsubscription); + + ie_RICsubscription->ref_id().select_id_RICsubscription(); + ie_RICsubscription->ref_criticality().select_id_RICsubscription(); + + // RICeventTriggerDefinition + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricEventTriggerDefinition().set(params.event_trigger_def); + + //RICactions-ToBeSetup-List + for( auto const &action : params.actionList) + { + RICactions_ToBeSetup_List::value_type* item = + new RICactions_ToBeSetup_List::value_type(); + + ie_RICsubscription->ref_value().select_id_RICsubscription() + .ref_ricAction_ToBeSetup_List().push_back(*item); + + item->ref_id().select_id_RICaction_ToBeSetup_Item(); + item->ref_criticality().select_id_RICaction_ToBeSetup_Item(); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionID().set(action.action_id); + item->ref_value().select_id_RICaction_ToBeSetup_Item() + .ref_ricActionType().set(action.action_type); + + } + + return true; +} + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + RICsubscriptionRequest* container = &(pduWrapper->ref_pdu() + .select_initiatingMessage().ref_value().select_id_ricSubscription()); + + + for(auto &e : container->ref_protocolIEs()) + { + /*See struct RICsubscriptionRequest_IEs*/ + size_t type = e.ref_value().get_index(); + + switch(type) + { + case 1: //RICrequestID + { + params.request_id = e.ref_value().select_id_RICrequestID().ref_ricRequestorID().get(); + params.seq_number = e.ref_value().select_id_RICrequestID().ref_ricRequestSequenceNumber().get(); + } + break; + + case 2: //RANfunctionID + params.ran_func_id = e.ref_value().select_id_RANfunctionID().get(); + break; + + case 3: //RICsubscription + { + auto event = e.ref_value().select_id_RICsubscription().ref_ricEventTriggerDefinition().get(); + (params.event_trigger_def).assign(std::string(event.data(), event.data() + event.size())); + + //ricAction_ToBeSetup_List + for (auto & f : e.ref_value().select_id_RICsubscription().ref_ricAction_ToBeSetup_List()) + { + RIC_action_t action; + action.action_id = f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionID().get(); + action.action_type = static_cast(f.ref_value() + .select_id_RICaction_ToBeSetup_Item().ref_ricActionType().get()); + + params.actionList.push_back(action); + } + } + break; + + default: + printf("Unknown IE type = %d\n", (int)type); + return false; + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionResponse* container = &(pduWrapper->ref_pdu() + .select_successfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionResponse::protocolIEs_t::value_type; + + /* RICsubscriptionResponse-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionResponse-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionResponse-IEs : RICaction-Admitted-List */ + IE_value_t* ie_admittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_admittedList); + + ie_admittedList->ref_id().select_id_RICactions_Admitted(); + ie_admittedList->ref_criticality().select_id_RICactions_Admitted(); + + /* RICsubscriptionResponse-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + //add action to admitted and not-admitted list + for(auto const &a : params.actionList) + { + if(a.isAdmitted) + { + RICaction_Admitted_List::value_type* item = new RICaction_Admitted_List::value_type(); + + ie_admittedList->ref_value().select_id_RICactions_Admitted().push_back(*item); + + item->ref_id().select_id_RICaction_Admitted_Item(); + item->ref_criticality().select_id_RICaction_Admitted_Item(); + item->ref_value().select_id_RICaction_Admitted_Item().ref_ricActionID().set(a.action_id); + } + else + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms) +{ + E2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_ricSubscription(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_ricSubscription(); + + RICsubscriptionFailure* container = &(pduWrapper->ref_pdu() + .select_unsuccessfulOutcome().ref_value().select_id_ricSubscription()); + + using IE_value_t = RICsubscriptionFailure::protocolIEs_t::value_type; + + /* RICsubscriptionFailure-IEs : RICrequestID */ + IE_value_t* ie_RICrequestID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RICrequestID); + + ie_RICrequestID->ref_id().select_id_RICrequestID(); + ie_RICrequestID->ref_criticality().select_id_RICrequestID(); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestorID().set(params.request_id); + ie_RICrequestID->ref_value().select_id_RICrequestID() + .ref_ricRequestSequenceNumber().set(params.seq_number); + + /* RICsubscriptionFailure-IEs : RANfunctionID */ + IE_value_t* ie_RANfunctionID = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_RANfunctionID); + + ie_RANfunctionID->ref_id().select_id_RANfunctionID(); + ie_RANfunctionID->ref_criticality().select_id_RANfunctionID(); + ie_RANfunctionID->ref_value().select_id_RANfunctionID().set(params.ran_func_id); + + /* RICsubscriptionFailure-IEs : RICaction-NotAdmitted-List */ + IE_value_t* ie_notAdmittedList = new IE_value_t; + container->ref_protocolIEs().push_back(*ie_notAdmittedList); + + ie_notAdmittedList->ref_id().select_id_RICactions_NotAdmitted(); + ie_notAdmittedList->ref_criticality().select_id_RICactions_NotAdmitted(); + + for(auto const &a : params.actionList) + { + if(!a.isAdmitted) + { + RICaction_NotAdmitted_List::value_type* item = new RICaction_NotAdmitted_List::value_type(); + + ie_notAdmittedList->ref_value().select_id_RICactions_NotAdmitted().push_back(*item); + + item->ref_id().select_id_RICaction_NotAdmitted_Item(); + item->ref_criticality().select_id_RICaction_NotAdmitted_Item(); + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricActionID().set(a.action_id); + + // set cause and sub-cause + switch(a.notAdmitted_cause) + { + case RICcause_radioNetwork: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_radioNetwork().set(a.notAdmitted_subCause); + break; + + case RICcause_transport: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_transport().set(a.notAdmitted_subCause); + break; + + case RICcause_protocol: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_protocol().set(a.notAdmitted_subCause); + break; + + case RICcause_misc: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_misc().set(a.notAdmitted_subCause); + break; + + case RICcause_ric: + item->ref_value().select_id_RICaction_NotAdmitted_Item().ref_ricCause().select_ric().set(a.notAdmitted_subCause); + break; + + default: + printf("Unknown cause for action not admitted = %d", (int)a.notAdmitted_cause); + } + } + } + + return true; +} + + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void) +{ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + // e2ap_init_X2SetupRequest(pdu); + eNB_config cfg; + e2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + e2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = e2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + int rc = e2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + e2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", e2ap_get_index(pdu2)); + printf("procedureCode = %d\n", e2ap_get_procedureCode(pdu2)); + + //Test X2SetupResponse + e2ap_pdu_t* pdu_resp = new_e2ap_pdu(); + e2ap_create_X2SetupResponse(pdu_resp, cfg); + e2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + e2ap_pdu_t* pdu_failure = new_e2ap_pdu(); + e2ap_create_X2SetupFailure(pdu_failure); + e2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.hpp new file mode 100644 index 0000000..aa858b2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_E2AP_HPP +#define ASN_E2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy01 e2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +e2ap_pdu_t* new_e2ap_pdu(void); + +void e2ap_asn_print(e2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int e2ap_asn_per_encode(e2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_asn_per_decode(e2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int e2ap_get_index(e2ap_pdu_t* pdu); + +int e2ap_get_procedureCode(e2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ + +//X2Setup +bool e2ap_init_X2SetupRequest(e2ap_pdu_t* pdu); + +bool e2ap_create_X2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupResponse(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_X2SetupFailure(e2ap_pdu_t* pdu); + +//ENDCX2Setup +bool e2ap_create_ENDCX2SetupRequest(e2ap_pdu_t* pdu, eNB_config &cfg); + +bool e2ap_create_ENDCX2SetupResponse(e2ap_pdu_t* pdu, gNB_config &cfg); + +bool e2ap_create_ENDCX2SetupFailure(e2ap_pdu_t* pdu); + +//RIC Subscription +bool e2ap_create_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_parse_RICsubscriptionRequest(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionResponse(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +bool e2ap_create_RICsubscriptionFailure(e2ap_pdu_t* pdu, RICsubscription_params_t ¶ms); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_E2AP_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp new file mode 100644 index 0000000..38704e8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_e2ap_wrapper.hpp @@ -0,0 +1,85 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_E2AP_PDU_WRAPPER_HPP +#define ASN_E2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +// #include + +// #include +// #include +// #include +// #include +// #include + +#include +// #include +#include +#include +#include + +#define E2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct E2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + E2APpduWrapper(size_t allocation_buffer_size = E2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~E2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + E2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + E2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.cpp new file mode 100644 index 0000000..dae9ca8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.cpp @@ -0,0 +1,428 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "asn_x2ap.hpp" +#include "asn_x2ap_wrapper.hpp" + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ +x2ap_pdu_t* new_x2ap_pdu(void) +{ + X2APpduWrapper* pduWrapper = new X2APpduWrapper(); + return reinterpret_cast(pduWrapper); +} + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + buf[0] = 0; + + strncat(buf, asn::get_printed(pduWrapper->ref_pdu()).c_str(), buf_size - 1); +} + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::EncoderCtx ctx{ buf, buf_size }; + + if (!asn::per::pack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } else { + return static_cast(ctx.refBuffer().getBytesUsed()); + } + +} + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + asn::per::DecoderCtx ctx{ buf, + buf_size, + pduWrapper->m_allocation_buffer, + pduWrapper->m_allocation_buffer_size }; + + if (!asn::per::unpack(pduWrapper->ref_pdu(), ctx)) { + err_buf[0] = 0; + // strncat(err_buf, ctx.refErrorCtx().toString().c_str(), err_buf_size - 1); + return -1; + } + + return 0; + +} + +int x2ap_get_index(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + return pduWrapper->ref_pdu().get_index(); +} + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + switch(pduWrapper->ref_pdu().get_index()) + { + case 1: + return pduWrapper->ref_pdu().get_initiatingMessage()->ref_procedureCode().get(); + break; + + case 2: + return pduWrapper->ref_pdu().get_successfulOutcome()->ref_procedureCode().get(); + break; + + case 3: + return pduWrapper->ref_pdu().get_unsuccessfulOutcome()->ref_procedureCode().get(); + break; + + default: + return -1; + } + +} + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + //Initialization + pduWrapper->ref_pdu().select_initiatingMessage(); + pduWrapper->ref_pdu().select_initiatingMessage().clear(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup(); + + return true; +} + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_x2Setup(); + + X2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupRequest::protocolIEs_t::value_type; + + /* X2SetupRequest-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupRequest-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_successfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_successfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupResponse* container = + &(pduWrapper->ref_pdu().select_successfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupResponse::protocolIEs_t::value_type; + + /* X2SetupResponse-IEs : GlobalENB-ID*/ + IE_value_t* val_GlobalENB_ID = new IE_value_t; + container->ref_protocolIEs().push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_pLMN_Identity() + .set(3, cfg.pLMN_Identity); + + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* X2SetupResponse-IEs : ServedCells*/ + IE_value_t* val_ServedCells = new IE_value_t; + container->ref_protocolIEs().push_back(*val_ServedCells); + + val_ServedCells->ref_id().select_id_ServedCells(); + val_ServedCells->ref_criticality().select_id_ServedCells(); + val_ServedCells->ref_value().select_id_ServedCells(); + + //Add servedCellInfo + ServedCells::value_type* elm = new ServedCells::value_type(); + ServedCell_Information* info = &(elm->ref_servedCellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_ServedCells->ref_value().select_id_ServedCells().push_back(*elm); + + return true; +} + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_procedureCode().select_id_x2Setup(); + pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_criticality().select_id_x2Setup(); + + X2SetupFailure* container = + &(pduWrapper->ref_pdu().select_unsuccessfulOutcome().ref_value().select_id_x2Setup()); + + using IE_value_t = X2SetupFailure::protocolIEs_t::value_type; + + /* X2SetupFailure-IEs << id-Cause */ + IE_value_t* val_cause = new IE_value_t; + container->ref_protocolIEs().push_back(*val_cause); + + val_cause->ref_id().select_id_Cause(); + val_cause->ref_criticality().select_id_Cause(); + + /* Cause << radioNetwork */ + val_cause->ref_value().select_id_Cause().select_radioNetwork(); + + /* CauseRadioNetwork = ho-target-not-allowed (enum = 8)*/ + val_cause->ref_value().select_id_Cause().select_radioNetwork() + .set(static_cast(8)); + + return true; +} + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg) +{ + X2APpduWrapper* pduWrapper = reinterpret_cast(pdu); + + /* Initiaization */ + pduWrapper->ref_pdu().select_initiatingMessage().ref_procedureCode().select_id_endcX2Setup(); + pduWrapper->ref_pdu().select_initiatingMessage().ref_criticality().select_id_endcX2Setup(); + + ENDCX2SetupRequest* container = + &(pduWrapper->ref_pdu().select_initiatingMessage().ref_value().select_id_endcX2Setup()); + + using IE_value_t = ENDCX2SetupRequest::protocolIEs_t::value_type; + + /* ENDCX2SetupRequest-IEs = id-InitiatingNodeType-EndcX2Setup */ + IE_value_t* ie = new IE_value_t; + container->ref_protocolIEs().push_back(*ie); + ie->ref_id().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_criticality().select_id_InitiatingNodeType_EndcX2Setup(); + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup(); + + /* InitiatingNodeType-EndcX2Setup = init-eNB {ENB-ENDCX2SetupReqIEs} */ + ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB(); + + using eNB_val_t = InitiatingNodeType_EndcX2Setup::init_eNB_t::value_type; + + ProtocolIE_Container* eNB_node = + &(ie->ref_value().select_id_InitiatingNodeType_EndcX2Setup().select_init_eNB()); + + /* ENB-ENDCX2SetupReqIEs <-- id-GlobalENB-ID */ + eNB_val_t* val_GlobalENB_ID = new eNB_val_t; + eNB_node->push_back(*val_GlobalENB_ID); + + val_GlobalENB_ID->ref_id().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_criticality().select_id_GlobalENB_ID(); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID() + .ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + val_GlobalENB_ID->ref_value().select_id_GlobalENB_ID().ref_eNB_ID() + .select_macro_eNB_ID().set_buffer(20, cfg.macro_eNB_ID); + + /* ENB-ENDCX2SetupReqIEs <-- id-ServedEUTRAcellsENDCX2ManagementList */ + eNB_val_t* val_EUTRAlist = new eNB_val_t; + eNB_node->push_back(*val_EUTRAlist); + + val_EUTRAlist->ref_id().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_criticality().select_id_ServedEUTRAcellsENDCX2ManagementList(); + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList(); + + /* ServedEUTRAcellsENDCX2ManagementList <-- servedEUTRACellInfo */ + ServedEUTRAcellsENDCX2ManagementList::value_type* elm = + new ServedEUTRAcellsENDCX2ManagementList::value_type(); + ServedCell_Information* info = &(elm->ref_servedEUTRACellInfo()); + { + //Set ServedCell-Information: pCI, cellId, tAC, broadcastPLMNs, eUTRA-Mode-Info + info->ref_pCI().set(cfg.pCI); + info->ref_cellId().ref_pLMN_Identity().set(3, cfg.pLMN_Identity); + info->ref_cellId().ref_eUTRANcellIdentifier().set_buffer(28, cfg.eUTRANcellIdentifier); + info->ref_tAC().set(2, cfg.tAC); + + BroadcastPLMNs_Item::value_type* item = new BroadcastPLMNs_Item::value_type(); + item->set(3, cfg.pLMN_Identity); + info->ref_broadcastPLMNs().push_back(*item); + + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_EARFCN().set(cfg.uL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_EARFCN().set(cfg.dL_EARFCN); + info->ref_eUTRA_Mode_Info().select_fDD().ref_uL_Transmission_Bandwidth() + .set(static_cast(cfg.uL_Bandwidth)); + info->ref_eUTRA_Mode_Info().select_fDD().ref_dL_Transmission_Bandwidth() + .set(static_cast(cfg.dL_Bandwidth)); + } + val_EUTRAlist->ref_value().select_id_ServedEUTRAcellsENDCX2ManagementList() + .push_back(*elm); + + return true; +} + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void) +{ + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + eNB_config cfg; + x2ap_create_X2SetupRequest(pdu, cfg); + + char pdu_str[1024]; + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test encode + unsigned char packed_buf[4096]; + char err_buf[1024]; + + int packed_len = x2ap_asn_per_encode(pdu, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len != -1) { + printf("Encode successful, packed_len = %d\n", packed_len); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test encode error + x2ap_pdu_t* pdu1 = new_x2ap_pdu(); + x2ap_init_X2SetupRequest(pdu1); + + int packed_len1 = x2ap_asn_per_encode(pdu1, packed_buf, sizeof(packed_buf), + err_buf, sizeof(err_buf)); + if(packed_len1 != -1) { + printf("Encode successful, packed_len = %d\n", packed_len1); + } else { + printf("Encode Error: %s\n", err_buf); + } + + //Test decode + x2ap_pdu_t* pdu2 = new_x2ap_pdu(); + int rc = x2ap_asn_per_decode(pdu2, packed_buf, packed_len, err_buf, sizeof(err_buf)); + if(rc == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + x2ap_asn_print(pdu2, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + printf("index = %d\n", x2ap_get_index(pdu2)); + printf("procedureCode = %d\n", x2ap_get_procedureCode(pdu2)); + + + //Test decode error + x2ap_pdu_t* pdu3 = new_x2ap_pdu(); + int rc2 = x2ap_asn_per_decode(pdu3, packed_buf, 1, err_buf, sizeof(err_buf)); + if(rc2 == -1) { + printf("Decode error: %s\n", err_buf); + } else { + printf("Decode successful\n"); + } + + //Test X2SetupResponse + x2ap_pdu_t* pdu_resp = new_x2ap_pdu(); + x2ap_create_X2SetupResponse(pdu_resp, cfg); + x2ap_asn_print(pdu_resp, pdu_str, sizeof(pdu_str)); + printf("%s\n", pdu_str); + + //Test X2SetupFailure + x2ap_pdu_t* pdu_failure = new_x2ap_pdu(); + x2ap_create_X2SetupFailure(pdu_failure); + x2ap_asn_print(pdu_failure, pdu_str, sizeof(pdu_str)); + printf("%s \n", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.hpp new file mode 100644 index 0000000..d0c02d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap.hpp @@ -0,0 +1,72 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ASN_X2AP_HPP +#define ASN_X2AP_HPP + +#include +#include +#include + +#include "e2ap_config.hpp" + +typedef struct c__dummy00 x2ap_pdu_t; + +/*----------------------------------------------------------------------- + COMMON ROUTINES +------------------------------------------------------------------------- +*/ + +x2ap_pdu_t* new_x2ap_pdu(void); + +void x2ap_asn_print(x2ap_pdu_t* pdu, char* buf, size_t buf_size); + +int x2ap_asn_per_encode(x2ap_pdu_t* pdu, unsigned char* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_asn_per_decode(x2ap_pdu_t* pdu, unsigned char const* buf, size_t buf_size, + char* err_buf, size_t err_buf_size); + +int x2ap_get_index(x2ap_pdu_t* pdu); + +int x2ap_get_procedureCode(x2ap_pdu_t* pdu); + +/*----------------------------------------------------------------------- + MESSAGE GENERATORS +------------------------------------------------------------------------- +*/ +//X2Setup +bool x2ap_init_X2SetupRequest(x2ap_pdu_t* pdu); + +bool x2ap_create_X2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupResponse(x2ap_pdu_t* pdu, eNB_config &cfg); + +bool x2ap_create_X2SetupFailure(x2ap_pdu_t* pdu); + +//ENDCX2Setup +bool x2ap_create_ENDCX2SetupRequest(x2ap_pdu_t* pdu, eNB_config &cfg); + +/*----------------------------------------------------------------------- + TESTS +------------------------------------------------------------------------- +*/ +void test_X2Setup_codec(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp new file mode 100644 index 0000000..96ea81c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/asn_x2ap_wrapper.hpp @@ -0,0 +1,78 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef ASN_X2AP_PDU_WRAPPER_HPP +#define ASN_X2AP_PDU_WRAPPER_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define X2AP_PDU_DEFAULT_BUFFER_SIZE 4096 + +//Credit: copied from E2-Manager +struct X2APpduWrapper +{ + unsigned char* m_allocation_buffer; + size_t m_allocation_buffer_size; + + X2APpduWrapper(size_t allocation_buffer_size = X2AP_PDU_DEFAULT_BUFFER_SIZE) + { + m_allocation_buffer_size = allocation_buffer_size; + m_allocation_buffer = 0; + if (allocation_buffer_size) { + m_allocation_buffer = + new (std::nothrow) unsigned char[allocation_buffer_size]; + m_allocator.reset( + m_allocation_buffer, + m_allocation_buffer_size); // initialized correctly on + // allocation failure. + } + } + + ~X2APpduWrapper() + { + if (m_allocation_buffer) + delete[] m_allocation_buffer; + } + + asn::allocator& ref_allocator() { return m_allocator; } + + X2AP_PDU& ref_pdu() { return m_pdu; } + + // reset pdu and allocation buffer. Allows reusing. + void clear() + { + m_pdu.clear(); + m_allocator.reset(m_allocation_buffer, m_allocation_buffer_size); + } + + private: + X2AP_PDU m_pdu; + asn::allocator m_allocator; +}; + + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/e2ap_config.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/e2ap_config.hpp new file mode 100644 index 0000000..9182ed1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/ASN1/lib/e2ap_config.hpp @@ -0,0 +1,160 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_CONFIG_HPP +#define E2AP_CONFIG_HPP + +#include +#include + +enum enum_Transmission_Bandwidth { + enum_bw6, + enum_bw15, + enum_bw25, + enum_bw50, + enum_bw75, + enum_bw100, + enum_bw1 +}; + +enum enum_NRNRB{ + enum_nrb11, enum_nrb18, enum_nrb24, enum_nrb25, enum_nrb31, enum_nrb32, + enum_nrb38, enum_nrb51, enum_nrb52, enum_nrb65, enum_nrb66, enum_nrb78, + enum_nrb79, enum_nrb93, enum_nrb106, enum_nrb107, enum_nrb121, + enum_nrb132, enum_nrb133, enum_nrb135, enum_nrb160, enum_nrb162, + enum_nrb189, enum_nrb216, enum_nrb217, enum_nrb245, enum_nrb264, + enum_nrb270, enum_nrb273 +}; + +enum enum_NRSCS { + enum_scs15, enum_scs30, enum_scs60, enum_scs120 +}; + +class eNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* macro_eNB_ID; + int64_t pCI; + uint8_t* tAC; + uint8_t* eUTRANcellIdentifier; + + int64_t uL_EARFCN; + int64_t dL_EARFCN; + + enum_Transmission_Bandwidth uL_Bandwidth; + enum_Transmission_Bandwidth dL_Bandwidth; + + /*Default Constructor*/ + eNB_config() { + pLMN_Identity = (uint8_t*)"abc"; + macro_eNB_ID = (uint8_t*)"5"; + pCI = 0; + tAC = (uint8_t*)"ab"; + eUTRANcellIdentifier = (uint8_t*)"def"; + uL_EARFCN = 21400; + dL_EARFCN = 3400; + uL_Bandwidth = enum_bw25; + dL_Bandwidth = enum_bw50; + } +}; + +class gNB_config { + public: + uint8_t* pLMN_Identity; + uint8_t* gNB_ID; + int64_t nrpCI; + uint8_t* tAC; + uint8_t* nRcellIdentifier; + + int64_t uL_nRARFCN; + int64_t dL_nRARFCN; + + enum enum_NRNRB uL_NRNRB; + enum enum_NRNRB dL_NRNRB; + + enum enum_NRSCS uL_NRSCS; + enum enum_NRSCS dL_NRSCS; + + uint8_t ul_freqBandIndicatorNr; + uint8_t dl_freqBandIndicatorNr; + + std::string measurementTimingConfiguration; + + /*Default Constructor*/ + gNB_config() { + pLMN_Identity = (uint8_t*)"xyz"; + gNB_ID = (uint8_t*)"3"; + nrpCI = 1; + tAC = (uint8_t*)"ab"; + nRcellIdentifier = (uint8_t*)"gnb_id_123"; + uL_nRARFCN = 21400; + dL_nRARFCN = 21500; + + uL_NRNRB = enum_nrb11; + dL_NRNRB = enum_nrb121; + + uL_NRSCS = enum_scs15; + dL_NRSCS = enum_scs120; + + ul_freqBandIndicatorNr = 11; + dl_freqBandIndicatorNr = 12; + + measurementTimingConfiguration = "dummy timing"; + } +}; + +enum enum_RICactionType { + RICactionType_report, + RICactionType_insert, + RICactionType_policy +}; + +enum enum_RICcause { + RICcause_radioNetwork = 1, + RICcause_transport, + RICcause_protocol, + RICcause_misc, + RICcause_ric +}; + +struct RIC_action_t { + unsigned char action_id; + enum_RICactionType action_type; + bool isAdmitted = false; //for response/failure only + enum_RICcause notAdmitted_cause; //for response/failure only + unsigned int notAdmitted_subCause; //for response/failure only + + RIC_action_t() {;} + + RIC_action_t(unsigned char id, enum_RICactionType type) + { + action_id = id; + action_type = type; + } +}; + +struct RICsubscription_params_t { + uint16_t request_id = 0; + uint16_t seq_number = 0; + uint16_t ran_func_id = 0; + std::string event_trigger_def = ""; + + std::vector actionList; +} ; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.cpp @@ -0,0 +1,125 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "e2sim_defs.h" +#include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} + +options_t read_input_options_old(int argc, char* argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + // Parse command line options + static struct option long_options[] = + { + {"ipv4", required_argument, 0, 'i'}, + {"ipv6", required_argument, 0, 'I'}, + {"port", required_argument, 0, 'p'}, + {"verbose", no_argument, 0, 'v'}, + }; + + while(1) + { + int option_index = 0; + + char c = getopt_long(argc, argv, "i:I:p:", long_options, &option_index); + + if(c == -1) + break; + + switch(c) + { + case 'i': + options.server_ip = optarg; + break; + case 'I': + break; + case 'p': + options.server_port = atoi(optarg); + if(options.server_port < 1 || options.server_port > 65535) + { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + break; + + default: + LOG_E("Error: unknown input option: %c\n", optopt); + exit(1); + } + } + + return options; +} + +options_t read_input_options(int argc, char *argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + if(argc == 3) //user provided IP and PORT + { + options.server_ip = argv[1]; + options.server_port = atoi(argv[2]); + if(options.server_port < 1 || options.server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + } + else if(argc == 2) //user provided only IP + { + options.server_ip = argv[1]; + } + else if(argc == 1) + { + options.server_ip = (char*)DEFAULT_SCTP_IP; + } + else + { + LOG_I("Unrecognized option.\n"); + LOG_I("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + exit(1); + } + + return options; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/DEF/e2sim_defs.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef E2SIM_DEFS_H +#define E2SIM_DEFS_H + +// #include +#include +#include + +#define VERSION "1.2.0" //May 2019 +#define DEFAULT_SCTP_IP "127.0.0.1" +#define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) +#define X2AP_SCTP_PORT 36421 +#define RIC_SCTP_SRC_PORT 36422 +#define MAX_SCTP_BUFFER 10000 +#define WORKDIR_ENV "E2SIM_DIR" //environment variable + +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + +#define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} + +typedef struct SCTP_DATA { + unsigned char *data; + int len; +} sctp_data_t; + +typedef struct { + unsigned char buffer[MAX_SCTP_BUFFER]; + int len; +} sctp_buffer_t; + +typedef struct { + char* server_ip; + int server_port; + //... extend as needed +} options_t; + +options_t read_input_options(int argc, char *argv[]); + +#define min(a, b) ((a) < (b)) ? (a) : (b) + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.c b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.c new file mode 100644 index 0000000..6cad6cd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.c @@ -0,0 +1,196 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2sm.h" + +#include "ActionParameter-Item.h" +#include "ActionParameter-Value.h" +#include "PLMN-Identity.h" +#include "GlobalENB-ID.h" +#include "GlobalGNB-ID.h" +#include "Interface-ID.h" +#include "ProtocolIE-Field.h" +#include "InterfaceMessageType.h" +#include "InterfaceProtocolIE-Item.h" + +static PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { + + PLMN_Identity_t *plmnId = calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_PLMN_Identity, plmnId); + plmnId->size = 3; + plmnId->buf = calloc(1, 3); + memcpy(plmnId->buf, data, 3); + + return plmnId; +} + +static GNB_ID_t *createGnb_id(const unsigned char *data, int numOfBits) { + + if (numOfBits < 22 || numOfBits > 32) { + printf("[Error] GNB_ID_t number of bits = %d, needs to be 22 .. 32", numOfBits); + return NULL; + } + + GNB_ID_t *gnb = calloc(1, sizeof(GNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GNB_ID, gnb); + + gnb->present = GNB_ID_PR_gNB_ID; + gnb->choice.gNB_ID.size = numOfBits % 8 == 0 ? (unsigned int)(numOfBits / 8) : (unsigned int)(numOfBits / 8 + 1); + gnb->choice.gNB_ID.bits_unused = gnb->choice.gNB_ID.size * 8 - numOfBits; + gnb->choice.gNB_ID.buf = calloc(1, gnb->choice.gNB_ID.size); + memcpy(gnb->choice.gNB_ID.buf, data, gnb->choice.gNB_ID.size); + gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] = + ((unsigned)(gnb->choice.gNB_ID.buf[gnb->choice.gNB_ID.size - 1] >> (unsigned)gnb->choice.gNB_ID.bits_unused) + << (unsigned)gnb->choice.gNB_ID.bits_unused); + + return gnb; +} + +static GlobalGNB_ID_t *createGlobalGNB_ID(PLMN_Identity_t *plmnIdentity, GNB_ID_t *gnb) { + + GlobalGNB_ID_t *ggnbId = calloc(1, sizeof(GlobalGNB_ID_t)); + ASN_STRUCT_RESET(asn_DEF_GlobalGNB_ID, ggnbId); + + memcpy(&ggnbId->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ggnbId->gNB_ID, gnb, sizeof(GNB_ID_t)); + + return ggnbId; +} + +static Interface_ID_t *createInterfaceIDForGnb(GlobalGNB_ID_t *gnb) { + + Interface_ID_t *interfaceId = calloc(1, sizeof(Interface_ID_t)); + ASN_STRUCT_RESET(asn_DEF_Interface_ID, interfaceId); + + interfaceId->present = Interface_ID_PR_global_gNB_ID; + interfaceId->choice.global_gNB_ID = gnb; + + return interfaceId; +} + +static InterfaceMessageType_t *createInterfaceMessageInitiating(long procedureCode) { + + InterfaceMessageType_t *intMsgT = calloc(1, sizeof(InterfaceMessageType_t)); + ASN_STRUCT_RESET(asn_DEF_InterfaceMessageType, intMsgT); + + intMsgT->procedureCode = procedureCode; + intMsgT->typeOfMessage = TypeOfMessage_initiating_message; + + return intMsgT; +} + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void) +{ + //PLMN_Identity + unsigned char plmnidData[3] = {0x33, 0xF4, 0x55}; + PLMN_Identity_t *plmnid = createPLMN_ID(plmnidData); + // xer_fprint(stdout, &asn_DEF_PLMN_Identity, (void *)plmnid); + + //GNB_ID + unsigned char gnbData[3] = {0x99, 0xaa, 0xbb}; + GNB_ID_t *gnb = createGnb_id(gnbData, 26); + // xer_fprint(stdout, &asn_DEF_GNB_ID, (void *)gnb); + + //GlobalGNB_ID + GlobalGNB_ID_t *globaGnb = createGlobalGNB_ID(plmnid, gnb); + // xer_fprint(stdout, &asn_DEF_GlobalGNB_ID, (void *)globaGnb); + + //Interface_ID + Interface_ID_t *gnbInterfaceId = createInterfaceIDForGnb(globaGnb); + // xer_fprint(stdout, &asn_DEF_Interface_ID, (void *)gnbInterfaceId); + + //InterfaceMessageType + InterfaceMessageType_t *initiatingInterface = createInterfaceMessageInitiating(35); + + //EventTriggerDefinition + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t)); + ASN_STRUCT_RESET(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, eventTrigger); + + memcpy(&eventTrigger->interface_ID , gnbInterfaceId, sizeof(Interface_ID_t)); + + eventTrigger->interfaceDirection = 0; + memcpy(&eventTrigger->interfaceMessageType, initiatingInterface, sizeof(InterfaceMessageType_t)); + + return eventTrigger; +} + +#define E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + } while(0) + + +void test_eventTriggerDefinition(void) +{ + E2SM_gNB_X2_eventTriggerDefinition_t *eventTrigger = create_eventTriggerDefinition(); + + xer_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void *)eventTrigger); + printf("\n"); + + uint8_t *eventBuff; + int eventBuff_len; + + eventBuff_len = aper_encode_to_new_buffer(&asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, + 0, eventTrigger, (void **)&eventBuff); + + LOG_I("Encoded eventBuff_len = %d", eventBuff_len); + + //----------------------------------------------------------------------- + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + e2ap_asn1c_print_pdu(pdu); + + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICsubscription); + // E2AP_ASN1C_FIND_PROTOCOLIE_BY_ID(RICsubscriptionRequest_IEs_t, ie, request, ProtocolIE_ID_id_RICrequestID); + + assert( ie != NULL); + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)ie); + + +} + +// +// typedef struct ProtocolIE_Container_119P0 { +// A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; +// +// /* Context for parsing across buffer boundaries */ +// asn_struct_ctx_t _asn_ctx; +// } ProtocolIE_Container_119P0_t; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.h b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.h new file mode 100644 index 0000000..19f30a2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/E2SM/e2sm.h @@ -0,0 +1,30 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2SM_H +#define E2SM_H + +#include "E2SM-gNB-X2-eventTriggerDefinition.h" +#include "E2AP-PDU.h" +#include "e2ap_asn1c_codec.h" + +E2SM_gNB_X2_eventTriggerDefinition_t* create_eventTriggerDefinition(void); + +void test_eventTriggerDefinition(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml new file mode 100644 index 0000000..633baee --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml new file mode 100644 index 0000000..ddb071a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupRequest.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml new file mode 100644 index 0000000..896eed6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ENDCX2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 000000000001001000110100 + + + + + + + 253 + + + + + + 99 + + 02 F8 29 + + 000000000000011110101011000000010010 + + + + 02 F8 29 + + + + + 100 + + + 9 + + + 9 + + + + + + + 100 + + + 9 + + + 9 + + + + + + + + + + + + + + + + 04 05 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml new file mode 100644 index 0000000..8974693 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ErrorIndication.xml @@ -0,0 +1,21 @@ + + + 3 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml new file mode 100644 index 0000000..e4e3f38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type1.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 22 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml new file mode 100644 index 0000000..92bc727 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICindication_type2.xml @@ -0,0 +1,74 @@ + + + 205 + + + + + + 60030 + + + + 6 + 12 + + + + + 60003 + + + 10 + + + + 60017 + + + 100 + + + + 60028 + + + 100 + + + + 60029 + + + + + + + 60026 + + + 10 74 68 65 10 68 65 6C 40 + + + + 60027 + + + + 00 1B 40 80 80 00 00 08 00 6F 00 02 00 0C 00 F8 + 00 05 08 4D 86 D6 40 00 CB 00 20 31 32 33 34 35 + 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 33 + 34 35 36 37 38 39 31 32 33 34 35 00 CC 00 06 08 + 07 D0 20 03 E8 00 CE 00 0C 0B 49 6E 66 6F 72 6D + 61 74 69 6F 6E 01 17 00 08 00 33 32 31 34 35 36 + 30 01 13 00 01 23 00 CD 00 1B 00 00 D1 00 16 1A + 11 50 00 08 21 09 E0 41 41 42 42 43 43 44 44 45 + 45 5A 5A 59 58 + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml new file mode 100644 index 0000000..ab3ea11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 1 + 200 + + + + + 60003 + + + 33 + + + + 60033 + + + + 00 01 02 03 40 0b 16 02 00 23 40 + + + 60011 + + + + 255 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml new file mode 100644 index 0000000..ff95551 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionRequest_Ashwin.xml @@ -0,0 +1,50 @@ + + + 201 + + + + + + 60030 + + + + 2 + 1 + + + + + 60003 + + + 0 + + + + 60033 + + + + 10 54 65 73 10 54 65 73 40 1B 40 + + + 60011 + + + + 4 + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml new file mode 100644 index 0000000..b7ea847 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_RICsubscriptionResponse.xml @@ -0,0 +1,46 @@ + + + 201 + + + + + + 60030 + + + + 2 + 205 + + + + + 60003 + + + 0 + + + + 60012 + + + + + 60013 + + + + 1 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml new file mode 100644 index 0000000..53acf31 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupFailure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml new file mode 100644 index 0000000..9f0f286 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupRequest.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 11111111111111111111 + + + + + + + 20 + + + + + + 503 + + 13 30 23 + + 1111111111111111111100000000 + + + 00 00 + + 13 30 23 + + + + 0 + 0 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml new file mode 100644 index 0000000..af42d5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/E2AP_X2SetupResponse.xml @@ -0,0 +1,97 @@ + + + 6 + + + + + + 21 + + + + 13 30 23 + + + 00000010101100000011 + + + + + + + 20 + + + + + + 308 + + 13 30 23 + + 0000001010110000001100001010 + + + 64 03 + + 13 30 23 + + + + 18650 + 650 + + + + + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + + + + + + + + 24 + + + + + 13 30 23 + 80 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/reference_constants.txt b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/reference_constants.txt new file mode 100644 index 0000000..b9a3b54 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/XML/reference_constants.txt @@ -0,0 +1,16 @@ +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + + +-- Event Trigger Definition OCTET STRING contents +E2SM-gNB-X2-eventTriggerDefinition ::= SEQUENCE{ + interface-ID Interface-ID, + interfaceDirection InterfaceDirection, + interfaceMessageType InterfaceMessageType, + interfaceProtocolIE-List SEQUENCE (SIZE(1..maxofInterfaceProtocolIE)) OF InterfaceProtocolIE-Item OPTIONAL, + ... +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.c new file mode 100644 index 0000000..5205b16 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.c @@ -0,0 +1,143 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + assert(f); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + assert(rval.code == RC_OK); + + return pdu; +} + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.h new file mode 100644 index 0000000..1362638 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_asn1c_codec.h @@ -0,0 +1,44 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.cpp new file mode 100644 index 0000000..7d40bb2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.cpp @@ -0,0 +1,388 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) +{ + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + e2ap_asn1c_print_pdu(pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + int index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + case ProcedureCode_id_x2Setup: //X2Setup = 6 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received X2-SETUP-REQUEST"); + e2ap_handle_X2SetupRequest(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: //successfulOutcome + LOG_I("[E2AP] Received X2-SETUP-RESPONSE"); + e2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_endcX2Setup: //ENDCX2Setup = 36 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received ENDC-X2-SETUP-REQUEST"); + e2ap_handle_ENDCX2SetupRequest(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: //successfulOutcome + LOG_I("[E2AP] Received ENDC-X2-SETUP-RESPONSE"); + //no handler yet + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received ENDC-X2-SETUP-FAILURE"); + //no handler yet + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_ricSubscription: //RIC SUBSCRIPTION = 201 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-REQUEST"); + //e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + e2ap_handle_RICSubscriptionRequest_securityDemo(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_ricIndication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_ricIndication); + break; + } + break; + + case ProcedureCode_id_resourceStatusReportingInitiation: //9 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RESOURCE-STATUS-REQUEST"); + e2ap_handle_ResourceStatusRequest(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: //successfulOutcome + LOG_I("[E2AP] Received RESOURCE-STATUS-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RESOURCE-STATUS-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_resourceStatusReportingInitiation); + break; + } + break; + + case ProcedureCode_id_resourceStatusReporting: // 10 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RESOURCE-STATUS-UPDATE"); + break; + + default: + LOG_E("[E2AP] Unable to process message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_resourceStatusReporting); + break; + } + break; + + default: + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + break; + } +} + +/* +Simply send back X2SetupResponse +Todo: add more handling options (failure, duplicated request, etc.) +*/ +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_X2SetupResponse.xml"); + + LOG_D("[E2AP] Created X2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent X2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send X2-SETUP-RESPONSE to peer"); + } +} + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest.xml"); + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest_bad.xml"); + + LOG_D("[E2AP] Created RESOURCE-STATUS-REQUEST"); + + e2ap_asn1c_print_pdu(req_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(req_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-REQUEST to peer"); + } + +} + +/* +Simply send back ENDCX2SetupResponse +Todo: add more handling options (failure, duplicated request, etc.) +*/ +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupResponse.xml"); + + LOG_D("[E2AP] Created ENDC-X2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent ENDC-X2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send ENDC-X2-SETUP-RESPONSE to peer"); + } +} + +/* +Simply send back hard-coded RICSubscriptionResponse +Todo: add more handling options (failure, duplicated request, etc.) +*/ +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + + LOG_D("[E2AP] Created RIC-SUBSCRIPTION-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } +} + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + + LOG_D("[E2AP] Created RIC-SUBSCRIPTION-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + //Start sending RIC Indication + int count1 = 0, count2 = 0; + + E2AP_PDU_t* indication_type1 = e2ap_xml_to_pdu("E2AP_RICindication_type1.xml"); + E2AP_PDU_t* indication_type2 = e2ap_xml_to_pdu("E2AP_RICindication_type2.xml"); + + uint8_t *buf1, *buf2; + sctp_buffer_t data1, data2; + data1.len = e2ap_asn1c_encode_pdu(indication_type1, &buf1); + memcpy(data1.buffer, buf1, min(data1.len, MAX_SCTP_BUFFER)); + + data2.len = e2ap_asn1c_encode_pdu(indication_type2, &buf2); + memcpy(data2.buffer, buf2, min(data2.len, MAX_SCTP_BUFFER)); + + while(1){ + sleep(1); + //type1 + if(sctp_send_data(socket_fd, data1) > 0) { + count1++; + LOG_I("[SCTP] Sent RIC-INDICATION SgNBAdditionRequest Type 1, count1 = %d", count1); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION to peer"); + } + + sleep(1); + //type2 + if(sctp_send_data(socket_fd, data2) > 0) { + count2++; + LOG_I("[SCTP] Sent RIC-INDICATION SgNBAdditionRequest Type 2, count2 = %d", count2); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION to peer"); + } + } //end while + +} + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + //send back ResourceStatusResponse, followed by resource status update + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusResponse.xml"); + + LOG_D("[E2AP] Created RESOURCE-STATUS-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-RESPONSE to peer"); + } + + + //send ResourceStatusUpdate periodically + E2AP_PDU_t* update_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusUpdate.xml"); + + uint8_t *update_buf; + sctp_buffer_t update_data; + + update_data.len = e2ap_asn1c_encode_pdu(update_pdu, &update_buf); + memcpy(update_data.buffer, update_buf, min(update_data.len, MAX_SCTP_BUFFER)); + + while(1) { + // e2ap_asn1c_print_pdu(update_pdu); + + if(sctp_send_data(socket_fd, update_data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-UPDATE"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-UPDATE to peer"); + } + + sleep(1); + + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.hpp new file mode 100644 index 0000000..abc8f69 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/E2AP/e2ap_message_handler.hpp @@ -0,0 +1,43 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + +#include "e2sim_sctp.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.c b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.c @@ -0,0 +1,173 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.h" + +const int CLIENT_SEND_COUNT = 1; +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return -1; + } + + int server_fd; + if((server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + return -1; + } + + struct sockaddr_in server_addr; + memset(&server_addr, 0, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(server_port); + server_addr.sin_addr.s_addr = inet_addr(server_ip_str); + + if(bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + return -1; + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + return -1; + } + + assert(server_fd != 0); + + fprintf(stderr, "SCTP server started on %s:%d\n", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd; + + if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + return -1; + } + + struct sockaddr_in peer_addr; + memset(&peer_addr, 0, sizeof(struct sockaddr_in)); + peer_addr.sin_family = AF_INET; + peer_addr.sin_port = htons(server_port); + peer_addr.sin_addr.s_addr = inet_addr(server_ip_str); + // if(inet_pton(AF_INET, server_ip, &(peer_addr.sin_addr)) != 1) { + // printf("Error converting IP address (%s) to sockaddr_in structure\n", server_ip); + // return 0; + // } + + fprintf(stderr, "Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) == -1) { + perror("connect"); + return -1; + } + + assert(client_fd != 0); + + fprintf(stderr, "OK\n"); + + return client_fd; + +} + +//ssize_t sctp_send_to_socket(int sockfd, const void* buf, size_t len) +int sctp_send_to_socket(int sockfd, const void* buf, size_t len) +{ + int sent_len = 0; + + sent_len = send(sockfd, buf, len, 0); + + if(sent_len == -1) + { + perror("sctp_send_to_socket"); + return -1; + } + + return sent_len; +} + +// int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size) +// { +// //int len = 0; +// +// memset(buf, 0, buf_size); +// +// int len = recv(sockfd, &buf, buf_size, 0); +// if(len == -1) +// { +// perror("sctp_recv_from_socket"); +// return -1; +// } +// +// return len; +// } + + +//test only +void client_send_multiple_test_msg(int client_fd) +{ + char buf[1024]; + int SEND_COUNT = 4; + + for(int i = 0; i < SEND_COUNT; i++) + { + fprintf(stderr, "Sending message %d of %d \n", i+1, SEND_COUNT); + + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf)-1, "DATA %d", i+1); + + if(send(client_fd, &buf, strlen(buf), 0) == -1) { + perror("send"); + return; + } + + memset(buf, 0, sizeof(buf)); + + if(recv(client_fd, &buf, sizeof(buf), 0) == -1) { + perror("recv"); + return; + } + + fprintf(stderr, "Server reply: %s\n", buf); + + sleep(1); + } + + fprintf(stderr, "Closing...\n"); + if(close(client_fd) == -1) { + perror("close"); + return; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..de68ec7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.cpp @@ -0,0 +1,289 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.hpp" +// #include "e2sim_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + exit(1); + } + + int server_fd, af; + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + + server_addr = (struct sockaddr*)&server4_addr; + af = AF_INET; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + + server_addr = (struct sockaddr*)&server6_addr; + af = AF_INET6; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((server_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + exit(1); + } + + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + + if(bind(server_fd, server_addr, addr_len) == -1) { + perror("bind"); + exit(1); + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + exit(1); + } + + assert(server_fd != 0); + + LOG_I("[SCTP] Server started on %s:%d", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd, af; + + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + server_addr = (struct sockaddr*)&server4_addr; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + server_addr = (struct sockaddr*)&server6_addr; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + exit(1); + } + + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, server_addr, addr_len) == -1) { + perror("connect"); + exit(1); + } + assert(client_fd != 0); + + LOG_I("[SCTP] Connection established"); + + return client_fd; +} + +int sctp_accept_connection(const char *server_ip_str, const int server_fd) +{ + LOG_I("[SCTP] Waiting for new connection..."); + + struct sockaddr client_addr; + socklen_t client_addr_size; + int client_fd; + + //Blocking call + client_fd = accept(server_fd, &client_addr, &client_addr_size); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + exit(1); + } + + //Retrieve client IP_ADDR + char client_ip6_addr[INET6_ADDRSTRLEN], client_ip4_addr[INET_ADDRSTRLEN]; + if(strchr(server_ip_str, ':') != NULL) //IPv6 + { + struct sockaddr_in6* client_ipv6 = (struct sockaddr_in6*)&client_addr; + inet_ntop(AF_INET6, &(client_ipv6->sin6_addr), client_ip6_addr, INET6_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip6_addr); + } + else { + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip4_addr, INET_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip4_addr); + } + + return client_fd; +} + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = send(socket_fd, (void*)(&(data.buffer[0])), data.len, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + + return sent_len; +} + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + +} + +/* +Receive data from SCTP socket +Outcome of recv() +-1: exit the program +0: close the connection ++: new data +*/ +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data) +{ + //clear out the data before receiving + memset(data.buffer, 0, sizeof(data.buffer)); + data.len = 0; + + //receive data from the socket + int recv_len = recv(socket_fd, &(data.buffer), sizeof(data.buffer), 0); + if(recv_len == -1) + { + perror("[SCTP] recv"); + exit(1); + } + else if (recv_len == 0) + { + LOG_I("[SCTP] Connection closed by remote peer"); + if(close(socket_fd) == -1) + { + perror("[SCTP] close"); + } + return -1; + } + + data.len = recv_len; + + return recv_len; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.h b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/*! \file e2sim_sctp.h + */ + +#ifndef E2SIM_SCTP_H +#define E2SIM_SCTP_H + +void *handle_connection(void *thread_data); + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_send_to_socket(int sockfd, const void *buf, size_t len); + +//int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size); + +//test only +void client_send_multiple_test_msg(int client_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/SCTP/e2sim_sctp.hpp @@ -0,0 +1,39 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_SCTP_HPP +#define E2SIM_SCTP_HPP + +#include "e2sim_defs.h" + +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_accept_connection(const char *server_ip_str, const int server_fd); + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data); + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data); + +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml new file mode 100644 index 0000000..f0b6262 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 36 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml new file mode 100644 index 0000000..5f94d2e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_request.xml @@ -0,0 +1,67 @@ + + + 36 + + + + + + 244 + + + + + + 21 + + + + 61 62 63 + + + 00110101000000000001 + + + + + + + 250 + + + + + + 0 + + 61 62 63 + + 0110010001100101011001100000 + + + 61 62 + + 61 62 63 + + + + 21400 + 3400 + + + + + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml new file mode 100644 index 0000000..587b578 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_endc_x2_setup_response.xml @@ -0,0 +1,36 @@ + + + 36 + + + + + + 246 + + + + + + 252 + + + + 02 F8 29 + + + 01001010100101010010101010101010 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml new file mode 100644 index 0000000..3b82969 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_failure.xml @@ -0,0 +1,21 @@ + + + 6 + + + + + + 5 + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml new file mode 100644 index 0000000..3589f28 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_request.xml @@ -0,0 +1,57 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000100000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100010000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml new file mode 100644 index 0000000..bab51d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/MESSAGES/XML/sample_x2_setup_response.xml @@ -0,0 +1,69 @@ + + + 6 + + + + + + 21 + + + + 02 F8 39 + + + 00000000111000110000 + + + + + + + 20 + + + + + + 0 + + 02 F8 39 + + 0000000011100011000000000000 + + + 00 01 + + 02 F8 39 + + + + 21400 + 3400 + + + + + + + + + + + 24 + + + + + 02 F8 39 + 00 00 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.c new file mode 100644 index 0000000..959e7ef --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.c @@ -0,0 +1,64 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "x2ap_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +/* Encode X2AP PDU ASN1 buffer*/ +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + + assert(pdu != NULL); + assert(buffer != NULL); + assert(len != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, pdu, (void **)buffer); + + if (encoded < 0) + { + return -1; + } + + *len = encoded; + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, pdu); + return encoded; +} + +/* Decode XASN1 buffer to X2AP PDU*/ +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_X2AP_PDU, (void **)&pdu, buffer, + len, 0, 0); + + //xer_fprint(stdout, &asn_DEF_X2AP_PDU, pdu); + + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode pdu\n"); + return -1; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.cpp new file mode 100644 index 0000000..7f2e6be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.cpp @@ -0,0 +1,59 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "x2ap_asn_codec.hpp" + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + encoded_size = x2ap_asn_per_encode(pdu, buf, buf_size, err_buf, sizeof(err_buf)); + + if(encoded_size != -1) + { + LOG_D("[X2AP] ASN Encode successful, encoded_size = %d", encoded_size); + } + else + { + LOG_E("[X2AP] Encode error: %s", err_buf); + exit(1); + } + +} + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size) +{ + char err_buf[X2AP_ERROR_MESSAGE_BUFFER]; + + int rc = x2ap_asn_per_decode(pdu, buf, encoded_size, err_buf, sizeof(err_buf)); + if(rc == -1) { + LOG_E("[X2AP] Decode error: %s", err_buf); + } else { + LOG_D("[X2AP] ASN decode successful"); + } +} + +void x2ap_print_pdu(x2ap_pdu_t* pdu) +{ + char pdu_str[X2AP_PDU_PRINT_BUFFER]; + + x2ap_asn_print(pdu, pdu_str, sizeof(pdu_str)); + + LOG_D("[X2AP] %s", pdu_str); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.h new file mode 100644 index 0000000..bad3ae7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ASN_CODEC_H_ +#define X2AP_ASN_CODEC_H_ + +#include "X2AP-PDU.h" + +int X2AP_ASN_encode(X2AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) +__attribute__ ((warn_unused_result)); + +int X2AP_ASN_decode(X2AP_PDU_t *pdu, const uint8_t *const buffer, const int len); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.hpp new file mode 100644 index 0000000..a07f441 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_asn_codec.hpp @@ -0,0 +1,34 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_ASN_CODEC_HPP +#define X2AP_ASN_CODEC_HPP + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" + +#define X2AP_ERROR_MESSAGE_BUFFER 1024 +#define X2AP_PDU_PRINT_BUFFER 4096 + +void x2ap_encode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int buf_size, int &encoded_size); + +void x2ap_decode_pdu(x2ap_pdu_t* pdu, unsigned char* buf, int &encoded_size); + +void x2ap_print_pdu(x2ap_pdu_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.c b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.c new file mode 100644 index 0000000..db12a3e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.c @@ -0,0 +1,113 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "x2ap_generate_messages.h" +#include "x2ap_asn_codec.h" +#include "e2sim_defs.h" + +int asn1_xer_print = 0; +int MAX_XML_BUFFER = 10000; + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename) +{ + + uint8_t buf[MAX_XML_BUFFER]; + + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[200]; + char *work_dir = getenv(WORKDIR_ENV); + + strcpy(XML_path, work_dir); + strcat(XML_path, "/src/X2AP/MESSAGES/XML/"); + strcat(XML_path, filename); + + //printf("Generate X2AP PDU from XML file: %s\n", XML_path); + + f = fopen(XML_path, "r"); + assert(f); + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + fprintf(stderr, "%s: Too large input\n", XML_path); + exit(1); + } + + fclose(f); + + //printf("Decode the XER buffer\n"); + rval = xer_decode(NULL, &asn_DEF_X2AP_PDU, (void **)pdu, buf, size); + assert(rval.code == RC_OK); + +} + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_request.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer) +{ + X2AP_PDU_t *pdu; + pdu = (X2AP_PDU_t *)calloc(1, sizeof(X2AP_PDU_t)); + + uint32_t len; + + char *XML_file = "sample_x2_setup_response.xml"; + + x2ap_fetch_pdu_from_XML(&pdu, XML_file); + + if(asn1_xer_print) + xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)pdu); + + if(X2AP_ASN_encode(pdu, buffer, &len) < 0) + { + fprintf(stderr, "Failed to APER encode X2 Setup Request\n"); + return -1; + } + + return len; + +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.h b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.h new file mode 100644 index 0000000..53998b7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_generate_messages.h @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_GENERATE_MESSAGES_H_ +#define X2AP_ENB_GENERATE_MESSAGES_H_ + +#include "X2AP-PDU.h" + +void x2ap_fetch_pdu_from_XML(X2AP_PDU_t **pdu, char *filename); + +uint32_t x2ap_generate_x2_setup_request(uint8_t **buffer); + +uint32_t x2ap_generate_x2_setup_response(uint8_t **buffer); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.c b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.c new file mode 100644 index 0000000..4fa635e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.c @@ -0,0 +1,139 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "x2ap_message_handler.h" + +typedef int (*x2ap_message_decoded_handler)(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t *response); + +static int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t *response); + +/* Handlers matrix. Only eNB related procedure present here +/* rowID = procedureCode (start with 0) +*/ +x2ap_message_decoded_handler x2ap_messages_handler[][3] = { + { 0, 0, 0 }, /* handoverPreparation */ + { 0, 0, 0 }, /* handoverCancel */ + { 0, 0, 0 }, /* loadIndication */ + { 0, 0, 0 }, /* errorIndication */ + { 0, 0, 0 }, /* snStatusTransfer */ + { 0, 0, 0 }, /* uEContextRelease */ + { handle_x2_setup_request, handle_x2_setup_response, handle_x2_setup_failure }, /* x2Setup */ + { 0, 0, 0 }, /* reset */ + { 0, 0, 0 }, /* eNBConfigurationUpdate */ + { 0, 0, 0 }, /* resourceStatusReportingInitiation */ + { 0, 0, 0 }, /* resourceStatusReporting */ + { 0, 0, 0 }, /* privateMessage */ + { 0, 0, 0 }, /* mobilitySettingsChange */ + { 0, 0, 0 }, /* rLFIndication */ + { 0, 0, 0 }, /* handoverReport */ + { 0, 0, 0 }, /* cellActivation */ + { 0, 0, 0 }, /* x2Release */ + { 0, 0, 0 }, /* x2APMessageTransfer */ + { 0, 0, 0 }, /* x2Removal */ + { 0, 0, 0 }, /* seNBAdditionPreparation */ + { 0, 0, 0 }, /* seNBReconfigurationCompletion */ + { 0, 0, 0 }, /* meNBinitiatedSeNBModificationPreparation */ + { 0, 0, 0 }, /* seNBinitiatedSeNBModification */ + { 0, 0, 0 }, /* meNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBinitiatedSeNBRelease */ + { 0, 0, 0 }, /* seNBCounterCheck */ + { 0, 0, 0 } /* retrieveUEContext */ +}; + +char *x2ap_direction2String(int x2ap_dir) +{ + static char *x2ap_direction_String[] = { + "", /* Nothing */ + "Originating message", /* originating message */ + "Successfull outcome", /* successfull outcome */ + "UnSuccessfull outcome", /* successfull outcome */ + }; + return(x2ap_direction_String[x2ap_dir]); +} + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response) +{ + X2AP_PDU_t pdu; + int ret; + + memset(&pdu, 0, sizeof(pdu)); + + //printf("Decode the PDU \n"); + + if (X2AP_ASN_decode(&pdu, data, data_len) < 0){ + return -1; + } + + /* Checking procedure Code and direction of message */ + if (pdu.choice.initiatingMessage.procedureCode > sizeof(x2ap_messages_handler) + / (3 * sizeof(x2ap_message_decoded_handler)) + || (pdu.present > X2AP_PDU_PR_unsuccessfulOutcome)) { + + fprintf(stderr, "Either procedureCode %ld or direction %d exceed expected\n", + pdu.choice.initiatingMessage.procedureCode, pdu.present); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + if (x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1] == NULL) + { + fprintf(stderr, "No handler for procedureCode %ld in direction %s\n", + pdu.choice.initiatingMessage.procedureCode, + x2ap_direction2String(pdu.present - 1)); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return -1; + } + + /*calling the appropriate handler */ + ret = (*x2ap_messages_handler[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1])(&pdu, response); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_X2AP_PDU, &pdu); + return ret; +} + +int handle_x2_setup_request(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP REQUEST\n"); + + /* Todo: when to generate X2 Setup Failure??? + */ + + response->len = x2ap_generate_x2_setup_response(&response->data); + + return 0; +} + +int handle_x2_setup_response(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP RESPONSE\n"); + return 0; +} + +int handle_x2_setup_failure(X2AP_PDU_t *pdu, sctp_data_t* response) +{ + fprintf(stderr, "Received X2 SETUP FAILURE\n"); + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.cpp new file mode 100644 index 0000000..f818304 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "x2ap_message_handler.hpp" + + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) +{ + //decode the data into X2AP-PDU + x2ap_pdu_t* pdu = new_x2ap_pdu(); + + x2ap_decode_pdu(pdu, data.buffer, data.len); + + x2ap_print_pdu(pdu); + + int index = x2ap_get_index(pdu); + int procedureCode = x2ap_get_procedureCode(pdu); + + switch(procedureCode) + { + case 6: //X2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received X2 SETUP REQUEST"); + x2ap_handle_X2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + case 36: //ENDCX2Setup + switch(index) + { + case 1: //initiatingMessage + LOG_D("[X2AP] Received ENDC X2 SETUP REQUEST"); + x2ap_handle_ENDCX2SetupRequest(pdu, socket_fd); + break; + + case 2: //successfulOutcome + LOG_D("[X2AP] Received ENDC X2 SETUP RESPONSE"); + //x2ap_handle_X2SetupResponse(pdu, socket_fd); + break; + + case 3: + LOG_D("[X2AP] Received ENDC X2 SETUP FAILURE"); + break; + + default: + LOG_E("[X2AP] Invalid message index=%d in X2AP-PDU", index); + break; + } + break; + + default: + LOG_E("[X2AP] No available handler for procedureCode=%d", procedureCode); + break; + } +} + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back X2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + + x2ap_pdu_t* res_pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupResponse(res_pdu, cfg); + LOG_D("[X2AP] Created X2 SETUP RESPONSE") + + x2ap_print_pdu(res_pdu); + + //encode response pdu into buffer + sctp_buffer_t res_data; + x2ap_encode_pdu(res_pdu, res_data.buffer, sizeof(res_data.buffer), res_data.len); + + //send response data over sctp + if(sctp_send_data(socket_fd, res_data) > 0) { + LOG_D("[SCTP] Sent X2 SETUP RESPONSE"); + } else { + LOG_D("[SCTP] Unable to send X2 SETUP RESPONSE to peer"); + } +} + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd) +{ + ; +} + + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd) +{ + /* + Simply send back ENDCX2SetupResponse + Todo: add more handling options (failure, duplicated request, etc.) + */ + ; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.h b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.h new file mode 100644 index 0000000..9c9d6ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.h @@ -0,0 +1,30 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef X2AP_ENB_HANDLER_H_ +#define X2AP_ENB_HANDLER_H_ + +#include "x2ap_asn_codec.h" +#include "X2AP-PDU.h" +#include "e2sim_defs.h" +#include "x2ap_generate_messages.h" + +int x2ap_eNB_handle_message(const uint8_t *const data, const int data_len, sctp_data_t* response); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.hpp new file mode 100644 index 0000000..b3146c7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/src/X2AP/x2ap_message_handler.hpp @@ -0,0 +1,35 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef X2AP_MESSAGE_HANDLER_HPP +#define X2AP_MESSAGE_HANDLER_HPP + +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "asn_x2ap.hpp" +#include "x2ap_asn_codec.hpp" + +void x2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data); + +void x2ap_handle_X2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_X2SetupResponse(x2ap_pdu_t* pdu, int &socket_fd); + +void x2ap_handle_ENDCX2SetupRequest(x2ap_pdu_t* pdu, int &socket_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/CMakeLists.txt new file mode 100644 index 0000000..bf6c51c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/CMakeLists.txt @@ -0,0 +1,86 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(e2sim) + +set (HOME_DIR $ENV{HOME}) +#set (E2SIM_ROOT ../../../) + +include_directories("src") +include_directories("src/SCTP/") +include_directories("src/E2AP") +include_directories("src/E2AP/E2SM") +include_directories("ASN1c") + +find_library( SCTP_LIBRARY sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB E2AGENT_SOURCES + "src/e2agent.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(e2agent ${E2AGENT_SOURCES}) +target_link_libraries( e2agent ${SCTP_LIBRARY} ) + +#---------------------------------------------- +file(GLOB RICSIM_SOURCES + "src/ric_sim.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(ric_sim ${RICSIM_SOURCES}) +target_link_libraries( ric_sim ${SCTP_LIBRARY} ) + + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "src/x2term.cpp" + "src/e2sim_defs.cpp" + "src/SCTP/*.cpp" + "src/E2AP/*.c" + "src/E2AP/*.cpp" + "ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_LIBRARY} ) + + +#----------------------------------------------- +file(GLOB TEST + "src/test_asn1c.cpp" + "src/e2sim_defs.cpp" +# "src/SCTP/*.cpp" + "ASN1c/*.c" + "src/E2AP/*.c" + "src/E2AP/E2SM/*.c" + ) +add_executable(test_asn1c ${TEST}) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/test_asn1c.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/test_asn1c.cpp new file mode 100644 index 0000000..690f767 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Misc/test_asn1c.cpp @@ -0,0 +1,79 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + #include "e2sm.h" + +} + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("Test ASN1c"); + + test_eventTriggerDefinition(); + return 0; + + E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_X2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ENDCX2SetupFailure.xml"); + + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // E2AP_PDU_t* pdu = e2ap_xml_to_pdu("E2AP_ErrorIndication.xml"); + + e2ap_asn1c_print_pdu(pdu); + + /* Test encoding */ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + /* Test decoding */ + E2AP_PDU_t* pdu1 = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(pdu1, data.buffer, data.len); + + e2ap_asn1c_print_pdu(pdu1); + + int index = (int)pdu1->present; + + int pCode = e2ap_asn1c_get_procedureCode(pdu1); + + LOG_I("Index = %d, procedureCode = %d", index, pCode); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.c new file mode 100644 index 0000000..9b44adf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.c @@ -0,0 +1,180 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Pendulum_asn_codec.h" +#include "per_decoder.h" +#include "per_encoder.h" + +#include "OCTET_STRING.h" + +static int ASN_DEBUG = 0; + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len) +{ + ssize_t encoded; + assert(pend != NULL); + assert(buffer != NULL); + + encoded = aper_encode_to_new_buffer(&asn_DEF_Pendulum, 0, pend, (void **)buffer); + if(encoded < 0){ + perror("Failed to aper encode\n"); + exit(1); + } + + *len = encoded; + //ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_Pendulum, pend); + return encoded; +} + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len) +{ + asn_dec_rval_t dec_ret; + + // THIS IS IMPORTANT, otherwise: Segmentation fault + memset(pend, 0, sizeof(*pend)); + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_Pendulum, (void **)&pend, buffer, len, 0, 0); + if (dec_ret.code != RC_OK) { + fprintf(stderr, "ERROR: Failed to decode asn1 message\n"); + return -1; + } + + if(ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + return 0; +} + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg) +{ + //Create Pendulum payload struct + Pendulum_t *pend; + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + //convert char* to PrintableString_t* + PrintableString_t *payload = calloc(1, sizeof(PrintableString_t)); + payload->buf = (uint8_t *)msg; + payload->size = strlen(msg); + + pend->strval = payload; + pend->sequence = &sequence; + pend->angle = ∠ + pend->torque = &torque; + + if (ASN_DEBUG) + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //Encode Pendulum payload struct to asn1 buffer + uint32_t len; + if(pendulum_asn_encode(pend, buffer, &len) < 0) + { + return -1; + } + //fprintf(stderr, "len = %d\n", len); + + return len; +} + +long pendulum_get_sequence(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.sequence); +} + +double pendulum_get_angle(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.angle); +} + +double pendulum_get_torque(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + pendulum_asn_decode(&pend, buffer, len); + + return *(pend.torque); +} + +char* pendulum_get_strval(const uint8_t *const buffer, const int len) +{ + Pendulum_t pend; + char* str; + + pendulum_asn_decode(&pend, buffer, len); + + str = (char*)pend.strval->buf; + + return str; +} + +void test_pendulum_msg(void) +{ + uint8_t *buffer = NULL; + uint32_t len = 0; + double angle = 1.9; + len = pendulum_create_asn_msg(&buffer, 0, angle, 0, NULL); + + double ex_angle = pendulum_get_angle(buffer, len); + fprintf(stderr, "Extracted angle = %f\n", ex_angle); +} + +void test_pendulum_asn1(void) +{ + fprintf(stderr, "test_pendulum_asn1\n"); + + Pendulum_t *pend; + + long sequence = 0; /* OPTIONAL */ + double angle = 1.5; /* OPTIONAL */ + //double torque = 0.7; /* OPTIONAL */ + + pend = calloc(1, sizeof(Pendulum_t)); + if(!pend){ + perror("calloc() failed"); + exit(1); + } + + pend->sequence = &sequence; + pend->angle = ∠ + //pend->torque = &torque; + + xer_fprint(stdout, &asn_DEF_Pendulum, pend); + + //encode + uint8_t *buffer = NULL; + uint32_t len; + pendulum_asn_encode(pend, &buffer, &len); + fprintf(stderr, "len = %d\n", len); + + //decode + Pendulum_t dec_pend; + pendulum_asn_decode(&dec_pend, buffer, len); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.h b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.h new file mode 100644 index 0000000..3928caf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Pendulum_asn_codec.h @@ -0,0 +1,46 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef PENDULUM_ASN_CODEC_H_ +#define PENDULUM_ASN_CODEC_H_ + +#include "Pendulum.h" + +int pendulum_asn_encode(Pendulum_t *pend, uint8_t **buffer, uint32_t *len); + +int pendulum_asn_decode(Pendulum_t *pend, const uint8_t *const buffer, const int len); + +int pendulum_create_asn_msg(uint8_t **buffer, long sequence, + double angle, double torque, const char* msg); + +long pendulum_get_sequence(const uint8_t *const buffer, const int len); + +double pendulum_get_angle(const uint8_t *const buffer, const int len); + +double pendulum_get_torque(const uint8_t *const buffer, const int len); + +char* pendulum_get_strval(const uint8_t *const buffer, const int len); + +//For testing only + +void test_pendulum_msg(void); + +void test_pendulum_asn1(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.c new file mode 100644 index 0000000..e67465c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "stdio.h" +#include +#include + +#include "adruino_serial.h" + +int start_serial_inferface(int baudrate, char *serial_port) +{ + int fd = -1; + + fd = serialport_init(serial_port, baudrate); + if(fd == -1) { + fprintf(stderr, "couldn't open serial port %s\n", serial_port); + return -1; + } else { + fprintf(stderr, "Openning serial port: %s ...\n", serial_port); + } + + serialport_flush(fd); // take 2 seconds + fprintf(stderr, "Serial port ready!\n"); + + return fd; + +} + +int serial_readline(int fd, char* buf, int buf_max) +{ + if( fd == -1 ){ + perror("serial port not opened"); + return -1; + } + + memset(buf, 0, buf_max); + + do { + serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + } while( buf[0] == '\n' ); + + // serialport_read_until(fd, buf, SERIAL_EOL_CHAR, buf_max, SERIAL_TIMEOUT); + + return 0; +} + +int serial_writeline(int fd, char* buf) +{ + if(buf[strlen(buf)-1] != SERIAL_EOL_CHAR){ + //append EOL to buf + int len = strlen(buf); + buf[len] = SERIAL_EOL_CHAR; + buf[len+1] = '\0'; + } + + serialport_write(fd, buf); + + return 0; +} + +//For testing only +void test_adruino_serial(void) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1){ + fprintf(stderr, "[E2 Agent]: "); + fgets(buf, MAX_SERIAL_BUFFER, stdin); + + // serialport_write(fd, "hello\n"); + //serialport_write(fd, buf); + serial_writeline(fd, buf); + + serial_readline(fd, buf, MAX_SERIAL_BUFFER); + fprintf(stderr, "[Adruino] %s", buf); + } + + return; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.h b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.h new file mode 100644 index 0000000..c061f8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/adruino_serial.h @@ -0,0 +1,40 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef ADRUINO_SERIAL_H +#define ADRUINO_SERIAL_H + +#include "arduino-serial-lib.h" + +#define MAX_SERIAL_BUFFER 256 +#define DEFAULT_SERIAL_PORT "/dev/ttyACM0" +#define DEFAULT_BAUDRATE 115200 +#define SERIAL_EOL_CHAR '\n' +#define SERIAL_TIMEOUT 5000 //ms + +int start_serial_inferface(int baudrate, char *serial_port); + +int serial_readline(int fd, char* buf, int buf_max); + +int serial_writeline(int fd, char* buf); + +//For testing only +void test_adruino_serial(void); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c new file mode 100644 index 0000000..73cac84 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.c @@ -0,0 +1,170 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + +#include "arduino-serial-lib.h" + +#include // Standard input/output definitions +#include // UNIX standard function definitions +#include // File control definitions +#include // Error number definitions +#include // POSIX terminal control definitions +#include // String function definitions +#include + +// uncomment this to debug reads +//#define SERIALPORTDEBUG + +// takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1") +// and a baud rate (bps) and connects to that port at that speed and 8N1. +// opens the port in fully raw mode so you can send binary data. +// returns valid fd, or -1 on error +int serialport_init(const char* serialport, int baud) +{ + struct termios toptions; + int fd; + + //fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); + fd = open(serialport, O_RDWR | O_NONBLOCK ); + + if (fd == -1) { + perror("serialport_init: Unable to open port s"); + return -1; + } + + //int iflags = TIOCM_DTR; + //ioctl(fd, TIOCMBIS, &iflags); // turn on DTR + //ioctl(fd, TIOCMBIC, &iflags); // turn off DTR + + if (tcgetattr(fd, &toptions) < 0) { + perror("serialport_init: Couldn't get term attributes"); + return -1; + } + speed_t brate = baud; // let you override switch below if needed + switch(baud) + { + case 4800: brate=B4800; break; + case 9600: brate=B9600; break; + #ifdef B14400 + case 14400: brate=B14400; break; + #endif + case 19200: brate=B19200; break; + #ifdef B28800 + case 28800: brate=B28800; break; + #endif + case 38400: brate=B38400; break; + case 57600: brate=B57600; break; + case 115200: brate=B115200; break; + } + cfsetispeed(&toptions, brate); + cfsetospeed(&toptions, brate); + + // 8N1 + toptions.c_cflag &= ~PARENB; + toptions.c_cflag &= ~CSTOPB; + toptions.c_cflag &= ~CSIZE; + toptions.c_cflag |= CS8; + // no flow control + toptions.c_cflag &= ~CRTSCTS; + + //toptions.c_cflag &= ~HUPCL; // disable hang-up-on-close to avoid reset + + toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines + toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl + + toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw + toptions.c_oflag &= ~OPOST; // make raw + + // see: http://unixwiz.net/techtips/termios-vmin-vtime.html + toptions.c_cc[VMIN] = 0; + toptions.c_cc[VTIME] = 0; + //toptions.c_cc[VTIME] = 20; + + tcsetattr(fd, TCSANOW, &toptions); + if( tcsetattr(fd, TCSAFLUSH, &toptions) < 0) { + perror("init_serialport: Couldn't set term attributes"); + return -1; + } + + return fd; +} + +// +int serialport_close( int fd ) +{ + return close( fd ); +} + +// +int serialport_writebyte( int fd, uint8_t b) +{ + int n = write(fd,&b,1); + if( n!=1) + return -1; + return 0; +} + +// +int serialport_write(int fd, const char* str) +{ + int len = strlen(str); + int n = write(fd, str, len); + if( n!=len ) { + perror("serialport_write: couldn't write whole string\n"); + return -1; + } + return 0; +} + +// +int serialport_read_until(int fd, char* buf, char until, int buf_max, int timeout) +{ + char b[1]; // read expects an array, so we give it a 1-byte array + int i=0; + do { + int n = read(fd, b, 1); // read a char at a time + if( n==-1) return -1; // couldn't read + if( n==0 ) { + usleep( 1 * 1000 ); // wait 1 msec try again + timeout--; + if( timeout==0 ) return -2; + continue; + } +#ifdef SERIALPORTDEBUG + fprintf(stderr, "serialport_read_until: i=%d, n=%d b='%c'\n",i,n,b[0]); // debug +#endif + buf[i] = b[0]; + i++; + } while( b[0] != until && i < buf_max && timeout>0 ); + + buf[i] = 0; // null terminate the string + return 0; +} + +// +int serialport_flush(int fd) +{ + sleep(2); //required to make flush work, for some reason + return tcflush(fd, TCIOFLUSH); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h new file mode 100644 index 0000000..74fe592 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/Serial/arduino-serial-lib.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// +// arduino-serial-lib -- simple library for reading/writing serial ports +// +// 2006-2013, Tod E. Kurt, http://todbot.com/blog/ +// + + +#ifndef __ARDUINO_SERIAL_LIB_H__ +#define __ARDUINO_SERIAL_LIB_H__ + +#include // Standard types + +int serialport_init(const char* serialport, int baud); +int serialport_close(int fd); +int serialport_writebyte( int fd, uint8_t b); +int serialport_write(int fd, const char* str); +int serialport_read_until(int fd, char* buf, char until, int buf_max,int timeout); +int serialport_flush(int fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/demo_setup.txt b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/demo_setup.txt new file mode 100644 index 0000000..727edbd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/demo_setup.txt @@ -0,0 +1,14 @@ +# DEMO March 20, 2019 + ## E2 Agent Laptop with IP x.x.x.x + - Connect to adruino via USB + - Connect to E2 Termination Desktop via Ethernet + - Run E2 Agent: $E2SIM_DIR/build/e2sim x.x.x.x + + ## E2 Termination Desktop + - Run xApp + cd $E2SIM_DIR/rmr_interface/tests/pendulum_xapp + bash run_receiver + + - Run E2 Termination + cd $E2SIM_DIR + ./build_and_run_e2sim diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_closedloop.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_closedloop.c new file mode 100644 index 0000000..613ce57 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_closedloop.c @@ -0,0 +1,263 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include +#include +#include +#include +#include +#include //for close() +#include //for inet_ntop() + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" +#include "adruino_serial.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +static void pendulum_control_E2_agent(int client_fd) +{ + fprintf(stderr, "--------------------------------------\n"); + fprintf(stderr, "E2 AGENT - START PENDULUM CONTROL\n"); + fprintf(stderr, "--------------------------------------\n"); + + uint8_t *buffer; + uint32_t len; + clock_t begin; + double rtt; //ms + + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len; + + double angle; + double torque; + long sqn; + int count = 0; + + //serial + // int serial_fd; + char serial_buffer[MAX_SERIAL_BUFFER]; + // serial_fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + // + // char *delay_str_prev = "$0#\n"; + // //char *delay_str_new; + // + // int MSG_NUM = 10; + // + // //Always start with 0 delay + // serialport_write(serial_fd, "$0#\n"); + + // for(int i = 0; i < MSG_NUM; i++) + while(1) + { + + fprintf(stderr, "----------------\n"); + count += 1; + buffer = NULL; + len = 0; + + // //1.Read from serial + // serial_readline(serial_fd, serial_buffer, MAX_SERIAL_BUFFER); + // if(serial_buffer[0] == '\n') + // { + // //fprintf(stderr, "RECEIVED EOL\n"); + // continue; + // } + // //fprintf(stderr, "[Adruino] %s", serial_buffer); + usleep(5*1000); + + snprintf(serial_buffer, sizeof(serial_buffer)-1, "E2 AGENT PING"); + + begin = clock(); + + //2. Encode pendulum angle to ASN1 message + + len = pendulum_create_asn_msg(&buffer, 0, 0, 0, serial_buffer); + + //3. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + fprintf(stderr, "Sent ASN1 message to E2 Termination\n"); + } + + // 4. Receive response from E2 Termination + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = 0; + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return; + } + + char *recv_str; + recv_str = pendulum_get_strval(recv_buf, recv_len); + fprintf(stderr, "Received response message #%d from xApp: %s\n", count, recv_str); + + // 5. TODO: Send response to serial + // Compare if delay has changed: + // if(strcmp(delay_str_prev, recv_str) != 0) { + // serial_writeline(serial_fd, recv_str); + // } + + //serial_writeline(serial_fd, recv_str); + + //Write to a file + FILE *f; + f = fopen("arduino_delay.txt", "w"); + fprintf(f, "%s", recv_str); + fclose(f); + + begin = clock() - begin; + rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + fprintf(stderr, "E2Agent-RIC-E2Agent RTT = %f ms\n", rtt); + + } + + close(client_fd); +} + +int main(int argc, char *argv[]) +{ + fprintf(stderr, "E2 AGENT - PENDULUM CONTROL. Version %s\n", VERSION); + + // char *recv_str = "9"; + // int delay; + // + // printf("delay = %d\n", atoi(recv_str)); + // + // long delay = 22.5; + // + // printf("delay = %d\n", (int)delay); + // return 0; + + // test_rmr(); return 0; + // test_adruino_serial(); return 0; + + char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + int server_fd; + int client_fd; + struct sockaddr client_addr; + socklen_t client_addr_size; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n" , server_port); + return -1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + fprintf(stderr, "Unrecognized option.\n"); + fprintf(stderr, "Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return -1; + } + + server_fd = sctp_start_server(server_ip, server_port); + + fprintf(stderr, "Waiting for connection...\n"); + client_fd = accept(server_fd, &client_addr, &client_addr_size); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + return -1; + } + + //Todo: retrieve client ip addr + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + char client_ip_addr[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip_addr, INET_ADDRSTRLEN); + + fprintf(stderr, "New client connected from %s\n", client_ip_addr); + + // while(1) //put while loop if want to receive from multiple clients + // { + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + memset(recv_buf, 0, sizeof(recv_buf)); + + fprintf(stderr, "------------------------\n"); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + else if(recv_len == 0) + { + fprintf(stderr, "\nConnection from %s closed by remote peer\n", client_ip_addr); + if(close(client_fd) == -1) + { + perror("close"); + } + return -1; + } + + //fprintf(stderr, "Received a message of size %d\n", recv_len); + + //TODO: check PPID here before calling x2ap handler + + sctp_data_t response = {NULL, 0}; + x2ap_eNB_handle_message(recv_buf, recv_len, &response); + + //======================================================================= + //reply to client + assert(response.data != NULL); + if(sctp_send_to_socket(client_fd, response.data, (size_t)response.len) > 0){ + fprintf(stderr, "Sent X2 SETUP RESPONSE \n"); + } else{ + perror("send to socket"); + return -1; + } + + fprintf(stderr, "X2 Setup Completed \n"); + + //========================================================================= + // Pendulum interaction + // Send pendulum state to E2 Termination and receive response + pendulum_control_E2_agent(client_fd); + // } //end while + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_serial.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_serial.c new file mode 100644 index 0000000..33fa0ba --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_serial.c @@ -0,0 +1,56 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include "e2sim_defs.h" +#include + +#include "adruino_serial.h" + +int main(int argc, char *argv[]) +{ + int fd; + char buf[MAX_SERIAL_BUFFER]; + + fd = start_serial_inferface(DEFAULT_BAUDRATE, DEFAULT_SERIAL_PORT); + + while(1) + { + //usleep(5*1000); //sleep 5ms between read + sleep(1); + + FILE *f; + f = fopen("arduino_delay.txt", "r"); + assert(f); + + fread(buf, 1, sizeof(buf), f); + + printf("delay content = %s \n", buf); + + serial_writeline(fd, buf); + + fclose(f); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_test_client.c b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_test_client.c new file mode 100644 index 0000000..c96a440 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2sim_test_client.c @@ -0,0 +1,378 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_defs.h" +#include "e2sim_sctp.h" +#include "x2ap_message_handler.h" + +#include "x2ap_generate_messages.h" + +//OSN 2019 +#include "Pendulum_asn_codec.h" + +//rmr +#include +#include +#include +#include "rmr_wrapper.h" + +//time +#include + +//these are the metrics being sent to the a1 mediator +int ave_ric_rtt_last_epoch=0; +int ave_msg_rate_last_epoch=0; +int ave_pendulum_msg_rate_last_epoch=0; + +int total_rtt_current_epoch=0; +int total_messages_current_epoch=0; +int total_pendulum_messages_current_epoch=0; + +int total_rtt_entries_current_epoch=0; + +int epoch_duration = 1;//in seconds + +long rtt_epoch_start_time =0; + +long msg_rate_epoch_start_time =0; +long pendulum_msg_rate_epoch_start_time = 0; + +long current_timestamp_in_us(){ + struct timeval currentTime; + gettimeofday(¤tTime, NULL); + return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec; +} +void update_rtt_metrics(long rtt){//called every time there is a new rtt measurement + if(rtt_epoch_start_time == 0) + rtt_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + + total_rtt_current_epoch = total_rtt_current_epoch+rtt; + total_rtt_entries_current_epoch++; + + if((current_timestamp_in_us() - rtt_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_ric_rtt_last_epoch = total_rtt_current_epoch/total_rtt_entries_current_epoch; + total_rtt_current_epoch =0; + rtt_epoch_start_time = 0; + } +} + +void update_msg_rate_metrics(){ + if(msg_rate_epoch_start_time == 0) + msg_rate_epoch_start_time= current_timestamp_in_us(); //start of a new epoch + total_messages_current_epoch++; + if((current_timestamp_in_us() - msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_msg_rate_last_epoch = total_messages_current_epoch; + total_messages_current_epoch =0; + msg_rate_epoch_start_time =0; + } +} + +void update_pendulum_control_rate() +{ + if(pendulum_msg_rate_epoch_start_time == 0) + pendulum_msg_rate_epoch_start_time = current_timestamp_in_us(); //start of a new epoch + total_pendulum_messages_current_epoch++; + + if((current_timestamp_in_us() - pendulum_msg_rate_epoch_start_time) > (epoch_duration*1000000)){//an epoch has passed + ave_pendulum_msg_rate_last_epoch = total_pendulum_messages_current_epoch; + total_pendulum_messages_current_epoch = 0; + pendulum_msg_rate_epoch_start_time = 0; + } + +} + +void send_metrics_to_a1_med(struct rmr_context *rmr_c){ + int mtype=103; + char* metrics= malloc(1024); + int time_int = current_timestamp_in_us()/1000000; + //int ave_msg_rate_last_epoch=500; + snprintf(metrics, 1024, "{%s:%d, %s:%d, %s:%d, %s:%d}", \ + "\"latency\"", ave_ric_rtt_last_epoch/1000, \ + "\"ricload\"",ave_msg_rate_last_epoch, \ + "\"load\"",ave_pendulum_msg_rate_last_epoch, \ + "\"time\"",time_int); + rmr_send_wrapper(rmr_c, mtype, metrics); + printf("Sent message of type:%d to a1_med with content:%s\n",mtype,metrics); +} + +void forward_to_load_consumer(struct rmr_context *rmr_c){//the content does not matter + int mtype=105; + char* load_message="dummy load"; + rmr_send_wrapper(rmr_c, mtype, load_message); + printf("Sent message of type:%d to load consumer with content:%s\n",mtype,load_message); +} + +static void pendulum_control_E2_Termination(int client_fd) +{ + printf("--------------------------------------\n"); + printf("E2 TERMINATION - START PENDULUM CONTROL\n"); + printf("--------------------------------------\n"); + + uint8_t *send_buffer; + uint8_t recv_buffer[1024]; + uint32_t send_len; + uint32_t recv_len; + + clock_t begin = clock(); + double rtt; + double rtt_stats[100000]; + long recv_count = 0; + long fail_count = -1; //ignore the first message (see adruino code) + + long sqn; + int count = 0; + + //================================= + + //Setup context + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "E2TERM_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMR to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + + //================================== + long loop_start_time = 0; + while(1){ + printf("----------------\n"); + count += 1; + loop_start_time = current_timestamp_in_us(); + //0. Receiving ASN message from E2 Agent + memset(recv_buffer, 0, sizeof(recv_buffer)); + printf("Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + recv_len = 0; + + printf(" 1Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + //long time_of_message_from_e2agent = current_timestamp_in_us(); + + if((recv_len = recv(client_fd, &recv_buffer, sizeof(recv_buffer), 0)) == -1) { + perror("recv"); + return; + } + + long time_of_message_from_e2agent = current_timestamp_in_us(); + + printf(" 2Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + if(recv_len == 0) { + rmr_close_wrapper(rmr_c); + + printf("Connection from closed by remote peer.\n"); + if(close(client_fd) == -1) { + perror("close"); + } + return; + } + + printf(" 3Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // begin = clock() - begin; + // rtt = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + //printf("E2Term-Adruino-E2Term = %f ms\n", rtt); + + //2. Decode ASN message and Extract pendulum angle + char *recv_str; + recv_str = pendulum_get_strval(recv_buffer, recv_len); + // if( (strcmp(recv_str, "-1") == 0) || (strcmp(recv_str, "") == 0) ) + + if(strcmp(recv_str, "\n") == 0) + { + printf("RECEIVED EOL\n"); + } + + printf(" 4Time to receive asn message after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + // if(atof(recv_str) <= 0) + // { + // printf("FAILLLLLL\n"); + // fail_count += 1; + // } + // else { + // rtt_stats[recv_count] = atof(recv_str); + // recv_count++; + // } + + printf("Time to receive angle message from arduino after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); + printf("Received message #%d from Adruino: %s\n", count, recv_str); + //printf("Last reported RTT (Adruino-RIC-Adruino): %f ms, fail_count = %ld\n", + // atof(recv_str)/1000, fail_count); + + // 3. [BHARATH] send_to_xApp(&pendulum_state, &response) + // while(1) { + // usleep( 10 ); + // char* message = "foo 111"; + char reply[1024]; + int got_pend_control=0; + rmr_send_wrapper(rmr_c, mtype, recv_str ); + printf("Sent message of type:%d to pendulum xApp with content:%s\n",mtype,recv_str); + long angle_receive_time =0; + while (got_pend_control == 0){ + if(rmr_poll_for_message(rmr_c) == 1) { + update_msg_rate_metrics(); + switch(rmr_c->rbuf->mtype) { + case 33 : + angle_receive_time = current_timestamp_in_us(); + got_pend_control=1; + update_pendulum_control_rate(); //add this + strcpy(reply,rmr_c->rbuf->payload); + printf("Received control message from pendulum xapp with message type: %d and content %s\n",rmr_c->rbuf->mtype, reply); + break; + case 102 : + printf("Received METRIC request from A1 mediator with message type: %d and content %s\n",rmr_c->rbuf->mtype,rmr_c->rbuf->payload); + send_metrics_to_a1_med(rmr_c); + break; + case 104 : + printf("***************************Received load from load generator****************************"); + forward_to_load_consumer(rmr_c); + break; + default : + continue; + } + } + + } + printf("Time to receive control message from xapp after starting main loop: %ld microseconds \n",current_timestamp_in_us() - loop_start_time); +// snprintf(reply, 1024, "$%d#\n", (int)ave_ric_rtt_last_epoch/1000); + send_len = pendulum_create_asn_msg(&send_buffer, 0, 0, 0, reply); + printf("Time to create asn message after receiving angle: %ld microseconds\n",current_timestamp_in_us() - angle_receive_time); + begin = clock(); + + //6. Send ASN1 message to socket + if(sctp_send_to_socket(client_fd, send_buffer, (size_t)send_len) > 0){ + printf("Sent ASN1 response to E2 Agent\n"); + } + long time_of_reply_to_e2agent = current_timestamp_in_us(); + printf("Time to send asn message after receiving angle: %ld microseconds \n",current_timestamp_in_us() - angle_receive_time); + long rtt = (time_of_reply_to_e2agent - time_of_message_from_e2agent); + ave_ric_rtt_last_epoch = rtt; + printf("RIC RTT is %lf milliseconds\n", rtt/1000.0); + //update_rtt_metrics(rtt); + } + + rmr_close_wrapper(rmr_c); + +} + +int main(int argc, char* argv[]) +{ + // test_rmr(); return 0; + + const char* server_ip = DEFAULT_SCTP_IP; + int server_port = X2AP_SCTP_PORT; + + //read input + if(argc == 3) //user provided IP and PORT + { + server_ip = argv[1]; + server_port = atoi(argv[2]); + if(server_port < 1 || server_port > 65535) { + printf("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return 1; + } + } + else if(argc == 2) //user provided only IP + { + server_ip = argv[1]; + } + else if(argc == 1) + { + server_ip = DEFAULT_SCTP_IP; + } + else + { + printf("Unrecognized option.\n"); + printf("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + return 0; + } + + int client_fd; + client_fd = sctp_start_client(server_ip, server_port); + + uint8_t *buffer; + uint32_t len; + + //Note: put a while(1) loop here if want client to stay + // for(int i = 0; i < 3; i++) + // { + buffer = NULL; + len = 0; + + printf("------------------------\n"); + clock_t begin; + begin = clock(); + + //Create pdu for x2 message and send to socket + len = x2ap_generate_x2_setup_request(&buffer); + if(sctp_send_to_socket(client_fd, buffer, (size_t)len) > 0){ + printf("Sent X2 SETUP REQUEST\n"); + } + + //======================================================================= + //printf("waiting for server response\n"); + uint8_t recv_buf[MAX_SCTP_BUFFER]; + int recv_len = 0; + + //sctp_recv_from_socket(client_fd, recv_buf, sizeof(recv_buf)); + memset(recv_buf, 0, sizeof(recv_buf)); + recv_len = recv(client_fd, &recv_buf, sizeof(recv_buf), 0); + if(recv_len == -1) + { + perror("recv()"); + return -1; + } + + //printf("Received a message of size %d\n", recv_len); + x2ap_eNB_handle_message(recv_buf, recv_len, NULL); + + begin = clock() - begin; + double time_taken = 1000*((double)begin)/CLOCKS_PER_SEC; // in ms + printf("Close-loop time: %f ms \n", time_taken); + printf("X2 Setup Completed \n"); + + // } //end iteration + + //========================================================================= + // Pendulum interaction + // Receive pendulum state from E2 Agent and send response + pendulum_control_E2_Termination(client_fd); + + close(client_fd); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2termination_test.cpp new file mode 100644 index 0000000..b65ac65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/e2termination_test.cpp @@ -0,0 +1,223 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + + +#include "e2sim_defs.h" +#include "asn_e2ap.hpp" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "e2ap_asn_codec.hpp" + +using namespace std; + +void test_send_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_X2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + } + +void test_send_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + e2ap_pdu_t* pdu = new_e2ap_pdu(); + eNB_config cfg; + + e2ap_create_ENDCX2SetupRequest(pdu, cfg); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //wait to receive response + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_send_RICSubscriptionRequest(int &client_fd) +{ + LOG_I("Test RIC SUBSCRIPTION"); + + /* Create RIC SUBSCRITION REQUEST */ + e2ap_pdu_t* pdu = new_e2ap_pdu(); + + RICsubscription_params_t params; + params.request_id = 2; + params.seq_number = 200; + params.ran_func_id = 0; + params.event_trigger_def = "hello world"; + + RIC_action_t action1(1, RICactionType_report); + // RIC_action_t action2(3, RICactionType_insert); + // RIC_action_t action3(5, RICactionType_insert); + // RIC_action_t action4(7, RICactionType_insert); + params.actionList.push_back(action1); + // params.actionList.push_back(action2); + // params.actionList.push_back(action3); + // params.actionList.push_back(action4); + + e2ap_create_RICsubscriptionRequest(pdu, params); + e2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + e2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + //wait to receive response and indication (if any) + sctp_buffer_t recv_buf; + LOG_I("[SCTP] Waiting for SCTP data"); + while(1) + { + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } + else + break; + + } + + + return; + //========================================================================== + + //decode + e2ap_pdu_t* pdu2 = new_e2ap_pdu(); + + e2ap_decode_pdu(pdu2, data.buffer, data.len); + + RICsubscription_params_t params2; + e2ap_parse_RICsubscriptionRequest(pdu2, params2); + printf("request_id = %d\n", params2.request_id); + printf("seq_number = %d\n", params2.seq_number); + printf("ran_func_id = %d\n", params2.ran_func_id); + printf("event = %s\n", ¶ms2.event_trigger_def[0]); + + for( auto const &a : params.actionList) + { + printf("action id = %d, action type = %d\n", (int)a.action_id, (int)a.action_type); + } + + + LOG_I("================= RESPONSE ==========================="); + for(size_t i = 0; i < params2.actionList.size(); i++) + { + //example logic: admit every other action + if(i%2 == 0) { + params2.actionList[i].isAdmitted = true; + } else { + params2.actionList[i].isAdmitted = false; + params2.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params2.actionList[i].notAdmitted_subCause = 5; + } + } + + e2ap_pdu_t* res_pdu = new_e2ap_pdu(); + e2ap_create_RICsubscriptionResponse(res_pdu, params2); + + e2ap_print_pdu(res_pdu); + + //Encode into buffer + sctp_buffer_t data_resp; + e2ap_encode_pdu(res_pdu, data_resp.buffer, sizeof(data_resp.buffer), data_resp.len); + + LOG_I("================= FAILURE ==========================="); + e2ap_pdu_t* fail_pdu = new_e2ap_pdu(); + + RICsubscription_params_t params3; + e2ap_parse_RICsubscriptionRequest(pdu2, params3); + + for(size_t i = 0; i < params3.actionList.size(); i++) + { + params3.actionList[i].isAdmitted = false; + params3.actionList[i].notAdmitted_cause = RICcause_radioNetwork; + params3.actionList[i].notAdmitted_subCause = 5; + } + + e2ap_create_RICsubscriptionFailure(fail_pdu, params3); + e2ap_print_pdu(fail_pdu); + + //Encode into buffer + sctp_buffer_t data_fail; + e2ap_encode_pdu(fail_pdu, data_fail.buffer, sizeof(data_fail.buffer), data_fail.len); + +} + +int main(int argc, char* argv[]){ + + LOG_I("E2 Termination Test"); + + // test_send_RICSubscriptionRequest(); + // return 0; + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //--------------------------------------------------- + // test_send_X2Setup(client_fd); + test_send_ENDCX2Setup(client_fd); + test_send_RICSubscriptionRequest(client_fd); + + //--------------------------------------------------- + + close(client_fd); + LOG_I("[SCTP] Connection closed."); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/pendulum.asn1 b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/pendulum.asn1 new file mode 100644 index 0000000..d36a4de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/Pendulum/pendulum.asn1 @@ -0,0 +1,12 @@ +PendulumModule DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Pendulum ::= SEQUENCE { + sequence INTEGER OPTIONAL, + angle REAL OPTIONAL, + torque REAL OPTIONAL, + strval PrintableString OPTIONAL +} + +END diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/CMakeLists.txt new file mode 100644 index 0000000..4faee6a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/CMakeLists.txt @@ -0,0 +1,59 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB WLG_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_wlg.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_wlg ${WLG_SOURCES}) +target_link_libraries( ric_wlg ${SCTP_STD_LIB} ) + +#---------------------------------------------- +file(GLOB RICPERF_SOURCES + "${E2SIM_ROOT}/test/WLG/ric_perf.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(ric_perf ${RICPERF_SOURCES}) +target_link_libraries( ric_perf ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/build_wlg.sh b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/build_wlg.sh new file mode 100644 index 0000000..2f81b56 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/build_wlg.sh @@ -0,0 +1,27 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +set -e + +mkdir -p build +cd build +rm -rf CMakeCache.txt +cmake .. +make -j`nproc` diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_perf.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_perf.cpp new file mode 100644 index 0000000..9403283 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_perf.cpp @@ -0,0 +1,287 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + sctp_send_data(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + +void set_seqnum(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + // xer_fprint(stdout, &asn_DEF_InitiatingMessage, (void *)initiatingMessage); + + RICsubscriptionRequest_t *request = &initiatingMessage->value.choice.RICsubscriptionRequest; + xer_fprint(stdout, &asn_DEF_RICsubscriptionRequest, (void *)request); + + LOG_I("num of IEs = %d", request->protocolIEs.list.count); + + RICsubscriptionRequest_IEs_t *ie; + + ie = request->protocolIEs.list.array[2]; + + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ie); + + // e2ap_asn1c_print_pdu(pdu); +} + +int subresponse_get_sequenceNum(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + // xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + return requestid->ricRequestSequenceNumber; + break; + } + } +} + +void subrequest_set_sequenceNum(E2AP_PDU_t* pdu, int seq) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + requestid->ricRequestSequenceNumber = seq; + break; + } + } + +} + +void subscription_response_get_field(E2AP_PDU_t* pdu) +{ + SuccessfulOutcome_t *responseMsg = pdu->choice.successfulOutcome; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int requestID_val, sequenceNum; + + int num_IEs = responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionResponse_IEs_t *memb_ptr = + responseMsg->value.choice.RICsubscriptionResponse.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + requestID_val = requestid->ricRequestorID; + sequenceNum = requestid->ricRequestSequenceNumber; + requestid->ricRequestSequenceNumber = 202; + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + // case (ProtocolIE_ID_id_RICsubscription): + // ricsubscription = &memb_ptr->value.choice.RICsubscription; + // xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + // break; + } + } + + LOG_I("Request ID = %d, seq = %d", requestID_val, sequenceNum); +} + +void subscription_request_get_field(E2AP_PDU_t* pdu) +{ + InitiatingMessage_t *initiatingMessage = pdu->choice.initiatingMessage; + + RICrequestID_t *requestid; + RANfunctionID_t * ranfunctionid; + RICsubscription_t * ricsubscription; + + int num_IEs = initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.count; + + LOG_I("num of IEs = %d", num_IEs); + + for(int edx = 0; edx < num_IEs; edx++) + { + RICsubscriptionRequest_IEs_t *memb_ptr = + initiatingMessage->value.choice.RICsubscriptionRequest.protocolIEs.list.array[edx]; + + switch(memb_ptr->id) + { + case (ProtocolIE_ID_id_RICrequestID): + requestid = &memb_ptr->value.choice.RICrequestID; + xer_fprint(stdout, &asn_DEF_RICrequestID, (void *)requestid); + break; + + case (ProtocolIE_ID_id_RANfunctionID): + ranfunctionid = &memb_ptr->value.choice.RANfunctionID; + xer_fprint(stdout, &asn_DEF_RANfunctionID, (void *)ranfunctionid); + break; + + case (ProtocolIE_ID_id_RICsubscription): + ricsubscription = &memb_ptr->value.choice.RICsubscription; + xer_fprint(stdout, &asn_DEF_RICsubscription, (void *)ricsubscription); + break; + } + } +} + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator - Performance Test"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //1. Send ENDCX2Setup + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_ENDCX2SetupRequest.xml"); + // e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //2. Receive ENDCX2SetupResponse + wait_for_sctp_data(client_fd); + + //3. Send RICSubscriptionRequest + E2AP_PDU_t* pdu_sub = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest_Ashwin.xml"); + e2ap_asn1c_print_pdu(pdu_sub); + encode_and_send_sctp_data(pdu_sub, client_fd); + LOG_I("[SCTP] Sent RIC SUBSCRIPTION REQUEST"); + + + //4. Receive RIC SUBSCRIPT RESPONSE + int count = 0; + + while(1) + { + usleep(1000); //sleep for one ms + + sctp_buffer_t recv_buf; + + int res_seq; + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + // e2ap_handle_sctp_data(client_fd, recv_buf); + + E2AP_PDU_t* res_pdu = new E2AP_PDU_t(); + + e2ap_asn1c_decode_pdu(res_pdu, recv_buf.buffer, recv_buf.len); + + int procedureCode = e2ap_asn1c_get_procedureCode(res_pdu); + int index = (int)res_pdu->present; + + if(index == E2AP_PDU_PR_successfulOutcome && \ + procedureCode == ProcedureCode_id_ricSubscription) + { + res_seq =subresponse_get_sequenceNum(res_pdu); + count++; + + LOG_I("Received RIC SUBSCRIPTION RESPONSE, seq = %d, totalCount = %d",\ + res_seq, count); + + //Put res_seq in new subscription request + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + subrequest_set_sequenceNum(req_pdu, res_seq); + // e2ap_asn1c_print_pdu(req_pdu); + + encode_and_send_sctp_data(req_pdu, client_fd); + LOG_I("Send new SUBSCRIPT REQUEST, seq = %d", res_seq); + } + + } + } + + + // E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionResponse.xml"); + // + // //Extract subscription response sequence number + // int res_seq = subresponse_get_sequenceNum(res_pdu); + // LOG_I("Subscription Response SeqNo = %d", res_seq); + // + // //Put responseSeq in new subscription request + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_RICsubscriptionRequest.xml"); + // + // subrequest_set_sequenceNum(req_pdu, res_seq); + + // e2ap_asn1c_print_pdu(req_pdu); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_wlg.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_wlg.cpp new file mode 100644 index 0000000..309153d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/WLG/ric_wlg.cpp @@ -0,0 +1,61 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" + + #include "ProtocolIE-Field.h" +} + +using namespace std; + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC WLG"); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(ops.server_ip, server_fd); + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf); + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/X2/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/CMakeLists.txt new file mode 100644 index 0000000..b257505 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/CMakeLists.txt @@ -0,0 +1,49 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +cmake_minimum_required(VERSION 3.5.1) +set(CMAKE_CXX_COMPILER "/usr/bin/g++") +set(CMAKE_CXX_STANDARD 14) + +add_definitions("-D ASN_DISABLE_OER_SUPPORT") + +project(x2term) + +set (E2SIM_ROOT ../../) + +include_directories("${E2SIM_ROOT}/src") +include_directories("${E2SIM_ROOT}/src/DEF") +include_directories("${E2SIM_ROOT}/src/SCTP/") +include_directories("${E2SIM_ROOT}/src/E2AP") +include_directories("${E2SIM_ROOT}/src/E2AP/E2SM") +include_directories("${E2SIM_ROOT}/ASN1c") + +find_library( SCTP_STD_LIB sctp ) #needed for sctp_sendmsg + +#---------------------------------------------- +file(GLOB X2TERM_SOURCES + "${E2SIM_ROOT}/test/X2/x2term.cpp" + "${E2SIM_ROOT}/src/DEF/*.cpp" + "${E2SIM_ROOT}/src/SCTP/*.cpp" + "${E2SIM_ROOT}/src/E2AP/*.c" + "${E2SIM_ROOT}/src/E2AP/*.cpp" + "${E2SIM_ROOT}/ASN1c/*.c" + ) +add_executable(x2term ${X2TERM_SOURCES}) +target_link_libraries( x2term ${SCTP_STD_LIB} ) diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2agent.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2agent.cpp new file mode 100644 index 0000000..db279a3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2agent.cpp @@ -0,0 +1,41 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" + +using namespace std; + +int main(int argc, char* argv[]){ + + LOG_I("X2 Agent. Version %s", VERSION); + + options_t ops = read_input_options(argc, argv); + + int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + int client_fd = sctp_accept_connection(server_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2term.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2term.cpp new file mode 100644 index 0000000..e325827 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2term.cpp @@ -0,0 +1,73 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" + +extern "C" { + #include "e2sim_defs.h" + #include "E2AP-PDU.h" + #include "e2ap_asn1c_codec.h" +} + +using namespace std; + +void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) +{ + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + // sctp_send_data(client_fd, data); + sctp_send_data_X2AP(client_fd, data); +} + +void wait_for_sctp_data(int client_fd) +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf); + } +} + + +int main(int argc, char* argv[]){ + LOG_I("Start RIC Simulator"); + + options_t ops = read_input_options(argc, argv); + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + //Send X2 Setup Request + E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); + e2ap_asn1c_print_pdu(pdu_setup); + encode_and_send_sctp_data(pdu_setup, client_fd); + + //wait to receive X2SetupResponse + while(1){ + wait_for_sctp_data(client_fd); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2termination_test.cpp b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2termination_test.cpp new file mode 100644 index 0000000..1953ce6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/X2/x2termination_test.cpp @@ -0,0 +1,119 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include + +#include "e2sim_defs.h" +#include "asn_x2ap.hpp" +#include "e2sim_sctp.hpp" +#include "x2ap_message_handler.hpp" +#include "x2ap_asn_codec.hpp" + +using namespace std; + +void test_X2Setup(int &client_fd) +{ + //Create X2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_X2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + //expect X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +void test_ENDCX2Setup(int &client_fd) +{ + //Create ENDCX2SetupRequest message + x2ap_pdu_t* pdu = new_x2ap_pdu(); + eNB_config cfg; + + x2ap_create_ENDCX2SetupRequest(pdu, cfg); + x2ap_print_pdu(pdu); + + //Encode into buffer + sctp_buffer_t data; + x2ap_encode_pdu(pdu, data.buffer, sizeof(data.buffer), data.len); + + //Send to sctp + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + //expect ENDC X2 SETUP RESPONSE + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + + //Send again, expect ENDC X2 SETUP FAILURE + sctp_send_data(client_fd, data); + LOG_I("[SCTP] Sent ENDC X2 SETUP REQUEST"); + + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + x2ap_handle_sctp_data(client_fd, recv_buf); + } + +} + +int main(int argc, char* argv[]){ + + LOG_I("X2 Termination Test"); + + options_t ops = read_input_options(argc, argv); + + int client_fd = sctp_start_client(ops.server_ip, ops.server_port); + + test_X2Setup(client_fd); + // test_ENDCX2Setup(client_fd); + + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/README b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/README new file mode 100644 index 0000000..9e5a197 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/README @@ -0,0 +1,13 @@ +This is just a basic version of the README that the author of the E2 simulator can augment as he/she sees fit. + +Building rmr + +- Call the rmr_install.sh + + +# Running the sender and receiver + +- Create a route generate (.rt) file that is common to both the sender and receiver and place it in $HOME/global_rmr_files/global_rmr_routes.rt +- Build the receiver in the /tests/pendulum_xapp folder by invoking build_recvr.sh. Run it using bash run_receiver +- Build the sender in the /tests/sender folder by invoking build_sender.sh. Run it using bash run_sender. +- You can see packets being exchanged. diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/rmr_install.sh b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/rmr_install.sh new file mode 100644 index 0000000..786a07e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/rmr_install.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +#git clone https://gerrit.oran-osc.org/r/ric-plt/lib/rmr && (cd rmr && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.oran-osc.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg && git checkout 6735f136906ce2 ) + +cd rmr/ +mkdir $HOME/usr +mkdir .build +cd .build +cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr +make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh new file mode 100644 index 0000000..602046f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/build_and_run_recvr.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_rcvr.c -g -o rmr_rcvr -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export PENDULUM_XAPP_RMR_RCV_PORT=5560 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies + +export PRINT_FREQ=10000 #frequency at which test stats will be printed + +RMR_RCV_ACK=1 ./rmr_rcvr $PRINT_FREQ; # receiver that will ack every sender message diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c new file mode 100644 index 0000000..2d8e7fd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/receiver/rmr_rcvr.c @@ -0,0 +1,163 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// :vim ts=4 sw=4 noet: +/* + Mnemonic: rmr_rcvr2.c + Abstract: Very simple test listener built on RMr libraries. It does nothing + but return the message it recevied back to the sender. + + Define these environment variables to have some control: + RMR_SEED_RT -- path to the static routing table + RMR_RTG_SVC -- host:port of the route table generator + + One command line parm is accepted: stats frequency. This is a number, n, + which causes stats to be generated after every n messages. If set to 0 + each message is written when received and no stats (msg rate) is generated. + + Date: 11 February 2018 + Author: E. Scott Daniels + + Mods: 18 Mar 2019 -- simplified for demo base. +*/ + +#include +#include +#include +#include +#include + +#include + +typedef struct { + int32_t mtype; // message type ("long" network integer) + int32_t plen; // payload length + unsigned char xid[RMR_MAX_XID]; // space for user transaction id or somesuch + unsigned char sid[RMR_MAX_SID]; // sender ID for return to sender needs + unsigned char src[RMR_MAX_SRC]; // name of the sender (source) + struct timespec ts; // timestamp ??? +} mhdr_t; + + +int main( int argc, char** argv ) { + void* mrc; // msg router context + rmr_mbuf_t* msg = NULL; // message received + int i; + char* listen_port; + char* tok; + int must_ack = 1; // flag -- if set we rts all messages + mhdr_t* hdr; + int last_seq = 0; // sequence number from last message + int this_seq; // sequence number on this message + int count = 0; // count of msg since last status + long long tcount = 0; // total count of messages + time_t ts; + time_t lts; + int stat_freq = 20000; // write stats after reciving this many messages + int first_seq = -1; // first sequence number we got to report total received + int max_rt = 1000; // max times we'll retry an ack + + if( (tok = getenv( "RMR_RCV_ACK" )) != NULL ) { + must_ack = atoi( tok ); + } + + if( (listen_port = getenv( "PENDULUM_XAPP_RMR_RCV_PORT" )) == NULL ) { + listen_port = "4560"; + } + + if( argc > 1 ) { + stat_freq = atoi( argv[1] ); + } + fprintf( stderr, " stats will be reported every %d messages\n", stat_freq ); + + mrc = rmr_init( listen_port, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // start your engines! + if( mrc == NULL ) { + fprintf( stderr, " ABORT: unable to initialise RMr\n" ); + exit( 1 ); + } + + while( ! rmr_ready( mrc ) ) { + fprintf( stderr, " waiting for RMr to show ready\n" ); + sleep( 1 ); + } + fprintf( stderr, " RMr now shows ready\n" ); + + lts = time( NULL ); + fprintf( stderr, " listening on %s acking %s\n", listen_port, must_ack != 0 ? "on" : "off" ); + + //rmr_set_stimeout( mrc, 50 ); + while( 1 ) { + sleep (2 ); + msg = rmr_rcv_msg( mrc, msg ); // block until one arrives + if( msg == NULL ) { + continue; // shouldn't happen, but don't crash if we get nothing + } + if( msg->mtype < 0 || msg->state != RMR_OK ) { + fprintf( stderr, "[WRN] bad msg: state=%d errno=%d\n", msg->state, errno ); + continue; // just loop to receive another + } + + if( stat_freq == 0 ) { // mechanism to dump all received messages for quick testing + fprintf( stdout, " msg received: type = %d len = %d (%s)\n", msg->mtype, msg->len, msg->payload ); // assume a nil term string in payload + } + + count++; // messages received for stats output + tcount++; + + //if( stat_freq >= 1000 ) { + if(1) { + //if( (count % stat_freq) == 0 ) { + if(1) { + ts = time( NULL ); + if( ts - lts ) { + + fprintf( stderr, " %7lld received %5lld msg/s over the last %3lld seconds mrt=%d, with content=%s\n", + (long long) last_seq - first_seq, (long long) (count / (ts-lts)), (long long) ts-lts, max_rt,msg->payload ); + lts = ts; + count = 0; + } + } + } + + if( must_ack ) { // send back a response + //fprintf( stdout, " msg: type = %d len = %d; acking\n", msg->mtype, msg->len ); + //msg->len = snprintf( msg->payload, 1024, "bar %lld", tcount ); // ack with bar and counter + msg->len = snprintf( msg->payload, 1024, "Reply hello back to Arduino!\n"); + // msg->len = snprintf( msg->payload, 1024, "OK\n"); + + + //msg->mtype = 999; //only to be used if rts is not possible + + //msg = rmr_send_msg (mrc, msg); //only to be used if rts is not possible + + msg = rmr_rts_msg( mrc, msg ); // this is a retur to sender; preferred + //if( (msg = rmr_send_msg( mrc, msg )) != NULL ) { // this is a routed send; not preferred, but possible + if( (msg = rmr_rts_msg( mrc, msg )) != NULL ) { + //----- checking too many times here has been problematic and causes what appears to be race condidtions in NNG threads; for now max_rt should be small + max_rt = 2; + while( max_rt > 0 && msg->state != RMR_OK && errno == EAGAIN ) { // NNG likes to refuse sends, just keep trying on eagain + max_rt--; + rmr_rts_msg( mrc, msg ); + //rmr_send_msg (mrc, msg); + } + } + } + + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh new file mode 100644 index 0000000..c4eb8fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/build_and_run_sender.sh @@ -0,0 +1,29 @@ +#!/bin/bash -eu +# +# +# Copyright 2019 AT&T Intellectual Property +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export C_INCLUDE_PATH=$HOME/usr/include +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib +export RMR_SEED_RT=$HOME/global_rmr_files/global_rmr_routes.rt +gcc rmr_sender.c -g -o rmr_sender -L $HOME/usr/lib -lrmr_nng -lnng -lpthread -lm + +export DUMMY_SENDER_RMR_RCV_PORT=38086 +export DEMO_SENDER_PTO=1 # poll timeout listening for replies +export DEMO_MAX_PAYLOAD_BYTES=240 # max_size of payload + +./rmr_sender; diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c new file mode 100644 index 0000000..724b0d1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_sender.c @@ -0,0 +1,96 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// :vim ts=4 sw=4 noet: + +/* + Mnemonic: rmr_sender2.c + Abstract: Very simple test sender that polls and deals with responses + in between sends (from a single process). + + Date: 18 February 2018 + Author: E. Scott Daniels + + Modified: 18 Mar 2019 - changes to support demo +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "rmr_wrapper.h" + + +void usage( char* argv0 ) { + fprintf( stderr, "usage: %s [mtype-max]\n", argv0 ); + fprintf( stderr, "Sender will send messages with rotating msg types from 0 through mtype-max (if supplied)\n" ); + fprintf( stderr, "if not supplied, only mtype 0 is sent\n" ); + fprintf( stderr, "The default listen port for return messages is 43086; this can be changed by setting DUMMY_SENDER_RMR_RCV_PORT in the environment.\n" ); + fprintf( stderr, "The sender will send forever unless DEMO_SENDER_MAX is set in the environment which causes termination after max messages.\n" ); + fprintf( stderr, "The sender will poll for received messages after each send. The amount of time waited is controlled with DEMO_SENDER_PTO (ms) in the env. Use 0 for non-blocking poll.\n" ); +} + +int main( int argc, char** argv ) { + struct rmr_context *rmr_c; //obtain our enhanced rmr_context + int mtype = 0; // we can loop through several message types + long count = 0; + char* lport = "43086"; // default listen port + long rcount = 0; // number of acks received + + if( (eparm = getenv( "DUMMY_SENDER_RMR_RCV_PORT" )) != NULL ) { + lport = strdup( eparm ); + } + + rmr_c = rmr_init_wrapper(lport); + + while( ! rmr_ready( rmr_c->mrc ) ) { + fprintf( stderr, " waiting for RMr to indicate ready\n" ); + sleep( 1 ); + } + fprintf( stderr, "[OK] initialisation complete\n" ); + + while( 1 ) { + usleep( 10 ); // simulate some work being done + char* message = "foo 111"; + + if(rmr_send_wrapper (rmr_c, mtype, message ) == 1) { + //message successfully received in the receive buffer + char reply[1024]; + strcpy(reply,rmr_c->rbuf->payload); + fprintf( stderr, "Acknowledgment received with content:%s\n",rmr_c->rbuf->payload); + rcount++; + } + count++; + + if( (count % 5000) == 0 ) { + fprintf( stdout, "[INFO] total sent: %ld total received: %ld drops=%ld\n", count, rcount, count - rcount ); + } + + } + + fprintf( stderr, "[INFO] sender is terminating having sent %ld messages\n", count ); + rmr_close_wrapper(rmr_c); + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h new file mode 100644 index 0000000..446d20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/test/rmr_interface/tests/sender/rmr_wrapper.h @@ -0,0 +1,142 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +int epoll_to = 1;// global default epoll timout -- 1ms +char* eparm; // generic env pointer + +struct rmr_context { + void* mrc; + int rcv_fd; // pollable fd + struct epoll_event epe; // event definition for event to listen to + struct epoll_event events[10]; // wait on 10 possible events + int ep_fd; + int max_payload_size; // ++SCOTT + rmr_mbuf_t* sbuf; // send buffer + rmr_mbuf_t* rbuf; // received buffer +}; + + +struct rmr_context * rmr_init_wrapper(char* lport){ + + struct rmr_context *rmr_c = malloc(sizeof (struct rmr_context)); + fprintf( stderr, "[INFO] glistening for replies on %s\n", lport ); + + + rmr_c->mrc = rmr_init(lport, RMR_MAX_RCV_BYTES, RMRFL_NONE ); // setup RMr and get a context (rmr_c.mrc) + rmr_c->ep_fd=-1; + + //polling related initializations + rmr_c->rcv_fd = rmr_get_rcvfd( rmr_c->mrc );// get the fd to poll for messages received + if( rmr_c->rcv_fd < 0 ) { + fprintf( stderr, "[FAIL] unable to set up polling fd\n" ); + exit( 1 ); + } + + if( (rmr_c->ep_fd = epoll_create1( 0 )) < 0 ) { + fprintf( stderr, "[FAIL] unable to create epoll fd: %d\n", errno ); + exit( 1 ); + } + rmr_c->epe.events = EPOLLIN; + rmr_c->epe.data.fd = rmr_c->rcv_fd; + + if( epoll_ctl( rmr_c->ep_fd, EPOLL_CTL_ADD, rmr_c->rcv_fd, &rmr_c->epe ) != 0 ) { + fprintf( stderr, "[FAIL] epoll_ctl status not 0 : %s\n", strerror( errno ) ); + exit( 1 ); + } + //end of polling related initializations + + //++SCOTT------ next lines until !!SCOTT + rmr_c->max_payload_size = 240; //default + if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + rmr_c->max_payload_size = atoi(eparm); // override with env + } + //!!SCOTT + + //~~SCOTT next line + rmr_c->sbuf = rmr_alloc_msg( rmr_c->mrc, rmr_c->max_payload_size ); // allocate largest payload to send + rmr_c->rbuf = NULL; + + return rmr_c; +} + +void rmr_send_wrapper (struct rmr_context *rmr_c, int mtype, char* message) { + //--SCOTT int max_payload_size = 240; //default + //--SCOTT if( (eparm = getenv( "DEMO_MAX_PAYLOAD_BYTES" )) != NULL ) { + //--SCOTT max_payload_size = atoi(eparm); + //--SCOTT } + + //~~SCOTT next line + snprintf( rmr_c->sbuf->payload, rmr_c->max_payload_size, "%s", message); // simple send message -- replace with real content + + rmr_c->sbuf->mtype = mtype; // fill in message meta data + rmr_c->sbuf->len = strlen( rmr_c->sbuf->payload ) + 1; // actual length of payload (count the nil end of string) + rmr_c->sbuf->state = 0; + + //retry send for a few times before giving up + long natter = 0; // natter on for errors only once in a while + if( (rmr_c->sbuf = rmr_send_msg( rmr_c->mrc, rmr_c->sbuf )) != NULL ) {// unlikely, but might get a null pointer back if NNG really is buggered + if( rmr_c->sbuf->state != RMR_OK ) { + if( errno == EAGAIN ) { + while( rmr_c->sbuf->state != RMR_OK && errno == EAGAIN ) {// NNG likes to refuse sends, just keep trying on eagain + rmr_send_msg( rmr_c->mrc, rmr_c->sbuf ); + } + } else {// most likely connection refused, don't natter on + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + } + } else { + if( time( NULL ) > natter ) { + fprintf( stderr, "[WARN] send failed, pausing (%s)\n", strerror( errno ) ); + natter = time( NULL ) + 2; + } + sleep( 1 ); + } + +} + +int rmr_poll_for_message(struct rmr_context *rmr_c){ + int nready; + int i; + int return_type =0; + //start polling the channel to read the acknowledgment + //~~SCOTT next line + + nready = epoll_wait( rmr_c->ep_fd, rmr_c->events, 10, epoll_to ); // wait up to epoll_to ms for a response + for( i = 0; i < nready && i < 10; i++ ) { // loop through to find what is ready + if( rmr_c->events[i].data.fd == rmr_c->rcv_fd ) { // RMr has something + errno = 0; + rmr_c->rbuf = rmr_rcv_msg( rmr_c->mrc, rmr_c->rbuf ); // something ready; this should not block + if( rmr_c->rbuf ) { + // fprintf( stderr, " acknowledgment received:%s\n",rmr_c->rbuf->payload); + return_type = 1; //the message has been acknowledged + } + } + } + return return_type; +} + +void rmr_close_wrapper (struct rmr_context *rmr_c){ + + rmr_close( rmr_c->mrc ); + free(rmr_c); +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes b/ric_benchmarking/e2-interface/e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes new file mode 100644 index 0000000..87ced95 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/tools/asn_defs/generate_e2ap_e2sm_codes @@ -0,0 +1,39 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +E2AP_asn="e2ap-v031.asn" +E2SM_asn="e2sm-gNB-X2-release-1-v041.asn" +X2AP_asn="x2ap-no-desc-15-04.asn" + +GEN_DIR=../../src/ASN1c/ + +rm -f $GEN_DIR/*.c $GEN_DIR/*.h + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2AP_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example \ + -fno-include-deps -D $GEN_DIR $E2SM_asn $X2AP_asn \ + |& egrep -v "^Copied|^Compiled" | sort -u + +echo "ASN1 C codes generated at $GEN_DIR" + +# asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER /tmp/e2ap-v031.asn /tmp/x2ap-no-desc-15-04.asn diff --git a/ric_benchmarking/e2-interface/e2sim/previous/tools/build_helper.bash b/ric_benchmarking/e2-interface/e2sim/previous/tools/build_helper.bash new file mode 100644 index 0000000..1759621 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/tools/build_helper.bash @@ -0,0 +1,93 @@ +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +####################################### +# Helper Func +###################################### + +black='\E[30m' +red='\E[31m' +green='\E[32m' +yellow='\E[33m' +blue='\E[34m' +magenta='\E[35m' +cyan='\E[36m' +white='\E[37m' +reset_color='\E[00m' + +cecho() # Color-echo. arg1 = message, arg2 = color +{ + local default_msg="No Message." + message=${1:-$default_msg} + color=${2:-$green} + echo -e -n "$color$message$reset_color" + echo + return +} + +echo_error() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $red +} + +echo_fatal() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + echo_error "$my_string" + exit -1 +} + +echo_warning() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $yellow +} + +echo_success() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $green +} + +echo_info() { + local my_string="" + until [ -z "$1" ] + do + my_string="$my_string$1" + shift + done + cecho "$my_string" $blue +} diff --git a/ric_benchmarking/e2-interface/e2sim/previous/tools/install_asn1c b/ric_benchmarking/e2-interface/e2sim/previous/tools/install_asn1c new file mode 100644 index 0000000..7d1391f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/tools/install_asn1c @@ -0,0 +1,31 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +echo "Will install asn1c" +sudo rm -rf asn1c +git clone https://gerrit.o-ran-sc.org/r/com/asn1c.git +cd asn1c/ +autoreconf -iv +./configure +cd examples +chmod u+x crfc2asn1.pl +cd .. +make +sudo make install diff --git a/ric_benchmarking/e2-interface/e2sim/previous/tools/install_dependencies b/ric_benchmarking/e2-interface/e2sim/previous/tools/install_dependencies new file mode 100644 index 0000000..c5b3d7b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/previous/tools/install_dependencies @@ -0,0 +1,38 @@ +#!/bin/bash +#/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +sudo apt-get update \ + && sudo apt-get install -y \ + build-essential \ + git \ + cmake \ + libsctp-dev \ + lksctp-tools \ + autoconf \ + automake \ + libtool \ + bison \ + flex \ + libboost-all-dev \ + iputils-ping \ + net-tools \ + nano \ + vim \ + && sudo apt-get clean diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-query.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-query.xml new file mode 100644 index 0000000..2fe79c3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-query.xml @@ -0,0 +1,12 @@ + + + 6 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-ack.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-ack.xml new file mode 100644 index 0000000..4a0bc6e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-ack.xml @@ -0,0 +1,48 @@ + + + 7 + + + + + + + + 9 + + + + + + + 6 + + + + + + 20 + 3 + + + + + 6 + + + + + + 18 + 2 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-delete.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-delete.xml new file mode 100644 index 0000000..af28617 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-delete.xml @@ -0,0 +1,80 @@ + + + 7 + + + + + + 10 + + + + + 8 + + + + 20 + + 30 00 00 00 05 4F 49 44 31 32 33 05 00 4B 50 4D + 20 6D 6F 6E 69 74 6F 72 01 01 60 00 01 01 07 00 + 50 65 72 69 6F 64 69 63 20 72 65 70 6F 72 74 01 + 05 14 01 01 1D 00 4F 2D 44 55 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 35 47 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 00 01 02 1D 00 4F 2D 44 55 20 4D + 65 61 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 + 69 6E 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 + 20 63 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F + 79 6D 65 6E 74 01 01 01 01 00 01 03 1E 80 4F 2D + 43 55 2D 43 50 20 4D 65 61 73 75 72 65 6D 65 6E + 74 20 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 + 74 68 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 + 64 20 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 + 00 01 04 1E 80 4F 2D 43 55 2D 43 50 20 4D 65 61 + 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E + 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 + 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D + 65 6E 74 01 01 01 01 00 01 05 1E 80 4F 2D 43 55 + 2D 55 50 20 4D 65 61 73 75 72 65 6D 65 6E 74 20 + 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 74 68 + 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 64 20 + 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 00 01 + 06 1E 80 4F 2D 43 55 2D 55 50 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 + + 3 + + + + + + + + 11 + + + + + 6 + + + + 18 + 2 + + + + + + + + + + + + + 7 + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-modify.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-modify.xml new file mode 100644 index 0000000..9dfc207 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-service-update-modify.xml @@ -0,0 +1,62 @@ + + + 7 + + + + + + 12 + + + + + 8 + + + + 1 + + 30 00 00 00 05 4F 49 44 31 32 33 05 00 4B 50 4D + 20 6D 6F 6E 69 74 6F 72 01 01 60 00 01 01 07 00 + 50 65 72 69 6F 64 69 63 20 72 65 70 6F 72 74 01 + 05 14 01 01 1D 00 4F 2D 44 55 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 35 47 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 00 01 02 1D 00 4F 2D 44 55 20 4D + 65 61 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 + 69 6E 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 + 20 63 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F + 79 6D 65 6E 74 01 01 01 01 00 01 03 1E 80 4F 2D + 43 55 2D 43 50 20 4D 65 61 73 75 72 65 6D 65 6E + 74 20 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 + 74 68 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 + 64 20 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 + 00 01 04 1E 80 4F 2D 43 55 2D 43 50 20 4D 65 61 + 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E + 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 + 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D + 65 6E 74 01 01 01 01 00 01 05 1E 80 4F 2D 43 55 + 2D 55 50 20 4D 65 61 73 75 72 65 6D 65 6E 74 20 + 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 74 68 + 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 64 20 + 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 00 01 + 06 1E 80 4F 2D 43 55 2D 55 50 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 + + 3 + + + + + + + + + + + \ No newline at end of file diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-request.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-request.xml new file mode 100644 index 0000000..02b4f70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-request.xml @@ -0,0 +1,164 @@ + + + 1 + + + + + + 3 + + + + + + 37 34 37 + + + 10110101110001100111011110001 + + + + + + + + + 10 + + + + + 8 + + + + 17 + + 30 00 00 00 05 4F 49 44 31 32 33 05 00 4B 50 4D + 20 6D 6F 6E 69 74 6F 72 01 01 60 00 01 01 07 00 + 50 65 72 69 6F 64 69 63 20 72 65 70 6F 72 74 01 + 05 14 01 01 1D 00 4F 2D 44 55 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 35 47 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 00 01 02 1D 00 4F 2D 44 55 20 4D + 65 61 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 + 69 6E 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 + 20 63 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F + 79 6D 65 6E 74 01 01 01 01 00 01 03 1E 80 4F 2D + 43 55 2D 43 50 20 4D 65 61 73 75 72 65 6D 65 6E + 74 20 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 + 74 68 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 + 64 20 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 + 00 01 04 1E 80 4F 2D 43 55 2D 43 50 20 4D 65 61 + 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E + 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 + 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D + 65 6E 74 01 01 01 01 00 01 05 1E 80 4F 2D 43 55 + 2D 55 50 20 4D 65 61 73 75 72 65 6D 65 6E 74 20 + 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 74 68 + 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 64 20 + 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 00 01 + 06 1E 80 4F 2D 43 55 2D 55 50 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 + + 2 + + + + + 8 + + + + 18 + + 30 00 00 00 05 4F 49 44 31 32 33 05 00 4B 50 4D + 20 6D 6F 6E 69 74 6F 72 01 01 60 00 01 01 07 00 + 50 65 72 69 6F 64 69 63 20 72 65 70 6F 72 74 01 + 05 14 01 01 1D 00 4F 2D 44 55 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 35 47 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 00 01 02 1D 00 4F 2D 44 55 20 4D + 65 61 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 + 69 6E 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 + 20 63 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F + 79 6D 65 6E 74 01 01 01 01 00 01 03 1E 80 4F 2D + 43 55 2D 43 50 20 4D 65 61 73 75 72 65 6D 65 6E + 74 20 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 + 74 68 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 + 64 20 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 + 00 01 04 1E 80 4F 2D 43 55 2D 43 50 20 4D 65 61 + 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E + 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 + 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D + 65 6E 74 01 01 01 01 00 01 05 1E 80 4F 2D 43 55 + 2D 55 50 20 4D 65 61 73 75 72 65 6D 65 6E 74 20 + 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 74 68 + 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 64 20 + 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 00 01 + 06 1E 80 4F 2D 43 55 2D 55 50 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 + + 2 + + + + + 8 + + + + 19 + + 30 00 00 00 05 4F 49 44 31 32 33 05 00 4B 50 4D + 20 6D 6F 6E 69 74 6F 72 01 01 60 00 01 01 07 00 + 50 65 72 69 6F 64 69 63 20 72 65 70 6F 72 74 01 + 05 14 01 01 1D 00 4F 2D 44 55 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 35 47 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 00 01 02 1D 00 4F 2D 44 55 20 4D + 65 61 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 + 69 6E 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 + 20 63 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F + 79 6D 65 6E 74 01 01 01 01 00 01 03 1E 80 4F 2D + 43 55 2D 43 50 20 4D 65 61 73 75 72 65 6D 65 6E + 74 20 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 + 74 68 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 + 64 20 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 + 00 01 04 1E 80 4F 2D 43 55 2D 43 50 20 4D 65 61 + 73 75 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E + 65 72 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 + 6F 6E 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D + 65 6E 74 01 01 01 01 00 01 05 1E 80 4F 2D 43 55 + 2D 55 50 20 4D 65 61 73 75 72 65 6D 65 6E 74 20 + 43 6F 6E 74 61 69 6E 65 72 20 66 6F 72 20 74 68 + 65 20 35 47 43 20 63 6F 6E 6E 65 63 74 65 64 20 + 64 65 70 6C 6F 79 6D 65 6E 74 01 01 01 01 00 01 + 06 1E 80 4F 2D 43 55 2D 55 50 20 4D 65 61 73 75 + 72 65 6D 65 6E 74 20 43 6F 6E 74 61 69 6E 65 72 + 20 66 6F 72 20 74 68 65 20 45 50 43 20 63 6F 6E + 6E 65 63 74 65 64 20 64 65 70 6C 6F 79 6D 65 6E + 74 01 01 01 01 + + 2 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-response.xml b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-response.xml new file mode 100644 index 0000000..b9981b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/sample-messages/sample-setup-response.xml @@ -0,0 +1,72 @@ + + + 1 + + + + + + + + 4 + + + + + + 131014 + 10101010110011001110 + + + + + 9 + + + + + + + 6 + + + + + + 17 + 2 + + + + + 6 + + + + + + 18 + 2 + + + + + 6 + + + + + + 19 + 2 + + + + + + + + + + + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.c new file mode 100644 index 0000000..e8d7354 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_operation_t asn_OP_BIT_STRING = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BIT_STRING_decode_oer, + BIT_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BIT_STRING_decode_uper, /* Unaligned PER decoder */ + BIT_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BIT_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + &asn_OP_BIT_STRING, + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + { 0, 0, BIT_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static const char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) ASN__TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + ASN__CALLBACK(scratch, p - scratch); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + if(st->bits_unused) { + int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)", + st->bits_unused, st->bits_unused == 1 ? "" : "s"); + assert(ret > 0 && ret < (ssize_t)sizeof(scratch)); + if(ret > 0 && ret < (ssize_t)sizeof(scratch) + && cb(scratch, ret, app_key) < 0) + return -1; + } + + return 0; +} + +/* + * Non-destructively remove the trailing 0-bits from the given bit string. + */ +static const BIT_STRING_t * +BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) { + const uint8_t *b; + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + + if(st->size == 0) { + assert(st->bits_unused == 0); + return st; + } else { + for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) { + ; + } + /* b points to the last byte which may contain data */ + if(*b) { + int unused = 7; + uint8_t v = *b; + v &= -(int8_t)v; + if(v & 0x0F) unused -= 4; + if(v & 0x33) unused -= 2; + if(v & 0x55) unused -= 1; + tmp->size = b-st->buf + 1; + tmp->bits_unused = unused; + } else { + tmp->size = b-st->buf; + tmp->bits_unused = 0; + } + + assert(b >= st->buf); + } + + unconst.c_buf = st->buf; + tmp->buf = unconst.nc_buf; + return tmp; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + /* + * Remove information about trailing bits, since + * X.680 (08/2015) #22.7 "ensure that different semantics are not" + * "associated with [values that differ only in] the trailing 0 bits." + */ + BIT_STRING_t compact_a, compact_b; + const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a); + const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b); + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + + assert(specs && specs->subvariant == ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + /* Figure out how many unused bits */ + if(a->bits_unused > b->bits_unused) { + return -1; + } else if(a->bits_unused < b->bits_unused) { + return 1; + } else { + return 0; + } + } + } else { + return ret; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = { + APC_SEMI_CONSTRAINED, -1, -1, 0, 0}; + +asn_dec_rval_t +BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + + (void)opt_codec_ctx; + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + + if(specs->subvariant != ASN_OSUBV_BIT) { + ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant); + RETURN(RC_FAIL); + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + st->size = (csiz->upper_bound + 7) >> 3; + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += csiz->upper_bound; + st->buf[st->size] = 0; + st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + BIT_STRING_t compact_bstr; /* Do not modify this directly! */ + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + size_t size_in_bits; + const uint8_t *buf; + int ret; + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(specs->subvariant == ASN_OSUBV_BIT) { + if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + + if(pc) { + csiz = &pc->size; + } else { + csiz = &asn_DEF_BIT_STRING_constraint_size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + /* Figure out the size without the trailing bits */ + st = BIT_STRING__compactify(st, &compact_bstr); + size_in_bits = 8 * st->size - st->bits_unused; + + ASN_DEBUG( + "Encoding %s into %" ASN_PRI_SIZE " bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_bits > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_BIT_STRING_constraint_size; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound; + ASN_DEBUG( + "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual " + "value %" ASN_PRI_SSIZE "", + st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits, + add_trailer, + add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound); + ret = per_put_few_bits( + po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = per_put_many_bits(po, st->buf, size_in_bits); + if(ret) ASN__ENCODE_FAILED; + if(add_trailer) { + static const uint8_t zeros[16]; + size_t trailing_zero_bits = csiz->lower_bound - size_in_bits; + while(trailing_zero_bits > 0) { + if(trailing_zero_bits > 8 * sizeof(zeros)) { + ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros)); + trailing_zero_bits -= 8 * sizeof(zeros); + } else { + ret = per_put_many_bits(po, zeros, trailing_zero_bits); + trailing_zero_bits = 0; + } + if(ret) ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + do { + int need_eom = 0; + ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom); + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits); + + ret = per_put_many_bits(po, buf, maySave); + if(ret) ASN__ENCODE_FAILED; + + buf += maySave >> 3; + size_in_bits -= maySave; + assert(!(maySave & 0x07) || !size_in_bits); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_bits); + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_BIT_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_bits, rnd_len; + BIT_STRING_t *st; + + if(max_length == 0) return result_skipped; + + switch(specs->subvariant) { + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + break; + default: + break; + } + + /* Figure out how far we should go */ + rnd_bits = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length < (size_t)pc->lower_bound) { + return result_skipped; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_bits = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_bits = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_bits from the table */ + if(rnd_bits < max_length) { + break; + } + /* Fall through */ + default: + rnd_bits = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_bits = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_bits = asn_random_between(0, max_length - 1); + } + } else if(rnd_bits >= max_length) { + rnd_bits = asn_random_between(0, max_length - 1); + } + + rnd_len = (rnd_bits + 7) / 8; + buf = CALLOC(1, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[rnd_len]; + + for(b = buf; b < bend; b++) { + *(uint8_t *)b = asn_random_between(0, 255); + } + *b = 0; /* Zero-terminate just in case. */ + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = rnd_len; + st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7; + if(st->bits_unused) { + assert(st->size > 0); + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.h new file mode 100644 index 0000000..c1bdbbc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + size_t size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; +extern asn_TYPE_operation_t asn_OP_BIT_STRING; +extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_struct_compare_f BIT_STRING_compare; +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; +oer_type_decoder_f BIT_STRING_decode_oer; +oer_type_encoder_f BIT_STRING_encode_oer; +per_type_decoder_f BIT_STRING_decode_uper; +per_type_encoder_f BIT_STRING_encode_uper; +asn_random_fill_f BIT_STRING_random_fill; + +#define BIT_STRING_free OCTET_STRING_free +#define BIT_STRING_decode_ber OCTET_STRING_decode_ber +#define BIT_STRING_encode_der OCTET_STRING_encode_der +#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary +#define BIT_STRING_decode_aper OCTET_STRING_decode_aper +#define BIT_STRING_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING_oer.c new file mode 100644 index 0000000..aff5075 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/BIT_STRING_oer.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + (void)opt_codec_ctx; + + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = (ct_size + 7) >> 3; + st->bits_unused = (8 - (ct_size & 7)) & 7; + } else { + /* + * X.696 (08/2015) #13.3.1 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length < 1) { + ASN__DECODE_FAILED; + } else if(expected_length > size) { + ASN__DECODE_STARVED; + } + + st->bits_unused = ((const uint8_t *)ptr)[0]; + if(st->bits_unused & ~7) { + ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name); + ASN__DECODE_FAILED; + } + ptr = (const char *)ptr + 1; + size--; + expected_length--; + rval.consumed = len_len + 1; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + if(expected_length > 0) { + buf[expected_length - 1] &= (0xff << st->bits_unused); + } + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t erval = {0, 0, 0}; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + size_t trailing_zeros = 0; + int fix_last_byte = 0; + + if(!st) ASN__ENCODE_FAILED; + + if(st->bits_unused & ~7) { + ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range", + st->bits_unused); + ASN__ENCODE_FAILED; + } + if(st->bits_unused && !(st->size && st->buf)) { + ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name, + st->bits_unused); + ASN__ENCODE_FAILED; + } + + if(ct_size >= 0) { + size_t ct_bytes = (ct_size + 7) >> 3; + if(st->size > ct_bytes) { + ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "", + td->name, 8 * st->size - st->bits_unused, ct_size); + ASN__ENCODE_FAILED; + } + trailing_zeros = ct_bytes - st->size; /* Allow larger constraint */ + } else { + uint8_t ub = st->bits_unused & 7; + ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key); + if(len_len < 0) ASN__ENCODE_FAILED; + if(cb(&ub, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + erval.encoded += len_len + 1; + } + + if(st->bits_unused) { + if(st->buf[st->size - 1] & (0xff << st->bits_unused)) { + fix_last_byte = 1; + } + } + + if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + if(fix_last_byte) { + uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused); + if(cb(&b, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + erval.encoded += st->size; + + if(trailing_zeros) { + static uint8_t zeros[16]; + while(trailing_zeros > 0) { + int ret; + if(trailing_zeros < sizeof(zeros)) { + ret = cb(zeros, trailing_zeros, app_key); + erval.encoded += trailing_zeros; + } else { + ret = cb(zeros, sizeof(zeros), app_key); + erval.encoded += sizeof(zeros); + } + if(ret < 0) ASN__ENCODE_FAILED; + } + } + + return erval; +} + + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CMakeLists.txt new file mode 100644 index 0000000..1f96e59 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CMakeLists.txt @@ -0,0 +1,40 @@ + + +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# +file(GLOB SOURCES "*.c") +file(GLOB HEADERS "*.h") + +include_directories(.) +add_library( asn1_objects OBJECT ${SOURCES}) + +target_include_directories (asn1_objects PUBLIC + $ + $ + PRIVATE src) + +if( DEV_PKG ) + install( FILES + ${HEADERS} + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.c new file mode 100644 index 0000000..294c0a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.c @@ -0,0 +1,95 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Cause.h" + +static asn_oer_constraints_t asn_OER_type_Cause_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Cause_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_Cause_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRIC, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.ricService), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseRICservice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricService" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.transport), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseTransport, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "transport" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.protocol), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseProtocol, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocol" + }, + { ATF_NOFLAGS, 0, offsetof(struct Cause, choice.misc), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CauseMisc, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "misc" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Cause_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* misc */ +}; +asn_CHOICE_specifics_t asn_SPC_Cause_specs_1 = { + sizeof(struct Cause), + offsetof(struct Cause, _asn_ctx), + offsetof(struct Cause, present), + sizeof(((struct Cause *)0)->present), + asn_MAP_Cause_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, + 5 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_Cause = { + "Cause", + "Cause", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_Cause_constr_1, &asn_PER_type_Cause_constr_1, CHOICE_constraint }, + asn_MBR_Cause_1, + 5, /* Elements count */ + &asn_SPC_Cause_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.h new file mode 100644 index 0000000..1c168e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Cause.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Cause_H_ +#define _Cause_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "CauseRIC.h" +#include "CauseRICservice.h" +#include "CauseTransport.h" +#include "CauseProtocol.h" +#include "CauseMisc.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Cause_PR { + Cause_PR_NOTHING, /* No components present */ + Cause_PR_ricRequest, + Cause_PR_ricService, + Cause_PR_transport, + Cause_PR_protocol, + Cause_PR_misc + /* Extensions may appear below */ + +} Cause_PR; + +/* Cause */ +typedef struct Cause { + Cause_PR present; + union Cause_u { + CauseRIC_t ricRequest; + CauseRICservice_t ricService; + CauseTransport_t transport; + CauseProtocol_t protocol; + CauseMisc_t misc; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Cause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Cause; +extern asn_CHOICE_specifics_t asn_SPC_Cause_specs_1; +extern asn_TYPE_member_t asn_MBR_Cause_1[5]; +extern asn_per_constraints_t asn_PER_type_Cause_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _Cause_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.c new file mode 100644 index 0000000..11ade29 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseMisc.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseMisc_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseMisc_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseMisc_value2enum_1[] = { + { 0, 27, "control-processing-overload" }, + { 1, 16, "hardware-failure" }, + { 2, 15, "om-intervention" }, + { 3, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseMisc_enum2value_1[] = { + 0, /* control-processing-overload(0) */ + 1, /* hardware-failure(1) */ + 2, /* om-intervention(2) */ + 3 /* unspecified(3) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1 = { + asn_MAP_CauseMisc_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseMisc_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 5, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseMisc_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseMisc = { + "CauseMisc", + "CauseMisc", + &asn_OP_NativeEnumerated, + asn_DEF_CauseMisc_tags_1, + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + asn_DEF_CauseMisc_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseMisc_tags_1) + /sizeof(asn_DEF_CauseMisc_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseMisc_constr_1, &asn_PER_type_CauseMisc_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseMisc_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.h new file mode 100644 index 0000000..44fb6b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseMisc.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseMisc_H_ +#define _CauseMisc_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseMisc { + CauseMisc_control_processing_overload = 0, + CauseMisc_hardware_failure = 1, + CauseMisc_om_intervention = 2, + CauseMisc_unspecified = 3 + /* + * Enumeration is extensible + */ +} e_CauseMisc; + +/* CauseMisc */ +typedef long CauseMisc_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseMisc_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseMisc; +extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1; +asn_struct_free_f CauseMisc_free; +asn_struct_print_f CauseMisc_print; +asn_constr_check_f CauseMisc_constraint; +ber_type_decoder_f CauseMisc_decode_ber; +der_type_encoder_f CauseMisc_encode_der; +xer_type_decoder_f CauseMisc_decode_xer; +xer_type_encoder_f CauseMisc_encode_xer; +oer_type_decoder_f CauseMisc_decode_oer; +oer_type_encoder_f CauseMisc_encode_oer; +per_type_decoder_f CauseMisc_decode_uper; +per_type_encoder_f CauseMisc_encode_uper; +per_type_decoder_f CauseMisc_decode_aper; +per_type_encoder_f CauseMisc_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseMisc_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.c new file mode 100644 index 0000000..d7d2008 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.c @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseProtocol.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseProtocol_value2enum_1[] = { + { 0, 21, "transfer-syntax-error" }, + { 1, 28, "abstract-syntax-error-reject" }, + { 2, 39, "abstract-syntax-error-ignore-and-notify" }, + { 3, 42, "message-not-compatible-with-receiver-state" }, + { 4, 14, "semantic-error" }, + { 5, 49, "abstract-syntax-error-falsely-constructed-message" }, + { 6, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseProtocol_enum2value_1[] = { + 5, /* abstract-syntax-error-falsely-constructed-message(5) */ + 2, /* abstract-syntax-error-ignore-and-notify(2) */ + 1, /* abstract-syntax-error-reject(1) */ + 3, /* message-not-compatible-with-receiver-state(3) */ + 4, /* semantic-error(4) */ + 0, /* transfer-syntax-error(0) */ + 6 /* unspecified(6) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1 = { + asn_MAP_CauseProtocol_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseProtocol_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseProtocol_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseProtocol = { + "CauseProtocol", + "CauseProtocol", + &asn_OP_NativeEnumerated, + asn_DEF_CauseProtocol_tags_1, + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + asn_DEF_CauseProtocol_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseProtocol_tags_1) + /sizeof(asn_DEF_CauseProtocol_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseProtocol_constr_1, &asn_PER_type_CauseProtocol_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseProtocol_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.h new file mode 100644 index 0000000..67008e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseProtocol.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseProtocol_H_ +#define _CauseProtocol_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseProtocol { + CauseProtocol_transfer_syntax_error = 0, + CauseProtocol_abstract_syntax_error_reject = 1, + CauseProtocol_abstract_syntax_error_ignore_and_notify = 2, + CauseProtocol_message_not_compatible_with_receiver_state = 3, + CauseProtocol_semantic_error = 4, + CauseProtocol_abstract_syntax_error_falsely_constructed_message = 5, + CauseProtocol_unspecified = 6 + /* + * Enumeration is extensible + */ +} e_CauseProtocol; + +/* CauseProtocol */ +typedef long CauseProtocol_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseProtocol_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseProtocol; +extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1; +asn_struct_free_f CauseProtocol_free; +asn_struct_print_f CauseProtocol_print; +asn_constr_check_f CauseProtocol_constraint; +ber_type_decoder_f CauseProtocol_decode_ber; +der_type_encoder_f CauseProtocol_encode_der; +xer_type_decoder_f CauseProtocol_decode_xer; +xer_type_encoder_f CauseProtocol_encode_xer; +oer_type_decoder_f CauseProtocol_decode_oer; +oer_type_encoder_f CauseProtocol_encode_oer; +per_type_decoder_f CauseProtocol_decode_uper; +per_type_encoder_f CauseProtocol_encode_uper; +per_type_decoder_f CauseProtocol_decode_aper; +per_type_encoder_f CauseProtocol_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseProtocol_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.c new file mode 100644 index 0000000..b4a1dfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.c @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseRIC.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseRIC_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseRIC_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRIC_value2enum_1[] = { + { 0, 23, "ran-function-id-Invalid" }, + { 1, 20, "action-not-supported" }, + { 2, 17, "excessive-actions" }, + { 3, 16, "duplicate-action" }, + { 4, 15, "duplicate-event" }, + { 5, 23, "function-resource-limit" }, + { 6, 18, "request-id-unknown" }, + { 7, 46, "inconsistent-action-subsequent-action-sequence" }, + { 8, 23, "control-message-invalid" }, + { 9, 23, "call-process-id-invalid" }, + { 10, 11, "unspecified" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRIC_enum2value_1[] = { + 1, /* action-not-supported(1) */ + 9, /* call-process-id-invalid(9) */ + 8, /* control-message-invalid(8) */ + 3, /* duplicate-action(3) */ + 4, /* duplicate-event(4) */ + 2, /* excessive-actions(2) */ + 5, /* function-resource-limit(5) */ + 7, /* inconsistent-action-subsequent-action-sequence(7) */ + 0, /* ran-function-id-Invalid(0) */ + 6, /* request-id-unknown(6) */ + 10 /* unspecified(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1 = { + asn_MAP_CauseRIC_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRIC_enum2value_1, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 12, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRIC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRIC = { + "CauseRIC", + "CauseRIC", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRIC_tags_1, + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + asn_DEF_CauseRIC_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRIC_tags_1) + /sizeof(asn_DEF_CauseRIC_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseRIC_constr_1, &asn_PER_type_CauseRIC_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRIC_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.h new file mode 100644 index 0000000..187b6ec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRIC.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseRIC_H_ +#define _CauseRIC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRIC { + CauseRIC_ran_function_id_Invalid = 0, + CauseRIC_action_not_supported = 1, + CauseRIC_excessive_actions = 2, + CauseRIC_duplicate_action = 3, + CauseRIC_duplicate_event = 4, + CauseRIC_function_resource_limit = 5, + CauseRIC_request_id_unknown = 6, + CauseRIC_inconsistent_action_subsequent_action_sequence = 7, + CauseRIC_control_message_invalid = 8, + CauseRIC_call_process_id_invalid = 9, + CauseRIC_unspecified = 10 + /* + * Enumeration is extensible + */ +} e_CauseRIC; + +/* CauseRIC */ +typedef long CauseRIC_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRIC_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRIC; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1; +asn_struct_free_f CauseRIC_free; +asn_struct_print_f CauseRIC_print; +asn_constr_check_f CauseRIC_constraint; +ber_type_decoder_f CauseRIC_decode_ber; +der_type_encoder_f CauseRIC_encode_der; +xer_type_decoder_f CauseRIC_decode_xer; +xer_type_encoder_f CauseRIC_encode_xer; +oer_type_decoder_f CauseRIC_decode_oer; +oer_type_encoder_f CauseRIC_encode_oer; +per_type_decoder_f CauseRIC_decode_uper; +per_type_encoder_f CauseRIC_encode_uper; +per_type_decoder_f CauseRIC_decode_aper; +per_type_encoder_f CauseRIC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRIC_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.c new file mode 100644 index 0000000..72dca60 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseRICservice.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseRICservice_value2enum_1[] = { + { 0, 21, "function-not-required" }, + { 1, 19, "excessive-functions" }, + { 2, 18, "ric-resource-limit" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseRICservice_enum2value_1[] = { + 1, /* excessive-functions(1) */ + 0, /* function-not-required(0) */ + 2 /* ric-resource-limit(2) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1 = { + asn_MAP_CauseRICservice_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseRICservice_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseRICservice_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseRICservice = { + "CauseRICservice", + "CauseRICservice", + &asn_OP_NativeEnumerated, + asn_DEF_CauseRICservice_tags_1, + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + asn_DEF_CauseRICservice_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseRICservice_tags_1) + /sizeof(asn_DEF_CauseRICservice_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseRICservice_constr_1, &asn_PER_type_CauseRICservice_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseRICservice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.h new file mode 100644 index 0000000..a247216 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseRICservice.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseRICservice_H_ +#define _CauseRICservice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseRICservice { + CauseRICservice_function_not_required = 0, + CauseRICservice_excessive_functions = 1, + CauseRICservice_ric_resource_limit = 2 + /* + * Enumeration is extensible + */ +} e_CauseRICservice; + +/* CauseRICservice */ +typedef long CauseRICservice_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseRICservice_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseRICservice; +extern const asn_INTEGER_specifics_t asn_SPC_CauseRICservice_specs_1; +asn_struct_free_f CauseRICservice_free; +asn_struct_print_f CauseRICservice_print; +asn_constr_check_f CauseRICservice_constraint; +ber_type_decoder_f CauseRICservice_decode_ber; +der_type_encoder_f CauseRICservice_encode_der; +xer_type_decoder_f CauseRICservice_decode_xer; +xer_type_encoder_f CauseRICservice_encode_xer; +oer_type_decoder_f CauseRICservice_decode_oer; +oer_type_encoder_f CauseRICservice_encode_oer; +per_type_decoder_f CauseRICservice_decode_uper; +per_type_encoder_f CauseRICservice_encode_uper; +per_type_decoder_f CauseRICservice_decode_aper; +per_type_encoder_f CauseRICservice_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseRICservice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.c new file mode 100644 index 0000000..0ac9911 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CauseTransport.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_CauseTransport_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_CauseTransport_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_CauseTransport_value2enum_1[] = { + { 0, 11, "unspecified" }, + { 1, 30, "transport-resource-unavailable" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_CauseTransport_enum2value_1[] = { + 1, /* transport-resource-unavailable(1) */ + 0 /* unspecified(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1 = { + asn_MAP_CauseTransport_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CauseTransport_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_CauseTransport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CauseTransport = { + "CauseTransport", + "CauseTransport", + &asn_OP_NativeEnumerated, + asn_DEF_CauseTransport_tags_1, + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + asn_DEF_CauseTransport_tags_1, /* Same as above */ + sizeof(asn_DEF_CauseTransport_tags_1) + /sizeof(asn_DEF_CauseTransport_tags_1[0]), /* 1 */ + { &asn_OER_type_CauseTransport_constr_1, &asn_PER_type_CauseTransport_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CauseTransport_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.h new file mode 100644 index 0000000..f92578e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CauseTransport.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CauseTransport_H_ +#define _CauseTransport_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CauseTransport { + CauseTransport_unspecified = 0, + CauseTransport_transport_resource_unavailable = 1 + /* + * Enumeration is extensible + */ +} e_CauseTransport; + +/* CauseTransport */ +typedef long CauseTransport_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_CauseTransport_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_CauseTransport; +extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1; +asn_struct_free_f CauseTransport_free; +asn_struct_print_f CauseTransport_print; +asn_constr_check_f CauseTransport_constraint; +ber_type_decoder_f CauseTransport_decode_ber; +der_type_encoder_f CauseTransport_encode_der; +xer_type_decoder_f CauseTransport_decode_xer; +xer_type_encoder_f CauseTransport_encode_xer; +oer_type_decoder_f CauseTransport_decode_oer; +oer_type_encoder_f CauseTransport_encode_oer; +per_type_decoder_f CauseTransport_decode_uper; +per_type_encoder_f CauseTransport_encode_uper; +per_type_decoder_f CauseTransport_decode_aper; +per_type_encoder_f CauseTransport_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CauseTransport_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.c new file mode 100644 index 0000000..8f9f73b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Criticality.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_Criticality_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Criticality_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Criticality_value2enum_1[] = { + { 0, 6, "reject" }, + { 1, 6, "ignore" }, + { 2, 6, "notify" } +}; +static const unsigned int asn_MAP_Criticality_enum2value_1[] = { + 1, /* ignore(1) */ + 2, /* notify(2) */ + 0 /* reject(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1 = { + asn_MAP_Criticality_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Criticality_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Criticality_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Criticality = { + "Criticality", + "Criticality", + &asn_OP_NativeEnumerated, + asn_DEF_Criticality_tags_1, + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + asn_DEF_Criticality_tags_1, /* Same as above */ + sizeof(asn_DEF_Criticality_tags_1) + /sizeof(asn_DEF_Criticality_tags_1[0]), /* 1 */ + { &asn_OER_type_Criticality_constr_1, &asn_PER_type_Criticality_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Criticality_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.h new file mode 100644 index 0000000..76d1b89 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Criticality.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Criticality_H_ +#define _Criticality_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Criticality { + Criticality_reject = 0, + Criticality_ignore = 1, + Criticality_notify = 2 +} e_Criticality; + +/* Criticality */ +typedef long Criticality_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Criticality_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Criticality; +extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1; +asn_struct_free_f Criticality_free; +asn_struct_print_f Criticality_print; +asn_constr_check_f Criticality_constraint; +ber_type_decoder_f Criticality_decode_ber; +der_type_encoder_f Criticality_encode_der; +xer_type_decoder_f Criticality_decode_xer; +xer_type_encoder_f Criticality_encode_xer; +oer_type_decoder_f Criticality_decode_oer; +oer_type_encoder_f Criticality_encode_oer; +per_type_decoder_f Criticality_decode_uper; +per_type_encoder_f Criticality_encode_uper; +per_type_decoder_f Criticality_decode_aper; +per_type_encoder_f Criticality_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Criticality_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c new file mode 100644 index 0000000..c2350c2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics-IE-Item.h" + +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iECriticality), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iECriticality" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, iE_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iE-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CriticalityDiagnostics_IE_Item, typeOfError), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TypeOfError, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "typeOfError" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* typeOfError */ +}; +asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_Item), + offsetof(struct CriticalityDiagnostics_IE_Item, _asn_ctx), + asn_MAP_CriticalityDiagnostics_IE_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item = { + "CriticalityDiagnostics-IE-Item", + "CriticalityDiagnostics-IE-Item", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_IE_Item_1, + 3, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_IE_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h new file mode 100644 index 0000000..3977363 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_Item_H_ +#define _CriticalityDiagnostics_IE_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "Criticality.h" +#include "ProtocolIE-ID.h" +#include "TypeOfError.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CriticalityDiagnostics-IE-Item */ +typedef struct CriticalityDiagnostics_IE_Item { + Criticality_t iECriticality; + ProtocolIE_ID_t iE_ID; + TypeOfError_t typeOfError; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_IE_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c new file mode 100644 index 0000000..d54f845 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics-IE-List.h" + +#include "CriticalityDiagnostics-IE-Item.h" +static asn_oer_constraints_t asn_OER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..256)) */}; +asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (SIZE(1..256)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics_IE_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_IE_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1 = { + sizeof(struct CriticalityDiagnostics_IE_List), + offsetof(struct CriticalityDiagnostics_IE_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List = { + "CriticalityDiagnostics-IE-List", + "CriticalityDiagnostics-IE-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_IE_List_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */ + { &asn_OER_type_CriticalityDiagnostics_IE_List_constr_1, &asn_PER_type_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_CriticalityDiagnostics_IE_List_1, + 1, /* Single element */ + &asn_SPC_CriticalityDiagnostics_IE_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h new file mode 100644 index 0000000..57f9cf4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics-IE-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_IE_List_H_ +#define _CriticalityDiagnostics_IE_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CriticalityDiagnostics_IE_Item; + +/* CriticalityDiagnostics-IE-List */ +typedef struct CriticalityDiagnostics_IE_List { + A_SEQUENCE_OF(struct CriticalityDiagnostics_IE_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_IE_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics_IE_List; +extern asn_SET_OF_specifics_t asn_SPC_CriticalityDiagnostics_IE_List_specs_1; +extern asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_IE_List_1[1]; +extern asn_per_constraints_t asn_PER_type_CriticalityDiagnostics_IE_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_IE_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.c new file mode 100644 index 0000000..ed81ffc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "CriticalityDiagnostics.h" + +#include "RICrequestID.h" +#include "CriticalityDiagnostics-IE-List.h" +static asn_TYPE_member_t asn_MBR_CriticalityDiagnostics_1[] = { + { ATF_POINTER, 5, offsetof(struct CriticalityDiagnostics, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_POINTER, 4, offsetof(struct CriticalityDiagnostics, triggeringMessage), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TriggeringMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "triggeringMessage" + }, + { ATF_POINTER, 3, offsetof(struct CriticalityDiagnostics, procedureCriticality), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "procedureCriticality" + }, + { ATF_POINTER, 2, offsetof(struct CriticalityDiagnostics, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_POINTER, 1, offsetof(struct CriticalityDiagnostics, iEsCriticalityDiagnostics), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CriticalityDiagnostics_IE_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iEsCriticalityDiagnostics" + }, +}; +static const int asn_MAP_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_CriticalityDiagnostics_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CriticalityDiagnostics_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iEsCriticalityDiagnostics */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CriticalityDiagnostics_specs_1 = { + sizeof(struct CriticalityDiagnostics), + offsetof(struct CriticalityDiagnostics, _asn_ctx), + asn_MAP_CriticalityDiagnostics_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CriticalityDiagnostics_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics = { + "CriticalityDiagnostics", + "CriticalityDiagnostics", + &asn_OP_SEQUENCE, + asn_DEF_CriticalityDiagnostics_tags_1, + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + asn_DEF_CriticalityDiagnostics_tags_1, /* Same as above */ + sizeof(asn_DEF_CriticalityDiagnostics_tags_1) + /sizeof(asn_DEF_CriticalityDiagnostics_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_CriticalityDiagnostics_1, + 5, /* Elements count */ + &asn_SPC_CriticalityDiagnostics_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.h new file mode 100644 index 0000000..9500793 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/CriticalityDiagnostics.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _CriticalityDiagnostics_H_ +#define _CriticalityDiagnostics_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "TriggeringMessage.h" +#include "Criticality.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICrequestID; +struct CriticalityDiagnostics_IE_List; + +/* CriticalityDiagnostics */ +typedef struct CriticalityDiagnostics { + ProcedureCode_t *procedureCode; /* OPTIONAL */ + TriggeringMessage_t *triggeringMessage; /* OPTIONAL */ + Criticality_t *procedureCriticality; /* OPTIONAL */ + struct RICrequestID *ricRequestorID; /* OPTIONAL */ + struct CriticalityDiagnostics_IE_List *iEsCriticalityDiagnostics; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CriticalityDiagnostics_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CriticalityDiagnostics; + +#ifdef __cplusplus +} +#endif + +#endif /* _CriticalityDiagnostics_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.c new file mode 100644 index 0000000..8d6888d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.c @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2AP-PDU.h" + +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" +static asn_oer_constraints_t asn_OER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_E2AP_PDU_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_E2AP_PDU_1[] = { + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.initiatingMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InitiatingMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "initiatingMessage" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.successfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "successfulOutcome" + }, + { ATF_POINTER, 0, offsetof(struct E2AP_PDU, choice.unsuccessfulOutcome), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UnsuccessfulOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "unsuccessfulOutcome" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_E2AP_PDU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */ +}; +static asn_CHOICE_specifics_t asn_SPC_E2AP_PDU_specs_1 = { + sizeof(struct E2AP_PDU), + offsetof(struct E2AP_PDU, _asn_ctx), + offsetof(struct E2AP_PDU, present), + sizeof(((struct E2AP_PDU *)0)->present), + asn_MAP_E2AP_PDU_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_E2AP_PDU = { + "E2AP-PDU", + "E2AP-PDU", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_E2AP_PDU_constr_1, &asn_PER_type_E2AP_PDU_constr_1, CHOICE_constraint }, + asn_MBR_E2AP_PDU_1, + 3, /* Elements count */ + &asn_SPC_E2AP_PDU_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.h new file mode 100644 index 0000000..600e848 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2AP-PDU.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2AP_PDU_H_ +#define _E2AP_PDU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E2AP_PDU_PR { + E2AP_PDU_PR_NOTHING, /* No components present */ + E2AP_PDU_PR_initiatingMessage, + E2AP_PDU_PR_successfulOutcome, + E2AP_PDU_PR_unsuccessfulOutcome + /* Extensions may appear below */ + +} E2AP_PDU_PR; + +/* Forward declarations */ +struct InitiatingMessage; +struct SuccessfulOutcome; +struct UnsuccessfulOutcome; + +/* E2AP-PDU */ +typedef struct E2AP_PDU { + E2AP_PDU_PR present; + union E2AP_PDU_u { + struct InitiatingMessage *initiatingMessage; + struct SuccessfulOutcome *successfulOutcome; + struct UnsuccessfulOutcome *unsuccessfulOutcome; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2AP_PDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2AP_PDU; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2AP_PDU_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.c new file mode 100644 index 0000000..8f21633 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupFailure.h" + +asn_TYPE_member_t asn_MBR_E2setupFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P13, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1 = { + sizeof(struct E2setupFailure), + offsetof(struct E2setupFailure, _asn_ctx), + asn_MAP_E2setupFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailure = { + "E2setupFailure", + "E2setupFailure", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailure_tags_1, + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + asn_DEF_E2setupFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupFailure_tags_1) + /sizeof(asn_DEF_E2setupFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailure_1, + 1, /* Elements count */ + &asn_SPC_E2setupFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.h new file mode 100644 index 0000000..ab89da4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupFailure_H_ +#define _E2setupFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupFailure */ +typedef struct E2setupFailure { + ProtocolIE_Container_1527P13_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.c new file mode 100644 index 0000000..20b2f35 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupRequest.h" + +asn_TYPE_member_t asn_MBR_E2setupRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1 = { + sizeof(struct E2setupRequest), + offsetof(struct E2setupRequest, _asn_ctx), + asn_MAP_E2setupRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequest = { + "E2setupRequest", + "E2setupRequest", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequest_tags_1, + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + asn_DEF_E2setupRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupRequest_tags_1) + /sizeof(asn_DEF_E2setupRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequest_1, + 1, /* Elements count */ + &asn_SPC_E2setupRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.h new file mode 100644 index 0000000..c09d454 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupRequest_H_ +#define _E2setupRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupRequest */ +typedef struct E2setupRequest { + ProtocolIE_Container_1527P11_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.c new file mode 100644 index 0000000..81dce04 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "E2setupResponse.h" + +asn_TYPE_member_t asn_MBR_E2setupResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P12, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1 = { + sizeof(struct E2setupResponse), + offsetof(struct E2setupResponse, _asn_ctx), + asn_MAP_E2setupResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponse = { + "E2setupResponse", + "E2setupResponse", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponse_tags_1, + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + asn_DEF_E2setupResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_E2setupResponse_tags_1) + /sizeof(asn_DEF_E2setupResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponse_1, + 1, /* Elements count */ + &asn_SPC_E2setupResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.h new file mode 100644 index 0000000..64fda6d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/E2setupResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _E2setupResponse_H_ +#define _E2setupResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2setupResponse */ +typedef struct E2setupResponse { + ProtocolIE_Container_1527P12_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_E2setupResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2setupResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.c new file mode 100644 index 0000000..2818f1c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENB-ID-Choice.h" + +static int +memb_enb_ID_macro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_shortmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_enb_ID_longmacro_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_macro_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_shortmacro_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_enb_ID_longmacro_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_macro), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_macro_constr_2, &asn_PER_memb_enb_ID_macro_constr_2, memb_enb_ID_macro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-macro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_shortmacro), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_shortmacro_constr_3, &asn_PER_memb_enb_ID_shortmacro_constr_3, memb_enb_ID_shortmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-shortmacro" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID_Choice, choice.enb_ID_longmacro), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_enb_ID_longmacro_constr_4, &asn_PER_memb_enb_ID_longmacro_constr_4, memb_enb_ID_longmacro_constraint_1 }, + 0, 0, /* No default value */ + "enb-ID-longmacro" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enb-ID-macro */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* enb-ID-shortmacro */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* enb-ID-longmacro */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1 = { + sizeof(struct ENB_ID_Choice), + offsetof(struct ENB_ID_Choice, _asn_ctx), + offsetof(struct ENB_ID_Choice, present), + sizeof(((struct ENB_ID_Choice *)0)->present), + asn_MAP_ENB_ID_Choice_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice = { + "ENB-ID-Choice", + "ENB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_Choice_constr_1, &asn_PER_type_ENB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_Choice_1, + 3, /* Elements count */ + &asn_SPC_ENB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.h new file mode 100644 index 0000000..2caa477 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID-Choice.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENB_ID_Choice_H_ +#define _ENB_ID_Choice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_Choice_PR { + ENB_ID_Choice_PR_NOTHING, /* No components present */ + ENB_ID_Choice_PR_enb_ID_macro, + ENB_ID_Choice_PR_enb_ID_shortmacro, + ENB_ID_Choice_PR_enb_ID_longmacro + /* Extensions may appear below */ + +} ENB_ID_Choice_PR; + +/* ENB-ID-Choice */ +typedef struct ENB_ID_Choice { + ENB_ID_Choice_PR present; + union ENB_ID_Choice_u { + BIT_STRING_t enb_ID_macro; + BIT_STRING_t enb_ID_shortmacro; + BIT_STRING_t enb_ID_longmacro; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_Choice_1[3]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_Choice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.c new file mode 100644 index 0000000..d0280b1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENB-ID.h" + +static int +memb_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 28 /* (SIZE(28..28)) */}; +static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { 0, 0 }, + 18 /* (SIZE(18..18)) */}; +static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { 0, 0 }, + 21 /* (SIZE(21..21)) */}; +static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.home_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "home-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.short_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "short-Macro-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ENB_ID, choice.long_Macro_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "long-Macro-eNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1 = { + sizeof(struct ENB_ID), + offsetof(struct ENB_ID, _asn_ctx), + offsetof(struct ENB_ID, present), + sizeof(((struct ENB_ID *)0)->present), + asn_MAP_ENB_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENB_ID = { + "ENB-ID", + "ENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENB_ID_1, + 4, /* Elements count */ + &asn_SPC_ENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.h new file mode 100644 index 0000000..8e5dcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENB-ID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENB_ID_H_ +#define _ENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENB_ID_PR { + ENB_ID_PR_NOTHING, /* No components present */ + ENB_ID_PR_macro_eNB_ID, + ENB_ID_PR_home_eNB_ID, + /* Extensions may appear below */ + ENB_ID_PR_short_Macro_eNB_ID, + ENB_ID_PR_long_Macro_eNB_ID +} ENB_ID_PR; + +/* ENB-ID */ +typedef struct ENB_ID { + ENB_ID_PR present; + union ENB_ID_u { + BIT_STRING_t macro_eNB_ID; + BIT_STRING_t home_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + BIT_STRING_t short_Macro_eNB_ID; + BIT_STRING_t long_Macro_eNB_ID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENB_ID_1[4]; +extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.c new file mode 100644 index 0000000..d1cfbf9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ENGNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ENGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ENGNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gNB_ID_constr_2, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ENGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1 = { + sizeof(struct ENGNB_ID), + offsetof(struct ENGNB_ID, _asn_ctx), + offsetof(struct ENGNB_ID, present), + sizeof(((struct ENGNB_ID *)0)->present), + asn_MAP_ENGNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ENGNB_ID = { + "ENGNB-ID", + "ENGNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_ENGNB_ID_constr_1, &asn_PER_type_ENGNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_ENGNB_ID_1, + 1, /* Elements count */ + &asn_SPC_ENGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.h new file mode 100644 index 0000000..b5aabcf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ENGNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ENGNB_ID_H_ +#define _ENGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ENGNB_ID_PR { + ENGNB_ID_PR_NOTHING, /* No components present */ + ENGNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} ENGNB_ID_PR; + +/* ENGNB-ID */ +typedef struct ENGNB_ID { + ENGNB_ID_PR present; + union ENGNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ENGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ENGNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_ENGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_ENGNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_ENGNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.c new file mode 100644 index 0000000..7392861 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ErrorIndication.h" + +asn_TYPE_member_t asn_MBR_ErrorIndication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P10, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1 = { + sizeof(struct ErrorIndication), + offsetof(struct ErrorIndication, _asn_ctx), + asn_MAP_ErrorIndication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication = { + "ErrorIndication", + "ErrorIndication", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_tags_1, + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + asn_DEF_ErrorIndication_tags_1, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_tags_1) + /sizeof(asn_DEF_ErrorIndication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_1, + 1, /* Elements count */ + &asn_SPC_ErrorIndication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.h new file mode 100644 index 0000000..c3b4930 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ErrorIndication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ErrorIndication_H_ +#define _ErrorIndication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ErrorIndication */ +typedef struct ErrorIndication { + ProtocolIE_Container_1527P10_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_specs_1; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ErrorIndication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.c new file mode 100644 index 0000000..f6d50d8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-CU-UP-ID.h" + +int +GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { + "GNB-CU-UP-ID", + "GNB-CU-UP-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_CU_UP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.h new file mode 100644 index 0000000..a9152e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-CU-UP-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_CU_UP_ID_H_ +#define _GNB_CU_UP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UP-ID */ +typedef INTEGER_t GNB_CU_UP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID; +asn_struct_free_f GNB_CU_UP_ID_free; +asn_struct_print_f GNB_CU_UP_ID_print; +asn_constr_check_f GNB_CU_UP_ID_constraint; +ber_type_decoder_f GNB_CU_UP_ID_decode_ber; +der_type_encoder_f GNB_CU_UP_ID_encode_der; +xer_type_decoder_f GNB_CU_UP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UP_ID_encode_xer; +oer_type_decoder_f GNB_CU_UP_ID_decode_oer; +oer_type_encoder_f GNB_CU_UP_ID_encode_oer; +per_type_decoder_f GNB_CU_UP_ID_decode_uper; +per_type_encoder_f GNB_CU_UP_ID_encode_uper; +per_type_decoder_f GNB_CU_UP_ID_decode_aper; +per_type_encoder_f GNB_CU_UP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UP_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.c new file mode 100644 index 0000000..5e72065 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-DU-ID.h" + +int +GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { 8, 1 } /* (0..68719476735) */, + -1}; +asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { + "GNB-DU-ID", + "GNB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_GNB_DU_ID_tags_1, + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_DU_ID_tags_1) + /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.h new file mode 100644 index 0000000..7b460d2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-DU-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_DU_ID_H_ +#define _GNB_DU_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-DU-ID */ +typedef INTEGER_t GNB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID; +asn_struct_free_f GNB_DU_ID_free; +asn_struct_print_f GNB_DU_ID_print; +asn_constr_check_f GNB_DU_ID_constraint; +ber_type_decoder_f GNB_DU_ID_decode_ber; +der_type_encoder_f GNB_DU_ID_encode_der; +xer_type_decoder_f GNB_DU_ID_decode_xer; +xer_type_encoder_f GNB_DU_ID_encode_xer; +oer_type_decoder_f GNB_DU_ID_decode_oer; +oer_type_encoder_f GNB_DU_ID_encode_oer; +per_type_decoder_f GNB_DU_ID_decode_uper; +per_type_encoder_f GNB_DU_ID_encode_uper; +per_type_decoder_f GNB_DU_ID_decode_aper; +per_type_encoder_f GNB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_DU_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.c new file mode 100644 index 0000000..552725f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.c @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GNB-ID-Choice.h" + +static int +memb_gnb_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && size <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(22..32)) */}; +static asn_per_constraints_t asn_PER_memb_gnb_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID_Choice, choice.gnb_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_gnb_ID_constr_2, &asn_PER_memb_gnb_ID_constr_2, memb_gnb_ID_constraint_1 }, + 0, 0, /* No default value */ + "gnb-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_Choice_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gnb-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1 = { + sizeof(struct GNB_ID_Choice), + offsetof(struct GNB_ID_Choice, _asn_ctx), + offsetof(struct GNB_ID_Choice, present), + sizeof(((struct GNB_ID_Choice *)0)->present), + asn_MAP_GNB_ID_Choice_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice = { + "GNB-ID-Choice", + "GNB-ID-Choice", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GNB_ID_Choice_constr_1, &asn_PER_type_GNB_ID_Choice_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_Choice_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_Choice_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.h new file mode 100644 index 0000000..4646519 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GNB-ID-Choice.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GNB_ID_Choice_H_ +#define _GNB_ID_Choice_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_Choice_PR { + GNB_ID_Choice_PR_NOTHING, /* No components present */ + GNB_ID_Choice_PR_gnb_ID + /* Extensions may appear below */ + +} GNB_ID_Choice_PR; + +/* GNB-ID-Choice */ +typedef struct GNB_ID_Choice { + GNB_ID_Choice_PR present; + union GNB_ID_Choice_u { + BIT_STRING_t gnb_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_Choice_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID_Choice; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_Choice_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_Choice_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_Choice_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_Choice_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.c new file mode 100644 index 0000000..cc0a706 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.c @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-ID.h" + +#include "GlobalE2node-gNB-ID.h" +#include "GlobalE2node-en-gNB-ID.h" +#include "GlobalE2node-ng-eNB-ID.h" +#include "GlobalE2node-eNB-ID.h" +static asn_oer_constraints_t asn_OER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_GlobalE2node_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalE2node_ID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.en_gNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_en_gNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_ng_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalE2node_ID, choice.eNB), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalE2node_eNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_GlobalE2node_ID_specs_1 = { + sizeof(struct GlobalE2node_ID), + offsetof(struct GlobalE2node_ID, _asn_ctx), + offsetof(struct GlobalE2node_ID, present), + sizeof(((struct GlobalE2node_ID *)0)->present), + asn_MAP_GlobalE2node_ID_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID = { + "GlobalE2node-ID", + "GlobalE2node-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_GlobalE2node_ID_constr_1, &asn_PER_type_GlobalE2node_ID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalE2node_ID_1, + 4, /* Elements count */ + &asn_SPC_GlobalE2node_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.h new file mode 100644 index 0000000..6257cd1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ID.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_ID_H_ +#define _GlobalE2node_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalE2node_ID_PR { + GlobalE2node_ID_PR_NOTHING, /* No components present */ + GlobalE2node_ID_PR_gNB, + GlobalE2node_ID_PR_en_gNB, + GlobalE2node_ID_PR_ng_eNB, + GlobalE2node_ID_PR_eNB + /* Extensions may appear below */ + +} GlobalE2node_ID_PR; + +/* Forward declarations */ +struct GlobalE2node_gNB_ID; +struct GlobalE2node_en_gNB_ID; +struct GlobalE2node_ng_eNB_ID; +struct GlobalE2node_eNB_ID; + +/* GlobalE2node-ID */ +typedef struct GlobalE2node_ID { + GlobalE2node_ID_PR present; + union GlobalE2node_ID_u { + struct GlobalE2node_gNB_ID *gNB; + struct GlobalE2node_en_gNB_ID *en_gNB; + struct GlobalE2node_ng_eNB_ID *ng_eNB; + struct GlobalE2node_eNB_ID *eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c new file mode 100644 index 0000000..cdc62e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_eNB_ID, global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_eNB_ID), + offsetof(struct GlobalE2node_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID = { + "GlobalE2node-eNB-ID", + "GlobalE2node-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h new file mode 100644 index 0000000..a3fa696 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_eNB_ID_H_ +#define _GlobalE2node_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-eNB-ID */ +typedef struct GlobalE2node_eNB_ID { + GlobalENB_ID_t global_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c new file mode 100644 index 0000000..ee8b882 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-en-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_en_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_en_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_en_gNB_ID), + offsetof(struct GlobalE2node_en_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_en_gNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID = { + "GlobalE2node-en-gNB-ID", + "GlobalE2node-en-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_en_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_en_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_en_gNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_en_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h new file mode 100644 index 0000000..037537a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-en-gNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_en_gNB_ID_H_ +#define _GlobalE2node_en_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalenGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-en-gNB-ID */ +typedef struct GlobalE2node_en_gNB_ID { + GlobalenGNB_ID_t global_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_en_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_en_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_en_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_en_gNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_en_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c new file mode 100644 index 0000000..ea2e38c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-gNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_gNB_ID, global_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalgNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-gNB-ID" + }, + { ATF_POINTER, 2, offsetof(struct GlobalE2node_gNB_ID, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, + { ATF_POINTER, 1, offsetof(struct GlobalE2node_gNB_ID, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const int asn_MAP_GlobalE2node_gNB_ID_oms_1[] = { 1, 2 }; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_gNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_gNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-CU-UP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1 = { + sizeof(struct GlobalE2node_gNB_ID), + offsetof(struct GlobalE2node_gNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_gNB_ID_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_GlobalE2node_gNB_ID_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID = { + "GlobalE2node-gNB-ID", + "GlobalE2node-gNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_gNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_gNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_gNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_gNB_ID_1, + 3, /* Elements count */ + &asn_SPC_GlobalE2node_gNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h new file mode 100644 index 0000000..8f15471 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-gNB-ID.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_gNB_ID_H_ +#define _GlobalE2node_gNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalgNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-gNB-ID */ +typedef struct GlobalE2node_gNB_ID { + GlobalgNB_ID_t global_gNB_ID; + GNB_CU_UP_ID_t *gNB_CU_UP_ID; /* OPTIONAL */ + GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_gNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_gNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_gNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_gNB_ID_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_gNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c new file mode 100644 index 0000000..f942bce --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalE2node-ng-eNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalE2node_ng_eNB_ID, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalngeNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-ng-eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 = { + sizeof(struct GlobalE2node_ng_eNB_ID), + offsetof(struct GlobalE2node_ng_eNB_ID, _asn_ctx), + asn_MAP_GlobalE2node_ng_eNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID = { + "GlobalE2node-ng-eNB-ID", + "GlobalE2node-ng-eNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalE2node_ng_eNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1) + /sizeof(asn_DEF_GlobalE2node_ng_eNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalE2node_ng_eNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GlobalE2node_ng_eNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h new file mode 100644 index 0000000..0311e40 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalE2node-ng-eNB-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalE2node_ng_eNB_ID_H_ +#define _GlobalE2node_ng_eNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalngeNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalE2node-ng-eNB-ID */ +typedef struct GlobalE2node_ng_eNB_ID { + GlobalngeNB_ID_t global_ng_eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalE2node_ng_eNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalE2node_ng_eNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalE2node_ng_eNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalE2node_ng_eNB_ID_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalE2node_ng_eNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.c new file mode 100644 index 0000000..6ceca00 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { + sizeof(struct GlobalENB_ID), + offsetof(struct GlobalENB_ID, _asn_ctx), + asn_MAP_GlobalENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID = { + "GlobalENB-ID", + "GlobalENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalENB_ID_tags_1, + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalENB_ID_tags_1) + /sizeof(asn_DEF_GlobalENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.h new file mode 100644 index 0000000..c8683e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalENB_ID_H_ +#define _GlobalENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalENB-ID */ +typedef struct GlobalENB_ID { + PLMN_Identity_t pLMN_Identity; + ENB_ID_t eNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalENB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.c new file mode 100644 index 0000000..9f85294 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.c @@ -0,0 +1,99 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalRIC-ID.h" + +static int +memb_ric_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_ric_ID_constr_3 CC_NOTUSED = { + { 0, 0 }, + 20 /* (SIZE(20..20)) */}; +static asn_per_constraints_t asn_PER_memb_ric_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GlobalRIC_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalRIC_ID, ric_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { &asn_OER_memb_ric_ID_constr_3, &asn_PER_memb_ric_ID_constr_3, memb_ric_ID_constraint_1 }, + 0, 0, /* No default value */ + "ric-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalRIC_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalRIC_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_GlobalRIC_ID_specs_1 = { + sizeof(struct GlobalRIC_ID), + offsetof(struct GlobalRIC_ID, _asn_ctx), + asn_MAP_GlobalRIC_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID = { + "GlobalRIC-ID", + "GlobalRIC-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalRIC_ID_tags_1, + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalRIC_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalRIC_ID_tags_1) + /sizeof(asn_DEF_GlobalRIC_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalRIC_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalRIC_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.h new file mode 100644 index 0000000..7b7fc65 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalRIC-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalRIC_ID_H_ +#define _GlobalRIC_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "BIT_STRING.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalRIC-ID */ +typedef struct GlobalRIC_ID { + PLMN_Identity_t pLMN_Identity; + BIT_STRING_t ric_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalRIC_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalRIC_ID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalRIC_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.c new file mode 100644 index 0000000..cdf362c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalenGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { + sizeof(struct GlobalenGNB_ID), + offsetof(struct GlobalenGNB_ID, _asn_ctx), + asn_MAP_GlobalenGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID = { + "GlobalenGNB-ID", + "GlobalenGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalenGNB_ID_tags_1, + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalenGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalenGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalenGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalenGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalenGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.h new file mode 100644 index 0000000..75933b6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalenGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalenGNB_ID_H_ +#define _GlobalenGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENGNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalenGNB-ID */ +typedef struct GlobalenGNB_ID { + PLMN_Identity_t pLMN_Identity; + ENGNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalenGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalenGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalenGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.c new file mode 100644 index 0000000..740f552 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalgNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalgNB_ID, gnb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gnb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalgNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalgNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gnb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1 = { + sizeof(struct GlobalgNB_ID), + offsetof(struct GlobalgNB_ID, _asn_ctx), + asn_MAP_GlobalgNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID = { + "GlobalgNB-ID", + "GlobalgNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalgNB_ID_tags_1, + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalgNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalgNB_ID_tags_1) + /sizeof(asn_DEF_GlobalgNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalgNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalgNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.h new file mode 100644 index 0000000..ac18b81 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalgNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalgNB_ID_H_ +#define _GlobalgNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "GNB-ID-Choice.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalgNB-ID */ +typedef struct GlobalgNB_ID { + PLMN_Identity_t plmn_id; + GNB_ID_Choice_t gnb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalgNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalgNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalgNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalgNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalgNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.c new file mode 100644 index 0000000..a3dfaed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "GlobalngeNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, plmn_id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmn-id" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalngeNB_ID, enb_id), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ENB_ID_Choice, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "enb-id" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalngeNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalngeNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enb-id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1 = { + sizeof(struct GlobalngeNB_ID), + offsetof(struct GlobalngeNB_ID, _asn_ctx), + asn_MAP_GlobalngeNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID = { + "GlobalngeNB-ID", + "GlobalngeNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalngeNB_ID_tags_1, + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalngeNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalngeNB_ID_tags_1) + /sizeof(asn_DEF_GlobalngeNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalngeNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalngeNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.h new file mode 100644 index 0000000..843002a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/GlobalngeNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _GlobalngeNB_ID_H_ +#define _GlobalngeNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "ENB-ID-Choice.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalngeNB-ID */ +typedef struct GlobalngeNB_ID { + PLMN_Identity_t plmn_id; + ENB_ID_Choice_t enb_id; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalngeNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalngeNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalngeNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalngeNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalngeNB_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.c new file mode 100644 index 0000000..2a2f4d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.c @@ -0,0 +1,1735 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_INTEGER = { + INTEGER_free, + INTEGER_print, + INTEGER_compare, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + INTEGER_decode_oer, /* OER decoder */ + INTEGER_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ + INTEGER_decode_aper, /* Aligned PER decoder */ + INTEGER_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + INTEGER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + &asn_OP_INTEGER, + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t rval; + INTEGER_t effective_integer; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + union { + const uint8_t *c_buf; + uint8_t *nc_buf; + } unconst; + unconst.c_buf = st->buf; + effective_integer.buf = unconst.nc_buf + shift; + effective_integer.size = st->size - shift; + + st = &effective_integer; + } + } + + rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key); + if(rval.structure_ptr == &effective_integer) { + rval.structure_ptr = sptr; + } + return rval; +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value( + const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + intmax_t value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2umax(st, (uintmax_t *)&value); + else + ret = asn_INTEGER2imax(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + if(plainOrXER == 0) + return asn__format_to_callback(cb, app_key, + "%" ASN_PRIdMAX " (%s)", value, el->enum_name); + else + return asn__format_to_callback(cb, app_key, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + return asn__format_to_callback(cb, app_key, + (specs && specs->field_unsigned) + ? "%" ASN_PRIuMAX + : "%" ASN_PRIdMAX, + value); + } + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name || !*name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart, + const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t *st = (INTEGER_t *)sptr; + intmax_t dec_value; + intmax_t hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (const asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOX_OK: + if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) { + break; + } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) { + break; + } else { + /* + * We model INTEGER on long for XER, + * to avoid rewriting all the tests at once. + */ + ASN_DEBUG("INTEGER exceeds long range"); + } + /* Fall through */ + case ASN_STRTOX_ERROR_RANGE: + ASN_DEBUG("INTEGER decode %s hit range limit", td->name); + return XPBD_DECODER_LIMIT; + case ASN_STRTOX_ERROR_INVAL: + case ASN_STRTOX_EXPECT_MORE: + case ASN_STRTOX_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_imax2INTEGER(st, dec_value)) { + ASN_DEBUG("INTEGER decode %s conversion failed", td->name); + return XPBD_SYSTEM_FAILURE; + } + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + ASN__DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue = 0; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + ASN__DECODE_FAILED; + } else { + unsigned long uvalue = 0; + long svalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + ASN__DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + if(per_long_range_unrebase(uvalue, ct->lower_bound, + ct->upper_bound, &svalue) + || asn_long2INTEGER(st, svalue)) { + ASN__DECODE_FAILED; + } + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len = 0; + void *p = NULL; + int ret = 0; + + /* Get the PER length */ + len = uper_get_length(pd, -1, 0, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value = 0; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_imax2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + if(specs && specs->field_unsigned) { + if ( ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound) + || ((unsigned long)value < (unsigned long)ct->lower_bound)) + || ((unsigned long)value > (unsigned long)ct->upper_bound) + ) { + ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!", + value, ct->lower_bound, ct->upper_bound); + ASN__ENCODE_FAILED; + } + v = (unsigned long)value - (unsigned long)ct->lower_bound; + } else { + if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) { + ASN__ENCODE_FAILED; + } + } + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + int need_eom = 0; + ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + const asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) ASN__DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) ASN__DECODE_FAILED; + st->size = size; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #10.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if (ct->range_bits > 16) { + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + int length = 0, i; + long value = 0; + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, + max_range_bytes, i); + + if ((length = per_get_few_bits(pd, i)) < 0) + ASN__DECODE_FAILED; + + /* X.691 #12.2.6 length determinant + lb (1) */ + length += 1; + ASN_DEBUG("Got length %d", length); + if (aper_get_align(pd) != 0) + ASN__DECODE_FAILED; + while (length--) { + int buf = per_get_few_bits(pd, 8); + if (buf < 0) + ASN__DECODE_FAILED; + value += (((long)buf) << (8 * length)); + } + + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_uint642INTEGER(st, (unsigned long)value) + : asn_int642INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } else { + long value = 0; + if (ct->range_bits < 8) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else if (ct->range_bits == 8) { + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + } else { + /* Align */ + if (aper_get_align(pd) < 0) + ASN__DECODE_FAILED; + value = per_get_few_bits(pd, 16); + if(value < 0) ASN__DECODE_STARVED; + } + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + ASN__DECODE_FAILED; + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + } + return rval; + } else { + ASN__DECODE_FAILED; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = aper_get_length(pd, -1, -1, &repeat); + if(len < 0) ASN__DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) ASN__DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) ASN__DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + ASN__DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + ASN__DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const INTEGER_t *st = (const INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + const asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + } + + /* X.691, #12.2.2 */ + if(ct && ct->range_bits >= 0) { + unsigned long v; + + /* #10.5.6 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + + v = value - ct->lower_bound; + + /* #12 <= 8 -> alignment ? */ + if (ct->range_bits < 8) { + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits == 8) { + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x00 | v, ct->range_bits)) + ASN__ENCODE_FAILED; + } else if (ct->range_bits <= 16) { + /* Consume the bytes to align on octet */ + if(aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + if(per_put_few_bits(po, 0x0000 | v, + 16)) + ASN__ENCODE_FAILED; + } else { + /* TODO: extend to >64 bits */ + int64_t v64 = v; + int i, j; + int max_range_bytes = (ct->range_bits >> 3) + + (((ct->range_bits % 8) > 0) ? 1 : 0); + + for (i = 1; ; i++) { + int upper = 1 << i; + if (upper >= max_range_bytes) + break; + } + + for (j = sizeof(int64_t) -1; j != 0; j--) { + int64_t val; + val = v64 >> (j * 8); + if (val != 0) + break; + } + + /* Putting length in the minimum number of bits ex: 5 = 3bits */ + if (per_put_few_bits(po, j, i)) + ASN__ENCODE_FAILED; + + /* Consume the bits to align on octet */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + /* Put the value */ + for (i = 0; i <= j; i++) { + if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8)) + ASN__ENCODE_FAILED; + } + } + ASN__ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + ASN__ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = aper_put_length(po, -1, end - buf); + if(mayEncode < 0) + ASN__ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + ASN__ENCODE_FAILED; + buf += mayEncode; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +static intmax_t +asn__integer_convert(const uint8_t *b, const uint8_t *end) { + uintmax_t value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (uintmax_t)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +int +asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) { + uint8_t *b, *end; + size_t size; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(intmax_t)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to process INTEGERs with >sizeof(intmax_t) bytes + * when the actual value is small, e.g. for intmax_t == int32_t + * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(intmax_t)) { + /* Still cannot fit the sizeof(intmax_t) */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + *lptr = asn__integer_convert(b, end); + return 0; +} + +/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */ +int +asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) { + uint8_t *b, *end; + uintmax_t value; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(value); b++, size--) { + if(*b) { + /* Value won't fit into uintmax_t */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(value = 0; b < end; b++) + value = (value << 8) | *b; + + *lptr = value; + return 0; +} + +int +asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= ((~(uintmax_t)0) >> 1)) { + return asn_imax2INTEGER(st, value); + } + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */ + for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_imax2INTEGER(INTEGER_t *st, intmax_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)(long *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *l) { + intmax_t v; + if(asn_INTEGER2imax(iptr, &v) == 0) { + if(v < LONG_MIN || v > LONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) { + uintmax_t v; + if(asn_INTEGER2umax(iptr, &v) == 0) { + if(v > ULONG_MAX) { + errno = ERANGE; + return -1; + } + *l = v; + return 0; + } else { + return -1; + } +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + return asn_imax2INTEGER(st, value); +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + return asn_imax2INTEGER(st, value); +} + + +int +asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= INT64_MAX) + return asn_int642INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_int642INTEGER(INTEGER_t *st, int64_t value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol/strtoimax(3). + */ +enum asn_strtox_result_e +asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) { + int sign = 1; + intmax_t value; + +#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1) + const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10; + intmax_t last_digit_max = ASN1_INTMAX_MAX % 10; +#undef ASN1_INTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + /* FALL THROUGH */ + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + value = value * 10 + d; + } else { + sign = 1; + value = -value * 10 - d; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *intp = sign * value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *intp = sign * value; + return ASN_STRTOX_OK; +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtoul/strtoumax(3). + */ +enum asn_strtox_result_e +asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) { + uintmax_t value; + +#define ASN1_UINTMAX_MAX ((~(uintmax_t)0)) + const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10; + uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10; +#undef ASN1_UINTMAX_MAX + + if(str >= *end) return ASN_STRTOX_ERROR_INVAL; + + switch(*str) { + case '-': + return ASN_STRTOX_ERROR_INVAL; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOX_EXPECT_MORE; + } + } + + for(value = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + unsigned int d = *str - '0'; + if(value < upper_boundary) { + value = value * 10 + d; + } else if(value == upper_boundary) { + if(d <= last_digit_max) { + value = value * 10 + d; + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOX_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *uintp = value; + return ASN_STRTOX_EXTRA_DATA; + } + } + + *end = str; + *uintp = value; + return ASN_STRTOX_OK; +} + +enum asn_strtox_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + intmax_t value; + switch(asn_strtoimax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value >= LONG_MIN && value <= LONG_MAX) { + *lp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +enum asn_strtox_result_e +asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) { + uintmax_t value; + switch(asn_strtoumax_lim(str, end, &value)) { + case ASN_STRTOX_ERROR_RANGE: + return ASN_STRTOX_ERROR_RANGE; + case ASN_STRTOX_ERROR_INVAL: + return ASN_STRTOX_ERROR_INVAL; + case ASN_STRTOX_EXPECT_MORE: + return ASN_STRTOX_EXPECT_MORE; + case ASN_STRTOX_OK: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_OK; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + case ASN_STRTOX_EXTRA_DATA: + if(value <= ULONG_MAX) { + *ulp = value; + return ASN_STRTOX_EXTRA_DATA; + } else { + return ASN_STRTOX_ERROR_RANGE; + } + } + + assert(!"Unreachable"); + return ASN_STRTOX_ERROR_INVAL; +} + +int +INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const INTEGER_t *a = aptr; + const INTEGER_t *b = bptr; + + (void)td; + + if(a && b) { + if(a->size && b->size) { + int sign_a = (a->buf[0] & 0x80) ? -1 : 1; + int sign_b = (b->buf[0] & 0x80) ? -1 : 1; + + if(sign_a < sign_b) return -1; + if(sign_a > sign_b) return 1; + + /* The shortest integer wins, unless comparing negatives */ + if(a->size < b->size) { + return -1 * sign_a; + } else if(a->size > b->size) { + return 1 * sign_b; + } + + return sign_a * memcmp(a->buf, b->buf, a->size); + } else if(a->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (1) * sign; + } else if(b->size) { + int sign = (a->buf[0] & 0x80) ? -1 : 1; + return (-1) * sign; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +asn_random_fill_result_t +INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + INTEGER_t *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (INTEGER_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + if(asn_imax2INTEGER(st, value)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } else { + *sptr = st; + result_ok.length = st->size; + return result_ok; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.h new file mode 100644 index 0000000..f776c07 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; +extern asn_TYPE_operation_t asn_OP_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +#define INTEGER_free ASN__PRIMITIVE_TYPE_free +#define INTEGER_decode_ber ber_decode_primitive +#define INTEGER_constraint asn_generic_no_constraint +asn_struct_print_f INTEGER_print; +asn_struct_compare_f INTEGER_compare; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +oer_type_decoder_f INTEGER_decode_oer; +oer_type_encoder_f INTEGER_encode_oer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; +per_type_decoder_f INTEGER_decode_aper; +per_type_encoder_f INTEGER_encode_aper; +asn_random_fill_f INTEGER_random_fill; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Natiwe size-independent conversion of native integers to/from INTEGER. + * (l_size) is in bytes. + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()). + */ +int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l); +int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l); +int asn_imax2INTEGER(INTEGER_t *i, intmax_t l); +int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l); + +/* + * Size-specific conversion helpers. + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); +int asn_int642INTEGER(INTEGER_t *i, int64_t l); +int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); + +/* A version of strtol/strtoimax(3) with nicer error reporting. */ +enum asn_strtox_result_e { + ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */ + ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOX_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end, + long *l); +enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end, + unsigned long *l); +enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end, + intmax_t *l); +enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end, + uintmax_t *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum( + const asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER_oer.c new file mode 100644 index 0000000..110689b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/INTEGER_oer.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + INTEGER_t *st = (INTEGER_t *)*sptr; + struct asn_oer_constraint_number_s ct = {0, 0}; + size_t req_bytes; + + (void)opt_codec_ctx; + (void)specs; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + if(ct.width) { + req_bytes = ct.width; + } else { + /* No lower bound and no upper bound, effectively */ + + ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes); + if(consumed == 0) { + ASN__DECODE_STARVED; + } else if(consumed == -1) { + ASN__DECODE_FAILED; + } + rval.consumed += consumed; + ptr = (const char *)ptr + consumed; + size -= consumed; + } + + if(req_bytes > size) { + ASN__DECODE_STARVED; + } + + if(ct.positive) { + /* X.969 08/2015 10.2(a) */ + unsigned msb; /* Most significant bit */ + size_t useful_size; + + /* Check most significant bit */ + msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */ + useful_size = msb + req_bytes; + st->buf = (uint8_t *)MALLOC(useful_size + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + /* + * Record a large unsigned in a way not to confuse it + * with signed value. + */ + st->buf[0] = '\0'; + memcpy(st->buf + msb, ptr, req_bytes); + st->buf[useful_size] = '\0'; /* Just in case, 0-terminate */ + st->size = useful_size; + + rval.consumed += req_bytes; + return rval; + } else { + /* X.969 08/2015 10.2(b) */ + st->buf = (uint8_t *)MALLOC(req_bytes + 1); + if(!st->buf) { + ASN__DECODE_FAILED; + } + + memcpy(st->buf, ptr, req_bytes); + st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */ + st->size = req_bytes; + + rval.consumed += req_bytes; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +INTEGER_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + struct asn_oer_constraint_number_s ct = {0, 0}; + const uint8_t *buf; + const uint8_t *end; + size_t useful_bytes; + size_t req_bytes = 0; + int sign = 0; + + if(!st || st->size == 0) ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints) ct = constraints->value; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size; + + sign = (buf && buf < end) ? buf[0] & 0x80 : 0; + + /* Ignore 9 leading zeroes or ones */ + if(ct.positive) { + if(sign) { + /* The value given is a signed value. Can't proceed. */ + ASN__ENCODE_FAILED; + } + /* Remove leading zeros. */ + for(; buf + 1 < end; buf++) { + if(buf[0] != 0x0) break; + } + } else { + for(; buf + 1 < end; buf++) { + if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) { + continue; + } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) { + continue; + } + break; + } + } + + useful_bytes = end - buf; + if(ct.width) { + req_bytes = ct.width; + } else { + ssize_t r = oer_serialize_length(useful_bytes, cb, app_key); + if(r < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += r; + req_bytes = useful_bytes; + } + + if(req_bytes < useful_bytes) { + ASN__ENCODE_FAILED; + } + + er.encoded += req_bytes; + + for(; req_bytes > useful_bytes; req_bytes--) { + if(cb(sign?"\xff":"\0", 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } + } + + if(cb(buf, useful_bytes, app_key) < 0) { + ASN__ENCODE_FAILED; + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.c new file mode 100644 index 0000000..9dc4ccf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.c @@ -0,0 +1,398 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "InitiatingMessage.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_InitiatingMessage_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_InitiatingMessage_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 0; /* &InitiatingMessage */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct InitiatingMessage, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICsubscriptionDeleteRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceUpdate), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdate" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICcontrolRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.E2setupRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ResetRequest), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICindication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindication" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.RICserviceQuery), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceQuery" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage__value, choice.ErrorIndication), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ErrorIndication" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 8 }, /* RICsubscriptionRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 7 }, /* RICsubscriptionDeleteRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 6 }, /* RICserviceUpdate */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 5 }, /* RICcontrolRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 4 }, /* E2setupRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 3 }, /* ResetRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 2 }, /* RICindication */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 1 }, /* RICserviceQuery */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 0 } /* ErrorIndication */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct InitiatingMessage__value), + offsetof(struct InitiatingMessage__value, _asn_ctx), + offsetof(struct InitiatingMessage__value, present), + sizeof(((struct InitiatingMessage__value *)0)->present), + asn_MAP_value_tag2el_4, + 9, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 9, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InitiatingMessage_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_InitiatingMessage_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct InitiatingMessage, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_InitiatingMessage_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_InitiatingMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InitiatingMessage_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1 = { + sizeof(struct InitiatingMessage), + offsetof(struct InitiatingMessage, _asn_ctx), + asn_MAP_InitiatingMessage_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InitiatingMessage = { + "InitiatingMessage", + "InitiatingMessage", + &asn_OP_SEQUENCE, + asn_DEF_InitiatingMessage_tags_1, + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + asn_DEF_InitiatingMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_InitiatingMessage_tags_1) + /sizeof(asn_DEF_InitiatingMessage_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InitiatingMessage_1, + 3, /* Elements count */ + &asn_SPC_InitiatingMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.h new file mode 100644 index 0000000..cea345e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/InitiatingMessage.h @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _InitiatingMessage_H_ +#define _InitiatingMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitiatingMessage__value_PR { + InitiatingMessage__value_PR_NOTHING, /* No components present */ + InitiatingMessage__value_PR_RICsubscriptionRequest, + InitiatingMessage__value_PR_RICsubscriptionDeleteRequest, + InitiatingMessage__value_PR_RICserviceUpdate, + InitiatingMessage__value_PR_RICcontrolRequest, + InitiatingMessage__value_PR_E2setupRequest, + InitiatingMessage__value_PR_ResetRequest, + InitiatingMessage__value_PR_RICindication, + InitiatingMessage__value_PR_RICserviceQuery, + InitiatingMessage__value_PR_ErrorIndication +} InitiatingMessage__value_PR; + +/* InitiatingMessage */ +typedef struct InitiatingMessage { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct InitiatingMessage__value { + InitiatingMessage__value_PR present; + union InitiatingMessage__value_u { + RICsubscriptionRequest_t RICsubscriptionRequest; + RICsubscriptionDeleteRequest_t RICsubscriptionDeleteRequest; + RICserviceUpdate_t RICserviceUpdate; + RICcontrolRequest_t RICcontrolRequest; + E2setupRequest_t E2setupRequest; + ResetRequest_t ResetRequest; + RICindication_t RICindication; + RICserviceQuery_t RICserviceQuery; + ErrorIndication_t ErrorIndication; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitiatingMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitiatingMessage; +extern asn_SEQUENCE_specifics_t asn_SPC_InitiatingMessage_specs_1; +extern asn_TYPE_member_t asn_MBR_InitiatingMessage_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitiatingMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.asn1convert b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.asn1convert new file mode 100644 index 0000000..62c2707 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include ./Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION +asn1convert_CPPFLAGS = -I$(top_srcdir)/./ +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + ./converter-example.c\ + ./pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D . /root/e2ap-v01.00.00.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.libasncodec b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.libasncodec new file mode 100644 index 0000000..7a4c612 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Makefile.am.libasncodec @@ -0,0 +1,288 @@ +ASN_MODULE_SRCS= \ + ./E2AP-PDU.c \ + ./InitiatingMessage.c \ + ./SuccessfulOutcome.c \ + ./UnsuccessfulOutcome.c \ + ./RICsubscriptionRequest.c \ + ./RICsubscriptionDetails.c \ + ./RICactions-ToBeSetup-List.c \ + ./RICaction-ToBeSetup-Item.c \ + ./RICsubscriptionResponse.c \ + ./RICaction-Admitted-List.c \ + ./RICaction-Admitted-Item.c \ + ./RICaction-NotAdmitted-List.c \ + ./RICaction-NotAdmitted-Item.c \ + ./RICsubscriptionFailure.c \ + ./RICsubscriptionDeleteRequest.c \ + ./RICsubscriptionDeleteResponse.c \ + ./RICsubscriptionDeleteFailure.c \ + ./RICindication.c \ + ./RICcontrolRequest.c \ + ./RICcontrolAcknowledge.c \ + ./RICcontrolFailure.c \ + ./ErrorIndication.c \ + ./E2setupRequest.c \ + ./E2setupResponse.c \ + ./E2setupFailure.c \ + ./ResetRequest.c \ + ./ResetResponse.c \ + ./RICserviceUpdate.c \ + ./RANfunctions-List.c \ + ./RANfunction-Item.c \ + ./RANfunctionsID-List.c \ + ./RANfunctionID-Item.c \ + ./RICserviceUpdateAcknowledge.c \ + ./RANfunctionsIDcause-List.c \ + ./RANfunctionIDcause-Item.c \ + ./RICserviceUpdateFailure.c \ + ./RICserviceQuery.c \ + ./Cause.c \ + ./CauseMisc.c \ + ./CauseProtocol.c \ + ./CauseRIC.c \ + ./CauseRICservice.c \ + ./CauseTransport.c \ + ./CriticalityDiagnostics.c \ + ./CriticalityDiagnostics-IE-List.c \ + ./CriticalityDiagnostics-IE-Item.c \ + ./ENB-ID.c \ + ./ENB-ID-Choice.c \ + ./ENGNB-ID.c \ + ./GlobalE2node-ID.c \ + ./GlobalE2node-en-gNB-ID.c \ + ./GlobalE2node-eNB-ID.c \ + ./GlobalE2node-gNB-ID.c \ + ./GlobalE2node-ng-eNB-ID.c \ + ./GlobalENB-ID.c \ + ./GlobalenGNB-ID.c \ + ./GlobalgNB-ID.c \ + ./GlobalngeNB-ID.c \ + ./GlobalRIC-ID.c \ + ./GNB-CU-UP-ID.c \ + ./GNB-DU-ID.c \ + ./GNB-ID-Choice.c \ + ./PLMN-Identity.c \ + ./RANfunctionDefinition.c \ + ./RANfunctionID.c \ + ./RANfunctionRevision.c \ + ./RICactionDefinition.c \ + ./RICactionID.c \ + ./RICactionType.c \ + ./RICcallProcessID.c \ + ./RICcontrolAckRequest.c \ + ./RICcontrolHeader.c \ + ./RICcontrolMessage.c \ + ./RICcontrolOutcome.c \ + ./RICcontrolStatus.c \ + ./RICeventTriggerDefinition.c \ + ./RICindicationHeader.c \ + ./RICindicationMessage.c \ + ./RICindicationSN.c \ + ./RICindicationType.c \ + ./RICrequestID.c \ + ./RICsubsequentAction.c \ + ./RICsubsequentActionType.c \ + ./RICtimeToWait.c \ + ./TimeToWait.c \ + ./TypeOfError.c \ + ./Criticality.c \ + ./Presence.c \ + ./ProcedureCode.c \ + ./ProtocolIE-ID.c \ + ./TriggeringMessage.c \ + ./ProtocolIE-Container.c \ + ./ProtocolIE-SingleContainer.c \ + ./ProtocolIE-Field.c \ + ./ProtocolIE-ContainerPair.c \ + ./ProtocolIE-FieldPair.c \ + ./ProtocolIE-ContainerList.c \ + ./ProtocolIE-ContainerPairList.c + +ASN_MODULE_HDRS= \ + ./E2AP-PDU.h \ + ./InitiatingMessage.h \ + ./SuccessfulOutcome.h \ + ./UnsuccessfulOutcome.h \ + ./RICsubscriptionRequest.h \ + ./RICsubscriptionDetails.h \ + ./RICactions-ToBeSetup-List.h \ + ./RICaction-ToBeSetup-Item.h \ + ./RICsubscriptionResponse.h \ + ./RICaction-Admitted-List.h \ + ./RICaction-Admitted-Item.h \ + ./RICaction-NotAdmitted-List.h \ + ./RICaction-NotAdmitted-Item.h \ + ./RICsubscriptionFailure.h \ + ./RICsubscriptionDeleteRequest.h \ + ./RICsubscriptionDeleteResponse.h \ + ./RICsubscriptionDeleteFailure.h \ + ./RICindication.h \ + ./RICcontrolRequest.h \ + ./RICcontrolAcknowledge.h \ + ./RICcontrolFailure.h \ + ./ErrorIndication.h \ + ./E2setupRequest.h \ + ./E2setupResponse.h \ + ./E2setupFailure.h \ + ./ResetRequest.h \ + ./ResetResponse.h \ + ./RICserviceUpdate.h \ + ./RANfunctions-List.h \ + ./RANfunction-Item.h \ + ./RANfunctionsID-List.h \ + ./RANfunctionID-Item.h \ + ./RICserviceUpdateAcknowledge.h \ + ./RANfunctionsIDcause-List.h \ + ./RANfunctionIDcause-Item.h \ + ./RICserviceUpdateFailure.h \ + ./RICserviceQuery.h \ + ./Cause.h \ + ./CauseMisc.h \ + ./CauseProtocol.h \ + ./CauseRIC.h \ + ./CauseRICservice.h \ + ./CauseTransport.h \ + ./CriticalityDiagnostics.h \ + ./CriticalityDiagnostics-IE-List.h \ + ./CriticalityDiagnostics-IE-Item.h \ + ./ENB-ID.h \ + ./ENB-ID-Choice.h \ + ./ENGNB-ID.h \ + ./GlobalE2node-ID.h \ + ./GlobalE2node-en-gNB-ID.h \ + ./GlobalE2node-eNB-ID.h \ + ./GlobalE2node-gNB-ID.h \ + ./GlobalE2node-ng-eNB-ID.h \ + ./GlobalENB-ID.h \ + ./GlobalenGNB-ID.h \ + ./GlobalgNB-ID.h \ + ./GlobalngeNB-ID.h \ + ./GlobalRIC-ID.h \ + ./GNB-CU-UP-ID.h \ + ./GNB-DU-ID.h \ + ./GNB-ID-Choice.h \ + ./PLMN-Identity.h \ + ./RANfunctionDefinition.h \ + ./RANfunctionID.h \ + ./RANfunctionRevision.h \ + ./RICactionDefinition.h \ + ./RICactionID.h \ + ./RICactionType.h \ + ./RICcallProcessID.h \ + ./RICcontrolAckRequest.h \ + ./RICcontrolHeader.h \ + ./RICcontrolMessage.h \ + ./RICcontrolOutcome.h \ + ./RICcontrolStatus.h \ + ./RICeventTriggerDefinition.h \ + ./RICindicationHeader.h \ + ./RICindicationMessage.h \ + ./RICindicationSN.h \ + ./RICindicationType.h \ + ./RICrequestID.h \ + ./RICsubsequentAction.h \ + ./RICsubsequentActionType.h \ + ./RICtimeToWait.h \ + ./TimeToWait.h \ + ./TypeOfError.h \ + ./Criticality.h \ + ./Presence.h \ + ./ProcedureCode.h \ + ./ProtocolIE-ID.h \ + ./TriggeringMessage.h \ + ./ProtocolIE-Container.h \ + ./ProtocolIE-SingleContainer.h \ + ./ProtocolIE-Field.h \ + ./ProtocolIE-ContainerPair.h \ + ./ProtocolIE-FieldPair.h \ + ./ProtocolIE-ContainerList.h \ + ./ProtocolIE-ContainerPairList.h + +ASN_MODULE_HDRS+=./ANY.h +ASN_MODULE_SRCS+=./ANY.c +ASN_MODULE_HDRS+=./OCTET_STRING.h +ASN_MODULE_HDRS+=./OPEN_TYPE.h +ASN_MODULE_SRCS+=./OPEN_TYPE.c +ASN_MODULE_HDRS+=./constr_CHOICE.h +ASN_MODULE_HDRS+=./INTEGER.h +ASN_MODULE_SRCS+=./INTEGER.c +ASN_MODULE_HDRS+=./NativeEnumerated.h +ASN_MODULE_SRCS+=./NativeEnumerated.c +ASN_MODULE_HDRS+=./NativeInteger.h +ASN_MODULE_SRCS+=./NativeInteger.c +ASN_MODULE_HDRS+=./asn_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./asn_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./asn_SET_OF.h +ASN_MODULE_SRCS+=./asn_SET_OF.c +ASN_MODULE_SRCS+=./constr_CHOICE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE.h +ASN_MODULE_SRCS+=./constr_SEQUENCE.c +ASN_MODULE_HDRS+=./constr_SEQUENCE_OF.h +ASN_MODULE_SRCS+=./constr_SEQUENCE_OF.c +ASN_MODULE_HDRS+=./constr_SET_OF.h +ASN_MODULE_SRCS+=./constr_SET_OF.c +ASN_MODULE_HDRS+=./asn_application.h +ASN_MODULE_SRCS+=./asn_application.c +ASN_MODULE_HDRS+=./asn_ioc.h +ASN_MODULE_HDRS+=./asn_system.h +ASN_MODULE_HDRS+=./asn_codecs.h +ASN_MODULE_HDRS+=./asn_internal.h +ASN_MODULE_SRCS+=./asn_internal.c +ASN_MODULE_HDRS+=./asn_random_fill.h +ASN_MODULE_SRCS+=./asn_random_fill.c +ASN_MODULE_HDRS+=./asn_bit_data.h +ASN_MODULE_SRCS+=./asn_bit_data.c +ASN_MODULE_SRCS+=./OCTET_STRING.c +ASN_MODULE_HDRS+=./BIT_STRING.h +ASN_MODULE_SRCS+=./BIT_STRING.c +ASN_MODULE_SRCS+=./asn_codecs_prim.c +ASN_MODULE_HDRS+=./asn_codecs_prim.h +ASN_MODULE_HDRS+=./ber_tlv_length.h +ASN_MODULE_SRCS+=./ber_tlv_length.c +ASN_MODULE_HDRS+=./ber_tlv_tag.h +ASN_MODULE_SRCS+=./ber_tlv_tag.c +ASN_MODULE_HDRS+=./ber_decoder.h +ASN_MODULE_SRCS+=./ber_decoder.c +ASN_MODULE_HDRS+=./der_encoder.h +ASN_MODULE_SRCS+=./der_encoder.c +ASN_MODULE_HDRS+=./constr_TYPE.h +ASN_MODULE_SRCS+=./constr_TYPE.c +ASN_MODULE_HDRS+=./constraints.h +ASN_MODULE_SRCS+=./constraints.c +ASN_MODULE_HDRS+=./xer_support.h +ASN_MODULE_SRCS+=./xer_support.c +ASN_MODULE_HDRS+=./xer_decoder.h +ASN_MODULE_SRCS+=./xer_decoder.c +ASN_MODULE_HDRS+=./xer_encoder.h +ASN_MODULE_SRCS+=./xer_encoder.c +ASN_MODULE_HDRS+=./per_support.h +ASN_MODULE_SRCS+=./per_support.c +ASN_MODULE_HDRS+=./per_decoder.h +ASN_MODULE_SRCS+=./per_decoder.c +ASN_MODULE_HDRS+=./per_encoder.h +ASN_MODULE_SRCS+=./per_encoder.c +ASN_MODULE_HDRS+=./per_opentype.h +ASN_MODULE_SRCS+=./per_opentype.c +ASN_MODULE_HDRS+=./oer_decoder.h +ASN_MODULE_HDRS+=./oer_encoder.h +ASN_MODULE_HDRS+=./oer_support.h +ASN_MODULE_SRCS+=./oer_decoder.c +ASN_MODULE_SRCS+=./oer_encoder.c +ASN_MODULE_SRCS+=./oer_support.c +ASN_MODULE_SRCS+=./OPEN_TYPE_oer.c +ASN_MODULE_SRCS+=./INTEGER_oer.c +ASN_MODULE_SRCS+=./BIT_STRING_oer.c +ASN_MODULE_SRCS+=./OCTET_STRING_oer.c +ASN_MODULE_SRCS+=./NativeInteger_oer.c +ASN_MODULE_SRCS+=./NativeEnumerated_oer.c +ASN_MODULE_SRCS+=./constr_CHOICE_oer.c +ASN_MODULE_SRCS+=./constr_SEQUENCE_oer.c +ASN_MODULE_SRCS+=./constr_SET_OF_oer.c + +ASN_MODULE_CFLAGS= + +lib_LTLIBRARIES+=libasncodec.la +libasncodec_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS) +libasncodec_la_CPPFLAGS=-I$(top_srcdir)/./ +libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS) +libasncodec_la_LDFLAGS=-lm diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.c new file mode 100644 index 0000000..50ffb1d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.c @@ -0,0 +1,367 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeEnumerated = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeEnumerated_decode_oer, + NativeEnumerated_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + NativeEnumerated_decode_aper, + NativeEnumerated_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeEnumerated_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + &asn_OP_NativeEnumerated, + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + er.encoded = + asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name); + if(er.encoded < 0) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } else { + ASN_DEBUG( + "ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + const asn_per_constraint_t *ct = NULL; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__DECODE_FAILED; /* Mandatory! */ + if(!specs) ASN__DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) ASN__DECODE_STARVED; + if(inext) ct = 0; + } + + /* Deal with APER padding */ + if(ct && ct->upper_bound >= 255) { + int padding = 0; + padding = (8 - (pd->moved % 8)) % 8; + ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding); + ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound); + if(padding > 0) + per_get_few_bits(pd, padding); + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + ASN__DECODE_FAILED; + } else { + if(!specs->extension) + ASN__DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + ASN__DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +asn_enc_rval_t +NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native, value; + const asn_per_constraint_t *ct = NULL; + int inext = 0; + asn_INTEGER_enum_map_t key; + asn_INTEGER_enum_map_t *kf; + + if(!sptr) ASN__ENCODE_FAILED; + if(!specs) ASN__ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ASN__ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(const long *)sptr; + if(native < 0) ASN__ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + ASN__ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct && ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct && ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + ASN__ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + if(!specs->extension) + ASN__ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.h new file mode 100644 index 0000000..459f0e6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; +extern asn_TYPE_operation_t asn_OP_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +oer_type_decoder_f NativeEnumerated_decode_oer; +oer_type_encoder_f NativeEnumerated_encode_oer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; +per_type_decoder_f NativeEnumerated_decode_aper; +per_type_encoder_f NativeEnumerated_encode_aper; + +#define NativeEnumerated_free NativeInteger_free +#define NativeEnumerated_print NativeInteger_print +#define NativeEnumerated_compare NativeInteger_compare +#define NativeEnumerated_random_fill NativeInteger_random_fill +#define NativeEnumerated_constraint asn_generic_no_constraint +#define NativeEnumerated_decode_ber NativeInteger_decode_ber +#define NativeEnumerated_encode_der NativeInteger_encode_der +#define NativeEnumerated_decode_xer NativeInteger_decode_xer + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated_oer.c new file mode 100644 index 0000000..ee3c189 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeEnumerated_oer.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +static long +asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) { + unsigned long value; + + /* Perform the sign initialization */ + /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) { + value = (unsigned long)(-1); + } else { + value = 0; + } + + /* Conversion engine */ + for(; b < end; b++) { + value = (value << 8) | *b; + } + + return value; +} + +asn_dec_rval_t +NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + const uint8_t *b = ptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if((*b & 0x80) == 0) { + /* + * X.696 (08/2015) #11.2 Short form for Enumerated. + */ + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = *b; + rval.consumed = 1; + } else { + /* + * X.696 (08/2015) #11.4 Long form for Enumerated. + */ + size_t length = *b & 0x7f; + const uint8_t *bend; + long value; + + if(length < 1 || length > sizeof(*native)) { + ASN__DECODE_FAILED; + } + if((1 + length) > size) { + ASN__DECODE_STARVED; + } + b++; + bend = b + length; + + value = asn__nativeenumerated_convert(b, bend); + if(value < 0) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + ASN__DECODE_FAILED; + } + } + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + *native = value; + + rval.consumed = (1 + length); + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + long native; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + if(native >= 0 && native <= 127) { + /* #11.2 Short form */ + uint8_t b = native; + er.encoded = 1; + if(cb(&b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } else { + /* #11.2 Long form */ + uint8_t buf[1 + sizeof(native)]; + uint8_t *b = &buf[sizeof(native)]; /* Last addressable */ + long final_pattern = -1 * (native < 0); + + for(;;) { + *b-- = native; + native >>= 8; + if(native == final_pattern) { + if(final_pattern) { + if((b[1] & 0x80)) break; + } else { + if(!(b[1] & 0x80)) break; + } + } + } + *b = 0x80 | (&buf[sizeof(native)] - b); + er.encoded = 1 + (&buf[sizeof(native)] - b); + if(cb(b, er.encoded, app_key) < 0) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.c new file mode 100644 index 0000000..316e872 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.c @@ -0,0 +1,550 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeInteger = { + NativeInteger_free, + NativeInteger_print, + NativeInteger_compare, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeInteger_decode_oer, /* OER decoder */ + NativeInteger_encode_oer, /* Canonical OER encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + NativeInteger_decode_aper, /* Aligned PER decoder */ + NativeInteger_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeInteger_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + &asn_OP_NativeInteger, + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **nint_ptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval = {0,0,0}; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.structure_ptr == &tmp) { + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er = {0,0,0}; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) ASN__ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +asn_dec_rval_t +NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + long native; + INTEGER_t tmpint; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, (unsigned long)native) + : asn_long2INTEGER(&tmpint, native)) + ASN__ENCODE_FAILED; + er = INTEGER_encode_aper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + long value = *native; + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) ? "%lu" : "%ld", value); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + if(cb(scratch, ret, app_key) < 0) return -1; + if(specs && (value >= 0 || !specs->field_unsigned)) { + const asn_INTEGER_enum_map_t *el = + INTEGER_map_value2enum(specs, value); + if(el) { + if(cb(" (", 2, app_key) < 0) return -1; + if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1; + if(cb(")", 1, app_key) < 0) return -1; + } + } + return 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(long)); + break; + } +} + +int +NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + (void)td; + + if(aptr && bptr) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + if(specs && specs->field_unsigned) { + const unsigned long *a = aptr; + const unsigned long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } else { + const long *a = aptr; + const long *b = bptr; + if(*a < *b) { + return -1; + } else if(*a > *b) { + return 1; + } else { + return 0; + } + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + long *st = *sptr; + const asn_INTEGER_enum_map_t *emap; + size_t emap_len; + intmax_t value; + int find_inside_map; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (long *)CALLOC(1, sizeof(*st)); + if(st == NULL) { + return result_failed; + } + } + + if(specs) { + emap = specs->value2enum; + emap_len = specs->map_count; + if(specs->strict_enumeration) { + find_inside_map = emap_len > 0; + } else { + find_inside_map = emap_len ? asn_random_between(0, 1) : 0; + } + } else { + emap = 0; + emap_len = 0; + find_inside_map = 0; + } + + if(find_inside_map) { + assert(emap_len > 0); + value = emap[asn_random_between(0, emap_len - 1)].nat_value; + } else { + const asn_per_constraints_t *ct; + + static const long variants[] = { + -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384, + -16383, -257, -256, -255, -254, -129, -128, -127, + -126, -1, 0, 1, 126, 127, 128, 129, + 254, 255, 256, 257, 16383, 16384, 16385, 32767, + 32768, 32769, 65534, 65535, 65536, 65537}; + if(specs && specs->field_unsigned) { + assert(variants[18] == 0); + value = variants[asn_random_between( + 18, sizeof(variants) / sizeof(variants[0]) - 1)]; + } else { + value = variants[asn_random_between( + 0, sizeof(variants) / sizeof(variants[0]) - 1)]; + } + + if(!constraints) constraints = &td->encoding_constraints; + ct = constraints ? constraints->per_constraints : 0; + if(ct && (ct->value.flags & APC_CONSTRAINED)) { + if(value < ct->value.lower_bound || value > ct->value.upper_bound) { + value = asn_random_between(ct->value.lower_bound, + ct->value.upper_bound); + } + } + } + + *sptr = st; + *st = value; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.h new file mode 100644 index 0000000..c74406a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; +extern asn_TYPE_operation_t asn_OP_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +asn_struct_compare_f NativeInteger_compare; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +oer_type_decoder_f NativeInteger_decode_oer; +oer_type_encoder_f NativeInteger_encode_oer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; +per_type_decoder_f NativeInteger_decode_aper; +per_type_encoder_f NativeInteger_encode_aper; +asn_random_fill_f NativeInteger_random_fill; + +#define NativeInteger_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger_oer.c new file mode 100644 index 0000000..411413a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/NativeInteger_oer.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + void **nint_ptr, const void *ptr, size_t size) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + long *native = (long *)*nint_ptr; + INTEGER_t tmpint; + INTEGER_t *tmpintptr = &tmpint; + + memset(&tmpint, 0, sizeof(tmpint)); + + if(!native) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(!native) ASN__DECODE_FAILED; + } + + /* + * OPTIMIZATION: Encode directly rather than passing through INTEGER. + * Saves a memory allocation. + */ + rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints, + (void **)&tmpintptr, ptr, size); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return rval; + } + + if(specs && specs->field_unsigned) { + unsigned long ul; + int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = ul; + } else { + rval.code = RC_FAIL; + return rval; + } + } else { + long l; + int ok = asn_INTEGER2long(&tmpint, &l) == 0; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + if(ok) { + *native = l; + } else { + rval.code = RC_FAIL; + return rval; + } + } + + return rval; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_INTEGER_specifics_t *specs = + (const asn_INTEGER_specifics_t *)td->specifics; + INTEGER_t tmpint; + long native; + + if(!sptr) ASN__ENCODE_FAILED; + + native = *(const long *)sptr; + memset(&tmpint, 0, sizeof(tmpint)); + + ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native); + + if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t er = + INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.c new file mode 100644 index 0000000..ae34c96 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.c @@ -0,0 +1,2411 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; + +asn_TYPE_operation_t asn_OP_OCTET_STRING = { + OCTET_STRING_free, + OCTET_STRING_print, /* OCTET STRING generally means a non-ascii sequence */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + OCTET_STRING_decode_aper, /* Aligned PER decoder */ + OCTET_STRING_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + &asn_OP_OCTET_STRING, + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + unsigned cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack(void) { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(!ctx->ptr) { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + size_t Left = ((!sel||(size_t)sel->left >= size) + ?size:(size_t)sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + unsigned level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + (void *)sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT) { + if(st->size) { + if(st->bits_unused < 0 || st->bits_unused > 7) { + RETURN(RC_FAIL); + } + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } else { + if(st->bits_unused) { + RETURN(RC_FAIL); + } + } + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 0, 0, 0 }; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + ASN__ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + ASN__CALLBACK(&b, 1); + } + + /* Invoke callback for the main part of the buffer */ + ASN__CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + ASN__CALLBACK(&b, 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + ASN__CALLBACK(scratch, p - scratch); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + ASN__CALLBACK(scratch, p-scratch); + p = scratch; + ASN__TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ + if(st->size > 16) + ASN__TEXT_INDENT(1, ilevel-1); + } + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + ASN__ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + ASN__ENCODE_FAILED; + + er.encoded = encoded_len; + ASN__ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + size_t new_size = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + const int32_t last_unicode_codepoint = 0x10ffff; + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + + /* Value exceeds the Unicode range. */ + if(val > last_unicode_codepoint) { + return -1; + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t +OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, + size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + size_t new_size = st->size + chunk_size; + void *nptr = REALLOC(st->buf, new_size + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= new_size); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer( + const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf, + size_t chunk_size, int have_more)) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int32_t code = per_get_few_bits(po, unit_bits); + int32_t ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, const asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: + value = *(const uint8_t *)buf; + break; + case 2: + value = (buf[0] << 8) | buf[1]; + break; + case 4: + value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + break; + default: + return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf, + value, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) return -1; + } + + return 0; +} + +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; + +asn_dec_rval_t +OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = + constraints ? constraints : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound, + &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len * bpc; + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, + bpc, unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + size_t size_in_units; + const uint8_t *buf; + int ret; + enum { + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + case ASN_OSUBV_BIT: + ASN__ENCODE_FAILED; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + size_in_units = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + size_in_units = st->size >> 1; + if(st->size & 1) { + ASN_DEBUG("%s string size is not modulo 2", td->name); + ASN__ENCODE_FAILED; + } + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + size_in_units = st->size >> 2; + if(st->size & 3) { + ASN_DEBUG("%s string size is not modulo 4", td->name); + ASN__ENCODE_FAILED; + } + break; + } + + ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, size_in_units, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((ssize_t)size_in_units < csiz->lower_bound + || (ssize_t)size_in_units > csiz->upper_bound) { + if(ct_extensible) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else { + ASN__ENCODE_FAILED; + } + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + if(csiz->effective_bits >= 0 && !inext) { + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size, + size_in_units - csiz->lower_bound, csiz->effective_bits); + ret = per_put_few_bits(po, size_in_units - csiz->lower_bound, + csiz->effective_bits); + if(ret) ASN__ENCODE_FAILED; + ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc, + unit_bits, cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size); + + buf = st->buf; + ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units); + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size_in_units, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units, + need_eom ? ",+EOM" : ""); + + ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits, + cval->lower_bound, + cval->upper_bound, pc); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save * bpc; + size_in_units -= may_save; + assert(!(may_save & 0x07) || !size_in_units); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size_in_units); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: +/* case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); +*/ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; +*/ + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if (st->size > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + if(bpc) { + ASN_DEBUG("Decoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Decoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + if (csiz->upper_bound - csiz->lower_bound == 0) + /* Indefinite length case */ + raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); + else + raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); + repeat = 0; + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + + if (raw_len > 2) { /* X.691 #16 NOTE 1 */ + if (aper_get_align(pd) < 0) + RETURN(RC_FAIL); + } + + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const asn_per_constraints_t *pc = constraints ? constraints + : td->encoding_constraints.per_constraints; + const asn_per_constraint_t *cval; + const asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + ASN__ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + /* case ASN_OSUBV_ANY: + ASN__ENCODE_FAILED; + */ + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes", + sizeinunits); + break; + case ASN_OSUBV_ANY: + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; +/* if(cval->flags & APC_CONSTRAINED) + unit_bits = 8; +*/ + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out wheter size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + ASN__ENCODE_FAILED; + } + } else { + inext = 0; + } + + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + ASN__ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if (csiz->effective_bits > 0) { + ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound); + if(ret) ASN__ENCODE_FAILED; + } + /* EB MOD + AFAIU if lb != ub it is aligned whatever the number of bits */ + if ((st->size > 2) || (csiz->lower_bound != csiz->upper_bound)) { /* X.691 #16.11 */ + if (aper_put_align(po) < 0) + ASN__ENCODE_FAILED; + } + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %lu bytes", st->size); + + if(sizeinunits == 0) { + if(aper_put_length(po, -1, 0)) + ASN__ENCODE_FAILED; + ASN__ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = aper_put_length(po, -1, sizeinunits); + + if(maySave < 0) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) ASN__ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const asn_OCTET_STRING_specifics_t *specs; + asn_struct_ctx_t *ctx; + struct _stack *stck; + + if(!td || !st) + return; + + specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, + td->specifics + ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics)) + ->struct_size + : sizeof(OCTET_STRING_t)); + break; + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str, + int len) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + +/* + * Lexicographically compare the common prefix of both strings, + * and if it is the same return -1 for the smallest string. + */ +int +OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics; + const OCTET_STRING_t *a = aptr; + const OCTET_STRING_t *b = bptr; + + assert(!specs || specs->subvariant != ASN_OSUBV_BIT); + + if(a && b) { + size_t common_prefix_size = a->size <= b->size ? a->size : b->size; + int ret = memcmp(a->buf, b->buf, common_prefix_size); + if(ret == 0) { + /* Figure out which string with equal prefixes is longer. */ + if(a->size < b->size) { + return -1; + } else if(a->size > b->size) { + return 1; + } else { + return 0; + } + } else { + return ret < 0 ? -1 : 1; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + +/* + * Biased function for randomizing character values around their limits. + */ +static uint32_t +OCTET_STRING__random_char(unsigned long lb, unsigned long ub) { + assert(lb <= ub); + switch(asn_random_between(0, 16)) { + case 0: + if(lb < ub) return lb + 1; + /* Fall through */ + case 1: + return lb; + case 2: + if(lb < ub) return ub - 1; + /* Fall through */ + case 3: + return ub; + default: + return asn_random_between(lb, ub); + } +} + + +size_t +OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *td, + const asn_encoding_constraints_t *constraints, size_t max_length) { + const unsigned lengths[] = {0, 1, 2, 3, 4, 8, + 126, 127, 128, 16383, 16384, 16385, + 65534, 65535, 65536, 65537}; + size_t rnd_len; + + /* Figure out how far we should go */ + rnd_len = lengths[asn_random_between( + 0, sizeof(lengths) / sizeof(lengths[0]) - 1)]; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_CONSTRAINED) { + long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length + ? pc->upper_bound + : (ssize_t)max_length; + if(max_length <= (size_t)pc->lower_bound) { + return pc->lower_bound; + } + if(pc->flags & APC_EXTENSIBLE) { + switch(asn_random_between(0, 5)) { + case 0: + if(pc->lower_bound > 0) { + rnd_len = pc->lower_bound - 1; + break; + } + /* Fall through */ + case 1: + rnd_len = pc->upper_bound + 1; + break; + case 2: + /* Keep rnd_len from the table */ + if(rnd_len <= max_length) { + break; + } + /* Fall through */ + default: + rnd_len = asn_random_between(pc->lower_bound, + suggested_upper_bound); + } + } else { + rnd_len = + asn_random_between(pc->lower_bound, suggested_upper_bound); + } + } else { + rnd_len = asn_random_between(0, max_length); + } + } else if(rnd_len > max_length) { + rnd_len = asn_random_between(0, max_length); + } + + return rnd_len; +} + +asn_random_fill_result_t +OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + unsigned int unit_bytes = 1; + unsigned long clb = 0; /* Lower bound on char */ + unsigned long cub = 255; /* Higher bound on char value */ + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + OCTET_STRING_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + return result_failed; + case ASN_OSUBV_BIT: + /* Handled by BIT_STRING itself. */ + return result_failed; + case ASN_OSUBV_STR: + unit_bytes = 1; + clb = 0; + cub = 255; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + clb = 0; + cub = 65535; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + clb = 0; + cub = 0x10FFFF; + break; + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_SEMI_CONSTRAINED) { + clb = pc->lower_bound; + } else if(pc->flags & APC_CONSTRAINED) { + clb = pc->lower_bound; + cub = pc->upper_bound; + } + } + + rnd_len = + OCTET_STRING_random_length_constrained(td, constraints, max_length); + + buf = CALLOC(unit_bytes, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[unit_bytes * rnd_len]; + + switch(unit_bytes) { + case 1: + for(b = buf; b < bend; b += unit_bytes) { + *(uint8_t *)b = OCTET_STRING__random_char(clb, cub); + } + *(uint8_t *)b = 0; + break; + case 2: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 8; + b[1] = code; + } + *(uint16_t *)b = 0; + break; + case 4: + for(b = buf; b < bend; b += unit_bytes) { + uint32_t code = OCTET_STRING__random_char(clb, cub); + b[0] = code >> 24; + b[1] = code >> 16; + b[2] = code >> 8; + b[3] = code; + } + *(uint32_t *)b = 0; + break; + } + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = unit_bytes * rnd_len; + + result_ok.length = st->size; + return result_ok; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.h new file mode 100644 index 0000000..c2f8bae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING.h @@ -0,0 +1,102 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + size_t size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; +extern asn_TYPE_operation_t asn_OP_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +asn_struct_compare_f OCTET_STRING_compare; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +oer_type_decoder_f OCTET_STRING_decode_oer; +oer_type_encoder_f OCTET_STRING_encode_oer; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; +per_type_decoder_f OCTET_STRING_decode_aper; +per_type_encoder_f OCTET_STRING_encode_aper; +asn_random_fill_f OCTET_STRING_random_fill; + +#define OCTET_STRING_constraint asn_generic_no_constraint +#define OCTET_STRING_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the structure */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs; + +size_t OCTET_STRING_random_length_constrained( + const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *, + size_t max_length); + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING_oer.c new file mode 100644 index 0000000..c16faea --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OCTET_STRING_oer.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +asn_dec_rval_t +OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING"); + ASN__DECODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + (void)opt_codec_ctx; + + if(!st) { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) ASN__DECODE_FAILED; + } + + if(ct_size >= 0) { + expected_length = unit_bytes * ct_size; + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(expected_length % unit_bytes != 0) { + ASN_DEBUG( + "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "", + expected_length, unit_bytes); + ASN__DECODE_FAILED; + } + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_OCTET_STRING_specs; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + const asn_oer_constraints_t *cts = + constraints ? constraints : td->encoding_constraints.oer_constraints; + ssize_t ct_size = cts ? cts->size : -1; + asn_enc_rval_t er = {0, 0, 0}; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size); + + if(ct_size >= 0) { + /* + * Check that available data matches the constraint + */ + size_t unit_bytes; + switch(specs->subvariant) { + default: + case ASN_OSUBV_BIT: + ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING"); + ASN__ENCODE_FAILED; + case ASN_OSUBV_ANY: + /* Fall through */ + case ASN_OSUBV_STR: + unit_bytes = 1; + break; + case ASN_OSUBV_U16: + unit_bytes = 2; + break; + case ASN_OSUBV_U32: + unit_bytes = 4; + break; + } + + if(st->size != unit_bytes * (size_t)ct_size) { + ASN_DEBUG( + "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE " + "constraint (%" ASN_PRI_SIZE ")", + td->name, st->size, ct_size); + ASN__ENCODE_FAILED; + } + } else { + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + ssize_t ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + } + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.c new file mode 100644 index 0000000..a54e99c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.c @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include + +asn_TYPE_operation_t asn_OP_OPEN_TYPE = { + OPEN_TYPE_free, + OPEN_TYPE_print, + OPEN_TYPE_compare, + OPEN_TYPE_decode_ber, + OPEN_TYPE_encode_der, + OPEN_TYPE_decode_xer, + OPEN_TYPE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, 0, /* No OER support, use "-gen-OER" to enable */ +#else + OPEN_TYPE_decode_oer, + OPEN_TYPE_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + OPEN_TYPE_decode_uper, + OPEN_TYPE_encode_uper, + OPEN_TYPE_decode_aper, + OPEN_TYPE_encode_aper, +#endif + 0, /* Random fill is not supported for open type */ + 0 /* Use generic outmost tag fetcher */ +}; + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_dec_rval_t +OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ASN_DEBUG("presence %d\n", selected.presence_index); + + rv = selected.type_descriptor->op->ber_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size, + elm->tag_mode); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = consumed_myself; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case RC_FAIL: + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + break; + } + + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; +} + +asn_dec_rval_t +OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, const void *ptr, size_t size) { + size_t consumed_myself = 0; + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + int xer_context = 0; + ssize_t ch_size; + pxer_chunk_type_e ch_type; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + /* + * Confirm wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_OPENING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = selected.type_descriptor->op->xer_decoder( + opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size); + ADVANCE(rv.consumed); + rv.consumed = 0; + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_FAIL: + /* Point to a best position where failure occurred */ + rv.consumed = consumed_myself; + /* Fall through */ + case RC_WMORE: + /* Wrt. rv.consumed==0: + * In case a genuine RC_WMORE, the whole Open Type decoding + * will have to be restarted. + */ + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + return rv; + } + + /* + * Finalize wrapper. + */ + for(;;) { + ch_size = xer_next_token(&xer_context, ptr, size, &ch_type); + if(ch_size < 0) { + ASN__DECODE_FAILED; + } else { + switch(ch_type) { + case PXER_WMORE: + ASN__DECODE_STARVED; + case PXER_COMMENT: + case PXER_TEXT: + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; + } + break; + } + } + + /* + * Wrapper value confirmed. + */ + switch(xer_check_tag(ptr, ch_size, elm->name)) { + case XCT_CLOSING: + ADVANCE(ch_size); + break; + case XCT_BROKEN: + default: + ASN__DECODE_FAILED; + } + + rv.consumed += consumed_myself; + + return rv; +} + + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + const asn_TYPE_member_t *elm, asn_per_data_t *pd) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + assert(elm->flags == ATF_OPEN_TYPE); + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) + != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, pd); + switch(rv.code) { + case RC_OK: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + break; + } else { + rv.code = RC_FAIL; + } + /* Fall through */ + case RC_WMORE: + case RC_FAIL: + if(*memb_ptr2) { + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_RESET(*selected.type_descriptor, + inner_value); + } + } + } + return rv; +} + +asn_enc_rval_t +OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const void *memb_ptr; /* Pointer to the member */ + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_enc_rval_t er = {0,0,0}; + unsigned present; + + (void)constraints; + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + present--; + } + + ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present); + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) { + ASN__ENCODE_FAILED; + } + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.h new file mode 100644 index 0000000..b0d023c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE.h @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2017-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_OPEN_TYPE_H +#define ASN_OPEN_TYPE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OPEN_TYPE_free CHOICE_free +#define OPEN_TYPE_print CHOICE_print +#define OPEN_TYPE_compare CHOICE_compare +#define OPEN_TYPE_constraint CHOICE_constraint +#define OPEN_TYPE_decode_ber NULL +#define OPEN_TYPE_encode_der CHOICE_encode_der +#define OPEN_TYPE_decode_xer NULL +#define OPEN_TYPE_encode_xer CHOICE_encode_xer +#define OPEN_TYPE_decode_oer NULL +#define OPEN_TYPE_encode_oer CHOICE_encode_oer +#define OPEN_TYPE_decode_uper NULL +#define OPEN_TYPE_decode_aper NULL + +extern asn_TYPE_operation_t asn_OP_OPEN_TYPE; + +/* + * Decode an Open Type which is potentially constraiend + * by the other members of the parent structure. + */ +asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + const void *ptr, size_t size); + +asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + asn_TYPE_member_t *element, const void *ptr, + size_t size); + +asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *parent_type, + void *parent_structure, + const asn_TYPE_member_t *element, + asn_per_data_t *pd); + +asn_enc_rval_t OPEN_TYPE_encode_uper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +asn_enc_rval_t OPEN_TYPE_encode_aper( + const asn_TYPE_descriptor_t *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_OPEN_TYPE_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE_oer.c new file mode 100644 index 0000000..dd2f5c6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/OPEN_TYPE_oer.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +asn_dec_rval_t +OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void *sptr, + asn_TYPE_member_t *elm, const void *ptr, size_t size) { + asn_type_selector_result_t selected; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *inner_value; + asn_dec_rval_t rv; + size_t ot_ret; + + + if(!(elm->flags & ATF_OPEN_TYPE)) { + ASN__DECODE_FAILED; + } + + if(!elm->type_selector) { + ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s", + td->name, elm->name, elm->type->name); + ASN__DECODE_FAILED; + } + + selected = elm->type_selector(td, sptr); + if(!selected.presence_index) { + ASN__DECODE_FAILED; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + if(*memb_ptr2 != NULL) { + /* Make sure we reset the structure first before encoding */ + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) { + ASN__DECODE_FAILED; + } + } + + inner_value = + (char *)*memb_ptr2 + + elm->type->elements[selected.presence_index - 1].memb_offset; + + ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL, + &inner_value, ptr, size); + switch(ot_ret) { + default: + if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, + selected.presence_index) + == 0) { + rv.code = RC_OK; + rv.consumed = ot_ret; + return rv; + } else { + /* Oh, now a full-blown failure failure */ + } + /* Fall through */ + case -1: + rv.code = RC_FAIL; + rv.consumed = ot_ret; + break; + case 0: + rv.code = RC_WMORE; + rv.consumed = 0; + break; + } + + if(*memb_ptr2) { + const asn_CHOICE_specifics_t *specs = + selected.type_descriptor->specifics; + if(elm->flags & ATF_POINTER) { + ASN_STRUCT_FREE(*selected.type_descriptor, inner_value); + *memb_ptr2 = NULL; + } else { + ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor, + inner_value); + memset(*memb_ptr2, 0, specs->struct_size); + } + } + return rv; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.c new file mode 100644 index 0000000..d0a3d97 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "PLMN-Identity.h" + +int +PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { 0, 0 }, + 3 /* (SIZE(3..3)) */}; +asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + { &asn_OER_type_PLMN_Identity_constr_1, &asn_PER_type_PLMN_Identity_constr_1, PLMN_Identity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.h new file mode 100644 index 0000000..0083974 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/PLMN-Identity.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMN-Identity */ +typedef OCTET_STRING_t PLMN_Identity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMN_Identity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; +asn_struct_free_f PLMN_Identity_free; +asn_struct_print_f PLMN_Identity_print; +asn_constr_check_f PLMN_Identity_constraint; +ber_type_decoder_f PLMN_Identity_decode_ber; +der_type_encoder_f PLMN_Identity_encode_der; +xer_type_decoder_f PLMN_Identity_decode_xer; +xer_type_encoder_f PLMN_Identity_encode_xer; +oer_type_decoder_f PLMN_Identity_decode_oer; +oer_type_encoder_f PLMN_Identity_encode_oer; +per_type_decoder_f PLMN_Identity_decode_uper; +per_type_encoder_f PLMN_Identity_encode_uper; +per_type_decoder_f PLMN_Identity_decode_aper; +per_type_encoder_f PLMN_Identity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_Identity_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.c new file mode 100644 index 0000000..e28be1a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "Presence.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_Presence_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_Presence_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_Presence_value2enum_1[] = { + { 0, 8, "optional" }, + { 1, 11, "conditional" }, + { 2, 9, "mandatory" } +}; +static const unsigned int asn_MAP_Presence_enum2value_1[] = { + 1, /* conditional(1) */ + 2, /* mandatory(2) */ + 0 /* optional(0) */ +}; +const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1 = { + asn_MAP_Presence_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Presence_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_Presence_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Presence = { + "Presence", + "Presence", + &asn_OP_NativeEnumerated, + asn_DEF_Presence_tags_1, + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + asn_DEF_Presence_tags_1, /* Same as above */ + sizeof(asn_DEF_Presence_tags_1) + /sizeof(asn_DEF_Presence_tags_1[0]), /* 1 */ + { &asn_OER_type_Presence_constr_1, &asn_PER_type_Presence_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Presence_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.h new file mode 100644 index 0000000..9af00f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/Presence.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _Presence_H_ +#define _Presence_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Presence { + Presence_optional = 0, + Presence_conditional = 1, + Presence_mandatory = 2 +} e_Presence; + +/* Presence */ +typedef long Presence_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_Presence_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_Presence; +extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1; +asn_struct_free_f Presence_free; +asn_struct_print_f Presence_print; +asn_constr_check_f Presence_constraint; +ber_type_decoder_f Presence_decode_ber; +der_type_encoder_f Presence_encode_der; +xer_type_decoder_f Presence_decode_xer; +xer_type_encoder_f Presence_encode_xer; +oer_type_decoder_f Presence_decode_oer; +oer_type_encoder_f Presence_encode_oer; +per_type_decoder_f Presence_decode_uper; +per_type_encoder_f Presence_encode_uper; +per_type_decoder_f Presence_decode_aper; +per_type_encoder_f Presence_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Presence_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.c new file mode 100644 index 0000000..31d0944 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProcedureCode.h" + +int +ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProcedureCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProcedureCode = { + "ProcedureCode", + "ProcedureCode", + &asn_OP_NativeInteger, + asn_DEF_ProcedureCode_tags_1, + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + asn_DEF_ProcedureCode_tags_1, /* Same as above */ + sizeof(asn_DEF_ProcedureCode_tags_1) + /sizeof(asn_DEF_ProcedureCode_tags_1[0]), /* 1 */ + { &asn_OER_type_ProcedureCode_constr_1, &asn_PER_type_ProcedureCode_constr_1, ProcedureCode_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.h new file mode 100644 index 0000000..1d85971 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProcedureCode.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProcedureCode_H_ +#define _ProcedureCode_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProcedureCode */ +typedef long ProcedureCode_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode; +asn_struct_free_f ProcedureCode_free; +asn_struct_print_f ProcedureCode_print; +asn_constr_check_f ProcedureCode_constraint; +ber_type_decoder_f ProcedureCode_decode_ber; +der_type_encoder_f ProcedureCode_encode_der; +xer_type_decoder_f ProcedureCode_decode_xer; +xer_type_encoder_f ProcedureCode_encode_xer; +oer_type_decoder_f ProcedureCode_decode_oer; +oer_type_encoder_f ProcedureCode_encode_oer; +per_type_decoder_f ProcedureCode_decode_uper; +per_type_encoder_f ProcedureCode_encode_uper; +per_type_decoder_f ProcedureCode_decode_aper; +per_type_encoder_f ProcedureCode_encode_aper; +#define ProcedureCode_id_E2setup ((ProcedureCode_t)1) +#define ProcedureCode_id_ErrorIndication ((ProcedureCode_t)2) +#define ProcedureCode_id_Reset ((ProcedureCode_t)3) +#define ProcedureCode_id_RICcontrol ((ProcedureCode_t)4) +#define ProcedureCode_id_RICindication ((ProcedureCode_t)5) +#define ProcedureCode_id_RICserviceQuery ((ProcedureCode_t)6) +#define ProcedureCode_id_RICserviceUpdate ((ProcedureCode_t)7) +#define ProcedureCode_id_RICsubscription ((ProcedureCode_t)8) +#define ProcedureCode_id_RICsubscriptionDelete ((ProcedureCode_t)9) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProcedureCode_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.c new file mode 100644 index 0000000..4636657 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.c @@ -0,0 +1,870 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-Container.h" + +#include "ProtocolIE-Field.h" +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..65535)) */}; +asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (SIZE(0..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1 = { + sizeof(struct ProtocolIE_Container_1527P0), + offsetof(struct ProtocolIE_Container_1527P0, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P0_tags_1, + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_Container_1527P0_tags_1[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P0_constr_1, &asn_PER_type_ProtocolIE_Container_1527P0_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P0_1, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P0_specs_1 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P1_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3 = { + sizeof(struct ProtocolIE_Container_1527P1), + offsetof(struct ProtocolIE_Container_1527P1, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P1_tags_3, + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P1_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3) + /sizeof(asn_DEF_ProtocolIE_Container_1527P1_tags_3[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P1_constr_3, &asn_PER_type_ProtocolIE_Container_1527P1_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P1_3, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P1_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P2_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5 = { + sizeof(struct ProtocolIE_Container_1527P2), + offsetof(struct ProtocolIE_Container_1527P2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P2_tags_5, + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P2_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5) + /sizeof(asn_DEF_ProtocolIE_Container_1527P2_tags_5[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P2_constr_5, &asn_PER_type_ProtocolIE_Container_1527P2_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P2_5, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P2_specs_5 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P3_tags_7[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7 = { + sizeof(struct ProtocolIE_Container_1527P3), + offsetof(struct ProtocolIE_Container_1527P3, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P3_tags_7, + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P3_tags_7, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7) + /sizeof(asn_DEF_ProtocolIE_Container_1527P3_tags_7[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P3_constr_7, &asn_PER_type_ProtocolIE_Container_1527P3_constr_7, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P3_7, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P3_specs_7 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P4_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9 = { + sizeof(struct ProtocolIE_Container_1527P4), + offsetof(struct ProtocolIE_Container_1527P4, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P4_tags_9, + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P4_tags_9, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9) + /sizeof(asn_DEF_ProtocolIE_Container_1527P4_tags_9[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P4_constr_9, &asn_PER_type_ProtocolIE_Container_1527P4_constr_9, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P4_9, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P4_specs_9 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P5_tags_11[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11 = { + sizeof(struct ProtocolIE_Container_1527P5), + offsetof(struct ProtocolIE_Container_1527P5, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P5_tags_11, + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P5_tags_11, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11) + /sizeof(asn_DEF_ProtocolIE_Container_1527P5_tags_11[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P5_constr_11, &asn_PER_type_ProtocolIE_Container_1527P5_constr_11, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P5_11, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P5_specs_11 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICindication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P6_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13 = { + sizeof(struct ProtocolIE_Container_1527P6), + offsetof(struct ProtocolIE_Container_1527P6, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P6_tags_13, + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P6_tags_13, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13) + /sizeof(asn_DEF_ProtocolIE_Container_1527P6_tags_13[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P6_constr_13, &asn_PER_type_ProtocolIE_Container_1527P6_constr_13, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P6_13, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P6_specs_13 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolRequest_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P7_tags_15[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15 = { + sizeof(struct ProtocolIE_Container_1527P7), + offsetof(struct ProtocolIE_Container_1527P7, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P7_tags_15, + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P7_tags_15, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15) + /sizeof(asn_DEF_ProtocolIE_Container_1527P7_tags_15[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P7_constr_15, &asn_PER_type_ProtocolIE_Container_1527P7_constr_15, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P7_15, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P7_specs_15 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P8_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17 = { + sizeof(struct ProtocolIE_Container_1527P8), + offsetof(struct ProtocolIE_Container_1527P8, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P8_tags_17, + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P8_tags_17, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17) + /sizeof(asn_DEF_ProtocolIE_Container_1527P8_tags_17[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P8_constr_17, &asn_PER_type_ProtocolIE_Container_1527P8_constr_17, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P8_17, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P8_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P9_tags_19[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19 = { + sizeof(struct ProtocolIE_Container_1527P9), + offsetof(struct ProtocolIE_Container_1527P9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P9_tags_19, + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P9_tags_19, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19) + /sizeof(asn_DEF_ProtocolIE_Container_1527P9_tags_19[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P9_constr_19, &asn_PER_type_ProtocolIE_Container_1527P9_constr_19, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P9_19, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P9_specs_19 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ErrorIndication_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P10_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21 = { + sizeof(struct ProtocolIE_Container_1527P10), + offsetof(struct ProtocolIE_Container_1527P10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P10_tags_21, + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P10_tags_21, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21) + /sizeof(asn_DEF_ProtocolIE_Container_1527P10_tags_21[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P10_constr_21, &asn_PER_type_ProtocolIE_Container_1527P10_constr_21, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P10_21, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P10_specs_21 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P11_tags_23[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23 = { + sizeof(struct ProtocolIE_Container_1527P11), + offsetof(struct ProtocolIE_Container_1527P11, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P11_tags_23, + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P11_tags_23, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23) + /sizeof(asn_DEF_ProtocolIE_Container_1527P11_tags_23[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P11_constr_23, &asn_PER_type_ProtocolIE_Container_1527P11_constr_23, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P11_23, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P11_specs_23 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P12_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25 = { + sizeof(struct ProtocolIE_Container_1527P12), + offsetof(struct ProtocolIE_Container_1527P12, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P12_tags_25, + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P12_tags_25, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25) + /sizeof(asn_DEF_ProtocolIE_Container_1527P12_tags_25[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P12_constr_25, &asn_PER_type_ProtocolIE_Container_1527P12_constr_25, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P12_25, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P12_specs_25 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailureIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P13_tags_27[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27 = { + sizeof(struct ProtocolIE_Container_1527P13), + offsetof(struct ProtocolIE_Container_1527P13, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P13_tags_27, + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P13_tags_27, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27) + /sizeof(asn_DEF_ProtocolIE_Container_1527P13_tags_27[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P13_constr_27, &asn_PER_type_ProtocolIE_Container_1527P13_constr_27, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P13_27, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P13_specs_27 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetRequestIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P14_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29 = { + sizeof(struct ProtocolIE_Container_1527P14), + offsetof(struct ProtocolIE_Container_1527P14, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P14_tags_29, + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P14_tags_29, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29) + /sizeof(asn_DEF_ProtocolIE_Container_1527P14_tags_29[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P14_constr_29, &asn_PER_type_ProtocolIE_Container_1527P14_constr_29, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P14_29, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P14_specs_29 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponseIEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P15_tags_31[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31 = { + sizeof(struct ProtocolIE_Container_1527P15), + offsetof(struct ProtocolIE_Container_1527P15, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P15_tags_31, + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P15_tags_31, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31) + /sizeof(asn_DEF_ProtocolIE_Container_1527P15_tags_31[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P15_constr_31, &asn_PER_type_ProtocolIE_Container_1527P15_constr_31, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P15_31, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P15_specs_31 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdate_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P16_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33 = { + sizeof(struct ProtocolIE_Container_1527P16), + offsetof(struct ProtocolIE_Container_1527P16, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P16_tags_33, + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P16_tags_33, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33) + /sizeof(asn_DEF_ProtocolIE_Container_1527P16_tags_33[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P16_constr_33, &asn_PER_type_ProtocolIE_Container_1527P16_constr_33, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P16_33, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P16_specs_33 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P17_tags_35[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35 = { + sizeof(struct ProtocolIE_Container_1527P17), + offsetof(struct ProtocolIE_Container_1527P17, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P17_tags_35, + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P17_tags_35, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35) + /sizeof(asn_DEF_ProtocolIE_Container_1527P17_tags_35[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P17_constr_35, &asn_PER_type_ProtocolIE_Container_1527P17_constr_35, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P17_35, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P17_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P18_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37 = { + sizeof(struct ProtocolIE_Container_1527P18), + offsetof(struct ProtocolIE_Container_1527P18, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P18_tags_37, + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P18_tags_37, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37) + /sizeof(asn_DEF_ProtocolIE_Container_1527P18_tags_37[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P18_constr_37, &asn_PER_type_ProtocolIE_Container_1527P18_constr_37, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P18_37, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P18_specs_37 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceQuery_IEs, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1527P19_tags_39[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39 = { + sizeof(struct ProtocolIE_Container_1527P19), + offsetof(struct ProtocolIE_Container_1527P19, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19 = { + "ProtocolIE-Container", + "ProtocolIE-Container", + &asn_OP_SEQUENCE_OF, + asn_DEF_ProtocolIE_Container_1527P19_tags_39, + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + asn_DEF_ProtocolIE_Container_1527P19_tags_39, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39) + /sizeof(asn_DEF_ProtocolIE_Container_1527P19_tags_39[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_Container_1527P19_constr_39, &asn_PER_type_ProtocolIE_Container_1527P19_constr_39, SEQUENCE_OF_constraint }, + asn_MBR_ProtocolIE_Container_1527P19_39, + 1, /* Single element */ + &asn_SPC_ProtocolIE_Container_1527P19_specs_39 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.h new file mode 100644 index 0000000..750426b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Container.h @@ -0,0 +1,253 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_Container_H_ +#define _ProtocolIE_Container_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubscriptionRequest_IEs; +struct RICsubscriptionResponse_IEs; +struct RICsubscriptionFailure_IEs; +struct RICsubscriptionDeleteRequest_IEs; +struct RICsubscriptionDeleteResponse_IEs; +struct RICsubscriptionDeleteFailure_IEs; +struct RICindication_IEs; +struct RICcontrolRequest_IEs; +struct RICcontrolAcknowledge_IEs; +struct RICcontrolFailure_IEs; +struct ErrorIndication_IEs; +struct E2setupRequestIEs; +struct E2setupResponseIEs; +struct E2setupFailureIEs; +struct ResetRequestIEs; +struct ResetResponseIEs; +struct RICserviceUpdate_IEs; +struct RICserviceUpdateAcknowledge_IEs; +struct RICserviceUpdateFailure_IEs; +struct RICserviceQuery_IEs; + +/* ProtocolIE-Container */ +typedef struct ProtocolIE_Container_1527P0 { + A_SEQUENCE_OF(struct RICsubscriptionRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P0_t; +typedef struct ProtocolIE_Container_1527P1 { + A_SEQUENCE_OF(struct RICsubscriptionResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P1_t; +typedef struct ProtocolIE_Container_1527P2 { + A_SEQUENCE_OF(struct RICsubscriptionFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P2_t; +typedef struct ProtocolIE_Container_1527P3 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P3_t; +typedef struct ProtocolIE_Container_1527P4 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteResponse_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P4_t; +typedef struct ProtocolIE_Container_1527P5 { + A_SEQUENCE_OF(struct RICsubscriptionDeleteFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P5_t; +typedef struct ProtocolIE_Container_1527P6 { + A_SEQUENCE_OF(struct RICindication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P6_t; +typedef struct ProtocolIE_Container_1527P7 { + A_SEQUENCE_OF(struct RICcontrolRequest_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P7_t; +typedef struct ProtocolIE_Container_1527P8 { + A_SEQUENCE_OF(struct RICcontrolAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P8_t; +typedef struct ProtocolIE_Container_1527P9 { + A_SEQUENCE_OF(struct RICcontrolFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P9_t; +typedef struct ProtocolIE_Container_1527P10 { + A_SEQUENCE_OF(struct ErrorIndication_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P10_t; +typedef struct ProtocolIE_Container_1527P11 { + A_SEQUENCE_OF(struct E2setupRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P11_t; +typedef struct ProtocolIE_Container_1527P12 { + A_SEQUENCE_OF(struct E2setupResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P12_t; +typedef struct ProtocolIE_Container_1527P13 { + A_SEQUENCE_OF(struct E2setupFailureIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P13_t; +typedef struct ProtocolIE_Container_1527P14 { + A_SEQUENCE_OF(struct ResetRequestIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P14_t; +typedef struct ProtocolIE_Container_1527P15 { + A_SEQUENCE_OF(struct ResetResponseIEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P15_t; +typedef struct ProtocolIE_Container_1527P16 { + A_SEQUENCE_OF(struct RICserviceUpdate_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P16_t; +typedef struct ProtocolIE_Container_1527P17 { + A_SEQUENCE_OF(struct RICserviceUpdateAcknowledge_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P17_t; +typedef struct ProtocolIE_Container_1527P18 { + A_SEQUENCE_OF(struct RICserviceUpdateFailure_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P18_t; +typedef struct ProtocolIE_Container_1527P19 { + A_SEQUENCE_OF(struct RICserviceQuery_IEs) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProtocolIE_Container_1527P19_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P0; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P0_specs_1; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P0_1[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P0_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P1; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P1_specs_3; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P1_3[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P1_constr_3; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P2; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P2_specs_5; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P2_5[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P2_constr_5; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P3; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P3_specs_7; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P3_7[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P3_constr_7; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P4; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P4_specs_9; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P4_9[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P4_constr_9; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P5; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P5_specs_11; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P5_11[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P5_constr_11; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P6; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P6_specs_13; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P6_13[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P6_constr_13; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P7; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P7_specs_15; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P7_15[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P7_constr_15; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P8; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P8_specs_17; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P8_17[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P8_constr_17; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P9; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P9_specs_19; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P9_19[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P9_constr_19; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P10; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P10_specs_21; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P10_21[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P10_constr_21; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P11; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P11_specs_23; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P11_23[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P11_constr_23; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P12; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P12_specs_25; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P12_25[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P12_constr_25; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P13; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P13_specs_27; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P13_27[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P13_constr_27; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P14; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P14_specs_29; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P14_29[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P14_constr_29; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P15; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P15_specs_31; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P15_31[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P15_constr_31; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P16; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P16_specs_33; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P16_33[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P16_constr_33; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P17; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P17_specs_35; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P17_35[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P17_constr_35; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P18; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P18_specs_37; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P18_37[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P18_constr_37; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1527P19; +extern asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1527P19_specs_39; +extern asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1527P19_39[1]; +extern asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1527P19_constr_39; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Container_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.c new file mode 100644 index 0000000..c434a72 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.h new file mode 100644 index 0000000..c895e7e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerList_H_ +#define _ProtocolIE_ContainerList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c new file mode 100644 index 0000000..44a410d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h new file mode 100644 index 0000000..178cc55 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerPair_H_ +#define _ProtocolIE_ContainerPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c new file mode 100644 index 0000000..9019178 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ContainerPairList.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h new file mode 100644 index 0000000..dd9a5be --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ContainerPairList.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ContainerPairList_H_ +#define _ProtocolIE_ContainerPairList_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ContainerPairList_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.c new file mode 100644 index 0000000..e6abc22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.c @@ -0,0 +1,7424 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-Field.h" + +static const long asn_VAL_4_id_RICaction_ToBeSetup_Item = 19; +static const long asn_VAL_4_ignore = 1; +static const long asn_VAL_4_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_4_id_RICaction_ToBeSetup_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_ToBeSetup_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_4_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_ToBeSetup_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_ToBeSetup_ItemIEs_1_rows } +}; +static const long asn_VAL_9_id_RICaction_Admitted_Item = 14; +static const long asn_VAL_9_ignore = 1; +static const long asn_VAL_9_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_Admitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_9_id_RICaction_Admitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_9_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_Admitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_Admitted_ItemIEs_1_rows } +}; +static const long asn_VAL_10_id_RICaction_NotAdmitted_Item = 16; +static const long asn_VAL_10_ignore = 1; +static const long asn_VAL_10_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_10_id_RICaction_NotAdmitted_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_10_ignore }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_10_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICaction_NotAdmitted_ItemIEs_1[] = { + { 1, 4, asn_IOS_RICaction_NotAdmitted_ItemIEs_1_rows } +}; +static const long asn_VAL_64_id_RANfunction_Item = 8; +static const long asn_VAL_64_ignore = 1; +static const long asn_VAL_64_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunction_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_64_id_RANfunction_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_64_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunction_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_64_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunction_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunction_ItemIEs_1_rows } +}; +static const long asn_VAL_65_id_RANfunctionID_Item = 6; +static const long asn_VAL_65_ignore = 1; +static const long asn_VAL_65_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionID_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_65_id_RANfunctionID_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_65_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_65_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionID_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionID_ItemIEs_1_rows } +}; +static const long asn_VAL_68_id_RANfunctionIEcause_Item = 7; +static const long asn_VAL_68_ignore = 1; +static const long asn_VAL_68_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RANfunctionIDcause_ItemIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_68_id_RANfunctionIEcause_Item }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_68_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionIDcause_Item }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_68_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RANfunctionIDcause_ItemIEs_1[] = { + { 1, 4, asn_IOS_RANfunctionIDcause_ItemIEs_1_rows } +}; +static const long asn_VAL_1_id_RICrequestID = 29; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_1_mandatory = 2; +static const long asn_VAL_2_id_RANfunctionID = 5; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_2_mandatory = 2; +static const long asn_VAL_3_id_RICsubscriptionDetails = 30; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_3_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_1_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_1_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_2_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_2_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_3_id_RICsubscriptionDetails }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&Value", aioc__type, &asn_DEF_RICsubscriptionDetails }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_3_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionRequest_IEs_1[] = { + { 3, 4, asn_IOS_RICsubscriptionRequest_IEs_1_rows } +}; +static const long asn_VAL_5_id_RICrequestID = 29; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_5_mandatory = 2; +static const long asn_VAL_6_id_RANfunctionID = 5; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_6_mandatory = 2; +static const long asn_VAL_7_id_RICactions_Admitted = 17; +static const long asn_VAL_7_reject = 0; +static const long asn_VAL_7_mandatory = 2; +static const long asn_VAL_8_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_8_reject = 0; +static const long asn_VAL_8_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_5_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_5_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_6_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_6_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_7_id_RICactions_Admitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_Admitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_7_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_8_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_8_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionResponse_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionResponse_IEs_1_rows } +}; +static const long asn_VAL_11_id_RICrequestID = 29; +static const long asn_VAL_11_reject = 0; +static const long asn_VAL_11_mandatory = 2; +static const long asn_VAL_12_id_RANfunctionID = 5; +static const long asn_VAL_12_reject = 0; +static const long asn_VAL_12_mandatory = 2; +static const long asn_VAL_13_id_RICactions_NotAdmitted = 18; +static const long asn_VAL_13_reject = 0; +static const long asn_VAL_13_mandatory = 2; +static const long asn_VAL_14_id_CriticalityDiagnostics = 2; +static const long asn_VAL_14_ignore = 1; +static const long asn_VAL_14_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_11_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_11_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_11_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_12_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_12_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_12_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_13_id_RICactions_NotAdmitted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_13_reject }, + { "&Value", aioc__type, &asn_DEF_RICaction_NotAdmitted_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_13_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_14_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_14_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_14_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionFailure_IEs_1_rows } +}; +static const long asn_VAL_15_id_RICrequestID = 29; +static const long asn_VAL_15_reject = 0; +static const long asn_VAL_15_mandatory = 2; +static const long asn_VAL_16_id_RANfunctionID = 5; +static const long asn_VAL_16_reject = 0; +static const long asn_VAL_16_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_15_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_15_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_15_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_16_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_16_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_16_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteRequest_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteRequest_IEs_1_rows } +}; +static const long asn_VAL_17_id_RICrequestID = 29; +static const long asn_VAL_17_reject = 0; +static const long asn_VAL_17_mandatory = 2; +static const long asn_VAL_18_id_RANfunctionID = 5; +static const long asn_VAL_18_reject = 0; +static const long asn_VAL_18_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_17_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_17_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_17_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_18_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_18_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_18_mandatory } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteResponse_IEs_1[] = { + { 2, 4, asn_IOS_RICsubscriptionDeleteResponse_IEs_1_rows } +}; +static const long asn_VAL_19_id_RICrequestID = 29; +static const long asn_VAL_19_reject = 0; +static const long asn_VAL_19_mandatory = 2; +static const long asn_VAL_20_id_RANfunctionID = 5; +static const long asn_VAL_20_reject = 0; +static const long asn_VAL_20_mandatory = 2; +static const long asn_VAL_21_id_Cause = 1; +static const long asn_VAL_21_ignore = 1; +static const long asn_VAL_21_mandatory = 2; +static const long asn_VAL_22_id_CriticalityDiagnostics = 2; +static const long asn_VAL_22_ignore = 1; +static const long asn_VAL_22_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_19_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_19_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_19_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_20_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_20_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_20_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_21_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_21_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_21_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_22_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_22_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_22_optional } +}; +static const asn_ioc_set_t asn_IOS_RICsubscriptionDeleteFailure_IEs_1[] = { + { 4, 4, asn_IOS_RICsubscriptionDeleteFailure_IEs_1_rows } +}; +static const long asn_VAL_23_id_RICrequestID = 29; +static const long asn_VAL_23_reject = 0; +static const long asn_VAL_23_mandatory = 2; +static const long asn_VAL_24_id_RANfunctionID = 5; +static const long asn_VAL_24_reject = 0; +static const long asn_VAL_24_mandatory = 2; +static const long asn_VAL_25_id_RICactionID = 15; +static const long asn_VAL_25_reject = 0; +static const long asn_VAL_25_mandatory = 2; +static const long asn_VAL_26_id_RICindicationSN = 27; +static const long asn_VAL_26_reject = 0; +static const long asn_VAL_26_optional = 0; +static const long asn_VAL_27_id_RICindicationType = 28; +static const long asn_VAL_27_reject = 0; +static const long asn_VAL_27_mandatory = 2; +static const long asn_VAL_28_id_RICindicationHeader = 25; +static const long asn_VAL_28_reject = 0; +static const long asn_VAL_28_mandatory = 2; +static const long asn_VAL_29_id_RICindicationMessage = 26; +static const long asn_VAL_29_reject = 0; +static const long asn_VAL_29_mandatory = 2; +static const long asn_VAL_30_id_RICcallProcessID = 20; +static const long asn_VAL_30_reject = 0; +static const long asn_VAL_30_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICindication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_23_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_23_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_23_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_24_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_24_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_24_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_25_id_RICactionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_25_reject }, + { "&Value", aioc__type, &asn_DEF_RICactionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_25_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_26_id_RICindicationSN }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_26_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationSN }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_26_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_27_id_RICindicationType }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_27_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationType }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_27_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_28_id_RICindicationHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_28_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_28_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_29_id_RICindicationMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_29_reject }, + { "&Value", aioc__type, &asn_DEF_RICindicationMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_29_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_30_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_30_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_30_optional } +}; +static const asn_ioc_set_t asn_IOS_RICindication_IEs_1[] = { + { 8, 4, asn_IOS_RICindication_IEs_1_rows } +}; +static const long asn_VAL_31_id_RICrequestID = 29; +static const long asn_VAL_31_reject = 0; +static const long asn_VAL_31_mandatory = 2; +static const long asn_VAL_32_id_RANfunctionID = 5; +static const long asn_VAL_32_reject = 0; +static const long asn_VAL_32_mandatory = 2; +static const long asn_VAL_33_id_RICcallProcessID = 20; +static const long asn_VAL_33_reject = 0; +static const long asn_VAL_33_optional = 0; +static const long asn_VAL_34_id_RICcontrolHeader = 22; +static const long asn_VAL_34_reject = 0; +static const long asn_VAL_34_mandatory = 2; +static const long asn_VAL_35_id_RICcontrolMessage = 23; +static const long asn_VAL_35_reject = 0; +static const long asn_VAL_35_mandatory = 2; +static const long asn_VAL_36_id_RICcontrolAckRequest = 21; +static const long asn_VAL_36_reject = 0; +static const long asn_VAL_36_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolRequest_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_31_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_31_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_31_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_32_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_32_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_32_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_33_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_33_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_33_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_34_id_RICcontrolHeader }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_34_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolHeader }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_34_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_35_id_RICcontrolMessage }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_35_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolMessage }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_35_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_36_id_RICcontrolAckRequest }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_36_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolAckRequest }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_36_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolRequest_IEs_1[] = { + { 6, 4, asn_IOS_RICcontrolRequest_IEs_1_rows } +}; +static const long asn_VAL_37_id_RICrequestID = 29; +static const long asn_VAL_37_reject = 0; +static const long asn_VAL_37_mandatory = 2; +static const long asn_VAL_38_id_RANfunctionID = 5; +static const long asn_VAL_38_reject = 0; +static const long asn_VAL_38_mandatory = 2; +static const long asn_VAL_39_id_RICcallProcessID = 20; +static const long asn_VAL_39_reject = 0; +static const long asn_VAL_39_optional = 0; +static const long asn_VAL_40_id_RICcontrolStatus = 24; +static const long asn_VAL_40_reject = 0; +static const long asn_VAL_40_mandatory = 2; +static const long asn_VAL_41_id_RICcontrolOutcome = 32; +static const long asn_VAL_41_reject = 0; +static const long asn_VAL_41_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_37_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_37_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_37_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_38_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_38_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_38_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_39_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_39_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_39_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_40_id_RICcontrolStatus }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_40_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolStatus }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_40_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_41_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_41_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_41_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolAcknowledge_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_42_id_RICrequestID = 29; +static const long asn_VAL_42_reject = 0; +static const long asn_VAL_42_mandatory = 2; +static const long asn_VAL_43_id_RANfunctionID = 5; +static const long asn_VAL_43_reject = 0; +static const long asn_VAL_43_mandatory = 2; +static const long asn_VAL_44_id_RICcallProcessID = 20; +static const long asn_VAL_44_reject = 0; +static const long asn_VAL_44_optional = 0; +static const long asn_VAL_45_id_Cause = 1; +static const long asn_VAL_45_ignore = 1; +static const long asn_VAL_45_mandatory = 2; +static const long asn_VAL_46_id_RICcontrolOutcome = 32; +static const long asn_VAL_46_reject = 0; +static const long asn_VAL_46_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICcontrolFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_42_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_42_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_42_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_43_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_43_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_43_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_44_id_RICcallProcessID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_44_reject }, + { "&Value", aioc__type, &asn_DEF_RICcallProcessID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_44_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_45_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_45_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_45_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_46_id_RICcontrolOutcome }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_46_reject }, + { "&Value", aioc__type, &asn_DEF_RICcontrolOutcome }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_46_optional } +}; +static const asn_ioc_set_t asn_IOS_RICcontrolFailure_IEs_1[] = { + { 5, 4, asn_IOS_RICcontrolFailure_IEs_1_rows } +}; +static const long asn_VAL_47_id_RICrequestID = 29; +static const long asn_VAL_47_reject = 0; +static const long asn_VAL_47_optional = 0; +static const long asn_VAL_48_id_RANfunctionID = 5; +static const long asn_VAL_48_reject = 0; +static const long asn_VAL_48_optional = 0; +static const long asn_VAL_49_id_Cause = 1; +static const long asn_VAL_49_ignore = 1; +static const long asn_VAL_49_optional = 0; +static const long asn_VAL_50_id_CriticalityDiagnostics = 2; +static const long asn_VAL_50_ignore = 1; +static const long asn_VAL_50_optional = 0; +static const asn_ioc_cell_t asn_IOS_ErrorIndication_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_47_id_RICrequestID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_47_reject }, + { "&Value", aioc__type, &asn_DEF_RICrequestID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_47_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_48_id_RANfunctionID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_48_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_48_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_49_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_49_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_50_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_50_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_50_optional } +}; +static const asn_ioc_set_t asn_IOS_ErrorIndication_IEs_1[] = { + { 4, 4, asn_IOS_ErrorIndication_IEs_1_rows } +}; +static const long asn_VAL_51_id_GlobalE2node_ID = 3; +static const long asn_VAL_51_reject = 0; +static const long asn_VAL_51_mandatory = 2; +static const long asn_VAL_52_id_RANfunctionsAdded = 10; +static const long asn_VAL_52_reject = 0; +static const long asn_VAL_52_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_51_id_GlobalE2node_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_51_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalE2node_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_51_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_52_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_52_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_52_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupRequestIEs_1[] = { + { 2, 4, asn_IOS_E2setupRequestIEs_1_rows } +}; +static const long asn_VAL_53_id_GlobalRIC_ID = 4; +static const long asn_VAL_53_reject = 0; +static const long asn_VAL_53_mandatory = 2; +static const long asn_VAL_54_id_RANfunctionsAccepted = 9; +static const long asn_VAL_54_reject = 0; +static const long asn_VAL_54_optional = 0; +static const long asn_VAL_55_id_RANfunctionsRejected = 13; +static const long asn_VAL_55_reject = 0; +static const long asn_VAL_55_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_53_id_GlobalRIC_ID }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_53_reject }, + { "&Value", aioc__type, &asn_DEF_GlobalRIC_ID }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_53_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_54_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_54_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_54_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_55_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_55_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_55_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupResponseIEs_1[] = { + { 3, 4, asn_IOS_E2setupResponseIEs_1_rows } +}; +static const long asn_VAL_56_id_Cause = 1; +static const long asn_VAL_56_ignore = 1; +static const long asn_VAL_56_mandatory = 2; +static const long asn_VAL_57_id_TimeToWait = 31; +static const long asn_VAL_57_ignore = 1; +static const long asn_VAL_57_optional = 0; +static const long asn_VAL_58_id_CriticalityDiagnostics = 2; +static const long asn_VAL_58_ignore = 1; +static const long asn_VAL_58_optional = 0; +static const asn_ioc_cell_t asn_IOS_E2setupFailureIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_56_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_56_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_56_mandatory }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_57_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_57_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_57_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_58_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_58_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_58_optional } +}; +static const asn_ioc_set_t asn_IOS_E2setupFailureIEs_1[] = { + { 3, 4, asn_IOS_E2setupFailureIEs_1_rows } +}; +static const long asn_VAL_59_id_Cause = 1; +static const long asn_VAL_59_ignore = 1; +static const long asn_VAL_59_mandatory = 2; +static const asn_ioc_cell_t asn_IOS_ResetRequestIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_59_id_Cause }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_59_ignore }, + { "&Value", aioc__type, &asn_DEF_Cause }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_59_mandatory } +}; +static const asn_ioc_set_t asn_IOS_ResetRequestIEs_1[] = { + { 1, 4, asn_IOS_ResetRequestIEs_1_rows } +}; +static const long asn_VAL_60_id_CriticalityDiagnostics = 2; +static const long asn_VAL_60_ignore = 1; +static const long asn_VAL_60_optional = 0; +static const asn_ioc_cell_t asn_IOS_ResetResponseIEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_60_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_60_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_60_optional } +}; +static const asn_ioc_set_t asn_IOS_ResetResponseIEs_1[] = { + { 1, 4, asn_IOS_ResetResponseIEs_1_rows } +}; +static const long asn_VAL_61_id_RANfunctionsAdded = 10; +static const long asn_VAL_61_reject = 0; +static const long asn_VAL_61_optional = 0; +static const long asn_VAL_62_id_RANfunctionsModified = 12; +static const long asn_VAL_62_reject = 0; +static const long asn_VAL_62_optional = 0; +static const long asn_VAL_63_id_RANfunctionsDeleted = 11; +static const long asn_VAL_63_reject = 0; +static const long asn_VAL_63_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdate_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_61_id_RANfunctionsAdded }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_61_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_61_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_62_id_RANfunctionsModified }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_62_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctions_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_62_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_63_id_RANfunctionsDeleted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_63_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_63_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdate_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdate_IEs_1_rows } +}; +static const long asn_VAL_66_id_RANfunctionsAccepted = 9; +static const long asn_VAL_66_reject = 0; +static const long asn_VAL_66_optional = 0; +static const long asn_VAL_67_id_RANfunctionsRejected = 13; +static const long asn_VAL_67_reject = 0; +static const long asn_VAL_67_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_66_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_66_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_66_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_67_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_67_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_67_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateAcknowledge_IEs_1[] = { + { 2, 4, asn_IOS_RICserviceUpdateAcknowledge_IEs_1_rows } +}; +static const long asn_VAL_69_id_RANfunctionsRejected = 13; +static const long asn_VAL_69_ignore = 1; +static const long asn_VAL_69_optional = 0; +static const long asn_VAL_70_id_TimeToWait = 31; +static const long asn_VAL_70_ignore = 1; +static const long asn_VAL_70_optional = 0; +static const long asn_VAL_71_id_CriticalityDiagnostics = 2; +static const long asn_VAL_71_ignore = 1; +static const long asn_VAL_71_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceUpdateFailure_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_69_id_RANfunctionsRejected }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_69_ignore }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsIDcause_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_69_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_70_id_TimeToWait }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_70_ignore }, + { "&Value", aioc__type, &asn_DEF_TimeToWait }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_70_optional }, + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_71_id_CriticalityDiagnostics }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_71_ignore }, + { "&Value", aioc__type, &asn_DEF_CriticalityDiagnostics }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_71_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceUpdateFailure_IEs_1[] = { + { 3, 4, asn_IOS_RICserviceUpdateFailure_IEs_1_rows } +}; +static const long asn_VAL_72_id_RANfunctionsAccepted = 9; +static const long asn_VAL_72_reject = 0; +static const long asn_VAL_72_optional = 0; +static const asn_ioc_cell_t asn_IOS_RICserviceQuery_IEs_1_rows[] = { + { "&id", aioc__value, &asn_DEF_ProtocolIE_ID, &asn_VAL_72_id_RANfunctionsAccepted }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_72_reject }, + { "&Value", aioc__type, &asn_DEF_RANfunctionsID_List }, + { "&presence", aioc__value, &asn_DEF_Presence, &asn_VAL_72_optional } +}; +static const asn_ioc_set_t asn_IOS_RICserviceQuery_IEs_1[] = { + { 1, 4, asn_IOS_RICserviceQuery_IEs_1_rows } +}; +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_ToBeSetup_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_ToBeSetup_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_ToBeSetup_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_Admitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_Admitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_Admitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICaction_NotAdmitted_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICaction_NotAdmitted_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICaction_NotAdmitted_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunction_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunction_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunction_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionID_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionID_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionID_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RANfunctionIDcause_ItemIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RANfunctionIDcause_ItemIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RANfunctionIDcause_ItemIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteResponse_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteResponse_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteResponse_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICsubscriptionDeleteFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICsubscriptionDeleteFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICsubscriptionDeleteFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICindication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICindication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICindication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICindication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolRequest_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolRequest_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolRequest_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICcontrolFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICcontrolFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICcontrolFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ErrorIndication_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ErrorIndication_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ErrorIndication_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_E2setupFailureIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2setupFailureIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2setupFailureIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetRequestIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetRequestIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetRequestIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetRequestIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_ResetResponseIEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_ResetResponseIEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_ResetResponseIEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ResetResponseIEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdate_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdate_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdate_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateAcknowledge_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateAcknowledge_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateAcknowledge_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceUpdateFailure_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceUpdateFailure_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceUpdateFailure_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RICserviceQuery_IEs_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RICserviceQuery_IEs_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 2; /* &Value */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RICserviceQuery_IEs, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_id_constr_2 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_6 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_7 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_7 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_8 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_8 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_10 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_10 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_11 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_11 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_12 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_12 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_14 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_15 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_16 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_16 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_18 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_18 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_19 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_20 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_20 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_22 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_22 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_23 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_23 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_24 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_24 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_26 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_26 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_27 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_27 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_28 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_28 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_30 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_30 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_31 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_31 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_32 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_32 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_34 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_34 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_35 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_35 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_36 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_36 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_38 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_38 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_39 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_39 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_40 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_40 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_42 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_42 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_43 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_43 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_44 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_44 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_46 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_46 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_47 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_47 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_48 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_48 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_50 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_50 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_51 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_51 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_52 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_52 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_54 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_54 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_55 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_55 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_56 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_56 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_58 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_58 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_59 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_59 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_60 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_60 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_62 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_62 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_63 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_63 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_64 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_64 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_66 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_66 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_67 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_67 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_68 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_68 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_70 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_70 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_71 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_71 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_72 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_72 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_74 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_74 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_75 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_75 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_76 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_76 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_78 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_78 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_79 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_79 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_80 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_80 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_82 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_82 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_83 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_83 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_84 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_84 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_86 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_86 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_87 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_87 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_88 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_88 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_90 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_90 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_91 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_91 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_92 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_92 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_94 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_94 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_95 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_95 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_96 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_96 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_98 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_98 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_99 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_99 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_100 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_100 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_id_constr_102 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_id_constr_102 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_103 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_103 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_104 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_104 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_ToBeSetup_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-ToBeSetup-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs__value), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_ToBeSetup_ItemIEs__value, present), + sizeof(((struct RICaction_ToBeSetup_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_4, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 1, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_2, &asn_PER_memb_id_constr_2, memb_id_constraint_1 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_ToBeSetup_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_RICaction_ToBeSetup_ItemIEs_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 = { + sizeof(struct RICaction_ToBeSetup_ItemIEs), + offsetof(struct RICaction_ToBeSetup_ItemIEs, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_ItemIEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs = { + "RICaction-ToBeSetup-ItemIEs", + "RICaction-ToBeSetup-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_8[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_8 = { + sizeof(struct RICaction_Admitted_ItemIEs__value), + offsetof(struct RICaction_Admitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_Admitted_ItemIEs__value, present), + sizeof(((struct RICaction_Admitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_8 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_8, + 1, /* Elements count */ + &asn_SPC_value_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_6, &asn_PER_memb_id_constr_6, memb_id_constraint_5 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_Admitted_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_7, &asn_PER_memb_criticality_constr_7, memb_criticality_constraint_5 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_8, + select_RICaction_Admitted_ItemIEs_value_type, + { &asn_OER_memb_value_constr_8, &asn_PER_memb_value_constr_8, memb_value_constraint_5 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_ItemIEs_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5 = { + sizeof(struct RICaction_Admitted_ItemIEs), + offsetof(struct RICaction_Admitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_Admitted_ItemIEs_tag2el_5, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs = { + "RICaction-Admitted-ItemIEs", + "RICaction-Admitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + asn_DEF_RICaction_Admitted_ItemIEs_tags_5, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5) + /sizeof(asn_DEF_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_12[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_12 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs__value), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, _asn_ctx), + offsetof(struct RICaction_NotAdmitted_ItemIEs__value, present), + sizeof(((struct RICaction_NotAdmitted_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_12 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_12, + 1, /* Elements count */ + &asn_SPC_value_specs_12 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_10, &asn_PER_memb_id_constr_10, memb_id_constraint_9 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICaction_NotAdmitted_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_11, &asn_PER_memb_criticality_constr_11, memb_criticality_constraint_9 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_12, + select_RICaction_NotAdmitted_ItemIEs_value_type, + { &asn_OER_memb_value_constr_12, &asn_PER_memb_value_constr_12, memb_value_constraint_9 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 = { + sizeof(struct RICaction_NotAdmitted_ItemIEs), + offsetof(struct RICaction_NotAdmitted_ItemIEs, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_ItemIEs_tag2el_9, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs = { + "RICaction-NotAdmitted-ItemIEs", + "RICaction-NotAdmitted-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9) + /sizeof(asn_DEF_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs__value, choice.RANfunction_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunction_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunction-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_16[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_16 = { + sizeof(struct RANfunction_ItemIEs__value), + offsetof(struct RANfunction_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunction_ItemIEs__value, present), + sizeof(((struct RANfunction_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_16, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_16 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_16, + 1, /* Elements count */ + &asn_SPC_value_specs_16 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_14, &asn_PER_memb_id_constr_14, memb_id_constraint_13 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunction_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_15, &asn_PER_memb_criticality_constr_15, memb_criticality_constraint_13 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunction_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_16, + select_RANfunction_ItemIEs_value_type, + { &asn_OER_memb_value_constr_16, &asn_PER_memb_value_constr_16, memb_value_constraint_13 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_ItemIEs_tags_13[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_ItemIEs_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13 = { + sizeof(struct RANfunction_ItemIEs), + offsetof(struct RANfunction_ItemIEs, _asn_ctx), + asn_MAP_RANfunction_ItemIEs_tag2el_13, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs = { + "RANfunction-ItemIEs", + "RANfunction-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_ItemIEs_tags_13, + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + asn_DEF_RANfunction_ItemIEs_tags_13, /* Same as above */ + sizeof(asn_DEF_RANfunction_ItemIEs_tags_13) + /sizeof(asn_DEF_RANfunction_ItemIEs_tags_13[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_20[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_20 = { + sizeof(struct RANfunctionID_ItemIEs__value), + offsetof(struct RANfunctionID_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionID_ItemIEs__value, present), + sizeof(((struct RANfunctionID_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_20, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_20 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_20, + 1, /* Elements count */ + &asn_SPC_value_specs_20 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_18, &asn_PER_memb_id_constr_18, memb_id_constraint_17 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionID_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_19, &asn_PER_memb_criticality_constr_19, memb_criticality_constraint_17 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_20, + select_RANfunctionID_ItemIEs_value_type, + { &asn_OER_memb_value_constr_20, &asn_PER_memb_value_constr_20, memb_value_constraint_17 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_ItemIEs_tags_17[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_ItemIEs_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17 = { + sizeof(struct RANfunctionID_ItemIEs), + offsetof(struct RANfunctionID_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionID_ItemIEs_tag2el_17, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs = { + "RANfunctionID-ItemIEs", + "RANfunctionID-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_ItemIEs_tags_17, + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + asn_DEF_RANfunctionID_ItemIEs_tags_17, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17) + /sizeof(asn_DEF_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_24[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionIDcause_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionIDcause-Item" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_24[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_24 = { + sizeof(struct RANfunctionIDcause_ItemIEs__value), + offsetof(struct RANfunctionIDcause_ItemIEs__value, _asn_ctx), + offsetof(struct RANfunctionIDcause_ItemIEs__value, present), + sizeof(((struct RANfunctionIDcause_ItemIEs__value *)0)->present), + asn_MAP_value_tag2el_24, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_24 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_24, + 1, /* Elements count */ + &asn_SPC_value_specs_24 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_22, &asn_PER_memb_id_constr_22, memb_id_constraint_21 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RANfunctionIDcause_ItemIEs_criticality_type, + { &asn_OER_memb_criticality_constr_23, &asn_PER_memb_criticality_constr_23, memb_criticality_constraint_21 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_ItemIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_24, + select_RANfunctionIDcause_ItemIEs_value_type, + { &asn_OER_memb_value_constr_24, &asn_PER_memb_value_constr_24, memb_value_constraint_21 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 = { + sizeof(struct RANfunctionIDcause_ItemIEs), + offsetof(struct RANfunctionIDcause_ItemIEs, _asn_ctx), + asn_MAP_RANfunctionIDcause_ItemIEs_tag2el_21, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs = { + "RANfunctionIDcause-ItemIEs", + "RANfunctionIDcause-ItemIEs", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_ItemIEs_tags_21, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21) + /sizeof(asn_DEF_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_28[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs__value, choice.RICsubscriptionDetails), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDetails, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDetails" + }, +}; +static const unsigned asn_MAP_value_to_canonical_28[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_28[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_28[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscriptionDetails */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_28 = { + sizeof(struct RICsubscriptionRequest_IEs__value), + offsetof(struct RICsubscriptionRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionRequest_IEs__value, present), + sizeof(((struct RICsubscriptionRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_28, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_28, + asn_MAP_value_from_canonical_28, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_28 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_28, + 3, /* Elements count */ + &asn_SPC_value_specs_28 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_26, &asn_PER_memb_id_constr_26, memb_id_constraint_25 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_27, &asn_PER_memb_criticality_constr_27, memb_criticality_constraint_25 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_28, + select_RICsubscriptionRequest_IEs_value_type, + { &asn_OER_memb_value_constr_28, &asn_PER_memb_value_constr_28, memb_value_constraint_25 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_IEs_tags_25[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_IEs_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25 = { + sizeof(struct RICsubscriptionRequest_IEs), + offsetof(struct RICsubscriptionRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionRequest_IEs_tag2el_25, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs = { + "RICsubscriptionRequest-IEs", + "RICsubscriptionRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_IEs_tags_25, + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_IEs_tags_25, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25) + /sizeof(asn_DEF_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_IEs_25, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_IEs_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_32[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_Admitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-Admitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_32[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_32[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_32[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_32 = { + sizeof(struct RICsubscriptionResponse_IEs__value), + offsetof(struct RICsubscriptionResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionResponse_IEs__value, present), + sizeof(((struct RICsubscriptionResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_32, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_32, + asn_MAP_value_from_canonical_32, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_32 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_32, + 4, /* Elements count */ + &asn_SPC_value_specs_32 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_30, &asn_PER_memb_id_constr_30, memb_id_constraint_29 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionResponse_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_31, &asn_PER_memb_criticality_constr_31, memb_criticality_constraint_29 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_32, + select_RICsubscriptionResponse_IEs_value_type, + { &asn_OER_memb_value_constr_32, &asn_PER_memb_value_constr_32, memb_value_constraint_29 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_IEs_tags_29[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_IEs_tag2el_29[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29 = { + sizeof(struct RICsubscriptionResponse_IEs), + offsetof(struct RICsubscriptionResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionResponse_IEs_tag2el_29, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs = { + "RICsubscriptionResponse-IEs", + "RICsubscriptionResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_IEs_tags_29, + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_IEs_tags_29, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29) + /sizeof(asn_DEF_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_IEs_29, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_IEs_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_36[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICaction_NotAdmitted_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICaction-NotAdmitted-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_36[] = { 1, 0, 2, 3 }; +static const unsigned asn_MAP_value_from_canonical_36[] = { 1, 0, 2, 3 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_36[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_36 = { + sizeof(struct RICsubscriptionFailure_IEs__value), + offsetof(struct RICsubscriptionFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionFailure_IEs__value, present), + sizeof(((struct RICsubscriptionFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_36, + 4, /* Count of tags in the map */ + asn_MAP_value_to_canonical_36, + asn_MAP_value_from_canonical_36, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_36 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_36, + 4, /* Elements count */ + &asn_SPC_value_specs_36 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_34, &asn_PER_memb_id_constr_34, memb_id_constraint_33 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_35, &asn_PER_memb_criticality_constr_35, memb_criticality_constraint_33 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_36, + select_RICsubscriptionFailure_IEs_value_type, + { &asn_OER_memb_value_constr_36, &asn_PER_memb_value_constr_36, memb_value_constraint_33 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_IEs_tags_33[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_IEs_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33 = { + sizeof(struct RICsubscriptionFailure_IEs), + offsetof(struct RICsubscriptionFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionFailure_IEs_tag2el_33, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs = { + "RICsubscriptionFailure-IEs", + "RICsubscriptionFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_IEs_tags_33, + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_IEs_tags_33, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33) + /sizeof(asn_DEF_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_IEs_33, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_IEs_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_40[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_40[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_40[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_40[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_40 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs__value), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteRequest_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_40, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_40, + asn_MAP_value_from_canonical_40, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_40 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_40, + 2, /* Elements count */ + &asn_SPC_value_specs_40 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_38, &asn_PER_memb_id_constr_38, memb_id_constraint_37 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_39, &asn_PER_memb_criticality_constr_39, memb_criticality_constraint_37 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_40, + select_RICsubscriptionDeleteRequest_IEs_value_type, + { &asn_OER_memb_value_constr_40, &asn_PER_memb_value_constr_40, memb_value_constraint_37 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 = { + sizeof(struct RICsubscriptionDeleteRequest_IEs), + offsetof(struct RICsubscriptionDeleteRequest_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_IEs_tag2el_37, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs = { + "RICsubscriptionDeleteRequest-IEs", + "RICsubscriptionDeleteRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_IEs_37, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_44[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_44[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_44[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_44[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_44 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs__value), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteResponse_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteResponse_IEs__value *)0)->present), + asn_MAP_value_tag2el_44, + 2, /* Count of tags in the map */ + asn_MAP_value_to_canonical_44, + asn_MAP_value_from_canonical_44, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_44 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_44, + 2, /* Elements count */ + &asn_SPC_value_specs_44 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_42, &asn_PER_memb_id_constr_42, memb_id_constraint_41 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteResponse_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_43, &asn_PER_memb_criticality_constr_43, memb_criticality_constraint_41 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_44, + select_RICsubscriptionDeleteResponse_IEs_value_type, + { &asn_OER_memb_value_constr_44, &asn_PER_memb_value_constr_44, memb_value_constraint_41 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 = { + sizeof(struct RICsubscriptionDeleteResponse_IEs), + offsetof(struct RICsubscriptionDeleteResponse_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_IEs_tag2el_41, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs = { + "RICsubscriptionDeleteResponse-IEs", + "RICsubscriptionDeleteResponse-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_IEs_41, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_48[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_48[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_48[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_48[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_48 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs__value), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, _asn_ctx), + offsetof(struct RICsubscriptionDeleteFailure_IEs__value, present), + sizeof(((struct RICsubscriptionDeleteFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_48, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_48, + asn_MAP_value_from_canonical_48, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_48 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_48, + 4, /* Elements count */ + &asn_SPC_value_specs_48 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_46, &asn_PER_memb_id_constr_46, memb_id_constraint_45 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICsubscriptionDeleteFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_47, &asn_PER_memb_criticality_constr_47, memb_criticality_constraint_45 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_48, + select_RICsubscriptionDeleteFailure_IEs_value_type, + { &asn_OER_memb_value_constr_48, &asn_PER_memb_value_constr_48, memb_value_constraint_45 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 = { + sizeof(struct RICsubscriptionDeleteFailure_IEs), + offsetof(struct RICsubscriptionDeleteFailure_IEs, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_IEs_tag2el_45, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs = { + "RICsubscriptionDeleteFailure-IEs", + "RICsubscriptionDeleteFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_IEs_45, + 3, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICactionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICactionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationSN), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RICindicationSN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationSN" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationType), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICindicationType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICindicationMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICindicationMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICindicationMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, +}; +static const unsigned asn_MAP_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 }; +static const unsigned asn_MAP_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_52[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_52 = { + sizeof(struct RICindication_IEs__value), + offsetof(struct RICindication_IEs__value, _asn_ctx), + offsetof(struct RICindication_IEs__value, present), + sizeof(((struct RICindication_IEs__value *)0)->present), + asn_MAP_value_tag2el_52, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_52, + asn_MAP_value_from_canonical_52, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_52 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_52, + 8, /* Elements count */ + &asn_SPC_value_specs_52 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICindication_IEs_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_50, &asn_PER_memb_id_constr_50, memb_id_constraint_49 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICindication_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_51, &asn_PER_memb_criticality_constr_51, memb_criticality_constraint_49 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICindication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_52, + select_RICindication_IEs_value_type, + { &asn_OER_memb_value_constr_52, &asn_PER_memb_value_constr_52, memb_value_constraint_49 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_IEs_tags_49[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_IEs_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49 = { + sizeof(struct RICindication_IEs), + offsetof(struct RICindication_IEs, _asn_ctx), + asn_MAP_RICindication_IEs_tag2el_49, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication_IEs = { + "RICindication-IEs", + "RICindication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_IEs_tags_49, + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + asn_DEF_RICindication_IEs_tags_49, /* Same as above */ + sizeof(asn_DEF_RICindication_IEs_tags_49) + /sizeof(asn_DEF_RICindication_IEs_tags_49[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_IEs_49, + 3, /* Elements count */ + &asn_SPC_RICindication_IEs_specs_49 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_56[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolHeader), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolHeader, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolHeader" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolMessage), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolMessage, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolMessage" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolAckRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAckRequest" + }, +}; +static const unsigned asn_MAP_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 }; +static const unsigned asn_MAP_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_56[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_56 = { + sizeof(struct RICcontrolRequest_IEs__value), + offsetof(struct RICcontrolRequest_IEs__value, _asn_ctx), + offsetof(struct RICcontrolRequest_IEs__value, present), + sizeof(((struct RICcontrolRequest_IEs__value *)0)->present), + asn_MAP_value_tag2el_56, + 6, /* Count of tags in the map */ + asn_MAP_value_to_canonical_56, + asn_MAP_value_from_canonical_56, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_56 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_56, + 6, /* Elements count */ + &asn_SPC_value_specs_56 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_54, &asn_PER_memb_id_constr_54, memb_id_constraint_53 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolRequest_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_55, &asn_PER_memb_criticality_constr_55, memb_criticality_constraint_53 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_56, + select_RICcontrolRequest_IEs_value_type, + { &asn_OER_memb_value_constr_56, &asn_PER_memb_value_constr_56, memb_value_constraint_53 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_IEs_tags_53[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_IEs_tag2el_53[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53 = { + sizeof(struct RICcontrolRequest_IEs), + offsetof(struct RICcontrolRequest_IEs, _asn_ctx), + asn_MAP_RICcontrolRequest_IEs_tag2el_53, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs = { + "RICcontrolRequest-IEs", + "RICcontrolRequest-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_IEs_tags_53, + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + asn_DEF_RICcontrolRequest_IEs_tags_53, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53) + /sizeof(asn_DEF_RICcontrolRequest_IEs_tags_53[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_IEs_53, + 3, /* Elements count */ + &asn_SPC_RICcontrolRequest_IEs_specs_53 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_60[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RICcontrolStatus, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolStatus" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_60[] = { 1, 2, 4, 3, 0 }; +static const unsigned asn_MAP_value_from_canonical_60[] = { 4, 0, 1, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_60[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_60 = { + sizeof(struct RICcontrolAcknowledge_IEs__value), + offsetof(struct RICcontrolAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICcontrolAcknowledge_IEs__value, present), + sizeof(((struct RICcontrolAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_60, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_60, + asn_MAP_value_from_canonical_60, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_60 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_60, + 5, /* Elements count */ + &asn_SPC_value_specs_60 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_58, &asn_PER_memb_id_constr_58, memb_id_constraint_57 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolAcknowledge_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_59, &asn_PER_memb_criticality_constr_59, memb_criticality_constraint_57 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_60, + select_RICcontrolAcknowledge_IEs_value_type, + { &asn_OER_memb_value_constr_60, &asn_PER_memb_value_constr_60, memb_value_constraint_57 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_IEs_tags_57[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57 = { + sizeof(struct RICcontrolAcknowledge_IEs), + offsetof(struct RICcontrolAcknowledge_IEs, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_IEs_tag2el_57, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs = { + "RICcontrolAcknowledge-IEs", + "RICcontrolAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_IEs_tags_57, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57) + /sizeof(asn_DEF_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_IEs_57, + 3, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_IEs_specs_57 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_64[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcallProcessID), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcallProcessID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcallProcessID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs__value, choice.RICcontrolOutcome), + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_RICcontrolOutcome, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolOutcome" + }, +}; +static const unsigned asn_MAP_value_to_canonical_64[] = { 1, 2, 4, 0, 3 }; +static const unsigned asn_MAP_value_from_canonical_64[] = { 3, 0, 1, 4, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_64[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 1 }, /* RICcallProcessID */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -1, 0 }, /* RICcontrolOutcome */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_64 = { + sizeof(struct RICcontrolFailure_IEs__value), + offsetof(struct RICcontrolFailure_IEs__value, _asn_ctx), + offsetof(struct RICcontrolFailure_IEs__value, present), + sizeof(((struct RICcontrolFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_64, + 9, /* Count of tags in the map */ + asn_MAP_value_to_canonical_64, + asn_MAP_value_from_canonical_64, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_64 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_64, + 5, /* Elements count */ + &asn_SPC_value_specs_64 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_62, &asn_PER_memb_id_constr_62, memb_id_constraint_61 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICcontrolFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_63, &asn_PER_memb_criticality_constr_63, memb_criticality_constraint_61 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_64, + select_RICcontrolFailure_IEs_value_type, + { &asn_OER_memb_value_constr_64, &asn_PER_memb_value_constr_64, memb_value_constraint_61 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_IEs_tags_61[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_IEs_tag2el_61[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61 = { + sizeof(struct RICcontrolFailure_IEs), + offsetof(struct RICcontrolFailure_IEs, _asn_ctx), + asn_MAP_RICcontrolFailure_IEs_tag2el_61, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs = { + "RICcontrolFailure-IEs", + "RICcontrolFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_IEs_tags_61, + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + asn_DEF_RICcontrolFailure_IEs_tags_61, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61) + /sizeof(asn_DEF_RICcontrolFailure_IEs_tags_61[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_IEs_61, + 3, /* Elements count */ + &asn_SPC_RICcontrolFailure_IEs_specs_61 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_68[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RICrequestID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICrequestID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICrequestID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.RANfunctionID), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_68[] = { 1, 0, 3, 2 }; +static const unsigned asn_MAP_value_from_canonical_68[] = { 1, 0, 3, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_68[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_68 = { + sizeof(struct ErrorIndication_IEs__value), + offsetof(struct ErrorIndication_IEs__value, _asn_ctx), + offsetof(struct ErrorIndication_IEs__value, present), + sizeof(((struct ErrorIndication_IEs__value *)0)->present), + asn_MAP_value_tag2el_68, + 8, /* Count of tags in the map */ + asn_MAP_value_to_canonical_68, + asn_MAP_value_from_canonical_68, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_68 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_68, + 4, /* Elements count */ + &asn_SPC_value_specs_68 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[] = { + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_66, &asn_PER_memb_id_constr_66, memb_id_constraint_65 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ErrorIndication_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_67, &asn_PER_memb_criticality_constr_67, memb_criticality_constraint_65 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ErrorIndication_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_68, + select_ErrorIndication_IEs_value_type, + { &asn_OER_memb_value_constr_68, &asn_PER_memb_value_constr_68, memb_value_constraint_65 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ErrorIndication_IEs_tags_65[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ErrorIndication_IEs_tag2el_65[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65 = { + sizeof(struct ErrorIndication_IEs), + offsetof(struct ErrorIndication_IEs, _asn_ctx), + asn_MAP_ErrorIndication_IEs_tag2el_65, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs = { + "ErrorIndication-IEs", + "ErrorIndication-IEs", + &asn_OP_SEQUENCE, + asn_DEF_ErrorIndication_IEs_tags_65, + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + asn_DEF_ErrorIndication_IEs_tags_65, /* Same as above */ + sizeof(asn_DEF_ErrorIndication_IEs_tags_65) + /sizeof(asn_DEF_ErrorIndication_IEs_tags_65[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ErrorIndication_IEs_65, + 3, /* Elements count */ + &asn_SPC_ErrorIndication_IEs_specs_65 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_72[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.GlobalE2node_ID), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_GlobalE2node_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalE2node-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, +}; +static const unsigned asn_MAP_value_to_canonical_72[] = { 1, 0 }; +static const unsigned asn_MAP_value_from_canonical_72[] = { 1, 0 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_72[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* en-gNB */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* ng-eNB */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* eNB */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_72 = { + sizeof(struct E2setupRequestIEs__value), + offsetof(struct E2setupRequestIEs__value, _asn_ctx), + offsetof(struct E2setupRequestIEs__value, present), + sizeof(((struct E2setupRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_72, + 5, /* Count of tags in the map */ + asn_MAP_value_to_canonical_72, + asn_MAP_value_from_canonical_72, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_72 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_72, + 2, /* Elements count */ + &asn_SPC_value_specs_72 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_70, &asn_PER_memb_id_constr_70, memb_id_constraint_69 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupRequestIEs_criticality_type, + { &asn_OER_memb_criticality_constr_71, &asn_PER_memb_criticality_constr_71, memb_criticality_constraint_69 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_72, + select_E2setupRequestIEs_value_type, + { &asn_OER_memb_value_constr_72, &asn_PER_memb_value_constr_72, memb_value_constraint_69 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupRequestIEs_tags_69[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupRequestIEs_tag2el_69[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69 = { + sizeof(struct E2setupRequestIEs), + offsetof(struct E2setupRequestIEs, _asn_ctx), + asn_MAP_E2setupRequestIEs_tag2el_69, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs = { + "E2setupRequestIEs", + "E2setupRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupRequestIEs_tags_69, + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + asn_DEF_E2setupRequestIEs_tags_69, /* Same as above */ + sizeof(asn_DEF_E2setupRequestIEs_tags_69) + /sizeof(asn_DEF_E2setupRequestIEs_tags_69[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupRequestIEs_69, + 3, /* Elements count */ + &asn_SPC_E2setupRequestIEs_specs_69 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_76[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.GlobalRIC_ID), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_GlobalRIC_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "GlobalRIC-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_76[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalRIC-ID */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_76 = { + sizeof(struct E2setupResponseIEs__value), + offsetof(struct E2setupResponseIEs__value, _asn_ctx), + offsetof(struct E2setupResponseIEs__value, present), + sizeof(((struct E2setupResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_76, + 3, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_76 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_76, + 3, /* Elements count */ + &asn_SPC_value_specs_76 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_74, &asn_PER_memb_id_constr_74, memb_id_constraint_73 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupResponseIEs_criticality_type, + { &asn_OER_memb_criticality_constr_75, &asn_PER_memb_criticality_constr_75, memb_criticality_constraint_73 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_76, + select_E2setupResponseIEs_value_type, + { &asn_OER_memb_value_constr_76, &asn_PER_memb_value_constr_76, memb_value_constraint_73 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupResponseIEs_tags_73[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupResponseIEs_tag2el_73[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73 = { + sizeof(struct E2setupResponseIEs), + offsetof(struct E2setupResponseIEs, _asn_ctx), + asn_MAP_E2setupResponseIEs_tag2el_73, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs = { + "E2setupResponseIEs", + "E2setupResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupResponseIEs_tags_73, + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + asn_DEF_E2setupResponseIEs_tags_73, /* Same as above */ + sizeof(asn_DEF_E2setupResponseIEs_tags_73) + /sizeof(asn_DEF_E2setupResponseIEs_tags_73[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupResponseIEs_73, + 3, /* Elements count */ + &asn_SPC_E2setupResponseIEs_specs_73 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_80[] = { 1, 2, 0 }; +static const unsigned asn_MAP_value_from_canonical_80[] = { 2, 0, 1 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_80[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_80 = { + sizeof(struct E2setupFailureIEs__value), + offsetof(struct E2setupFailureIEs__value, _asn_ctx), + offsetof(struct E2setupFailureIEs__value, present), + sizeof(((struct E2setupFailureIEs__value *)0)->present), + asn_MAP_value_tag2el_80, + 7, /* Count of tags in the map */ + asn_MAP_value_to_canonical_80, + asn_MAP_value_from_canonical_80, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_80 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_80, + 3, /* Elements count */ + &asn_SPC_value_specs_80 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_78, &asn_PER_memb_id_constr_78, memb_id_constraint_77 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_E2setupFailureIEs_criticality_type, + { &asn_OER_memb_criticality_constr_79, &asn_PER_memb_criticality_constr_79, memb_criticality_constraint_77 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2setupFailureIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_80, + select_E2setupFailureIEs_value_type, + { &asn_OER_memb_value_constr_80, &asn_PER_memb_value_constr_80, memb_value_constraint_77 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2setupFailureIEs_tags_77[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2setupFailureIEs_tag2el_77[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77 = { + sizeof(struct E2setupFailureIEs), + offsetof(struct E2setupFailureIEs, _asn_ctx), + asn_MAP_E2setupFailureIEs_tag2el_77, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs = { + "E2setupFailureIEs", + "E2setupFailureIEs", + &asn_OP_SEQUENCE, + asn_DEF_E2setupFailureIEs_tags_77, + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + asn_DEF_E2setupFailureIEs_tags_77, /* Same as above */ + sizeof(asn_DEF_E2setupFailureIEs_tags_77) + /sizeof(asn_DEF_E2setupFailureIEs_tags_77[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2setupFailureIEs_77, + 3, /* Elements count */ + &asn_SPC_E2setupFailureIEs_specs_77 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_84[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs__value, choice.Cause), + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "Cause" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_84[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequest */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* ricService */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* transport */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* protocol */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* misc */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_84 = { + sizeof(struct ResetRequestIEs__value), + offsetof(struct ResetRequestIEs__value, _asn_ctx), + offsetof(struct ResetRequestIEs__value, present), + sizeof(((struct ResetRequestIEs__value *)0)->present), + asn_MAP_value_tag2el_84, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_84 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_84, + 1, /* Elements count */ + &asn_SPC_value_specs_84 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_82, &asn_PER_memb_id_constr_82, memb_id_constraint_81 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetRequestIEs_criticality_type, + { &asn_OER_memb_criticality_constr_83, &asn_PER_memb_criticality_constr_83, memb_criticality_constraint_81 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetRequestIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_84, + select_ResetRequestIEs_value_type, + { &asn_OER_memb_value_constr_84, &asn_PER_memb_value_constr_84, memb_value_constraint_81 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequestIEs_tags_81[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequestIEs_tag2el_81[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81 = { + sizeof(struct ResetRequestIEs), + offsetof(struct ResetRequestIEs, _asn_ctx), + asn_MAP_ResetRequestIEs_tag2el_81, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs = { + "ResetRequestIEs", + "ResetRequestIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequestIEs_tags_81, + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + asn_DEF_ResetRequestIEs_tags_81, /* Same as above */ + sizeof(asn_DEF_ResetRequestIEs_tags_81) + /sizeof(asn_DEF_ResetRequestIEs_tags_81[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequestIEs_81, + 3, /* Elements count */ + &asn_SPC_ResetRequestIEs_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_88[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_88[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_88 = { + sizeof(struct ResetResponseIEs__value), + offsetof(struct ResetResponseIEs__value, _asn_ctx), + offsetof(struct ResetResponseIEs__value, present), + sizeof(((struct ResetResponseIEs__value *)0)->present), + asn_MAP_value_tag2el_88, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_88 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_88, + 1, /* Elements count */ + &asn_SPC_value_specs_88 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_86, &asn_PER_memb_id_constr_86, memb_id_constraint_85 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_ResetResponseIEs_criticality_type, + { &asn_OER_memb_criticality_constr_87, &asn_PER_memb_criticality_constr_87, memb_criticality_constraint_85 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ResetResponseIEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_88, + select_ResetResponseIEs_value_type, + { &asn_OER_memb_value_constr_88, &asn_PER_memb_value_constr_88, memb_value_constraint_85 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponseIEs_tags_85[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponseIEs_tag2el_85[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85 = { + sizeof(struct ResetResponseIEs), + offsetof(struct ResetResponseIEs, _asn_ctx), + asn_MAP_ResetResponseIEs_tag2el_85, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs = { + "ResetResponseIEs", + "ResetResponseIEs", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponseIEs_tags_85, + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + asn_DEF_ResetResponseIEs_tags_85, /* Same as above */ + sizeof(asn_DEF_ResetResponseIEs_tags_85) + /sizeof(asn_DEF_ResetResponseIEs_tags_85[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponseIEs_85, + 3, /* Elements count */ + &asn_SPC_ResetResponseIEs_specs_85 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_92[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctions_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctions_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctions-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_92[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_92 = { + sizeof(struct RICserviceUpdate_IEs__value), + offsetof(struct RICserviceUpdate_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdate_IEs__value, present), + sizeof(((struct RICserviceUpdate_IEs__value *)0)->present), + asn_MAP_value_tag2el_92, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_92 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_92, + 2, /* Elements count */ + &asn_SPC_value_specs_92 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_90, &asn_PER_memb_id_constr_90, memb_id_constraint_89 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdate_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_91, &asn_PER_memb_criticality_constr_91, memb_criticality_constraint_89 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_92, + select_RICserviceUpdate_IEs_value_type, + { &asn_OER_memb_value_constr_92, &asn_PER_memb_value_constr_92, memb_value_constraint_89 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_IEs_tags_89[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_IEs_tag2el_89[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89 = { + sizeof(struct RICserviceUpdate_IEs), + offsetof(struct RICserviceUpdate_IEs, _asn_ctx), + asn_MAP_RICserviceUpdate_IEs_tag2el_89, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs = { + "RICserviceUpdate-IEs", + "RICserviceUpdate-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_IEs_tags_89, + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + asn_DEF_RICserviceUpdate_IEs_tags_89, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89) + /sizeof(asn_DEF_RICserviceUpdate_IEs_tags_89[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_IEs_89, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdate_IEs_specs_89 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_96[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_96[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_96 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs__value), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateAcknowledge_IEs__value, present), + sizeof(((struct RICserviceUpdateAcknowledge_IEs__value *)0)->present), + asn_MAP_value_tag2el_96, + 2, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_96 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_96, + 2, /* Elements count */ + &asn_SPC_value_specs_96 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_94, &asn_PER_memb_id_constr_94, memb_id_constraint_93 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateAcknowledge_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_95, &asn_PER_memb_criticality_constr_95, memb_criticality_constraint_93 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_96, + select_RICserviceUpdateAcknowledge_IEs_value_type, + { &asn_OER_memb_value_constr_96, &asn_PER_memb_value_constr_96, memb_value_constraint_93 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 = { + sizeof(struct RICserviceUpdateAcknowledge_IEs), + offsetof(struct RICserviceUpdateAcknowledge_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_IEs_tag2el_93, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs = { + "RICserviceUpdateAcknowledge-IEs", + "RICserviceUpdateAcknowledge-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_IEs_tags_93[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_IEs_93, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_100[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsIDcause_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsIDcause-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.TimeToWait), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_TimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "TimeToWait" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CriticalityDiagnostics, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "CriticalityDiagnostics" + }, +}; +static const unsigned asn_MAP_value_to_canonical_100[] = { 1, 0, 2 }; +static const unsigned asn_MAP_value_from_canonical_100[] = { 1, 0, 2 }; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_100[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_100 = { + sizeof(struct RICserviceUpdateFailure_IEs__value), + offsetof(struct RICserviceUpdateFailure_IEs__value, _asn_ctx), + offsetof(struct RICserviceUpdateFailure_IEs__value, present), + sizeof(((struct RICserviceUpdateFailure_IEs__value *)0)->present), + asn_MAP_value_tag2el_100, + 3, /* Count of tags in the map */ + asn_MAP_value_to_canonical_100, + asn_MAP_value_from_canonical_100, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_100 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_100, + 3, /* Elements count */ + &asn_SPC_value_specs_100 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_98, &asn_PER_memb_id_constr_98, memb_id_constraint_97 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceUpdateFailure_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_99, &asn_PER_memb_criticality_constr_99, memb_criticality_constraint_97 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_100, + select_RICserviceUpdateFailure_IEs_value_type, + { &asn_OER_memb_value_constr_100, &asn_PER_memb_value_constr_100, memb_value_constraint_97 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_IEs_tags_97[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97 = { + sizeof(struct RICserviceUpdateFailure_IEs), + offsetof(struct RICserviceUpdateFailure_IEs, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_IEs_tag2el_97, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs = { + "RICserviceUpdateFailure-IEs", + "RICserviceUpdateFailure-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_IEs_tags_97, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97) + /sizeof(asn_DEF_RICserviceUpdateFailure_IEs_tags_97[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_IEs_97, + 3, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_IEs_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_value_104[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs__value, choice.RANfunctionsID_List), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RANfunctionsID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RANfunctionsID-List" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_104[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_104 = { + sizeof(struct RICserviceQuery_IEs__value), + offsetof(struct RICserviceQuery_IEs__value, _asn_ctx), + offsetof(struct RICserviceQuery_IEs__value, present), + sizeof(((struct RICserviceQuery_IEs__value *)0)->present), + asn_MAP_value_tag2el_104, + 1, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_104 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_104, + 1, /* Elements count */ + &asn_SPC_value_specs_104 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, id), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_ID, + 0, + { &asn_OER_memb_id_constr_102, &asn_PER_memb_id_constr_102, memb_id_constraint_101 }, + 0, 0, /* No default value */ + "id" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_RICserviceQuery_IEs_criticality_type, + { &asn_OER_memb_criticality_constr_103, &asn_PER_memb_criticality_constr_103, memb_criticality_constraint_101 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery_IEs, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_104, + select_RICserviceQuery_IEs_value_type, + { &asn_OER_memb_value_constr_104, &asn_PER_memb_value_constr_104, memb_value_constraint_101 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_IEs_tags_101[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_IEs_tag2el_101[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101 = { + sizeof(struct RICserviceQuery_IEs), + offsetof(struct RICserviceQuery_IEs, _asn_ctx), + asn_MAP_RICserviceQuery_IEs_tag2el_101, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs = { + "RICserviceQuery-IEs", + "RICserviceQuery-IEs", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_IEs_tags_101, + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + asn_DEF_RICserviceQuery_IEs_tags_101, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_IEs_tags_101) + /sizeof(asn_DEF_RICserviceQuery_IEs_tags_101[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_IEs_101, + 3, /* Elements count */ + &asn_SPC_RICserviceQuery_IEs_specs_101 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.h new file mode 100644 index 0000000..a62f34b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-Field.h @@ -0,0 +1,757 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_Field_H_ +#define _ProtocolIE_Field_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-ID.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICaction-ToBeSetup-Item.h" +#include "Presence.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" +#include "RICaction-Admitted-Item.h" +#include "RICaction-NotAdmitted-Item.h" +#include "RANfunction-Item.h" +#include "RANfunctionID-Item.h" +#include "RANfunctionIDcause-Item.h" +#include "RICrequestID.h" +#include "RANfunctionID.h" +#include "RICsubscriptionDetails.h" +#include "RICaction-Admitted-List.h" +#include "RICaction-NotAdmitted-List.h" +#include "CriticalityDiagnostics.h" +#include "Cause.h" +#include "RICactionID.h" +#include "RICindicationSN.h" +#include "RICindicationType.h" +#include "RICindicationHeader.h" +#include "RICindicationMessage.h" +#include "RICcallProcessID.h" +#include "RICcontrolHeader.h" +#include "RICcontrolMessage.h" +#include "RICcontrolAckRequest.h" +#include "RICcontrolStatus.h" +#include "RICcontrolOutcome.h" +#include "GlobalE2node-ID.h" +#include "RANfunctions-List.h" +#include "GlobalRIC-ID.h" +#include "RANfunctionsID-List.h" +#include "RANfunctionsIDcause-List.h" +#include "TimeToWait.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICaction_ToBeSetup_ItemIEs__value_PR { + RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item +} RICaction_ToBeSetup_ItemIEs__value_PR; +typedef enum RICaction_Admitted_ItemIEs__value_PR { + RICaction_Admitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item +} RICaction_Admitted_ItemIEs__value_PR; +typedef enum RICaction_NotAdmitted_ItemIEs__value_PR { + RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING, /* No components present */ + RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item +} RICaction_NotAdmitted_ItemIEs__value_PR; +typedef enum RANfunction_ItemIEs__value_PR { + RANfunction_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunction_ItemIEs__value_PR_RANfunction_Item +} RANfunction_ItemIEs__value_PR; +typedef enum RANfunctionID_ItemIEs__value_PR { + RANfunctionID_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item +} RANfunctionID_ItemIEs__value_PR; +typedef enum RANfunctionIDcause_ItemIEs__value_PR { + RANfunctionIDcause_ItemIEs__value_PR_NOTHING, /* No components present */ + RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item +} RANfunctionIDcause_ItemIEs__value_PR; +typedef enum RICsubscriptionRequest_IEs__value_PR { + RICsubscriptionRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionRequest_IEs__value_PR_RICrequestID, + RICsubscriptionRequest_IEs__value_PR_RANfunctionID, + RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails +} RICsubscriptionRequest_IEs__value_PR; +typedef enum RICsubscriptionResponse_IEs__value_PR { + RICsubscriptionResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionResponse_IEs__value_PR_RICrequestID, + RICsubscriptionResponse_IEs__value_PR_RANfunctionID, + RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List, + RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List +} RICsubscriptionResponse_IEs__value_PR; +typedef enum RICsubscriptionFailure_IEs__value_PR { + RICsubscriptionFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionFailure_IEs__value_PR_RICrequestID, + RICsubscriptionFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List, + RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionFailure_IEs__value_PR; +typedef enum RICsubscriptionDeleteRequest_IEs__value_PR { + RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteRequest_IEs__value_PR; +typedef enum RICsubscriptionDeleteResponse_IEs__value_PR { + RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID +} RICsubscriptionDeleteResponse_IEs__value_PR; +typedef enum RICsubscriptionDeleteFailure_IEs__value_PR { + RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING, /* No components present */ + RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID, + RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID, + RICsubscriptionDeleteFailure_IEs__value_PR_Cause, + RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics +} RICsubscriptionDeleteFailure_IEs__value_PR; +typedef enum RICindication_IEs__value_PR { + RICindication_IEs__value_PR_NOTHING, /* No components present */ + RICindication_IEs__value_PR_RICrequestID, + RICindication_IEs__value_PR_RANfunctionID, + RICindication_IEs__value_PR_RICactionID, + RICindication_IEs__value_PR_RICindicationSN, + RICindication_IEs__value_PR_RICindicationType, + RICindication_IEs__value_PR_RICindicationHeader, + RICindication_IEs__value_PR_RICindicationMessage, + RICindication_IEs__value_PR_RICcallProcessID +} RICindication_IEs__value_PR; +typedef enum RICcontrolRequest_IEs__value_PR { + RICcontrolRequest_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolRequest_IEs__value_PR_RICrequestID, + RICcontrolRequest_IEs__value_PR_RANfunctionID, + RICcontrolRequest_IEs__value_PR_RICcallProcessID, + RICcontrolRequest_IEs__value_PR_RICcontrolHeader, + RICcontrolRequest_IEs__value_PR_RICcontrolMessage, + RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest +} RICcontrolRequest_IEs__value_PR; +typedef enum RICcontrolAcknowledge_IEs__value_PR { + RICcontrolAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolAcknowledge_IEs__value_PR_RICrequestID, + RICcontrolAcknowledge_IEs__value_PR_RANfunctionID, + RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus, + RICcontrolAcknowledge_IEs__value_PR_RICcontrolOutcome +} RICcontrolAcknowledge_IEs__value_PR; +typedef enum RICcontrolFailure_IEs__value_PR { + RICcontrolFailure_IEs__value_PR_NOTHING, /* No components present */ + RICcontrolFailure_IEs__value_PR_RICrequestID, + RICcontrolFailure_IEs__value_PR_RANfunctionID, + RICcontrolFailure_IEs__value_PR_RICcallProcessID, + RICcontrolFailure_IEs__value_PR_Cause, + RICcontrolFailure_IEs__value_PR_RICcontrolOutcome +} RICcontrolFailure_IEs__value_PR; +typedef enum ErrorIndication_IEs__value_PR { + ErrorIndication_IEs__value_PR_NOTHING, /* No components present */ + ErrorIndication_IEs__value_PR_RICrequestID, + ErrorIndication_IEs__value_PR_RANfunctionID, + ErrorIndication_IEs__value_PR_Cause, + ErrorIndication_IEs__value_PR_CriticalityDiagnostics +} ErrorIndication_IEs__value_PR; +typedef enum E2setupRequestIEs__value_PR { + E2setupRequestIEs__value_PR_NOTHING, /* No components present */ + E2setupRequestIEs__value_PR_GlobalE2node_ID, + E2setupRequestIEs__value_PR_RANfunctions_List +} E2setupRequestIEs__value_PR; +typedef enum E2setupResponseIEs__value_PR { + E2setupResponseIEs__value_PR_NOTHING, /* No components present */ + E2setupResponseIEs__value_PR_GlobalRIC_ID, + E2setupResponseIEs__value_PR_RANfunctionsID_List, + E2setupResponseIEs__value_PR_RANfunctionsIDcause_List +} E2setupResponseIEs__value_PR; +typedef enum E2setupFailureIEs__value_PR { + E2setupFailureIEs__value_PR_NOTHING, /* No components present */ + E2setupFailureIEs__value_PR_Cause, + E2setupFailureIEs__value_PR_TimeToWait, + E2setupFailureIEs__value_PR_CriticalityDiagnostics +} E2setupFailureIEs__value_PR; +typedef enum ResetRequestIEs__value_PR { + ResetRequestIEs__value_PR_NOTHING, /* No components present */ + ResetRequestIEs__value_PR_Cause +} ResetRequestIEs__value_PR; +typedef enum ResetResponseIEs__value_PR { + ResetResponseIEs__value_PR_NOTHING, /* No components present */ + ResetResponseIEs__value_PR_CriticalityDiagnostics +} ResetResponseIEs__value_PR; +typedef enum RICserviceUpdate_IEs__value_PR { + RICserviceUpdate_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdate_IEs__value_PR_RANfunctions_List, + RICserviceUpdate_IEs__value_PR_RANfunctionsID_List +} RICserviceUpdate_IEs__value_PR; +typedef enum RICserviceUpdateAcknowledge_IEs__value_PR { + RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List, + RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List +} RICserviceUpdateAcknowledge_IEs__value_PR; +typedef enum RICserviceUpdateFailure_IEs__value_PR { + RICserviceUpdateFailure_IEs__value_PR_NOTHING, /* No components present */ + RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List, + RICserviceUpdateFailure_IEs__value_PR_TimeToWait, + RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics +} RICserviceUpdateFailure_IEs__value_PR; +typedef enum RICserviceQuery_IEs__value_PR { + RICserviceQuery_IEs__value_PR_NOTHING, /* No components present */ + RICserviceQuery_IEs__value_PR_RANfunctionsID_List +} RICserviceQuery_IEs__value_PR; + +/* ProtocolIE-Field */ +typedef struct RICaction_ToBeSetup_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_ToBeSetup_ItemIEs__value { + RICaction_ToBeSetup_ItemIEs__value_PR present; + union RICaction_ToBeSetup_ItemIEs__value_u { + RICaction_ToBeSetup_Item_t RICaction_ToBeSetup_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_ItemIEs_t; +typedef struct RICaction_Admitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_Admitted_ItemIEs__value { + RICaction_Admitted_ItemIEs__value_PR present; + union RICaction_Admitted_ItemIEs__value_u { + RICaction_Admitted_Item_t RICaction_Admitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_ItemIEs_t; +typedef struct RICaction_NotAdmitted_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICaction_NotAdmitted_ItemIEs__value { + RICaction_NotAdmitted_ItemIEs__value_PR present; + union RICaction_NotAdmitted_ItemIEs__value_u { + RICaction_NotAdmitted_Item_t RICaction_NotAdmitted_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_ItemIEs_t; +typedef struct RANfunction_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunction_ItemIEs__value { + RANfunction_ItemIEs__value_PR present; + union RANfunction_ItemIEs__value_u { + RANfunction_Item_t RANfunction_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_ItemIEs_t; +typedef struct RANfunctionID_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionID_ItemIEs__value { + RANfunctionID_ItemIEs__value_PR present; + union RANfunctionID_ItemIEs__value_u { + RANfunctionID_Item_t RANfunctionID_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_ItemIEs_t; +typedef struct RANfunctionIDcause_ItemIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RANfunctionIDcause_ItemIEs__value { + RANfunctionIDcause_ItemIEs__value_PR present; + union RANfunctionIDcause_ItemIEs__value_u { + RANfunctionIDcause_Item_t RANfunctionIDcause_Item; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_ItemIEs_t; +typedef struct RICsubscriptionRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionRequest_IEs__value { + RICsubscriptionRequest_IEs__value_PR present; + union RICsubscriptionRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICsubscriptionDetails_t RICsubscriptionDetails; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_IEs_t; +typedef struct RICsubscriptionResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionResponse_IEs__value { + RICsubscriptionResponse_IEs__value_PR present; + union RICsubscriptionResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_Admitted_List_t RICaction_Admitted_List; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_IEs_t; +typedef struct RICsubscriptionFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionFailure_IEs__value { + RICsubscriptionFailure_IEs__value_PR present; + union RICsubscriptionFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICaction_NotAdmitted_List_t RICaction_NotAdmitted_List; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_IEs_t; +typedef struct RICsubscriptionDeleteRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteRequest_IEs__value { + RICsubscriptionDeleteRequest_IEs__value_PR present; + union RICsubscriptionDeleteRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_IEs_t; +typedef struct RICsubscriptionDeleteResponse_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteResponse_IEs__value { + RICsubscriptionDeleteResponse_IEs__value_PR present; + union RICsubscriptionDeleteResponse_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_IEs_t; +typedef struct RICsubscriptionDeleteFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICsubscriptionDeleteFailure_IEs__value { + RICsubscriptionDeleteFailure_IEs__value_PR present; + union RICsubscriptionDeleteFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_IEs_t; +typedef struct RICindication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICindication_IEs__value { + RICindication_IEs__value_PR present; + union RICindication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICactionID_t RICactionID; + RICindicationSN_t RICindicationSN; + RICindicationType_t RICindicationType; + RICindicationHeader_t RICindicationHeader; + RICindicationMessage_t RICindicationMessage; + RICcallProcessID_t RICcallProcessID; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_IEs_t; +typedef struct RICcontrolRequest_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolRequest_IEs__value { + RICcontrolRequest_IEs__value_PR present; + union RICcontrolRequest_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolHeader_t RICcontrolHeader; + RICcontrolMessage_t RICcontrolMessage; + RICcontrolAckRequest_t RICcontrolAckRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_IEs_t; +typedef struct RICcontrolAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolAcknowledge_IEs__value { + RICcontrolAcknowledge_IEs__value_PR present; + union RICcontrolAcknowledge_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + RICcontrolStatus_t RICcontrolStatus; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_IEs_t; +typedef struct RICcontrolFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICcontrolFailure_IEs__value { + RICcontrolFailure_IEs__value_PR present; + union RICcontrolFailure_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + RICcallProcessID_t RICcallProcessID; + Cause_t Cause; + RICcontrolOutcome_t RICcontrolOutcome; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_IEs_t; +typedef struct ErrorIndication_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ErrorIndication_IEs__value { + ErrorIndication_IEs__value_PR present; + union ErrorIndication_IEs__value_u { + RICrequestID_t RICrequestID; + RANfunctionID_t RANfunctionID; + Cause_t Cause; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ErrorIndication_IEs_t; +typedef struct E2setupRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupRequestIEs__value { + E2setupRequestIEs__value_PR present; + union E2setupRequestIEs__value_u { + GlobalE2node_ID_t GlobalE2node_ID; + RANfunctions_List_t RANfunctions_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupRequestIEs_t; +typedef struct E2setupResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupResponseIEs__value { + E2setupResponseIEs__value_PR present; + union E2setupResponseIEs__value_u { + GlobalRIC_ID_t GlobalRIC_ID; + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupResponseIEs_t; +typedef struct E2setupFailureIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct E2setupFailureIEs__value { + E2setupFailureIEs__value_PR present; + union E2setupFailureIEs__value_u { + Cause_t Cause; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2setupFailureIEs_t; +typedef struct ResetRequestIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetRequestIEs__value { + ResetRequestIEs__value_PR present; + union ResetRequestIEs__value_u { + Cause_t Cause; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequestIEs_t; +typedef struct ResetResponseIEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct ResetResponseIEs__value { + ResetResponseIEs__value_PR present; + union ResetResponseIEs__value_u { + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponseIEs_t; +typedef struct RICserviceUpdate_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdate_IEs__value { + RICserviceUpdate_IEs__value_PR present; + union RICserviceUpdate_IEs__value_u { + RANfunctions_List_t RANfunctions_List; + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_IEs_t; +typedef struct RICserviceUpdateAcknowledge_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateAcknowledge_IEs__value { + RICserviceUpdateAcknowledge_IEs__value_PR present; + union RICserviceUpdateAcknowledge_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_IEs_t; +typedef struct RICserviceUpdateFailure_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceUpdateFailure_IEs__value { + RICserviceUpdateFailure_IEs__value_PR present; + union RICserviceUpdateFailure_IEs__value_u { + RANfunctionsIDcause_List_t RANfunctionsIDcause_List; + TimeToWait_t TimeToWait; + CriticalityDiagnostics_t CriticalityDiagnostics; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_IEs_t; +typedef struct RICserviceQuery_IEs { + ProtocolIE_ID_t id; + Criticality_t criticality; + struct RICserviceQuery_IEs__value { + RICserviceQuery_IEs__value_PR present; + union RICserviceQuery_IEs__value_u { + RANfunctionsID_List_t RANfunctionsID_List; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1; +extern asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_ItemIEs_1[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_ItemIEs_specs_5; +extern asn_TYPE_member_t asn_MBR_RICaction_Admitted_ItemIEs_5[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9; +extern asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_ItemIEs_9[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunction_ItemIEs_specs_13; +extern asn_TYPE_member_t asn_MBR_RANfunction_ItemIEs_13[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_ItemIEs_specs_17; +extern asn_TYPE_member_t asn_MBR_RANfunctionID_ItemIEs_17[3]; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_ItemIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_ItemIEs_specs_21; +extern asn_TYPE_member_t asn_MBR_RANfunctionIDcause_ItemIEs_21[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_IEs_specs_25; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_IEs_25[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_IEs_specs_29; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_IEs_29[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_IEs_specs_33; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_IEs_33[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_IEs_specs_37; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_IEs_37[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_IEs_specs_41; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_IEs_41[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_IEs_specs_45; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_IEs_45[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICindication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_IEs_specs_49; +extern asn_TYPE_member_t asn_MBR_RICindication_IEs_49[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_IEs_specs_53; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_IEs_53[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_IEs_specs_57; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_IEs_57[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_IEs_specs_61; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_IEs_61[3]; +extern asn_TYPE_descriptor_t asn_DEF_ErrorIndication_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ErrorIndication_IEs_specs_65; +extern asn_TYPE_member_t asn_MBR_ErrorIndication_IEs_65[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupRequestIEs_specs_69; +extern asn_TYPE_member_t asn_MBR_E2setupRequestIEs_69[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupResponseIEs_specs_73; +extern asn_TYPE_member_t asn_MBR_E2setupResponseIEs_73[3]; +extern asn_TYPE_descriptor_t asn_DEF_E2setupFailureIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_E2setupFailureIEs_specs_77; +extern asn_TYPE_member_t asn_MBR_E2setupFailureIEs_77[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetRequestIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequestIEs_specs_81; +extern asn_TYPE_member_t asn_MBR_ResetRequestIEs_81[3]; +extern asn_TYPE_descriptor_t asn_DEF_ResetResponseIEs; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponseIEs_specs_85; +extern asn_TYPE_member_t asn_MBR_ResetResponseIEs_85[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_IEs_specs_89; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_IEs_89[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_IEs_specs_93; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_IEs_93[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_IEs_specs_97; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_IEs_97[3]; +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery_IEs; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_IEs_specs_101; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_IEs_101[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_Field_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.c new file mode 100644 index 0000000..1d70ccf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.c @@ -0,0 +1,9 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-FieldPair.h" + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.h new file mode 100644 index 0000000..ca20e0d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-FieldPair.h @@ -0,0 +1,23 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_FieldPair_H_ +#define _ProtocolIE_FieldPair_H_ + + +#include "asn_application.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_FieldPair_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.c new file mode 100644 index 0000000..c7466e3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-ID.h" + +int +ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ProtocolIE_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID = { + "ProtocolIE-ID", + "ProtocolIE-ID", + &asn_OP_NativeInteger, + asn_DEF_ProtocolIE_ID_tags_1, + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_ID_tags_1) + /sizeof(asn_DEF_ProtocolIE_ID_tags_1[0]), /* 1 */ + { &asn_OER_type_ProtocolIE_ID_constr_1, &asn_PER_type_ProtocolIE_ID_constr_1, ProtocolIE_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.h new file mode 100644 index 0000000..cb581b9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-ID.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_ID_H_ +#define _ProtocolIE_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-ID */ +typedef long ProtocolIE_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ProtocolIE_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_ID; +asn_struct_free_f ProtocolIE_ID_free; +asn_struct_print_f ProtocolIE_ID_print; +asn_constr_check_f ProtocolIE_ID_constraint; +ber_type_decoder_f ProtocolIE_ID_decode_ber; +der_type_encoder_f ProtocolIE_ID_encode_der; +xer_type_decoder_f ProtocolIE_ID_decode_xer; +xer_type_encoder_f ProtocolIE_ID_encode_xer; +oer_type_decoder_f ProtocolIE_ID_decode_oer; +oer_type_encoder_f ProtocolIE_ID_encode_oer; +per_type_decoder_f ProtocolIE_ID_decode_uper; +per_type_encoder_f ProtocolIE_ID_encode_uper; +per_type_decoder_f ProtocolIE_ID_decode_aper; +per_type_encoder_f ProtocolIE_ID_encode_aper; +#define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)1) +#define ProtocolIE_ID_id_CriticalityDiagnostics ((ProtocolIE_ID_t)2) +#define ProtocolIE_ID_id_GlobalE2node_ID ((ProtocolIE_ID_t)3) +#define ProtocolIE_ID_id_GlobalRIC_ID ((ProtocolIE_ID_t)4) +#define ProtocolIE_ID_id_RANfunctionID ((ProtocolIE_ID_t)5) +#define ProtocolIE_ID_id_RANfunctionID_Item ((ProtocolIE_ID_t)6) +#define ProtocolIE_ID_id_RANfunctionIEcause_Item ((ProtocolIE_ID_t)7) +#define ProtocolIE_ID_id_RANfunction_Item ((ProtocolIE_ID_t)8) +#define ProtocolIE_ID_id_RANfunctionsAccepted ((ProtocolIE_ID_t)9) +#define ProtocolIE_ID_id_RANfunctionsAdded ((ProtocolIE_ID_t)10) +#define ProtocolIE_ID_id_RANfunctionsDeleted ((ProtocolIE_ID_t)11) +#define ProtocolIE_ID_id_RANfunctionsModified ((ProtocolIE_ID_t)12) +#define ProtocolIE_ID_id_RANfunctionsRejected ((ProtocolIE_ID_t)13) +#define ProtocolIE_ID_id_RICaction_Admitted_Item ((ProtocolIE_ID_t)14) +#define ProtocolIE_ID_id_RICactionID ((ProtocolIE_ID_t)15) +#define ProtocolIE_ID_id_RICaction_NotAdmitted_Item ((ProtocolIE_ID_t)16) +#define ProtocolIE_ID_id_RICactions_Admitted ((ProtocolIE_ID_t)17) +#define ProtocolIE_ID_id_RICactions_NotAdmitted ((ProtocolIE_ID_t)18) +#define ProtocolIE_ID_id_RICaction_ToBeSetup_Item ((ProtocolIE_ID_t)19) +#define ProtocolIE_ID_id_RICcallProcessID ((ProtocolIE_ID_t)20) +#define ProtocolIE_ID_id_RICcontrolAckRequest ((ProtocolIE_ID_t)21) +#define ProtocolIE_ID_id_RICcontrolHeader ((ProtocolIE_ID_t)22) +#define ProtocolIE_ID_id_RICcontrolMessage ((ProtocolIE_ID_t)23) +#define ProtocolIE_ID_id_RICcontrolStatus ((ProtocolIE_ID_t)24) +#define ProtocolIE_ID_id_RICindicationHeader ((ProtocolIE_ID_t)25) +#define ProtocolIE_ID_id_RICindicationMessage ((ProtocolIE_ID_t)26) +#define ProtocolIE_ID_id_RICindicationSN ((ProtocolIE_ID_t)27) +#define ProtocolIE_ID_id_RICindicationType ((ProtocolIE_ID_t)28) +#define ProtocolIE_ID_id_RICrequestID ((ProtocolIE_ID_t)29) +#define ProtocolIE_ID_id_RICsubscriptionDetails ((ProtocolIE_ID_t)30) +#define ProtocolIE_ID_id_TimeToWait ((ProtocolIE_ID_t)31) +#define ProtocolIE_ID_id_RICcontrolOutcome ((ProtocolIE_ID_t)32) + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_ID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c new file mode 100644 index 0000000..d9b038e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.c @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ProtocolIE-SingleContainer.h" + +/* + * This type is implemented using RICaction_ToBeSetup_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_Admitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RICaction_NotAdmitted_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunction_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionID_ItemIEs, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using RANfunctionIDcause_ItemIEs, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P0_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_ItemIEs_1, + 3, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P1_tags_2[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_ItemIEs_5, + 3, /* Elements count */ + &asn_SPC_RICaction_Admitted_ItemIEs_specs_5 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P2_tags_3[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_ItemIEs_9, + 3, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P3_tags_4[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_ItemIEs_13, + 3, /* Elements count */ + &asn_SPC_RANfunction_ItemIEs_specs_13 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P4_tags_5[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_ItemIEs_17, + 3, /* Elements count */ + &asn_SPC_RANfunctionID_ItemIEs_specs_17 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5 = { + "ProtocolIE-SingleContainer", + "ProtocolIE-SingleContainer", + &asn_OP_SEQUENCE, + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6, /* Same as above */ + sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6) + /sizeof(asn_DEF_ProtocolIE_SingleContainer_1530P5_tags_6[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_ItemIEs_21, + 3, /* Elements count */ + &asn_SPC_RANfunctionIDcause_ItemIEs_specs_21 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h new file mode 100644 index 0000000..f733073 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ProtocolIE-SingleContainer.h @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-Containers" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ProtocolIE_SingleContainer_H_ +#define _ProtocolIE_SingleContainer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Field.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProtocolIE-SingleContainer */ +typedef RICaction_ToBeSetup_ItemIEs_t ProtocolIE_SingleContainer_1530P0_t; +typedef RICaction_Admitted_ItemIEs_t ProtocolIE_SingleContainer_1530P1_t; +typedef RICaction_NotAdmitted_ItemIEs_t ProtocolIE_SingleContainer_1530P2_t; +typedef RANfunction_ItemIEs_t ProtocolIE_SingleContainer_1530P3_t; +typedef RANfunctionID_ItemIEs_t ProtocolIE_SingleContainer_1530P4_t; +typedef RANfunctionIDcause_ItemIEs_t ProtocolIE_SingleContainer_1530P5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P0; +asn_struct_free_f ProtocolIE_SingleContainer_1530P0_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P0_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P0_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P0_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P0_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P1; +asn_struct_free_f ProtocolIE_SingleContainer_1530P1_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P1_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P1_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P1_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P1_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P2; +asn_struct_free_f ProtocolIE_SingleContainer_1530P2_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P2_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P2_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P2_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P2_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P3; +asn_struct_free_f ProtocolIE_SingleContainer_1530P3_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P3_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P3_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P3_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P3_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P4; +asn_struct_free_f ProtocolIE_SingleContainer_1530P4_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P4_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P4_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P4_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P4_encode_aper; +extern asn_TYPE_descriptor_t asn_DEF_ProtocolIE_SingleContainer_1530P5; +asn_struct_free_f ProtocolIE_SingleContainer_1530P5_free; +asn_struct_print_f ProtocolIE_SingleContainer_1530P5_print; +asn_constr_check_f ProtocolIE_SingleContainer_1530P5_constraint; +ber_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_ber; +der_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_der; +xer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_xer; +xer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_xer; +oer_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_oer; +oer_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_oer; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_uper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_uper; +per_type_decoder_f ProtocolIE_SingleContainer_1530P5_decode_aper; +per_type_encoder_f ProtocolIE_SingleContainer_1530P5_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProtocolIE_SingleContainer_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.c new file mode 100644 index 0000000..3cc4346 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunction-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunction_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionDefinition), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunction_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunction_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunction_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ranFunctionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunction_Item_specs_1 = { + sizeof(struct RANfunction_Item), + offsetof(struct RANfunction_Item, _asn_ctx), + asn_MAP_RANfunction_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunction_Item = { + "RANfunction-Item", + "RANfunction-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunction_Item_tags_1, + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunction_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunction_Item_tags_1) + /sizeof(asn_DEF_RANfunction_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunction_Item_1, + 3, /* Elements count */ + &asn_SPC_RANfunction_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.h new file mode 100644 index 0000000..b791652 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunction-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunction_Item_H_ +#define _RANfunction_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionDefinition.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunction-Item */ +typedef struct RANfunction_Item { + RANfunctionID_t ranFunctionID; + RANfunctionDefinition_t ranFunctionDefinition; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunction_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunction_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunction_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.c new file mode 100644 index 0000000..2e60af0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RANfunctionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition = { + "RANfunctionDefinition", + "RANfunctionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RANfunctionDefinition_tags_1, + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionDefinition_tags_1) + /sizeof(asn_DEF_RANfunctionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.h new file mode 100644 index 0000000..93dca22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionDefinition_H_ +#define _RANfunctionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionDefinition */ +typedef OCTET_STRING_t RANfunctionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionDefinition; +asn_struct_free_f RANfunctionDefinition_free; +asn_struct_print_f RANfunctionDefinition_print; +asn_constr_check_f RANfunctionDefinition_constraint; +ber_type_decoder_f RANfunctionDefinition_decode_ber; +der_type_encoder_f RANfunctionDefinition_encode_der; +xer_type_decoder_f RANfunctionDefinition_decode_xer; +xer_type_encoder_f RANfunctionDefinition_encode_xer; +oer_type_decoder_f RANfunctionDefinition_decode_oer; +oer_type_encoder_f RANfunctionDefinition_encode_oer; +per_type_decoder_f RANfunctionDefinition_decode_uper; +per_type_encoder_f RANfunctionDefinition_encode_uper; +per_type_decoder_f RANfunctionDefinition_decode_aper; +per_type_encoder_f RANfunctionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.c new file mode 100644 index 0000000..3fa7c18 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionID-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionID_Item, ranFunctionRevision), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionRevision, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionRevision" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionRevision */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionID_Item_specs_1 = { + sizeof(struct RANfunctionID_Item), + offsetof(struct RANfunctionID_Item, _asn_ctx), + asn_MAP_RANfunctionID_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item = { + "RANfunctionID-Item", + "RANfunctionID-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionID_Item_tags_1, + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_Item_tags_1) + /sizeof(asn_DEF_RANfunctionID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionID_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionID_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.h new file mode 100644 index 0000000..1566a03 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionID_Item_H_ +#define _RANfunctionID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "RANfunctionRevision.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID-Item */ +typedef struct RANfunctionID_Item { + RANfunctionID_t ranFunctionID; + RANfunctionRevision_t ranFunctionRevision; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.c new file mode 100644 index 0000000..964225d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionID.h" + +int +RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..4095) */, + -1}; +asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionID = { + "RANfunctionID", + "RANfunctionID", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionID_tags_1, + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionID_tags_1) + /sizeof(asn_DEF_RANfunctionID_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionID_constr_1, &asn_PER_type_RANfunctionID_constr_1, RANfunctionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.h new file mode 100644 index 0000000..dc825cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionID_H_ +#define _RANfunctionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionID */ +typedef long RANfunctionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionID; +asn_struct_free_f RANfunctionID_free; +asn_struct_print_f RANfunctionID_print; +asn_constr_check_f RANfunctionID_constraint; +ber_type_decoder_f RANfunctionID_decode_ber; +der_type_encoder_f RANfunctionID_encode_der; +xer_type_decoder_f RANfunctionID_decode_xer; +xer_type_encoder_f RANfunctionID_encode_xer; +oer_type_decoder_f RANfunctionID_decode_oer; +oer_type_encoder_f RANfunctionID_encode_oer; +per_type_decoder_f RANfunctionID_decode_uper; +per_type_encoder_f RANfunctionID_encode_uper; +per_type_decoder_f RANfunctionID_decode_aper; +per_type_encoder_f RANfunctionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.c new file mode 100644 index 0000000..ac39adc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionIDcause-Item.h" + +static asn_TYPE_member_t asn_MBR_RANfunctionIDcause_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, ranFunctionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANfunctionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ranFunctionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RANfunctionIDcause_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionIDcause_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RANfunctionIDcause_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RANfunctionIDcause_Item_specs_1 = { + sizeof(struct RANfunctionIDcause_Item), + offsetof(struct RANfunctionIDcause_Item, _asn_ctx), + asn_MAP_RANfunctionIDcause_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item = { + "RANfunctionIDcause-Item", + "RANfunctionIDcause-Item", + &asn_OP_SEQUENCE, + asn_DEF_RANfunctionIDcause_Item_tags_1, + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionIDcause_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1) + /sizeof(asn_DEF_RANfunctionIDcause_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RANfunctionIDcause_Item_1, + 2, /* Elements count */ + &asn_SPC_RANfunctionIDcause_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.h new file mode 100644 index 0000000..338e066 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionIDcause-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionIDcause_Item_H_ +#define _RANfunctionIDcause_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RANfunctionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionIDcause-Item */ +typedef struct RANfunctionIDcause_Item { + RANfunctionID_t ranFunctionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionIDcause_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionIDcause_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionIDcause_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.c new file mode 100644 index 0000000..a2aa7ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionRevision.h" + +int +RANfunctionRevision_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..4095) */, + -1}; +asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionRevision_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision = { + "RANfunctionRevision", + "RANfunctionRevision", + &asn_OP_NativeInteger, + asn_DEF_RANfunctionRevision_tags_1, + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionRevision_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionRevision_tags_1) + /sizeof(asn_DEF_RANfunctionRevision_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionRevision_constr_1, &asn_PER_type_RANfunctionRevision_constr_1, RANfunctionRevision_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.h new file mode 100644 index 0000000..837b0e2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionRevision.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionRevision_H_ +#define _RANfunctionRevision_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANfunctionRevision */ +typedef long RANfunctionRevision_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANfunctionRevision_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionRevision; +asn_struct_free_f RANfunctionRevision_free; +asn_struct_print_f RANfunctionRevision_print; +asn_constr_check_f RANfunctionRevision_constraint; +ber_type_decoder_f RANfunctionRevision_decode_ber; +der_type_encoder_f RANfunctionRevision_encode_der; +xer_type_decoder_f RANfunctionRevision_decode_xer; +xer_type_encoder_f RANfunctionRevision_encode_xer; +oer_type_decoder_f RANfunctionRevision_decode_oer; +oer_type_encoder_f RANfunctionRevision_encode_oer; +per_type_decoder_f RANfunctionRevision_decode_uper; +per_type_encoder_f RANfunctionRevision_encode_uper; +per_type_decoder_f RANfunctionRevision_decode_aper; +per_type_encoder_f RANfunctionRevision_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionRevision_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.c new file mode 100644 index 0000000..61f8e02 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctions-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctions_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctions_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctions_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctions_List_specs_1 = { + sizeof(struct RANfunctions_List), + offsetof(struct RANfunctions_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctions_List = { + "RANfunctions-List", + "RANfunctions-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctions_List_tags_1, + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctions_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctions_List_tags_1) + /sizeof(asn_DEF_RANfunctions_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctions_List_constr_1, &asn_PER_type_RANfunctions_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctions_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctions_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.h new file mode 100644 index 0000000..f1193cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctions-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctions_List_H_ +#define _RANfunctions_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctions-List */ +typedef struct RANfunctions_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctions_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctions_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctions_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.c new file mode 100644 index 0000000..1cc0185 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionsID-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctionsID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsID_List_specs_1 = { + sizeof(struct RANfunctionsID_List), + offsetof(struct RANfunctionsID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List = { + "RANfunctionsID-List", + "RANfunctionsID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsID_List_tags_1, + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsID_List_tags_1) + /sizeof(asn_DEF_RANfunctionsID_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionsID_List_constr_1, &asn_PER_type_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsID_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsID_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.h new file mode 100644 index 0000000..1cad48c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsID-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionsID_List_H_ +#define _RANfunctionsID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsID-List */ +typedef struct RANfunctionsID_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsID_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsID_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.c new file mode 100644 index 0000000..e5345f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RANfunctionsIDcause-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..256)) */}; +static asn_per_constraints_t asn_PER_type_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 9, 9, 0, 256 } /* (SIZE(0..256)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RANfunctionsIDcause_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RANfunctionsIDcause_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RANfunctionsIDcause_List_specs_1 = { + sizeof(struct RANfunctionsIDcause_List), + offsetof(struct RANfunctionsIDcause_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List = { + "RANfunctionsIDcause-List", + "RANfunctionsIDcause-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RANfunctionsIDcause_List_tags_1, + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + asn_DEF_RANfunctionsIDcause_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1) + /sizeof(asn_DEF_RANfunctionsIDcause_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RANfunctionsIDcause_List_constr_1, &asn_PER_type_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RANfunctionsIDcause_List_1, + 1, /* Single element */ + &asn_SPC_RANfunctionsIDcause_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.h new file mode 100644 index 0000000..4949436 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RANfunctionsIDcause-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RANfunctionsIDcause_List_H_ +#define _RANfunctionsIDcause_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RANfunctionsIDcause-List */ +typedef struct RANfunctionsIDcause_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RANfunctionsIDcause_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RANfunctionsIDcause_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANfunctionsIDcause_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.c new file mode 100644 index 0000000..edb976f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-Admitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_Admitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_Admitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_Admitted_Item_specs_1 = { + sizeof(struct RICaction_Admitted_Item), + offsetof(struct RICaction_Admitted_Item, _asn_ctx), + asn_MAP_RICaction_Admitted_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item = { + "RICaction-Admitted-Item", + "RICaction-Admitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_Admitted_Item_tags_1, + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_Admitted_Item_1, + 1, /* Elements count */ + &asn_SPC_RICaction_Admitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.h new file mode 100644 index 0000000..3ad904a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-Item.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_Admitted_Item_H_ +#define _RICaction_Admitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-Admitted-Item */ +typedef struct RICaction_Admitted_Item { + RICactionID_t ricActionID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.c new file mode 100644 index 0000000..457e9ff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-Admitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16)) */}; +static asn_per_constraints_t asn_PER_type_RICaction_Admitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_Admitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_Admitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_Admitted_List_specs_1 = { + sizeof(struct RICaction_Admitted_List), + offsetof(struct RICaction_Admitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List = { + "RICaction-Admitted-List", + "RICaction-Admitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_Admitted_List_tags_1, + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_Admitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_Admitted_List_tags_1) + /sizeof(asn_DEF_RICaction_Admitted_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICaction_Admitted_List_constr_1, &asn_PER_type_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_Admitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_Admitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.h new file mode 100644 index 0000000..09d9711 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-Admitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_Admitted_List_H_ +#define _RICaction_Admitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-Admitted-List */ +typedef struct RICaction_Admitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_Admitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_Admitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_Admitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c new file mode 100644 index 0000000..3cc57e0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-NotAdmitted-Item.h" + +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_NotAdmitted_Item, cause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_Cause, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cause" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_NotAdmitted_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cause */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_NotAdmitted_Item_specs_1 = { + sizeof(struct RICaction_NotAdmitted_Item), + offsetof(struct RICaction_NotAdmitted_Item, _asn_ctx), + asn_MAP_RICaction_NotAdmitted_Item_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item = { + "RICaction-NotAdmitted-Item", + "RICaction-NotAdmitted-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_NotAdmitted_Item_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_NotAdmitted_Item_1, + 2, /* Elements count */ + &asn_SPC_RICaction_NotAdmitted_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h new file mode 100644 index 0000000..0d1b376 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_NotAdmitted_Item_H_ +#define _RICaction_NotAdmitted_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "Cause.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICaction-NotAdmitted-Item */ +typedef struct RICaction_NotAdmitted_Item { + RICactionID_t ricActionID; + Cause_t cause; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c new file mode 100644 index 0000000..abb292f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-NotAdmitted-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..16)) */}; +static asn_per_constraints_t asn_PER_type_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 16 } /* (SIZE(0..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RICaction_NotAdmitted_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICaction_NotAdmitted_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RICaction_NotAdmitted_List_specs_1 = { + sizeof(struct RICaction_NotAdmitted_List), + offsetof(struct RICaction_NotAdmitted_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List = { + "RICaction-NotAdmitted-List", + "RICaction-NotAdmitted-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICaction_NotAdmitted_List_tags_1, + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + asn_DEF_RICaction_NotAdmitted_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1) + /sizeof(asn_DEF_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICaction_NotAdmitted_List_constr_1, &asn_PER_type_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICaction_NotAdmitted_List_1, + 1, /* Single element */ + &asn_SPC_RICaction_NotAdmitted_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h new file mode 100644 index 0000000..c38717c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-NotAdmitted-List.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_NotAdmitted_List_H_ +#define _RICaction_NotAdmitted_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICaction-NotAdmitted-List */ +typedef struct RICaction_NotAdmitted_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_NotAdmitted_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_NotAdmitted_List; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_NotAdmitted_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c new file mode 100644 index 0000000..94f5b2f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.c @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICaction-ToBeSetup-Item.h" + +#include "RICsubsequentAction.h" +static asn_TYPE_member_t asn_MBR_RICaction_ToBeSetup_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICaction_ToBeSetup_Item, ricActionType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionType" + }, + { ATF_POINTER, 2, offsetof(struct RICaction_ToBeSetup_Item, ricActionDefinition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactionDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricActionDefinition" + }, + { ATF_POINTER, 1, offsetof(struct RICaction_ToBeSetup_Item, ricSubsequentAction), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentAction, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentAction" + }, +}; +static const int asn_MAP_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 }; +static const ber_tlv_tag_t asn_DEF_RICaction_ToBeSetup_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICaction_ToBeSetup_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICaction_ToBeSetup_Item_specs_1 = { + sizeof(struct RICaction_ToBeSetup_Item), + offsetof(struct RICaction_ToBeSetup_Item, _asn_ctx), + asn_MAP_RICaction_ToBeSetup_Item_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RICaction_ToBeSetup_Item_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item = { + "RICaction-ToBeSetup-Item", + "RICaction-ToBeSetup-Item", + &asn_OP_SEQUENCE, + asn_DEF_RICaction_ToBeSetup_Item_tags_1, + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + asn_DEF_RICaction_ToBeSetup_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1) + /sizeof(asn_DEF_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICaction_ToBeSetup_Item_1, + 4, /* Elements count */ + &asn_SPC_RICaction_ToBeSetup_Item_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h new file mode 100644 index 0000000..1bbbd47 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICaction-ToBeSetup-Item.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICaction_ToBeSetup_Item_H_ +#define _RICaction_ToBeSetup_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICactionID.h" +#include "RICactionType.h" +#include "RICactionDefinition.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RICsubsequentAction; + +/* RICaction-ToBeSetup-Item */ +typedef struct RICaction_ToBeSetup_Item { + RICactionID_t ricActionID; + RICactionType_t ricActionType; + RICactionDefinition_t *ricActionDefinition; /* OPTIONAL */ + struct RICsubsequentAction *ricSubsequentAction; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICaction_ToBeSetup_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICaction_ToBeSetup_Item; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICaction_ToBeSetup_Item_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.c new file mode 100644 index 0000000..9a0588b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICactionDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionDefinition = { + "RICactionDefinition", + "RICactionDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICactionDefinition_tags_1, + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICactionDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionDefinition_tags_1) + /sizeof(asn_DEF_RICactionDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.h new file mode 100644 index 0000000..9d89df9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionDefinition_H_ +#define _RICactionDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionDefinition */ +typedef OCTET_STRING_t RICactionDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactionDefinition; +asn_struct_free_f RICactionDefinition_free; +asn_struct_print_f RICactionDefinition_print; +asn_constr_check_f RICactionDefinition_constraint; +ber_type_decoder_f RICactionDefinition_decode_ber; +der_type_encoder_f RICactionDefinition_encode_der; +xer_type_decoder_f RICactionDefinition_decode_xer; +xer_type_encoder_f RICactionDefinition_encode_xer; +oer_type_decoder_f RICactionDefinition_decode_oer; +oer_type_encoder_f RICactionDefinition_encode_oer; +per_type_decoder_f RICactionDefinition_decode_uper; +per_type_encoder_f RICactionDefinition_encode_uper; +per_type_decoder_f RICactionDefinition_decode_aper; +per_type_encoder_f RICactionDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.c new file mode 100644 index 0000000..56c67b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionID.h" + +int +RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICactionID_constr_1 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +asn_per_constraints_t asn_PER_type_RICactionID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICactionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionID = { + "RICactionID", + "RICactionID", + &asn_OP_NativeInteger, + asn_DEF_RICactionID_tags_1, + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + asn_DEF_RICactionID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionID_tags_1) + /sizeof(asn_DEF_RICactionID_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactionID_constr_1, &asn_PER_type_RICactionID_constr_1, RICactionID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.h new file mode 100644 index 0000000..68fc9b4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionID_H_ +#define _RICactionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICactionID */ +typedef long RICactionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionID; +asn_struct_free_f RICactionID_free; +asn_struct_print_f RICactionID_print; +asn_constr_check_f RICactionID_constraint; +ber_type_decoder_f RICactionID_decode_ber; +der_type_encoder_f RICactionID_encode_der; +xer_type_decoder_f RICactionID_decode_xer; +xer_type_encoder_f RICactionID_encode_xer; +oer_type_decoder_f RICactionID_decode_oer; +oer_type_encoder_f RICactionID_encode_oer; +per_type_decoder_f RICactionID_decode_uper; +per_type_encoder_f RICactionID_encode_uper; +per_type_decoder_f RICactionID_decode_aper; +per_type_encoder_f RICactionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.c new file mode 100644 index 0000000..7fd484b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICactionType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICactionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICactionType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" }, + { 2, 6, "policy" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICactionType_enum2value_1[] = { + 1, /* insert(1) */ + 2, /* policy(2) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1 = { + asn_MAP_RICactionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICactionType_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICactionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICactionType = { + "RICactionType", + "RICactionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICactionType_tags_1, + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + asn_DEF_RICactionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactionType_tags_1) + /sizeof(asn_DEF_RICactionType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactionType_constr_1, &asn_PER_type_RICactionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICactionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.h new file mode 100644 index 0000000..2f1f5ae --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactionType.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactionType_H_ +#define _RICactionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICactionType { + RICactionType_report = 0, + RICactionType_insert = 1, + RICactionType_policy = 2 + /* + * Enumeration is extensible + */ +} e_RICactionType; + +/* RICactionType */ +typedef long RICactionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICactionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICactionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1; +asn_struct_free_f RICactionType_free; +asn_struct_print_f RICactionType_print; +asn_constr_check_f RICactionType_constraint; +ber_type_decoder_f RICactionType_decode_ber; +der_type_encoder_f RICactionType_encode_der; +xer_type_decoder_f RICactionType_decode_xer; +xer_type_encoder_f RICactionType_encode_xer; +oer_type_decoder_f RICactionType_decode_oer; +oer_type_encoder_f RICactionType_encode_oer; +per_type_decoder_f RICactionType_decode_uper; +per_type_encoder_f RICactionType_encode_uper; +per_type_decoder_f RICactionType_decode_aper; +per_type_encoder_f RICactionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c new file mode 100644 index 0000000..e47fa8d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.c @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICactions-ToBeSetup-List.h" + +#include "ProtocolIE-SingleContainer.h" +static asn_oer_constraints_t asn_OER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(1..16)) */}; +asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ProtocolIE_SingleContainer_1530P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICactions_ToBeSetup_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1 = { + sizeof(struct RICactions_ToBeSetup_List), + offsetof(struct RICactions_ToBeSetup_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List = { + "RICactions-ToBeSetup-List", + "RICactions-ToBeSetup-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_RICactions_ToBeSetup_List_tags_1, + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + asn_DEF_RICactions_ToBeSetup_List_tags_1, /* Same as above */ + sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1) + /sizeof(asn_DEF_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */ + { &asn_OER_type_RICactions_ToBeSetup_List_constr_1, &asn_PER_type_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_RICactions_ToBeSetup_List_1, + 1, /* Single element */ + &asn_SPC_RICactions_ToBeSetup_List_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h new file mode 100644 index 0000000..3e92509 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICactions-ToBeSetup-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICactions_ToBeSetup_List_H_ +#define _RICactions_ToBeSetup_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ProtocolIE_SingleContainer; + +/* RICactions-ToBeSetup-List */ +typedef struct RICactions_ToBeSetup_List { + A_SEQUENCE_OF(struct ProtocolIE_SingleContainer) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICactions_ToBeSetup_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICactions_ToBeSetup_List; +extern asn_SET_OF_specifics_t asn_SPC_RICactions_ToBeSetup_List_specs_1; +extern asn_TYPE_member_t asn_MBR_RICactions_ToBeSetup_List_1[1]; +extern asn_per_constraints_t asn_PER_type_RICactions_ToBeSetup_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICactions_ToBeSetup_List_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.c new file mode 100644 index 0000000..4cfed50 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcallProcessID.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcallProcessID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcallProcessID = { + "RICcallProcessID", + "RICcallProcessID", + &asn_OP_OCTET_STRING, + asn_DEF_RICcallProcessID_tags_1, + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + asn_DEF_RICcallProcessID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcallProcessID_tags_1) + /sizeof(asn_DEF_RICcallProcessID_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.h new file mode 100644 index 0000000..dd303af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcallProcessID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcallProcessID_H_ +#define _RICcallProcessID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcallProcessID */ +typedef OCTET_STRING_t RICcallProcessID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcallProcessID; +asn_struct_free_f RICcallProcessID_free; +asn_struct_print_f RICcallProcessID_print; +asn_constr_check_f RICcallProcessID_constraint; +ber_type_decoder_f RICcallProcessID_decode_ber; +der_type_encoder_f RICcallProcessID_encode_der; +xer_type_decoder_f RICcallProcessID_decode_xer; +xer_type_encoder_f RICcallProcessID_encode_xer; +oer_type_decoder_f RICcallProcessID_decode_oer; +oer_type_encoder_f RICcallProcessID_encode_oer; +per_type_decoder_f RICcallProcessID_decode_uper; +per_type_encoder_f RICcallProcessID_encode_uper; +per_type_decoder_f RICcallProcessID_decode_aper; +per_type_encoder_f RICcallProcessID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcallProcessID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.c new file mode 100644 index 0000000..0fd327b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolAckRequest.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICcontrolAckRequest_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolAckRequest_value2enum_1[] = { + { 0, 5, "noAck" }, + { 1, 3, "ack" }, + { 2, 4, "nAck" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolAckRequest_enum2value_1[] = { + 1, /* ack(1) */ + 2, /* nAck(2) */ + 0 /* noAck(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolAckRequest_specs_1 = { + asn_MAP_RICcontrolAckRequest_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolAckRequest_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAckRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest = { + "RICcontrolAckRequest", + "RICcontrolAckRequest", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolAckRequest_tags_1, + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAckRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAckRequest_tags_1) + /sizeof(asn_DEF_RICcontrolAckRequest_tags_1[0]), /* 1 */ + { &asn_OER_type_RICcontrolAckRequest_constr_1, &asn_PER_type_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolAckRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.h new file mode 100644 index 0000000..11fc016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAckRequest.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolAckRequest_H_ +#define _RICcontrolAckRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolAckRequest { + RICcontrolAckRequest_noAck = 0, + RICcontrolAckRequest_ack = 1, + RICcontrolAckRequest_nAck = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolAckRequest; + +/* RICcontrolAckRequest */ +typedef long RICcontrolAckRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAckRequest; +asn_struct_free_f RICcontrolAckRequest_free; +asn_struct_print_f RICcontrolAckRequest_print; +asn_constr_check_f RICcontrolAckRequest_constraint; +ber_type_decoder_f RICcontrolAckRequest_decode_ber; +der_type_encoder_f RICcontrolAckRequest_encode_der; +xer_type_decoder_f RICcontrolAckRequest_decode_xer; +xer_type_encoder_f RICcontrolAckRequest_encode_xer; +oer_type_decoder_f RICcontrolAckRequest_decode_oer; +oer_type_encoder_f RICcontrolAckRequest_encode_oer; +per_type_decoder_f RICcontrolAckRequest_decode_uper; +per_type_encoder_f RICcontrolAckRequest_encode_uper; +per_type_decoder_f RICcontrolAckRequest_decode_aper; +per_type_encoder_f RICcontrolAckRequest_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAckRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.c new file mode 100644 index 0000000..5e821fe --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1 = { + sizeof(struct RICcontrolAcknowledge), + offsetof(struct RICcontrolAcknowledge, _asn_ctx), + asn_MAP_RICcontrolAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge = { + "RICcontrolAcknowledge", + "RICcontrolAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolAcknowledge_tags_1, + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolAcknowledge_tags_1) + /sizeof(asn_DEF_RICcontrolAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.h new file mode 100644 index 0000000..34c81b3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolAcknowledge_H_ +#define _RICcontrolAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolAcknowledge */ +typedef struct RICcontrolAcknowledge { + ProtocolIE_Container_1527P8_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.c new file mode 100644 index 0000000..76b0bdc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolFailure.h" + +asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P9, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1 = { + sizeof(struct RICcontrolFailure), + offsetof(struct RICcontrolFailure, _asn_ctx), + asn_MAP_RICcontrolFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure = { + "RICcontrolFailure", + "RICcontrolFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolFailure_tags_1, + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolFailure_tags_1) + /sizeof(asn_DEF_RICcontrolFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolFailure_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.h new file mode 100644 index 0000000..7a28d41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolFailure_H_ +#define _RICcontrolFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolFailure */ +typedef struct RICcontrolFailure { + ProtocolIE_Container_1527P9_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.c new file mode 100644 index 0000000..c79d335 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader = { + "RICcontrolHeader", + "RICcontrolHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolHeader_tags_1, + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolHeader_tags_1) + /sizeof(asn_DEF_RICcontrolHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.h new file mode 100644 index 0000000..2301656 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolHeader.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolHeader_H_ +#define _RICcontrolHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolHeader */ +typedef OCTET_STRING_t RICcontrolHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolHeader; +asn_struct_free_f RICcontrolHeader_free; +asn_struct_print_f RICcontrolHeader_print; +asn_constr_check_f RICcontrolHeader_constraint; +ber_type_decoder_f RICcontrolHeader_decode_ber; +der_type_encoder_f RICcontrolHeader_encode_der; +xer_type_decoder_f RICcontrolHeader_decode_xer; +xer_type_encoder_f RICcontrolHeader_encode_xer; +oer_type_decoder_f RICcontrolHeader_decode_oer; +oer_type_encoder_f RICcontrolHeader_encode_oer; +per_type_decoder_f RICcontrolHeader_decode_uper; +per_type_encoder_f RICcontrolHeader_encode_uper; +per_type_decoder_f RICcontrolHeader_decode_aper; +per_type_encoder_f RICcontrolHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.c new file mode 100644 index 0000000..9004d22 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage = { + "RICcontrolMessage", + "RICcontrolMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolMessage_tags_1, + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolMessage_tags_1) + /sizeof(asn_DEF_RICcontrolMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.h new file mode 100644 index 0000000..a501aaf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolMessage.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolMessage_H_ +#define _RICcontrolMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolMessage */ +typedef OCTET_STRING_t RICcontrolMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolMessage; +asn_struct_free_f RICcontrolMessage_free; +asn_struct_print_f RICcontrolMessage_print; +asn_constr_check_f RICcontrolMessage_constraint; +ber_type_decoder_f RICcontrolMessage_decode_ber; +der_type_encoder_f RICcontrolMessage_encode_der; +xer_type_decoder_f RICcontrolMessage_decode_xer; +xer_type_encoder_f RICcontrolMessage_encode_xer; +oer_type_decoder_f RICcontrolMessage_decode_oer; +oer_type_encoder_f RICcontrolMessage_encode_oer; +per_type_decoder_f RICcontrolMessage_decode_uper; +per_type_encoder_f RICcontrolMessage_encode_uper; +per_type_decoder_f RICcontrolMessage_decode_aper; +per_type_encoder_f RICcontrolMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.c new file mode 100644 index 0000000..36934f5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolOutcome.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICcontrolOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome = { + "RICcontrolOutcome", + "RICcontrolOutcome", + &asn_OP_OCTET_STRING, + asn_DEF_RICcontrolOutcome_tags_1, + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolOutcome_tags_1) + /sizeof(asn_DEF_RICcontrolOutcome_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.h new file mode 100644 index 0000000..fa6bcd8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolOutcome.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolOutcome_H_ +#define _RICcontrolOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolOutcome */ +typedef OCTET_STRING_t RICcontrolOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolOutcome; +asn_struct_free_f RICcontrolOutcome_free; +asn_struct_print_f RICcontrolOutcome_print; +asn_constr_check_f RICcontrolOutcome_constraint; +ber_type_decoder_f RICcontrolOutcome_decode_ber; +der_type_encoder_f RICcontrolOutcome_encode_der; +xer_type_decoder_f RICcontrolOutcome_decode_xer; +xer_type_encoder_f RICcontrolOutcome_encode_xer; +oer_type_decoder_f RICcontrolOutcome_decode_oer; +oer_type_encoder_f RICcontrolOutcome_encode_oer; +per_type_decoder_f RICcontrolOutcome_decode_uper; +per_type_encoder_f RICcontrolOutcome_encode_uper; +per_type_decoder_f RICcontrolOutcome_decode_aper; +per_type_encoder_f RICcontrolOutcome_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.c new file mode 100644 index 0000000..c5ccbff --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolRequest.h" + +asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICcontrolRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P7, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICcontrolRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1 = { + sizeof(struct RICcontrolRequest), + offsetof(struct RICcontrolRequest, _asn_ctx), + asn_MAP_RICcontrolRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest = { + "RICcontrolRequest", + "RICcontrolRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICcontrolRequest_tags_1, + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolRequest_tags_1) + /sizeof(asn_DEF_RICcontrolRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICcontrolRequest_1, + 1, /* Elements count */ + &asn_SPC_RICcontrolRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.h new file mode 100644 index 0000000..7bed8f2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolRequest_H_ +#define _RICcontrolRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICcontrolRequest */ +typedef struct RICcontrolRequest { + ProtocolIE_Container_1527P7_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICcontrolRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICcontrolRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICcontrolRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.c new file mode 100644 index 0000000..9b183a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICcontrolStatus.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICcontrolStatus_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICcontrolStatus_value2enum_1[] = { + { 0, 7, "success" }, + { 1, 8, "rejected" }, + { 2, 6, "failed" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICcontrolStatus_enum2value_1[] = { + 2, /* failed(2) */ + 1, /* rejected(1) */ + 0 /* success(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICcontrolStatus_specs_1 = { + asn_MAP_RICcontrolStatus_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICcontrolStatus_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICcontrolStatus_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus = { + "RICcontrolStatus", + "RICcontrolStatus", + &asn_OP_NativeEnumerated, + asn_DEF_RICcontrolStatus_tags_1, + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + asn_DEF_RICcontrolStatus_tags_1, /* Same as above */ + sizeof(asn_DEF_RICcontrolStatus_tags_1) + /sizeof(asn_DEF_RICcontrolStatus_tags_1[0]), /* 1 */ + { &asn_OER_type_RICcontrolStatus_constr_1, &asn_PER_type_RICcontrolStatus_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICcontrolStatus_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.h new file mode 100644 index 0000000..54474e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICcontrolStatus.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICcontrolStatus_H_ +#define _RICcontrolStatus_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICcontrolStatus { + RICcontrolStatus_success = 0, + RICcontrolStatus_rejected = 1, + RICcontrolStatus_failed = 2 + /* + * Enumeration is extensible + */ +} e_RICcontrolStatus; + +/* RICcontrolStatus */ +typedef long RICcontrolStatus_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICcontrolStatus; +asn_struct_free_f RICcontrolStatus_free; +asn_struct_print_f RICcontrolStatus_print; +asn_constr_check_f RICcontrolStatus_constraint; +ber_type_decoder_f RICcontrolStatus_decode_ber; +der_type_encoder_f RICcontrolStatus_encode_der; +xer_type_decoder_f RICcontrolStatus_decode_xer; +xer_type_encoder_f RICcontrolStatus_encode_xer; +oer_type_decoder_f RICcontrolStatus_decode_oer; +oer_type_encoder_f RICcontrolStatus_encode_oer; +per_type_decoder_f RICcontrolStatus_decode_uper; +per_type_encoder_f RICcontrolStatus_encode_uper; +per_type_decoder_f RICcontrolStatus_decode_aper; +per_type_encoder_f RICcontrolStatus_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICcontrolStatus_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.c new file mode 100644 index 0000000..ecf7fc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICeventTriggerDefinition.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICeventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition = { + "RICeventTriggerDefinition", + "RICeventTriggerDefinition", + &asn_OP_OCTET_STRING, + asn_DEF_RICeventTriggerDefinition_tags_1, + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_RICeventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_RICeventTriggerDefinition_tags_1) + /sizeof(asn_DEF_RICeventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.h new file mode 100644 index 0000000..b9c63f6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICeventTriggerDefinition.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICeventTriggerDefinition_H_ +#define _RICeventTriggerDefinition_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICeventTriggerDefinition */ +typedef OCTET_STRING_t RICeventTriggerDefinition_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICeventTriggerDefinition; +asn_struct_free_f RICeventTriggerDefinition_free; +asn_struct_print_f RICeventTriggerDefinition_print; +asn_constr_check_f RICeventTriggerDefinition_constraint; +ber_type_decoder_f RICeventTriggerDefinition_decode_ber; +der_type_encoder_f RICeventTriggerDefinition_encode_der; +xer_type_decoder_f RICeventTriggerDefinition_decode_xer; +xer_type_encoder_f RICeventTriggerDefinition_encode_xer; +oer_type_decoder_f RICeventTriggerDefinition_decode_oer; +oer_type_encoder_f RICeventTriggerDefinition_encode_oer; +per_type_decoder_f RICeventTriggerDefinition_decode_uper; +per_type_encoder_f RICeventTriggerDefinition_encode_uper; +per_type_decoder_f RICeventTriggerDefinition_decode_aper; +per_type_encoder_f RICeventTriggerDefinition_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICeventTriggerDefinition_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.c new file mode 100644 index 0000000..acadb86 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindication.h" + +asn_TYPE_member_t asn_MBR_RICindication_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICindication, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P6, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICindication_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICindication_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1 = { + sizeof(struct RICindication), + offsetof(struct RICindication, _asn_ctx), + asn_MAP_RICindication_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICindication = { + "RICindication", + "RICindication", + &asn_OP_SEQUENCE, + asn_DEF_RICindication_tags_1, + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + asn_DEF_RICindication_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindication_tags_1) + /sizeof(asn_DEF_RICindication_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICindication_1, + 1, /* Elements count */ + &asn_SPC_RICindication_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.h new file mode 100644 index 0000000..c6a89bf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindication.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindication_H_ +#define _RICindication_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindication */ +typedef struct RICindication { + ProtocolIE_Container_1527P6_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICindication_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindication; +extern asn_SEQUENCE_specifics_t asn_SPC_RICindication_specs_1; +extern asn_TYPE_member_t asn_MBR_RICindication_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindication_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.c new file mode 100644 index 0000000..64e4144 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationHeader.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationHeader = { + "RICindicationHeader", + "RICindicationHeader", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationHeader_tags_1, + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + asn_DEF_RICindicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationHeader_tags_1) + /sizeof(asn_DEF_RICindicationHeader_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.h new file mode 100644 index 0000000..d6655e1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationHeader.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationHeader_H_ +#define _RICindicationHeader_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationHeader */ +typedef OCTET_STRING_t RICindicationHeader_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationHeader; +asn_struct_free_f RICindicationHeader_free; +asn_struct_print_f RICindicationHeader_print; +asn_constr_check_f RICindicationHeader_constraint; +ber_type_decoder_f RICindicationHeader_decode_ber; +der_type_encoder_f RICindicationHeader_encode_der; +xer_type_decoder_f RICindicationHeader_decode_xer; +xer_type_encoder_f RICindicationHeader_encode_xer; +oer_type_decoder_f RICindicationHeader_decode_oer; +oer_type_encoder_f RICindicationHeader_encode_oer; +per_type_decoder_f RICindicationHeader_decode_uper; +per_type_encoder_f RICindicationHeader_encode_uper; +per_type_decoder_f RICindicationHeader_decode_aper; +per_type_encoder_f RICindicationHeader_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationHeader_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.c new file mode 100644 index 0000000..cea2831 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.c @@ -0,0 +1,31 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationMessage.h" + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static const ber_tlv_tag_t asn_DEF_RICindicationMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationMessage = { + "RICindicationMessage", + "RICindicationMessage", + &asn_OP_OCTET_STRING, + asn_DEF_RICindicationMessage_tags_1, + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + asn_DEF_RICindicationMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationMessage_tags_1) + /sizeof(asn_DEF_RICindicationMessage_tags_1[0]), /* 1 */ + { 0, 0, OCTET_STRING_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.h new file mode 100644 index 0000000..5d8ee52 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationMessage.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationMessage_H_ +#define _RICindicationMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationMessage */ +typedef OCTET_STRING_t RICindicationMessage_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationMessage; +asn_struct_free_f RICindicationMessage_free; +asn_struct_print_f RICindicationMessage_print; +asn_constr_check_f RICindicationMessage_constraint; +ber_type_decoder_f RICindicationMessage_decode_ber; +der_type_encoder_f RICindicationMessage_encode_der; +xer_type_decoder_f RICindicationMessage_decode_xer; +xer_type_encoder_f RICindicationMessage_encode_xer; +oer_type_decoder_f RICindicationMessage_decode_oer; +oer_type_encoder_f RICindicationMessage_encode_oer; +per_type_decoder_f RICindicationMessage_decode_uper; +per_type_encoder_f RICindicationMessage_encode_uper; +per_type_decoder_f RICindicationMessage_decode_aper; +per_type_encoder_f RICindicationMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.c new file mode 100644 index 0000000..453d308 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationSN.h" + +int +RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_type_RICindicationSN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RICindicationSN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationSN = { + "RICindicationSN", + "RICindicationSN", + &asn_OP_NativeInteger, + asn_DEF_RICindicationSN_tags_1, + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + asn_DEF_RICindicationSN_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationSN_tags_1) + /sizeof(asn_DEF_RICindicationSN_tags_1[0]), /* 1 */ + { &asn_OER_type_RICindicationSN_constr_1, &asn_PER_type_RICindicationSN_constr_1, RICindicationSN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.h new file mode 100644 index 0000000..f286d17 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationSN.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationSN_H_ +#define _RICindicationSN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICindicationSN */ +typedef long RICindicationSN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationSN; +asn_struct_free_f RICindicationSN_free; +asn_struct_print_f RICindicationSN_print; +asn_constr_check_f RICindicationSN_constraint; +ber_type_decoder_f RICindicationSN_decode_ber; +der_type_encoder_f RICindicationSN_encode_der; +xer_type_decoder_f RICindicationSN_decode_xer; +xer_type_encoder_f RICindicationSN_encode_xer; +oer_type_decoder_f RICindicationSN_decode_oer; +oer_type_encoder_f RICindicationSN_encode_oer; +per_type_decoder_f RICindicationSN_decode_uper; +per_type_encoder_f RICindicationSN_encode_uper; +per_type_decoder_f RICindicationSN_decode_aper; +per_type_encoder_f RICindicationSN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationSN_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.c new file mode 100644 index 0000000..8297a1e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICindicationType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICindicationType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_RICindicationType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICindicationType_value2enum_1[] = { + { 0, 6, "report" }, + { 1, 6, "insert" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICindicationType_enum2value_1[] = { + 1, /* insert(1) */ + 0 /* report(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_RICindicationType_specs_1 = { + asn_MAP_RICindicationType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICindicationType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICindicationType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICindicationType = { + "RICindicationType", + "RICindicationType", + &asn_OP_NativeEnumerated, + asn_DEF_RICindicationType_tags_1, + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + asn_DEF_RICindicationType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICindicationType_tags_1) + /sizeof(asn_DEF_RICindicationType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICindicationType_constr_1, &asn_PER_type_RICindicationType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICindicationType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.h new file mode 100644 index 0000000..769ece8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICindicationType.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICindicationType_H_ +#define _RICindicationType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICindicationType { + RICindicationType_report = 0, + RICindicationType_insert = 1 + /* + * Enumeration is extensible + */ +} e_RICindicationType; + +/* RICindicationType */ +typedef long RICindicationType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICindicationType; +asn_struct_free_f RICindicationType_free; +asn_struct_print_f RICindicationType_print; +asn_constr_check_f RICindicationType_constraint; +ber_type_decoder_f RICindicationType_decode_ber; +der_type_encoder_f RICindicationType_encode_der; +xer_type_decoder_f RICindicationType_decode_xer; +xer_type_encoder_f RICindicationType_encode_xer; +oer_type_decoder_f RICindicationType_decode_oer; +oer_type_encoder_f RICindicationType_encode_oer; +per_type_decoder_f RICindicationType_decode_uper; +per_type_encoder_f RICindicationType_encode_uper; +per_type_decoder_f RICindicationType_decode_aper; +per_type_encoder_f RICindicationType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICindicationType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.c new file mode 100644 index 0000000..dd83fcd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.c @@ -0,0 +1,126 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICrequestID.h" + +static int +memb_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ricInstanceID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ricRequestorID_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; +static asn_per_constraints_t asn_PER_memb_ricInstanceID_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_RICrequestID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricRequestorID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ricRequestorID_constr_2, &asn_PER_memb_ricRequestorID_constr_2, memb_ricRequestorID_constraint_1 }, + 0, 0, /* No default value */ + "ricRequestorID" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICrequestID, ricInstanceID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { &asn_OER_memb_ricInstanceID_constr_3, &asn_PER_memb_ricInstanceID_constr_3, memb_ricInstanceID_constraint_1 }, + 0, 0, /* No default value */ + "ricInstanceID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICrequestID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICrequestID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricInstanceID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1 = { + sizeof(struct RICrequestID), + offsetof(struct RICrequestID, _asn_ctx), + asn_MAP_RICrequestID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICrequestID = { + "RICrequestID", + "RICrequestID", + &asn_OP_SEQUENCE, + asn_DEF_RICrequestID_tags_1, + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + asn_DEF_RICrequestID_tags_1, /* Same as above */ + sizeof(asn_DEF_RICrequestID_tags_1) + /sizeof(asn_DEF_RICrequestID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICrequestID_1, + 2, /* Elements count */ + &asn_SPC_RICrequestID_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.h new file mode 100644 index 0000000..25749c0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICrequestID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICrequestID_H_ +#define _RICrequestID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICrequestID */ +typedef struct RICrequestID { + long ricRequestorID; + long ricInstanceID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICrequestID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICrequestID; +extern asn_SEQUENCE_specifics_t asn_SPC_RICrequestID_specs_1; +extern asn_TYPE_member_t asn_MBR_RICrequestID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICrequestID_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.c new file mode 100644 index 0000000..325f270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceQuery.h" + +asn_TYPE_member_t asn_MBR_RICserviceQuery_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceQuery, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P19, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceQuery_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceQuery_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1 = { + sizeof(struct RICserviceQuery), + offsetof(struct RICserviceQuery, _asn_ctx), + asn_MAP_RICserviceQuery_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceQuery = { + "RICserviceQuery", + "RICserviceQuery", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceQuery_tags_1, + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + asn_DEF_RICserviceQuery_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceQuery_tags_1) + /sizeof(asn_DEF_RICserviceQuery_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceQuery_1, + 1, /* Elements count */ + &asn_SPC_RICserviceQuery_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.h new file mode 100644 index 0000000..d15d587 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceQuery.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceQuery_H_ +#define _RICserviceQuery_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceQuery */ +typedef struct RICserviceQuery { + ProtocolIE_Container_1527P19_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceQuery_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceQuery; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceQuery_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceQuery_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceQuery_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.c new file mode 100644 index 0000000..86f3600 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdate.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdate, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdate_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdate_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1 = { + sizeof(struct RICserviceUpdate), + offsetof(struct RICserviceUpdate, _asn_ctx), + asn_MAP_RICserviceUpdate_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate = { + "RICserviceUpdate", + "RICserviceUpdate", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdate_tags_1, + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdate_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdate_tags_1) + /sizeof(asn_DEF_RICserviceUpdate_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdate_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdate_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.h new file mode 100644 index 0000000..50bbff7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdate.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdate_H_ +#define _RICserviceUpdate_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdate */ +typedef struct RICserviceUpdate { + ProtocolIE_Container_1527P16_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdate_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdate; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdate_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdate_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdate_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c new file mode 100644 index 0000000..875bb38 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdateAcknowledge.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateAcknowledge, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateAcknowledge_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateAcknowledge_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1 = { + sizeof(struct RICserviceUpdateAcknowledge), + offsetof(struct RICserviceUpdateAcknowledge, _asn_ctx), + asn_MAP_RICserviceUpdateAcknowledge_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge = { + "RICserviceUpdateAcknowledge", + "RICserviceUpdateAcknowledge", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateAcknowledge_tags_1, + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateAcknowledge_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1) + /sizeof(asn_DEF_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateAcknowledge_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateAcknowledge_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h new file mode 100644 index 0000000..a50b20d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateAcknowledge.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdateAcknowledge_H_ +#define _RICserviceUpdateAcknowledge_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateAcknowledge */ +typedef struct RICserviceUpdateAcknowledge { + ProtocolIE_Container_1527P17_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateAcknowledge_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateAcknowledge; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateAcknowledge_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateAcknowledge_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateAcknowledge_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.c new file mode 100644 index 0000000..369d521 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICserviceUpdateFailure.h" + +asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICserviceUpdateFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P18, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICserviceUpdateFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICserviceUpdateFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1 = { + sizeof(struct RICserviceUpdateFailure), + offsetof(struct RICserviceUpdateFailure, _asn_ctx), + asn_MAP_RICserviceUpdateFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure = { + "RICserviceUpdateFailure", + "RICserviceUpdateFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICserviceUpdateFailure_tags_1, + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + asn_DEF_RICserviceUpdateFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICserviceUpdateFailure_tags_1) + /sizeof(asn_DEF_RICserviceUpdateFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICserviceUpdateFailure_1, + 1, /* Elements count */ + &asn_SPC_RICserviceUpdateFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.h new file mode 100644 index 0000000..eb38105 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICserviceUpdateFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICserviceUpdateFailure_H_ +#define _RICserviceUpdateFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICserviceUpdateFailure */ +typedef struct RICserviceUpdateFailure { + ProtocolIE_Container_1527P18_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICserviceUpdateFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICserviceUpdateFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICserviceUpdateFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICserviceUpdateFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICserviceUpdateFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c new file mode 100644 index 0000000..0f7c74f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1 = { + sizeof(struct RICsubscriptionDeleteFailure), + offsetof(struct RICsubscriptionDeleteFailure, _asn_ctx), + asn_MAP_RICsubscriptionDeleteFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure = { + "RICsubscriptionDeleteFailure", + "RICsubscriptionDeleteFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h new file mode 100644 index 0000000..352ad75 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteFailure_H_ +#define _RICsubscriptionDeleteFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteFailure */ +typedef struct RICsubscriptionDeleteFailure { + ProtocolIE_Container_1527P5_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c new file mode 100644 index 0000000..c584cc1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1 = { + sizeof(struct RICsubscriptionDeleteRequest), + offsetof(struct RICsubscriptionDeleteRequest, _asn_ctx), + asn_MAP_RICsubscriptionDeleteRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest = { + "RICsubscriptionDeleteRequest", + "RICsubscriptionDeleteRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h new file mode 100644 index 0000000..12b34f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteRequest_H_ +#define _RICsubscriptionDeleteRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteRequest */ +typedef struct RICsubscriptionDeleteRequest { + ProtocolIE_Container_1527P3_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c new file mode 100644 index 0000000..105b324 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDeleteResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDeleteResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P4, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDeleteResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDeleteResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1 = { + sizeof(struct RICsubscriptionDeleteResponse), + offsetof(struct RICsubscriptionDeleteResponse, _asn_ctx), + asn_MAP_RICsubscriptionDeleteResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse = { + "RICsubscriptionDeleteResponse", + "RICsubscriptionDeleteResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDeleteResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDeleteResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDeleteResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionDeleteResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h new file mode 100644 index 0000000..654a420 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDeleteResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDeleteResponse_H_ +#define _RICsubscriptionDeleteResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDeleteResponse */ +typedef struct RICsubscriptionDeleteResponse { + ProtocolIE_Container_1527P4_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDeleteResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDeleteResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDeleteResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionDeleteResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDeleteResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.c new file mode 100644 index 0000000..a1d91a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionDetails.h" + +static asn_TYPE_member_t asn_MBR_RICsubscriptionDetails_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricEventTriggerDefinition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICeventTriggerDefinition, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricEventTriggerDefinition" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionDetails, ricAction_ToBeSetup_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICactions_ToBeSetup_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricAction-ToBeSetup-List" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionDetails_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionDetails_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionDetails_specs_1 = { + sizeof(struct RICsubscriptionDetails), + offsetof(struct RICsubscriptionDetails, _asn_ctx), + asn_MAP_RICsubscriptionDetails_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails = { + "RICsubscriptionDetails", + "RICsubscriptionDetails", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionDetails_tags_1, + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionDetails_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionDetails_tags_1) + /sizeof(asn_DEF_RICsubscriptionDetails_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionDetails_1, + 2, /* Elements count */ + &asn_SPC_RICsubscriptionDetails_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.h new file mode 100644 index 0000000..c16b877 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionDetails.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionDetails_H_ +#define _RICsubscriptionDetails_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICeventTriggerDefinition.h" +#include "RICactions-ToBeSetup-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionDetails */ +typedef struct RICsubscriptionDetails { + RICeventTriggerDefinition_t ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t ricAction_ToBeSetup_List; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionDetails_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionDetails; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionDetails_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.c new file mode 100644 index 0000000..b206576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionFailure.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionFailure, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1 = { + sizeof(struct RICsubscriptionFailure), + offsetof(struct RICsubscriptionFailure, _asn_ctx), + asn_MAP_RICsubscriptionFailure_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure = { + "RICsubscriptionFailure", + "RICsubscriptionFailure", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionFailure_tags_1, + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionFailure_tags_1) + /sizeof(asn_DEF_RICsubscriptionFailure_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionFailure_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionFailure_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.h new file mode 100644 index 0000000..6ff580b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionFailure.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionFailure_H_ +#define _RICsubscriptionFailure_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionFailure */ +typedef struct RICsubscriptionFailure { + ProtocolIE_Container_1527P2_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionFailure; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionFailure_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionFailure_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionFailure_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.c new file mode 100644 index 0000000..754c2d7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionRequest.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P0, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1 = { + sizeof(struct RICsubscriptionRequest), + offsetof(struct RICsubscriptionRequest, _asn_ctx), + asn_MAP_RICsubscriptionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest = { + "RICsubscriptionRequest", + "RICsubscriptionRequest", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionRequest_tags_1, + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionRequest_tags_1) + /sizeof(asn_DEF_RICsubscriptionRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionRequest_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.h new file mode 100644 index 0000000..2baa323 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionRequest_H_ +#define _RICsubscriptionRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionRequest */ +typedef struct RICsubscriptionRequest { + ProtocolIE_Container_1527P0_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.c new file mode 100644 index 0000000..a9088f3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubscriptionResponse.h" + +asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubscriptionResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubscriptionResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubscriptionResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1 = { + sizeof(struct RICsubscriptionResponse), + offsetof(struct RICsubscriptionResponse, _asn_ctx), + asn_MAP_RICsubscriptionResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse = { + "RICsubscriptionResponse", + "RICsubscriptionResponse", + &asn_OP_SEQUENCE, + asn_DEF_RICsubscriptionResponse_tags_1, + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + asn_DEF_RICsubscriptionResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubscriptionResponse_tags_1) + /sizeof(asn_DEF_RICsubscriptionResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubscriptionResponse_1, + 1, /* Elements count */ + &asn_SPC_RICsubscriptionResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.h new file mode 100644 index 0000000..24f30de --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubscriptionResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubscriptionResponse_H_ +#define _RICsubscriptionResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubscriptionResponse */ +typedef struct RICsubscriptionResponse { + ProtocolIE_Container_1527P1_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubscriptionResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubscriptionResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubscriptionResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubscriptionResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubscriptionResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.c new file mode 100644 index 0000000..431301b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubsequentAction.h" + +asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricSubsequentActionType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICsubsequentActionType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricSubsequentActionType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RICsubsequentAction, ricTimeToWait), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RICtimeToWait, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ricTimeToWait" + }, +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentAction_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RICsubsequentAction_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1 = { + sizeof(struct RICsubsequentAction), + offsetof(struct RICsubsequentAction, _asn_ctx), + asn_MAP_RICsubsequentAction_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction = { + "RICsubsequentAction", + "RICsubsequentAction", + &asn_OP_SEQUENCE, + asn_DEF_RICsubsequentAction_tags_1, + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentAction_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentAction_tags_1) + /sizeof(asn_DEF_RICsubsequentAction_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RICsubsequentAction_1, + 2, /* Elements count */ + &asn_SPC_RICsubsequentAction_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.h new file mode 100644 index 0000000..b4f4837 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentAction.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubsequentAction_H_ +#define _RICsubsequentAction_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RICsubsequentActionType.h" +#include "RICtimeToWait.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RICsubsequentAction */ +typedef struct RICsubsequentAction { + RICsubsequentActionType_t ricSubsequentActionType; + RICtimeToWait_t ricTimeToWait; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RICsubsequentAction_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentAction; +extern asn_SEQUENCE_specifics_t asn_SPC_RICsubsequentAction_specs_1; +extern asn_TYPE_member_t asn_MBR_RICsubsequentAction_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentAction_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.c new file mode 100644 index 0000000..fb10ee0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICsubsequentActionType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICsubsequentActionType_value2enum_1[] = { + { 0, 8, "continue" }, + { 1, 4, "wait" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICsubsequentActionType_enum2value_1[] = { + 0, /* continue(0) */ + 1 /* wait(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1 = { + asn_MAP_RICsubsequentActionType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICsubsequentActionType_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICsubsequentActionType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType = { + "RICsubsequentActionType", + "RICsubsequentActionType", + &asn_OP_NativeEnumerated, + asn_DEF_RICsubsequentActionType_tags_1, + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + asn_DEF_RICsubsequentActionType_tags_1, /* Same as above */ + sizeof(asn_DEF_RICsubsequentActionType_tags_1) + /sizeof(asn_DEF_RICsubsequentActionType_tags_1[0]), /* 1 */ + { &asn_OER_type_RICsubsequentActionType_constr_1, &asn_PER_type_RICsubsequentActionType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICsubsequentActionType_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.h new file mode 100644 index 0000000..1397029 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICsubsequentActionType.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICsubsequentActionType_H_ +#define _RICsubsequentActionType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICsubsequentActionType { + RICsubsequentActionType_continue = 0, + RICsubsequentActionType_wait = 1 + /* + * Enumeration is extensible + */ +} e_RICsubsequentActionType; + +/* RICsubsequentActionType */ +typedef long RICsubsequentActionType_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICsubsequentActionType_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICsubsequentActionType; +extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1; +asn_struct_free_f RICsubsequentActionType_free; +asn_struct_print_f RICsubsequentActionType_print; +asn_constr_check_f RICsubsequentActionType_constraint; +ber_type_decoder_f RICsubsequentActionType_decode_ber; +der_type_encoder_f RICsubsequentActionType_encode_der; +xer_type_decoder_f RICsubsequentActionType_decode_xer; +xer_type_encoder_f RICsubsequentActionType_encode_xer; +oer_type_decoder_f RICsubsequentActionType_decode_oer; +oer_type_encoder_f RICsubsequentActionType_encode_oer; +per_type_decoder_f RICsubsequentActionType_decode_uper; +per_type_encoder_f RICsubsequentActionType_encode_uper; +per_type_decoder_f RICsubsequentActionType_decode_aper; +per_type_encoder_f RICsubsequentActionType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICsubsequentActionType_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.c new file mode 100644 index 0000000..866c010 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.c @@ -0,0 +1,90 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "RICtimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 17 } /* (0..17,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RICtimeToWait_value2enum_1[] = { + { 0, 4, "zero" }, + { 1, 4, "w1ms" }, + { 2, 4, "w2ms" }, + { 3, 4, "w5ms" }, + { 4, 5, "w10ms" }, + { 5, 5, "w20ms" }, + { 6, 5, "w30ms" }, + { 7, 5, "w40ms" }, + { 8, 5, "w50ms" }, + { 9, 6, "w100ms" }, + { 10, 6, "w200ms" }, + { 11, 6, "w500ms" }, + { 12, 3, "w1s" }, + { 13, 3, "w2s" }, + { 14, 3, "w5s" }, + { 15, 4, "w10s" }, + { 16, 4, "w20s" }, + { 17, 4, "w60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RICtimeToWait_enum2value_1[] = { + 9, /* w100ms(9) */ + 4, /* w10ms(4) */ + 15, /* w10s(15) */ + 1, /* w1ms(1) */ + 12, /* w1s(12) */ + 10, /* w200ms(10) */ + 5, /* w20ms(5) */ + 16, /* w20s(16) */ + 2, /* w2ms(2) */ + 13, /* w2s(13) */ + 6, /* w30ms(6) */ + 7, /* w40ms(7) */ + 11, /* w500ms(11) */ + 8, /* w50ms(8) */ + 3, /* w5ms(3) */ + 14, /* w5s(14) */ + 17, /* w60s(17) */ + 0 /* zero(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1 = { + asn_MAP_RICtimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RICtimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 18, /* Number of elements in the maps */ + 19, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RICtimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RICtimeToWait = { + "RICtimeToWait", + "RICtimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_RICtimeToWait_tags_1, + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + asn_DEF_RICtimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_RICtimeToWait_tags_1) + /sizeof(asn_DEF_RICtimeToWait_tags_1[0]), /* 1 */ + { &asn_OER_type_RICtimeToWait_constr_1, &asn_PER_type_RICtimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RICtimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.h new file mode 100644 index 0000000..ac9cd3b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/RICtimeToWait.h @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _RICtimeToWait_H_ +#define _RICtimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RICtimeToWait { + RICtimeToWait_zero = 0, + RICtimeToWait_w1ms = 1, + RICtimeToWait_w2ms = 2, + RICtimeToWait_w5ms = 3, + RICtimeToWait_w10ms = 4, + RICtimeToWait_w20ms = 5, + RICtimeToWait_w30ms = 6, + RICtimeToWait_w40ms = 7, + RICtimeToWait_w50ms = 8, + RICtimeToWait_w100ms = 9, + RICtimeToWait_w200ms = 10, + RICtimeToWait_w500ms = 11, + RICtimeToWait_w1s = 12, + RICtimeToWait_w2s = 13, + RICtimeToWait_w5s = 14, + RICtimeToWait_w10s = 15, + RICtimeToWait_w20s = 16, + RICtimeToWait_w60s = 17 + /* + * Enumeration is extensible + */ +} e_RICtimeToWait; + +/* RICtimeToWait */ +typedef long RICtimeToWait_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RICtimeToWait_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RICtimeToWait; +extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1; +asn_struct_free_f RICtimeToWait_free; +asn_struct_print_f RICtimeToWait_print; +asn_constr_check_f RICtimeToWait_constraint; +ber_type_decoder_f RICtimeToWait_decode_ber; +der_type_encoder_f RICtimeToWait_encode_der; +xer_type_decoder_f RICtimeToWait_decode_xer; +xer_type_encoder_f RICtimeToWait_encode_xer; +oer_type_decoder_f RICtimeToWait_decode_oer; +oer_type_encoder_f RICtimeToWait_encode_oer; +per_type_decoder_f RICtimeToWait_decode_uper; +per_type_encoder_f RICtimeToWait_encode_uper; +per_type_decoder_f RICtimeToWait_decode_aper; +per_type_encoder_f RICtimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RICtimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.c new file mode 100644 index 0000000..8d2dc82 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ResetRequest.h" + +asn_TYPE_member_t asn_MBR_ResetRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetRequest, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1 = { + sizeof(struct ResetRequest), + offsetof(struct ResetRequest, _asn_ctx), + asn_MAP_ResetRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetRequest = { + "ResetRequest", + "ResetRequest", + &asn_OP_SEQUENCE, + asn_DEF_ResetRequest_tags_1, + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + asn_DEF_ResetRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetRequest_tags_1) + /sizeof(asn_DEF_ResetRequest_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetRequest_1, + 1, /* Elements count */ + &asn_SPC_ResetRequest_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.h new file mode 100644 index 0000000..f92e0ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ResetRequest_H_ +#define _ResetRequest_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetRequest */ +typedef struct ResetRequest { + ProtocolIE_Container_1527P14_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetRequest_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.c new file mode 100644 index 0000000..30f6ed9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "ResetResponse.h" + +asn_TYPE_member_t asn_MBR_ResetResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ResetResponse, protocolIEs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProtocolIE_Container_1527P15, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "protocolIEs" + }, +}; +static const ber_tlv_tag_t asn_DEF_ResetResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ResetResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */ +}; +asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1 = { + sizeof(struct ResetResponse), + offsetof(struct ResetResponse, _asn_ctx), + asn_MAP_ResetResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_ResetResponse = { + "ResetResponse", + "ResetResponse", + &asn_OP_SEQUENCE, + asn_DEF_ResetResponse_tags_1, + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + asn_DEF_ResetResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_ResetResponse_tags_1) + /sizeof(asn_DEF_ResetResponse_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_ResetResponse_1, + 1, /* Elements count */ + &asn_SPC_ResetResponse_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.h new file mode 100644 index 0000000..139b953 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ResetResponse.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Contents" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _ResetResponse_H_ +#define _ResetResponse_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProtocolIE-Container.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ResetResponse */ +typedef struct ResetResponse { + ProtocolIE_Container_1527P15_t protocolIEs; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ResetResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ResetResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_ResetResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_ResetResponse_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ResetResponse_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.c new file mode 100644 index 0000000..1fbef5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.c @@ -0,0 +1,368 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "SuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_SuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 1; /* &SuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.RICcontrolAcknowledge), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolAcknowledge, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolAcknowledge" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.E2setupResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome__value, choice.ResetResponse), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ResetResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ResetResponse" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdateAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolAcknowledge */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* E2setupResponse */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* ResetResponse */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct SuccessfulOutcome__value), + offsetof(struct SuccessfulOutcome__value, _asn_ctx), + offsetof(struct SuccessfulOutcome__value, present), + sizeof(((struct SuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 6, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 6, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_SuccessfulOutcome_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_SuccessfulOutcome_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_SuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1 = { + sizeof(struct SuccessfulOutcome), + offsetof(struct SuccessfulOutcome, _asn_ctx), + asn_MAP_SuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome = { + "SuccessfulOutcome", + "SuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_SuccessfulOutcome_tags_1, + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_SuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_SuccessfulOutcome_tags_1) + /sizeof(asn_DEF_SuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_SuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.h new file mode 100644 index 0000000..5df655a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/SuccessfulOutcome.h @@ -0,0 +1,91 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _SuccessfulOutcome_H_ +#define _SuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SuccessfulOutcome__value_PR { + SuccessfulOutcome__value_PR_NOTHING, /* No components present */ + SuccessfulOutcome__value_PR_RICsubscriptionResponse, + SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse, + SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge, + SuccessfulOutcome__value_PR_RICcontrolAcknowledge, + SuccessfulOutcome__value_PR_E2setupResponse, + SuccessfulOutcome__value_PR_ResetResponse +} SuccessfulOutcome__value_PR; + +/* SuccessfulOutcome */ +typedef struct SuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct SuccessfulOutcome__value { + SuccessfulOutcome__value_PR present; + union SuccessfulOutcome__value_u { + RICsubscriptionResponse_t RICsubscriptionResponse; + RICsubscriptionDeleteResponse_t RICsubscriptionDeleteResponse; + RICserviceUpdateAcknowledge_t RICserviceUpdateAcknowledge; + RICcontrolAcknowledge_t RICcontrolAcknowledge; + E2setupResponse_t E2setupResponse; + ResetResponse_t ResetResponse; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_SuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_SuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.c new file mode 100644 index 0000000..ad3c27c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.c @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TimeToWait.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TimeToWait_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_TimeToWait_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TimeToWait_value2enum_1[] = { + { 0, 3, "v1s" }, + { 1, 3, "v2s" }, + { 2, 3, "v5s" }, + { 3, 4, "v10s" }, + { 4, 4, "v20s" }, + { 5, 4, "v60s" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TimeToWait_enum2value_1[] = { + 3, /* v10s(3) */ + 0, /* v1s(0) */ + 4, /* v20s(4) */ + 1, /* v2s(1) */ + 2, /* v5s(2) */ + 5 /* v60s(5) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_TimeToWait_specs_1 = { + asn_MAP_TimeToWait_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToWait_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TimeToWait_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToWait = { + "TimeToWait", + "TimeToWait", + &asn_OP_NativeEnumerated, + asn_DEF_TimeToWait_tags_1, + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + asn_DEF_TimeToWait_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToWait_tags_1) + /sizeof(asn_DEF_TimeToWait_tags_1[0]), /* 1 */ + { &asn_OER_type_TimeToWait_constr_1, &asn_PER_type_TimeToWait_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToWait_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.h new file mode 100644 index 0000000..7c06018 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TimeToWait.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TimeToWait_H_ +#define _TimeToWait_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToWait { + TimeToWait_v1s = 0, + TimeToWait_v2s = 1, + TimeToWait_v5s = 2, + TimeToWait_v10s = 3, + TimeToWait_v20s = 4, + TimeToWait_v60s = 5 + /* + * Enumeration is extensible + */ +} e_TimeToWait; + +/* TimeToWait */ +typedef long TimeToWait_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToWait; +asn_struct_free_f TimeToWait_free; +asn_struct_print_f TimeToWait_print; +asn_constr_check_f TimeToWait_constraint; +ber_type_decoder_f TimeToWait_decode_ber; +der_type_encoder_f TimeToWait_encode_der; +xer_type_decoder_f TimeToWait_decode_xer; +xer_type_encoder_f TimeToWait_encode_xer; +oer_type_decoder_f TimeToWait_decode_oer; +oer_type_encoder_f TimeToWait_encode_oer; +per_type_decoder_f TimeToWait_decode_uper; +per_type_encoder_f TimeToWait_encode_uper; +per_type_decoder_f TimeToWait_decode_aper; +per_type_encoder_f TimeToWait_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToWait_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.c new file mode 100644 index 0000000..fb10f3c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TriggeringMessage.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TriggeringMessage_value2enum_1[] = { + { 0, 18, "initiating-message" }, + { 1, 18, "successful-outcome" }, + { 2, 21, "unsuccessfull-outcome" } +}; +static const unsigned int asn_MAP_TriggeringMessage_enum2value_1[] = { + 0, /* initiating-message(0) */ + 1, /* successful-outcome(1) */ + 2 /* unsuccessfull-outcome(2) */ +}; +const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1 = { + asn_MAP_TriggeringMessage_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TriggeringMessage_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TriggeringMessage_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TriggeringMessage = { + "TriggeringMessage", + "TriggeringMessage", + &asn_OP_NativeEnumerated, + asn_DEF_TriggeringMessage_tags_1, + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + asn_DEF_TriggeringMessage_tags_1, /* Same as above */ + sizeof(asn_DEF_TriggeringMessage_tags_1) + /sizeof(asn_DEF_TriggeringMessage_tags_1[0]), /* 1 */ + { &asn_OER_type_TriggeringMessage_constr_1, &asn_PER_type_TriggeringMessage_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TriggeringMessage_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.h new file mode 100644 index 0000000..51bb220 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TriggeringMessage.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-CommonDataTypes" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TriggeringMessage_H_ +#define _TriggeringMessage_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TriggeringMessage { + TriggeringMessage_initiating_message = 0, + TriggeringMessage_successful_outcome = 1, + TriggeringMessage_unsuccessfull_outcome = 2 +} e_TriggeringMessage; + +/* TriggeringMessage */ +typedef long TriggeringMessage_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TriggeringMessage_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TriggeringMessage; +extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1; +asn_struct_free_f TriggeringMessage_free; +asn_struct_print_f TriggeringMessage_print; +asn_constr_check_f TriggeringMessage_constraint; +ber_type_decoder_f TriggeringMessage_decode_ber; +der_type_encoder_f TriggeringMessage_encode_der; +xer_type_decoder_f TriggeringMessage_decode_xer; +xer_type_encoder_f TriggeringMessage_encode_xer; +oer_type_decoder_f TriggeringMessage_decode_oer; +oer_type_encoder_f TriggeringMessage_encode_oer; +per_type_decoder_f TriggeringMessage_decode_uper; +per_type_encoder_f TriggeringMessage_encode_uper; +per_type_decoder_f TriggeringMessage_decode_aper; +per_type_encoder_f TriggeringMessage_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TriggeringMessage_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.c new file mode 100644 index 0000000..6b4f37e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "TypeOfError.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_oer_constraints_t asn_OER_type_TypeOfError_constr_1 CC_NOTUSED = { + { 0, 0 }, + -1}; +asn_per_constraints_t asn_PER_type_TypeOfError_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TypeOfError_value2enum_1[] = { + { 0, 14, "not-understood" }, + { 1, 7, "missing" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TypeOfError_enum2value_1[] = { + 1, /* missing(1) */ + 0 /* not-understood(0) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1 = { + asn_MAP_TypeOfError_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TypeOfError_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TypeOfError_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TypeOfError = { + "TypeOfError", + "TypeOfError", + &asn_OP_NativeEnumerated, + asn_DEF_TypeOfError_tags_1, + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + asn_DEF_TypeOfError_tags_1, /* Same as above */ + sizeof(asn_DEF_TypeOfError_tags_1) + /sizeof(asn_DEF_TypeOfError_tags_1[0]), /* 1 */ + { &asn_OER_type_TypeOfError_constr_1, &asn_PER_type_TypeOfError_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TypeOfError_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.h new file mode 100644 index 0000000..7dee671 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/TypeOfError.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-IEs" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _TypeOfError_H_ +#define _TypeOfError_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TypeOfError { + TypeOfError_not_understood = 0, + TypeOfError_missing = 1 + /* + * Enumeration is extensible + */ +} e_TypeOfError; + +/* TypeOfError */ +typedef long TypeOfError_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TypeOfError_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TypeOfError; +extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1; +asn_struct_free_f TypeOfError_free; +asn_struct_print_f TypeOfError_print; +asn_constr_check_f TypeOfError_constraint; +ber_type_decoder_f TypeOfError_decode_ber; +der_type_encoder_f TypeOfError_encode_der; +xer_type_decoder_f TypeOfError_decode_xer; +xer_type_encoder_f TypeOfError_encode_xer; +oer_type_decoder_f TypeOfError_decode_oer; +oer_type_encoder_f TypeOfError_encode_oer; +per_type_decoder_f TypeOfError_decode_uper; +per_type_encoder_f TypeOfError_encode_uper; +per_type_decoder_f TypeOfError_decode_aper; +per_type_encoder_f TypeOfError_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TypeOfError_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.c new file mode 100644 index 0000000..7cd5cd5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.c @@ -0,0 +1,358 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#include "UnsuccessfulOutcome.h" + +static const long asn_VAL_1_id_RICsubscription = 8; +static const long asn_VAL_1_reject = 0; +static const long asn_VAL_2_id_RICsubscriptionDelete = 9; +static const long asn_VAL_2_reject = 0; +static const long asn_VAL_3_id_RICserviceUpdate = 7; +static const long asn_VAL_3_reject = 0; +static const long asn_VAL_4_id_RICcontrol = 4; +static const long asn_VAL_4_reject = 0; +static const long asn_VAL_5_id_E2setup = 1; +static const long asn_VAL_5_reject = 0; +static const long asn_VAL_6_id_Reset = 3; +static const long asn_VAL_6_reject = 0; +static const long asn_VAL_7_id_RICindication = 5; +static const long asn_VAL_7_ignore = 1; +static const long asn_VAL_8_id_RICserviceQuery = 6; +static const long asn_VAL_8_ignore = 1; +static const long asn_VAL_9_id_ErrorIndication = 2; +static const long asn_VAL_9_ignore = 1; +static const asn_ioc_cell_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = { + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_RICsubscription }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICsubscriptionDeleteRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICsubscriptionDeleteFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_2_id_RICsubscriptionDelete }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_2_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceUpdate }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICserviceUpdateFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_3_id_RICserviceUpdate }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_3_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICcontrolRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolAcknowledge }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_RICcontrolFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_4_id_RICcontrol }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_4_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_E2setupRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_E2setupResponse }, + { "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2setupFailure }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_5_id_E2setup }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_5_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ResetRequest }, + { "&SuccessfulOutcome", aioc__type, &asn_DEF_ResetResponse }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_6_id_Reset }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_6_reject }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICindication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_7_id_RICindication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_7_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_RICserviceQuery }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_8_id_RICserviceQuery }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_8_ignore }, + { "&InitiatingMessage", aioc__type, &asn_DEF_ErrorIndication }, + { "&SuccessfulOutcome", }, + { "&UnsuccessfulOutcome", }, + { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_9_id_ErrorIndication }, + { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_9_ignore } +}; +static const asn_ioc_set_t asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1[] = { + { 9, 5, asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1_rows } +}; +static int +memb_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 4; /* &criticality */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_UnsuccessfulOutcome_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_E2AP_ELEMENTARY_PROCEDURES_1; + size_t constraining_column = 3; /* &procedureCode */ + size_t for_column = 2; /* &UnsuccessfulOutcome */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct UnsuccessfulOutcome, procedureCode)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_oer_constraints_t asn_OER_memb_procedureCode_constr_2 CC_NOTUSED = { + { 1, 1 } /* (0..255) */, + -1}; +static asn_per_constraints_t asn_PER_memb_procedureCode_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_criticality_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_criticality_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_memb_value_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_value_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICsubscriptionDeleteFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICsubscriptionDeleteFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICserviceUpdateFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICserviceUpdateFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.RICcontrolFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RICcontrolFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "RICcontrolFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome__value, choice.E2setupFailure), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_E2setupFailure, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "E2setupFailure" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* RICsubscriptionFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* RICsubscriptionDeleteFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* RICserviceUpdateFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* RICcontrolFailure */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* E2setupFailure */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = { + sizeof(struct UnsuccessfulOutcome__value), + offsetof(struct UnsuccessfulOutcome__value, _asn_ctx), + offsetof(struct UnsuccessfulOutcome__value, present), + sizeof(((struct UnsuccessfulOutcome__value *)0)->present), + asn_MAP_value_tag2el_4, + 5, /* Count of tags in the map */ + 0, 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_value_4 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_4, + 5, /* Elements count */ + &asn_SPC_value_specs_4 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, procedureCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProcedureCode, + 0, + { &asn_OER_memb_procedureCode_constr_2, &asn_PER_memb_procedureCode_constr_2, memb_procedureCode_constraint_1 }, + 0, 0, /* No default value */ + "procedureCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, criticality), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Criticality, + select_UnsuccessfulOutcome_criticality_type, + { &asn_OER_memb_criticality_constr_3, &asn_PER_memb_criticality_constr_3, memb_criticality_constraint_1 }, + 0, 0, /* No default value */ + "criticality" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct UnsuccessfulOutcome, value), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_value_4, + select_UnsuccessfulOutcome_value_type, + { &asn_OER_memb_value_constr_4, &asn_PER_memb_value_constr_4, memb_value_constraint_1 }, + 0, 0, /* No default value */ + "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_UnsuccessfulOutcome_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UnsuccessfulOutcome_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1 = { + sizeof(struct UnsuccessfulOutcome), + offsetof(struct UnsuccessfulOutcome, _asn_ctx), + asn_MAP_UnsuccessfulOutcome_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome = { + "UnsuccessfulOutcome", + "UnsuccessfulOutcome", + &asn_OP_SEQUENCE, + asn_DEF_UnsuccessfulOutcome_tags_1, + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + asn_DEF_UnsuccessfulOutcome_tags_1, /* Same as above */ + sizeof(asn_DEF_UnsuccessfulOutcome_tags_1) + /sizeof(asn_DEF_UnsuccessfulOutcome_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UnsuccessfulOutcome_1, + 3, /* Elements count */ + &asn_SPC_UnsuccessfulOutcome_specs_1 /* Additional specs */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.h new file mode 100644 index 0000000..0a1cb1a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/UnsuccessfulOutcome.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2AP-PDU-Descriptions" + * found in "/root/e2ap-v01.00.00.asn" + * `asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D .` + */ + +#ifndef _UnsuccessfulOutcome_H_ +#define _UnsuccessfulOutcome_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ProcedureCode.h" +#include "Criticality.h" +#include "ANY.h" +#include "asn_ioc.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "RICsubscriptionFailure.h" +#include "RICsubscriptionDeleteRequest.h" +#include "RICsubscriptionDeleteResponse.h" +#include "RICsubscriptionDeleteFailure.h" +#include "RICserviceUpdate.h" +#include "RICserviceUpdateAcknowledge.h" +#include "RICserviceUpdateFailure.h" +#include "RICcontrolRequest.h" +#include "RICcontrolAcknowledge.h" +#include "RICcontrolFailure.h" +#include "E2setupRequest.h" +#include "E2setupResponse.h" +#include "E2setupFailure.h" +#include "ResetRequest.h" +#include "ResetResponse.h" +#include "RICindication.h" +#include "RICserviceQuery.h" +#include "ErrorIndication.h" +#include "OPEN_TYPE.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UnsuccessfulOutcome__value_PR { + UnsuccessfulOutcome__value_PR_NOTHING, /* No components present */ + UnsuccessfulOutcome__value_PR_RICsubscriptionFailure, + UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure, + UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure, + UnsuccessfulOutcome__value_PR_RICcontrolFailure, + UnsuccessfulOutcome__value_PR_E2setupFailure +} UnsuccessfulOutcome__value_PR; + +/* UnsuccessfulOutcome */ +typedef struct UnsuccessfulOutcome { + ProcedureCode_t procedureCode; + Criticality_t criticality; + struct UnsuccessfulOutcome__value { + UnsuccessfulOutcome__value_PR present; + union UnsuccessfulOutcome__value_u { + RICsubscriptionFailure_t RICsubscriptionFailure; + RICsubscriptionDeleteFailure_t RICsubscriptionDeleteFailure; + RICserviceUpdateFailure_t RICserviceUpdateFailure; + RICcontrolFailure_t RICcontrolFailure; + E2setupFailure_t E2setupFailure; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UnsuccessfulOutcome_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UnsuccessfulOutcome; +extern asn_SEQUENCE_specifics_t asn_SPC_UnsuccessfulOutcome_specs_1; +extern asn_TYPE_member_t asn_MBR_UnsuccessfulOutcome_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UnsuccessfulOutcome_H_ */ +#include "asn_internal.h" diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.h new file mode 100644 index 0000000..e35bc44 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.c new file mode 100644 index 0000000..944f2cb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.h new file mode 100644 index 0000000..882e1a4 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_SET_OF.h @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(decltype(*array)); \ + } +#else /* C */ +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.c new file mode 100644 index 0000000..2bff460 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.c @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_app_consume_bytes_f *callback, + void *callback_key); + + +struct callback_count_bytes_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + size_t computed_size; +}; + +/* + * Encoder which just counts bytes that come through it. + */ +static int +callback_count_bytes_cb(const void *data, size_t size, void *keyp) { + struct callback_count_bytes_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret >= 0) { + key->computed_size += size; + } + + return ret; +} + +struct overrun_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct dynamic_encoder_key { + void *buffer; + size_t buffer_size; + size_t computed_size; +}; + +struct callback_failure_catch_key { + asn_app_consume_bytes_f *callback; + void *callback_key; + int callback_failed; +}; + +/* + * Encoder which doesn't stop counting bytes + * even if it reaches the end of the buffer. + */ +static int +overrun_encoder_cb(const void *data, size_t size, void *keyp) { + struct overrun_encoder_key *key = keyp; + + if(key->computed_size + size > key->buffer_size) { + /* + * Avoid accident on the next call: + * stop adding bytes to the buffer. + */ + key->buffer_size = 0; + } else { + memcpy((char *)key->buffer + key->computed_size, data, size); + } + key->computed_size += size; + + return 0; +} + +/* + * Encoder which dynamically allocates output, and continues + * to count even if allocation failed. + */ +static int +dynamic_encoder_cb(const void *data, size_t size, void *keyp) { + struct dynamic_encoder_key *key = keyp; + + if(key->buffer) { + if(key->computed_size + size >= key->buffer_size) { + void *p; + size_t new_size = key->buffer_size; + + do { + new_size *= 2; + } while(new_size <= key->computed_size + size); + + p = REALLOC(key->buffer, new_size); + if(p) { + key->buffer = p; + key->buffer_size = new_size; + } else { + FREEMEM(key->buffer); + key->buffer = 0; + key->buffer_size = 0; + key->computed_size += size; + return 0; + } + } + memcpy((char *)key->buffer + key->computed_size, data, size); + } + + key->computed_size += size; + + return 0; +} + +/* + * Encoder which help convert the application level encoder failure into EIO. + */ +static int +callback_failure_catch_cb(const void *data, size_t size, void *keyp) { + struct callback_failure_catch_key *key = keyp; + int ret; + + ret = key->callback(data, size, key->callback_key); + if(ret < 0) { + key->callback_failed = 1; + } + + return ret; +} + +asn_enc_rval_t +asn_encode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) { + struct callback_failure_catch_key cb_key; + asn_enc_rval_t er = {0,0,0}; + + if(!callback) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.callback_failed = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + callback_failure_catch_cb, &cb_key); + if(cb_key.callback_failed) { + assert(er.encoded == -1); + assert(errno == EBADF); + errno = EIO; + } + + return er; +} + +asn_enc_rval_t +asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + void *buffer, size_t buffer_size) { + struct overrun_encoder_key buf_key; + asn_enc_rval_t er = {0,0,0}; + + if(buffer_size > 0 && !buffer) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + buf_key.buffer = buffer; + buf_key.buffer_size = buffer_size; + buf_key.computed_size = 0; + + er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + overrun_encoder_cb, &buf_key); + + if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + er.encoded, buf_key.computed_size); + assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size); + } + + return er; +} + +asn_encode_to_new_buffer_result_t +asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr) { + struct dynamic_encoder_key buf_key; + asn_encode_to_new_buffer_result_t res; + + buf_key.buffer_size = 16; + buf_key.buffer = MALLOC(buf_key.buffer_size); + buf_key.computed_size = 0; + + res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr, + dynamic_encoder_cb, &buf_key); + + if(res.result.encoded >= 0 + && (size_t)res.result.encoded != buf_key.computed_size) { + ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE + " yet produced %" ASN_PRI_SIZE " bytes", + res.result.encoded, buf_key.computed_size); + assert(res.result.encoded < 0 + || (size_t)res.result.encoded == buf_key.computed_size); + } + + res.buffer = buf_key.buffer; + + /* 0-terminate just in case. */ + if(res.buffer) { + assert(buf_key.computed_size < buf_key.buffer_size); + ((char *)res.buffer)[buf_key.computed_size] = '\0'; + } + + return res; +} + +static asn_enc_rval_t +asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, + const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *callback, void *callback_key) { + asn_enc_rval_t er = {0,0,0}; + enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL; + + (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */ + + if(!td || !sptr) { + errno = EINVAL; + ASN__ENCODE_FAILED; + } + + switch(syntax) { + case ATS_NONSTANDARD_PLAINTEXT: + if(td->op->print_struct) { + struct callback_count_bytes_key cb_key; + cb_key.callback = callback; + cb_key.callback_key = callback_key; + cb_key.computed_size = 0; + if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb, + &cb_key) + < 0 + || callback_count_bytes_cb("\n", 1, &cb_key) < 0) { + errno = EBADF; /* Structure has incorrect form. */ + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; + } else { + er.encoded = cb_key.computed_size; + er.failed_type = 0; + er.structure_ptr = 0; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + case ATS_RANDOM: + errno = ENOENT; /* Randomization doesn't make sense on output. */ + ASN__ENCODE_FAILED; + + case ATS_BER: + /* BER is a superset of DER. */ + /* Fall through. */ + case ATS_DER: + if(td->op->der_encoder) { + er = der_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->der_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* DER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_CER: + errno = ENOENT; /* Transfer syntax is not defined for any type. */ + ASN__ENCODE_FAILED; + +#ifdef ASN_DISABLE_OER_SUPPORT + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_OER_SUPPORT */ + case ATS_BASIC_OER: + /* CANONICAL-OER is a superset of BASIC-OER. */ + /* Fall through. */ + case ATS_CANONICAL_OER: + if(td->op->oer_encoder) { + er = oer_encode(td, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->oer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* OER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifdef ASN_DISABLE_PER_SUPPORT + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: + errno = ENOENT; /* PER is not defined. */ + ASN__ENCODE_FAILED; + break; +#else /* ASN_DISABLE_PER_SUPPORT */ + case ATS_UNALIGNED_BASIC_PER: + /* CANONICAL-UPER is a superset of BASIC-UPER. */ + /* Fall through. */ + case ATS_UNALIGNED_CANONICAL_PER: + if(td->op->uper_encoder) { + er = uper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->uper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* UPER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + case ATS_ALIGNED_BASIC_PER: + /* CANONICAL-APER is a superset of BASIC-APER. */ + /* Fall through. */ + case ATS_ALIGNED_CANONICAL_PER: + if(td->op->aper_encoder) { + er = aper_encode(td, 0, sptr, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->aper_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* APER is not defined for this type. */ + } + } else { + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + if(er.encoded == 0) { + /* Enforce "Complete Encoding" of X.691 #11.1 */ + if(callback("\0", 1, callback_key) < 0) { + errno = EBADF; + ASN__ENCODE_FAILED; + } + er.encoded = 8; /* Exactly 8 zero bits is added. */ + } + /* Convert bits into bytes */ + er.encoded = (er.encoded + 7) >> 3; + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; +#endif /* ASN_DISABLE_PER_SUPPORT */ + + case ATS_BASIC_XER: + /* CANONICAL-XER is a superset of BASIC-XER. */ + xer_flags &= ~XER_F_CANONICAL; + xer_flags |= XER_F_BASIC; + /* Fall through. */ + case ATS_CANONICAL_XER: + if(td->op->xer_encoder) { + er = xer_encode(td, sptr, xer_flags, callback, callback_key); + if(er.encoded == -1) { + if(er.failed_type && er.failed_type->op->xer_encoder) { + errno = EBADF; /* Structure has incorrect form. */ + } else { + errno = ENOENT; /* XER is not defined for this type. */ + } + } + } else { + errno = ENOENT; /* Transfer syntax is not defined for this type. */ + ASN__ENCODE_FAILED; + } + break; + + default: + errno = ENOENT; + ASN__ENCODE_FAILED; + } + + return er; +} + +asn_dec_rval_t +asn_decode(const asn_codec_ctx_t *opt_codec_ctx, + enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td, + void **sptr, const void *buffer, size_t size) { + if(!td || !td->op || !sptr || (size && !buffer)) { + ASN__DECODE_FAILED; + } + + switch(syntax) { + case ATS_CER: + case ATS_NONSTANDARD_PLAINTEXT: + default: + errno = ENOENT; + ASN__DECODE_FAILED; + + case ATS_RANDOM: + if(!td->op->random_fill) { + ASN__DECODE_FAILED; + } else { + if(asn_random_fill(td, sptr, 16000) == 0) { + asn_dec_rval_t ret = {RC_OK, 0}; + return ret; + } else { + ASN__DECODE_FAILED; + } + } + break; + + case ATS_DER: + case ATS_BER: + return ber_decode(opt_codec_ctx, td, sptr, buffer, size); + + case ATS_BASIC_OER: + case ATS_CANONICAL_OER: +#ifdef ASN_DISABLE_OER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return oer_decode(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_UNALIGNED_BASIC_PER: + case ATS_UNALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_ALIGNED_BASIC_PER: + case ATS_ALIGNED_CANONICAL_PER: +#ifdef ASN_DISABLE_PER_SUPPORT + errno = ENOENT; + ASN__DECODE_FAILED; +#else + return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size); +#endif + + case ATS_BASIC_XER: + case ATS_CANONICAL_XER: + return xer_decode(opt_codec_ctx, td, sptr, buffer, size); + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.h new file mode 100644 index 0000000..034f646 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_application.h @@ -0,0 +1,171 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef ASN_APPLICATION_H +#define ASN_APPLICATION_H + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A selection of ASN.1 Transfer Syntaxes to use with generalized + * encoders and decoders declared further in this .h file. + */ +enum asn_transfer_syntax { + /* Avoid appearance of a default transfer syntax. */ + ATS_INVALID = 0, + /* Plaintext output (not conforming to any standard), for debugging. */ + ATS_NONSTANDARD_PLAINTEXT, + /* Returns a randomly generated structure. */ + ATS_RANDOM, + /* + * X.690: + * BER: Basic Encoding Rules. + * DER: Distinguished Encoding Rules. + * CER: Canonical Encoding Rules. + * DER and CER are more strict variants of BER. + */ + ATS_BER, + ATS_DER, + ATS_CER, /* Only decoding is supported */ + /* + * X.696: + * OER: Octet Encoding Rules. + * CANONICAL-OER is a more strict variant of BASIC-OER. + */ + ATS_BASIC_OER, + ATS_CANONICAL_OER, + /* + * X.691: + * PER: Packed Encoding Rules. + * CANONICAL-PER is a more strict variant of BASIC-PER. + * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1). + */ + ATS_UNALIGNED_BASIC_PER, + ATS_UNALIGNED_CANONICAL_PER, + ATS_ALIGNED_BASIC_PER, + ATS_ALIGNED_CANONICAL_PER, + /* + * X.693: + * XER: XML Encoding Rules. + * CANONICAL-XER is a more strict variant of BASIC-XER. + */ + ATS_BASIC_XER, + ATS_CANONICAL_XER +}; + +/* + * A generic encoder for any supported transfer syntax. + * RETURN VALUES: + * The (.encoded) field of the return value is REDEFINED to mean the following: + * >=0: The computed size of the encoded data. Can exceed the (buffer_size). + * -1: Error encoding the structure. See the error code in (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate + * values at the place of failure, if at all possible. + * WARNING: The (.encoded) field of the return value can exceed the buffer_size. + * This is similar to snprintf(3) contract which might return values + * greater than the buffer size. + */ +asn_enc_rval_t asn_encode_to_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, void *buffer, size_t buffer_size); + +/* + * A variant of asn_encode_to_buffer() with automatically allocated buffer. + * RETURN VALUES: + * On success, returns a newly allocated (.buffer) containing the whole message. + * The message size is returned in (.result.encoded). + * On failure: + * (.buffer) is NULL, + * (.result.encoded) as in asn_encode_to_buffer(), + * The errno codes as in asn_encode_to_buffer(), plus the following: + * ENOMEM: Memory allocation failed due to system or internal limits. + * The user is responsible for freeing the (.buffer). + */ +typedef struct asn_encode_to_new_buffer_result_s { + void *buffer; /* NULL if failed to encode. */ + asn_enc_rval_t result; +} asn_encode_to_new_buffer_result_t; +asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode); + + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + + +/* + * A generic encoder for any supported transfer syntax. + * Returns the comprehensive encoding result descriptor (see asn_codecs.h). + * RETURN VALUES: + * The negative (.encoded) field of the return values is accompanied with the + * following error codes (errno): + * EINVAL: Incorrect parameters to the function, such as NULLs. + * ENOENT: Encoding transfer syntax is not defined (for this type). + * EBADF: The structure has invalid form or content constraint failed. + * EIO: The (callback) has returned negative value during encoding. + */ +asn_enc_rval_t asn_encode( + const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */ + enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_encode, + const void *structure_to_encode, + asn_app_consume_bytes_f *callback, void *callback_key); + + +/* + * A generic decoder for any supported transfer syntax. + */ +asn_dec_rval_t asn_decode( + const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax, + const struct asn_TYPE_descriptor_s *type_to_decode, + void **structure_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + const struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) CC_PRINTFLIKE(4, 5); + + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* ASN_APPLICATION_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.c new file mode 100644 index 0000000..fe4b89b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t * +asn_bit_data_new_contiguous(const void *data, size_t size_bits) { + size_t size_bytes = (size_bits + 7) / 8; + asn_bit_data_t *pd; + uint8_t *bytes; + + /* Get the extensions map */ + pd = CALLOC(1, sizeof(*pd) + size_bytes + 1); + if(!pd) { + return NULL; + } + bytes = (void *)(((char *)pd) + sizeof(*pd)); + memcpy(bytes, data, size_bytes); + bytes[size_bytes] = 0; + pd->buffer = bytes; + pd->nboff = 0; + pd->nbits = size_bits; + + return pd; +} + + +char * +asn_bit_data_string(asn_bit_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf[n]), + "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}", + pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits, + pd->nbits - pd->nboff); + return buf[n]; +} + +void +asn_get_undo(asn_bit_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +asn_get_few_bits(asn_bit_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = asn_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = asn_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_bit_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + asn_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = asn_get_few_bits(&tpd, nbits - 24) << 24; + accum |= asn_get_few_bits(&tpd, 24); + } else { + asn_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + ((pd->buffer != NULL)?pd->buffer[0]:0), + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = asn_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = asn_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = asn_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Put a small number of bits (<= 31). + */ +int +asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, (void *)po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + size_t complete_bytes; + if(!po->buffer) po->buffer = po->tmpspace; + complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1; + if(asn_put_few_bits(po, bits, obits - 24)) return -1; + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(asn_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(asn_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + + +int +asn_put_aligned_flush(asn_bit_outp_t *po) { + uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07))); + size_t complete_bytes = + (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3); + + if(unused_bits) { + po->buffer[po->nboff >> 3] &= ~0u << unused_bits; + } + + if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) { + return -1; + } else { + po->buffer = po->tmpspace; + po->nboff = 0; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + return 0; + } +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.h new file mode 100644 index 0000000..59de7af --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_bit_data.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_BIT_DATA +#define ASN_BIT_DATA + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_bit_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_bit_data_s *); + void *refill_key; +} asn_bit_data_t; + +/* + * Create a contiguous non-refillable bit data structure. + * Can be freed by FREEMEM(). + */ +asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits); + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void asn_get_undo(asn_bit_data_t *, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align, + int get_nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *asn_bit_data_string(asn_bit_data_t *); + +/* + * This structure supports forming bit output. + */ +typedef struct asn_bit_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*output)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (output) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (output) */ +} asn_bit_outp_t; + +/* Output a small number of bits (<= 31) */ +int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits); + +/* Output a large number of bits */ +int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits); + +/* + * Flush whole bytes (0 or more) through (outper) member. + * The least significant bits which are not used are guaranteed to be set to 0. + * Returns -1 if callback returns -1. Otherwise, 0. + */ +int asn_put_aligned_flush(asn_bit_outp_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_BIT_DATA */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs.h new file mode 100644 index 0000000..e75c270 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_H +#define ASN_CODECS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + const struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + const void *structure_ptr; +} asn_enc_rval_t; +#define ASN__ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define ASN__DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define ASN__DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.c new file mode 100644 index 0000000..fc24247 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) ASN__DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + ASN__DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + ASN__DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + ASN__ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t)); + break; + } +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + const asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + size_t struct_size, const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) ASN__DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + ASN__DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + ASN__DECODE_FAILED; + break; + } + return rc; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.h new file mode 100644 index 0000000..fbc5576 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_codecs_prim.h @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + size_t size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( + const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, + size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive( + const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_constant.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_constant.h new file mode 100644 index 0000000..a6f348c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_constant.h @@ -0,0 +1,22 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +#ifndef _ASN_CONSTANT_H +#define _ASN_CONSTANT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define maxProtocolIEs (65535) +#define maxnoofErrors (256) +#define maxofRANfunctionID (256) +#define maxofRICactionID (16) + + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CONSTANT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.c new file mode 100644 index 0000000..1aff95f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.c @@ -0,0 +1,48 @@ +#include + +ssize_t +asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, + const char *fmt, ...) { + char scratch[64]; + char *buf = scratch; + size_t buf_size = sizeof(scratch); + int wrote; + int cb_ret; + + do { + va_list args; + va_start(args, fmt); + + wrote = vsnprintf(buf, buf_size, fmt, args); + if(wrote < (ssize_t)buf_size) { + if(wrote < 0) { + if(buf != scratch) FREEMEM(buf); + va_end(args); + return -1; + } + break; + } + + buf_size <<= 1; + if(buf == scratch) { + buf = MALLOC(buf_size); + if(!buf) return -1; + } else { + void *p = REALLOC(buf, buf_size); + if(!p) { + FREEMEM(buf); + return -1; + } + buf = p; + } + } while(1); + + cb_ret = cb(buf, wrote, key); + if(buf != scratch) FREEMEM(buf); + if(cb_ret < 0) { + return -1; + } + + return wrote; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.h new file mode 100644 index 0000000..c4105ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_internal.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef ASN_INTERNAL_H +#define ASN_INTERNAL_H +#define __EXTENSIONS__ /* for Sun */ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +#ifdef EMIT_ASN_DEBUG +#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG" +#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG +#endif + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */ +#if !defined(BELL_LABS) /* Bell Labs */ + //#if __STDC_VERSION__ >= 199901L +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#if defined(BELL_LABS) /* Bell Labs version */ +extern int logAsn1c(const char *filename, int linenumber, const char *format, ...); +#define ASN_DEBUG(fmt, args...) do { \ + (void) logAsn1c(__FILE__, __LINE__, fmt, ##args); \ + } while(0) +#else +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#endif /* BELL_LABS */ +#else /* !C99 */ +void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* C99 */ +#else /* ASN_EMIT_DEBUG != 1 */ +#if __STDC_VERSION__ >= 199901L +#define ASN_DEBUG(...) do{}while(0) +#else /* not C99 */ +static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* C99 or better */ +#endif /* ASN_EMIT_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Print to a callback. + * The callback is expected to return negative values on error. + * 0 and positive values are treated as success. + * RETURN VALUES: + * -1: Failed to format or invoke the callback. + * >0: Size of the data that got delivered to the callback. + */ +ssize_t CC_PRINTFLIKE(3, 4) +asn__format_to_callback( + int (*callback)(const void *, size_t, void *key), void *key, + const char *fmt, ...); + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define ASN__E_CALLBACK(size, foo) \ + do { \ + if(foo) goto cb_failed; \ + er.encoded += (size); \ + } while(0) +#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size)) +#define ASN__CALLBACK2(buf1, size1, buf2, size2) \ + ASN__E_CALLBACK((size1) + (size2), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) +#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + ASN__E_CALLBACK((size1) + (size2) + (size3), \ + ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \ + || ASN__E_cbc(buf3, size3)) + +#define ASN__TEXT_INDENT(nl, level) \ + do { \ + int tmp_level = (level); \ + int tmp_nl = ((nl) != 0); \ + int tmp_i; \ + if(tmp_nl) ASN__CALLBACK("\n", 1); \ + if(tmp_level < 0) tmp_level = 0; \ + for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \ + } while(0) + +#define _i_INDENT(nl) do { \ + int tmp_i; \ + if((nl) && cb("\n", 1, app_key) < 0) \ + return -1; \ + for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ + if(cb(" ", 4, app_key) < 0) \ + return -1; \ + } while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define ASN__DEFAULT_STACK_MAX (30000) +static int CC_NOTUSED +ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_INTERNAL_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_ioc.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_ioc.h new file mode 100644 index 0000000..7de210e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_ioc.h @@ -0,0 +1,51 @@ +/* + * Run-time support for Information Object Classes. + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_IOC_H +#define ASN_IOC_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; +struct asn_ioc_cell_s; + +/* + * X.681, #13 + */ +typedef struct asn_ioc_set_s { + size_t rows_count; + size_t columns_count; + const struct asn_ioc_cell_s *rows; +} asn_ioc_set_t; + + +typedef struct asn_ioc_cell_s { + const char *field_name; /* Is equal to corresponding column_name */ + enum { + aioc__undefined = 0, + aioc__value, + aioc__type, + aioc__open_type, + } cell_kind; + struct asn_TYPE_descriptor_s *type_descriptor; + const void *value_sptr; + struct { + size_t types_count; + struct { + unsigned choice_position; + } *types; + } open_type; +} asn_ioc_cell_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_IOC_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.c new file mode 100644 index 0000000..819cf70 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +int +asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t length) { + + if(td && td->op->random_fill) { + asn_random_fill_result_t res = + td->op->random_fill(td, struct_ptr, 0, length); + return (res.code == ARFILL_OK) ? 0 : -1; + } else { + return -1; + } +} + +static uintmax_t +asn__intmax_range(intmax_t lb, intmax_t ub) { + assert(lb <= ub); + if((ub < 0) == (lb < 0)) { + return ub - lb; + } else if(lb < 0) { + return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1)); + } else { + assert(!"Unreachable"); + return 0; + } +} + +intmax_t +asn_random_between(intmax_t lb, intmax_t rb) { + if(lb == rb) { + return lb; + } else { + const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1); + uintmax_t range = asn__intmax_range(lb, rb); + uintmax_t value = 0; + uintmax_t got_entropy = 0; + + assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */ + assert(range < intmax_max); + + for(; got_entropy < range;) { + got_entropy = (got_entropy << 24) | 0xffffff; + value = (value << 24) | (random() % 0xffffff); + } + + return lb + (intmax_t)(value % (range + 1)); + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.h new file mode 100644 index 0000000..47f9b8a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_random_fill.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_RANDOM_FILL +#define ASN_RANDOM_FILL + +/* Forward declarations */ +struct asn_TYPE_descriptor_s; +struct asn_encoding_constraints_s; + +/* + * Initialize a structure with random data according to the type specification + * and optional member constraints. + * ARGUMENTS: + * (max_length) - See (approx_max_length_limit). + * (memb_constraints) - Member constraints, if exist. + * The type can be constrained differently according + * to PER and OER specifications, so we find a value + * at the intersection of these constraints. + * In case the return differs from ARFILL_OK, the (struct_ptr) contents + * and (current_length) value remain in their original state. + */ +typedef struct asn_random_fill_result_s { + enum { + ARFILL_FAILED = -1, /* System error (memory?) */ + ARFILL_OK = 0, /* Initialization succeeded */ + ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ + } code; + size_t length; /* Approximate number of bytes created. */ +} asn_random_fill_result_t; +typedef asn_random_fill_result_t(asn_random_fill_f)( + const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + const struct asn_encoding_constraints_s *memb_constraints, + size_t max_length); + +/* + * Returns 0 if the structure was properly initialized, -1 otherwise. + * The (approx_max_length_limit) specifies the approximate limit of the + * resulting structure in units closely resembling bytes. The actual result + * might be several times larger or smaller than the length limit. + */ +int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, + size_t approx_max_length_limit); + +/* + * Returns a random number between min and max. + */ +intmax_t asn_random_between(intmax_t min, intmax_t max); + +#endif /* ASN_RANDOM_FILL */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_system.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_system.h new file mode 100644 index 0000000..fa8cf11 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/asn_system.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef ASN_SYSTEM_H +#define ASN_SYSTEM_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE 1 +#endif + +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for snprintf() on some linux systems */ +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +#if _MSC_VER < 1600 +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#else /* _MSC_VER >= 1600 */ +#include +#endif /* _MSC_VER < 1600 */ +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 || defined(__clang__) +#define CC_ATTRIBUTE(attr) __attribute__((attr)) +#else +#define CC_ATTRIBUTE(attr) +#endif +#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var)) +#define CC_NOTUSED CC_ATTRIBUTE(unused) +#ifndef CC_ATTR_NO_SANITIZE +#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what)) +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#if __STDC_VERSION__ >= 199901L +#ifndef SIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif +#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */ +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif +#else /* Old compiler */ +#undef SIZE_MAX +#undef RSIZE_MAX +#undef RSSIZE_MAX +#define SIZE_MAX ((~((size_t)0)) >> 1) +#define RSIZE_MAX (SIZE_MAX >> 1) +#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1)) +#endif + +#if __STDC_VERSION__ >= 199901L +#define ASN_PRI_SIZE "zu" +#define ASN_PRI_SSIZE "zd" +#define ASN_PRIuMAX PRIuMAX +#define ASN_PRIdMAX PRIdMAX +#else +#define ASN_PRI_SIZE "lu" +#define ASN_PRI_SSIZE "ld" +#if LLONG_MAX > LONG_MAX +#define ASN_PRIuMAX "llu" +#define ASN_PRIdMAX "lld" +#else +#define ASN_PRIuMAX "lu" +#define ASN_PRIdMAX "ld" +#endif +#endif + +#endif /* ASN_SYSTEM_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.c new file mode 100644 index 0000000..75d6016 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == (int)td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < (int)td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < ((int)td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.h new file mode 100644 index 0000000..1ac2a5e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_decoder.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * Decodes BER, DER and CER data (DER and CER are different subsets of BER). + * + * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding + * which is compliant with ber_decode(). + */ +asn_dec_rval_t ber_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ +); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(ber_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const void *buf_ptr, size_t size, int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + const struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.c new file mode 100644 index 0000000..0a0deec --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.c @@ -0,0 +1,168 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + /* Verify that we won't overflow. */ + if(!(len >> ((8 * sizeof(len)) - (8+1)))) { + len = (len << 8) | *buf; + } else { + /* Too large length value. */ + return -1; + } + } + + if(oct == 0) { + if(len < 0 || len > RSSIZE_MAX) { + /* Length value out of sane range. */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + int i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.h new file mode 100644 index 0000000..d1e4d48 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.c new file mode 100644 index 0000000..4a7d732 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + const char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.h new file mode 100644 index 0000000..ce227ad --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.c new file mode 100644 index 0000000..86dcbb0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.c @@ -0,0 +1,1533 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off, + unsigned size); +static void _set_present_idx(void *sptr, unsigned offset, unsigned size, + unsigned pres); +static const void *_get_member_ptr(const asn_TYPE_descriptor_t *, + const void *sptr, asn_TYPE_member_t **elm, + unsigned *present); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval = {0,0,0}; + const void *memb_ptr; + size_t computed_size = 0; + unsigned present; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + ASN__ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + ASN__ENCODED_OK(erval); + } + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + ASN__ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 && present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + unsigned old_present; + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + old_present = _fetch_present_idx(st, + specs->pres_offset, specs->pres_size); + assert(old_present == 0 || old_present == edx + 1); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) { + ASN_DEBUG("CHOICE presence from wire %d", value); + value = specs->from_canonical_order[value]; + ASN_DEBUG("CHOICE presence index effective %d", value); + } + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present == 0 || present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG( + "CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 1, 1)) + ASN__ENCODE_FAILED; + } else { + ASN__ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + if(per_put_few_bits(po, 0, 1)) + ASN__ENCODE_FAILED; + } + + + elm = &td->elements[present]; + ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present, + present_enc); + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) ASN__ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +asn_dec_rval_t +CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + const asn_per_constraint_t *ct; + const asn_per_constraint_t *ext_ct = NULL; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) { + ext_ct = ct; + ct = 0; /* Not restricted */ + } + } + + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + ASN__DECODE_FAILED; + } else { + if(specs->ext_start == -1) + ASN__DECODE_FAILED; + value = aper_get_nsnnwn(pd, ext_ct->range_bits); + if(value < 0) ASN__DECODE_STARVED; + value += specs->ext_start; + if((unsigned)value >= td->elements_count) + ASN__DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->from_canonical_order) + value = specs->from_canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } else { + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm; /* CHOICE's element */ + const asn_per_constraint_t *ct = NULL; + const asn_per_constraint_t *ext_ct = NULL; + const void *memb_ptr; + unsigned present; + int present_enc; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); + + if(constraints) ct = &constraints->value; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->value; + else ct = NULL; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || (unsigned)present > td->elements_count) + ASN__ENCODE_FAILED; + else + present--; + + /* Adjust if canonical order is different from natural order */ + if(specs->to_canonical_order) + present_enc = specs->to_canonical_order[present]; + else + present_enc = present; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + if(ct && (ct->range_bits >= 0)) { + // Value is not within the range of the primary values ? + if(present < ct->lower_bound || present > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)", + present, present_enc, ct->lower_bound, ct->upper_bound); + // X691/23.5 Extension marker = 1 + if(per_put_few_bits(po, 1, 1)) { + ASN__ENCODE_FAILED; + } + } else { + ASN__ENCODE_FAILED; + } + // no more need of constraint. + ext_ct = ct; + ct = NULL; + } + } + + if(ct && (ct->flags & APC_EXTENSIBLE)) { + ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)", + present, present, ct->lower_bound, ct->upper_bound); + // X691.23.5 Extension marker = 0 + if(per_put_few_bits(po, 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const char *)sptr + elm->memb_offset; + } + + if(ct && (ct->range_bits >= 0)) { + // By construction (ct != 0), the alternative value is a non extended one. + // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value. + if(per_put_few_bits(po, present_enc, ct->range_bits)) + ASN__ENCODE_FAILED; + + return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval = {0,0,0}; + if(specs->ext_start == -1) + ASN__ENCODE_FAILED; + // X691/23.8 normally encoded as a small non negative whole number + + if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start)) + ASN__ENCODE_FAILED; + if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, + memb_ptr, po)) + ASN__ENCODE_FAILED; + rval.encoded = 0; + ASN__ENCODED_OK(rval); + } +} + +int +CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->op->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static unsigned +_fetch_present_idx(const void *struct_ptr, unsigned pres_offset, + unsigned pres_size) { + const void *present_ptr; + unsigned present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const unsigned int *)present_ptr; break; + case sizeof(short): present = *(const unsigned short *)present_ptr; break; + case sizeof(char): present = *(const unsigned char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size, + unsigned present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(unsigned int *)present_ptr = present; break; + case sizeof(short): *(unsigned short *)present_ptr = present; break; + case sizeof(char): *(unsigned char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} + +static const void * +_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_TYPE_member_t **elm_ptr, unsigned *present_out) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned present; + + if(!sptr) { + *elm_ptr = NULL; + *present_out = 0; + return NULL; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + *present_out = present; + + /* + * The presence index is intentionally 1-based to avoid + * treating zeroed structure as a valid one. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *const elm = &td->elements[present - 1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + *elm_ptr = elm; + return memb_ptr; + } else { + *elm_ptr = NULL; + return NULL; + } + +} + +int +CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) { + asn_TYPE_member_t *aelm; + asn_TYPE_member_t *belm; + unsigned apresent = 0; + unsigned bpresent = 0; + const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent); + const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent); + + if(amember && bmember) { + if(apresent == bpresent) { + assert(aelm == belm); + return aelm->type->op->compare_struct(aelm->type, amember, bmember); + } else if(apresent < bpresent) { + return -1; + } else { + return 1; + } + } else if(!amember) { + return -1; + } else { + return 1; + } +} + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned +CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); +} + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int +CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr, + unsigned present) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + unsigned old_present; + + if(!sptr) { + return -1; + } + + if(present > td->elements_count) + return -1; + + old_present = + _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); + if(present == old_present) + return 0; + + if(old_present != 0) { + assert(old_present <= td->elements_count); + ASN_STRUCT_RESET(*td, sptr); + } + + _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present); + + return 0; +} + + +asn_random_fill_result_t +CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_random_fill_result_t res; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm; + unsigned present; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + void *st = *sptr; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + present = asn_random_between(1, td->elements_count); + elm = &td->elements[present - 1]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + res = elm->type->op->random_fill(elm->type, memb_ptr2, + &elm->encoding_constraints, max_length); + _set_present_idx(st, specs->pres_offset, specs->pres_size, present); + if(res.code == ARFILL_OK) { + *sptr = st; + } else { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + } + + return res; +} + + +asn_TYPE_operation_t asn_OP_CHOICE = { + CHOICE_free, + CHOICE_print, + CHOICE_compare, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + CHOICE_decode_oer, + CHOICE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_decode_aper, + CHOICE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + CHOICE_random_fill, + CHOICE_outmost_tag +}; diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.h new file mode 100644 index 0000000..a1999ed --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ + unsigned pres_offset; /* Identifier of the present member */ + unsigned pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + const unsigned *to_canonical_order; + const unsigned *from_canonical_order; + + /* + * Extensions-related stuff. + */ + signed ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_struct_compare_f CHOICE_compare; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +oer_type_decoder_f CHOICE_decode_oer; +oer_type_encoder_f CHOICE_encode_oer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +per_type_decoder_f CHOICE_decode_aper; +per_type_encoder_f CHOICE_encode_aper; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_random_fill_f CHOICE_random_fill; +extern asn_TYPE_operation_t asn_OP_CHOICE; + +/* + * Return the 1-based choice variant presence index. + * Returns 0 in case of error. + */ +unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, + const void *structure_ptr); + +/* + * Sets or resets the 1-based choice variant presence index. + * In case a previous index is not zero, the currently selected structure + * member is freed and zeroed-out first. + * Returns 0 on success and -1 on error. + */ +int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, + void *structure_ptr, unsigned present); + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE_oer.c new file mode 100644 index 0000000..a4c591c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_CHOICE_oer.c @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val & 0x3F) != 0x3F) { + /* #8.7.1 */ + *tag_r = ((val & 0x3F) << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + +asn_dec_rval_t +CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + (void)constraints; + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + switch(ctx->phase) { + case 0: { + /* + * Discover the tag. + */ + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + + tag_len = oer_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case 0: + ASN__DECODE_STARVED; + case -1: + ASN__DECODE_FAILED; + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + + t2m = (const asn_TYPE_tag2member_t *)bsearch( + &key, specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG( + "Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip open type extension */ + ASN_DEBUG( + "Not implemented skipping open type extension for tag %s", + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + } while(0); + + + ADVANCE(tag_len); + } + /* Fall through */ + case 1: { + asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_dec_rval_t rval = {0,0}; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Set presence to be able to free it properly at any time */ + (void)CHOICE_variant_set_presence(td, st, ctx->step + 1); + + if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) { + ssize_t got = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + if(got < 0) ASN__DECODE_FAILED; + if(got == 0) ASN__DECODE_STARVED; + rval.code = RC_OK; + rval.consumed = got; + } else { + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + rval.consumed += consumed_myself; + switch(rval.code) { + case RC_OK: + NEXT_PHASE(ctx); + case RC_WMORE: + break; + case RC_FAIL: + SET_PHASE(ctx, 3); /* => 3 */ + } + return rval; + } + case 2: + /* Already decoded everything */ + RETURN(RC_OK); + case 3: + /* Failed to decode, after all */ + RETURN(RC_FAIL); + } + + RETURN(RC_FAIL); +} + +/* + * X.696 (08/2015) #8.7 Encoding of tags + */ +static ssize_t +oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + + if(tval < 0x3F) { + uint8_t b = (uint8_t)((tclass << 6) | tval); + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } else { + uint8_t buf[1 + 2 * sizeof(tval)]; + uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */ + size_t encoded; + for(; ; tval >>= 7) { + if(tval >> 7) { + *b-- = 0x80 | (tval & 0x7f); + } else { + *b-- = tval & 0x7f; + break; + } + } + *b = (uint8_t)((tclass << 6) | 0x3F); + encoded = sizeof(buf) - (b - buf); + if(cb(b, encoded, app_key) < 0) { + return -1; + } + return encoded; + } + +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +CHOICE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + unsigned present; + const void *memb_ptr; + ber_tlv_tag_t tag; + ssize_t tag_len; + asn_enc_rval_t er = {0, 0, 0}; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + ASN_DEBUG("OER %s encoding as CHOICE", td->name); + + present = CHOICE_variant_get_presence(td, sptr); + if(present == 0 || present > td->elements_count) { + ASN_DEBUG("CHOICE %s member is not selected", td->name); + ASN__ENCODE_FAILED; + } + + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + /* Mandatory element absent */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); + if(tag == 0) { + ASN__ENCODE_FAILED; + } + + tag_len = oer_put_tag(tag, cb, app_key); + if(tag_len < 0) { + ASN__ENCODE_FAILED; + } + + if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) { + ssize_t encoded = oer_open_type_put(elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(encoded < 0) ASN__ENCODE_FAILED; + er.encoded = tag_len + encoded; + } else { + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded >= 0) er.encoded += tag_len; + } + + return er; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.c new file mode 100644 index 0000000..43dcac7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.c @@ -0,0 +1,2059 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + size_t opt_edx_end; /* Next non-optional element */ + size_t n; + int use_bsearch; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx))) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx, + elements[edx].optional, td->elements_count); + if((edx + elements[edx].optional == td->elements_count) + || IN_EXTENSION_GROUP(specs, edx)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_ANY_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key = {0, 0, 0, 0}; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + size_t edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + if(elements[edx].flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT); + } else { + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + } + ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval = {0,0,0}; + ssize_t ret; + size_t edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + erval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + ASN__ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) ASN__ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval = {0,0,0}; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) \ + do { \ + size_t num = (num_bytes); \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + if(elm->flags & ATF_OPEN_TYPE) { + tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + ptr, size); + } + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional == td->elements_count) || + /* All extensions are optional */ + IN_EXTENSION_GROUP(specs, edx)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + size_t n; + size_t edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(ptr, ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)ptr)[0]:'.', + size>1?((const char *)ptr)[1]:'.', + size>2?((const char *)ptr)[2]:'.', + size>3?((const char *)ptr)[3]:'.', + size>4?((const char *)ptr)[4]:'.', + size>5?((const char *)ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + int xcan = (flags & XER_F_CANONICAL); + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +} + +int +SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr, + enum asn_struct_free_method method) { + size_t edx; + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_struct_ctx_t *ctx; /* Decoder context */ + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + /* Clean parsing context */ + ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset); + FREEMEM(ctx->ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(sptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset( + sptr, 0, + ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + return elm->type->encoding_constraints.general_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; + edx < (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, + *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + ASN_DEBUG("Skipped overflow extension"); + continue; + } + break; + } + + FREEMEM(epres); + } + + if(specs->first_extension >= 0) { + unsigned i; + /* Fill DEFAULT members in extensions */ + for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count; + i++) { + asn_TYPE_member_t *elm; + void **memb_ptr2; /* Pointer to member pointer */ + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name, + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) { + return -1; + } + /* Encode as open type field */ + if(po2 && present + && uper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, + *memb_ptr2, po2)) + return -1; + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(*memb_ptr2) == 0) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name); + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2, + po); + if(er.encoded == -1) return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of extensions %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + size_t edx; + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); + + /* Handle extensions */ + if(specs->first_extension < 0) { + extpresent = 0; + } else { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) ASN__DECODE_STARVED; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) ASN__DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + ASN__DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ +#if 0 + int padding; +#endif + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } +#if 0 + /* Get Padding */ + padding = (8 - (pd->moved % 8)) % 8; + if(padding > 0) + ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding); +#if 0 /* old way of removing padding */ + per_get_few_bits(pd, padding); +#else /* Experimental fix proposed by @mhanna123 */ + if(edx != (td->elements_count-1)) + per_get_few_bits(pd, padding); + else { + if(specs->roms_count && (padding > 0)) + ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count); + else + per_get_few_bits(pd, padding); + } +#endif /* dealing with padding */ +#endif + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + if(elm->default_value_set(memb_ptr2)) { + FREEMEM(opres); + ASN__DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name); + + if(elm->flags & ATF_OPEN_TYPE) { + rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd); + } else { + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + } + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = aper_get_nslength(pd); + if(bmlength < 0) ASN__DECODE_STARVED; + + ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) ASN__DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + ASN__DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%ld is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = aper_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: + break; + case 0: + continue; + default: + if(aper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + ASN__DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value_set) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value_set(memb_ptr2)) { + ASN__DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td, + const void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + size_t edx; + + if(specs->first_extension < 0) { + return 0; + } + + /* Find out which extensions are present */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%ld) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && aper_open_type_put(elm->type, + elm->encoding_constraints.per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_SEQUENCE_specifics_t *specs + = (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + int n_extensions; + size_t edx; + size_t i; + + (void)constraints; + + if(!sptr) + ASN__ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->first_extension < 0) { + n_extensions = 0; /* There are no extensions to encode */ + } else { + n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0); + if(n_extensions < 0) ASN__ENCODE_FAILED; + if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) { + ASN__ENCODE_FAILED; + } + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value_cmp ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + ASN__ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension, + td->elements_count); + for(edx = 0; + edx < ((specs->first_extension < 0) ? td->elements_count + : (size_t)specs->first_extension); + edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; /* Pointer to the member */ + const void * const *memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %ld not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) ASN__ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(aper_put_nslength(po, n_extensions)) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions) + ASN__ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + if(elm->default_value_cmp + && elm->default_value_cmp(bmemb) == 0) { + /* A is absent, but B is present and equal to DEFAULT */ + continue; + } + return -1; + } else if(!bmemb) { + if(elm->default_value_cmp + && elm->default_value_cmp(amemb) == 0) { + /* B is absent, but A is present and equal to DEFAULT */ + continue; + } + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + +asn_TYPE_operation_t asn_OP_SEQUENCE = { + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_compare, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_decode_oer, + SEQUENCE_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + SEQUENCE_decode_aper, + SEQUENCE_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.h new file mode 100644 index 0000000..a22ed3a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + unsigned roms_count; /* Root optional members count */ + unsigned aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + * Root components are clustered at the beginning of the structure, + * whereas extensions are clustered at the end. -1 means not extensible. + */ + signed first_extension; /* First extension addition */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_struct_compare_f SEQUENCE_compare; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +oer_type_decoder_f SEQUENCE_decode_oer; +oer_type_encoder_f SEQUENCE_encode_oer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; +per_type_decoder_f SEQUENCE_decode_aper; +per_type_encoder_f SEQUENCE_encode_aper; +asn_random_fill_f SEQUENCE_random_fill; +extern asn_TYPE_operation_t asn_OP_SEQUENCE; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.c new file mode 100644 index 0000000..10f18cf --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.c @@ -0,0 +1,358 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval = {0,0,0}; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->op->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + const asn_TYPE_member_t *elm = td->elements; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->uper_encoder( + elm->type, elm->encoding_constraints.per_constraints, memb_ptr, + po); + if(er.encoded == -1) ASN__ENCODE_FAILED; + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + ASN__ENCODED_OK(er); +} + +asn_enc_rval_t +SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const asn_anonymous_sequence_ *list; + const asn_per_constraint_t *ct; + asn_enc_rval_t er = {0,0,0}; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) ASN__ENCODE_FAILED; + list = _A_CSEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + ASN__ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ +/* if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; +*/ + if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) + ASN__ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = aper_put_length(po, -1, list->count - seq); + if(mayEncode < 0) ASN__ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) ASN__ENCODE_FAILED; + er = elm->type->op->aper_encoder(elm->type, + elm->encoding_constraints.per_constraints, memb_ptr, po); + if(er.encoded == -1) + ASN__ENCODE_FAILED; + } + } + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr); + const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr); + ssize_t idx; + + if(a && b) { + ssize_t common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, a->array[idx], b->array[idx]); + if(ret) return ret; + } + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SEQUENCE_OF = { + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_compare, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ + SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */ +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */ + SEQUENCE_OF_encode_uper, + SEQUENCE_OF_decode_aper, + SEQUENCE_OF_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + SEQUENCE_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.h new file mode 100644 index 0000000..6857f0f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_OF.h @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +asn_struct_compare_f SEQUENCE_OF_compare; +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; +per_type_encoder_f SEQUENCE_OF_encode_aper; +extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF; + +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_oer SET_OF_decode_oer +#define SEQUENCE_OF_encode_oer SET_OF_encode_oer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +#define SEQUENCE_OF_decode_aper SET_OF_decode_aper +#define SEQUENCE_OF_random_fill SET_OF_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_oer.c new file mode 100644 index 0000000..ecb589c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SEQUENCE_oer.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ((specs)->first_extension >= 0 \ + && (unsigned)(specs)->first_extension <= (memb_idx)) + +#define IN_ROOT_GROUP_PRED(edx) \ + edx < (specs->first_extension < 0 ? td->elements_count \ + : (size_t)specs->first_extension) + +#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Return pointer to a member. + */ +static void ** +element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return (void **)((char *)struct_ptr + elm->memb_offset); + } else { + assert(tmp_save_ptr); + *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset); + return tmp_save_ptr; + } +} + +static const void * +element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) { + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + return *(const void *const *)((const char *)struct_ptr + + elm->memb_offset); + } else { + return (const void *)((const char *)struct_ptr + elm->memb_offset); + } +} + +asn_dec_rval_t +SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SEQUENCE_specifics_t *specs = + (const asn_SEQUENCE_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch preamble. + */ + asn_bit_data_t *preamble; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + size_t preamble_bytes = ((7 + preamble_bits) >> 3); + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name); + + ASN_DEBUG( + "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)", + preamble_bits, td->name, has_extensions_bit); + + if(preamble_bytes > size) { + ASN__DECODE_STARVED; + } + + preamble = asn_bit_data_new_contiguous(ptr, preamble_bits); + if(!preamble) { + RETURN(RC_FAIL); + } + preamble->nboff = has_extensions_bit; + ctx->ptr = preamble; + ADVANCE(preamble_bytes); + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_bit_data_t *preamble = ctx->ptr; + size_t edx; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name); + + assert(preamble); + + for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx); + edx++, ctx->step = (ctx->step & ~1) + 2) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + ASN_DEBUG("Decoding %s->%s", td->name, elm->name); + + assert(!IN_EXTENSION_GROUP(specs, edx)); + + if(ctx->step & 1) { + goto microphase2_decode_continues; + } + + + if(elm->optional) { + int32_t present = asn_get_few_bits(preamble, 1); + if(present < 0) { + ASN_DEBUG("Presence map ended prematurely: %d", present); + RETURN(RC_FAIL); + } else if(present == 0) { + if(elm->default_value_set) { + /* Fill-in DEFAULT */ + void *tmp; + if(elm->default_value_set( + element_ptrptr(st, elm, &tmp))) { + RETURN(RC_FAIL); + } + } + /* The member is not present. */ + continue; + } + /* Present OPTIONAL or DEFAULT component. */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2_decode_continues: + if(elm->flags & ATF_OPEN_TYPE) { + rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size); + } else { + void *save_memb_ptr; /* Temporary reference. */ + void **memb_ptr2; /* Pointer to a pointer to a memmber */ + + memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr); + + rval = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, memb_ptr2, ptr, + size); + } + switch(rval.code) { + case RC_OK: + ADVANCE(rval.consumed); + break; + case RC_WMORE: + ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name, + elm->name); + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + case RC_FAIL: + ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name, + elm->name); + RETURN(RC_FAIL); + } + } /* for(all root members) */ + + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 2: + assert(ctx->ptr); + { + /* Cleanup preamble. */ + asn_bit_data_t *preamble = ctx->ptr; + asn_bit_data_t *extadds; + int has_extensions_bit = (specs->first_extension >= 0); + int extensions_present = + has_extensions_bit + && (preamble->buffer == NULL + || (((const uint8_t *)preamble->buffer)[0] & 0x80)); + uint8_t unused_bits; + size_t len = 0; + ssize_t len_len; + + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name); + + preamble->buffer = 0; /* Will do extensions_present==1 next time. */ + + if(!extensions_present) { + ctx->phase = 10; + RETURN(RC_OK); + } + + /* + * X.696 (08/2015) #16.1 (c), #16.4 + * Read in the extension addition presence bitmap. + */ + + len_len = oer_fetch_length(ptr, size, &len); + if(len_len > 0) { + ADVANCE(len_len); + } else if(len_len < 0) { + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + + if(len == 0) { + /* 16.4.1-2 */ + RETURN(RC_FAIL); + } else if(len > size) { + RETURN(RC_WMORE); + } + + /* Account for unused bits */ + unused_bits = 0x7 & *(const uint8_t *)ptr; + ADVANCE(1); + len--; + if(unused_bits && len == 0) { + RETURN(RC_FAIL); + } + + /* Get the extensions map */ + extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits); + if(!extadds) { + RETURN(RC_FAIL); + } + FREEMEM(preamble); + ctx->ptr = extadds; + ADVANCE(len); + } + NEXT_PHASE(ctx); + ctx->step = + (specs->first_extension < 0 ? td->elements_count + : (size_t)specs->first_extension); + /* Fall through */ + case 3: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name); + for(; ctx->step < (signed)td->elements_count; ctx->step++) { + asn_bit_data_t *extadds = ctx->ptr; + size_t edx = ctx->step; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *tmp_memb_ptr; + void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr); + + switch(asn_get_few_bits(extadds, 1)) { + case -1: + /* + * Not every one of our extensions is known to the remote side. + * Continue filling in their defaults though. + */ + /* Fall through */ + case 0: + /* Fill-in DEFAULT */ + if(elm->default_value_set + && elm->default_value_set(memb_ptr2)) { + RETURN(RC_FAIL); + } + continue; + case 1: { + /* Read OER open type */ + ssize_t ot_size = + oer_open_type_get(opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, + memb_ptr2, ptr, size); + assert(ot_size <= (ssize_t)size); + if(ot_size > 0) { + ADVANCE(ot_size); + } else if(ot_size < 0) { + RETURN(RC_FAIL); + } else { + /* Roll back open type parsing */ + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + break; + } + default: + RETURN(RC_FAIL); + } + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 4: + ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name); + /* Read in the rest of Open Types while ignoring them */ + for(;;) { + asn_bit_data_t *extadds = ctx->ptr; + switch(asn_get_few_bits(extadds, 1)) { + case 0: + continue; + case 1: { + ssize_t skipped = oer_open_type_skip(ptr, size); + if(skipped > 0) { + ADVANCE(skipped); + } else if(skipped < 0) { + RETURN(RC_FAIL); + } else { + asn_get_undo(extadds, 1); + RETURN(RC_WMORE); + } + continue; + } + case -1: + /* No more Open Type encoded components */ + break; + default: + RETURN(RC_FAIL); + } + break; + } + } + + RETURN(RC_OK); +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics; + size_t computed_size = 0; + int has_extensions_bit = (specs->first_extension >= 0); + size_t preamble_bits = (has_extensions_bit + specs->roms_count); + uint32_t has_extensions = 0; + size_t edx; + int ret; + + (void)constraints; + + if(preamble_bits) { + asn_bit_outp_t preamble; + + memset(&preamble, 0, sizeof(preamble)); + preamble.output = cb; + preamble.op_key = app_key; + + if(has_extensions_bit) { + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default values in extensions */ + } else { + has_extensions = 1; + break; + } + } + } + ret = asn_put_few_bits(&preamble, has_extensions, 1); + assert(ret == 0); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + + /* + * Encode optional components bitmap. + */ + if(specs->roms_count) { + FOR_IN_ROOT_GROUP(edx) { + asn_TYPE_member_t *elm = &td->elements[edx]; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + if(elm->optional) { + const void *memb_ptr = element_ptr(sptr, elm); + uint32_t has_component = memb_ptr != NULL; + if(has_component && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + has_component = 0; + } + ret = asn_put_few_bits(&preamble, has_component, 1); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + } + } + } + + asn_put_aligned_flush(&preamble); + computed_size += preamble.flushed_bytes; + } /* if(preamble_bits) */ + + /* + * Put root components and extensions root. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t er = {0,0,0}; + const void *memb_ptr; + + if(IN_EXTENSION_GROUP(specs, edx)) break; + + memb_ptr = element_ptr(sptr, elm); + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Skip default values in encoding */ + continue; + } + } else { + if(elm->optional) continue; + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + if(!elm->type->op->oer_encoder) { + ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name); + ASN__ENCODE_FAILED; + } + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded == -1) { + ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name, + elm->name); + return er; + } + computed_size += er.encoded; + } + + /* + * Before encode extensions, encode extensions additions presense bitmap + # X.696 (08/2015) #16.4. + */ + if(has_extensions) { + asn_bit_outp_t extadds; + + /* Special case allowing us to use exactly one byte for #8.6 */ + size_t aoms_length_bits = specs->aoms_count; + size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3; + uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07)); + + assert(1 + aoms_length_bytes <= 127); + + memset(&extadds, 0, sizeof(extadds)); + extadds.output = cb; + extadds.op_key = app_key; + + /* #8.6 length determinant */ + ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Number of unused bytes, #16.4.2 */ + ret = asn_put_few_bits(&extadds, unused_bits, 8); + if(ret < 0) ASN__ENCODE_FAILED; + + /* Encode presence bitmap #16.4.3 */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + if(memb_ptr && elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + memb_ptr = 0; /* Do not encode default value. */ + } + ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1); + } + if(ret < 0) ASN__ENCODE_FAILED; + + asn_put_aligned_flush(&extadds); + computed_size += extadds.flushed_bytes; + + /* Now, encode extensions */ + for(edx = specs->first_extension; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr = element_ptr(sptr, elm); + + if(memb_ptr) { + if(elm->default_value_cmp + && elm->default_value_cmp(memb_ptr) == 0) { + /* Do not encode default value. */ + } else { + ssize_t wrote = oer_open_type_put( + elm->type, elm->encoding_constraints.oer_constraints, + memb_ptr, cb, app_key); + if(wrote == -1) { + ASN__ENCODE_FAILED; + } + computed_size += wrote; + } + } else if(!elm->optional) { + ASN__ENCODE_FAILED; + } + } + } /* if(has_extensions) */ + + + { + asn_enc_rval_t er = {0, 0, 0}; + er.encoded = computed_size; + ASN__ENCODED_OK(er); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.c new file mode 100644 index 0000000..bf1dc27 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.c @@ -0,0 +1,1441 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->op->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t allocated_size; + unsigned bits_unused; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->allocated_size) { + size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8; + void *p; + + do { + new_size <<= 2; + } while(el_buf->length + size > new_size); + + p = REALLOC(el_buf->buf, new_size); + if(p) { + el_buf->buf = p; + el_buf->allocated_size = new_size; + } else { + return -1; + } + } + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} + +static void assert_unused_bits(const struct _el_buffer* p) { + if(p->length) { + assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0); + } else { + assert(p->bits_unused == 0); + } +} + +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + size_t common_len; + int ret = 0; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + if (a->buf && b->buf) { + ret = memcmp(a->buf, b->buf, common_len); + } + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + /* Ignore unused bits. */ + assert_unused_bits(a); + assert_unused_bits(b); + } + + return ret; +} + +static void +SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) { + size_t i; + + for(i = 0; i < count; i++) { + FREEMEM(el_buf[i].buf); + } + + FREEMEM(el_buf); +} + +enum SET_OF__encode_method { + SOES_DER, /* Distinguished Encoding Rules */ + SOES_CUPER /* Canonical Unaligned Packed Encoding Rules */ +}; + +static struct _el_buffer * +SET_OF__encode_sorted(const asn_TYPE_member_t *elm, + const asn_anonymous_set_ *list, + enum SET_OF__encode_method method) { + struct _el_buffer *encoded_els; + int edx; + + encoded_els = + (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0])); + if(encoded_els == NULL) { + return NULL; + } + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + const void *memb_ptr = list->array[edx]; + struct _el_buffer *encoding_el = &encoded_els[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) break; + + /* + * Encode the member into the prepared space. + */ + switch(method) { + case SOES_DER: + erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, + _el_addbytes, encoding_el); + break; + case SOES_CUPER: + erval = uper_encode(elm->type, + elm->encoding_constraints.per_constraints, + memb_ptr, _el_addbytes, encoding_el); + if(erval.encoded != -1) { + size_t extra_bits = erval.encoded % 8; + assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8); + encoding_el->bits_unused = (8 - extra_bits) & 0x7; + } + break; + default: + assert(!"Unreachable"); + break; + } + if(erval.encoded < 0) break; + } + + if(edx == list->count) { + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp); + + return encoded_els; + } else { + SET_OF__encode_sorted_free(encoded_els, edx); + return NULL; + } +} + + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + asn_enc_rval_t erval = {0,0,0}; + + if(!memb_ptr) ASN__ENCODE_FAILED; + + erval = + elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) return erval; + computed_size += erval.encoded; + } + + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = + der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(encoding_size < 0) { + ASN__ENCODE_FAILED; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + for(edx = 0; edx < list->count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) { + break; + } else { + encoding_size += encoded_el->length; + } + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if(edx == list->count) { + asn_enc_rval_t erval = {0,0,0}; + assert(computed_size == (size_t)encoding_size); + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } else { + ASN__ENCODE_FAILED; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval = {RC_OK, 0}; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->op->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + ASN__CALLBACK3("", 1); + } + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encs[n].buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +} + +int +SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->op->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + const asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (const asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, specs->struct_size); + break; + } + } +} + +int +SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->encoding_constraints.general_constraints; + if(!constr) constr = elm->type->encoding_constraints.general_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, -1, 0, &repeat); + ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)", + nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) { + if(rv.consumed == 0 && nelems > 200) { + /* Protect from SET OF NULL compression bombs. */ + ASN__DECODE_FAILED; + } + continue; + } + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +SET_OF_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + const asn_TYPE_member_t *elm = td->elements; + struct _el_buffer *encoded_els; + asn_enc_rval_t er = {0,0,0}; + size_t encoded_edx; + + if(!sptr) ASN__ENCODE_FAILED; + + list = _A_CSET_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = + (list->count < ct->lower_bound || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) { + ASN__ENCODE_FAILED; + } + + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + ASN__ENCODE_FAILED; + } else if(list->count == 0) { + /* When the list is empty add only the length determinant + * X.691, #20.6 and #11.9.4.1 + */ + if (uper_put_length(po, 0, 0)) { + ASN__ENCODE_FAILED; + } + ASN__ENCODED_OK(er); + } + + + /* + * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the encoded elements. + */ + encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER); + + for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) { + ssize_t may_encode; + size_t edx; + int need_eom = 0; + + if(ct && ct->effective_bits >= 0) { + may_encode = list->count; + } else { + may_encode = + uper_put_length(po, list->count - encoded_edx, &need_eom); + if(may_encode < 0) ASN__ENCODE_FAILED; + } + + for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) { + const struct _el_buffer *el = &encoded_els[edx]; + if(asn_put_many_bits(po, el->buf, + (8 * el->length) - el->bits_unused) < 0) { + break; + } + } + + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + + encoded_edx += may_encode; + } + + SET_OF__encode_sorted_free(encoded_els, list->count); + + if((ssize_t)encoded_edx == list->count) { + ASN__ENCODED_OK(er); + } else { + ASN__ENCODE_FAILED; + } +} + +asn_dec_rval_t +SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + const asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) ASN__DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->encoding_constraints.per_constraints) + ct = &td->encoding_constraints.per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) ASN__DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) ASN__DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) ASN__DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type, + elm->encoding_constraints.per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +struct comparable_ptr { + const asn_TYPE_descriptor_t *td; + const void *sptr; +}; + +static int +SET_OF__compare_cb(const void *aptr, const void *bptr) { + const struct comparable_ptr *a = aptr; + const struct comparable_ptr *b = bptr; + assert(a->td == b->td); + return a->td->op->compare_struct(a->td, a->sptr, b->sptr); +} + +int +SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr); + const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr); + + if(a && b) { + struct comparable_ptr *asorted; + struct comparable_ptr *bsorted; + ssize_t common_length; + ssize_t idx; + + if(a->count == 0) { + if(b->count) return -1; + return 0; + } else if(b->count == 0) { + return 1; + } + + asorted = MALLOC(a->count * sizeof(asorted[0])); + bsorted = MALLOC(b->count * sizeof(bsorted[0])); + if(!asorted || !bsorted) { + FREEMEM(asorted); + FREEMEM(bsorted); + return -1; + } + + for(idx = 0; idx < a->count; idx++) { + asorted[idx].td = td->elements->type; + asorted[idx].sptr = a->array[idx]; + } + + for(idx = 0; idx < b->count; idx++) { + bsorted[idx].td = td->elements->type; + bsorted[idx].sptr = b->array[idx]; + } + + qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb); + qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb); + + common_length = (a->count < b->count ? a->count : b->count); + for(idx = 0; idx < common_length; idx++) { + int ret = td->elements->type->op->compare_struct( + td->elements->type, asorted[idx].sptr, bsorted[idx].sptr); + if(ret) { + FREEMEM(asorted); + FREEMEM(bsorted); + return ret; + } + } + + FREEMEM(asorted); + FREEMEM(bsorted); + + if(idx < b->count) /* more elements in b */ + return -1; /* a is shorter, so put it first */ + if(idx < a->count) return 1; + } else if(!a) { + return -1; + } else if(!b) { + return 1; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET_OF = { + SET_OF_free, + SET_OF_print, + SET_OF_compare, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_decode_xer, + SET_OF_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + SET_OF_decode_oer, + SET_OF_encode_oer, +#endif +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + SET_OF_decode_uper, + SET_OF_encode_uper, + SET_OF_decode_aper, + 0, /* SET_OF_encode_aper */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + SET_OF_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + const asn_SET_OF_specifics_t *specs = + (const asn_SET_OF_specifics_t *)td->specifics; + asn_random_fill_result_t res_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + const asn_TYPE_member_t *elm = td->elements; + void *st = *sptr; + long max_elements = 5; + long slb = 0; /* Lower size bound */ + long sub = 0; /* Upper size bound */ + size_t rnd_len; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) { + return result_failed; + } + } + + switch(asn_random_between(0, 6)) { + case 0: max_elements = 0; break; + case 1: max_elements = 1; break; + case 2: max_elements = 5; break; + case 3: max_elements = max_length; break; + case 4: max_elements = max_length / 2; break; + case 5: max_elements = max_length / 4; break; + default: break; + } + sub = slb + max_elements; + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->size; + if(pc->flags & APC_SEMI_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->lower_bound + max_elements; + } else if(pc->flags & APC_CONSTRAINED) { + slb = pc->lower_bound; + sub = pc->upper_bound; + if(sub - slb > max_elements) sub = slb + max_elements; + } + } + + /* Bias towards edges of allowed space */ + switch(asn_random_between(-1, 4)) { + default: + case -1: + /* Prepare lengths somewhat outside of constrained range. */ + if(constraints->per_constraints + && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) { + switch(asn_random_between(0, 5)) { + default: + case 0: + rnd_len = 0; + break; + case 1: + if(slb > 0) { + rnd_len = slb - 1; + } else { + rnd_len = 0; + } + break; + case 2: + rnd_len = asn_random_between(0, slb); + break; + case 3: + if(sub < (ssize_t)max_length) { + rnd_len = sub + 1; + } else { + rnd_len = max_length; + } + break; + case 4: + if(sub < (ssize_t)max_length) { + rnd_len = asn_random_between(sub + 1, max_length); + } else { + rnd_len = max_length; + } + break; + case 5: + rnd_len = max_length; + break; + } + break; + } + /* Fall through */ + case 0: + rnd_len = asn_random_between(slb, sub); + break; + case 1: + if(slb < sub) { + rnd_len = asn_random_between(slb + 1, sub); + break; + } + /* Fall through */ + case 2: + rnd_len = asn_random_between(slb, slb); + break; + case 3: + if(slb < sub) { + rnd_len = asn_random_between(slb, sub - 1); + break; + } + /* Fall through */ + case 4: + rnd_len = asn_random_between(sub, sub); + break; + } + + for(; rnd_len > 0; rnd_len--) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + void *ptr = 0; + asn_random_fill_result_t tmpres = elm->type->op->random_fill( + elm->type, &ptr, &elm->encoding_constraints, + (max_length > res_ok.length ? max_length - res_ok.length : 0) + / rnd_len); + switch(tmpres.code) { + case ARFILL_OK: + ASN_SET_ADD(list, ptr); + res_ok.length += tmpres.length; + break; + case ARFILL_SKIPPED: + break; + case ARFILL_FAILED: + assert(ptr == 0); + return tmpres; + } + } + + return res_ok; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.h new file mode 100644 index 0000000..7681062 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef CONSTR_SET_OF_H +#define CONSTR_SET_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_struct_compare_f SET_OF_compare; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +oer_type_decoder_f SET_OF_decode_oer; +oer_type_encoder_f SET_OF_encode_oer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; +per_type_decoder_f SET_OF_decode_aper; +per_type_encoder_f SET_OF_encode_aper; +asn_random_fill_f SET_OF_random_fill; +extern asn_TYPE_operation_t asn_OP_SET_OF; + +#ifdef __cplusplus +} +#endif + +#endif /* CONSTR_SET_OF_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF_oer.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF_oer.c new file mode 100644 index 0000000..5200518 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_SET_OF_oer.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_DISABLE_OER_SUPPORT + +#include +#include +#include +#include + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) \ + do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#undef SET_PHASE +#define SET_PHASE(ctx, value) \ + do { \ + ctx->phase = value; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +/* + * The SEQUENCE OF and SET OF values utilize a "quantity field". + * It is is a pointless combination of #8.6 (length determinant, capable + * of encoding tiny and huge numbers in the shortest possible number of octets) + * and the variable sized integer. What could have been encoded by #8.6 alone + * is required to be encoded by #8.6 followed by that number of unsigned octets. + * This doesn't make too much sense. It seems that the original version of OER + * standard have been using the unconstrained unsigned integer as a quantity + * field, and this legacy have gone through ISO/ITU-T standardization process. + */ +static ssize_t +oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) { + const uint8_t *b; + const uint8_t *bend; + size_t len = 0; + size_t qty; + + ssize_t len_len = oer_fetch_length(ptr, size, &len); + if(len_len <= 0) { + *qty_r = 0; + return len_len; + } + + if((len_len + len) > size) { + *qty_r = 0; + return 0; + } + + b = (const uint8_t *)ptr + len_len; + bend = b + len; + + /* Skip the leading 0-bytes */ + for(; b < bend && *b == 0; b++) { + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *qty_r = 0; + return -1; + } + + for(qty = 0; b < bend; b++) { + qty = (qty << 8) + *b; + } + + if(qty > RSIZE_MAX) { /* A bit of C11 validation */ + *qty_r = 0; + return -1; + } + + *qty_r = qty; + assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr)); + return len_len + len; +} + +asn_dec_rval_t +SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *ptr, size_t size) { + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + asn_dec_rval_t rval = {RC_OK, 0}; + void *st = *struct_ptr; /* Target structure */ + asn_struct_ctx_t *ctx; /* Decoder context */ + size_t consumed_myself = 0; /* Consumed bytes from ptr. */ + + (void)constraints; + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously. + */ + switch(ctx->phase) { + case 0: { + /* + * Fetch number of elements to decode. + */ + size_t length = 0; + size_t len_size = oer_fetch_quantity(ptr, size, &length); + switch(len_size) { + case 0: + RETURN(RC_WMORE); + case -1: + RETURN(RC_FAIL); + default: + ADVANCE(len_size); + ctx->left = length; + } + } + NEXT_PHASE(ctx); + /* FALL THROUGH */ + case 1: { + /* Decode components of the extension root */ + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + const void *base_ptr = ptr; + ber_tlv_len_t base_ctx_left = ctx->left; + + assert(td->elements_count == 1); + + ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name); + + for(; ctx->left > 0; ctx->left--) { + asn_dec_rval_t rv = elm->type->op->oer_decoder( + opt_codec_ctx, elm->type, + elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr, + size); + ADVANCE(rv.consumed); + switch(rv.code) { + case RC_OK: + if(ASN_SET_ADD(list, ctx->ptr) != 0) { + RETURN(RC_FAIL); + } else { + ctx->ptr = 0; + /* + * This check is to avoid compression bomb with + * specs like SEQUENCE/SET OF NULL which don't + * consume data at all. + */ + if(rv.consumed == 0 && base_ptr == ptr + && (base_ctx_left - ctx->left) > 200) { + ASN__DECODE_FAILED; + } + break; + } + case RC_WMORE: + RETURN(RC_WMORE); + case RC_FAIL: + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + SET_PHASE(ctx, 3); + RETURN(RC_FAIL); + } + } + /* Decoded decently. */ + NEXT_PHASE(ctx); + } + /* Fall through */ + case 2: + /* Ignore fully decoded */ + assert(ctx->left == 0); + RETURN(RC_OK); + case 3: + /* Failed to decode. */ + RETURN(RC_FAIL); + } + + return rval; +} + +static ssize_t +oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) { + uint8_t buf[1 + sizeof(size_t)]; + uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */ + size_t encoded; + + do { + *b-- = qty; + qty >>= 8; + } while(qty); + + *b = sizeof(buf) - (b-buf) - 1; + encoded = sizeof(buf) - (b-buf); + if(cb(b, encoded, app_key) < 0) + return -1; + return encoded; +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +SET_OF_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const asn_TYPE_member_t *elm; + const asn_anonymous_set_ *list; + size_t computed_size = 0; + ssize_t qty_len; + int n; + + (void)constraints; + + if(!sptr) ASN__ENCODE_FAILED; + + elm = td->elements; + list = _A_CSET_FROM_VOID(sptr); + + qty_len = oer_put_quantity(list->count, cb, app_key); + if(qty_len < 0) { + ASN__ENCODE_FAILED; + } + computed_size += qty_len; + + for(n = 0; n < list->count; n++) { + void *memb_ptr = list->array[n]; + asn_enc_rval_t er = {0,0,0}; + er = elm->type->op->oer_encoder( + elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb, + app_key); + if(er.encoded < 0) { + return er; + } else { + computed_size += er.encoded; + } + } + + { + asn_enc_rval_t erval = {0,0,0}; + erval.encoded = computed_size; + ASN__ENCODED_OK(erval); + } +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.c new file mode 100644 index 0000000..aefaefd --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, + const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) { + return -1; + } + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) { + return -1; + } + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.h new file mode 100644 index 0000000..d80dea5 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constr_TYPE.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ +#include /* Random structures support */ + +#ifdef ASN_DISABLE_OER_SUPPORT +typedef void (oer_type_decoder_f)(void); +typedef void (oer_type_encoder_f)(void); +typedef void asn_oer_constraints_t; +#else +#include /* Octet Encoding Rules encoder */ +#include /* Octet Encoding Rules encoder */ +#endif + +/* + * Free the structure according to its specification. + * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead. + * Do not use directly. + */ +enum asn_struct_free_method { + ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */ + ASFM_FREE_UNDERLYING, /* free underlying members */ + ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */ +}; +typedef void (asn_struct_free_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, enum asn_struct_free_method); + +/* + * Free the structure including freeing the memory pointed to by ptr itself. + */ +#define ASN_STRUCT_FREE(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING) + +/* + * Free the memory used by the members of the structure without freeing the + * the structure pointer itself. + * ZERO-OUT the structure to the safe clean state. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + */ +#define ASN_STRUCT_RESET(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET) + +/* + * Free memory used by the members of the structure without freeing + * the structure pointer itself. + * (Retaining the pointer may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are dynamic.) + * AVOID using it in the application code; + * Use a safer ASN_STRUCT_RESET() instead. + */ +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING) + +/* + * Print the structure according to its specification. + */ +typedef int(asn_struct_print_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Compare two structs between each other. + * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater", + * and =0 if "equal to", for some type-specific, stable definition of + * "smaller", "greater" and "equal to". + */ +typedef int (asn_struct_compare_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_A, + const void *struct_B); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + +/* + * Fetch the desired type of the Open Type based on the + * Information Object Set driven constraints. + */ +typedef struct asn_type_selector_result_s { + const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */ + unsigned presence_index; /* Associated choice variant. */ +} asn_type_selector_result_t; +typedef asn_type_selector_result_t(asn_type_selector_f)( + const struct asn_TYPE_descriptor_s *parent_type_descriptor, + const void *parent_structure_ptr); + +/* + * Generalized functions for dealing with the speciic type. + * May be directly invoked by applications. + */ +typedef struct asn_TYPE_operation_s { + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_struct_compare_f *compare_struct; /* Compare two structures */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ + oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ + per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ + asn_random_fill_f *random_fill; /* Initialize with a random value */ + asn_outmost_tag_f *outmost_tag; /* */ +} asn_TYPE_operation_t; + +/* + * A constraints tuple specifying both the OER and PER constraints. + */ +typedef struct asn_encoding_constraints_s { + const struct asn_oer_constraints_s *oer_constraints; + const struct asn_per_constraints_s *per_constraints; + asn_constr_check_f *general_constraints; +} asn_encoding_constraints_t; + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_TYPE_operation_t *op; + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + unsigned tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + unsigned all_tags_count; /* Number of tags */ + + /* OER, PER, and general constraints */ + asn_encoding_constraints_t encoding_constraints; + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + unsigned elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02, /* Open Type */ + ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + unsigned optional; /* Following optional members, including current */ + unsigned memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_type_selector_f *type_selector; /* IoS runtime type selector */ + asn_encoding_constraints_t encoding_constraints; + int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */ + int (*default_value_set)(void **sptr); /* Set DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + unsigned el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relative */ +} asn_TYPE_tag2member_t; + +/* + * This function prints out the contents of the target language's structure + * (struct_ptr) into the file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +int asn_fprint(FILE *stream, /* Destination stream descriptor */ + const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.c new file mode 100644 index 0000000..df3c6c1 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.c @@ -0,0 +1,93 @@ +#include +#include + +int +asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *cb, void *key) { + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + const asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr, + const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->encoding_constraints.general_constraints( + type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) *errlen = arg.errlen; + + return ret; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.h new file mode 100644 index 0000000..0bd86a9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/constraints.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN1_CONSTRAINTS_VALIDATOR_H +#define ASN1_CONSTRAINTS_VALIDATOR_H + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int asn_check_constraints( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ +); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int(asn_constr_check_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ +); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define ASN__CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/converter-example.mk b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/converter-example.mk new file mode 100644 index 0000000..ef02a5b --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/converter-example.mk @@ -0,0 +1,33 @@ +include ./Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + ./converter-example.c\ + ./pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -D . /root/e2ap-v01.00.00.asn + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.c new file mode 100644 index 0000000..2c6a6f7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->der_encoder( + type_descriptor, struct_ptr, /* Pointer to the destination structure */ + 0, 0, consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->op->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, void *app_key) { +#define ASN1_DER_MAX_TAGS_COUNT 4 + ber_tlv_tag_t + tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)]; + ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)]; + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) { + ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT); + return -1; + } + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf = tags_buf_scratch; + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name, + tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.h new file mode 100644 index 0000000..e93944e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * Produces DER- and BER-compliant encoding. (DER is a subset of BER). + * + * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data + * produced by der_encode(). + */ +asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t(der_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.c new file mode 100644 index 0000000..0701738 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER decoder of any type. + */ +asn_dec_rval_t +oer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, + const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + ptr, size /* Buffer and its size */ + ); +} + +/* + * Open Type is encoded as a length (#8.6) followed by that number of bytes. + * Since we're just skipping, reading the length would be enough. + */ +ssize_t +oer_open_type_skip(const void *bufptr, size_t size) { + size_t len = 0; + return oer_fetch_length(bufptr, size, &len); +} + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, void **struct_ptr, + const void *bufptr, size_t size) { + asn_dec_rval_t dr; + size_t container_len = 0; + ssize_t len_len; + enum asn_struct_free_method dispose_method = + (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING; + + /* Get the size of a length determinant */ + len_len = oer_fetch_length(bufptr, size, &container_len); + if(len_len <= 0) { + return len_len; /* Error or more data expected */ + } + + /* + * len_len can't be bigger than size, but size without len_len + * should be bigger or equal to container length + */ + if(size - len_len < container_len) { + /* More data is expected */ + return 0; + } + + dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr, + (const uint8_t *)bufptr + len_len, container_len); + if(dr.code == RC_OK) { + return len_len + container_len; + } else { + /* Even if RC_WMORE, we can't get more data into a closed container. */ + td->op->free_struct(td, *struct_ptr, dispose_method); + *struct_ptr = NULL; + return -1; + } +} + + +asn_dec_rval_t +oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval = {RC_OK, 0}; + size_t expected_length = 0; + ssize_t len_len; + + (void)td; + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC( + 1, sizeof(ASN__PRIMITIVE_TYPE_t))); + if(!st) ASN__DECODE_FAILED; + } + + + /* + * X.696 (08/2015) #27.2 + * Encode length determinant as _number of octets_, but only + * if upper bound is not equal to lower bound. + */ + len_len = oer_fetch_length(ptr, size, &expected_length); + if(len_len > 0) { + rval.consumed = len_len; + ptr = (const char *)ptr + len_len; + size -= len_len; + } else if(len_len == 0) { + ASN__DECODE_STARVED; + } else if(len_len < 0) { + ASN__DECODE_FAILED; + } + + if(size < expected_length) { + ASN__DECODE_STARVED; + } else { + uint8_t *buf = MALLOC(expected_length + 1); + if(buf == NULL) { + ASN__DECODE_FAILED; + } else { + memcpy(buf, ptr, expected_length); + buf[expected_length] = '\0'; + } + FREEMEM(st->buf); + st->buf = buf; + st->size = expected_length; + + rval.consumed += expected_length; + return rval; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.h new file mode 100644 index 0000000..40992e9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_decoder.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_DECODER_H +#define OER_DECODER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. + * This function may be invoked directly by the application. + * Parses CANONICAL-OER and BASIC-OER. + */ +asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t(oer_type_decoder_f)( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + void **struct_ptr, + const void *buf_ptr, + size_t size); + +/* + * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. + * RETURN VALUES: + * -1: Fatal error deciphering length. + * 0: More data expected than bufptr contains. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_skip(const void *bufptr, size_t size); + +/* + * Read the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + void **struct_ptr, const void *bufptr, size_t size); + +/* + * Length-prefixed buffer decoding for primitive types. + */ +oer_type_decoder_f oer_decode_primitive; + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_DECODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.c new file mode 100644 index 0000000..a284cc2 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * The OER encoder of any type. + */ +asn_enc_rval_t +oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->op->oer_encoder( + type_descriptor, 0, + struct_ptr, /* Pointer to the destination structure */ + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for oer_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int +encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the oer_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + if(type_descriptor->op->oer_encoder == NULL) { + ec.encoded = -1; + ec.failed_type = type_descriptor; + ec.structure_ptr = struct_ptr; + ASN_DEBUG("OER encoder is not defined for %s", + type_descriptor->name); + } else { + ec = type_descriptor->op->oer_encoder( + type_descriptor, constraints, + struct_ptr, /* Pointer to the destination structure */ + encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + } + return ec; +} + +asn_enc_rval_t +oer_encode_primitive(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + ssize_t ret; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size); + + /* + * X.696 (08/2015) #27.2 + */ + ret = oer_serialize_length(st->size, cb, app_key); + if(ret < 0) { + ASN__ENCODE_FAILED; + } + er.encoded += ret; + + er.encoded += st->size; + if(cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +static int +oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) { + size_t *bytes = bytes_ptr; + (void)buffer; + *bytes += size; + return 0; +} + +ssize_t +oer_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t serialized_byte_count = 0; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes, + &serialized_byte_count); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + len_len = oer_serialize_length(serialized_byte_count, cb, app_key); + if(len_len == -1) return -1; + + er = td->op->oer_encoder(td, constraints, sptr, cb, app_key); + if(er.encoded < 0) return -1; + assert(serialized_byte_count == (size_t)er.encoded); + + return len_len + er.encoded; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.h new file mode 100644 index 0000000..6a7b681 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_encoder.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_ENCODER_H +#define OER_ENCODER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type. + * This function may be invoked directly by the application. + * Produces CANONICAL-OER output compatible with CANONICAL-OER + * and BASIC-OER decoders. + */ +asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* A variant of oer_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t oer_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ +); + +/* + * Type of the generic OER encoder. + */ +typedef asn_enc_rval_t(oer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * Write out the Open Type (X.696 (08/2015), #30). + * RETURN VALUES: + * -1: Fatal error encoding the type. + * >0: Number of bytes serialized. + */ +ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td, + const asn_oer_constraints_t *constraints, + const void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key); + + +/* + * Length-prefixed buffer encoding for primitive types. + */ +oer_type_encoder_f oer_encode_primitive; + +#ifdef __cplusplus +} +#endif + +#endif /* OER_ENCODER_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.c new file mode 100644 index 0000000..b15a3bc --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +#include + +/* + * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t +oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { + uint8_t first_byte; + size_t len_len; /* Length of the length determinant */ + const uint8_t *b; + const uint8_t *bend; + size_t len; + + if(size == 0) { + *len_r = 0; + return 0; + } + + first_byte = *(const uint8_t *)bufptr; + if((first_byte & 0x80) == 0) { /* Short form */ + *len_r = first_byte; /* 0..127 */ + return 1; + } + + len_len = (first_byte & 0x7f); + if((1 + len_len) > size) { + *len_r = 0; + return 0; + } + + b = (const uint8_t *)bufptr + 1; + bend = b + len_len; + + for(; b < bend && *b == 0; b++) { + /* Skip the leading 0-bytes */ + } + + if((bend - b) > (ssize_t)sizeof(size_t)) { + /* Length is not representable by the native size_t type */ + *len_r = 0; + return -1; + } + + for(len = 0; b < bend; b++) { + len = (len << 8) + *b; + } + + if(len > RSIZE_MAX) { /* A bit of C11 validation */ + *len_r = 0; + return -1; + } + + *len_r = len; + assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr)); + return len_len + 1; +} + + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t +oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, + void *app_key) { + uint8_t scratch[1 + sizeof(length)]; + uint8_t *sp = scratch; + int littleEndian = 1; /* Run-time detection */ + const uint8_t *pstart; + const uint8_t *pend; + const uint8_t *p; + int add; + + if(length <= 127) { + uint8_t b = length; + if(cb(&b, 1, app_key) < 0) { + return -1; + } + return 1; + } + + if(*(char *)&littleEndian) { + pstart = (const uint8_t *)&length + sizeof(length) - 1; + pend = (const uint8_t *)&length; + add = -1; + } else { + pstart = (const uint8_t *)&length; + pend = pstart + sizeof(length); + add = 1; + } + + for(p = pstart; p != pend; p += add) { + /* Skip leading zeros. */ + if(*p) break; + } + + for(sp = scratch + 1; ; p += add) { + *sp++ = *p; + if(p == pend) break; + } + assert((sp - scratch) - 1 <= 0x7f); + scratch[0] = 0x80 + ((sp - scratch) - 1); + + if(cb(scratch, sp - scratch, app_key) < 0) { + return -1; + } + + return sp - scratch; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.h new file mode 100644 index 0000000..dbc9b5f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/oer_support.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef OER_SUPPORT_H +#define OER_SUPPORT_H + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed OER constraints. + */ +typedef struct asn_oer_constraint_number_s { + unsigned width; /* ±8,4,2,1 fixed bytes */ + unsigned positive; /* 1 for unsigned number, 0 for signed */ +} asn_oer_constraint_number_t; +typedef struct asn_oer_constraints_s { + asn_oer_constraint_number_t value; + ssize_t size; /* -1 (no constraint) or >= 0 */ +} asn_oer_constraints_t; + + +/* + * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + */ +ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r); + +/* + * Serialize OER length. Returns the number of bytes serialized + * or -1 if a given callback returned with negative result. + */ +ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key); + + +#ifdef __cplusplus +} +#endif + +#endif /* OER_SUPPORT_H */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/pdu_collection.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/pdu_collection.c new file mode 100644 index 0000000..ea8309c --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/pdu_collection.c @@ -0,0 +1,15 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + */ + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +extern struct asn_TYPE_descriptor_s asn_DEF_E2AP_PDU; + + +struct asn_TYPE_descriptor_s *asn_pdu_collection[] = { + /* From module E2AP-PDU-Descriptions in /root/e2ap-v01.00.00.asn */ + &asn_DEF_E2AP_PDU, + 0 +}; + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.c new file mode 100644 index 0000000..8a3e39d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.c @@ -0,0 +1,185 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->uper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + +asn_dec_rval_t +aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +aper_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, + size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + ASN__DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + ASN__DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->op->aper_decoder) + ASN__DECODE_FAILED; /* PER is not compiled in */ + rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %zu, counted %zu", + rval.consumed, pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.h new file mode 100644 index 0000000..eea474a --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_decoder.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1. + * On success, this call always returns (.consumed >= 1), as per #11.1.3. + */ +asn_dec_rval_t uper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t uper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of the input data buffer, in bytes */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ +); + +/* + * Aligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3. + */ +asn_dec_rval_t aper_decode_complete( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Aligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +asn_dec_rval_t aper_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t(per_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, void **struct_ptr, + asn_per_data_t *per_data); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.c new file mode 100644 index 0000000..a35e1f0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.c @@ -0,0 +1,265 @@ +#include +#include +#include + +static int _uper_encode_flush_outp(asn_per_outp_t *po); + +static int +ignore_output(const void *data, size_t size, void *app_key) { + (void)data; + (void)size; + (void)app_key; + return 0; +} + +asn_enc_rval_t +uper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->uper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb ? cb : ignore_output; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; + } + + return er; +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + size_t new_size = arg->allocated ? arg->allocated : 8; + void *p; + + do { + new_size <<= 2; + } while(arg->length + size >= new_size); + + p = REALLOC(arg->buffer, new_size); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + arg->allocated = new_size; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +asn_enc_rval_t +aper_encode_to_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); + + return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key); +} + +ssize_t +aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, void **buffer_r) { + asn_enc_rval_t er = {0,0,0}; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +static int +_aper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + if (po->output) { + return po->output(po->tmpspace, buf - po->tmpspace, po->op_key); + } + return 0; +} + +asn_enc_rval_t +aper_encode(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er = {0,0,0}; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->op->aper_encoder) + ASN__ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.output = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->op->aper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_aper_encode_flush_outp(&po)) + ASN__ENCODE_FAILED; + } + + return er; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.h new file mode 100644 index 0000000..b615ef0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_encoder.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2006-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +asn_enc_rval_t aper_encode( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +asn_enc_rval_t uper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +asn_enc_rval_t aper_encode_to_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, + const void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +ssize_t +aper_encode_to_new_buffer( + const struct asn_TYPE_descriptor_s *td, + const asn_per_constraints_t *constraints, + const void *sptr, + void **buffer_r +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t(per_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const asn_per_constraints_t *constraints, const void *struct_ptr, + asn_per_outp_t *per_output); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.c new file mode 100644 index 0000000..28f3cb6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.c @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name, + size); + + bptr = buf; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE + " to %s and allowing to save %" ASN_PRI_SSIZE, + size, td->name, may_save); + if(may_save < 0) break; + if(per_put_many_bits(po, bptr, may_save * 8)) break; + bptr = (char *)bptr + may_save; + size -= may_save; + if(need_eom && uper_put_length(po, 0, 0)) { + FREEMEM(buf); + return -1; + } + } while(size); + + FREEMEM(buf); + if(size) return -1; + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, 0, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t CC_NOTUSED +uper_open_type_get_complex(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + asn_bit_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + asn_bit_data_string(pd), + asn_bit_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + ASN__DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + ASN__DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + ASN__DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN__DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + ASN__DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_TYPE_operation_t s_op; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.op = &s_op; + s_op.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 1) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + asn_bit_data_string(pd), asn_bit_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} + +static asn_dec_rval_t +aper_open_type_get_simple(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + ASN__STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = aper_get_length(pd, -1, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + ASN__DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if (((padding > 0 && padding < 8) || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN__DECODE_FAILED; + } else { + ASN_DEBUG("No padding"); + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +int +aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = aper_put_length(po, -1, toGo); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, size); + + return 0; +} + +asn_dec_rval_t +aper_open_type_get(const asn_codec_ctx_t *ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + return aper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + asn_TYPE_operation_t op_t; + + memset(&op_t, 0, sizeof(op_t)); + s_td.name = ""; + s_td.op = &op_t; + s_td.op->aper_decoder = uper_sot_suck; + + rv = aper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.h new file mode 100644 index 0000000..1493b2d --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_opentype.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2007-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, + asn_per_data_t *pd); + +/* + * X.691 (2015/08), #11.2 + * Returns -1 if error is encountered. 0 if all OK. + */ +int uper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd); + + +int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int aper_open_type_put(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.c new file mode 100644 index 0000000..2285677 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.c @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * X.691-201508 #10.9 General rules for encoding a length determinant. + * Get the optionally constrained length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound, + int *repeat) { + ssize_t value; + + *repeat = 0; + + /* #11.9.4.1 Encoding if constrained (according to effective bits) */ + if(ebits >= 0 && ebits <= 16) { + value = per_get_few_bits(pd, ebits); + if(value >= 0) value += lower_bound; + return value; + } + + value = per_get_few_bits(pd, 8); + if((value & 0x80) == 0) { /* #11.9.3.6 */ + return (value & 0x7F); + } else if((value & 0x40) == 0) { /* #11.9.3.7 */ + /* bit 8 ... set to 1 and bit 7 ... set to zero */ + value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8); + return value; /* potential -1 from per_get_few_bits passes through. */ + } else if(value < 0) { + ASN_DEBUG("END of stream reached for PER"); + return -1; + } + value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */ + if(value < 1 || value > 4) { + return -1; /* Prohibited by #11.9.3.8 */ + } + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, 0, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int +uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, + int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) { + int dummy = 0; + if(!need_eom) need_eom = &dummy; + + if(length <= 127) { /* #11.9.3.6 */ + *need_eom = 0; + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } else if(length < 16384) { /* #10.9.3.7 */ + *need_eom = 0; + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + } + + *need_eom = 0 == (length & 16383); + length >>= 14; + if(length > 4) { + *need_eom = 0; + length = 4; + } + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); + +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + if(length <= 64) { + /* #11.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length - 1, 7) ? -1 : 0; + } else { + int need_eom = 0; + if(uper_put_length(po, length, &need_eom) != (ssize_t)length + || need_eom) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +static int +per__long_range(long lb, long ub, unsigned long *range_r) { + unsigned long bounds_range; + if((ub < 0) == (lb < 0)) { + bounds_range = ub - lb; + } else if(lb < 0) { + assert(ub >= 0); + bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1)); + } else { + assert(!"Unreachable"); + return -1; + } + *range_r = bounds_range; + return 0; +} + +int +per_long_range_rebase(long v, long lb, long ub, unsigned long *output) { + unsigned long range; + + assert(lb <= ub); + + if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) { + /* Range error. */ + return -1; + } + + /* + * Fundamentally what we're doing is returning (v-lb). + * However, this triggers undefined behavior when the word width + * of signed (v) is the same as the size of unsigned (*output). + * In practice, it triggers the UndefinedSanitizer. Therefore we shall + * compute the ranges accurately to avoid C's undefined behavior. + */ + if((v < 0) == (lb < 0)) { + *output = v-lb; + return 0; + } else if(v < 0) { + unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else if(lb < 0) { + unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v; + assert(rebased <= range); /* By construction */ + *output = rebased; + return 0; + } else { + assert(!"Unreachable"); + return -1; + } +} + +int +per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) { + unsigned long range; + + if(per__long_range(lb, ub, &range) != 0) { + return -1; + } + + if(inp > range) { + /* + * We can encode something in the given number of bits that technically + * exceeds the range. This is an avenue for security errors, + * so we don't allow that. + */ + return -1; + } + + if(inp <= LONG_MAX) { + *outp = (long)inp + lb; + } else { + *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1); + } + + return 0; +} + +int32_t +aper_get_align(asn_per_data_t *pd) { + + if(pd->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7)); + return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); + } + return 0; +} + +ssize_t +aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + + if (aper_get_align(pd) < 0) + return -1; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +ssize_t +aper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%ld", length); + return length; + } else { + int repeat; + length = aper_get_length(pd, -1, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +ssize_t +aper_get_nsnnwn(asn_per_data_t *pd, int range) { + ssize_t value; + int bytes = 0; + + ASN_DEBUG("getting nsnnwn with range %d", range); + + if(range <= 255) { + int i; + + if (range < 0) return -1; + /* 1 -> 8 bits */ + for (i = 1; i <= 8; i++) { + int upper = 1 << i; + if (upper >= range) + break; + } + value = per_get_few_bits(pd, i); + return value; + } else if (range == 256){ + /* 1 byte */ + bytes = 1; + } else if (range <= 65536) { + /* 2 bytes */ + bytes = 2; + } else { + return -1; + } + if (aper_get_align(pd) < 0) + return -1; + value = per_get_few_bits(pd, 8 * bytes); + return value; +} + +int aper_put_align(asn_per_outp_t *po) { + + if(po->nboff & 0x7) { + ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7)); + if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) + return -1; + } + return 0; +} + +ssize_t +aper_put_length(asn_per_outp_t *po, int range, size_t length) { + + ASN_DEBUG("APER put length %zu with range %d", length, range); + + /* 10.9 X.691 Note 2 */ + if (range <= 65536 && range >= 0) + return aper_put_nsnnwn(po, range, length); + + if (aper_put_align(po) < 0) + return -1; + + if(length <= 127) /* #10.9.3.6 */{ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + } + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +int +aper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(aper_put_length(po, -1, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + +int +aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { + int bytes; + + ASN_DEBUG("aper put nsnnwn %d with range %d", number, range); + /* 10.5.7.1 X.691 */ + if(range < 0) { + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (number <= bits) + break; + } + bytes = i; + assert(i <= 4); + } + if(range <= 255) { + int i; + for (i = 1; i <= 8; i++) { + int bits = 1 << i; + if (range <= bits) + break; + } + return per_put_few_bits(po, number, i); + } else if(range == 256) { + bytes = 1; + } else if(range <= 65536) { + bytes = 2; + } else { /* Ranges > 64K */ + int i; + for (i = 1; ; i++) { + int bits = 1 << (8 * i); + if (range <= bits) + break; + } + assert(i <= 4); + bytes = i; + } + if(aper_put_align(po) < 0) /* Aligning on octet */ + return -1; +/* if(per_put_few_bits(po, bytes, 8)) + return -1; +*/ + return per_put_few_bits(po, number, 8 * bytes); +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.h new file mode 100644 index 0000000..23079c9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/per_support.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2005-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_data_s asn_per_data_t; +#define per_get_few_bits(data, bits) asn_get_few_bits(data, bits) +#define per_get_undo(data, bits) asn_get_undo(data, bits) +#define per_get_many_bits(data, dst, align, bits) \ + asn_get_many_bits(data, dst, align, bits) + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, + size_t lower_bound, int *repeat); + +ssize_t aper_get_length(asn_per_data_t *pd, int range, + int effective_bound_bits, int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); +ssize_t aper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); +ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + + +/* Temporary compatibility layer. Will get removed. */ +typedef struct asn_bit_outp_s asn_per_outp_t; +#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits) +#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits) +#define per_put_aligned_flush(out) asn_put_aligned_flush(out) + + +/* + * Rebase the given value as an offset into the range specified by the + * lower bound (lb) and upper bound (ub). + * RETURN VALUES: + * -1: Conversion failed due to range problems. + * 0: Conversion was successful. + */ +int per_long_range_rebase(long v, long lb, long ub, unsigned long *output); +/* The inverse operation: restores the value by the offset and its bounds. */ +int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * X.691 (08/2015) #11.9 "General rules for encoding a length determinant" + * Put the length "whole_length" to the Unaligned PER stream. + * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed. + * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length, + int *opt_need_eom); + +ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); + +/* Align the current bit position to octet bundary */ +int aper_put_align(asn_per_outp_t *po); +int32_t aper_get_align(asn_per_data_t *pd); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +int aper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.c new file mode 100644 index 0000000..5b87703 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + *ch_type = PXER_WMORE; + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: + *ch_type = PXER_WMORE; + return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.h new file mode 100644 index 0000000..b951c41 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_decoder.h @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + * Decodes CANONICAL-XER and BASIC-XER. + */ +asn_dec_rval_t xer_decode( + const struct asn_codec_ctx_s *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ +); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t(xer_type_decoder_f)( + const asn_codec_ctx_t *opt_codec_ctx, + const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general( + const asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf, + size_t chunk_size), + ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf, + size_t chunk_size, int have_more)); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is >= 0. + */ + typedef enum pxer_chunk_type { + PXER_WMORE, /* Chunk type is not clear, more data expected. */ + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.c new file mode 100644 index 0000000..4177ede --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.c @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} + +struct xer_buffer { + char *buffer; + size_t buffer_size; + size_t allocated_size; +}; + +static int +xer__buffer_append(const void *buffer, size_t size, void *app_key) { + struct xer_buffer *xb = app_key; + + while(xb->buffer_size + size + 1 > xb->allocated_size) { + size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64); + char *new_buf = MALLOC(new_size); + if(!new_buf) return -1; + if (xb->buffer) { + memcpy(new_buf, xb->buffer, xb->buffer_size); + } + FREEMEM(xb->buffer); + xb->buffer = new_buf; + xb->allocated_size = new_size; + } + + memcpy(xb->buffer + xb->buffer_size, buffer, size); + xb->buffer_size += size; + xb->buffer[xb->buffer_size] = '\0'; + return 0; +} + +enum xer_equivalence_e +xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1, + const void *struct2, FILE *opt_debug_stream) { + struct xer_buffer xb1 = {0, 0, 0}; + struct xer_buffer xb2 = {0, 0, 0}; + asn_enc_rval_t e1, e2; + asn_dec_rval_t rval; + void *sptr = NULL; + + if(!td || !struct1 || !struct2) { + if(opt_debug_stream) { + if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n"); + if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n"); + if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n"); + } + return XEQ_FAILURE; + } + + e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1); + if(e1.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + return XEQ_ENCODE1_FAILED; + } + + e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of %s failed\n", td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ENCODE1_FAILED; + } + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structures XER-encoded into different byte streams:\n=== " + "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n", + xb1.buffer, xb2.buffer); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DIFFERENT; + } else { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Both structures encoded into the same XER byte stream " + "of size %" ASN_PRI_SIZE ":\n%s", + xb1.buffer_size, xb1.buffer); + } + } + + rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer, + xb1.buffer_size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decode unexpectedly requires " + "more data:\n%s\n", + td->name, xb1.buffer); + } + /* Fall through */ + case RC_FAIL: + default: + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Structure %s XER decoding resulted in failure.\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_DECODE_FAILED; + } + + if(rval.consumed != xb1.buffer_size + && ((rval.consumed > xb1.buffer_size) + || xer_whitespace_span(xb1.buffer + rval.consumed, + xb1.buffer_size - rval.consumed) + != (xb1.buffer_size - rval.consumed))) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than " + "encoded (%" ASN_PRI_SIZE ")\n", + td->name, rval.consumed, xb1.buffer_size); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + /* + * Reuse xb2 to encode newly decoded structure. + */ + FREEMEM(xb2.buffer); + memset(&xb2, 0, sizeof(xb2)); + + e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2); + if(e2.encoded == -1) { + if(opt_debug_stream) { + fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n", + td->name); + } + ASN_STRUCT_FREE(*td, sptr); + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + ASN_STRUCT_FREE(*td, sptr); + sptr = 0; + + if(xb1.buffer_size != xb2.buffer_size + || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) { + if(opt_debug_stream) { + fprintf(opt_debug_stream, + "XER Encoding of round-trip decode of %s resulted in " + "different byte stream:\n" + "=== Original ===\n%s\n" + "=== Round-tripped ===\n%s\n", + xb1.buffer, xb2.buffer, td->name); + } + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_ROUND_TRIP_FAILED; + } + + FREEMEM(xb1.buffer); + FREEMEM(xb2.buffer); + return XEQ_SUCCESS; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.h new file mode 100644 index 0000000..9d75922 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_encoder.h @@ -0,0 +1,83 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags). + */ +asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses XER encoding/decoding to verify that: + * - Both structures encode into the same BASIC XER. + * - Both resulting XER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC XER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum xer_equivalence_e { + XEQ_SUCCESS, /* The only completely positive return value */ + XEQ_FAILURE, /* General failure */ + XEQ_ENCODE1_FAILED, /* First sructure XER encoding failed */ + XEQ_ENCODE2_FAILED, /* Second structure XER encoding failed */ + XEQ_DIFFERENT, /* Structures encoded into different XER */ + XEQ_DECODE_FAILED, /* Decode of the XER data failed */ + XEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum xer_equivalence_e xer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t(xer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.c b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.c new file mode 100644 index 0000000..36b4bfb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.h b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.h new file mode 100644 index 0000000..c3a36e7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/ASN1c/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/ric_benchmarking/e2-interface/e2sim/src/DEF/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/DEF/CMakeLists.txt new file mode 100644 index 0000000..21ed9f8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/DEF/CMakeLists.txt @@ -0,0 +1,35 @@ +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# +add_library( def_objects OBJECT e2sim_defs.cpp) + +target_include_directories (def_objects PUBLIC + $ + $ + PRIVATE src) + + +if( DEV_PKG ) + install( FILES + e2sim_defs.h + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp new file mode 100644 index 0000000..f1730d3 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.cpp @@ -0,0 +1,125 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include "e2sim_defs.h" +#include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} + +options_t read_input_options_old(int argc, char* argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + // Parse command line options + static struct option long_options[] = + { + {"ipv4", required_argument, 0, 'i'}, + {"ipv6", required_argument, 0, 'I'}, + {"port", required_argument, 0, 'p'}, + {"verbose", no_argument, 0, 'v'}, + }; + + while(1) + { + int option_index = 0; + + char c = getopt_long(argc, argv, "i:I:p:", long_options, &option_index); + + if(c == -1) + break; + + switch(c) + { + case 'i': + options.server_ip = optarg; + break; + case 'I': + break; + case 'p': + options.server_port = atoi(optarg); + if(options.server_port < 1 || options.server_port > 65535) + { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + break; + + default: + LOG_E("Error: unknown input option: %c\n", optopt); + exit(1); + } + } + + return options; +} + +options_t read_input_options(int argc, char *argv[]) +{ + options_t options; + + options.server_ip = (char*)DEFAULT_SCTP_IP; + options.server_port = X2AP_SCTP_PORT; + + if(argc == 3) //user provided IP and PORT + { + options.server_ip = argv[1]; + options.server_port = atoi(argv[2]); + if(options.server_port < 1 || options.server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", + options.server_port); + exit(1); + } + } + else if(argc == 2) //user provided only IP + { + options.server_ip = argv[1]; + } + else if(argc == 1) + { + options.server_ip = (char*)DEFAULT_SCTP_IP; + } + else + { + LOG_I("Unrecognized option.\n"); + LOG_I("Usage: %s [SERVER IP ADDRESS] [SERVER PORT]\n", argv[0]); + exit(1); + } + + return options; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h new file mode 100644 index 0000000..cf4a0d6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/DEF/e2sim_defs.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef E2SIM_DEFS_H +#define E2SIM_DEFS_H + +// #include +#include +#include + +#define VERSION "1.2.0" //May 2019 +#define DEFAULT_SCTP_IP "127.0.0.1" +#define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) +#define X2AP_SCTP_PORT 36421 +#define RIC_SCTP_SRC_PORT 36422 +#define MAX_SCTP_BUFFER 10000 +#define WORKDIR_ENV "E2SIM_DIR" //environment variable + +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + +#define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} +#define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} + +typedef struct SCTP_DATA { + unsigned char *data; + int len; +} sctp_data_t; + +typedef struct { + unsigned char buffer[MAX_SCTP_BUFFER]; + int len; +} sctp_buffer_t; + +typedef struct { + char* server_ip; + int server_port; + //... extend as needed +} options_t; + +options_t read_input_options(int argc, char *argv[]); + +#define min(a, b) ((a) < (b)) ? (a) : (b) + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/SCTP/CMakeLists.txt new file mode 100644 index 0000000..b069924 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/CMakeLists.txt @@ -0,0 +1,37 @@ +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + + +# For clarity: this generates object, not a lib as the CM command implies. +# +add_library( sctp_objects OBJECT e2sim_sctp.cpp e2sim_sctp.c) + +target_include_directories (sctp_objects PUBLIC + $ + $ + PRIVATE src) + + +if( DEV_PKG ) + install( FILES + e2sim_sctp.hpp + e2sim_sctp.h + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.c b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.c new file mode 100644 index 0000000..b4880f9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.c @@ -0,0 +1,173 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.h" + +const int CLIENT_SEND_COUNT = 1; +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + fprintf(stderr, "Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + return -1; + } + + int server_fd; + if((server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + return -1; + } + + struct sockaddr_in server_addr; + memset(&server_addr, 0, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(server_port); + server_addr.sin_addr.s_addr = inet_addr(server_ip_str); + + if(bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + return -1; + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + return -1; + } + + assert(server_fd != 0); + + fprintf(stderr, "SCTP server started on %s:%d\n", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd; + + if((client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + return -1; + } + + struct sockaddr_in peer_addr; + memset(&peer_addr, 0, sizeof(struct sockaddr_in)); + peer_addr.sin_family = AF_INET; + peer_addr.sin_port = htons(server_port); + peer_addr.sin_addr.s_addr = inet_addr(server_ip_str); + // if(inet_pton(AF_INET, server_ip, &(peer_addr.sin_addr)) != 1) { + // printf("Error converting IP address (%s) to sockaddr_in structure\n", server_ip); + // return 0; + // } + + fprintf(stderr, "Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) == -1) { + perror("connect"); + return -1; + } + + assert(client_fd != 0); + + fprintf(stderr, "OK\n"); + + return client_fd; + +} + +//ssize_t sctp_send_to_socket(int sockfd, const void* buf, size_t len) +int sctp_send_to_socket(int sockfd, const void* buf, size_t len) +{ + int sent_len = 0; + + sent_len = send(sockfd, buf, len, 0); + + if(sent_len == -1) + { + perror("sctp_send_to_socket"); + return -1; + } + + return sent_len; +} + +// int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size) +// { +// //int len = 0; +// +// memset(buf, 0, buf_size); +// +// int len = recv(sockfd, &buf, buf_size, 0); +// if(len == -1) +// { +// perror("sctp_recv_from_socket"); +// return -1; +// } +// +// return len; +// } + + +//test only +void client_send_multiple_test_msg(int client_fd) +{ + char buf[1024]; + int SEND_COUNT = 4; + + for(int i = 0; i < SEND_COUNT; i++) + { + fprintf(stderr, "Sending message %d of %d \n", i+1, SEND_COUNT); + + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf)-1, "DATA %d", i+1); + + if(send(client_fd, &buf, strlen(buf), 0) == -1) { + perror("send"); + return; + } + + memset(buf, 0, sizeof(buf)); + + if(recv(client_fd, &buf, sizeof(buf), 0) == -1) { + perror("recv"); + return; + } + + fprintf(stderr, "Server reply: %s\n", buf); + + sleep(1); + } + + fprintf(stderr, "Closing...\n"); + if(close(client_fd) == -1) { + perror("close"); + return; + } +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp new file mode 100644 index 0000000..51bb8a7 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.cpp @@ -0,0 +1,299 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include +#include +#include //for close() +#include +#include +#include +#include +#include //for inet_ntop() +#include + +#include "e2sim_sctp.hpp" +// #include "e2sim_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +int sctp_start_server(const char *server_ip_str, const int server_port) +{ + if(server_port < 1 || server_port > 65535) { + LOG_E("Invalid port number (%d). Valid values are between 1 and 65535.\n", server_port); + exit(1); + } + + int server_fd, af; + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + + server_addr = (struct sockaddr*)&server4_addr; + af = AF_INET; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + + server_addr = (struct sockaddr*)&server6_addr; + af = AF_INET6; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((server_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) { + perror("socket"); + exit(1); + } + + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + + if(bind(server_fd, server_addr, addr_len) == -1) { + perror("bind"); + exit(1); + } + + if(listen(server_fd, SERVER_LISTEN_QUEUE_SIZE) != 0) { + perror("listen"); + exit(1); + } + + assert(server_fd != 0); + + LOG_I("[SCTP] Server started on %s:%d", server_ip_str, server_port); + + return server_fd; +} + +int sctp_start_client(const char *server_ip_str, const int server_port) +{ + int client_fd, af; + + struct sockaddr* server_addr; + size_t addr_len; + + struct sockaddr_in server4_addr; + memset(&server4_addr, 0, sizeof(struct sockaddr_in)); + + struct sockaddr_in6 server6_addr; + memset(&server6_addr, 0, sizeof(struct sockaddr_in6)); + + if(inet_pton(AF_INET, server_ip_str, &server4_addr.sin_addr) == 1) + { + server4_addr.sin_family = AF_INET; + server4_addr.sin_port = htons(server_port); + server_addr = (struct sockaddr*)&server4_addr; + addr_len = sizeof(server4_addr); + } + else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) + { + server6_addr.sin6_family = AF_INET6; + server6_addr.sin6_port = htons(server_port); + server_addr = (struct sockaddr*)&server6_addr; + addr_len = sizeof(server6_addr); + } + else { + perror("inet_pton()"); + exit(1); + } + + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) + { + perror("socket"); + exit(1); + } + + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + if(connect(client_fd, server_addr, addr_len) == -1) { + perror("connect"); + exit(1); + } + assert(client_fd != 0); + + LOG_I("[SCTP] Connection established"); + + return client_fd; +} + +int sctp_accept_connection(const char *server_ip_str, const int server_fd) +{ + LOG_I("[SCTP] Waiting for new connection..."); + + struct sockaddr client_addr; + socklen_t client_addr_size; + int client_fd; + + //Blocking call + client_fd = accept(server_fd, &client_addr, &client_addr_size); + fprintf(stderr, "client fd is %d\n", client_fd); + if(client_fd == -1){ + perror("accept()"); + close(client_fd); + exit(1); + } + + //Retrieve client IP_ADDR + char client_ip6_addr[INET6_ADDRSTRLEN], client_ip4_addr[INET_ADDRSTRLEN]; + if(strchr(server_ip_str, ':') != NULL) //IPv6 + { + struct sockaddr_in6* client_ipv6 = (struct sockaddr_in6*)&client_addr; + inet_ntop(AF_INET6, &(client_ipv6->sin6_addr), client_ip6_addr, INET6_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip6_addr); + } + else { + struct sockaddr_in* client_ipv4 = (struct sockaddr_in*)&client_addr; + inet_ntop(AF_INET, &(client_ipv4->sin_addr), client_ip4_addr, INET_ADDRSTRLEN); + LOG_I("[SCTP] New client connected from %s", client_ip4_addr); + } + + return client_fd; +} + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data) +{ + // fprintf(stderr,"in sctp send data func\n"); + // fprintf(stderr,"data.len is %d", data.len); + int sent_len = send(socket_fd, (void*)(&(data.buffer[0])), data.len, 0); + //fprintf(stderr,"after getting sent_len\n"); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + + return sent_len; +} + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + /* + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + */ + return 1; +} + +/* +Receive data from SCTP socket +Outcome of recv() +-1: exit the program +0: close the connection ++: new data +*/ +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data) +{ + //clear out the data before receiving + //fprintf(stderr, "receive data1\n"); + memset(data.buffer, 0, sizeof(data.buffer)); + //fprintf(stderr, "receive data2\n"); + data.len = 0; + + //receive data from the socket + int recv_len = recv(socket_fd, &(data.buffer), sizeof(data.buffer), 0); + //fprintf(stderr, "receive data3\n"); + + if(recv_len == -1) + { + perror("[SCTP] recv"); + exit(1); + } + else if (recv_len == 0) + { + LOG_I("[SCTP] Connection closed by remote peer"); + if(close(socket_fd) == -1) + { + perror("[SCTP] close"); + } + return -1; + } + + data.len = recv_len; + + return recv_len; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.h b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.h new file mode 100644 index 0000000..c102df0 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.h @@ -0,0 +1,39 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/*! \file e2sim_sctp.h + */ + +#ifndef E2SIM_SCTP_H +#define E2SIM_SCTP_H + +void *handle_connection(void *thread_data); + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_send_to_socket(int sockfd, const void *buf, size_t len); + +//int sctp_recv_from_socket(int sockfd, void *buf, size_t buf_size); + +//test only +void client_send_multiple_test_msg(int client_fd); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.hpp b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.hpp new file mode 100644 index 0000000..b16fcf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/SCTP/e2sim_sctp.hpp @@ -0,0 +1,39 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_SCTP_HPP +#define E2SIM_SCTP_HPP + +#include "e2sim_defs.h" + +const int SERVER_LISTEN_QUEUE_SIZE = 10; + +int sctp_start_server(const char *server_ip_str, const int server_port); + +int sctp_start_client(const char *server_ip_str, const int server_port); + +int sctp_accept_connection(const char *server_ip_str, const int server_fd); + +int sctp_send_data(int &socket_fd, sctp_buffer_t &data); + +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data); + +int sctp_receive_data(int &socket_fd, sctp_buffer_t &data); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/base/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/base/CMakeLists.txt new file mode 100644 index 0000000..7dd379e --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/base/CMakeLists.txt @@ -0,0 +1,38 @@ +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# + +add_library( base_objects OBJECT e2sim.cpp) + +include_directories(../ASN1c) + +target_include_directories (base_objects PUBLIC + $ + $ + PRIVATE src) + +# header files should go into .../include/xfcpp/ +if( DEV_PKG ) + install( FILES + e2sim.hpp + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp new file mode 100644 index 0000000..5aa0aeb --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.cpp @@ -0,0 +1,256 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# Copyright (c) 2020 HCL Technologies Limited. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "e2sim.hpp" +#include "e2sim_defs.h" +#include "e2sim_sctp.hpp" +#include "e2ap_message_handler.hpp" +#include "encode_e2apv1.hpp" + +using namespace std; + +int client_fd = 0; + +std::unordered_map E2Sim::getRegistered_ran_functions() { + return ran_functions_registered; +} + +void E2Sim::register_subscription_callback(long func_id, SubscriptionCallback cb) { + fprintf(stderr,"%%%%about to register callback for subscription for func_id %d\n", func_id); + subscription_callbacks[func_id] = cb; + +} + +SubscriptionCallback E2Sim::get_subscription_callback(long func_id) { + fprintf(stderr, "%%%%we are getting the subscription callback for func id %d\n", func_id); + SubscriptionCallback cb; + + try { + cb = subscription_callbacks.at(func_id); + } catch(const std::out_of_range& e) { + throw std::out_of_range("Function ID is not registered"); + } + return cb; + +} + +void E2Sim::register_e2sm(long func_id, OCTET_STRING_t *ostr) { + + //Error conditions: + //If we already have an entry for func_id + + printf("%%%%about to register e2sm func desc for %d\n", func_id); + + ran_functions_registered[func_id] = ostr; + +} + + +void E2Sim::encode_and_send_sctp_data(E2AP_PDU_t* pdu) +{ + uint8_t *buf; + sctp_buffer_t data; + + int procedureCodeValue = e2ap_asn1c_get_procedureCode(pdu); + + data.len = e2ap_asn1c_encode_pdu(pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + if(procedureCodeValue == ProcedureCode_id_RICindication){ + + fprintf(stderr, "RIC Indication Procedurecode : %d \n",procedureCodeValue); + struct timeval ts_recv; + struct timeval ts_sent; + std::fstream io_file; + + sctp_send_data(client_fd, data); + gettimeofday(&ts_sent, NULL); + + sctp_buffer_t recv_buf; + + if(sctp_receive_data(client_fd, recv_buf) > 0){ + + gettimeofday(&ts_recv, NULL); + + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + asn_transfer_syntax syntax; + syntax = ATS_ALIGNED_BASIC_PER; + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu,recv_buf.buffer, recv_buf.len); + + int control_procedureCode = e2ap_asn1c_get_procedureCode(pdu); + fprintf(stderr, "Received Msg procedurecode is: %d\nfull buffer is : %s\n",control_procedureCode, recv_buf.buffer); + + //Received control procedure code is 111 because bouncer xapp not doing any pdu contraction/encode for control msg and its simply sending the msg for round trip calculation + if(control_procedureCode == 111 ){ + + io_file.open("e2sim_timestamp.txt", std::ios::in|std::ios::out|std::ios::app); + io_file << "Sent RIC Indication at time: " << (ts_sent.tv_sec * 1000000) + (ts_sent.tv_usec) << std::endl; + fprintf(stderr, "Sent RIC Indication at time: %ld\n" ,((ts_sent.tv_sec * 1000000) + (ts_sent.tv_usec))); + + io_file << "Received RIC Control Msg at time: " << (ts_recv.tv_sec * 1000000) + (ts_recv.tv_usec) << std::endl; + fprintf(stderr,"Received RIC Control Msg at time: %ld\n" ,((ts_recv.tv_sec * 1000000) + (ts_recv.tv_usec))); + io_file << "Time diff in Microseconds:" << ((ts_recv.tv_sec - ts_sent.tv_sec)*1000000 + (ts_recv.tv_usec - ts_sent.tv_usec)) << std::endl; + + fprintf(stderr, "Time diff in Microseconds: %ld\n",(((ts_recv.tv_sec - ts_sent.tv_sec)*1000000 + (ts_recv.tv_usec - ts_sent.tv_usec)))); + + io_file.close(); + } + + + } + } + else{ + sctp_send_data(client_fd, data); + } + +} + + +void E2Sim::wait_for_sctp_data() +{ + sctp_buffer_t recv_buf; + if(sctp_receive_data(client_fd, recv_buf) > 0) + { + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + e2ap_handle_sctp_data(client_fd, recv_buf, false, this); + } +} + + + +void E2Sim::generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId) { + encoding::generate_e2apv1_subscription_response_success(e2ap_pdu, reqActionIdsAccepted, reqActionIdsRejected, accept_size, reject_size, reqRequestorId, reqInstanceId); +} + +void E2Sim::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length) { + encoding::generate_e2apv1_indication_request_parameterized(e2ap_pdu, requestorId, instanceId, ranFunctionId, actionId, seqNum, ind_header_buf, header_length, ind_message_buf, message_length); + +} + +int E2Sim::run_loop(int argc, char* argv[]){ + + printf("Start E2 Agent (E2 Simulator\n"); + + ifstream simfile; + string line; + + simfile.open("simulation.txt", ios::in); + + if (simfile.is_open()) { + + while (getline(simfile, line)) { + cout << line << "\n"; + } + + simfile.close(); + + } + + bool xmlenc = false; + + options_t ops = read_input_options(argc, argv); + + printf("After reading input options\n"); + + //E2 Agent will automatically restart upon sctp disconnection + // int server_fd = sctp_start_server(ops.server_ip, ops.server_port); + + client_fd = sctp_start_client(ops.server_ip, ops.server_port); + E2AP_PDU_t* pdu_setup = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + printf("After starting client\n"); + printf("client_fd value is %d\n", client_fd); + + std::vector all_funcs; + + //Loop through RAN function definitions that are registered + + for (std::pair elem : ran_functions_registered) { + printf("looping through ran func\n"); + encoding::ran_func_info next_func; + + next_func.ranFunctionId = elem.first; + next_func.ranFunctionDesc = elem.second; + next_func.ranFunctionRev = (long)2; + all_funcs.push_back(next_func); + } + + printf("about to call setup request encode\n"); + + generate_e2apv1_setup_request_parameterized(pdu_setup, all_funcs); + + printf("After generating e2setup req\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_setup); + + printf("After XER Encoding\n"); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, pdu_setup, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_setup, buffer, buffer_size); + + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(client_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-REQUEST to peer"); + } + + sctp_buffer_t recv_buf; + + LOG_I("[SCTP] Waiting for SCTP data"); + + while(1) //constantly looking for data on SCTP interface + { + if(sctp_receive_data(client_fd, recv_buf) <= 0) + break; + + LOG_I("[SCTP] Received new data of size %d", recv_buf.len); + + e2ap_handle_sctp_data(client_fd, recv_buf, xmlenc, this); + if (xmlenc) xmlenc = false; + } + + return 0; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp new file mode 100644 index 0000000..eace5a8 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/base/e2sim.hpp @@ -0,0 +1,62 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef E2SIM_HPP +#define E2SIM_HPP + +#include + +extern "C" { +#include "E2AP-PDU.h" +#include "OCTET_STRING.h" +} + +typedef void (*SubscriptionCallback)(E2AP_PDU_t*); + +class E2Sim; +class E2Sim { + +private: + + std::unordered_map ran_functions_registered; + std::unordered_map subscription_callbacks; + + void wait_for_sctp_data(); + +public: + + std::unordered_map getRegistered_ran_functions(); + + void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId); + + void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length); + + SubscriptionCallback get_subscription_callback(long func_id); + + void register_e2sm(long func_id, OCTET_STRING_t* ostr); + + void register_subscription_callback(long func_id, SubscriptionCallback cb); + + void encode_and_send_sctp_data(E2AP_PDU_t* pdu); + + int run_loop(int argc, char* argv[]); + +}; + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/encoding/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/encoding/CMakeLists.txt new file mode 100644 index 0000000..755d00f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/encoding/CMakeLists.txt @@ -0,0 +1,38 @@ + +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# +add_library( encoding_objects OBJECT encode_e2apv1.cpp) + +include_directories(../ASN1c) + +target_include_directories (encoding_objects PUBLIC + $ + $ + PRIVATE src ) + + +if( DEV_PKG ) + install( FILES + encode_e2apv1.hpp + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp new file mode 100644 index 0000000..5529e72 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp @@ -0,0 +1,867 @@ + + +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#include +#include +#include +#include + +#include +#include + + +#include "encode_e2apv1.hpp" + +extern "C" { + + +#include "e2ap_asn1c_codec.h" +#include "GlobalE2node-ID.h" +#include "GlobalE2node-gNB-ID.h" +#include "GlobalgNB-ID.h" +#include "OCTET_STRING.h" +#include "asn_application.h" +#include "GNB-ID-Choice.h" +#include "ProtocolIE-Field.h" +#include "E2setupRequest.h" +#include "RICaction-ToBeSetup-Item.h" +#include "RICactions-ToBeSetup-List.h" +#include "RICeventTriggerDefinition.h" +#include "RICsubscriptionRequest.h" +#include "RICsubscriptionResponse.h" +#include "ProtocolIE-SingleContainer.h" +#include "RANfunctions-List.h" +#include "RICindication.h" +#include "RICsubsequentActionType.h" +#include "RICsubsequentAction.h" +#include "RICtimeToWait.h" + +} + +long encoding::get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { + + RICsubscriptionRequest_t orig_req = + e2ap_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long func_id; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + fprintf(stderr, "value of pres ranfuncid is %d\n", RICsubscriptionRequest_IEs__value_PR_RANfunctionID); + + if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) { + fprintf(stderr, "equal pres to ranfuncid\n"); + func_id = next_ie->value.choice.RANfunctionID; + } + + } + + fprintf(stderr, "After loop, func_id is %d\n", func_id); + + return func_id; + +} + +void encoding::generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu, std::vector all_funcs) { + char* ran_function_op_type = getenv("RAN_FUNCTION_OP_TYPE"); + LOG_D("Ran funciton : %s", ran_function_op_type); + ProtocolIE_ID_t prID; + if (ran_function_op_type != NULL) + { + if (strcmp(ran_function_op_type, "ADD") == 0) + { + prID = ProtocolIE_ID_id_RANfunctionsAdded; + } + else if (strcmp(ran_function_op_type, "DELETE")) + { + prID = ProtocolIE_ID_id_RANfunctionsDeleted; + } + } + else + { + prID = ProtocolIE_ID_id_RANfunctionsModified; + } + + + RICserviceUpdate_IEs_t *e2serviceUpdateList = (RICserviceUpdate_IEs_t *)calloc(1, sizeof(RICserviceUpdate_IEs_t)); + e2serviceUpdateList->id = prID; + e2serviceUpdateList->criticality = Criticality_reject; + e2serviceUpdateList->value.present = RICserviceUpdate_IEs__value_PR_RANfunctions_List; + + + for (int i=0; iid = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = 1; + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *nextRanFuncDesc; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = nextRanFuncRev + 1; + + ASN_SEQUENCE_ADD(&e2serviceUpdateList->value.choice.RANfunctions_List.list, itemIes); + } + + RICserviceUpdate_t *ricServiceUpdate = (RICserviceUpdate_t *)calloc(1, sizeof(RICserviceUpdate_t)); + ASN_SEQUENCE_ADD(&ricServiceUpdate->protocolIEs.list, e2serviceUpdateList); + + InitiatingMessage_t *initiatingMessage = (InitiatingMessage_t *)calloc(1, sizeof(InitiatingMessage_t)); + initiatingMessage->criticality = Criticality_reject; + initiatingMessage->procedureCode = ProcedureCode_id_RICserviceUpdate; + initiatingMessage->value.present = InitiatingMessage__value_PR_RICserviceUpdate; + initiatingMessage->value.choice.RICserviceUpdate = *ricServiceUpdate; + + E2AP_PDU_PR pres6 = E2AP_PDU_PR_initiatingMessage; + e2ap_pdu->present = pres6; + e2ap_pdu->choice.initiatingMessage = initiatingMessage; +} + +void encoding::generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, std::vector all_funcs) { + // long ranFunctionId, uint8_t *ranFuncDescEncoded, int ranFuncLength) { + + // uint8_t *buf = (uint8_t *)"gnb1" + + BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));; + gnb_bstring->buf = (uint8_t*)calloc(1,4); + gnb_bstring->size = 4; + gnb_bstring->buf[0] = 0xB5; + gnb_bstring->buf[1] = 0xC6; + gnb_bstring->buf[2] = 0x77; + gnb_bstring->buf[3] = 0x88; + + gnb_bstring->bits_unused = 3; + + uint8_t *buf2 = (uint8_t *)"747"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + plmn->buf = (uint8_t*)calloc(1,3); + memcpy(plmn->buf, buf2, 3); + plmn->size = 3; + + GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t)); + GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID; + gnbchoice->present = pres2; + gnbchoice->choice.gnb_ID = *gnb_bstring; + + GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t)); + gnb->plmn_id = *plmn; + gnb->gnb_id = *gnbchoice; + + GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t)); + e2gnb->global_gNB_ID = *gnb; + + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_PR pres; + pres = GlobalE2node_ID_PR_gNB; + globale2nodeid->present = pres; + globale2nodeid->choice.gNB = e2gnb; + + E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t)); + E2setupRequestIEs__value_PR pres3; + pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID; + e2setuprid->id = 3; + e2setuprid->criticality = 0; + e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid; + e2setuprid->value.present = pres3; + + + auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs); + ranFlistIEs->criticality = 0; + ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded; + ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List; + + + for (int i = 0; i < all_funcs.size(); i++) { + + ran_func_info nextRanFunc = all_funcs.at(i); + long nextRanFuncId = nextRanFunc.ranFunctionId; + OCTET_STRING_t *nextRanFuncDesc = nextRanFunc.ranFunctionDesc; + long nextRanFuncRev = nextRanFunc.ranFunctionRev; + + auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t)); + itemIes->id = ProtocolIE_ID_id_RANfunction_Item; + itemIes->criticality = Criticality_reject; + itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item; + itemIes->value.choice.RANfunction_Item.ranFunctionID = nextRanFuncId; + + int ranFuncLength = strlen((char*)nextRanFuncDesc); + + itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *nextRanFuncDesc; + itemIes->value.choice.RANfunction_Item.ranFunctionRevision = nextRanFuncRev; + + ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes); + + } + + E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t)); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid); + ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs); + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_E2setupRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + + initmsg->procedureCode = ProcedureCode_id_E2setup; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.E2setupRequest = *e2setupreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + +} + + + +void encoding::generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) { + + E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t)); + + uint8_t *buf = (uint8_t *)"gnb1"; + + BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t)); + ricid_bstring->buf = buf; + ricid_bstring->size = 4; + ricid_bstring->bits_unused = 0; + + uint8_t *buf2 = (uint8_t *)"plmn3"; + OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + plmn->buf = buf2; + plmn->size = 5; + + GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t)); + globalricid->pLMN_Identity = *plmn; + globalricid->ric_ID = *ricid_bstring; + + E2setupResponseIEs__value_PR pres1; + pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID; + + resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID; + resp_ies1->criticality = 0; + resp_ies1->value.present = pres1; + resp_ies1->value.choice.GlobalRIC_ID = *globalricid; + + E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t)); + int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1); + + + SuccessfulOutcome__value_PR pres; + pres = SuccessfulOutcome__value_PR_E2setupResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = 1; + successoutcome->criticality = 0; + successoutcome->value.present = pres; + successoutcome->value.choice.E2setupResponse = *e2setupresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + +} + + +void encoding::generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) { + + fprintf(stderr, "in sub 1\n"); + RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 2\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid); + fprintf(stderr, "in sub 3\n"); + auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t)); + fprintf(stderr, "in sub 4\n"); + ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid); + + fprintf(stderr, "in generate sub\n"); + uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers"; + fprintf(stderr, "in gen sub 1\n"); + OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + triggerdef->buf = (uint8_t *)calloc(1,20); + triggerdef->size = 20; + memcpy(triggerdef->buf, buf2, triggerdef->size); + + + fprintf(stderr, "sub1\n"); + ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item; + + RICaction_ToBeSetup_ItemIEs__value_PR pres6; + pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item; + + printf("sub2\n"); + + uint8_t *buf5 = (uint8_t *)"ActionDef"; + + OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t)); + actdef->buf = (uint8_t *)calloc(1,9); + actdef->size = 9; + memcpy(triggerdef->buf, buf5, 9); + + auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t)); + ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa); + + sa->ricTimeToWait = RICtimeToWait_w500ms; + sa->ricSubsequentActionType = RICsubsequentActionType_continue; + + printf("sub3\n"); + + RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t)); + action_item_ies->id = proto_id; + action_item_ies->criticality = 0; + + action_item_ies->value.present = pres6; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef; + action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa; + + + printf("sub5\n"); + + + RICsubscriptionRequest_IEs__value_PR pres3; + printf("sub6.1\n"); + pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; + ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails; + printf("sub6.2\n"); + + ricsubrid->criticality = 0; + ricsubrid->value.present = pres3; + printf("sub6.3\n"); + + ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef; + printf("sub6.4\n"); + + ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies); + + printf("sub7\n"); + + + ricreqid->id = ProtocolIE_ID_id_RICrequestID; + ricreqid->criticality = 0; + ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID; + ricreqid->value.choice.RICrequestID.ricRequestorID = 22; + ricreqid->value.choice.RICrequestID.ricInstanceID = 6; + + RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t)); + + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid); + ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid); + + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = ProcedureCode_id_RICsubscription; + initmsg->criticality = Criticality_reject; + initmsg->value.present = pres4; + initmsg->value.choice.RICsubscriptionRequest = *ricsubreq; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char));; + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + +} + +void encoding::generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], + long reqActionIdsRejected[], int accept_size, int reject_size, + long reqRequestorId, long reqInstanceId) { + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId; + + RICsubscriptionResponse_IEs_t *respfuncid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + respfuncid->id = ProtocolIE_ID_id_RANfunctionID; + respfuncid->criticality = 0; + respfuncid->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID; + respfuncid->value.choice.RANfunctionID = (long)0; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + + int numAccept = accept_size; + int numReject = reject_size; + + + + for (int i=0; i < numAccept ; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsAccepted[i]; + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respfuncid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + if (numReject > 0) { + + RICsubscriptionResponse_IEs_t *ricactionrejected = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + ricactionrejected->criticality = 0; + ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List; + + RICaction_NotAdmitted_List_t* rejectlist = + (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t)); + ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist; + + for (int i=0; i < numReject; i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = reqActionIdsRejected[i]; + + RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t)); + noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item; + noadmitie->criticality = 0; + noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item; + noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected); + } + } + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + printf("now printing xer of subscription response\n"); + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + printf("done printing xer of subscription response\n"); + + +} + +void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) { + + //Gather details of the request + + RICsubscriptionRequest_t orig_req = + sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest; + + RICsubscriptionResponse_IEs_t *ricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + int count = orig_req.protocolIEs.list.count; + int size = orig_req.protocolIEs.list.size; + + RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; + + fprintf(stderr, "count%d\n", count); + fprintf(stderr, "size%d\n", size); + + RICsubscriptionRequest_IEs__value_PR pres; + + long responseRequestorId; + long responseInstanceId; + long responseActionId; + + std::vector actionIds; + + for (int i=0; i < count; i++) { + RICsubscriptionRequest_IEs_t *next_ie = ies[i]; + pres = next_ie->value.present; + + fprintf(stderr, "next present value %d\n", pres); + + switch(pres) { + case RICsubscriptionRequest_IEs__value_PR_RICrequestID: + { + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + fprintf(stderr, "requestorId %d\n", requestorId); + fprintf(stderr, "instanceId %d\n", instanceId); + responseRequestorId = requestorId; + responseInstanceId = instanceId; + + break; + } + case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: + break; + case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: + { + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + int actionCount = actionList.list.count; + fprintf(stderr, "action count%d\n", actionCount); + + auto **item_array = actionList.list.array; + + for (int i=0; i < actionCount; i++) { + //RICaction_ToBeSetup_Item_t + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + fprintf(stderr, "Next Action ID %ld\n", actionId); + responseActionId = actionId; + actionIds.push_back(responseActionId); + } + + break; + } + } + + } + + fprintf(stderr, "After Processing Subscription Request\n"); + + fprintf(stderr, "requestorId %d\n", responseRequestorId); + fprintf(stderr, "instanceId %d\n", responseInstanceId); + + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i)); + + } + + + RICsubscriptionResponse_IEs_t *respricreqid = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + + respricreqid->id = ProtocolIE_ID_id_RICrequestID; + respricreqid->criticality = 0; + respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID; + respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId; + + respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId; + + + RICsubscriptionResponse_IEs_t *ricactionadmitted = + (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); + ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; + ricactionadmitted->criticality = 0; + ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List; + + RICaction_Admitted_List_t* admlist = + (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t)); + ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; + + for (int i=0; i < actionIds.size(); i++) { + fprintf(stderr, "in for loop i = %d\n", i); + + long aid = actionIds.at(i); + + RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); + admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item; + admitie->criticality = 0; + admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item; + admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid; + + ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie); + + } + + + RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); + + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); + ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted); + + + SuccessfulOutcome__value_PR pres2; + pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse; + SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t)); + successoutcome->procedureCode = ProcedureCode_id_RICsubscription; + successoutcome->criticality = 0; + successoutcome->value.present = pres2; + successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp; + + E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.successfulOutcome = successoutcome; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + + +} + +void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, + long requestorId, + long instanceId, + long ranFunctionId, + long actionId, + long seqNum, + uint8_t *ind_header_buf, + int header_length, + uint8_t *ind_message_buf, + int message_length) { + + //fprintf(stderr, "ind1\n"); + RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); + + RICindication_IEs__value_PR pres3; + + pres3 = RICindication_IEs__value_PR_RICrequestID; + ricind_ies->id = ProtocolIE_ID_id_RICrequestID; + ricind_ies->criticality = 0; + ricind_ies->value.present = pres3; + ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId; + ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId; + + //fprintf(stderr, "ind2\n"); + + pres3 = RICindication_IEs__value_PR_RANfunctionID; + ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID; + ricind_ies2->criticality = 0; + ricind_ies2->value.present = pres3; + ricind_ies2->value.choice.RANfunctionID = ranFunctionId; + + + ricind_ies3->id = ProtocolIE_ID_id_RICactionID; + ricind_ies3->criticality = 0; + pres3 = RICindication_IEs__value_PR_RICactionID; + ricind_ies3->value.present = pres3; + ricind_ies3->value.choice.RICactionID = actionId; + + + pres3 = RICindication_IEs__value_PR_RICindicationSN; + ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN; + ricind_ies4->criticality = 0; + ricind_ies4->value.present = pres3; + ricind_ies4->value.choice.RICindicationSN = seqNum; + + //Indication type is REPORT + pres3 = RICindication_IEs__value_PR_RICindicationType; + ricind_ies5->id = ProtocolIE_ID_id_RICindicationType; + ricind_ies5->criticality = 0; + ricind_ies5->value.present = pres3; + ricind_ies5->value.choice.RICindicationType = 0; + + + uint8_t *buf2 = (uint8_t *)"reportheader"; + OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t)); + + hdr_str->buf = (uint8_t*)calloc(1,header_length); + hdr_str->size = header_length; + memcpy(hdr_str->buf, ind_header_buf, header_length); + + //fprintf(stderr, "ind3\n"); + + ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length); + + pres3 = RICindication_IEs__value_PR_RICindicationHeader; + ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader; + ricind_ies6->criticality = 0; + ricind_ies6->value.present = pres3; + ricind_ies6->value.choice.RICindicationHeader.size = header_length; + memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length); + + ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192); + + + + + pres3 = RICindication_IEs__value_PR_RICindicationMessage; + ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage; + //fprintf(stderr, "after encoding message 1\n"); + + ricind_ies7->criticality = 0; + ricind_ies7->value.present = pres3; + + //fprintf(stderr, "after encoding message 2\n"); + + //fprintf(stderr, "after encoding message 3\n"); + ricind_ies7->value.choice.RICindicationMessage.size = message_length; + + //fprintf(stderr, "after encoding message 4\n"); + memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length); + + //fprintf(stderr, "after encoding message 5\n"); + + uint8_t *cpid_buf = (uint8_t *)"cpid"; + OCTET_STRING_t cpid_str; + + //printf("5.1\n"); + + int cpid_buf_len = strlen((char*)cpid_buf); + pres3 = RICindication_IEs__value_PR_RICcallProcessID; + ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID; + + ricind_ies8->criticality = 0; + ricind_ies8->value.present = pres3; + + ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len); + ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len; + + memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len); + + //printf("5.2\n"); + + RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t)); + + + int ret; + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2); + + //printf("5.3\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3); + + //printf("5.35\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4); + + //printf("5.36\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5); + + //printf("5.4\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6); + + //printf("5.5\n"); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7); + + ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8); + + + InitiatingMessage__value_PR pres4; + pres4 = InitiatingMessage__value_PR_RICindication; + InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t)); + initmsg->procedureCode = 5; + initmsg->criticality = 1; + initmsg->value.present = pres4; + initmsg->value.choice.RICindication = *ricindication; + + E2AP_PDU_PR pres5; + pres5 = E2AP_PDU_PR_initiatingMessage; + + e2ap_pdu->present = pres5; + e2ap_pdu->choice.initiatingMessage = initmsg; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); + //printf("error length %d\n", errlen); + //printf("error buf %s\n", error_buf); + + //xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); + fprintf(stderr,"RIC Indication Generated\n"); + +} + + diff --git a/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp new file mode 100644 index 0000000..6bbbe56 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/encoding/encode_e2apv1.hpp @@ -0,0 +1,61 @@ + +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ + +#ifndef ENCODE_E2APV1_HPP +#define ENCODE_E2APV1_HPP + +#include + + +extern "C" { + +#include "E2AP-PDU.h" +#include "OCTET_STRING.h" + +} + +namespace encoding { + + struct ran_func_info { + long ranFunctionId; + OCTET_STRING_t *ranFunctionDesc; + long ranFunctionRev; + }; + + long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu); + + void buildSubsReq(E2AP_PDU_t *pdu); + + void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *setup_req_pdu, std::vector all_funcs); + + void generate_e2apv1_setup_response(E2AP_PDU_t *setup_resp_pdu); + + void generate_e2apv1_subscription_request(E2AP_PDU_t *sub_req_pdu); + + void generate_e2apv1_subscription_response(E2AP_PDU_t *sub_resp_pdu, E2AP_PDU_t *sub_req_pdu); + + void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[], long reqActionIdsRejected[], int accept_size, int reject_size, long reqRequestorId, long reqInstanceId); + + void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, long requestorId, long instanceId, long ranFunctionId, long actionId, long seqNum, uint8_t *ind_header_buf, int header_length, uint8_t *ind_message_buf, int message_length); + + void generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu, std::vector all_funcs); +} + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/messagerouting/CMakeLists.txt b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/CMakeLists.txt new file mode 100644 index 0000000..9f85be9 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/CMakeLists.txt @@ -0,0 +1,43 @@ + +#/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +#******************************************************************************/ + +# For clarity: this generates object, not a lib as the CM command implies. +# +add_library( messagerouting_objects OBJECT + e2ap_message_handler.cpp + e2ap_asn1c_codec.c + ) + +include_directories(../ASN1c) +include_directories(../encoding) + +target_include_directories (messagerouting_objects PUBLIC + $ + $ + $ + PRIVATE src) + +# header files should go into .../include/xfcpp/ +if( DEV_PKG ) + install( FILES + e2ap_message_handler.hpp + DESTINATION ${install_inc} + ) +endif() +# --------------------------------------------------------------------------- diff --git a/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.c b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.c new file mode 100644 index 0000000..111ca9f --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.c @@ -0,0 +1,229 @@ +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_asn1c_codec.h" + + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu) +{ + printf("before\n"); + // xer_fprint(stdout, &asn_DEF_E2AP_PDU, (void *)pdu); + xer_fprint(stdout, &asn_DEF_E2AP_PDU, pdu); + printf("after\n"); + printf("\n"); +} + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data) +{ + xer_fprint(stdout, typeDescriptor, (void *)data); + printf("\n"); +} + + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + assert(pdu != 0); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2AP_PDU, (void **)&pdu, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return pdu; +} + + +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message) +{ + // E2AP_PDU_t *pdu = new E2AP_PDU_t(); + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + + // GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t)); + E2setupRequest_t *e2setuprequest = (E2setupRequest_t*)calloc(1,sizeof(E2setupRequest_t)); + + printf("xmlpdu1\n"); + + uint8_t buf[MAX_XML_BUFFER]; + asn_dec_rval_t rval; + size_t size; + FILE *f; + + char XML_path[300]; + char *work_dir = getenv(WORKDIR_ENV); + + printf("xmlpdu2\n"); + + strcpy(XML_path, work_dir); + strcat(XML_path, E2AP_XML_DIR); + strcat(XML_path, xml_message); + + printf("xmlpdu4\n"); + + LOG_D("Generate E2AP PDU from XML file: %s\n", XML_path); + memset(buf, 0, sizeof(buf)); + + printf("xmlpdu3\n"); + + f = fopen(XML_path, "r"); + if(!f){ + LOG_E("Unable to open %s. Make sure you have set the Environment Variable E2SIM_DIR, see README", XML_path) + } + + printf("xmlpdu5\n"); + + assert(f); + + printf("xmlpdu6\n"); + + size = fread(buf, 1, sizeof(buf), f); + if(size == 0 || size == sizeof(buf)) + { + LOG_E("Input too long: %s", XML_path); + exit(1); + } + + fclose(f); + + printf("xmlpdu7\n"); + + rval = xer_decode(0, &asn_DEF_E2setupRequest, (void **)&e2setuprequest, buf, size); + + printf("xmlpdu8\n"); + + assert(rval.code == RC_OK); + + return e2setuprequest; +} + + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer) +{ + int len; + + *buffer = NULL; + assert(pdu != NULL); + assert(buffer != NULL); + + len = aper_encode_to_new_buffer(&asn_DEF_E2AP_PDU, 0, pdu, (void **)buffer); + + if (len < 0) { + LOG_E("[E2AP ASN] Unable to aper encode"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Encoded succesfully, encoded size = %d", len); + } + + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E2AP_PDU, pdu); + + return len; +} + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len) +{ + asn_dec_rval_t dec_ret; + + assert(buffer != NULL); + + dec_ret = aper_decode(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, len, 0, 0); + + if (dec_ret.code != RC_OK) { + LOG_E("[E2AP ASN] Failed to decode pdu"); + exit(1); + } + else { + LOG_D("[E2AP ASN] Decoded succesfully"); + } +} + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu) +{ + int procedureCode = -1; + + switch(pdu->present) + { + case E2AP_PDU_PR_initiatingMessage: + fprintf(stderr,"initiating message\n"); + procedureCode = pdu->choice.initiatingMessage->procedureCode; + break; + + case E2AP_PDU_PR_successfulOutcome: + procedureCode = pdu->choice.successfulOutcome->procedureCode; + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; + break; + + default: + LOG_E("[E2AP] Error: Unknown index %d in E2AP PDU", (int)pdu->present); + break; + } + + return procedureCode; +} diff --git a/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.h b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.h new file mode 100644 index 0000000..314fd63 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_asn1c_codec.h @@ -0,0 +1,48 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_ASN1C_CODEC_H +#define E2AP_ASN1C_CODEC_H + +#include "e2sim_defs.h" +#include "E2AP-PDU.h" +#include "InitiatingMessage.h" +#include "SuccessfulOutcome.h" +#include "UnsuccessfulOutcome.h" + +#include "GlobalE2node-ID.h" +#include "E2setupRequest.h" + +#define ASN1C_PDU_PRINT_BUFFER 4096 +#define MAX_XML_BUFFER 10000 +#define E2AP_XML_DIR "/src/E2AP/XML/" + +void e2ap_asn1c_print_pdu(const E2AP_PDU_t* pdu); + +void asn1c_xer_print(asn_TYPE_descriptor_t *typeDescriptor, void *data); + +E2AP_PDU_t* e2ap_xml_to_pdu(char const* xml_message); +E2setupRequest_t* smaller_e2ap_xml_to_pdu(char const* xml_message); + +int e2ap_asn1c_encode_pdu(E2AP_PDU_t* pdu, unsigned char **buffer); + +void e2ap_asn1c_decode_pdu(E2AP_PDU_t* pdu, unsigned char *buffer, int len); + +int e2ap_asn1c_get_procedureCode(E2AP_PDU_t* pdu); + +#endif diff --git a/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.cpp b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.cpp new file mode 100644 index 0000000..aad6257 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.cpp @@ -0,0 +1,396 @@ + + +/***************************************************************************** +# * +# Copyright 2020 AT&T Intellectual Property * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#include "e2ap_message_handler.hpp" + +//#include +//#include + +#include "encode_e2apv1.hpp" + + +#include + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim) +{ + fprintf(stderr, "in e2ap_handle_sctp_data()\n"); + //decode the data into E2AP-PDU + E2AP_PDU_t* pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + + fprintf(stderr, "decoding...\n"); + + asn_transfer_syntax syntax; + + + syntax = ATS_ALIGNED_BASIC_PER; + + + fprintf(stderr, "full buffer\n%s\n", data.buffer); + // e2ap_asn1c_decode_pdu(pdu, data.buffer, data.len); + + auto rval = asn_decode(nullptr, syntax, &asn_DEF_E2AP_PDU, (void **) &pdu, + data.buffer, data.len); + + + int index = (int)pdu->present; + fprintf(stderr, "length of data %d\n", rval.consumed); + fprintf(stderr, "result %d\n", rval.code); + fprintf(stderr, "index is %d\n", index); + + fprintf(stderr, "showing xer of data\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu); + + int procedureCode = e2ap_asn1c_get_procedureCode(pdu); + index = (int)pdu->present; + + LOG_D("[E2AP] Unpacked E2AP-PDU: index = %d, procedureCode = %d\n", + index, procedureCode); + + switch(procedureCode) + { + + case ProcedureCode_id_E2setup: + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + e2ap_handle_E2SetupRequest(pdu, socket_fd); + LOG_I("[E2AP] Received SETUP-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-SUCCESS"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received SETUP-RESPONSE-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_Reset: //reset = 7 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RESET-REQUEST"); + break; + + case E2AP_PDU_PR_successfulOutcome: + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICsubscription: //RIC SUBSCRIPTION = 201 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: { //initiatingMessage + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + long func_id = encoding::get_function_id_from_subscription(pdu); + fprintf(stderr, "Function Id of message is %d\n", func_id); + SubscriptionCallback cb; + + bool func_exists = true; + + try { + cb = e2sim->get_subscription_callback(func_id); + } catch(const std::out_of_range& e) { + func_exists = false; + } + + if (func_exists) { + fprintf(stderr, "Calling callback function\n"); + cb(pdu); + } else { + fprintf(stderr, "Error: No RAN Function with this ID exists\n"); + } + // callback_kpm_subscription_request(pdu, socket_fd); + + } + break; + + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SUBSCRIPTION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU", index); + break; + } + break; + + case ProcedureCode_id_RICindication: // 205 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RIC-INDICATION-REQUEST"); + // e2ap_handle_RICSubscriptionRequest(pdu, socket_fd); + break; + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-INDICATION-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICindication); + break; + } + break; + + case ProcedureCode_id_RICserviceQuery: + switch (index) + { + case E2AP_PDU_PR_initiatingMessage: + LOG_I("[E2AP] Received RIC-Service-Query") + e2ap_handle_E2SeviceRequest(pdu, socket_fd, e2sim); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICserviceQuery); + break; + } + break; + + case ProcedureCode_id_RICserviceUpdate: + switch (index) + { + case E2AP_PDU_PR_successfulOutcome: + LOG_I("[E2AP] Received RIC-SERVICE-UPDATE-SUCCESS") + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RIC-SERVICE-UPDATE-FAILURE") + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_RICserviceUpdate); + break; + } + break; + + default: + + LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); + + break; + } +} + +void e2ap_handle_E2SeviceRequest(E2AP_PDU_t* pdu, int &socket_fd, E2Sim *e2sim) { + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + // prepare ran function defination + std::vector all_funcs; + + //Loop through RAN function definitions that are registered + + for (std::pair elem : e2sim->getRegistered_ran_functions()) { + printf("looping through ran func\n"); + encoding::ran_func_info next_func; + + next_func.ranFunctionId = elem.first; + next_func.ranFunctionDesc = elem.second; + next_func.ranFunctionRev = (long)3; + all_funcs.push_back(next_func); + } + + printf("about to call service update encode\n"); + + encoding::generate_e2apv1_service_update(res_pdu, all_funcs); + + LOG_D("[E2AP] Created E2-SERVICE-UPDATE"); + + e2ap_asn1c_print_pdu(res_pdu); + + sctp_buffer_t data; + + char *error_buf = (char*)calloc(300, sizeof(char)); + size_t errlen; + + asn_check_constraints(&asn_DEF_E2AP_PDU, res_pdu, error_buf, &errlen); + printf("error length %d\n", errlen); + printf("error buf %s\n", error_buf); + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SERVICE-UPDATE"); + } else { + LOG_E("[SCTP] Unable to send E2-SERVICE-UPDATE to peer"); + } +} + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) { + + + E2AP_PDU_t* res_pdu = (E2AP_PDU_t*)calloc(1, sizeof(E2AP_PDU)); + encoding::generate_e2apv1_setup_response(res_pdu); + + + LOG_D("[E2AP] Created E2-SETUP-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, res_pdu, buffer, buffer_size); + + data.len = er.encoded; + fprintf(stderr, "er encoded is %d\n", er.encoded); + + //data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buffer, er.encoded); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent E2-SETUP-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send E2-SETUP-RESPONSE to peer"); + } + + sleep(5); + + //Sending Subscription Request + + E2AP_PDU_t* pdu_sub = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + encoding::generate_e2apv1_subscription_request(pdu_sub); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_sub); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_sub, buffer2, buffer_size2); + + data2.len = er2.encoded; + memcpy(data2.buffer, buffer2, er2.encoded); + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent E2-SUBSCRIPTION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send E2-SUBSCRIPTION-REQUEST to peer"); + } + + +} + +/* +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + + //Send back Subscription Success Response + + E2AP_PDU_t* pdu_resp = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_subscription_response(pdu_resp, pdu); + + fprintf(stderr, "Subscription Response\n"); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_resp); + + auto buffer_size2 = MAX_SCTP_BUFFER; + unsigned char buffer2[MAX_SCTP_BUFFER]; + + sctp_buffer_t data2; + + auto er2 = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_resp, buffer2, buffer_size2); + data2.len = er2.encoded; + + fprintf(stderr, "er encded is %d\n", er2.encoded); + + memcpy(data2.buffer, buffer2, er2.encoded); + + if(sctp_send_data(socket_fd, data2) > 0) { + LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE to peer"); + } + + + //Send back an Indication + + E2AP_PDU_t* pdu_ind = (E2AP_PDU_t*)calloc(1,sizeof(E2AP_PDU)); + + generate_e2apv1_indication_request(pdu_ind); + + xer_fprint(stderr, &asn_DEF_E2AP_PDU, pdu_ind); + + auto buffer_size = MAX_SCTP_BUFFER; + unsigned char buffer[MAX_SCTP_BUFFER]; + + sctp_buffer_t data; + + auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu_ind, buffer, buffer_size); + data.len = er.encoded; + + fprintf(stderr, "er encded is %d\n", er.encoded); + + memcpy(data.buffer, buffer, er.encoded); + + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RIC-INDICATION-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RIC-INDICATION-REQUEST to peer"); + } + +} +*/ + + + diff --git a/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.hpp b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.hpp new file mode 100644 index 0000000..084caf6 --- /dev/null +++ b/ric_benchmarking/e2-interface/e2sim/src/messagerouting/e2ap_message_handler.hpp @@ -0,0 +1,50 @@ +/***************************************************************************** +# * +# Copyright 2019 AT&T Intellectual Property * +# Copyright 2019 Nokia * +# Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. * +# * +# Licensed under the Apache License, Version 2.0 (the "License"); * +# you may not use this file except in compliance with the License. * +# You may obtain a copy of the License at * +# * +# http://www.apache.org/licenses/LICENSE-2.0 * +# * +# Unless required by applicable law or agreed to in writing, software * +# distributed under the License is distributed on an "AS IS" BASIS, * +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +# See the License for the specific language governing permissions and * +# limitations under the License. * +# * +******************************************************************************/ +#ifndef E2AP_MESSAGE_HANDLER_HPP +#define E2AP_MESSAGE_HANDLER_HPP + +#include "e2sim.hpp" +#include "e2sim_sctp.hpp" + + +extern "C" { + #include "e2sim_defs.h" + #include "e2ap_asn1c_codec.h" +} + +void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data, bool xmlenc, E2Sim *e2sim); + +void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + +void e2ap_handle_E2SeviceRequest(E2AP_PDU_t* pdu, int &socket_fd, E2Sim *e2sim); + +#endif -- 2.16.6